diff --git a/DRAMSys/library/src/controller/BankMachine.cpp b/DRAMSys/library/src/controller/BankMachine.cpp index f21a82d4..059683a9 100644 --- a/DRAMSys/library/src/controller/BankMachine.cpp +++ b/DRAMSys/library/src/controller/BankMachine.cpp @@ -78,6 +78,11 @@ void BankMachine::updateState(Command command) case Command::REFA: case Command::REFB: case Command::REFSB: case Command::RFMAB: sleeping = false; blocked = false; + + if(command == Command::RFMAB) { + blocked = false; + } + if(Configuration::getInstance().RFM == true) { if (RFMCounter > Configuration::getInstance().memSpec->getRAADEC()) { RFMCounter -= Configuration::getInstance().memSpec->getRAADEC(); diff --git a/DRAMSys/library/src/controller/Command.cpp b/DRAMSys/library/src/controller/Command.cpp index 7fbfd891..8ba7167c 100644 --- a/DRAMSys/library/src/controller/Command.cpp +++ b/DRAMSys/library/src/controller/Command.cpp @@ -89,7 +89,7 @@ std::string Command::toString() const "RFMSB", // 10 "PREA", // 11 "REFA", // 12 - "RFMA", // 13 + "RFMAB", // 13 "PDEA", // 14 "PDEP", // 15 "SREFEN", // 16 diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp index 952e932e..f411e916 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp @@ -30,6 +30,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Author: Lukas Steiner + * Matthias Jung */ #include "RefreshManagerAllBank.h" @@ -148,7 +149,14 @@ sc_time RefreshManagerAllBank::start() } else if (RFMRequired) { - nextCommand = Command::RFMAB; + if (activatedBanks > 0) + nextCommand = Command::PREA; + else + nextCommand = Command::RFMAB; + + for (auto it : bankMachinesOnRank) + it->block(); + timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &refreshPayload); return timeToSchedule; }