mem: Fix DRAM bank occupancy for streaming access

This patch fixes an issue that allowed more than 100% bus utilisation
in certain cases.
This commit is contained in:
Ani Udipi
2013-11-01 11:56:18 -04:00
parent be62a142cf
commit 655bf86828

View File

@@ -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 {