diff --git a/DRAMSys/simulator/src/controller/core/ControllerCore.cpp b/DRAMSys/simulator/src/controller/core/ControllerCore.cpp index da9df026..cb40e4bb 100644 --- a/DRAMSys/simulator/src/controller/core/ControllerCore.cpp +++ b/DRAMSys/simulator/src/controller/core/ControllerCore.cpp @@ -134,17 +134,21 @@ void ControllerCore::triggerRefresh(tlm::tlm_generic_payload& payload) state->cleanUp(time); - if (!refreshManager->isInvalidated(payload, time) && !powerDownManager->isInSelfRefresh(bank)) { + if (!refreshManager->isInvalidated(payload, time) && !powerDownManager->isInSelfRefresh(bank)) + { printDebugMessage("Triggering refresh on bank " + to_string(bank.ID())); powerDownManager->wakeUpForRefresh(bank, time); //expects PDNA and PDNP to exit without delay bool pdnpToSrefTransition = false; - if (config.PowerDownMode == EPowerDownMode::Staggered) { + if (config.PowerDownMode == EPowerDownMode::Staggered) + { pdnpToSrefTransition = state->getLastCommand(Command::PDNPX,bank).getStart() >= time; } - if (pdnpToSrefTransition) { + if (pdnpToSrefTransition) + { powerDownManager->sleep(bank,time); } - else { + else + { refreshManager->scheduleRefresh(payload, time); } } diff --git a/DRAMSys/simulator/src/controller/core/refresh/RefreshManagerBankwise.cpp b/DRAMSys/simulator/src/controller/core/refresh/RefreshManagerBankwise.cpp index 456d4530..3aac9feb 100644 --- a/DRAMSys/simulator/src/controller/core/refresh/RefreshManagerBankwise.cpp +++ b/DRAMSys/simulator/src/controller/core/refresh/RefreshManagerBankwise.cpp @@ -89,10 +89,10 @@ void RefreshManagerBankwise::scheduleRefresh(tlm::tlm_generic_payload& payload, ScheduledCommand refresh(Command::AutoRefresh, time, getExecutionTime(Command::AutoRefresh, refreshPayload), extension); controllerCore.getCommandChecker(Command::AutoRefresh).delayToSatisfyConstraints(refresh); controllerCore.state->change(refresh); + extension.incrementRow(); controllerCore.controller.send(refresh, refreshPayload); - extension.incrementRow(); - planNextRefresh(extension.getBank()); + planNextRefresh(extension.getBank()); } void RefreshManagerBankwise::planNextRefresh(Bank bank) diff --git a/DRAMSys/simulator/src/controller/core/scheduling/checker/PrechargeAllChecker.cpp b/DRAMSys/simulator/src/controller/core/scheduling/checker/PrechargeAllChecker.cpp index 3dd96e35..aaf0f661 100644 --- a/DRAMSys/simulator/src/controller/core/scheduling/checker/PrechargeAllChecker.cpp +++ b/DRAMSys/simulator/src/controller/core/scheduling/checker/PrechargeAllChecker.cpp @@ -83,7 +83,7 @@ void PrechargeAllChecker::delayToSatisfyConstraints(ScheduledCommand& command) c } else if (lastCommand.getCommand() == Command::SREFX) { - command.establishMinDistanceFromStart(lastCommand.getEnd(), config.memSpec.tXSR); + command.establishMinDistanceFromStart(lastCommand.getStart(), config.memSpec.tXSR); } else reportFatal("Precharge All Checker", diff --git a/DRAMSys/simulator/src/controller/core/scheduling/checker/RefreshChecker.cpp b/DRAMSys/simulator/src/controller/core/scheduling/checker/RefreshChecker.cpp index 271ce6db..111e3d31 100644 --- a/DRAMSys/simulator/src/controller/core/scheduling/checker/RefreshChecker.cpp +++ b/DRAMSys/simulator/src/controller/core/scheduling/checker/RefreshChecker.cpp @@ -104,7 +104,7 @@ void RefreshChecker::delayToSatisfyConstraints(ScheduledCommand& command) const } else if (lastCommand.getCommand() == Command::SREFX) { - command.establishMinDistanceFromStart(lastCommand.getEnd(), config.memSpec.tXSR); + command.establishMinDistanceFromStart(lastCommand.getStart(), config.memSpec.tXSR); } else if (lastCommand.getCommand() == Command::AutoRefresh) {