diff --git a/DRAMSys/library/src/controller/BankMachine.cpp b/DRAMSys/library/src/controller/BankMachine.cpp index 836f8d42..ed821c19 100644 --- a/DRAMSys/library/src/controller/BankMachine.cpp +++ b/DRAMSys/library/src/controller/BankMachine.cpp @@ -44,12 +44,12 @@ BankMachine::BankMachine(SchedulerIF *scheduler, CheckerIF *checker, Bank bank) bankgroup = BankGroup(bank.ID() / memSpec->banksPerGroup); } -std::pair BankMachine::getNextCommand() +std::tuple BankMachine::getNextCommand() { if (sc_time_stamp() == timeToSchedule) - return std::pair(nextCommand, currentPayload); + return std::tuple(nextCommand, currentPayload); else - return std::pair(Command::NOP, nullptr); + return std::tuple(Command::NOP, nullptr); } void BankMachine::updateState(Command command) diff --git a/DRAMSys/library/src/controller/BankMachine.h b/DRAMSys/library/src/controller/BankMachine.h index 1b647417..9c3b4cfc 100644 --- a/DRAMSys/library/src/controller/BankMachine.h +++ b/DRAMSys/library/src/controller/BankMachine.h @@ -58,7 +58,7 @@ class BankMachine public: virtual ~BankMachine() {} virtual sc_time start() = 0; - std::pair getNextCommand(); + std::tuple getNextCommand(); void updateState(Command); void block(); diff --git a/DRAMSys/library/src/controller/Controller.cpp b/DRAMSys/library/src/controller/Controller.cpp index 20caeda1..a9265dbd 100644 --- a/DRAMSys/library/src/controller/Controller.cpp +++ b/DRAMSys/library/src/controller/Controller.cpp @@ -239,28 +239,28 @@ void Controller::controllerMethod() it->start(); // (5) Choose one request and send it to DRAM - std::pair commandPair; - std::vector> readyCommands; + std::tuple commandTuple; + std::vector> readyCommands; // (5.1) Check for power-down commands (PDEA/PDEP/SREFEN or PDXA/PDXP/SREFEX) for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) { - commandPair = powerDownManagers[rankID]->getNextCommand(); - if (commandPair.second != nullptr) - readyCommands.push_back(commandPair); + commandTuple = powerDownManagers[rankID]->getNextCommand(); + if (std::get<1>(commandTuple) != nullptr) + readyCommands.push_back(commandTuple); else { // (5.2) Check for refresh commands (PREA/PRE or REFA/REFB) - commandPair = refreshManagers[rankID]->getNextCommand(); - if (commandPair.second != nullptr) - readyCommands.push_back(commandPair); + commandTuple = refreshManagers[rankID]->getNextCommand(); + if (std::get<1>(commandTuple) != nullptr) + readyCommands.push_back(commandTuple); else { // (5.3) Check for bank commands (PRE, ACT, RD/RDA or WR/WRA) for (auto it : bankMachinesOnRank[rankID]) { - commandPair = it->getNextCommand(); - if (commandPair.second != nullptr) - readyCommands.push_back(commandPair); + commandTuple = it->getNextCommand(); + if (std::get<1>(commandTuple) != nullptr) + readyCommands.push_back(commandTuple); } } } @@ -269,29 +269,29 @@ void Controller::controllerMethod() bool readyCmdBlocked = false; if (!readyCommands.empty()) { - commandPair = cmdMux->selectCommand(readyCommands); - if (commandPair.second != nullptr) // can happen with FIFO strict + commandTuple = cmdMux->selectCommand(readyCommands); + if (std::get<1>(commandTuple) != nullptr) // can happen with FIFO strict { - Rank rank = DramExtension::getRank(commandPair.second); - BankGroup bankgroup = DramExtension::getBankGroup(commandPair.second); - Bank bank = DramExtension::getBank(commandPair.second); + Rank rank = DramExtension::getRank(std::get<1>(commandTuple)); + BankGroup bankgroup = DramExtension::getBankGroup(std::get<1>(commandTuple)); + Bank bank = DramExtension::getBank(std::get<1>(commandTuple)); - if (isRankCommand(commandPair.first)) + if (isRankCommand(std::get<0>(commandTuple))) { for (auto it : bankMachinesOnRank[rank.ID()]) - it->updateState(commandPair.first); + it->updateState(std::get<0>(commandTuple)); } else - bankMachines[bank.ID()]->updateState(commandPair.first); + bankMachines[bank.ID()]->updateState(std::get<0>(commandTuple)); - refreshManagers[rank.ID()]->updateState(commandPair.first); - powerDownManagers[rank.ID()]->updateState(commandPair.first); - checker->insert(commandPair.first, rank, bankgroup, bank); + refreshManagers[rank.ID()]->updateState(std::get<0>(commandTuple)); + powerDownManagers[rank.ID()]->updateState(std::get<0>(commandTuple)); + checker->insert(std::get<0>(commandTuple), rank, bankgroup, bank); - if (isCasCommand(commandPair.first)) + if (isCasCommand(std::get<0>(commandTuple))) { - scheduler->removeRequest(commandPair.second); - respQueue->insertPayload(commandPair.second, memSpec->getIntervalOnDataStrobe(commandPair.first).end); + scheduler->removeRequest(std::get<1>(commandTuple)); + respQueue->insertPayload(std::get<1>(commandTuple), memSpec->getIntervalOnDataStrobe(std::get<0>(commandTuple)).end); sc_time triggerTime = respQueue->getTriggerTime(); if (triggerTime != sc_max_time()) @@ -302,7 +302,7 @@ void Controller::controllerMethod() if (ranksNumberOfPayloads[rank.ID()] == 0) powerDownManagers[rank.ID()]->triggerEntry(); - sendToDram(commandPair.first, commandPair.second); + sendToDram(std::get<0>(commandTuple), std::get<1>(commandTuple)); } else readyCmdBlocked = true; diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxIF.h b/DRAMSys/library/src/controller/cmdmux/CmdMuxIF.h index a53b9a41..5c683cbd 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxIF.h +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxIF.h @@ -44,8 +44,8 @@ class CmdMuxIF { public: virtual ~CmdMuxIF() {} - virtual std::pair - selectCommand(std::vector> &) = 0; + virtual std::tuple + selectCommand(std::vector> &) = 0; }; #endif // CMDMUXIF_H diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp index 31c98ef2..4ddedb5e 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp @@ -38,17 +38,17 @@ using namespace tlm; -std::pair -CmdMuxOldest::selectCommand(std::vector> &readyCommands) +std::tuple +CmdMuxOldest::selectCommand(std::vector> &readyCommands) { auto it = readyCommands.begin(); auto result = it; - unsigned lastPayloadID = DramExtension::getPayloadID(it->second); + uint64_t lastPayloadID = DramExtension::getPayloadID(std::get<1>(*it)); it++; while (it != readyCommands.end()) { - unsigned newPayloadID = DramExtension::getPayloadID(it->second); + uint64_t newPayloadID = DramExtension::getPayloadID(std::get<1>(*it)); if (newPayloadID < lastPayloadID) { lastPayloadID = newPayloadID; diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.h b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.h index 419479b2..8f5131af 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.h +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.h @@ -40,8 +40,8 @@ class CmdMuxOldest : public CmdMuxIF { public: - std::pair - selectCommand(std::vector> &); + std::tuple + selectCommand(std::vector> &); }; #endif // CMDMUXOLDEST_H diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp index 989c8d96..d91ac117 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp @@ -38,14 +38,14 @@ using namespace tlm; -std::pair -CmdMuxStrict::selectCommand(std::vector> &readyCommands) +std::tuple +CmdMuxStrict::selectCommand(std::vector> &readyCommands) { for (auto it : readyCommands) { - if (isCasCommand(it.first)) + if (isCasCommand(std::get<0>(it))) { - if (DramExtension::getPayloadID(it.second) == nextPayloadID) + if (DramExtension::getPayloadID(std::get<1>(it)) == nextPayloadID) { nextPayloadID++; return it; @@ -54,7 +54,7 @@ CmdMuxStrict::selectCommand(std::vector(it))) return it; } return std::pair(Command::NOP, nullptr); diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.h b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.h index 1ee53914..fd388350 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.h +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.h @@ -40,8 +40,8 @@ class CmdMuxStrict : public CmdMuxIF { public: - std::pair - selectCommand(std::vector> &); + std::tuple + selectCommand(std::vector> &); private: uint64_t nextPayloadID = 0; diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.cpp b/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.cpp index 4124d43d..2e810c17 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.cpp +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.cpp @@ -36,9 +36,9 @@ using namespace tlm; -std::pair PowerDownManagerDummy::getNextCommand() +std::tuple PowerDownManagerDummy::getNextCommand() { - return std::pair(Command::NOP, nullptr); + return std::tuple(Command::NOP, nullptr); } sc_time PowerDownManagerDummy::start() diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.h b/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.h index 354768eb..4f6e763f 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.h +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.h @@ -46,7 +46,7 @@ public: virtual void triggerExit() override {} virtual void triggerInterruption() override {} - virtual std::pair getNextCommand() override; + virtual std::tuple getNextCommand() override; virtual void updateState(Command) override {} virtual sc_time start() override; }; diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerIF.h b/DRAMSys/library/src/controller/powerdown/PowerDownManagerIF.h index 41474c44..5d0614f4 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerIF.h +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerIF.h @@ -49,7 +49,7 @@ public: virtual void triggerExit() = 0; virtual void triggerInterruption() = 0; - virtual std::pair getNextCommand() = 0; + virtual std::tuple getNextCommand() = 0; virtual void updateState(Command) = 0; virtual sc_time start() = 0; }; diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp index a6fb3ef5..8fca2304 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp @@ -69,12 +69,12 @@ void PowerDownManagerStaggered::triggerInterruption() exitTriggered = true; } -std::pair PowerDownManagerStaggered::getNextCommand() +std::tuple PowerDownManagerStaggered::getNextCommand() { if (sc_time_stamp() == timeToSchedule) - return std::pair(nextCommand, &powerDownPayload); + return std::tuple(nextCommand, &powerDownPayload); else - return std::pair(Command::NOP, nullptr); + return std::tuple(Command::NOP, nullptr); } sc_time PowerDownManagerStaggered::start() diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h index 499ca3d4..5f41a72a 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h @@ -48,7 +48,7 @@ public: virtual void triggerExit() override; virtual void triggerInterruption() override; - virtual std::pair getNextCommand() override; + virtual std::tuple getNextCommand() override; virtual void updateState(Command) override; virtual sc_time start() override; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.cpp index eb93dc57..77e95938 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.cpp @@ -59,13 +59,13 @@ RefreshManagerBankwise::RefreshManagerBankwise(std::vector &bankM maxPulledin = -(config.refreshMaxPulledin * memSpec->banksPerRank); } -std::pair RefreshManagerBankwise::getNextCommand() +std::tuple RefreshManagerBankwise::getNextCommand() { if (sc_time_stamp() == timeToSchedule) - return std::pair + return std::tuple (nextCommand, &refreshPayloads[currentBankMachine->getBank().ID() % memSpec->banksPerRank]); else - return std::pair(Command::NOP, nullptr); + return std::tuple(Command::NOP, nullptr); } sc_time RefreshManagerBankwise::start() diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.h b/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.h index 7a76ceb5..c6dfbf63 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.h @@ -48,7 +48,7 @@ class RefreshManagerBankwise final : public RefreshManagerIF public: RefreshManagerBankwise(std::vector &, PowerDownManagerIF *, Rank, CheckerIF *); - virtual std::pair getNextCommand() override; + virtual std::tuple getNextCommand() override; virtual sc_time start() override; virtual void updateState(Command) override; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.cpp index 6e98d9cd..db03b731 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.cpp @@ -36,9 +36,9 @@ using namespace tlm; -std::pair RefreshManagerDummy::getNextCommand() +std::tuple RefreshManagerDummy::getNextCommand() { - return std::pair(Command::NOP, nullptr); + return std::tuple(Command::NOP, nullptr); } sc_time RefreshManagerDummy::start() diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.h b/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.h index 51c19d2d..93021627 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.h @@ -44,7 +44,7 @@ class RefreshManagerDummy final : public RefreshManagerIF { public: - virtual std::pair getNextCommand() override; + virtual std::tuple getNextCommand() override; virtual sc_time start() override; virtual void updateState(Command) override {} }; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerIF.h b/DRAMSys/library/src/controller/refresh/RefreshManagerIF.h index 1c2db4fd..3dd53d07 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerIF.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerIF.h @@ -45,7 +45,7 @@ class RefreshManagerIF public: virtual ~RefreshManagerIF() {} - virtual std::pair getNextCommand() = 0; + virtual std::tuple getNextCommand() = 0; virtual sc_time start() = 0; virtual void updateState(Command) = 0; }; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.cpp index 9e9a5830..e59a82b1 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.cpp @@ -52,12 +52,12 @@ RefreshManagerRankwise::RefreshManagerRankwise(std::vector &bankM maxPulledin = -config.refreshMaxPulledin; } -std::pair RefreshManagerRankwise::getNextCommand() +std::tuple RefreshManagerRankwise::getNextCommand() { if (sc_time_stamp() == timeToSchedule) - return std::pair(nextCommand, &refreshPayload); + return std::tuple(nextCommand, &refreshPayload); else - return std::pair(Command::NOP, nullptr); + return std::tuple(Command::NOP, nullptr); } sc_time RefreshManagerRankwise::start() diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.h b/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.h index a7d84f2d..6b336754 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.h @@ -46,7 +46,7 @@ class RefreshManagerRankwise final : public RefreshManagerIF public: RefreshManagerRankwise(std::vector &, PowerDownManagerIF *, Rank, CheckerIF *); - virtual std::pair getNextCommand() override; + virtual std::tuple getNextCommand() override; virtual sc_time start() override; virtual void updateState(Command) override;