diff options
author | Andreas Hansson <andreas.hansson@arm.com> | 2014-08-26 10:14:38 -0400 |
---|---|---|
committer | Andreas Hansson <andreas.hansson@arm.com> | 2014-08-26 10:14:38 -0400 |
commit | 9e4cd5bf1ec71023b786b3a779ed4f3ea29ac214 (patch) | |
tree | d1bbf36638c9c57363bbfdad93c7a541988e66d1 | |
parent | 6fa8015b7fd50e75e97a175a511958b652eca11e (diff) | |
download | gem5-9e4cd5bf1ec71023b786b3a779ed4f3ea29ac214.tar.xz |
mem: Fix DRAMSim2 cycle check when restoring from checkpoint
This patch ensures the cycle check is still valid even restoring from
a checkpoint. In this case the DRAMSim2 cycle count is relative to the
startTick rather than 0.
-rw-r--r-- | src/mem/dramsim2.cc | 8 | ||||
-rw-r--r-- | src/mem/dramsim2.hh | 5 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/mem/dramsim2.cc b/src/mem/dramsim2.cc index cbba2767e..27dc36976 100644 --- a/src/mem/dramsim2.cc +++ b/src/mem/dramsim2.cc @@ -50,7 +50,7 @@ DRAMSim2::DRAMSim2(const Params* p) : port(name() + ".port", *this), wrapper(p->deviceConfigFile, p->systemConfigFile, p->filePath, p->traceFile, p->range.size() / 1024 / 1024, p->enableDebug), - retryReq(false), retryResp(false), + retryReq(false), retryResp(false), startTick(0), nbrOutstandingReads(0), nbrOutstandingWrites(0), drainManager(NULL), sendResponseEvent(this), tickEvent(this) @@ -91,6 +91,8 @@ DRAMSim2::init() void DRAMSim2::startup() { + startTick = curTick(); + // kick off the clock ticks schedule(tickEvent, clockEdge()); } @@ -287,7 +289,7 @@ DRAMSim2::accessAndRespond(PacketPtr pkt) void DRAMSim2::readComplete(unsigned id, uint64_t addr, uint64_t cycle) { - assert(cycle == divCeil(curTick(), + assert(cycle == divCeil(curTick() - startTick, wrapper.clockPeriod() * SimClock::Int::ns)); DPRINTF(DRAMSim2, "Read to address %lld complete\n", addr); @@ -315,7 +317,7 @@ void DRAMSim2::readComplete(unsigned id, uint64_t addr, uint64_t cycle) void DRAMSim2::writeComplete(unsigned id, uint64_t addr, uint64_t cycle) { - assert(cycle == divCeil(curTick(), + assert(cycle == divCeil(curTick() - startTick, wrapper.clockPeriod() * SimClock::Int::ns)); DPRINTF(DRAMSim2, "Write to address %lld complete\n", addr); diff --git a/src/mem/dramsim2.hh b/src/mem/dramsim2.hh index c61b84cbe..7153f3f84 100644 --- a/src/mem/dramsim2.hh +++ b/src/mem/dramsim2.hh @@ -104,6 +104,11 @@ class DRAMSim2 : public AbstractMemory bool retryResp; /** + * Keep track of when the wrapper is started. + */ + Tick startTick; + + /** * Keep track of what packets are outstanding per * address, and do so separately for reads and writes. This is * done so that we can return the right packet on completion from |