diff options
Diffstat (limited to 'cpu/simple_cpu/simple_cpu.cc')
-rw-r--r-- | cpu/simple_cpu/simple_cpu.cc | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/cpu/simple_cpu/simple_cpu.cc b/cpu/simple_cpu/simple_cpu.cc index d70f0ccfa..6c22d7c81 100644 --- a/cpu/simple_cpu/simple_cpu.cc +++ b/cpu/simple_cpu/simple_cpu.cc @@ -75,14 +75,17 @@ using namespace std; SimpleCPU::TickEvent::TickEvent(SimpleCPU *c) - : Event(&mainEventQueue, CPU_Tick_Pri), cpu(c) + : Event(&mainEventQueue, CPU_Tick_Pri), cpu(c), multiplier(1) { } void SimpleCPU::TickEvent::process() { - cpu->tick(); + int count = multiplier; + do { + cpu->tick(); + } while (--count > 0 && cpu->status() == Running); } const char * @@ -269,6 +272,11 @@ SimpleCPU::regStats() .desc("Number of memory references") ; + notIdleFraction + .name(name() + ".not_idle_fraction") + .desc("Percentage of non-idle cycles") + ; + idleFraction .name(name() + ".idle_fraction") .desc("Percentage of idle cycles") @@ -799,6 +807,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(SimpleCPU) SimObjectParam<BaseMem *> dcache; Param<bool> defer_registration; + Param<int> multiplier; END_DECLARE_SIM_OBJECT_PARAMS(SimpleCPU) @@ -830,7 +839,9 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(SimpleCPU) INIT_PARAM_DFLT(icache, "L1 instruction cache object", NULL), INIT_PARAM_DFLT(dcache, "L1 data cache object", NULL), INIT_PARAM_DFLT(defer_registration, "defer registration with system " - "(for sampling)", false) + "(for sampling)", false), + + INIT_PARAM_DFLT(multiplier, "clock multiplier", 1) END_INIT_SIM_OBJECT_PARAMS(SimpleCPU) @@ -861,6 +872,8 @@ CREATE_SIM_OBJECT(SimpleCPU) #endif // FULL_SYSTEM + cpu->setTickMultiplier(multiplier); + return cpu; } |