Files
DRAMSys/dram/src/simulation/Simulation.h

80 lines
2.1 KiB
C++

/*
* Simulation.h
*
* Created on: Apr 4, 2014
* Author: jonny
*/
#ifndef SIMULATION_H_
#define SIMULATION_H_
#include "Dram.h"
#include "Arbiter.h"
#include "TracePlayer.h"
#include "TlmPacketGenerator.h"
#include "ReorderBuffer.h"
#include "../controller/Controller.h"
#include <string>
#include <systemc.h>
#include "TracePlayerListener.h"
struct DramSetup
{
DramSetup():memconfig(""),memspec(""){}
DramSetup(std::string memconfig, std::string memspec, std::string addressmapping) : memconfig(memconfig), memspec(memspec), addressmapping(addressmapping) {}
std::string memconfig;
std::string memspec;
std::string addressmapping;
};
struct Device
{
Device():trace("empty.stl"), burstLength(0){}
Device(std::string trace, unsigned int clkMhz, unsigned int burstLength = 8) : trace(trace), clkMhz (clkMhz), burstLength(burstLength)
{
}
std::string trace;
unsigned int clkMhz;
unsigned int burstLength;
};
class Simulation: public sc_module, public TracePlayerListener
{
public:
SC_HAS_PROCESS(Simulation);
Simulation(sc_module_name name, string pathToResources, string traceName, DramSetup setup,
std::vector<Device> devices);
~Simulation();
void start();
void stop();
virtual void tracePlayerTerminates() override;
constexpr static unsigned int NumberOfTracePlayers = 4;
private:
std::string traceName;
DramSetup dramSetup;
sc_event terminateSimulation;
Dram<> *dram;
Arbiter<NumberOfTracePlayers, 128> *arbiter;
Controller<> *controller;
ReorderBuffer<> *reorder;
TracePlayer<> *player1;
TracePlayer<> *player2;
TracePlayer<> *player3;
TracePlayer<> *player4;
clock_t simulationStartTime;
void report(std::string message);
void setupDebugManager(const string& traceName);
void setupTlmRecorder(const string &traceName, const string &pathToResources, const DramSetup &setup, const std::vector<Device> &devices);
void instantiateModules(const string &pathToResources, const std::vector<Device> &devices);
void bindSockets();
};
#endif /* SIMULATIONMANAGER_H_ */