From 098b33cb8f702f60ff129b6e5c452988915604fe Mon Sep 17 00:00:00 2001 From: Lukas Steiner Date: Tue, 7 Sep 2021 13:58:23 +0200 Subject: [PATCH] Optimized all-bank refresh management. --- .../refresh/RefreshManagerAllBank.cpp | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp index 7ead6aec..74ab3648 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp @@ -170,7 +170,12 @@ sc_time RefreshManagerAllBank::start() if (activatedBanks > 0) nextCommand = Command::PREA; else - nextCommand = Command::RFMAB; + { + if (flexibilityCounter > maxPulledin) + nextCommand = Command::REFA; + else + nextCommand = Command::RFMAB; + } timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &refreshPayload); return timeToSchedule; @@ -203,15 +208,20 @@ void RefreshManagerAllBank::updateState(Command command) } else { - if (state == State::Pulledin) + if (sc_time_stamp() < timeForNextTrigger) // RFM through REFA flexibilityCounter--; else - state = State::Pulledin; - - if (flexibilityCounter == maxPulledin) { - state = State::Regular; - timeForNextTrigger += memSpec->getRefreshIntervalAB(); + if (state == State::Pulledin) + flexibilityCounter--; + else + state = State::Pulledin; + + if (flexibilityCounter == maxPulledin) + { + state = State::Regular; + timeForNextTrigger += memSpec->getRefreshIntervalAB(); + } } } break;