Configuration for ECC Controller extended to make it possible to add other ECC Controller

This commit is contained in:
Johannes Feldmann
2017-06-08 11:01:08 +02:00
parent 778834f15c
commit 7de21cf056
13 changed files with 44 additions and 16 deletions

View File

@@ -11,6 +11,7 @@
<NumberOfDevicesOnDIMM value = "8" />
<CheckTLM2Protocol value = "0" />
<AddressOffset value = "0" />
<ECCControllerMode value = "Disabled" />
<ErrorChipSeed value="42" />
<ErrorCSVFile value="" />
<!-- Modes:

View File

@@ -11,6 +11,7 @@
<NumberOfDevicesOnDIMM value = "8" />
<CheckTLM2Protocol value = "0" />
<AddressOffset value = "0" />
<ECCControllerMode value = "Disabled" />
<ErrorChipSeed value="42" />
<ErrorCSVFile value="" />
<!-- Modes:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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