Traceplayer has a clock now
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
|
||||
|
||||
<trace-setup id="media">
|
||||
<device>mediabench-epic_32.stl</device>
|
||||
<device clkMhz="800">mediabench-epic_32.stl</device>
|
||||
</trace-setup>
|
||||
|
||||
</trace-setups>
|
||||
|
||||
@@ -23,6 +23,11 @@ sc_time getDelayToMeetConstraint(sc_time previous, sc_time start, sc_time constr
|
||||
return SC_ZERO_TIME;
|
||||
}
|
||||
|
||||
const sc_time FrequencyToClk(double frequencyMhz)
|
||||
{
|
||||
return sc_time(1 / frequencyMhz, SC_US);
|
||||
}
|
||||
|
||||
const sc_time clkAlign(sc_time time, Alignment alignment)
|
||||
{
|
||||
sc_time clk = Configuration::getInstance().Timings.clk;
|
||||
|
||||
@@ -26,6 +26,7 @@ sc_time getDelayToMeetConstraint(sc_time previous, sc_time start, sc_time constr
|
||||
enum Alignment {UP, DOWN};
|
||||
const sc_time clkAlign(sc_time time, Alignment alignment = UP);
|
||||
bool isClkAligned(sc_time time, sc_time clk);
|
||||
const sc_time FrequencyToClk(double frequencyMhz);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "MemSpecLoader.h"
|
||||
#include "TimingConfiguration.h"
|
||||
#include "../TimingCalculation.h"
|
||||
|
||||
using namespace tinyxml2;
|
||||
using namespace std;
|
||||
@@ -91,9 +92,8 @@ void MemSpecLoader::loadDDR4(Configuration& config, XMLElement* memspec)
|
||||
//MemTimings
|
||||
XMLElement* timings = memspec->FirstChildElement("memtimingspec");
|
||||
double clkMhz = queryDoubleParameter(timings, "clkMhz");
|
||||
sc_time clk = sc_time(1 / clkMhz, SC_US);
|
||||
config.Timings.clk = clk;
|
||||
|
||||
config.Timings.clk = FrequencyToClk(clkMhz);
|
||||
sc_time clk = config.Timings.clk;
|
||||
config.Timings.tRP = clk * queryUIntParameter(timings, "RP");
|
||||
config.Timings.tRAS = clk * queryUIntParameter(timings, "RAS");
|
||||
config.Timings.tRC = clk * queryUIntParameter(timings, "RC");
|
||||
|
||||
@@ -83,10 +83,10 @@ void Simulation::instantiateModules(const string &pathToResources, const std::ve
|
||||
arbiter = new Arbiter<NumberOfTracePlayers, 128>("arbiter");
|
||||
controller = new Controller<>("controller");
|
||||
|
||||
player1 = new TracePlayer<>("player1", pathToResources + string("traces/") + devices[0].trace, devices[0].burstLength, this);
|
||||
player2 = new TracePlayer<>("player2", pathToResources + string("traces/") + devices[1].trace, devices[1].burstLength, this);
|
||||
player3 = new TracePlayer<>("player3", pathToResources + string("traces/") + devices[2].trace, devices[2].burstLength, this);
|
||||
player4 = new TracePlayer<>("player4", pathToResources + string("traces/") + devices[3].trace, devices[3].burstLength, this);
|
||||
player1 = new TracePlayer<>("player1", pathToResources + string("traces/") + devices[0].trace, devices[0].burstLength, devices[0].clk, this);
|
||||
player2 = new TracePlayer<>("player2", pathToResources + string("traces/") + devices[1].trace, devices[1].burstLength, devices[1].clk, this);
|
||||
player3 = new TracePlayer<>("player3", pathToResources + string("traces/") + devices[2].trace, devices[2].burstLength, devices[2].clk, this);
|
||||
player4 = new TracePlayer<>("player4", pathToResources + string("traces/") + devices[3].trace, devices[3].burstLength, devices[3].clk, this);
|
||||
}
|
||||
|
||||
void Simulation::bindSockets()
|
||||
|
||||
@@ -30,10 +30,11 @@ struct DramSetup
|
||||
struct Device
|
||||
{
|
||||
Device():trace("empty.stl"), burstLength(0){}
|
||||
Device(std::string trace, unsigned int burstLength = 8) : trace(trace), burstLength(burstLength)
|
||||
Device(std::string trace, sc_time clk, unsigned int burstLength = 8) : trace(trace), clk (clk), burstLength(burstLength)
|
||||
{
|
||||
}
|
||||
std::string trace;
|
||||
sc_time clk;
|
||||
unsigned int burstLength;
|
||||
};
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ void SimulationManager::addTraceSetup(SimulationBatch& batch, tinyxml2::XMLEleme
|
||||
vector<Device> devices;
|
||||
for (XMLElement* device = element->FirstChildElement("device"); device != NULL; device = device->NextSiblingElement("device"))
|
||||
{
|
||||
devices.push_back(Device(device->GetText(), device->IntAttribute("bl")));
|
||||
devices.push_back(Device(device->GetText(), FrequencyToClk(device->DoubleAttribute("clkMhz")), device->IntAttribute("bl")));
|
||||
}
|
||||
while (devices.size() < Simulation::NumberOfTracePlayers)
|
||||
{
|
||||
|
||||
@@ -31,7 +31,7 @@ struct TracePlayer: public sc_module
|
||||
{
|
||||
public:
|
||||
tlm_utils::simple_initiator_socket<TracePlayer, BUSWIDTH, tlm::tlm_base_protocol_types> iSocket;
|
||||
TracePlayer(sc_module_name /*name*/, string pathToTrace, unsigned int burstLength,
|
||||
TracePlayer(sc_module_name /*name*/, string pathToTrace, unsigned int burstLength, sc_time clk,
|
||||
simulation::ISimulation* simulationManager);
|
||||
|
||||
void start();
|
||||
@@ -46,6 +46,7 @@ private:
|
||||
MemoryManager memoryManager;
|
||||
ifstream file;
|
||||
unsigned int burstlenght;
|
||||
sc_time clk;
|
||||
unsigned int numberOfPendingTransactions;
|
||||
unsigned int transactionsSent;
|
||||
unsigned int transactionsReceived;
|
||||
@@ -54,8 +55,8 @@ private:
|
||||
|
||||
|
||||
template<unsigned int BUSWIDTH>
|
||||
TracePlayer<BUSWIDTH>::TracePlayer(sc_module_name, string pathToTrace, unsigned int burstLength, simulation::ISimulation *simulationManager) :
|
||||
payloadEventQueue(this, &TracePlayer<BUSWIDTH>::peqCallback), file(pathToTrace), burstlenght(burstLength),
|
||||
TracePlayer<BUSWIDTH>::TracePlayer(sc_module_name, string pathToTrace, unsigned int burstLength, sc_time clk, simulation::ISimulation *simulationManager) :
|
||||
payloadEventQueue(this, &TracePlayer<BUSWIDTH>::peqCallback), file(pathToTrace), burstlenght(burstLength), clk(clk),
|
||||
numberOfPendingTransactions(0), transactionsSent(0), transactionsReceived(0), simulationManager(simulationManager)
|
||||
{
|
||||
if (!file.is_open())
|
||||
@@ -112,7 +113,7 @@ void TracePlayer<BUSWIDTH>::generateNextPayload()
|
||||
payload->set_byte_enable_length(0);
|
||||
payload->set_streaming_width(burstlenght);
|
||||
|
||||
sc_time sendingTime = sc_time(std::stoi(time.c_str()), SC_NS);
|
||||
sc_time sendingTime = std::stoi(time.c_str())*clk;
|
||||
GenerationExtension* genExtension = new GenerationExtension(sendingTime);
|
||||
payload->set_auto_extension(genExtension);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user