diff options
author | Nathan Binkert <binkertn@umich.edu> | 2004-07-14 23:02:11 -0400 |
---|---|---|
committer | Nathan Binkert <binkertn@umich.edu> | 2004-07-14 23:02:11 -0400 |
commit | 0bbf9a4791c7214fd325354fea3ac230a501795a (patch) | |
tree | 0f69bbcaca396803b64ddee7d6cd6baf17e058a7 | |
parent | a6939573ce7061d042428287233502d8c0328c1c (diff) | |
parent | bc5c52335c73b761aed596d56eadfaa966e012f3 (diff) | |
download | gem5-0bbf9a4791c7214fd325354fea3ac230a501795a.tar.xz |
Merge zizzer.eecs.umich.edu:/bk/m5
into ziff.eecs.umich.edu:/z/binkertn/research/m5/latest
--HG--
extra : convert_revision : 87387b4f896ed945196b2090484c932c8b7e5abc
-rw-r--r-- | cpu/simple_cpu/simple_cpu.cc | 19 | ||||
-rw-r--r-- | cpu/simple_cpu/simple_cpu.hh | 11 |
2 files changed, 24 insertions, 6 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; } diff --git a/cpu/simple_cpu/simple_cpu.hh b/cpu/simple_cpu/simple_cpu.hh index 3692ab511..6ab231e7e 100644 --- a/cpu/simple_cpu/simple_cpu.hh +++ b/cpu/simple_cpu/simple_cpu.hh @@ -68,12 +68,11 @@ class SimpleCPU : public BaseCPU void tick(); private: - class TickEvent : public Event + struct TickEvent : public Event { - private: SimpleCPU *cpu; + int multiplier; - public: TickEvent(SimpleCPU *c); void process(); const char *description(); @@ -97,6 +96,12 @@ class SimpleCPU : public BaseCPU tickEvent.squash(); } + public: + void setTickMultiplier(int multiplier) + { + tickEvent.multiplier = multiplier; + } + private: Trace::InstRecord *traceData; template<typename T> |