diff --git a/dram/src/core/powerdown/PowerDownManagerBankwise.cpp b/dram/src/core/powerdown/PowerDownManagerBankwise.cpp index 989bd4c3..98d7a89a 100644 --- a/dram/src/core/powerdown/PowerDownManagerBankwise.cpp +++ b/dram/src/core/powerdown/PowerDownManagerBankwise.cpp @@ -28,7 +28,7 @@ PowerDownManagerBankwise::PowerDownManagerBankwise(ControllerCore& controller) : void PowerDownManagerBankwise::sleep(Bank bank, sc_time time) { - if (!canSleep(bank)) + if (!canSleep(bank) || isInPowerDown(bank)) return; tlm_generic_payload& payload = powerDownPayloads[bank]; diff --git a/dram/src/core/refresh/RefreshManager.cpp b/dram/src/core/refresh/RefreshManager.cpp index a9569f09..853cadc1 100644 --- a/dram/src/core/refresh/RefreshManager.cpp +++ b/dram/src/core/refresh/RefreshManager.cpp @@ -99,4 +99,3 @@ void RefreshManager::setupTransactions() } } /* namespace core */ - diff --git a/dram/src/core/refresh/RefreshManager.h b/dram/src/core/refresh/RefreshManager.h index 3ffff7c3..aecb20b3 100644 --- a/dram/src/core/refresh/RefreshManager.h +++ b/dram/src/core/refresh/RefreshManager.h @@ -21,13 +21,14 @@ public: RefreshManager(ControllerCore& controller); virtual ~RefreshManager(); - bool hasCollision(const CommandSchedule& schedule) override; - bool hasCollision(const ScheduledCommand& command) override; - void scheduleRefresh(tlm::tlm_generic_payload& payload, sc_time time) override; + virtual bool hasCollision(const CommandSchedule& schedule) override; + virtual bool hasCollision(const ScheduledCommand& command) override; + + virtual void scheduleRefresh(tlm::tlm_generic_payload& payload, sc_time time) override; void reInitialize(Bank bank, sc_time time) override; - bool isInvalidated(tlm::tlm_generic_payload& payload, sc_time time) override; + virtual bool isInvalidated(tlm::tlm_generic_payload& payload, sc_time time) override; private: ControllerCore& controller; diff --git a/dram/src/core/refresh/RefreshManagerBankwise.cpp b/dram/src/core/refresh/RefreshManagerBankwise.cpp index 0073510d..8121ccf2 100644 --- a/dram/src/core/refresh/RefreshManagerBankwise.cpp +++ b/dram/src/core/refresh/RefreshManagerBankwise.cpp @@ -36,6 +36,8 @@ bool RefreshManagerBankwise::hasCollision(const CommandSchedule& schedule) bool RefreshManagerBankwise::hasCollision(const ScheduledCommand& command) { + const ScheduledCommand& ref= controller.state.getLastCommand(Command::AutoRefresh, command.getBank()); + return command.getStart() < controller.state.getLastCommand(Command::AutoRefresh, command.getBank()).getEnd() || command.getEnd() > nextPlannedRefreshs[command.getBank()];} diff --git a/dram/src/simulation/Controller.h b/dram/src/simulation/Controller.h index 93da1a68..0c9f5547 100644 --- a/dram/src/simulation/Controller.h +++ b/dram/src/simulation/Controller.h @@ -274,10 +274,10 @@ private: { Bank bank = DramExtension::getExtension(payload).getBank(); numberOfPayloadsInSystem[bank]--; - controller->powerDownManager->sleep(bank, sc_time_stamp()); printDebugMessage( "Payload left system on bank " + to_string(bank.ID()) + ". Total number of payloads in Controller: " + to_string(getTotalNumberOfPayloadsInSystem())); + controller->powerDownManager->sleep(bank, sc_time_stamp()); } @@ -340,7 +340,7 @@ private: void dramPEQCallback(tlm_generic_payload& payload, const tlm_phase& phase) { Bank bank = DramExtension::getExtension(payload).getBank(); - printDebugMessage("Received " + phaseNameToString(phase) + " from DRAM"); + printDebugMessage("Received " + phaseNameToString(phase) + " on bank " + to_string(bank.ID()) + " from DRAM"); if (phase == BEGIN_RD || phase == BEGIN_WR) { diff --git a/dram/src/simulation/main.cpp b/dram/src/simulation/main.cpp index f9117679..8d2606e4 100644 --- a/dram/src/simulation/main.cpp +++ b/dram/src/simulation/main.cpp @@ -40,7 +40,7 @@ int sc_main(int argc, char **argv) if(argc > 1) simulationToRun = argv[1]; else - simulationToRun = "sim-batch.xml"; + simulationToRun = "datasizes.xml"; SimulationManager manager(resources); manager.loadSimulationsFromXML(resources + "/simulations/" + simulationToRun);