Created an enumeration to the possible values of storage mode.

This commit is contained in:
Éder Ferreira Zulian
2015-05-08 12:52:49 +02:00
parent fd371795c7
commit cd8aeebe6f
6 changed files with 34 additions and 21 deletions

View File

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

View File

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

View File

@@ -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" />

View File

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

View File

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

View File

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