24.21.2.2.1. gem5 Request in AtomicSimpleCPU

In AtomicSimpleCPU, a single packet of each type is kept for the entire CPU, e.g.:

RequestPtr ifetch_req;

and it gets created at construction time:

AtomicSimpleCPU::AtomicSimpleCPU(AtomicSimpleCPUParams *p)
{
    ifetch_req = std::make_shared<Request>();

and then it gets modified for each request:

setupFetchRequest(ifetch_req);

which does:

req->setVirt(fetchPC, sizeof(MachInst), Request::INST_FETCH,
                instMasterId(), instAddr);

Virtual to physical address translation done by the CPU stores the physical address:

fault = thread->dtb->translateAtomic(req, thread->getTC(),
                                        BaseTLB::Read);

which eventually calls e.g. on fs with MMU enabled:

Fault
TLB::translateMmuOn(ThreadContext* tc, const RequestPtr &req, Mode mode,
                    Translation *translation, bool &delay, bool timing,
                    bool functional, Addr vaddr,
                    ArmFault::TranMethod tranMethod)
{
    req->setPaddr(pa);