From cb4572239944667f37db6a53ae1476dc3e91a14a Mon Sep 17 00:00:00 2001 From: Lukas Steiner Date: Fri, 25 Sep 2020 11:36:22 +0200 Subject: [PATCH] Simplify command multiplexers. --- .../src/controller/cmdmux/CmdMuxOldest.cpp | 26 ++++++++----------- .../src/controller/cmdmux/CmdMuxStrict.cpp | 18 +++++-------- .../powerdown/PowerDownManagerStaggered.cpp | 2 +- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp index 8091756b..769427d6 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp @@ -40,31 +40,27 @@ using namespace tlm; CommandTuple::Type CmdMuxOldest::selectCommand(ReadyCommands &readyCommands) { - readyCommands.erase(std::remove_if(readyCommands.begin(), readyCommands.end(), - [](CommandTuple::Type element) { - return std::get(element) != sc_time_stamp(); - }), - readyCommands.end()); + auto result = readyCommands.cend(); + auto it = readyCommands.cbegin(); + uint64_t lastPayloadID = UINT64_MAX; + uint64_t newPayloadID = 0; - if (!readyCommands.empty()) + while (it != readyCommands.cend()) { - auto it = readyCommands.begin(); - auto result = it; - uint64_t lastPayloadID = DramExtension::getPayloadID(std::get(*it)); - it++; - - while (it != readyCommands.end()) + if (std::get(*it) == sc_time_stamp()) { - uint64_t newPayloadID = DramExtension::getPayloadID(std::get(*it)); + newPayloadID = DramExtension::getPayloadID(std::get(*it)); if (newPayloadID < lastPayloadID) { lastPayloadID = newPayloadID; result = it; } - it++; } - return *result; + it++; } + + if (lastPayloadID != UINT64_MAX) + return *result; else return CommandTuple::Type(Command::NOP, nullptr, sc_max_time()); } diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp index a2334a1b..e01bb9c2 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp @@ -38,18 +38,11 @@ using namespace tlm; -CommandTuple::Type -CmdMuxStrict::selectCommand(ReadyCommands &readyCommands) +CommandTuple::Type CmdMuxStrict::selectCommand(ReadyCommands &readyCommands) { - readyCommands.erase(std::remove_if(readyCommands.begin(), readyCommands.end(), - [](CommandTuple::Type element) { - return std::get(element) != sc_time_stamp(); - }), - readyCommands.end()); - - if (!readyCommands.empty()) + for (auto it : readyCommands) { - for (auto it : readyCommands) + if (std::get(it) == sc_time_stamp()) { if (isCasCommand(std::get(it))) { @@ -60,7 +53,10 @@ CmdMuxStrict::selectCommand(ReadyCommands &readyCommands) } } } - for (auto it : readyCommands) + } + for (auto it : readyCommands) + { + if (std::get(it) == sc_time_stamp()) { if (isRasCommand(std::get(it))) return it; diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp index 62d247c4..4e1cdb7e 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp @@ -40,7 +40,7 @@ using namespace tlm; PowerDownManagerStaggered::PowerDownManagerStaggered(Rank rank, CheckerIF *checker) : rank(rank), checker(checker) { - setUpDummy(powerDownPayload, UINT64_MAX, rank); + setUpDummy(powerDownPayload, UINT64_MAX - 1, rank); } void PowerDownManagerStaggered::triggerEntry()