From 655bf868282ac2d9d6a711167efa936e7057d405 Mon Sep 17 00:00:00 2001 From: Ani Udipi Date: Fri, 1 Nov 2013 11:56:18 -0400 Subject: mem: Fix DRAM bank occupancy for streaming access This patch fixes an issue that allowed more than 100% bus utilisation in certain cases. --- src/mem/simple_dram.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/mem') diff --git a/src/mem/simple_dram.cc b/src/mem/simple_dram.cc index 280ab640d..39f320dc5 100644 --- a/src/mem/simple_dram.cc +++ b/src/mem/simple_dram.cc @@ -957,13 +957,19 @@ SimpleDRAM::estimateLatency(DRAMPacket* dram_pkt, Tick inTime) // but do care about bank being free for access rowHitFlag = true; - if (bank.freeAt < inTime) { + // When a series of requests arrive to the same row, + // DDR systems are capable of streaming data continuously + // at maximum bandwidth (subject to tCCD). Here, we approximate + // this condition, and assume that if whenever a bank is already + // busy and a new request comes in, it can be completed with no + // penalty beyond waiting for the existing read to complete. + if (bank.freeAt > inTime) { + accLat += bank.freeAt - inTime; + bankLat += tBURST; + } else { // CAS latency only accLat += tCL; bankLat += tCL; - } else { - accLat += 0; - bankLat += 0; } } else { -- cgit v1.2.3