ruby: replace Time with Cycles in Memory Controller
authorNilay Vaish <nilay@cs.wisc.edu>
Mon, 11 Feb 2013 03:26:25 +0000 (21:26 -0600)
committerNilay Vaish <nilay@cs.wisc.edu>
Mon, 11 Feb 2013 03:26:25 +0000 (21:26 -0600)
src/mem/ruby/system/MemoryControl.hh
src/mem/ruby/system/MemoryNode.hh
src/mem/ruby/system/RubyMemoryControl.cc
src/mem/ruby/system/RubyMemoryControl.hh

index fb77eadb220e8281f6f48f7c3843f23fca745119..daa5b61fcc9d1105a10605e4a6618146cbb85a4c 100644 (file)
@@ -66,7 +66,7 @@ class MemoryControl : public ClockedObject, public Consumer
     virtual std::string getDescription() = 0;
 
     // Called from the directory:
-    virtual void enqueue(const MsgPtr& message, int latency ) = 0;
+    virtual void enqueue(const MsgPtr& message, Cycles latency) = 0;
     virtual void enqueueMemRef(MemoryNode& memRef) = 0;
     virtual void dequeue() = 0;
     virtual const Message* peek() = 0;
index 5bf98893556ff2c084ab586c122498b630431d99..f215ab649fad21f97d2dd366a138a2ee24720180 100644 (file)
@@ -40,8 +40,6 @@
 
 #include <iostream>
 
-#include "mem/protocol/MemoryRequestType.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/TypeDefines.hh"
 #include "mem/ruby/slicc_interface/Message.hh"
 
@@ -49,10 +47,10 @@ class MemoryNode
 {
   public:
     // old constructor
-    MemoryNode(const Time& time, int counter, const MsgPtr& msgptr,
+    MemoryNode(const Cycles& time, int counter, const MsgPtr& msgptr,
                const physical_address_t addr, const bool is_mem_read)
+        : m_time(time)
     {
-        m_time = time;
         m_msg_counter = counter;
         m_msgptr = msgptr;
         m_addr = addr;
@@ -61,11 +59,11 @@ class MemoryNode
     }
 
     // new constructor
-    MemoryNode(const Time& time, const MsgPtr& msgptr,
+    MemoryNode(const Cycles& time, const MsgPtr& msgptr,
                const physical_address_t addr, const bool is_mem_read,
                const bool is_dirty_wb)
+        : m_time(time)
     {
-        m_time = time;
         m_msg_counter = 0;
         m_msgptr = msgptr;
         m_addr = addr;
@@ -75,7 +73,7 @@ class MemoryNode
 
     void print(std::ostream& out) const;
 
-    Time m_time;
+    Cycles m_time;
     int m_msg_counter;
     MsgPtr m_msgptr;
     physical_address_t m_addr;
index 12155129970cac0d8f71f46530ce1c670347d929..542835102504f67e7b450c9b1a76df4e4f6b7c9f 100644 (file)
@@ -276,10 +276,9 @@ RubyMemoryControl::~RubyMemoryControl()
 
 // enqueue new request from directory
 void
-RubyMemoryControl::enqueue(const MsgPtr& message, int latency)
+RubyMemoryControl::enqueue(const MsgPtr& message, Cycles latency)
 {
-    Time current_time = g_system_ptr->getTime();
-    Time arrival_time = current_time + latency;
+    Cycles arrival_time = g_system_ptr->getTime() + latency;
     const MemoryMsg* memMess = safe_cast<const MemoryMsg*>(message.get());
     physical_address_t addr = memMess->getAddress().getAddress();
     MemoryRequestType type = memMess->getType();
@@ -376,14 +375,13 @@ RubyMemoryControl::printStats(ostream& out) const
 void
 RubyMemoryControl::enqueueToDirectory(MemoryNode req, Cycles latency)
 {
-    Time arrival_time = curTick() + (latency * clock);
+    Tick arrival_time = clockEdge(latency);
     Cycles ruby_arrival_time = g_system_ptr->ticksToCycles(arrival_time);
     req.m_time = ruby_arrival_time;
     m_response_queue.push_back(req);
 
     DPRINTF(RubyMemory, "Enqueueing msg %#08x %c back to directory at %15d\n",
-            req.m_addr, req.m_is_mem_read ? 'R':'W',
-            arrival_time);
+            req.m_addr, req.m_is_mem_read ? 'R':'W', arrival_time);
 
     // schedule the wake up
     m_consumer_ptr->scheduleEventAbsolute(ruby_arrival_time);
index bd94abaa64d637f58aee01ffcbf998b6855e3d1d..68ef054e37365a6fcf7f08e19b9f75cda5fa8fee 100644 (file)
@@ -72,7 +72,7 @@ class RubyMemoryControl : public MemoryControl
     std::string getDescription() { return m_description; };
 
     // Called from the directory:
-    void enqueue(const MsgPtr& message, int latency );
+    void enqueue(const MsgPtr& message, Cycles latency);
     void enqueueMemRef(MemoryNode& memRef);
     void dequeue();
     const Message* peek();