From a978c967b10dd2477edef85f9bc625a481ba72e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89der=20F=2E=20Zulian?= Date: Wed, 14 Oct 2015 19:50:40 +0200 Subject: [PATCH] Error memory is now a vector of objects. --- DRAMSys/simulator/src/simulation/Dram.h | 29 +++++++++++++++---------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/DRAMSys/simulator/src/simulation/Dram.h b/DRAMSys/simulator/src/simulation/Dram.h index 127613f2..49c5740e 100644 --- a/DRAMSys/simulator/src/simulation/Dram.h +++ b/DRAMSys/simulator/src/simulation/Dram.h @@ -43,6 +43,7 @@ #include #include #include +#include #include "../common/DebugManager.h" #include "../common/dramExtension.h" #include "../controller/core/TimingCalculation.h" @@ -69,7 +70,7 @@ struct Dram : sc_module // Error Model related: ErrorStorageMode ErrorStoreMode = Configuration::getInstance().ErrorStoreMode; - errorModel * ememory; + std::vector ememory; // Data Storage: map< unsigned long int, unsigned char[BUSWIDTH/2] > memory; @@ -169,7 +170,11 @@ struct Dram : sc_module // For each bank in a channel a error Model is created: if(ErrorStoreMode == ErrorStorageMode::ErrorModel) { - ememory = new errorModel[Configuration::getInstance().memSpec.NumberOfBanks]; + for (unsigned i = 0; i < Configuration::getInstance().memSpec.NumberOfBanks; i++) { + errorModel *em; + em = new errorModel(); + ememory.push_back(em); + } } } @@ -183,7 +188,9 @@ struct Dram : sc_module cout << name() << string("\tAverage Power: \t") + to_string(DRAMPower->getPower().average_power) << endl; } // Clean up: - delete [] ememory; + for (auto e : ememory) { + delete e; + } //std::cout << "Simulated Memory Size: " << memory.size() << endl; // TODO Aufrauemen } @@ -217,7 +224,7 @@ struct Dram : sc_module if (ErrorStoreMode == ErrorStorageMode::ErrorModel) { - ememory[bank].activate(row); + ememory[bank]->activate(row); } } else if (phase == BEGIN_WR) @@ -235,7 +242,7 @@ struct Dram : sc_module } else // == 2 Use Storage with Error Model { - ememory[bank].store(payload); + ememory[bank]->store(payload); } sendToController(payload, END_WR, delay + getExecutionTime(Command::Write, payload)); } @@ -257,7 +264,7 @@ struct Dram : sc_module } else if(ErrorStoreMode == ErrorStorageMode::ErrorModel)// use ErrorStorageMode with errormodel { - ememory[bank].load(payload); + ememory[bank]->load(payload); } sendToController(payload, END_RD, delay + getExecutionTime(Command::Read, payload)); @@ -277,7 +284,7 @@ struct Dram : sc_module } else // == 2 Use Storage with Error Model { - ememory[bank].store(payload); + ememory[bank]->store(payload); } sendToController(payload, END_WRA, delay + getExecutionTime(Command::WriteA, payload)); } @@ -299,7 +306,7 @@ struct Dram : sc_module } else if(ErrorStoreMode == ErrorStorageMode::ErrorModel)// use ErrorStorageMode with errormodel { - ememory[bank].load(payload); + ememory[bank]->load(payload); } sendToController(payload, END_RDA, delay + getExecutionTime(Command::ReadA, payload)); @@ -312,7 +319,7 @@ struct Dram : sc_module if (ErrorStoreMode == ErrorStorageMode::ErrorModel) { - ememory[bank].refresh(row); + ememory[bank]->refresh(row); } } @@ -401,7 +408,7 @@ struct Dram : sc_module } else { - ememory[bank].load(trans); + ememory[bank]->load(trans); } } else if ( cmd == tlm::TLM_WRITE_COMMAND ) @@ -412,7 +419,7 @@ struct Dram : sc_module } else { - ememory[bank].store(trans); + ememory[bank]->store(trans); } } return len;