Fix for issue#89 (simulation stops too early)

Now we wait until no payloads are left in the controller before ending the
simulation.
This commit is contained in:
Éder F. Zulian
2016-06-13 16:21:36 +02:00
parent 417b454726
commit 144da7c0c7
2 changed files with 11 additions and 1 deletions

View File

@@ -104,12 +104,12 @@ public:
tlm_utils::simple_initiator_socket<Controller, BUSWIDTH, tlm::tlm_base_protocol_types> iSocket;
tlm_utils::simple_target_socket<Controller, BUSWIDTH, tlm::tlm_base_protocol_types> 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 ------

View File

@@ -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();