diff --git a/DRAMSys/library/src/controller/BankMachine.cpp b/DRAMSys/library/src/controller/BankMachine.cpp index 867bdda5..a801e025 100644 --- a/DRAMSys/library/src/controller/BankMachine.cpp +++ b/DRAMSys/library/src/controller/BankMachine.cpp @@ -184,7 +184,7 @@ sc_time BankMachineOpen::start() else // row miss nextCommand = Command::PREPB; } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, currentPayload); + timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, *currentPayload); } } return timeToSchedule; @@ -214,7 +214,7 @@ sc_time BankMachineClosed::start() else SC_REPORT_FATAL("BankMachine", "Wrong TLM command"); } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, currentPayload); + timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, *currentPayload); } } return timeToSchedule; @@ -261,7 +261,7 @@ sc_time BankMachineOpenAdaptive::start() else // row miss nextCommand = Command::PREPB; } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, currentPayload); + timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, *currentPayload); } } return timeToSchedule; @@ -308,7 +308,7 @@ sc_time BankMachineClosedAdaptive::start() else // row miss, should never happen SC_REPORT_FATAL("BankMachine", "Should never be reached for this policy"); } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, currentPayload); + timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, *currentPayload); } } return timeToSchedule; diff --git a/DRAMSys/library/src/controller/Controller.cpp b/DRAMSys/library/src/controller/Controller.cpp index 3953620c..99f73e4e 100644 --- a/DRAMSys/library/src/controller/Controller.cpp +++ b/DRAMSys/library/src/controller/Controller.cpp @@ -87,102 +87,100 @@ Controller::Controller(const sc_module_name &name) : // instantiate timing checker if (memSpec->memoryType == MemSpec::MemoryType::DDR3) - checker = new CheckerDDR3(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::DDR4) - checker = new CheckerDDR4(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::DDR5) - checker = new CheckerDDR5(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::WideIO) - checker = new CheckerWideIO(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::LPDDR4) - checker = new CheckerLPDDR4(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::LPDDR5) - checker = new CheckerLPDDR5(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::WideIO2) - checker = new CheckerWideIO2(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::HBM2) - checker = new CheckerHBM2(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::GDDR5) - checker = new CheckerGDDR5(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::GDDR5X) - checker = new CheckerGDDR5X(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::GDDR6) - checker = new CheckerGDDR6(); + checker = std::make_unique(); else if (memSpec->memoryType == MemSpec::MemoryType::STTMRAM) - checker = new CheckerSTTMRAM(); + checker = std::make_unique(); // instantiate scheduler and command mux if (config.scheduler == Configuration::Scheduler::Fifo) - scheduler = new SchedulerFifo(); + scheduler = std::make_unique(); else if (config.scheduler == Configuration::Scheduler::FrFcfs) - scheduler = new SchedulerFrFcfs(); + scheduler = std::make_unique(); else if (config.scheduler == Configuration::Scheduler::FrFcfsGrp) - scheduler = new SchedulerFrFcfsGrp(); + scheduler = std::make_unique(); if (config.cmdMux == Configuration::CmdMux::Oldest) { if (memSpec->hasRasAndCasBus()) - cmdMux = new CmdMuxOldestRasCas(); + cmdMux = std::make_unique(); else - cmdMux = new CmdMuxOldest(); + cmdMux = std::make_unique(); } else if (config.cmdMux == Configuration::CmdMux::Strict) { if (memSpec->hasRasAndCasBus()) - cmdMux = new CmdMuxStrictRasCas(); + cmdMux = std::make_unique(); else - cmdMux = new CmdMuxStrict(); + cmdMux = std::make_unique(); } if (config.respQueue == Configuration::RespQueue::Fifo) - respQueue = new RespQueueFifo(); + respQueue = std::make_unique(); else if (config.respQueue == Configuration::RespQueue::Reorder) - respQueue = new RespQueueReorder(); + respQueue = std::make_unique(); // instantiate bank machines (one per bank) if (config.pagePolicy == Configuration::PagePolicy::Open) { for (unsigned bankID = 0; bankID < memSpec->numberOfBanks; bankID++) - bankMachines.push_back(new BankMachineOpen(scheduler, checker, Bank(bankID))); + bankMachines.emplace_back(std::make_unique(scheduler.get(), checker.get(), Bank(bankID))); } else if (config.pagePolicy == Configuration::PagePolicy::OpenAdaptive) { for (unsigned bankID = 0; bankID < memSpec->numberOfBanks; bankID++) - bankMachines.push_back(new BankMachineOpenAdaptive(scheduler, checker, Bank(bankID))); + bankMachines.emplace_back(std::make_unique(scheduler.get(), checker.get(), Bank(bankID))); } else if (config.pagePolicy == Configuration::PagePolicy::Closed) { for (unsigned bankID = 0; bankID < memSpec->numberOfBanks; bankID++) - bankMachines.push_back(new BankMachineClosed(scheduler, checker, Bank(bankID))); + bankMachines.emplace_back(std::make_unique(scheduler.get(), checker.get(), Bank(bankID))); } else if (config.pagePolicy == Configuration::PagePolicy::ClosedAdaptive) { for (unsigned bankID = 0; bankID < memSpec->numberOfBanks; bankID++) - bankMachines.push_back(new BankMachineClosedAdaptive(scheduler, checker, Bank(bankID))); + bankMachines.emplace_back(std::make_unique(scheduler.get(), checker.get(), Bank(bankID))); } + bankMachinesOnRank = std::vector>(memSpec->numberOfRanks, + std::vector(memSpec->banksPerRank)); for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) { - bankMachinesOnRank.emplace_back(bankMachines.begin() + rankID * memSpec->banksPerRank, - bankMachines.begin() + (rankID + 1) * memSpec->banksPerRank); + for (unsigned bankID = 0; bankID < memSpec->banksPerRank; bankID++) + bankMachinesOnRank[rankID][bankID] = bankMachines[rankID * memSpec->banksPerRank + bankID].get(); } // instantiate power-down managers (one per rank) if (config.powerDownPolicy == Configuration::PowerDownPolicy::NoPowerDown) { for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) - { - PowerDownManagerIF *manager = new PowerDownManagerDummy(); - powerDownManagers.push_back(manager); - } + powerDownManagers.emplace_back(std::make_unique()); } else if (config.powerDownPolicy == Configuration::PowerDownPolicy::Staggered) { for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) { - PowerDownManagerIF *manager = new PowerDownManagerStaggered(bankMachinesOnRank[rankID], - Rank(rankID), checker); - powerDownManagers.push_back(manager); + powerDownManagers.emplace_back(std::make_unique(bankMachinesOnRank[rankID], + Rank(rankID), *checker)); } } @@ -190,24 +188,22 @@ Controller::Controller(const sc_module_name &name) : if (config.refreshPolicy == Configuration::RefreshPolicy::NoRefresh) { for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) - refreshManagers.push_back(new RefreshManagerDummy()); + refreshManagers.emplace_back(std::make_unique()); } else if (config.refreshPolicy == Configuration::RefreshPolicy::AllBank) { for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) { - RefreshManagerIF *manager = new RefreshManagerAllBank - (bankMachinesOnRank[rankID], powerDownManagers[rankID], Rank(rankID), checker); - refreshManagers.push_back(manager); + refreshManagers.emplace_back(std::make_unique + (bankMachinesOnRank[rankID], *powerDownManagers[rankID].get(), Rank(rankID), *checker)); } } else if (config.refreshPolicy == Configuration::RefreshPolicy::SameBank) { for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) { - RefreshManagerIF *manager = new RefreshManagerSameBank - (bankMachinesOnRank[rankID], powerDownManagers[rankID], Rank(rankID), checker); - refreshManagers.push_back(manager); + refreshManagers.emplace_back(std::make_unique + (bankMachinesOnRank[rankID], *powerDownManagers[rankID].get(), Rank(rankID), *checker)); } } else if (config.refreshPolicy == Configuration::RefreshPolicy::PerBank) @@ -215,9 +211,8 @@ Controller::Controller(const sc_module_name &name) : for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) { // TODO: remove bankMachines in constructor - RefreshManagerIF *manager = new RefreshManagerPerBank - (bankMachinesOnRank[rankID], powerDownManagers[rankID], Rank(rankID), checker); - refreshManagers.push_back(manager); + refreshManagers.emplace_back(std::make_unique + (bankMachinesOnRank[rankID], powerDownManagers[rankID].get(), Rank(rankID), checker.get())); } } else if (config.refreshPolicy == Configuration::RefreshPolicy::Per2Bank) @@ -225,9 +220,8 @@ Controller::Controller(const sc_module_name &name) : for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) { // TODO: remove bankMachines in constructor - RefreshManagerIF *manager = new RefreshManagerPer2Bank - (bankMachinesOnRank[rankID], powerDownManagers[rankID], Rank(rankID), checker); - refreshManagers.push_back(manager); + refreshManagers.emplace_back(std::make_unique + (bankMachinesOnRank[rankID], *powerDownManagers[rankID], Rank(rankID), *checker)); } } else @@ -236,20 +230,9 @@ Controller::Controller(const sc_module_name &name) : idleTimeCollector.start(); } -Controller::~Controller() +void Controller::end_of_simulation() { idleTimeCollector.end(); - - for (auto it : refreshManagers) - delete it; - for (auto it : powerDownManagers) - delete it; - for (auto it : bankMachines) - delete it; - delete respQueue; - delete cmdMux; - delete scheduler; - delete checker; } void Controller::controllerMethod() @@ -261,9 +244,9 @@ void Controller::controllerMethod() manageRequests(SC_ZERO_TIME); // (3) Start refresh and power-down managers to issue requests for the current time - for (auto it : refreshManagers) + for (auto& it : refreshManagers) it->start(); - for (auto it : powerDownManagers) + for (auto& it : powerDownManagers) it->start(); // (4) Collect all ready commands from BMs, RMs and PDMs @@ -327,7 +310,7 @@ void Controller::controllerMethod() refreshManagers[rank.ID()]->updateState(command); powerDownManagers[rank.ID()]->updateState(command); - checker->insert(command, payload); + checker->insert(command, *payload); if (command.isCasCommand()) { @@ -356,19 +339,19 @@ void Controller::controllerMethod() // (6) Restart bank machines, refresh managers and power-down managers to issue new requests for the future sc_time timeForNextTrigger = sc_max_time(); sc_time localTime; - for (auto it : bankMachines) + for (auto& it : bankMachines) { localTime = it->start(); if (!(localTime == sc_time_stamp() && readyCmdBlocked)) timeForNextTrigger = std::min(timeForNextTrigger, localTime); } - for (auto it : refreshManagers) + for (auto& it : refreshManagers) { localTime = it->start(); if (!(localTime == sc_time_stamp() && readyCmdBlocked)) timeForNextTrigger = std::min(timeForNextTrigger, localTime); } - for (auto it : powerDownManagers) + for (auto& it : powerDownManagers) { localTime = it->start(); if (!(localTime == sc_time_stamp() && readyCmdBlocked)) diff --git a/DRAMSys/library/src/controller/Controller.h b/DRAMSys/library/src/controller/Controller.h index 198f7298..47c2fec9 100644 --- a/DRAMSys/library/src/controller/Controller.h +++ b/DRAMSys/library/src/controller/Controller.h @@ -42,22 +42,18 @@ #include #include "ControllerIF.h" #include "Command.h" +#include "BankMachine.h" #include "cmdmux/CmdMuxIF.h" #include "checker/CheckerIF.h" #include "refresh/RefreshManagerIF.h" #include "powerdown/PowerDownManagerIF.h" #include "respqueue/RespQueueIF.h" -class BankMachine; -class SchedulerIF; -class PowerDownManagerStaggered; - class Controller : public ControllerIF { public: explicit Controller(const sc_core::sc_module_name &name); SC_HAS_PROCESS(Controller); - ~Controller() override; protected: tlm::tlm_sync_enum nb_transport_fw(tlm::tlm_generic_payload &trans, tlm::tlm_phase &phase, @@ -69,9 +65,11 @@ protected: virtual void sendToFrontend(tlm::tlm_generic_payload *, tlm::tlm_phase, sc_core::sc_time); virtual void sendToDram(Command, tlm::tlm_generic_payload *, sc_core::sc_time); + void end_of_simulation() override; + virtual void controllerMethod(); - SchedulerIF *scheduler; + std::unique_ptr scheduler; const MemSpec *memSpec; sc_core::sc_time thinkDelayFw; @@ -84,13 +82,13 @@ private: std::vector ranksNumberOfPayloads; ReadyCommands readyCommands; - std::vector bankMachines; - std::vector> bankMachinesOnRank; - CmdMuxIF *cmdMux; - CheckerIF *checker; - RespQueueIF *respQueue; - std::vector refreshManagers; - std::vector powerDownManagers; + std::vector> bankMachines; + std::vector> bankMachinesOnRank; + std::unique_ptr cmdMux; + std::unique_ptr checker; + std::unique_ptr respQueue; + std::vector> refreshManagers; + std::vector> powerDownManagers; struct Transaction { diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR3.cpp b/DRAMSys/library/src/controller/checker/CheckerDDR3.cpp index e8c51245..4845f4dc 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR3.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerDDR3.cpp @@ -65,7 +65,7 @@ CheckerDDR3::CheckerDDR3() tWRAPDEN = memSpec->tWL + tBURST + memSpec->tWR + memSpec->tCK; } -sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); @@ -424,7 +424,7 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, tlm_generic_paylo return earliestTimeToStart; } -void CheckerDDR3::insert(Command command, tlm_generic_payload *payload) +void CheckerDDR3::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR3.h b/DRAMSys/library/src/controller/checker/CheckerDDR3.h index 1fef0f8c..a13d90e4 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR3.h +++ b/DRAMSys/library/src/controller/checker/CheckerDDR3.h @@ -46,8 +46,8 @@ class CheckerDDR3 final : public CheckerIF { public: CheckerDDR3(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecDDR3 *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR4.cpp b/DRAMSys/library/src/controller/checker/CheckerDDR4.cpp index 7ac477d3..f3095bc0 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR4.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerDDR4.cpp @@ -68,7 +68,7 @@ CheckerDDR4::CheckerDDR4() tWRAPDEN = memSpec->tWL + tBURST + memSpec->tCK + memSpec->tWR; } -sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); @@ -456,7 +456,7 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, tlm_generic_paylo return earliestTimeToStart; } -void CheckerDDR4::insert(Command command, tlm_generic_payload *payload) +void CheckerDDR4::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR4.h b/DRAMSys/library/src/controller/checker/CheckerDDR4.h index 5323931f..2e789210 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR4.h +++ b/DRAMSys/library/src/controller/checker/CheckerDDR4.h @@ -46,8 +46,8 @@ class CheckerDDR4 final : public CheckerIF { public: CheckerDDR4(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecDDR4 *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR5.cpp b/DRAMSys/library/src/controller/checker/CheckerDDR5.cpp index 59e55c49..e2676ca1 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR5.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerDDR5.cpp @@ -116,7 +116,7 @@ CheckerDDR5::CheckerDDR5() tWRAPDEN = memSpec->tWL + tBURST16 + memSpec->tWR + cmdLengthDiff; } -sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank logicalRank = DramExtension::getRank(payload); Rank physicalRank = Rank(logicalRank.ID() / memSpec->logicalRanksPerPhysicalRank); @@ -878,7 +878,7 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, tlm_generic_paylo return earliestTimeToStart; } -void CheckerDDR5::insert(Command command, tlm_generic_payload *payload) +void CheckerDDR5::insert(Command command, const tlm_generic_payload& payload) { Rank logicalRank = DramExtension::getRank(payload); Rank physicalRank = Rank(logicalRank.ID() / memSpec->logicalRanksPerPhysicalRank); diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR5.h b/DRAMSys/library/src/controller/checker/CheckerDDR5.h index 27ec6294..246a69a5 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR5.h +++ b/DRAMSys/library/src/controller/checker/CheckerDDR5.h @@ -47,8 +47,8 @@ class CheckerDDR5 final : public CheckerIF { public: CheckerDDR5(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecDDR5 *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerGDDR5.cpp b/DRAMSys/library/src/controller/checker/CheckerGDDR5.cpp index 2f59f86e..2ae190ca 100644 --- a/DRAMSys/library/src/controller/checker/CheckerGDDR5.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerGDDR5.cpp @@ -69,7 +69,7 @@ CheckerGDDR5::CheckerGDDR5() tWRPRE = memSpec->tWL + tBURST + memSpec->tWR; } -sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); @@ -538,7 +538,7 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, tlm_generic_payl return earliestTimeToStart; } -void CheckerGDDR5::insert(Command command, tlm_generic_payload *payload) +void CheckerGDDR5::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerGDDR5.h b/DRAMSys/library/src/controller/checker/CheckerGDDR5.h index 2db98cf1..c30f2a57 100644 --- a/DRAMSys/library/src/controller/checker/CheckerGDDR5.h +++ b/DRAMSys/library/src/controller/checker/CheckerGDDR5.h @@ -46,8 +46,8 @@ class CheckerGDDR5 final : public CheckerIF { public: CheckerGDDR5(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecGDDR5 *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerGDDR5X.cpp b/DRAMSys/library/src/controller/checker/CheckerGDDR5X.cpp index 5cbfdc6a..1584f84f 100644 --- a/DRAMSys/library/src/controller/checker/CheckerGDDR5X.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerGDDR5X.cpp @@ -69,7 +69,7 @@ CheckerGDDR5X::CheckerGDDR5X() tWRPRE = memSpec->tWL + tBURST + memSpec->tWR; } -sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); @@ -542,7 +542,7 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, tlm_generic_pay return earliestTimeToStart; } -void CheckerGDDR5X::insert(Command command, tlm_generic_payload *payload) +void CheckerGDDR5X::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerGDDR5X.h b/DRAMSys/library/src/controller/checker/CheckerGDDR5X.h index 88b8dca3..c812f475 100644 --- a/DRAMSys/library/src/controller/checker/CheckerGDDR5X.h +++ b/DRAMSys/library/src/controller/checker/CheckerGDDR5X.h @@ -46,8 +46,8 @@ class CheckerGDDR5X final : public CheckerIF { public: CheckerGDDR5X(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecGDDR5X *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerGDDR6.cpp b/DRAMSys/library/src/controller/checker/CheckerGDDR6.cpp index 57cf9e9c..e43c0248 100644 --- a/DRAMSys/library/src/controller/checker/CheckerGDDR6.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerGDDR6.cpp @@ -68,7 +68,7 @@ CheckerGDDR6::CheckerGDDR6() tWRPRE = memSpec->tWL + tBURST + memSpec->tWR; } -sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); @@ -559,7 +559,7 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, tlm_generic_payl return earliestTimeToStart; } -void CheckerGDDR6::insert(Command command, tlm_generic_payload *payload) +void CheckerGDDR6::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerGDDR6.h b/DRAMSys/library/src/controller/checker/CheckerGDDR6.h index 733a4bd7..07175520 100644 --- a/DRAMSys/library/src/controller/checker/CheckerGDDR6.h +++ b/DRAMSys/library/src/controller/checker/CheckerGDDR6.h @@ -46,8 +46,8 @@ class CheckerGDDR6 final : public CheckerIF { public: CheckerGDDR6(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecGDDR6 *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerHBM2.cpp b/DRAMSys/library/src/controller/checker/CheckerHBM2.cpp index dcdbb381..d40cc1b3 100644 --- a/DRAMSys/library/src/controller/checker/CheckerHBM2.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerHBM2.cpp @@ -69,7 +69,7 @@ CheckerHBM2::CheckerHBM2() tWRRDL = memSpec->tWL + tBURST + memSpec->tWTRL; } -sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); @@ -517,7 +517,7 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, tlm_generic_paylo return earliestTimeToStart; } -void CheckerHBM2::insert(Command command, tlm_generic_payload *payload) +void CheckerHBM2::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerHBM2.h b/DRAMSys/library/src/controller/checker/CheckerHBM2.h index 833d3214..d513a0c5 100644 --- a/DRAMSys/library/src/controller/checker/CheckerHBM2.h +++ b/DRAMSys/library/src/controller/checker/CheckerHBM2.h @@ -46,8 +46,8 @@ class CheckerHBM2 final : public CheckerIF { public: CheckerHBM2(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecHBM2 *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerIF.h b/DRAMSys/library/src/controller/checker/CheckerIF.h index d717a5d2..ffd42a5d 100644 --- a/DRAMSys/library/src/controller/checker/CheckerIF.h +++ b/DRAMSys/library/src/controller/checker/CheckerIF.h @@ -43,8 +43,8 @@ class CheckerIF public: virtual ~CheckerIF() = default; - virtual sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const = 0; - virtual void insert(Command command, tlm::tlm_generic_payload *payload) = 0; + virtual sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const = 0; + virtual void insert(Command command, const tlm::tlm_generic_payload& payload) = 0; }; #endif // CHECKERIF_H diff --git a/DRAMSys/library/src/controller/checker/CheckerLPDDR4.cpp b/DRAMSys/library/src/controller/checker/CheckerLPDDR4.cpp index 1390bc05..957ec5de 100644 --- a/DRAMSys/library/src/controller/checker/CheckerLPDDR4.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerLPDDR4.cpp @@ -71,7 +71,7 @@ CheckerLPDDR4::CheckerLPDDR4() tREFPDEN = memSpec->tCK + memSpec->tCMDCKE; } -sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); @@ -512,7 +512,7 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, tlm_generic_pay return earliestTimeToStart; } -void CheckerLPDDR4::insert(Command command, tlm_generic_payload *payload) +void CheckerLPDDR4::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerLPDDR4.h b/DRAMSys/library/src/controller/checker/CheckerLPDDR4.h index 953450c6..da58c157 100644 --- a/DRAMSys/library/src/controller/checker/CheckerLPDDR4.h +++ b/DRAMSys/library/src/controller/checker/CheckerLPDDR4.h @@ -46,8 +46,8 @@ class CheckerLPDDR4 final : public CheckerIF { public: CheckerLPDDR4(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecLPDDR4 *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerLPDDR5.cpp b/DRAMSys/library/src/controller/checker/CheckerLPDDR5.cpp index 194e44cc..2275fa7a 100644 --- a/DRAMSys/library/src/controller/checker/CheckerLPDDR5.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerLPDDR5.cpp @@ -71,7 +71,7 @@ CheckerLPDDR5::CheckerLPDDR5() } } -sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); @@ -637,7 +637,7 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, tlm_generic_pay return earliestTimeToStart; } -void CheckerLPDDR5::insert(Command command, tlm_generic_payload *payload) +void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); BankGroup bankGroup = DramExtension::getBankGroup(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerLPDDR5.h b/DRAMSys/library/src/controller/checker/CheckerLPDDR5.h index 56645016..9effd4af 100644 --- a/DRAMSys/library/src/controller/checker/CheckerLPDDR5.h +++ b/DRAMSys/library/src/controller/checker/CheckerLPDDR5.h @@ -47,8 +47,8 @@ class CheckerLPDDR5 final : public CheckerIF { public: CheckerLPDDR5(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecLPDDR5 *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerSTTMRAM.cpp b/DRAMSys/library/src/controller/checker/CheckerSTTMRAM.cpp index 070b0b42..ee380896 100644 --- a/DRAMSys/library/src/controller/checker/CheckerSTTMRAM.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerSTTMRAM.cpp @@ -65,7 +65,7 @@ CheckerSTTMRAM::CheckerSTTMRAM() tWRAPDEN = memSpec->tWL + tBURST + memSpec->tWR + memSpec->tCK; } -sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); @@ -380,7 +380,7 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, tlm_generic_pa return earliestTimeToStart; } -void CheckerSTTMRAM::insert(Command command, tlm_generic_payload *payload) +void CheckerSTTMRAM::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerSTTMRAM.h b/DRAMSys/library/src/controller/checker/CheckerSTTMRAM.h index 44d4c888..861424e6 100644 --- a/DRAMSys/library/src/controller/checker/CheckerSTTMRAM.h +++ b/DRAMSys/library/src/controller/checker/CheckerSTTMRAM.h @@ -46,8 +46,8 @@ class CheckerSTTMRAM final : public CheckerIF { public: CheckerSTTMRAM(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecSTTMRAM *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerWideIO.cpp b/DRAMSys/library/src/controller/checker/CheckerWideIO.cpp index 1e441f5c..6138f759 100644 --- a/DRAMSys/library/src/controller/checker/CheckerWideIO.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerWideIO.cpp @@ -65,7 +65,7 @@ CheckerWideIO::CheckerWideIO() tWRAPDEN = memSpec->tWL + tBURST + memSpec->tWR; // + memSpec->tCK; ?? } -sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); @@ -401,7 +401,7 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, tlm_generic_pay return earliestTimeToStart; } -void CheckerWideIO::insert(Command command, tlm_generic_payload *payload) +void CheckerWideIO::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerWideIO.h b/DRAMSys/library/src/controller/checker/CheckerWideIO.h index 0bfe15e1..733a8107 100644 --- a/DRAMSys/library/src/controller/checker/CheckerWideIO.h +++ b/DRAMSys/library/src/controller/checker/CheckerWideIO.h @@ -46,8 +46,8 @@ class CheckerWideIO final : public CheckerIF { public: CheckerWideIO(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecWideIO *memSpec; diff --git a/DRAMSys/library/src/controller/checker/CheckerWideIO2.cpp b/DRAMSys/library/src/controller/checker/CheckerWideIO2.cpp index 182916db..e7f4968c 100644 --- a/DRAMSys/library/src/controller/checker/CheckerWideIO2.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerWideIO2.cpp @@ -66,7 +66,7 @@ CheckerWideIO2::CheckerWideIO2() tWRRD_R = memSpec->tWL + memSpec->tCK + tBURST + memSpec->tRTRS - memSpec->tRL; } -sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, tlm_generic_payload *payload) const +sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); @@ -479,7 +479,7 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, tlm_generic_pa return earliestTimeToStart; } -void CheckerWideIO2::insert(Command command, tlm_generic_payload *payload) +void CheckerWideIO2::insert(Command command, const tlm_generic_payload& payload) { Rank rank = DramExtension::getRank(payload); Bank bank = DramExtension::getBank(payload); diff --git a/DRAMSys/library/src/controller/checker/CheckerWideIO2.h b/DRAMSys/library/src/controller/checker/CheckerWideIO2.h index dba97dfa..61e065a4 100644 --- a/DRAMSys/library/src/controller/checker/CheckerWideIO2.h +++ b/DRAMSys/library/src/controller/checker/CheckerWideIO2.h @@ -46,8 +46,8 @@ class CheckerWideIO2 final : public CheckerIF { public: CheckerWideIO2(); - sc_core::sc_time timeToSatisfyConstraints(Command command, tlm::tlm_generic_payload *payload) const override; - void insert(Command command, tlm::tlm_generic_payload *payload) override; + sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: const MemSpecWideIO2 *memSpec; diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp index bd9cb653..72db9e14 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp @@ -33,13 +33,14 @@ */ #include "PowerDownManagerStaggered.h" +#include "../BankMachine.h" #include "../../common/utils.h" using namespace sc_core; using namespace tlm; -PowerDownManagerStaggered::PowerDownManagerStaggered(std::vector &bankMachinesOnRank, - Rank rank, CheckerIF *checker) +PowerDownManagerStaggered::PowerDownManagerStaggered(std::vector& bankMachinesOnRank, + Rank rank, CheckerIF& checker) : bankMachinesOnRank(bankMachinesOnRank), checker(checker) { setUpDummy(powerDownPayload, UINT64_MAX - 1, rank); @@ -92,7 +93,7 @@ sc_time PowerDownManagerStaggered::start() else if (state == State::ExtraRefresh) nextCommand = Command::REFAB; - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &powerDownPayload); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, powerDownPayload); } else if (entryTriggered) { @@ -106,12 +107,12 @@ sc_time PowerDownManagerStaggered::start() } } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &powerDownPayload); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, powerDownPayload); } else if (enterSelfRefresh) { nextCommand = Command::SREFEN; - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &powerDownPayload); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, powerDownPayload); } return timeToSchedule; diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h index a2e3cb3e..faf474a3 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h @@ -37,13 +37,16 @@ #include #include "PowerDownManagerIF.h" -#include "../BankMachine.h" +#include "../../common/dramExtensions.h" #include "../checker/CheckerIF.h" +class BankMachine; + class PowerDownManagerStaggered final : public PowerDownManagerIF { public: - PowerDownManagerStaggered(std::vector &, Rank, CheckerIF *); + PowerDownManagerStaggered(std::vector& bankMachinesOnRank, + Rank rank, CheckerIF& checker); void triggerEntry() override; void triggerExit() override; @@ -56,8 +59,8 @@ public: private: enum class State {Idle, ActivePdn, PrechargePdn, SelfRefresh, ExtraRefresh} state = State::Idle; tlm::tlm_generic_payload powerDownPayload; - std::vector &bankMachinesOnRank; - CheckerIF *checker; + std::vector& bankMachinesOnRank; + CheckerIF& checker; sc_core::sc_time timeToSchedule = sc_core::sc_max_time(); Command nextCommand = Command::NOP; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp index 9500e74c..d4f0a060 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.cpp @@ -34,6 +34,8 @@ */ #include "RefreshManagerAllBank.h" +#include "../BankMachine.h" +#include "../powerdown/PowerDownManagerIF.h" #include "../../common/dramExtensions.h" #include "../../configuration/Configuration.h" #include "../../common/utils.h" @@ -41,8 +43,8 @@ using namespace sc_core; using namespace tlm; -RefreshManagerAllBank::RefreshManagerAllBank(std::vector &bankMachinesOnRank, - PowerDownManagerIF *powerDownManager, Rank rank, CheckerIF *checker) +RefreshManagerAllBank::RefreshManagerAllBank(std::vector& bankMachinesOnRank, + PowerDownManagerIF& powerDownManager, Rank rank, CheckerIF& checker) : bankMachinesOnRank(bankMachinesOnRank), powerDownManager(powerDownManager), checker(checker) { Configuration &config = Configuration::getInstance(); @@ -69,7 +71,7 @@ sc_time RefreshManagerAllBank::start() if (sc_time_stamp() >= timeForNextTrigger) // Normal refresh { - powerDownManager->triggerInterruption(); + powerDownManager.triggerInterruption(); if (sleeping) return timeToSchedule; @@ -109,7 +111,7 @@ sc_time RefreshManagerAllBank::start() else nextCommand = Command::REFAB; - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &refreshPayload); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, refreshPayload); return timeToSchedule; } } @@ -130,7 +132,7 @@ sc_time RefreshManagerAllBank::start() if (doRefresh) { nextCommand = Command::REFAB; - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &refreshPayload); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, refreshPayload); return timeToSchedule; } } @@ -172,7 +174,7 @@ sc_time RefreshManagerAllBank::start() else nextCommand = Command::RFMAB; - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &refreshPayload); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, refreshPayload); return timeToSchedule; } } diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.h b/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.h index 2afa583a..1d4afffd 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerAllBank.h @@ -40,15 +40,17 @@ #include #include #include "RefreshManagerIF.h" -#include "../../configuration/memspec/MemSpec.h" -#include "../BankMachine.h" -#include "../powerdown/PowerDownManagerIF.h" #include "../checker/CheckerIF.h" +#include "../../configuration/memspec/MemSpec.h" + +class BankMachine; +class PowerDownManagerIF; class RefreshManagerAllBank final : public RefreshManagerIF { public: - RefreshManagerAllBank(std::vector &, PowerDownManagerIF *, Rank, CheckerIF *); + RefreshManagerAllBank(std::vector& bankMachinesOnRank, + PowerDownManagerIF& powerDownManager, Rank rank, CheckerIF& checker); CommandTuple::Type getNextCommand() override; sc_core::sc_time start() override; @@ -57,12 +59,12 @@ public: private: enum class State {Regular, Pulledin} state = State::Regular; const MemSpec *memSpec; - std::vector &bankMachinesOnRank; - PowerDownManagerIF *powerDownManager; + std::vector& bankMachinesOnRank; + PowerDownManagerIF& powerDownManager; tlm::tlm_generic_payload refreshPayload; sc_core::sc_time timeForNextTrigger = sc_core::sc_max_time(); sc_core::sc_time timeToSchedule = sc_core::sc_max_time(); - CheckerIF *checker; + CheckerIF& checker; Command nextCommand = Command::NOP; unsigned activatedBanks = 0; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerPer2Bank.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerPer2Bank.cpp index 941cf965..7015540c 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerPer2Bank.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerPer2Bank.cpp @@ -33,6 +33,8 @@ */ #include "RefreshManagerPer2Bank.h" +#include "../BankMachine.h" +#include "../powerdown/PowerDownManagerIF.h" #include "../../configuration/Configuration.h" #include "../../common/utils.h" #include "../../common/dramExtensions.h" @@ -40,8 +42,8 @@ using namespace sc_core; using namespace tlm; -RefreshManagerPer2Bank::RefreshManagerPer2Bank(std::vector &bankMachinesOnRank, - PowerDownManagerIF *powerDownManager, Rank rank, CheckerIF *checker) +RefreshManagerPer2Bank::RefreshManagerPer2Bank(std::vector& bankMachinesOnRank, + PowerDownManagerIF& powerDownManager, Rank rank, CheckerIF& checker) : powerDownManager(powerDownManager), checker(checker) { Configuration &config = Configuration::getInstance(); @@ -83,7 +85,7 @@ sc_time RefreshManagerPer2Bank::start() if (sc_time_stamp() >= timeForNextTrigger) { - powerDownManager->triggerInterruption(); + powerDownManager.triggerInterruption(); if (sleeping) return timeToSchedule; @@ -149,7 +151,7 @@ sc_time RefreshManagerPer2Bank::start() skipSelection = true; } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, currentRefreshPayload); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, *currentRefreshPayload); return timeToSchedule; } } @@ -197,7 +199,7 @@ sc_time RefreshManagerPer2Bank::start() } } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, currentRefreshPayload); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, *currentRefreshPayload); return timeToSchedule; } } diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerPer2Bank.h b/DRAMSys/library/src/controller/refresh/RefreshManagerPer2Bank.h index 0b6c393c..147c5cb2 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerPer2Bank.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerPer2Bank.h @@ -42,14 +42,17 @@ #include #include #include "RefreshManagerIF.h" +#include "../checker/CheckerIF.h" #include "../../configuration/memspec/MemSpec.h" -#include "../BankMachine.h" -#include "../powerdown/PowerDownManagerIF.h" + +class BankMachine; +class PowerDownManagerIF; class RefreshManagerPer2Bank final : public RefreshManagerIF { public: - RefreshManagerPer2Bank(std::vector &, PowerDownManagerIF *, Rank, CheckerIF *); + RefreshManagerPer2Bank(std::vector& bankMachinesOnRank, + PowerDownManagerIF& powerDownManager, Rank rank, CheckerIF& checker); CommandTuple::Type getNextCommand() override; sc_core::sc_time start() override; @@ -58,17 +61,17 @@ public: private: enum class State {Regular, Pulledin} state = State::Regular; const MemSpec *memSpec; - PowerDownManagerIF *powerDownManager; - std::unordered_map refreshPayloads; + PowerDownManagerIF& powerDownManager; + std::unordered_map refreshPayloads; tlm::tlm_generic_payload *currentRefreshPayload; sc_core::sc_time timeForNextTrigger = sc_core::sc_max_time(); sc_core::sc_time timeToSchedule = sc_core::sc_max_time(); - CheckerIF *checker; + CheckerIF& checker; Command nextCommand = Command::NOP; - std::list> remainingBankMachines; - std::list> allBankMachines; - std::list>::iterator currentIterator; + std::list> remainingBankMachines; + std::list> allBankMachines; + std::list>::iterator currentIterator; int flexibilityCounter = 0; int maxPostponed = 0; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerPerBank.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerPerBank.cpp index 89e446e8..91d30880 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerPerBank.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerPerBank.cpp @@ -33,6 +33,8 @@ */ #include "RefreshManagerPerBank.h" +#include "../BankMachine.h" +#include "../powerdown/PowerDownManagerIF.h" #include "../../configuration/Configuration.h" #include "../../common/utils.h" #include "../../common/dramExtensions.h" @@ -125,7 +127,7 @@ sc_time RefreshManagerPerBank::start() } } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &refreshPayloads[*currentIterator]); + timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, refreshPayloads[*currentIterator]); return timeToSchedule; } } @@ -156,7 +158,7 @@ sc_time RefreshManagerPerBank::start() else nextCommand = Command::REFPB; - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &refreshPayloads[*currentIterator]); + timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, refreshPayloads[*currentIterator]); return timeToSchedule; } } diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerPerBank.h b/DRAMSys/library/src/controller/refresh/RefreshManagerPerBank.h index 2f24dd28..7202ff2a 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerPerBank.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerPerBank.h @@ -42,9 +42,11 @@ #include #include #include "RefreshManagerIF.h" +#include "../checker/CheckerIF.h" #include "../../configuration/memspec/MemSpec.h" -#include "../BankMachine.h" -#include "../powerdown/PowerDownManagerIF.h" + +class BankMachine; +class PowerDownManagerIF; class RefreshManagerPerBank final : public RefreshManagerIF { diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerSameBank.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerSameBank.cpp index dc5b0493..4626febb 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerSameBank.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerSameBank.cpp @@ -33,6 +33,8 @@ */ #include "RefreshManagerSameBank.h" +#include "../BankMachine.h" +#include "../powerdown/PowerDownManagerIF.h" #include "../../configuration/Configuration.h" #include "../../common/utils.h" #include "../../common/dramExtensions.h" @@ -40,8 +42,8 @@ using namespace sc_core; using namespace tlm; -RefreshManagerSameBank::RefreshManagerSameBank(std::vector &bankMachinesOnRank, - PowerDownManagerIF *powerDownManager, Rank rank, CheckerIF *checker) +RefreshManagerSameBank::RefreshManagerSameBank(std::vector& bankMachinesOnRank, + PowerDownManagerIF& powerDownManager, Rank rank, CheckerIF& checker) : powerDownManager(powerDownManager), checker(checker) { Configuration &config = Configuration::getInstance(); @@ -91,7 +93,7 @@ sc_time RefreshManagerSameBank::start() if (sc_time_stamp() >= timeForNextTrigger) { - powerDownManager->triggerInterruption(); + powerDownManager.triggerInterruption(); if (sleeping) return timeToSchedule; @@ -155,8 +157,8 @@ sc_time RefreshManagerSameBank::start() skipSelection = true; } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, - &refreshPayloads[currentIterator->front()->getBank().ID() % memSpec->banksPerGroup]); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, + refreshPayloads[currentIterator->front()->getBank().ID() % memSpec->banksPerGroup]); return timeToSchedule; } } @@ -201,8 +203,8 @@ sc_time RefreshManagerSameBank::start() } } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, - &refreshPayloads[currentIterator->front()->getBank().ID() % memSpec->banksPerGroup]); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, + refreshPayloads[currentIterator->front()->getBank().ID() % memSpec->banksPerGroup]); return timeToSchedule; } } @@ -239,8 +241,8 @@ sc_time RefreshManagerSameBank::start() if (groupIt->isActivated()) nextCommand = Command::PRESB; } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, - &refreshPayloads[currentIterator->front()->getBank().ID() % memSpec->banksPerGroup]); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, + refreshPayloads[currentIterator->front()->getBank().ID() % memSpec->banksPerGroup]); return timeToSchedule; } else if (!imtCandidates.empty()) @@ -276,8 +278,8 @@ sc_time RefreshManagerSameBank::start() break; } } - timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, - &refreshPayloads[currentIterator->front()->getBank().ID() % memSpec->banksPerGroup]); + timeToSchedule = checker.timeToSatisfyConstraints(nextCommand, + refreshPayloads[currentIterator->front()->getBank().ID() % memSpec->banksPerGroup]); return timeToSchedule; } } diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerSameBank.h b/DRAMSys/library/src/controller/refresh/RefreshManagerSameBank.h index dfe76064..b828aef2 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerSameBank.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerSameBank.h @@ -41,14 +41,17 @@ #include #include #include "RefreshManagerIF.h" +#include "../checker/CheckerIF.h" #include "../../configuration/memspec/MemSpec.h" -#include "../BankMachine.h" -#include "../powerdown/PowerDownManagerIF.h" + +class BankMachine; +class PowerDownManagerIF; class RefreshManagerSameBank final : public RefreshManagerIF { public: - RefreshManagerSameBank(std::vector &, PowerDownManagerIF *, Rank, CheckerIF *); + RefreshManagerSameBank(std::vector& bankMachinesOnRank, PowerDownManagerIF& powerDownManager, + Rank rank, CheckerIF& checker); CommandTuple::Type getNextCommand() override; sc_core::sc_time start() override; @@ -57,11 +60,11 @@ public: private: enum class State {Regular, Pulledin} state = State::Regular; const MemSpec *memSpec; - PowerDownManagerIF *powerDownManager; + PowerDownManagerIF& powerDownManager; std::vector refreshPayloads; sc_core::sc_time timeForNextTrigger = sc_core::sc_max_time(); sc_core::sc_time timeToSchedule = sc_core::sc_max_time(); - CheckerIF *checker; + CheckerIF& checker; Command nextCommand = Command::NOP; std::list> remainingBankMachines; diff --git a/DRAMSys/library/src/simulation/DRAMSys.cpp b/DRAMSys/library/src/simulation/DRAMSys.cpp index c1fb3065..107c3efe 100644 --- a/DRAMSys/library/src/simulation/DRAMSys.cpp +++ b/DRAMSys/library/src/simulation/DRAMSys.cpp @@ -40,6 +40,7 @@ #include #include +#include #include #include @@ -150,45 +151,46 @@ void DRAMSys::instantiateModules(const DRAMSysConfiguration::AddressMapping &add // Create arbiter if (config.arbiter == Configuration::Arbiter::Simple) - arbiter = std::unique_ptr(new ArbiterSimple("arbiter", addressMapping)); + arbiter = std::make_unique("arbiter", addressMapping); else if (config.arbiter == Configuration::Arbiter::Fifo) - arbiter = std::unique_ptr(new ArbiterFifo("arbiter", addressMapping)); + arbiter = std::make_unique("arbiter", addressMapping); else if (config.arbiter == Configuration::Arbiter::Reorder) - arbiter = std::unique_ptr(new ArbiterReorder("arbiter", addressMapping)); + arbiter = std::make_unique("arbiter", addressMapping); // Create controllers and DRAMs MemSpec::MemoryType memoryType = config.memSpec->memoryType; for (std::size_t i = 0; i < config.memSpec->numberOfChannels; i++) { - controllers.emplace_back(new Controller(("controller" + std::to_string(i)).c_str())); + controllers.emplace_back(std::make_unique(("controller" + std::to_string(i)).c_str())); if (memoryType == MemSpec::MemoryType::DDR3) - drams.emplace_back(new DramDDR3(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::DDR4) - drams.emplace_back(new DramDDR4(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::DDR5) - drams.emplace_back(new DramDDR5(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::WideIO) - drams.emplace_back(new DramWideIO(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::LPDDR4) - drams.emplace_back(new DramLPDDR4(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::LPDDR5) - drams.emplace_back(new DramLPDDR5(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::WideIO2) - drams.emplace_back(new DramWideIO2(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::HBM2) - drams.emplace_back(new DramHBM2(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::GDDR5) - drams.emplace_back(new DramGDDR5(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::GDDR5X) - drams.emplace_back(new DramGDDR5X(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::GDDR6) - drams.emplace_back(new DramGDDR6(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); else if (memoryType == MemSpec::MemoryType::STTMRAM) - drams.emplace_back(new DramSTTMRAM(("dram" + std::to_string(i)).c_str())); + drams.emplace_back(std::make_unique(("dram" + std::to_string(i)).c_str())); if (config.checkTLM2Protocol) - controllersTlmCheckers.push_back(new tlm_utils::tlm2_base_protocol_checker<>(("TlmCheckerController" + std::to_string(i)).c_str())); + controllersTlmCheckers.push_back(std::make_unique> + (("TlmCheckerController" + std::to_string(i)).c_str())); } } diff --git a/DRAMSys/library/src/simulation/DRAMSys.h b/DRAMSys/library/src/simulation/DRAMSys.h index 9c31fc21..b8e67b0d 100644 --- a/DRAMSys/library/src/simulation/DRAMSys.h +++ b/DRAMSys/library/src/simulation/DRAMSys.h @@ -73,7 +73,7 @@ protected: void end_of_simulation() override; //TLM 2.0 Protocol Checkers - std::vector*> controllersTlmCheckers; + std::vector>> controllersTlmCheckers; // TODO: Each DRAM has a reorder buffer (check this!) std::unique_ptr reorder; diff --git a/DRAMSys/library/src/simulation/DRAMSysRecordable.cpp b/DRAMSys/library/src/simulation/DRAMSysRecordable.cpp index 73a76bd8..80f0c4e6 100644 --- a/DRAMSys/library/src/simulation/DRAMSysRecordable.cpp +++ b/DRAMSys/library/src/simulation/DRAMSysRecordable.cpp @@ -34,6 +34,8 @@ * Derek Christ */ +#include + #include "DRAMSysRecordable.h" #include "../controller/ControllerRecordable.h" #include "dram/DramRecordable.h" @@ -119,45 +121,45 @@ void DRAMSysRecordable::instantiateModules(const std::string &traceName, // Create arbiter if (config.arbiter == Configuration::Arbiter::Simple) - arbiter = std::unique_ptr(new ArbiterSimple("arbiter", configuration.addressMapping)); + arbiter = std::make_unique("arbiter", configuration.addressMapping); else if (config.arbiter == Configuration::Arbiter::Fifo) - arbiter = std::unique_ptr(new ArbiterFifo("arbiter", configuration.addressMapping)); + arbiter = std::make_unique("arbiter", configuration.addressMapping); else if (config.arbiter == Configuration::Arbiter::Reorder) - arbiter = std::unique_ptr(new ArbiterReorder("arbiter", configuration.addressMapping)); + arbiter = std::make_unique("arbiter", configuration.addressMapping); // Create controllers and DRAMs MemSpec::MemoryType memoryType = config.memSpec->memoryType; for (std::size_t i = 0; i < config.memSpec->numberOfChannels; i++) { - controllers.emplace_back(new ControllerRecordable(("controller" + std::to_string(i)).c_str(), tlmRecorders[i])); + controllers.emplace_back(std::make_unique(("controller" + std::to_string(i)).c_str(), tlmRecorders[i])); if (memoryType == MemSpec::MemoryType::DDR3) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::DDR4) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::DDR5) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::WideIO) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::LPDDR4) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::LPDDR5) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::WideIO2) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::HBM2) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::GDDR5) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::GDDR5X) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::GDDR6) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); else if (memoryType == MemSpec::MemoryType::STTMRAM) - drams.emplace_back(new DramRecordable(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); + drams.emplace_back(std::make_unique>(("dram" + std::to_string(i)).c_str(), tlmRecorders[i])); if (config.checkTLM2Protocol) - controllersTlmCheckers.emplace_back(new tlm_utils::tlm2_base_protocol_checker<>(("TLMCheckerController" + controllersTlmCheckers.emplace_back(std::make_unique>(("TLMCheckerController" + std::to_string(i)).c_str())); } } diff --git a/DRAMSys/simulator/main.cpp b/DRAMSys/simulator/main.cpp index 5fed42be..8260d837 100644 --- a/DRAMSys/simulator/main.cpp +++ b/DRAMSys/simulator/main.cpp @@ -38,6 +38,7 @@ */ #include +#include #include #include #include @@ -109,10 +110,10 @@ int sc_main(int argc, char **argv) #ifdef RECORDING if (conf.simConfig.databaseRecording.value_or(false)) - dramSys = std::unique_ptr(new DRAMSysRecordable("DRAMSys", conf)); + dramSys = std::make_unique("DRAMSys", conf); else #endif - dramSys = std::unique_ptr(new DRAMSys("DRAMSys", conf)); + dramSys = std::make_unique("DRAMSys", conf); if (!conf.traceSetup.has_value()) SC_REPORT_FATAL("sc_main", "No tracesetup section provided."); @@ -126,7 +127,7 @@ int sc_main(int argc, char **argv) if (player->addLengthConverter) { std::string converterName("Converter_"); - lengthConverters.emplace_back(new LengthConverter(converterName.append(player->name()).c_str(), + lengthConverters.emplace_back(std::make_unique(converterName.append(player->name()).c_str(), Configuration::getInstance().memSpec->maxBytesPerBurst, Configuration::getInstance().storeMode != Configuration::StoreMode::NoStorage)); player->iSocket.bind(lengthConverters.back()->tSocket);