diff --git a/dram/src/simulation/Arbiter.h b/dram/src/simulation/Arbiter.h index bdc1f1bc..69215235 100644 --- a/dram/src/simulation/Arbiter.h +++ b/dram/src/simulation/Arbiter.h @@ -32,23 +32,22 @@ * Authors: * Robert Gernhardt * Matthias Jung + * Eder F. Zulian */ #ifndef ARBITER_H_ #define ARBITER_H_ - #include #include #include +#include #include #include #include #include "../common/xmlAddressdecoder.h" #include "../common/dramExtension.h" #include "../controller/core/TimingCalculation.h" -#include - using namespace std; using namespace tlm; diff --git a/dram/src/simulation/Simulation.cpp b/dram/src/simulation/Simulation.cpp index 0cc92723..8dcc6ced 100644 --- a/dram/src/simulation/Simulation.cpp +++ b/dram/src/simulation/Simulation.cpp @@ -32,21 +32,22 @@ * Authors: * Janik Schlemminger * Matthias Jung + * Eder F. Zulian */ +#include +#include +#include +#include + #include "Simulation.h" #include "../common/TlmRecorder.h" #include "../common/DebugManager.h" #include "../common/xmlAddressdecoder.h" #include "../controller/core/ControllerCore.h" #include "../controller/core/configuration/ConfigurationLoader.h" -#include -#include -#include -#include #include "../common/Utils.h" #include "../error/flip_memory.h" -#include "StlPlayer.h" using namespace std; @@ -108,26 +109,19 @@ void Simulation::instantiateModules(const string &pathToResources, const std::ve // The number of channels is equal the number of controllers and comes from config. controller = new Controller<>("controller"); - //TODO: this depends (or should depend) on config... Should be dynamic not fixed to four! -#if 0 - vector players; - for (int i = 0; i < NumberOfTracePlayers; i++) { + for (size_t i = 0; i < NumberOfTracePlayers; i++) { std::string playerStr = "player" + std::to_string(i); - players.push_back(new StlPlayer<>(playerStr, pathToResources + string("traces/") + devices[0].trace, devices[0].clkMhz, this)); + TracePlayer<> *player = new StlPlayer<>(playerStr.c_str(), pathToResources + string("traces/") + devices[i].trace, devices[i].clkMhz, this); + players.push_back(player); } -#endif - player1 = new StlPlayer<>("player1", pathToResources + string("traces/") + devices[0].trace, devices[0].clkMhz, this); - player2 = new StlPlayer<>("player2", pathToResources + string("traces/") + devices[1].trace, devices[1].clkMhz, this); - player3 = new StlPlayer<>("player3", pathToResources + string("traces/") + devices[2].trace, devices[2].clkMhz, this); - player4 = new StlPlayer<>("player4", pathToResources + string("traces/") + devices[3].trace, devices[3].clkMhz, this); } void Simulation::bindSockets() { - player1->iSocket.bind(arbiter->tSockets[0]); - player2->iSocket.bind(arbiter->tSockets[1]); - player3->iSocket.bind(arbiter->tSockets[2]); - player4->iSocket.bind(arbiter->tSockets[3]); + int i = 0; + for (auto player : players) { + player->iSocket.bind(arbiter->tSockets[i++]); + } // TODO: the number of controllers should be the number of channesl, right?! // each of the arbiter's initiators sockets should bind to a controller... @@ -142,10 +136,10 @@ Simulation::~Simulation() delete arbiter; // TODO: the number of components should come from config delete controller; - delete player1; - delete player2; - delete player3; - delete player4; + + for (auto player : players) { + delete player; + } } void Simulation::start() @@ -156,11 +150,11 @@ void Simulation::start() report(" -> memspec: \t\t" + Configuration::getInstance().memSpec.MemoryId); cout << endl; simulationStartTime = clock(); - // TODO: the number of components should come from config - player1->nextPayload(); - player2->nextPayload(); - player3->nextPayload(); - player4->nextPayload(); + + for (auto player : players) { + player->nextPayload(); + } + sc_set_stop_mode(SC_STOP_FINISH_DELTA); sc_start(); } diff --git a/dram/src/simulation/Simulation.h b/dram/src/simulation/Simulation.h index dd50e1d1..8cd8a1f5 100644 --- a/dram/src/simulation/Simulation.h +++ b/dram/src/simulation/Simulation.h @@ -32,20 +32,23 @@ * Authors: * Janik Schlemminger * Matthias Jung + * Eder F. Zulian */ #ifndef SIMULATION_H_ #define SIMULATION_H_ +#include +#include + #include "Dram.h" #include "Arbiter.h" #include "TracePlayer.h" #include "TraceGenerator.h" #include "ReorderBuffer.h" -#include "../controller/Controller.h" -#include -#include #include "TracePlayerListener.h" +#include "StlPlayer.h" +#include "../controller/Controller.h" #include "../common/third_party/tinyxml2/tinyxml2.h" #include "../error/flip_memory.h" @@ -102,11 +105,8 @@ private: Controller<> *controller; ReorderBuffer<> *reorder; - // TODO: here should be a vector or some other abstract data type and elements should be dynamically allocated based on configuration - TracePlayer<> *player1; - TracePlayer<> *player2; - TracePlayer<> *player3; - TracePlayer<> *player4; + // A vector of pointers to all trace player (that represent devices which acquire the bus and generate transactions targeting the memory) + std::vector*> players; clock_t simulationStartTime; void report(std::string message);