From 6db7a2a21e27168fae985109a1253f25ec951daa Mon Sep 17 00:00:00 2001 From: Lukas Steiner Date: Thu, 9 Sep 2021 10:38:39 +0200 Subject: [PATCH] Improve hammer player. --- .../resources/simulations/ddr5-rfm.json | 3 ++- DRAMSys/library/src/common/TlmRecorder.h | 10 ++++---- DRAMSys/simulator/TraceSetup.cpp | 10 +++++--- DRAMSys/simulator/TrafficGenerator.cpp | 23 +++++++++---------- DRAMSys/simulator/TrafficGenerator.h | 8 ++++--- 5 files changed, 30 insertions(+), 24 deletions(-) diff --git a/DRAMSys/library/resources/simulations/ddr5-rfm.json b/DRAMSys/library/resources/simulations/ddr5-rfm.json index 4168d5ab..7c8754df 100644 --- a/DRAMSys/library/resources/simulations/ddr5-rfm.json +++ b/DRAMSys/library/resources/simulations/ddr5-rfm.json @@ -22,7 +22,8 @@ "clkMhz": 4000, "type": "hammer", "name": "ham0", - "numRequests": 4000 + "numRequests": 4000, + "rowIncrement": 2097152 } ] } diff --git a/DRAMSys/library/src/common/TlmRecorder.h b/DRAMSys/library/src/common/TlmRecorder.h index 648c9fdd..9f07ca13 100644 --- a/DRAMSys/library/src/common/TlmRecorder.h +++ b/DRAMSys/library/src/common/TlmRecorder.h @@ -82,12 +82,12 @@ private: struct Transaction { Transaction() = default; - Transaction(uint64_t id) : id(id) {} + explicit Transaction(uint64_t id) : id(id) {} - uint64_t id; - uint64_t address; - unsigned int burstLength; - char cmd; + uint64_t id = 0; + uint64_t address = 0; + unsigned int burstLength = 0; + char cmd = 'X'; DramExtension dramExtension; sc_core::sc_time timeOfGeneration; TimeInterval timeOnDataStrobe; diff --git a/DRAMSys/simulator/TraceSetup.cpp b/DRAMSys/simulator/TraceSetup.cpp index 7e68ba72..d1b5f014 100644 --- a/DRAMSys/simulator/TraceSetup.cpp +++ b/DRAMSys/simulator/TraceSetup.cpp @@ -146,7 +146,7 @@ TraceSetup::TraceSetup(const std::string &uri, if (value["seed"].is_number_unsigned()) seed = value["seed"]; - TrafficGenerator *generator; + TrafficInitiator* generator; if (addressDistribution == "sequential") { @@ -175,10 +175,14 @@ TraceSetup::TraceSetup(const std::string &uri, { if (!value["numRequests"].is_number_unsigned()) SC_REPORT_FATAL("TraceSetup", "Number of requests is not a number."); - uint64_t numRequests = value["numRequests"]; - auto generator = new TrafficGeneratorHammer(name.c_str(), playerClk, numRequests, this); + if (!value["rowIncrement"].is_number_unsigned()) + SC_REPORT_FATAL("TraceSetup", "Row increment is not a number."); + uint64_t rowIncrement = value["rowIncrement"]; + + TrafficInitiator* generator = new TrafficGeneratorHammer(name.c_str(), playerClk, numRequests, + rowIncrement, this); players.push_back(generator); } } diff --git a/DRAMSys/simulator/TrafficGenerator.cpp b/DRAMSys/simulator/TrafficGenerator.cpp index d8b62369..b096ab73 100644 --- a/DRAMSys/simulator/TrafficGenerator.cpp +++ b/DRAMSys/simulator/TrafficGenerator.cpp @@ -150,21 +150,20 @@ uint64_t TrafficGeneratorSequential::getNextAddress() TrafficGeneratorHammer::TrafficGeneratorHammer(const sc_core::sc_module_name &name, - const sc_core::sc_time &generatorClk, - uint64_t numRequests, - TraceSetup *setup) : - TrafficGenerator(name, generatorClk, numRequests, 0, 0, 1, 1, setup) + const sc_core::sc_time &generatorClk, + uint64_t numRequests, + uint64_t rowIncrement, + TraceSetup *setup) : + TrafficGenerator(name, generatorClk, numRequests, 1, 1, 1, 1, setup), rowIncrement(rowIncrement) { - } uint64_t TrafficGeneratorHammer::getNextAddress() { - uint64_t address = currentAddress; - if(currentAddress == 0) { - currentAddress += 2097152; - } else { - currentAddress = 0; - } - return address; + if (currentAddress == 0x0) + currentAddress = rowIncrement; + else + currentAddress = 0x0; + + return currentAddress; } diff --git a/DRAMSys/simulator/TrafficGenerator.h b/DRAMSys/simulator/TrafficGenerator.h index 8cbc566a..4546a867 100644 --- a/DRAMSys/simulator/TrafficGenerator.h +++ b/DRAMSys/simulator/TrafficGenerator.h @@ -112,13 +112,15 @@ class TrafficGeneratorHammer final : public TrafficGenerator { public: TrafficGeneratorHammer(const sc_core::sc_module_name &name, - const sc_core::sc_time &generatorClk, - uint64_t numRequests, - TraceSetup *setup); + const sc_core::sc_time &generatorClk, + uint64_t numRequests, + uint64_t rowIncrement, + TraceSetup *setup); private: uint64_t getNextAddress() override; + uint64_t rowIncrement; uint64_t currentAddress = 0x0; };