24.21.2.2.2. gem5 Request
in TimingSimpleCPU
In TimingSimpleCPU, the request gets created per memory read:
Fault TimingSimpleCPU::initiateMemRead(Addr addr, unsigned size, Request::Flags flags, const std::vector<bool>& byte_enable) { ... RequestPtr req = std::make_shared<Request>( addr, size, flags, dataMasterId(), pc, thread->contextId());
and from gem5 functional vs atomic vs timing memory requests and gem5 functional vs atomic vs timing memory requests we remember that initiateMemRead
is actually started from the initiateAcc
instruction definitions for timing:
Fault LDRWL64_LIT::initiateAcc(ExecContext *xc, Trace::InstRecord *traceData) const { ... fault = initiateMemRead(xc, traceData, EA, Mem, memAccessFlags);
From this we see that initiateAcc
memory instructions are basically extracting the required information for the request, notably the address EA
and flags.