From 144da7c0c733336de07ead1aff82ccabc46a6f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89der=20F=2E=20Zulian?= Date: Mon, 13 Jun 2016 16:21:36 +0200 Subject: [PATCH] Fix for issue#89 (simulation stops too early) Now we wait until no payloads are left in the controller before ending the simulation. --- DRAMSys/simulator/src/controller/Controller.h | 2 +- DRAMSys/simulator/src/simulation/Simulation.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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 964c6fc4..49e962aa 100644 --- a/DRAMSys/simulator/src/simulation/Simulation.cpp +++ b/DRAMSys/simulator/src/simulation/Simulation.cpp @@ -212,6 +212,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();