diff -r 019047ead23b src/mem/ruby/system/MemoryControl.hh --- a/src/mem/ruby/system/MemoryControl.hh Tue Aug 21 05:50:03 2012 -0400 +++ b/src/mem/ruby/system/MemoryControl.hh Tue Aug 21 21:00:48 2012 -0500 @@ -34,22 +34,22 @@ #include #include +#include "mem/protocol/MemoryControlRequestType.hh" #include "mem/protocol/MemoryMsg.hh" -#include "mem/protocol/MemoryControlRequestType.hh" #include "mem/ruby/common/Consumer.hh" #include "mem/ruby/profiler/MemCntrlProfiler.hh" #include "mem/ruby/slicc_interface/Message.hh" #include "mem/ruby/system/AbstractMemOrCache.hh" #include "mem/ruby/system/MemoryNode.hh" #include "mem/ruby/system/System.hh" -#include "sim/sim_object.hh" +#include "mem/mem_object.hh" ////////////////////////////////////////////////////////////////////////////// class Consumer; class MemoryControl : - public SimObject, public Consumer, public AbstractMemOrCache + public MemObject, public Consumer, public AbstractMemOrCache { public: MemoryControl(const Params *p); diff -r 019047ead23b src/mem/ruby/system/MemoryControl.cc --- a/src/mem/ruby/system/MemoryControl.cc Tue Aug 21 05:50:03 2012 -0400 +++ b/src/mem/ruby/system/MemoryControl.cc Tue Aug 21 21:00:48 2012 -0500 @@ -42,7 +42,7 @@ #include "mem/ruby/system/System.hh" using namespace std; -MemoryControl::MemoryControl(const Params *p) : SimObject(p), m_event(this) +MemoryControl::MemoryControl(const Params *p) : MemObject(p), m_event(this) { g_system_ptr->registerMemController(this); } diff -r 019047ead23b src/mem/ruby/system/MemoryControl.py --- a/src/mem/ruby/system/MemoryControl.py Tue Aug 21 05:50:03 2012 -0400 +++ b/src/mem/ruby/system/MemoryControl.py Tue Aug 21 21:00:48 2012 -0500 @@ -28,13 +28,11 @@ # Brad Beckmann from m5.params import * -from m5.SimObject import SimObject +from MemObject import MemObject -class MemoryControl(SimObject): +class MemoryControl(MemObject): abstract = True type = 'MemoryControl' cxx_class = 'MemoryControl' version = Param.Int(""); ruby_system = Param.RubySystem("") - - mem_bus_cycle_multiplier = Param.Int(10, ""); diff -r 019047ead23b src/mem/ruby/system/RubyMemoryControl.hh --- a/src/mem/ruby/system/RubyMemoryControl.hh Tue Aug 21 05:50:03 2012 -0400 +++ b/src/mem/ruby/system/RubyMemoryControl.hh Tue Aug 21 21:00:48 2012 -0500 @@ -116,7 +116,6 @@ std::string m_description; int m_msg_counter; - int m_mem_bus_cycle_multiplier; int m_banks_per_rank; int m_ranks_per_dimm; int m_dimms_per_channel; diff -r 019047ead23b src/mem/ruby/system/RubyMemoryControl.cc --- a/src/mem/ruby/system/RubyMemoryControl.cc Tue Aug 21 05:50:03 2012 -0400 +++ b/src/mem/ruby/system/RubyMemoryControl.cc Tue Aug 21 21:00:48 2012 -0500 @@ -149,7 +149,6 @@ RubyMemoryControl::RubyMemoryControl(const Params *p) : MemoryControl(p) { - m_mem_bus_cycle_multiplier = p->mem_bus_cycle_multiplier; m_banks_per_rank = p->banks_per_rank; m_ranks_per_dimm = p->ranks_per_dimm; m_dimms_per_channel = p->dimms_per_channel; @@ -309,7 +308,7 @@ m_input_queue.push_back(memRef); if (!m_event.scheduled()) { - schedule(m_event, curTick() + 1); + schedule(m_event, nextCycle()); } } @@ -377,17 +376,17 @@ void RubyMemoryControl::enqueueToDirectory(MemoryNode req, int latency) { - Time arrival_time = g_eventQueue_ptr->getTime() - + (latency * m_mem_bus_cycle_multiplier); - req.m_time = arrival_time; + Time arrival_time = curTick() + (latency * clock); + Time ruby_arrival_time = arrival_time / g_eventQueue_ptr->getClock(); + 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 * g_eventQueue_ptr->getClock()); + arrival_time); // schedule the wake up - g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr, arrival_time); + g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr, ruby_arrival_time); } // getBank returns an integer that is unique for each @@ -705,7 +704,7 @@ m_idleCount--; if (m_idleCount > 0) { assert(!m_event.scheduled()); - schedule(m_event, curTick() + m_mem_bus_cycle_multiplier); + schedule(m_event, curTick() + clock); } } diff -r 019047ead23b src/mem/ruby/system/RubyMemoryControl.py --- a/src/mem/ruby/system/RubyMemoryControl.py Tue Aug 21 05:50:03 2012 -0400 +++ b/src/mem/ruby/system/RubyMemoryControl.py Tue Aug 21 21:00:48 2012 -0500 @@ -36,6 +36,8 @@ cxx_class = 'RubyMemoryControl' version = Param.Int(""); + # Override the default clock + clock = '400MHz' banks_per_rank = Param.Int(8, ""); ranks_per_dimm = Param.Int(2, ""); dimms_per_channel = Param.Int(2, "");