24.22.4.1.2. AtomicSimpleCPU tick reschedule timing

Inside AtomicSimpleCPU::tick() we saw previously that the reschedule happens at:

    if (latency < clockPeriod())
        latency = clockPeriod();

    if (_status != Idle)
        reschedule(tickEvent, curTick() + latency, true);

so it is interesting to learn where that latency comes from.

From our logs, we see that all events happened with a 500 time unit interval between them, so that must be the value for all instructions of our simple example.

By GDBing it a bit, we see that none of our instructions incremented latency, and so it got set to clockPeriod(), which comes from ClockDomain::clockPeriod() which then likely comes from:

    parser.add_option("--cpu-clock", action="store", type="string",
                      default='2GHz',

because the time unit is picoseconds. This then shows on the config.ini as:

[system.cpu_clk_domain]
type=SrcClockDomain
clock=500