Traceplayer has a clock now

This commit is contained in:
Janik Schlemminger
2014-07-15 00:10:49 +02:00
parent c77048ac93
commit c135d7c31b
8 changed files with 22 additions and 14 deletions

View File

@@ -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>

View File

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

View File

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

View File

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

View File

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

View File

@@ -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;
};

View File

@@ -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)
{

View File

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