Configuration for ECC Controller extended to make it possible to add other ECC Controller
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
<NumberOfDevicesOnDIMM value = "8" />
|
||||
<CheckTLM2Protocol value = "0" />
|
||||
<AddressOffset value = "0" />
|
||||
<ECCControllerMode value = "Disabled" />
|
||||
<ErrorChipSeed value="42" />
|
||||
<ErrorCSVFile value="" />
|
||||
<!-- Modes:
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
<NumberOfDevicesOnDIMM value = "8" />
|
||||
<CheckTLM2Protocol value = "0" />
|
||||
<AddressOffset value = "0" />
|
||||
<ECCControllerMode value = "Disabled" />
|
||||
<ErrorChipSeed value="42" />
|
||||
<ErrorCSVFile value="" />
|
||||
<!-- Modes:
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<NumberOfDevicesOnDIMM value = "8" />
|
||||
<CheckTLM2Protocol value = "0" />
|
||||
<AddressOffset value = "0" />
|
||||
<EnableControllerECC value = "1" />
|
||||
<ECCControllerMode value = "Hamming" />
|
||||
<ErrorChipSeed value="42" />
|
||||
<ErrorCSVFile value="" />
|
||||
<!-- Modes:
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<NumberOfMemChannels value="4"/>
|
||||
<NumberOfDevicesOnDIMM value = "1" />
|
||||
<CheckTLM2Protocol value = "0" />
|
||||
<ECCControllerMode value = "Disabled" />
|
||||
<ErrorChipSeed value="42" />
|
||||
<ErrorCSVFile value="../../DRAMSys/simulator/resources/error/wideio.csv" />
|
||||
<!-- Modes:
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<NumberOfMemChannels value="1"/>
|
||||
<NumberOfDevicesOnDIMM value = "1" />
|
||||
<CheckTLM2Protocol value = "0" />
|
||||
<EnableControllerECC value = "1" />
|
||||
<ECCControllerMode value = "Hamming" />
|
||||
<ErrorChipSeed value="42" />
|
||||
<ErrorCSVFile value="../../DRAMSys/simulator/resources/error/wideio.csv" />
|
||||
<!-- Modes:
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<NumberOfMemChannels value="1"/>
|
||||
<NumberOfDevicesOnDIMM value = "1" />
|
||||
<CheckTLM2Protocol value = "0" />
|
||||
<ECCControllerMode value = "Disabled" />
|
||||
<ErrorChipSeed value="42" />
|
||||
<ErrorCSVFile value="../../DRAMSys/simulator/resources/error/wideio.csv" />
|
||||
<!-- Modes:
|
||||
|
||||
@@ -110,6 +110,19 @@ EPowerDownMode string2PDNMode(string s)
|
||||
}
|
||||
}
|
||||
|
||||
ECCControllerMode string2ECCControllerMode(string s)
|
||||
{
|
||||
if(s == "Disabled")
|
||||
return ECCControllerMode::Disabled;
|
||||
else if(s == "Hamming")
|
||||
return ECCControllerMode::Hamming;
|
||||
else
|
||||
{
|
||||
SC_REPORT_FATAL("Configuration", ("Unknown ECCControllerMode: " + s).c_str());
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
enum sc_time_unit string2TimeUnit(string s)
|
||||
{
|
||||
if (s == "s")
|
||||
@@ -201,8 +214,8 @@ void Configuration::setParameter(std::string name, std::string value)
|
||||
}
|
||||
else if(name == "CheckTLM2Protocol")
|
||||
CheckTLM2Protocol = string2bool(value);
|
||||
else if(name == "EnableControllerECC")
|
||||
EnableControllerECC = string2bool(value);
|
||||
else if(name == "ECCControllerMode")
|
||||
ECCMode = string2ECCControllerMode(value);
|
||||
// Specification for ErrorChipSeed, ErrorCSVFile path and StoreMode
|
||||
else if(name == "ErrorChipSeed")
|
||||
ErrorChipSeed = string2int(value);
|
||||
|
||||
@@ -49,6 +49,8 @@ enum class StorageMode{NoStorage, Store, ErrorModel};
|
||||
|
||||
enum class EPowerDownMode{NoPowerDown, Staggered, TimeoutPDN, TimeoutSREF};
|
||||
|
||||
enum class ECCControllerMode{Disabled, Hamming};
|
||||
|
||||
struct Configuration
|
||||
{
|
||||
static std::string memspecUri;
|
||||
@@ -81,7 +83,7 @@ struct Configuration
|
||||
bool SimulationProgressBar = false;
|
||||
unsigned int NumberOfDevicesOnDIMM = 1;
|
||||
bool CheckTLM2Protocol = false;
|
||||
bool EnableControllerECC = false;
|
||||
ECCControllerMode ECCMode = ECCControllerMode::Disabled;
|
||||
bool gem5 = false;
|
||||
unsigned long long int AddressOffset = 0;
|
||||
|
||||
|
||||
@@ -49,7 +49,8 @@ void errorModel::init()
|
||||
burstLenght = Configuration::getInstance().memSpec.BurstLength;
|
||||
numberOfColumns = Configuration::getInstance().memSpec.NumberOfColumns;
|
||||
bytesPerColumn = xmlAddressDecoder::getInstance().amount["bytes"];
|
||||
if(Configuration::getInstance().EnableControllerECC)
|
||||
|
||||
if(Configuration::getInstance().ECCMode != ECCControllerMode::Disabled)
|
||||
{
|
||||
bytesPerColumn += bytesPerColumn>>3;
|
||||
}
|
||||
|
||||
@@ -188,9 +188,16 @@ void DRAMSys::instantiateModules(const string &traceName,
|
||||
// They need to be ready before creating some modules.
|
||||
setupTlmRecorders(traceName, pathToResources);
|
||||
|
||||
// Initialize ECC Controller is enabled
|
||||
if(Configuration::getInstance().EnableControllerECC)
|
||||
ecc = new ControllerECC("ControllerECC");
|
||||
// Create new ECC Controller
|
||||
switch (Configuration::getInstance().ECCMode)
|
||||
{
|
||||
case ECCControllerMode::Hamming:
|
||||
ecc = new ControllerECC("ControllerECC");
|
||||
break;
|
||||
default:
|
||||
ecc = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
arbiter = new Arbiter("arbiter");
|
||||
arbiter->setTlmRecorders(tlmRecorders);
|
||||
@@ -222,7 +229,7 @@ void DRAMSys::instantiateModules(const string &traceName,
|
||||
void DRAMSys::bindSockets()
|
||||
{
|
||||
// If ECC Controller enabled, put it between Trace and arbiter
|
||||
if(Configuration::getInstance().EnableControllerECC)
|
||||
if(Configuration::getInstance().ECCMode != ECCControllerMode::Disabled)
|
||||
{
|
||||
tSocket.bind(ecc->t_socket);
|
||||
ecc->i_socket.bind(arbiter->tSocket);
|
||||
@@ -260,6 +267,7 @@ DRAMSys::~DRAMSys()
|
||||
{
|
||||
if(ecc)
|
||||
delete ecc;
|
||||
|
||||
delete arbiter;
|
||||
|
||||
for (auto controller : controllers)
|
||||
|
||||
@@ -92,7 +92,7 @@ struct Dram : sc_module
|
||||
|
||||
SC_CTOR(Dram) : tSocket("socket")
|
||||
{
|
||||
if(Configuration::getInstance().EnableControllerECC)
|
||||
if(Configuration::getInstance().ECCMode != ECCControllerMode::Disabled)
|
||||
bytesPerBurst += bytesPerBurst>>3;
|
||||
|
||||
std::uint64_t memorySize = Configuration::getInstance().getSimMemSizeInBytes();
|
||||
|
||||
@@ -72,7 +72,7 @@ int sc_main(int argc, char **argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
SimulationXML = resources + "simulations/ddr3-example.xml";
|
||||
SimulationXML = resources + "simulations/wideio-ecc.xml";
|
||||
}
|
||||
|
||||
std::vector<StlPlayer*> players;
|
||||
|
||||
@@ -544,7 +544,7 @@ Below, the sub-configurations are listed and explained.
|
||||
<SimulationProgressBar value="1"/>
|
||||
<NumberOfMemChannels value="1"/>
|
||||
<NumberOfDevicesOnDIMM value = "8" />
|
||||
<EnableControllerECC value = "0" />
|
||||
<ECCControllerMode value = "Disabled" />
|
||||
</simconfig>
|
||||
```
|
||||
|
||||
@@ -579,9 +579,9 @@ Below, the sub-configurations are listed and explained.
|
||||
- *CheckTLM2Protocol* (boolean)
|
||||
- "1": enables the TLM 2.0 Protocol Checking
|
||||
- "0": disables the TLM 2.0 Protocol Checking
|
||||
- *EnableControllerECC* (boolean)
|
||||
- "1": enables the ECC Controller with classic SECDED implementation
|
||||
- "0": disables the ECC Controller with classic SECDED implementation
|
||||
- *ECCControllerMode* (string)
|
||||
- "Disabled": No ECC Controller is used
|
||||
- "Hamming": Enables an ECC Controller with classic SECDED implementation using Hamming Code
|
||||
|
||||
- **Temperature Simulator Configuration**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user