Created an enumeration to the possible values of storage mode.
This commit is contained in:
@@ -10,5 +10,5 @@
|
||||
<Chipseed value="42" />
|
||||
<csvfile value="../src/error/error_new.csv" />
|
||||
|
||||
<StorMo value="0" /><!--3 Modes: 0 no storage, 1 store data without errormodel, 2 store data with errormodel-->
|
||||
<StorMo value="NoStorage" /> <!--3 Modes: NoStorage, Store (store data without errormodel), ErrorModel (store data with errormodel)-->
|
||||
</memconfig>
|
||||
|
||||
@@ -9,5 +9,5 @@
|
||||
<!-- Error Modelling -->
|
||||
<Chipseed value="42" />
|
||||
<csvfile value="../src/error/error_new.csv" />
|
||||
<StorMo value="0" /><!--3 Modes: 0 no storage, 1 store data without errormodel, 2 store data with errormodel-->
|
||||
<StorMo value="NoStorage" /> <!--3 Modes: NoStorage, Store (store data without errormodel), ErrorModel (store data with errormodel)-->
|
||||
</memconfig>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<!-- Error Model: -->
|
||||
<Chipseed value="42" />
|
||||
<csvfile value="../src/error/error_new.csv" />
|
||||
<StorMo value="0" /><!--3 Modes: 0 no storage, 1 store data without errormodel, 2 store data with errormodel-->
|
||||
<StorMo value="NoStorage" /> <!--3 Modes: NoStorage, Store (store data without errormodel), ErrorModel (store data with errormodel)-->
|
||||
<!--
|
||||
<Buswidth value="128" />
|
||||
<ReadWriteGrouping value="false" />
|
||||
|
||||
@@ -57,6 +57,20 @@ EPowerDownMode string2PDNMode(string s)
|
||||
}
|
||||
}
|
||||
|
||||
StorageMode string2StorageMode(string s)
|
||||
{
|
||||
if (s == "NoStorage")
|
||||
return StorageMode::NoStorage;
|
||||
else if (s == "Store")
|
||||
return StorageMode::Store;
|
||||
else if (s == "ErrorModel")
|
||||
return StorageMode::ErrorModel;
|
||||
else
|
||||
{
|
||||
SC_REPORT_FATAL("Configuration", ("Unknown StorageMode: " + s).c_str());
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
void Configuration::setParameter(std::string name, std::string value)
|
||||
{
|
||||
@@ -99,7 +113,7 @@ void Configuration::setParameter(std::string name, std::string value)
|
||||
else if(name == "csvfile")
|
||||
csvfile = value;
|
||||
else if(name == "StorMo")
|
||||
StorMode = string2int(value);
|
||||
StorMode = string2StorageMode(value);
|
||||
else
|
||||
{
|
||||
SC_REPORT_FATAL("Configuration", ("Parameter " + name + " not defined in Configuration").c_str());
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include "MemSpec.h"
|
||||
|
||||
enum class EPowerDownMode{NoPowerDown, Staggered, TimeoutPDN, TimeoutSREF};
|
||||
|
||||
enum class StorageMode{NoStorage, Store, ErrorModel};
|
||||
|
||||
struct Configuration
|
||||
{
|
||||
@@ -54,7 +54,7 @@ struct Configuration
|
||||
//Configs for Seed, csv file and StorageMode
|
||||
unsigned int Chipseed;
|
||||
std::string csvfile ="not defined.";
|
||||
unsigned int StorMode;
|
||||
StorageMode StorMode;
|
||||
|
||||
private:
|
||||
Configuration();
|
||||
|
||||
@@ -50,10 +50,9 @@ struct Dram: sc_module
|
||||
tlm_utils::simple_target_socket<Dram, BUSWIDTH, tlm::tlm_base_protocol_types> tSocket;
|
||||
IFPOW(libDRAMPower *DRAMPower);
|
||||
|
||||
const unsigned int StorageMode = Configuration::getInstance().StorMode; // 0 no storage, 1 store, 2 error model
|
||||
StorageMode StorMode = Configuration::getInstance().StorMode;
|
||||
|
||||
flip_memory * fmemory;
|
||||
//Configuration::getInstance().memSpec.NumberOfBanks];
|
||||
map< unsigned long int, unsigned char[BUSWIDTH/2] > memory;
|
||||
|
||||
SC_CTOR(Dram) : tSocket("socket")
|
||||
@@ -62,9 +61,9 @@ struct Dram: sc_module
|
||||
|
||||
IFPOW( MemorySpecification memSpec(MemSpecParser::getMemSpecFromXML(Configuration::getInstance().memspecUri)) );
|
||||
IFPOW( DRAMPower = new libDRAMPower( memSpec, 0 ) );
|
||||
cout << "StorageMode = " << StorageMode << endl;
|
||||
//cout << "StorageMode = " << StorMode << endl;
|
||||
|
||||
if(StorageMode == 2)
|
||||
if(StorMode == StorageMode::ErrorModel)
|
||||
{
|
||||
fmemory = new flip_memory[Configuration::getInstance().memSpec.NumberOfBanks];
|
||||
}
|
||||
@@ -76,7 +75,7 @@ struct Dram: sc_module
|
||||
IFPOW( DRAMPower->calcEnergy() );
|
||||
IFPOW( cout << endl << endl << "Total Energy" << "\t" << DRAMPower->getEnergy().total_energy << endl);
|
||||
IFPOW( cout << "Average Power" << "\t" << DRAMPower->getPower().average_power << endl );
|
||||
if(StorageMode == 2)
|
||||
if(StorMode == StorageMode::ErrorModel)
|
||||
{
|
||||
for(int b = 0; b < 8; b++)
|
||||
{
|
||||
@@ -112,7 +111,7 @@ struct Dram: sc_module
|
||||
sendToController(payload, END_ACT, delay + getExecutionTime(Command::Activate, payload));
|
||||
unsigned int row = DramExtension::getExtension(payload).getRow().ID();
|
||||
|
||||
if (StorageMode == 2)
|
||||
if (StorMode == StorageMode::ErrorModel)
|
||||
{
|
||||
fmemory[bank].refresh(row);
|
||||
}
|
||||
@@ -122,11 +121,11 @@ struct Dram: sc_module
|
||||
IFPOW(DRAMPower->doCommand(MemCommand::WR, bank, cycle));
|
||||
|
||||
//save data:
|
||||
if (StorageMode == 0)
|
||||
if (StorMode == StorageMode::NoStorage)
|
||||
{
|
||||
// Don't store data
|
||||
}
|
||||
else if (StorageMode == 1) // Use Storage
|
||||
else if (StorMode == StorageMode::Store) // Use Storage
|
||||
{
|
||||
memcpy(&memory[payload.get_address()], payload.get_data_ptr(), BUSWIDTH/8);
|
||||
}
|
||||
@@ -141,7 +140,7 @@ struct Dram: sc_module
|
||||
IFPOW(DRAMPower->doCommand(MemCommand::RD, bank, cycle));
|
||||
|
||||
// Load data:
|
||||
if (StorageMode == 1) //use StorageMode
|
||||
if (StorMode == StorageMode::Store) //use StorageMode
|
||||
{
|
||||
if(memory.count(payload.get_address()) == 1)
|
||||
{
|
||||
@@ -152,7 +151,7 @@ struct Dram: sc_module
|
||||
//SC_REPORT_WARNING ("DRAM", "Reading from an empty memory location.");
|
||||
}
|
||||
}
|
||||
else if(StorageMode == 2)// use StorageMode with errormodel
|
||||
else if(StorMode == StorageMode::ErrorModel)// use StorageMode with errormodel
|
||||
{
|
||||
fmemory[bank].load(payload);
|
||||
}
|
||||
@@ -164,11 +163,11 @@ struct Dram: sc_module
|
||||
IFPOW(DRAMPower->doCommand(MemCommand::WRA, bank, cycle));
|
||||
|
||||
//save data:
|
||||
if (StorageMode == 0)
|
||||
if (StorMode == StorageMode::NoStorage)
|
||||
{
|
||||
// Don't store data
|
||||
}
|
||||
else if (StorageMode == 1) // Use Storage
|
||||
else if (StorMode == StorageMode::Store) // Use Storage
|
||||
{
|
||||
memcpy(&memory[payload.get_address()], payload.get_data_ptr(), BUSWIDTH/8);
|
||||
}
|
||||
@@ -183,7 +182,7 @@ struct Dram: sc_module
|
||||
IFPOW(DRAMPower->doCommand(MemCommand::RDA, bank, cycle));
|
||||
|
||||
// Load data:
|
||||
if (StorageMode == 1) //use StorageMode
|
||||
if (StorMode == StorageMode::Store) //use StorageMode
|
||||
{
|
||||
if(memory.count(payload.get_address()) == 1)
|
||||
{
|
||||
@@ -194,7 +193,7 @@ struct Dram: sc_module
|
||||
//SC_REPORT_WARNING ("DRAM", "Reading from an empty memory location.");
|
||||
}
|
||||
}
|
||||
else if(StorageMode == 2)// use StorageMode with errormodel
|
||||
else if(StorMode == StorageMode::ErrorModel)// use StorageMode with errormodel
|
||||
{
|
||||
fmemory[bank].load(payload);
|
||||
}
|
||||
@@ -207,7 +206,7 @@ struct Dram: sc_module
|
||||
sendToController(payload, END_REFA, delay + getExecutionTime(Command::AutoRefresh, payload));
|
||||
unsigned int row = DramExtension::getExtension(payload).getRow().ID();
|
||||
|
||||
if (StorageMode == 2)
|
||||
if (StorMode == StorageMode::ErrorModel)
|
||||
{
|
||||
fmemory[bank].refresh(row);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user