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;