116 lines
2.8 KiB
C++
116 lines
2.8 KiB
C++
/*
|
|
* main.cpp
|
|
*
|
|
* Created on: Mar 16, 2014
|
|
* Author: robert
|
|
*/
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include "SimulationManager.h"
|
|
#include "../core/configuration/Configuration.h"
|
|
|
|
#include <systemc.h>
|
|
#include <sys/wait.h>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
using namespace std;
|
|
using namespace simulation;
|
|
|
|
string resources;
|
|
bool silent = false;
|
|
|
|
string pathOfFile(string file)
|
|
{
|
|
return file.substr(0, file.find_last_of('/'));
|
|
}
|
|
|
|
void startTraceAnalyzer(string traceName)
|
|
{
|
|
string p = getenv("trace");
|
|
string run_tpr = p + " " + traceName;
|
|
system(run_tpr.c_str());
|
|
}
|
|
|
|
bool runSimulation(string traceName, DramSetup setup, vector<Device> devices)
|
|
{
|
|
int pid = fork();
|
|
int status = 0;
|
|
if (pid == 0)
|
|
{
|
|
Simulation simulation("sim", resources, traceName, setup, devices,silent);
|
|
simulation.startSimulation();
|
|
return true;
|
|
}
|
|
waitpid(pid, &status, 0);
|
|
return false;
|
|
}
|
|
|
|
bool batchTraces(DramSetup setup, vector<pair<string, string>> tracePairs)
|
|
{
|
|
int id = 0;
|
|
for (pair<string, string> pair : tracePairs)
|
|
{
|
|
id++;
|
|
string traceName = "traceBatch" + to_string(id) + ".tdb";
|
|
if (runSimulation(traceName, setup, { Device(pair.first), Device(pair.second) }))
|
|
return true; //kill child
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool batchSetups(pair<string, string> tracePair, vector<DramSetup> setups)
|
|
{
|
|
int id = 0;
|
|
for (auto& setup : setups)
|
|
{
|
|
id++;
|
|
string traceName = "setupBatch" + to_string(id) + ".tdb";
|
|
if (runSimulation(traceName, setup,
|
|
{ Device(tracePair.first), Device(tracePair.second) }))
|
|
return true; //kill child
|
|
}
|
|
return false;
|
|
}
|
|
int sc_main(int argc, char **argv)
|
|
{
|
|
sc_set_time_resolution(1, SC_PS);
|
|
|
|
resources = pathOfFile(argv[0]) + string("/../resources/");
|
|
|
|
// DramSetup setup;
|
|
// setup.memconfig = "memconfig.xml";
|
|
// //setup.memspec = "MICRON_4Gb_DDR4-1866_8bit_A.xml";
|
|
// setup.memspec = "MatzesWideIO.xml";
|
|
//
|
|
// vector<pair<string, string>> tracePairs;
|
|
// tracePairs.push_back(pair<string, string>("chstone-mips_32.stl", "chstone-motion_32.stl"));
|
|
//
|
|
// batchTraces(setup, tracePairs);
|
|
|
|
// DramSetup setup2;
|
|
// setup2.memconfig = "memconfig.xml";
|
|
// setup2.memspec = "MICRON_4Gb_DDR4-1866_8bit_A.xml";
|
|
//batchSetups(tracePairs[0], { setup, setup2 });
|
|
|
|
Device d1("chstone-motion_32.stl",4);
|
|
Device d2("empty.stl",4);
|
|
string dramSpec = "MatzesWideIO.xml";
|
|
|
|
if(runSimulation("fifo.tdb",DramSetup("fifo.xml",dramSpec),{d1,d2}))
|
|
return 0;
|
|
if(runSimulation("fr_fcfs.tdb",DramSetup("fr_fcfs.xml",dramSpec),{d1,d2}))
|
|
return 0;
|
|
// if(runSimulation("fr_fcfs_unaware.tdb",DramSetup("fr_fcfs_unaware.xml",dramSpec),{d1,d2}))
|
|
// return 0;
|
|
// if(runSimulation("par_bs.tdb",DramSetup("par_bs.xml",dramSpec),{d1,d2}))
|
|
// return 0;
|
|
// if(runSimulation("par_bs_unaware.tdb",DramSetup("par_bs_unaware.xml",dramSpec),{d1,d2}))
|
|
// return 0;
|
|
//
|
|
// startTraceAnalyzer("fifo.tdb fr_fcfs.tdb fr_fcfs_unaware.tdb par_bs.tdb par_bs_unaware.tdb");
|
|
return 0;
|
|
}
|
|
|