Included timing parameters for RGR.
This commit is contained in:
@@ -88,6 +88,7 @@ struct Configuration
|
||||
unsigned int NumberOfMemChannels = 1;
|
||||
bool ControllerCoreRefDisable = false;
|
||||
bool RowGranularRef = false;
|
||||
// TODO: will be removed in the future
|
||||
unsigned int trasbclk = 0;
|
||||
sc_time getTrasb();
|
||||
unsigned int trrdblclk = 0;
|
||||
@@ -100,6 +101,7 @@ struct Configuration
|
||||
sc_time getTrcb();
|
||||
unsigned int tfawbclk = 0;
|
||||
sc_time getTfawb();
|
||||
// -----------------------------------
|
||||
bool RGRB0 = true;
|
||||
bool RGRB1 = true;
|
||||
bool RGRB2 = true;
|
||||
|
||||
@@ -199,7 +199,11 @@ void ConfigurationLoader::loadCommons(Configuration &config, XMLElement *xmlSpec
|
||||
memSpec->tCL = clk * queryUIntParameter(timings, "CL");
|
||||
memSpec->tDQSCK = clk * queryUIntParameter(timings, "DQSCK");
|
||||
memSpec->tRAS = clk * queryUIntParameter(timings, "RAS");
|
||||
memSpec->tRAS_ORGR = parameterExists(timings, "RAS_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RAS_ORGR") : memSpec->tRAS;
|
||||
memSpec->tRC = clk * queryUIntParameter(timings, "RC");
|
||||
memSpec->tRC_ORGR = parameterExists(timings, "RC_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RC_ORGR") : memSpec->tRC;
|
||||
memSpec->tRCD = clk * queryUIntParameter(timings, "RCD");
|
||||
memSpec->tRL = clk * queryUIntParameter(timings, "RL");
|
||||
memSpec->tRTP = clk * queryUIntParameter(timings, "RTP");
|
||||
@@ -228,10 +232,16 @@ void ConfigurationLoader::loadDDR3(Configuration &config, XMLElement *xmlSpec)
|
||||
sc_time clk = memSpec->clk;
|
||||
memSpec->tCCD = clk * queryUIntParameter(timings, "CCD");
|
||||
memSpec->tFAW = clk * queryUIntParameter(timings, "FAW");
|
||||
memSpec->tRRD = clk * queryUIntParameter(timings, "RRD");
|
||||
memSpec->tFAW_ORGR = parameterExists(timings, "FAW_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "FAW_ORGR") : memSpec->tFAW;
|
||||
memSpec->tREFI = clk * queryUIntParameter(timings, "REFI");
|
||||
memSpec->tRFC = clk * queryUIntParameter(timings, "RFC");
|
||||
memSpec->tRP = clk * queryUIntParameter(timings, "RP");
|
||||
memSpec->tRP_ORGR = parameterExists(timings, "RP_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RP_ORGR") : memSpec->tRP;
|
||||
memSpec->tRRD = clk * queryUIntParameter(timings, "RRD");
|
||||
memSpec->tRRD_ORGR = parameterExists(timings, "RRD_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RRD_ORGR") : memSpec->tRRD;
|
||||
memSpec->tWTR = clk * queryUIntParameter(timings, "WTR");
|
||||
memSpec->tXPDLL = clk * queryUIntParameter(timings, "XPDLL");
|
||||
memSpec->tXSDLL = clk * queryUIntParameter(timings, "XSDLL");
|
||||
@@ -296,11 +306,19 @@ void ConfigurationLoader::loadDDR4(Configuration &config, XMLElement *xmlSpec)
|
||||
memSpec->tCCD_S = clk * queryUIntParameter(timings, "CCD_S");
|
||||
memSpec->tCCD_L = clk * queryUIntParameter(timings, "CCD_L");
|
||||
memSpec->tFAW = clk * queryUIntParameter(timings, "FAW");
|
||||
memSpec->tFAW_ORGR = parameterExists(timings, "FAW_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "FAW_ORGR") : memSpec->tFAW;
|
||||
memSpec->tREFI = clk * queryUIntParameter(timings, "REFI");
|
||||
memSpec->tRFC = clk * queryUIntParameter(timings, "RFC");
|
||||
memSpec->tRP = clk * queryUIntParameter(timings, "RP");
|
||||
memSpec->tRP_ORGR = parameterExists(timings, "RP_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RP_ORGR") : memSpec->tRP;
|
||||
memSpec->tRRD_S = clk * queryUIntParameter(timings, "RRD_S");
|
||||
memSpec->tRRD_S_ORGR = parameterExists(timings, "RRD_S_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RRD_S_ORGR") : memSpec->tRRD_S;
|
||||
memSpec->tRRD_L = clk * queryUIntParameter(timings, "RRD_L");
|
||||
memSpec->tRRD_L_ORGR = parameterExists(timings, "RRD_L_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RRD_L_ORGR") : memSpec->tRRD_L;
|
||||
memSpec->tWTR_S = clk * queryUIntParameter(timings, "WTR_S");
|
||||
memSpec->tWTR_L = clk * queryUIntParameter(timings, "WTR_L");
|
||||
memSpec->tXPDLL = clk * queryUIntParameter(timings, "XPDLL");
|
||||
@@ -373,19 +391,24 @@ void ConfigurationLoader::loadLPDDR4(Configuration &config, XMLElement *xmlSpec)
|
||||
memSpec->tCCDMW = clk * queryUIntParameter(timings, "CCDMW");
|
||||
memSpec->tESCKE = clk * queryUIntParameter(timings, "ESCKE");
|
||||
memSpec->tFAW = clk * queryUIntParameter(timings, "FAW");
|
||||
memSpec->tFAW_ORGR = parameterExists(timings, "FAW_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "FAW_ORGR") : memSpec->tFAW;
|
||||
memSpec->tWTR = clk * queryUIntParameter(timings, "WTR");
|
||||
memSpec->tPPD = clk * queryUIntParameter(timings, "PPD");
|
||||
memSpec->tREFIAB = clk * queryUIntParameter(timings, "REFIAB");
|
||||
memSpec->tREFIPB = clk * queryUIntParameter(timings, "REFIAB");
|
||||
memSpec->tREFIPB = clk * queryUIntParameter(timings, "REFIPB");
|
||||
memSpec->tRFCAB = clk * queryUIntParameter(timings, "RFCAB");
|
||||
memSpec->tRFCPB = clk * queryUIntParameter(timings, "RFCPB");
|
||||
memSpec->tRPAB = clk * queryUIntParameter(timings, "RPAB");
|
||||
memSpec->tRPPB = clk * queryUIntParameter(timings, "RPPB");
|
||||
memSpec->tRPPB_ORGR = parameterExists(timings, "RPPB_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RPPB_ORGR") : memSpec->tRPPB;
|
||||
memSpec->tRRD = clk * queryUIntParameter(timings, "RRD");
|
||||
memSpec->tRRD_ORGR = parameterExists(timings, "RRD_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RRD_ORGR") : memSpec->tRRD;
|
||||
|
||||
|
||||
// TODO: old timings, will me removed
|
||||
memSpec->tRP_old = clk * queryUIntParameter(timings, "RPPB");
|
||||
memSpec->tRRD_S_old = clk * queryUIntParameter(timings, "RRD");
|
||||
memSpec->tRRD_L_old = clk * queryUIntParameter(timings, "RRD");
|
||||
memSpec->tCCD_S_old = clk * queryUIntParameter(timings, "CCD");
|
||||
@@ -397,6 +420,7 @@ void ConfigurationLoader::loadLPDDR4(Configuration &config, XMLElement *xmlSpec)
|
||||
memSpec->tXSDLL_old = clk * queryUIntParameter(timings, "XS");
|
||||
memSpec->tRFC_old = clk * queryUIntParameter(timings, "RFCAB");
|
||||
memSpec->tREFI_old = clk * queryUIntParameter(timings, "REFIAB");
|
||||
memSpec->tRP_old = clk * queryUIntParameter(timings, "RPPB");
|
||||
|
||||
memSpec->refreshTimings.clear();
|
||||
for (unsigned int i = 0; i < memSpec->NumberOfBanks; ++i) {
|
||||
@@ -444,11 +468,15 @@ void ConfigurationLoader::loadWideIO(Configuration &config, XMLElement *memspec)
|
||||
memSpec->tREFI = clk * queryUIntParameter(timings, "REFI");
|
||||
memSpec->tRFC = clk * queryUIntParameter(timings, "RFC");
|
||||
memSpec->tRP = clk * queryUIntParameter(timings, "RP");
|
||||
memSpec->tRP_ORGR = parameterExists(timings, "RP_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RP_ORGR") : memSpec->tRP;
|
||||
memSpec->tRRD = clk * queryUIntParameter(timings, "RRD");
|
||||
memSpec->tRRD_ORGR = parameterExists(timings, "RRD_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "RRD_ORGR") : memSpec->tRRD;
|
||||
memSpec->tTAW = clk * queryUIntParameter(timings, "TAW");
|
||||
memSpec->tTAW_ORGR = parameterExists(timings, "TAW_ORGR") ?
|
||||
clk * queryUIntParameter(timings, "TAW_ORGR") : memSpec->tTAW;
|
||||
memSpec->tWTR = clk * queryUIntParameter(timings, "WTR");
|
||||
memSpec->tXPDLL = clk * queryUIntParameter(timings, "XPDLL");
|
||||
memSpec->tXSDLL = clk * queryUIntParameter(timings, "XSDLL");
|
||||
|
||||
|
||||
// TODO: old timings, will me removed
|
||||
|
||||
@@ -90,7 +90,9 @@ struct MemSpec
|
||||
sc_time tCL; // unused, will be used in the future
|
||||
sc_time tDQSCK;
|
||||
sc_time tRAS; // active-time (act -> pre same bank)
|
||||
sc_time tRAS_ORGR;
|
||||
sc_time tRC; // RAS-cycle-time (min time bw 2 succesive ACT to same bank)
|
||||
sc_time tRC_ORGR;
|
||||
sc_time tRCD; // act -> read/write
|
||||
sc_time tRL; // read latency (read command start to data strobe)
|
||||
sc_time tRTP; // read to precharge
|
||||
@@ -172,10 +174,13 @@ struct MemSpecDDR3 : public MemSpec
|
||||
{
|
||||
sc_time tCCD;
|
||||
sc_time tFAW;
|
||||
sc_time tFAW_ORGR;
|
||||
sc_time tREFI;
|
||||
sc_time tRFC;
|
||||
sc_time tRP;
|
||||
sc_time tRP_ORGR;
|
||||
sc_time tRRD;
|
||||
sc_time tRRD_ORGR;
|
||||
sc_time tWTR;
|
||||
sc_time tXPDLL;
|
||||
sc_time tXSDLL;
|
||||
@@ -186,11 +191,15 @@ struct MemSpecDDR4 : public MemSpec
|
||||
sc_time tCCD_S;
|
||||
sc_time tCCD_L;
|
||||
sc_time tFAW;
|
||||
sc_time tFAW_ORGR;
|
||||
sc_time tREFI;
|
||||
sc_time tRFC;
|
||||
sc_time tRP;
|
||||
sc_time tRP_ORGR;
|
||||
sc_time tRRD_S;
|
||||
sc_time tRRD_S_ORGR;
|
||||
sc_time tRRD_L;
|
||||
sc_time tRRD_L_ORGR;
|
||||
sc_time tWTR_S;
|
||||
sc_time tWTR_L;
|
||||
sc_time tXPDLL;
|
||||
@@ -200,25 +209,13 @@ struct MemSpecDDR4 : public MemSpec
|
||||
virtual sc_time getExecutionTime(Command command, tlm::tlm_generic_payload &payload) const override;
|
||||
};
|
||||
|
||||
struct MemSpecWideIO : public MemSpec
|
||||
{
|
||||
sc_time tCCD;
|
||||
sc_time tREFI;
|
||||
sc_time tRFC;
|
||||
sc_time tRP;
|
||||
sc_time tRRD;
|
||||
sc_time tTAW;
|
||||
sc_time tWTR;
|
||||
sc_time tXPDLL;
|
||||
sc_time tXSDLL;
|
||||
};
|
||||
|
||||
struct MemSpecLPDDR4 : public MemSpec
|
||||
{
|
||||
sc_time tCCD;
|
||||
sc_time tCCDMW;
|
||||
sc_time tESCKE;
|
||||
sc_time tFAW;
|
||||
sc_time tFAW_ORGR;
|
||||
sc_time tWTR;
|
||||
sc_time tPPD;
|
||||
sc_time tREFIAB;
|
||||
@@ -227,7 +224,23 @@ struct MemSpecLPDDR4 : public MemSpec
|
||||
sc_time tRFCPB;
|
||||
sc_time tRPAB;
|
||||
sc_time tRPPB;
|
||||
sc_time tRPPB_ORGR;
|
||||
sc_time tRRD;
|
||||
sc_time tRRD_ORGR;
|
||||
};
|
||||
|
||||
struct MemSpecWideIO : public MemSpec
|
||||
{
|
||||
sc_time tCCD;
|
||||
sc_time tREFI;
|
||||
sc_time tRFC;
|
||||
sc_time tRP;
|
||||
sc_time tRP_ORGR;
|
||||
sc_time tRRD;
|
||||
sc_time tRRD_ORGR;
|
||||
sc_time tTAW;
|
||||
sc_time tTAW_ORGR;
|
||||
sc_time tWTR;
|
||||
};
|
||||
|
||||
#endif // MEMSPEC_H
|
||||
|
||||
@@ -46,27 +46,19 @@
|
||||
class ScheduledCommand
|
||||
{
|
||||
public:
|
||||
|
||||
ScheduledCommand(Command command, sc_time start, sc_time executionTime,
|
||||
const DramExtension &extension) :
|
||||
command(command), start(start), executionTime(executionTime),
|
||||
end(start + executionTime),
|
||||
extension(extension)
|
||||
{
|
||||
}
|
||||
end(start + executionTime), extension(extension) {}
|
||||
|
||||
ScheduledCommand(Command command, sc_time start, sc_time executionTime,
|
||||
const tlm::tlm_generic_payload &payload) :
|
||||
ScheduledCommand(command, start, executionTime,
|
||||
DramExtension::getExtension(payload))
|
||||
{
|
||||
}
|
||||
DramExtension::getExtension(payload)) {}
|
||||
|
||||
ScheduledCommand() :
|
||||
command(Command::NOP), start(SC_ZERO_TIME), executionTime(SC_ZERO_TIME),
|
||||
end(SC_ZERO_TIME), extension()
|
||||
{
|
||||
}
|
||||
end(SC_ZERO_TIME), extension() {}
|
||||
|
||||
bool isNoCommand() const;
|
||||
bool isValidCommand() const;
|
||||
|
||||
Reference in New Issue
Block a user