24.22.4.1.3. AtomicSimpleCPU memory access

It will be interesting to see how AtomicSimpleCPU makes memory access on GDB and to compare that with TimingSimpleCPU.

We assume that the memory access still goes through the CoherentXBar, but instead of generating an event to model delayed response, it must be doing the access directly.

Inside AtomicSimpleCPU::tick, we track ifetch_req and see:

fault = thread->itb->translateAtomic(ifetch_req, thread->getTC(),
                                        BaseTLB::Execute);

and later on after translation the memory is obtained at:

icache_latency = sendPacket(icachePort, &ifetch_pkt);

which sends the packet atomically through the port:

AtomicSimpleCPU::sendPacket(MasterPort &port, const PacketPtr &pkt) {
    return port.sendAtomic(pkt);
}

We can compare that with what happen sin TimingSimpleCPU:

thread->itb->translateTiming(ifetch_req, thread->getTC(),
        &fetchTranslation, BaseTLB::Execute);

and so there it is: the ITB classes are the same, but there are a separate Atomic and Timing methods!

The timing request is shown further at: sends the packet atomically.

Tested in gem5 b4879ae5b0b6644e6836b0881e4da05c64a6550d.