ruby: Added clock to ruby system
authorBrad Beckmann <Brad.Beckmann@amd.com>
Sat, 30 Jan 2010 04:29:19 +0000 (20:29 -0800)
committerBrad Beckmann <Brad.Beckmann@amd.com>
Sat, 30 Jan 2010 04:29:19 +0000 (20:29 -0800)
As a first step to migrate ruby to the M5 eventqueue, added a clock
variable to the ruby system.

configs/example/memtest-ruby.py
src/mem/ruby/eventqueue/RubyEventQueue.cc
src/mem/ruby/eventqueue/RubyEventQueue.hh
src/mem/ruby/system/RubySystem.py
src/mem/ruby/system/System.cc
src/mem/ruby/system/System.hh

index 8c79235123a6712403c30e0df615eddfc986c76a..844acefb4ff5632d09851f631e74827558fdc933 100644 (file)
@@ -158,7 +158,8 @@ network = SimpleNetwork(topology = makeCrossbar(l1_cntrl_nodes + \
 mem_size_mb = sum([int(dir_cntrl.directory.size_mb) \
                    for dir_cntrl in dir_cntrl_nodes])
 
-system.ruby = RubySystem(network = network,
+system.ruby = RubySystem(clock = '1GHz',
+                         network = network,
                          profiler = RubyProfiler(),
                          tracer = RubyTracer(),
                          debug = RubyDebug(),
index 271f8f1371e0d9b72b3f2f278fb60b66c63cf605..8e9b7b18db1e9b19f3ee26ae8c35085c112fa469 100644 (file)
@@ -40,9 +40,8 @@
 
 // Class public method definitions
 
-RubyEventQueue theEventQueue;
-
-RubyEventQueue::RubyEventQueue()
+RubyEventQueue::RubyEventQueue(Tick _clock)
+  : m_clock(_clock)
 {
   m_prio_heap_ptr = NULL;
   init();
index fe7bc28334fb6ba2587bec88b1ccbf12dc8473b4..8bd74a36ea2d228ba56dbc3afe7f8aab006589fd 100644 (file)
@@ -70,14 +70,14 @@ class RubyEventQueueNode;
 class RubyEventQueue {
 public:
   // Constructors
-  RubyEventQueue();
+  RubyEventQueue(Tick clock);
 
   // Destructor
   ~RubyEventQueue();
 
   // Public Methods
 
-  Time getTime() const { return m_globalTime; }
+  Time getTime() const { return curTick/m_clock; }
   void scheduleEvent(Consumer* consumer, Time timeDelta) { scheduleEventAbsolute(consumer, timeDelta + m_globalTime); }
   void scheduleEventAbsolute(Consumer* consumer, Time timeAbs);
   void triggerEvents(Time t); // called to handle all events <= time t
@@ -96,6 +96,7 @@ private:
   RubyEventQueue& operator=(const RubyEventQueue& obj);
 
   // Data Members (m_ prefix)
+  Tick m_clock;
   PrioHeap<RubyEventQueueNode>* m_prio_heap_ptr;
   Time m_globalTime;
   Time m_timeOfLastRecovery;
index 2e3b7f8714a01b651b21a776dc2a44eece363a19..21443cbd8d0c15cac2596248c26c75bbbea0cf62 100644 (file)
@@ -8,7 +8,7 @@ class RubySystem(SimObject):
         "insert random delays on message enqueue times");
     tech_nm = Param.Int(45,
         "device size used to calculate latency and area information");
-    freq_mhz = Param.Int(3000, "default frequency for the system");
+    clock = Param.Clock('1GHz', "")
     block_size_bytes = Param.Int(64,
         "default cache block size; must be a power of two");
     mem_size_mb = Param.Int("");
index e27b03041702fcb8c696b8184e2381da6b78823c..18404bd71b67b3fc11711a9b067334cbcaa69ef4 100644 (file)
@@ -60,7 +60,7 @@
 int RubySystem::m_random_seed;
 bool RubySystem::m_randomization;
 int RubySystem::m_tech_nm;
-int RubySystem::m_freq_mhz;
+Tick RubySystem::m_clock;
 int RubySystem::m_block_size_bytes;
 int RubySystem::m_block_size_bits;
 uint64 RubySystem::m_memory_size_bytes;
@@ -93,7 +93,7 @@ RubySystem::RubySystem(const Params *p)
     srandom(m_random_seed);
     m_randomization = p->randomization;
     m_tech_nm = p->tech_nm;
-    m_freq_mhz = p->freq_mhz;
+    m_clock = p->clock;
 
     m_block_size_bytes = p->block_size_bytes;
     assert(is_power_of_2(m_block_size_bytes));
@@ -107,6 +107,7 @@ RubySystem::RubySystem(const Params *p)
     m_profiler_ptr = p->profiler;
     m_tracer_ptr = p->tracer;
 
+    g_eventQueue_ptr = new RubyEventQueue(m_clock);
     g_system_ptr = this;
     m_mem_vec_ptr = new MemoryVector;
     m_mem_vec_ptr->setSize(m_memory_size_bytes);
@@ -129,7 +130,7 @@ void RubySystem::printSystemConfig(ostream & out)
   out << "  random_seed: " << m_random_seed << endl;
   out << "  randomization: " << m_randomization << endl;
   out << "  tech_nm: " << m_tech_nm << endl;
-  out << "  freq_mhz: " << m_freq_mhz << endl;
+  out << "  cycle_period: " << m_clock << endl;
   out << "  block_size_bytes: " << m_block_size_bytes << endl;
   out << "  block_size_bits: " << m_block_size_bits << endl;
   out << "  memory_size_bytes: " << m_memory_size_bytes << endl;
index 6f026188840bf719029c1b3b5eb93355d26022e0..3ef70df188c0f77f4cca4af82d0708a923b818db 100644 (file)
@@ -97,7 +97,6 @@ public:
   static int getRandomSeed() { return m_random_seed; }
   static int getRandomization() { return m_randomization; }
   static int getTechNm() { return m_tech_nm; }
-  static int getFreqMhz() { return m_freq_mhz; }
   static int getBlockSizeBytes() { return m_block_size_bytes; }
   static int getBlockSizeBits() { return m_block_size_bits; }
   static uint64 getMemorySizeBytes() { return m_memory_size_bytes; }
@@ -164,7 +163,7 @@ private:
   static int m_random_seed;
   static bool m_randomization;
   static int m_tech_nm;
-  static int m_freq_mhz;
+  static Tick m_clock;
   static int m_block_size_bytes;
   static int m_block_size_bits;
   static uint64 m_memory_size_bytes;