From e306c6c1186ac1fdccbec153c45c1441454c396b Mon Sep 17 00:00:00 2001 From: Lukas Steiner Date: Thu, 26 Mar 2020 17:38:15 +0100 Subject: [PATCH] More updates of configuration. --- DRAMSys/library/CMakeLists.txt | 1 + .../src/configuration/Configuration.cpp | 29 +------------------ .../library/src/configuration/Configuration.h | 4 +-- DRAMSys/library/src/simulation/StlPlayer.h | 6 ++-- .../library/src/simulation/TracePlayer.cpp | 9 +++--- DRAMSys/library/src/simulation/TracePlayer.h | 9 +++--- DRAMSys/library/src/simulation/dram/Dram.cpp | 29 ++++++++++++------- DRAMSys/library/src/simulation/dram/Dram.h | 3 +- .../library/src/simulation/dram/DramDDR3.cpp | 2 +- .../library/src/simulation/dram/DramDDR4.cpp | 2 +- .../library/src/simulation/dram/DramGDDR5.cpp | 2 +- .../src/simulation/dram/DramGDDR5X.cpp | 2 +- .../library/src/simulation/dram/DramGDDR6.cpp | 2 +- .../library/src/simulation/dram/DramHBM2.cpp | 2 +- .../src/simulation/dram/DramLPDDR4.cpp | 2 +- .../src/simulation/dram/DramWideIO.cpp | 24 +++++++-------- .../src/simulation/dram/DramWideIO2.cpp | 2 +- 17 files changed, 55 insertions(+), 75 deletions(-) diff --git a/DRAMSys/library/CMakeLists.txt b/DRAMSys/library/CMakeLists.txt index 1593d159..5df9597d 100644 --- a/DRAMSys/library/CMakeLists.txt +++ b/DRAMSys/library/CMakeLists.txt @@ -146,6 +146,7 @@ add_library(DRAMSysLibrary src/simulation/TemperatureController.cpp src/simulation/TracePlayer.cpp src/simulation/TraceSetup.cpp + src/simulation/StlPlayer.h src/simulation/dram/Dram.cpp src/simulation/dram/DramRecordable.cpp diff --git a/DRAMSys/library/src/configuration/Configuration.cpp b/DRAMSys/library/src/configuration/Configuration.cpp index e8357d6e..d443543c 100644 --- a/DRAMSys/library/src/configuration/Configuration.cpp +++ b/DRAMSys/library/src/configuration/Configuration.cpp @@ -47,20 +47,6 @@ using namespace std; string Configuration::memspecUri = ""; string Configuration::mcconfigUri = ""; -StorageMode string2StoreMode(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; - } -} - enum sc_time_unit string2TimeUnit(string s) { if (s == "s") @@ -160,7 +146,7 @@ void Configuration::setParameter(std::string name, std::string value) else if (name == "ErrorCSVFile") errorCSVFile = value; else if (name == "StoreMode") - StoreMode = string2StoreMode(value); + storeMode = value; // Temperature Simulation related else if (name == "TemperatureScale") { @@ -203,19 +189,6 @@ void Configuration::setPathToResources(std::string path) temperatureSim.setPathToResources(path); } -std::string Configuration::getPathToResources() -{ - return pathToResources; -} -// TODO: Never used -void Configuration::setParameters(std::map - parameterMap) -{ - for (auto item : parameterMap) { - setParameter(item.first, item.second); - } -} - // Returns the total memory size in bytes std::uint64_t Configuration::getSimMemSizeInBytes() { diff --git a/DRAMSys/library/src/configuration/Configuration.h b/DRAMSys/library/src/configuration/Configuration.h index 6004f43c..69fb9fec 100644 --- a/DRAMSys/library/src/configuration/Configuration.h +++ b/DRAMSys/library/src/configuration/Configuration.h @@ -92,12 +92,11 @@ struct Configuration MemSpec *memSpec; void setParameter(std::string name, std::string value); - void setParameters(std::map parameterMap); //Configs for Seed, csv file and StorageMode unsigned int errorChipSeed; std::string errorCSVFile = "not defined."; - StorageMode StoreMode; + std::string storeMode; // Temperature Simulation related TemperatureSimConfig temperatureSim; @@ -107,7 +106,6 @@ struct Configuration unsigned int getBytesPerBurst(); unsigned int adjustNumBytesAfterECC(unsigned bytes); void setPathToResources(std::string path); - std::string getPathToResources(); }; #endif // CONFIGURATION_H diff --git a/DRAMSys/library/src/simulation/StlPlayer.h b/DRAMSys/library/src/simulation/StlPlayer.h index e45e1233..3e228417 100644 --- a/DRAMSys/library/src/simulation/StlPlayer.h +++ b/DRAMSys/library/src/simulation/StlPlayer.h @@ -66,8 +66,6 @@ public: this->lineCnt = 0; } - - void nextPayload() { std::string line; @@ -136,8 +134,8 @@ public: unsigned long long addr = std::stoull(address.c_str(), 0, 16); // Get the data if necessary. - if (Configuration::getInstance().StoreMode != StorageMode::NoStorage - && cmd != TLM_READ_COMMAND) { + if (storageEnabled && cmd == TLM_WRITE_COMMAND) + { // The input trace file must provide the data to be stored into the memory. iss >> dataStr; if (dataStr.empty()) diff --git a/DRAMSys/library/src/simulation/TracePlayer.cpp b/DRAMSys/library/src/simulation/TracePlayer.cpp index 1b660c22..a47fbb3a 100644 --- a/DRAMSys/library/src/simulation/TracePlayer.cpp +++ b/DRAMSys/library/src/simulation/TracePlayer.cpp @@ -41,13 +41,12 @@ TracePlayer::TracePlayer(sc_module_name name, TracePlayerListener *listener) : sc_module(name), payloadEventQueue(this, &TracePlayer::peqCallback), - numberOfTransactions(0), - transactionsSent(0), - transactionsReceived(0), - listener(listener), - finished(false) + listener(listener) { iSocket.register_nb_transport_bw(this, &TracePlayer::nb_transport_bw); + + if (Configuration::getInstance().storeMode != "NoStorage") + storageEnabled = true; } gp *TracePlayer::allocatePayload() diff --git a/DRAMSys/library/src/simulation/TracePlayer.h b/DRAMSys/library/src/simulation/TracePlayer.h index b866e5ce..4bb1fdbd 100644 --- a/DRAMSys/library/src/simulation/TracePlayer.h +++ b/DRAMSys/library/src/simulation/TracePlayer.h @@ -70,7 +70,8 @@ protected: void finish(); void terminate(); void setNumberOfTransactions(unsigned int n); - unsigned int numberOfTransactions; + unsigned int numberOfTransactions = 0; + bool storageEnabled; private: tlm_sync_enum nb_transport_bw(tlm_generic_payload &payload, tlm_phase &phase, @@ -79,10 +80,10 @@ private: void sendToTarget(tlm_generic_payload &payload, const tlm_phase &phase, const sc_time &delay); MemoryManager memoryManager; - unsigned int transactionsSent; - unsigned int transactionsReceived; + unsigned int transactionsSent = 0; + unsigned int transactionsReceived = 0; TracePlayerListener *listener; - bool finished; + bool finished = false; }; #endif // TRACEPLAYER_H diff --git a/DRAMSys/library/src/simulation/dram/Dram.cpp b/DRAMSys/library/src/simulation/dram/Dram.cpp index 5f2577df..ed0ffc01 100644 --- a/DRAMSys/library/src/simulation/dram/Dram.cpp +++ b/DRAMSys/library/src/simulation/dram/Dram.cpp @@ -66,12 +66,21 @@ using namespace DRAMPower; Dram::Dram(sc_module_name name) : sc_module(name), tSocket("socket") { + Configuration &config = Configuration::getInstance(); // Adjust number of bytes per burst dynamically to the selected ecc controller - // TODO: ECC only used for WideIO? - bytesPerBurst = Configuration::getInstance().adjustNumBytesAfterECC(bytesPerBurst); + bytesPerBurst = config.adjustNumBytesAfterECC(bytesPerBurst); + + if (config.storeMode == "NoStorage") + storeMode = StorageMode::NoStorage; + else if (config.storeMode == "Store") + storeMode = StorageMode::Store; + else if (config.storeMode == "ErrorModel") + storeMode = StorageMode::ErrorModel; + else + SC_REPORT_FATAL(this->name(), "Unsupported storage mode"); uint64_t memorySize = Configuration::getInstance().getSimMemSizeInBytes(); - if (StoreMode == StorageMode::Store) + if (storeMode == StorageMode::Store) { if (Configuration::getInstance().useMalloc) { @@ -155,7 +164,7 @@ tlm_sync_enum Dram::nb_transport_fw(tlm_generic_payload &payload, { DRAMPower->doCommand(MemCommand::WR, bank, cycle); // save data: - if (StoreMode == StorageMode::Store) // Use Storage + if (storeMode == StorageMode::Store) // Use Storage { unsigned char *phyAddr = memory + payload.get_address(); memcpy(phyAddr, payload.get_data_ptr(), payload.get_data_length()); @@ -166,7 +175,7 @@ tlm_sync_enum Dram::nb_transport_fw(tlm_generic_payload &payload, { DRAMPower->doCommand(MemCommand::RD, bank, cycle); // load data: - if (StoreMode == StorageMode::Store) // use StorageMode + if (storeMode == StorageMode::Store) // use StorageMode { unsigned char *phyAddr = memory + payload.get_address(); memcpy(payload.get_data_ptr(), phyAddr, payload.get_data_length()); @@ -177,7 +186,7 @@ tlm_sync_enum Dram::nb_transport_fw(tlm_generic_payload &payload, { DRAMPower->doCommand(MemCommand::WRA, bank, cycle); // save data: - if (StoreMode == StorageMode::Store) // Use Storage + if (storeMode == StorageMode::Store) // Use Storage { unsigned char *phyAddr = memory + payload.get_address(); memcpy(phyAddr, payload.get_data_ptr(), payload.get_data_length()); @@ -188,7 +197,7 @@ tlm_sync_enum Dram::nb_transport_fw(tlm_generic_payload &payload, { DRAMPower->doCommand(MemCommand::RDA, bank, cycle); // Load data: - if (StoreMode == StorageMode::Store) // use StorageMode + if (storeMode == StorageMode::Store) // use StorageMode { unsigned char *phyAddr = memory + payload.get_address(); memcpy(payload.get_data_ptr(), phyAddr, payload.get_data_length()); @@ -245,7 +254,7 @@ unsigned int Dram::transport_dbg(tlm_generic_payload &trans) PRINTDEBUGMESSAGE(name(), "transport_dgb"); // TODO: This part is not tested yet, neither with traceplayers nor with GEM5 coupling - if (StoreMode == StorageMode::NoStorage) + if (storeMode == StorageMode::NoStorage) { SC_REPORT_FATAL("DRAM", "Debug Transport is used in combination with NoStorage"); @@ -262,7 +271,7 @@ unsigned int Dram::transport_dbg(tlm_generic_payload &trans) if (cmd == TLM_READ_COMMAND) { - if (StoreMode == StorageMode::Store) + if (storeMode == StorageMode::Store) { // Use Storage unsigned char *phyAddr = memory + trans.get_address(); memcpy(ptr, phyAddr, trans.get_data_length()); @@ -275,7 +284,7 @@ unsigned int Dram::transport_dbg(tlm_generic_payload &trans) } else if (cmd == TLM_WRITE_COMMAND) { - if (StoreMode == StorageMode::Store) + if (storeMode == StorageMode::Store) { // Use Storage unsigned char *phyAddr = memory + trans.get_address(); memcpy(phyAddr, ptr, trans.get_data_length()); diff --git a/DRAMSys/library/src/simulation/dram/Dram.h b/DRAMSys/library/src/simulation/dram/Dram.h index e317768c..bab0ee3c 100644 --- a/DRAMSys/library/src/simulation/dram/Dram.h +++ b/DRAMSys/library/src/simulation/dram/Dram.h @@ -64,7 +64,8 @@ protected: MemSpec *memSpec = Configuration::getInstance().memSpec; // Data Storage: - StorageMode StoreMode = Configuration::getInstance().StoreMode; + enum class StorageMode {NoStorage, Store, ErrorModel} storeMode; + unsigned char *memory; libDRAMPowerDummy *DRAMPower; diff --git a/DRAMSys/library/src/simulation/dram/DramDDR3.cpp b/DRAMSys/library/src/simulation/dram/DramDDR3.cpp index 199f2ce5..736dad5d 100644 --- a/DRAMSys/library/src/simulation/dram/DramDDR3.cpp +++ b/DRAMSys/library/src/simulation/dram/DramDDR3.cpp @@ -42,7 +42,7 @@ DramDDR3::DramDDR3(sc_module_name name) : Dram(name) { - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) SC_REPORT_FATAL("DramDDR3", "Error Model not supported for DDR3"); // Parameters for DRAMPower diff --git a/DRAMSys/library/src/simulation/dram/DramDDR4.cpp b/DRAMSys/library/src/simulation/dram/DramDDR4.cpp index db8378d0..5082b2f7 100644 --- a/DRAMSys/library/src/simulation/dram/DramDDR4.cpp +++ b/DRAMSys/library/src/simulation/dram/DramDDR4.cpp @@ -42,7 +42,7 @@ DramDDR4::DramDDR4(sc_module_name name) : Dram(name) { - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) SC_REPORT_FATAL("DramDDR4", "Error Model not supported for DDR4"); // Parameters for DRAMPower diff --git a/DRAMSys/library/src/simulation/dram/DramGDDR5.cpp b/DRAMSys/library/src/simulation/dram/DramGDDR5.cpp index af72caa0..773aa690 100644 --- a/DRAMSys/library/src/simulation/dram/DramGDDR5.cpp +++ b/DRAMSys/library/src/simulation/dram/DramGDDR5.cpp @@ -42,7 +42,7 @@ DramGDDR5::DramGDDR5(sc_module_name name) : Dram(name) { - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) SC_REPORT_FATAL("DramGDDR5", "Error Model not supported for GDDR5"); // Parameters for DRAMPower diff --git a/DRAMSys/library/src/simulation/dram/DramGDDR5X.cpp b/DRAMSys/library/src/simulation/dram/DramGDDR5X.cpp index 3f935863..5342a5e5 100644 --- a/DRAMSys/library/src/simulation/dram/DramGDDR5X.cpp +++ b/DRAMSys/library/src/simulation/dram/DramGDDR5X.cpp @@ -42,7 +42,7 @@ DramGDDR5X::DramGDDR5X(sc_module_name name) : Dram(name) { - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) SC_REPORT_FATAL("DramGDDR5X", "Error Model not supported for GDDR5X"); // Parameters for DRAMPower diff --git a/DRAMSys/library/src/simulation/dram/DramGDDR6.cpp b/DRAMSys/library/src/simulation/dram/DramGDDR6.cpp index de6254c1..029d000d 100644 --- a/DRAMSys/library/src/simulation/dram/DramGDDR6.cpp +++ b/DRAMSys/library/src/simulation/dram/DramGDDR6.cpp @@ -42,7 +42,7 @@ DramGDDR6::DramGDDR6(sc_module_name name) : Dram(name) { - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) SC_REPORT_FATAL("DramGDDR6", "Error Model not supported for GDDR6"); // Parameters for DRAMPower diff --git a/DRAMSys/library/src/simulation/dram/DramHBM2.cpp b/DRAMSys/library/src/simulation/dram/DramHBM2.cpp index 2d1b907b..735e5256 100644 --- a/DRAMSys/library/src/simulation/dram/DramHBM2.cpp +++ b/DRAMSys/library/src/simulation/dram/DramHBM2.cpp @@ -42,7 +42,7 @@ DramHBM2::DramHBM2(sc_module_name name) : Dram(name) { - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) SC_REPORT_FATAL("DramHBM2", "Error Model not supported for HBM2"); // Parameters for DRAMPower diff --git a/DRAMSys/library/src/simulation/dram/DramLPDDR4.cpp b/DRAMSys/library/src/simulation/dram/DramLPDDR4.cpp index 43f85278..c09c5d5b 100644 --- a/DRAMSys/library/src/simulation/dram/DramLPDDR4.cpp +++ b/DRAMSys/library/src/simulation/dram/DramLPDDR4.cpp @@ -42,7 +42,7 @@ DramLPDDR4::DramLPDDR4(sc_module_name name) : Dram(name) { - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) SC_REPORT_FATAL("DramLPDDR4", "Error Model not supported for LPDDR4"); // Parameters for DRAMPower diff --git a/DRAMSys/library/src/simulation/dram/DramWideIO.cpp b/DRAMSys/library/src/simulation/dram/DramWideIO.cpp index dda63013..c6733ddb 100644 --- a/DRAMSys/library/src/simulation/dram/DramWideIO.cpp +++ b/DRAMSys/library/src/simulation/dram/DramWideIO.cpp @@ -145,7 +145,7 @@ DramWideIO::DramWideIO(sc_module_name name) : Dram(name) libDRAMPower *DRAMPower = new libDRAMPower(powerSpec, 0); // For each bank in a channel a error Model is created: - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) { for (unsigned i = 0; i < memSpec->NumberOfBanks; i++) { @@ -159,7 +159,7 @@ DramWideIO::DramWideIO(sc_module_name name) : Dram(name) } else { - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) SC_REPORT_FATAL("DramWideIO", "Error modeling without power analysis is not supported"); DRAMPower = new libDRAMPowerDummy(); } @@ -197,19 +197,19 @@ tlm_sync_enum DramWideIO::nb_transport_fw(tlm_generic_payload &payload, sendToController(payload, END_ACT, delay + memSpec->getExecutionTime(Command::ACT, payload)); unsigned int row = DramExtension::getExtension(payload).getRow().ID(); - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) ememory[bank]->activate(row); } else if (phase == BEGIN_WR) { DRAMPower->doCommand(MemCommand::WR, bank, cycle); // save data: - if (StoreMode == StorageMode::Store) // Use Storage + if (storeMode == StorageMode::Store) // Use Storage { unsigned char *phyAddr = memory + payload.get_address(); memcpy(phyAddr, payload.get_data_ptr(), payload.get_data_length()); } - else if (StoreMode == StorageMode::ErrorModel) // Use Storage with Error Model + else if (storeMode == StorageMode::ErrorModel) // Use Storage with Error Model { ememory[bank]->store(payload); } @@ -219,12 +219,12 @@ tlm_sync_enum DramWideIO::nb_transport_fw(tlm_generic_payload &payload, { DRAMPower->doCommand(MemCommand::RD, bank, cycle); // load data: - if (StoreMode == StorageMode::Store) // use StorageMode + if (storeMode == StorageMode::Store) // use StorageMode { unsigned char *phyAddr = memory + payload.get_address(); memcpy(payload.get_data_ptr(), phyAddr, payload.get_data_length()); } - else if (StoreMode == StorageMode::ErrorModel) // use StorageMode with errormodel + else if (storeMode == StorageMode::ErrorModel) // use StorageMode with errormodel { ememory[bank]->load(payload); } @@ -234,12 +234,12 @@ tlm_sync_enum DramWideIO::nb_transport_fw(tlm_generic_payload &payload, { DRAMPower->doCommand(MemCommand::WRA, bank, cycle); // save data: - if (StoreMode == StorageMode::Store) // Use Storage + if (storeMode == StorageMode::Store) // Use Storage { unsigned char *phyAddr = memory + payload.get_address(); memcpy(phyAddr, payload.get_data_ptr(), payload.get_data_length()); } - else if (StoreMode == StorageMode::ErrorModel) // Use Storage with Error Model + else if (storeMode == StorageMode::ErrorModel) // Use Storage with Error Model { ememory[bank]->store(payload); } @@ -249,12 +249,12 @@ tlm_sync_enum DramWideIO::nb_transport_fw(tlm_generic_payload &payload, { DRAMPower->doCommand(MemCommand::RDA, bank, cycle); // Load data: - if (StoreMode == StorageMode::Store) // use StorageMode + if (storeMode == StorageMode::Store) // use StorageMode { unsigned char *phyAddr = memory + payload.get_address(); memcpy(payload.get_data_ptr(), phyAddr, payload.get_data_length()); } - else if (StoreMode == StorageMode::ErrorModel) // use StorageMode with errormodel + else if (storeMode == StorageMode::ErrorModel) // use StorageMode with errormodel { ememory[bank]->load(payload); } @@ -267,7 +267,7 @@ tlm_sync_enum DramWideIO::nb_transport_fw(tlm_generic_payload &payload, delay + memSpec->getExecutionTime(Command::REFA, payload)); unsigned int row = DramExtension::getExtension(payload).getRow().ID(); - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) ememory[bank]->refresh(row); } else if (phase == BEGIN_REFB) diff --git a/DRAMSys/library/src/simulation/dram/DramWideIO2.cpp b/DRAMSys/library/src/simulation/dram/DramWideIO2.cpp index 3e76d8d1..127bee12 100644 --- a/DRAMSys/library/src/simulation/dram/DramWideIO2.cpp +++ b/DRAMSys/library/src/simulation/dram/DramWideIO2.cpp @@ -42,7 +42,7 @@ DramWideIO2::DramWideIO2(sc_module_name name) : Dram(name) { - if (StoreMode == StorageMode::ErrorModel) + if (storeMode == StorageMode::ErrorModel) SC_REPORT_FATAL("DramWideIO2", "Error Model not supported for WideIO2"); // Parameters for DRAMPower