diff --git a/DRAMSys/simulator/src/controller/Controller.h b/DRAMSys/simulator/src/controller/Controller.h index 39f05d49..7fc07d8a 100644 --- a/DRAMSys/simulator/src/controller/Controller.h +++ b/DRAMSys/simulator/src/controller/Controller.h @@ -104,12 +104,12 @@ public: tlm_utils::simple_initiator_socket iSocket; tlm_utils::simple_target_socket tSocket; + unsigned int getTotalNumberOfPayloadsInSystem(); private: void buildScheduler(); void payloadEntersSystem(tlm_generic_payload& payload); void payloadLeavesSystem(tlm_generic_payload& payload); - unsigned int getTotalNumberOfPayloadsInSystem(); void scheduleNextFromScheduler(Bank bank); // --- FRONTEND ------ diff --git a/DRAMSys/simulator/src/simulation/Simulation.cpp b/DRAMSys/simulator/src/simulation/Simulation.cpp index 0bcd0a43..5105c29c 100644 --- a/DRAMSys/simulator/src/simulation/Simulation.cpp +++ b/DRAMSys/simulator/src/simulation/Simulation.cpp @@ -221,6 +221,16 @@ void inline Simulation::tracePlayerTerminates() void Simulation::stop() { wait(terminateSimulation); + + unsigned int pending_payloads = 0; + do { + pending_payloads = 0; + for (auto controller : controllers) { + pending_payloads += controller->getTotalNumberOfPayloadsInSystem(); + } + wait(sc_time(200, SC_NS)); + } while(pending_payloads != 0); + report("\nTerminating simulation"); for (auto controller : controllers) { controller->terminateSimulation();