|
|
|
|
@@ -26,6 +26,7 @@
|
|
|
|
|
#include "../scheduler/Scheduler.h"
|
|
|
|
|
#include "../scheduler/Fifo.h"
|
|
|
|
|
#include "../scheduler/Fr_Fcfs.h"
|
|
|
|
|
#include "../scheduler/PARBS.h"
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
using namespace tlm;
|
|
|
|
|
@@ -61,10 +62,24 @@ public:
|
|
|
|
|
void buildScheduler()
|
|
|
|
|
{
|
|
|
|
|
string selectedScheduler = Configuration::getInstance().Scheduler;
|
|
|
|
|
|
|
|
|
|
if (selectedScheduler == "FR_FCFS")
|
|
|
|
|
scheduler = new FR_FCFS(*controller,
|
|
|
|
|
{
|
|
|
|
|
if(Configuration::getInstance().RefreshAwareScheduling)
|
|
|
|
|
cout << "Building refresh aware scheduler" << std::endl;
|
|
|
|
|
else
|
|
|
|
|
cout << "Building refresh un-aware scheduler" << std::endl;
|
|
|
|
|
|
|
|
|
|
scheduler = new FR_FCFS(controller->state.bankStates,
|
|
|
|
|
Configuration::getInstance().RefreshAwareScheduling,
|
|
|
|
|
Configuration::getInstance().AdaptiveOpenPagePolicy);
|
|
|
|
|
}
|
|
|
|
|
else if (selectedScheduler == "PAR_BS")
|
|
|
|
|
{
|
|
|
|
|
scheduler = new PAR_BS(controller->state.bankStates,
|
|
|
|
|
Configuration::getInstance().RefreshAwareScheduling,
|
|
|
|
|
Configuration::getInstance().Capsize);
|
|
|
|
|
}
|
|
|
|
|
else if (selectedScheduler == "FIFO")
|
|
|
|
|
scheduler = new Fifo();
|
|
|
|
|
else
|
|
|
|
|
@@ -90,7 +105,7 @@ public:
|
|
|
|
|
{
|
|
|
|
|
case Command::Read:
|
|
|
|
|
rec.recordPhase(payload, BEGIN_RD, command.getStart());
|
|
|
|
|
dataStrobe = command.getIntervalOnDataStrobe();
|
|
|
|
|
dataStrobe = command.getIntervalOnDataStrobe();
|
|
|
|
|
rec.updateDataStrobe(dataStrobe.start, dataStrobe.end, payload);
|
|
|
|
|
rec.recordPhase(payload, END_RD, command.getEnd());
|
|
|
|
|
|
|
|
|
|
@@ -99,7 +114,7 @@ public:
|
|
|
|
|
break;
|
|
|
|
|
case Command::ReadA:
|
|
|
|
|
rec.recordPhase(payload, BEGIN_RDA, command.getStart());
|
|
|
|
|
dataStrobe = command.getIntervalOnDataStrobe();
|
|
|
|
|
dataStrobe = command.getIntervalOnDataStrobe();
|
|
|
|
|
rec.updateDataStrobe(dataStrobe.start, dataStrobe.end, payload);
|
|
|
|
|
rec.recordPhase(payload, END_RDA, command.getEnd());
|
|
|
|
|
|
|
|
|
|
@@ -108,7 +123,7 @@ public:
|
|
|
|
|
break;
|
|
|
|
|
case Command::Write:
|
|
|
|
|
rec.recordPhase(payload, BEGIN_WR, command.getStart());
|
|
|
|
|
dataStrobe = command.getIntervalOnDataStrobe();
|
|
|
|
|
dataStrobe = command.getIntervalOnDataStrobe();
|
|
|
|
|
rec.updateDataStrobe(dataStrobe.start, dataStrobe.end, payload);
|
|
|
|
|
rec.recordPhase(payload, END_WR, command.getEnd());
|
|
|
|
|
|
|
|
|
|
@@ -117,7 +132,7 @@ public:
|
|
|
|
|
break;
|
|
|
|
|
case Command::WriteA:
|
|
|
|
|
rec.recordPhase(payload, BEGIN_WRA, command.getStart());
|
|
|
|
|
dataStrobe = command.getIntervalOnDataStrobe();
|
|
|
|
|
dataStrobe = command.getIntervalOnDataStrobe();
|
|
|
|
|
rec.updateDataStrobe(dataStrobe.start, dataStrobe.end, payload);
|
|
|
|
|
rec.recordPhase(payload, END_WRA, command.getEnd());
|
|
|
|
|
|
|
|
|
|
|