From 5b7609309b1a31e3be3947878c8717c136b80ef4 Mon Sep 17 00:00:00 2001 From: Lukas Steiner Date: Tue, 15 Mar 2022 15:54:05 +0100 Subject: [PATCH] Add data length parameter to generator. --- .../library/src/common/configuration/TraceSetup.cpp | 3 +++ DRAMSys/library/src/common/configuration/TraceSetup.h | 1 + DRAMSys/simulator/StlPlayer.cpp | 3 ++- DRAMSys/simulator/TrafficGenerator.cpp | 10 ++++++---- DRAMSys/simulator/TrafficGenerator.h | 5 +++-- DRAMSys/simulator/TrafficInitiator.cpp | 5 +++-- DRAMSys/simulator/TrafficInitiator.h | 3 ++- 7 files changed, 20 insertions(+), 10 deletions(-) diff --git a/DRAMSys/library/src/common/configuration/TraceSetup.cpp b/DRAMSys/library/src/common/configuration/TraceSetup.cpp index 1e25b4a4..1a96029f 100644 --- a/DRAMSys/library/src/common/configuration/TraceSetup.cpp +++ b/DRAMSys/library/src/common/configuration/TraceSetup.cpp @@ -263,6 +263,9 @@ void from_json(const json &j, TraceSetup &c) if (initiator_j.contains("maxTransactions")) initiator_j.at("maxTransactions").get_to(generator.maxTransactions); + if (initiator_j.contains("dataLength")) + initiator_j.at("dataLength").get_to(generator.dataLength); + if (initiator_j.contains("idleUntil")) initiator_j.at("idleUntil").get_to(generator.idleUntil); diff --git a/DRAMSys/library/src/common/configuration/TraceSetup.h b/DRAMSys/library/src/common/configuration/TraceSetup.h index bfea3486..17c68370 100644 --- a/DRAMSys/library/src/common/configuration/TraceSetup.h +++ b/DRAMSys/library/src/common/configuration/TraceSetup.h @@ -117,6 +117,7 @@ struct TraceGenerator : public TrafficInitiator { std::optional seed; std::optional maxTransactions; + std::optional dataLength; std::map> states; std::multimap transitions; std::optional idleUntil; diff --git a/DRAMSys/simulator/StlPlayer.cpp b/DRAMSys/simulator/StlPlayer.cpp index de4a1ec7..281edca0 100644 --- a/DRAMSys/simulator/StlPlayer.cpp +++ b/DRAMSys/simulator/StlPlayer.cpp @@ -51,7 +51,8 @@ StlPlayer::StlPlayer(const sc_module_name &name, bool addLengthConverter, TraceSetup *setup, bool relative) : - TrafficInitiator(name, setup, maxPendingReadRequests, maxPendingWriteRequests, addLengthConverter), + TrafficInitiator(name, setup, maxPendingReadRequests, maxPendingWriteRequests, + Configuration::getInstance().memSpec->defaultBytesPerBurst, addLengthConverter), file(pathToTrace), relative(relative), playerClk(playerClk) { currentBuffer = &lineContents[0]; diff --git a/DRAMSys/simulator/TrafficGenerator.cpp b/DRAMSys/simulator/TrafficGenerator.cpp index 33e90032..ef7dd08f 100644 --- a/DRAMSys/simulator/TrafficGenerator.cpp +++ b/DRAMSys/simulator/TrafficGenerator.cpp @@ -45,8 +45,9 @@ using namespace sc_core; using namespace tlm; TrafficGeneratorIf::TrafficGeneratorIf(const sc_core::sc_module_name &name, TraceSetup *setup, - unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests, bool addLengthConverter) - : TrafficInitiator(name, setup, maxPendingReadRequests, maxPendingWriteRequests, addLengthConverter) + unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests, + unsigned int dataLength, bool addLengthConverter) + : TrafficInitiator(name, setup, maxPendingReadRequests, maxPendingWriteRequests, dataLength, addLengthConverter) { } @@ -96,6 +97,7 @@ TrafficGenerator::TrafficGenerator(const sc_module_name &name, const DRAMSysConf TraceSetup *setup) : TrafficGeneratorIf(name, setup, conf.maxPendingReadRequests.value_or(defaultMaxPendingReadRequests), conf.maxPendingWriteRequests.value_or(defaultMaxPendingWriteRequests), + conf.dataLength.value_or(Configuration::getInstance().memSpec->defaultBytesPerBurst), conf.addLengthConverter.value_or(false)), generatorClk(TrafficInitiator::evaluateGeneratorClk(conf)), conf(conf), maxTransactions(conf.maxTransactions.value_or(std::numeric_limits::max())), @@ -375,8 +377,8 @@ uint64_t TrafficGenerator::evaluateMaxAddress(const DRAMSysConfiguration::TraceG TrafficGeneratorHammer::TrafficGeneratorHammer(const sc_core::sc_module_name &name, const DRAMSysConfiguration::TraceHammer &conf, TraceSetup *setup) - : TrafficGeneratorIf(name, setup, 1, 1, false), generatorClk(evaluateGeneratorClk(conf)), rowIncrement(conf.rowIncrement), - numRequests(conf.numRequests) + : TrafficGeneratorIf(name, setup, 1, 1, Configuration::getInstance().memSpec->defaultBytesPerBurst, false), + generatorClk(evaluateGeneratorClk(conf)), rowIncrement(conf.rowIncrement), numRequests(conf.numRequests) { } diff --git a/DRAMSys/simulator/TrafficGenerator.h b/DRAMSys/simulator/TrafficGenerator.h index e623dd48..ecaee1db 100644 --- a/DRAMSys/simulator/TrafficGenerator.h +++ b/DRAMSys/simulator/TrafficGenerator.h @@ -49,8 +49,9 @@ class TrafficGeneratorIf : public TrafficInitiator { public: - TrafficGeneratorIf(const sc_core::sc_module_name &name, TraceSetup *setup, unsigned int maxPendingReadRequests, - unsigned int maxPendingWriteRequests, bool addLengthConverter); + TrafficGeneratorIf(const sc_core::sc_module_name &name, TraceSetup *setup, + unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests, + unsigned int dataLength, bool addLengthConverter); private: void sendNextPayload() override; diff --git a/DRAMSys/simulator/TrafficInitiator.cpp b/DRAMSys/simulator/TrafficInitiator.cpp index 4a2f74af..f450a51a 100644 --- a/DRAMSys/simulator/TrafficInitiator.cpp +++ b/DRAMSys/simulator/TrafficInitiator.cpp @@ -44,14 +44,15 @@ using namespace sc_core; using namespace tlm; TrafficInitiator::TrafficInitiator(const sc_module_name &name, TraceSetup *setup, - unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests, bool addLengthConverter) : + unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests, + unsigned int defaultDataLength, bool addLengthConverter) : sc_module(name), addLengthConverter(addLengthConverter), payloadEventQueue(this, &TrafficInitiator::peqCallback), setup(setup), maxPendingReadRequests(maxPendingReadRequests), maxPendingWriteRequests(maxPendingWriteRequests), - defaultDataLength(Configuration::getInstance().memSpec->defaultBytesPerBurst), + defaultDataLength(defaultDataLength), storageEnabled(Configuration::getInstance().storeMode != Configuration::StoreMode::NoStorage) { SC_THREAD(sendNextPayload); diff --git a/DRAMSys/simulator/TrafficInitiator.h b/DRAMSys/simulator/TrafficInitiator.h index 3b456d29..5795f2a0 100644 --- a/DRAMSys/simulator/TrafficInitiator.h +++ b/DRAMSys/simulator/TrafficInitiator.h @@ -57,7 +57,8 @@ class TrafficInitiator : public sc_core::sc_module public: tlm_utils::simple_initiator_socket iSocket; TrafficInitiator(const sc_core::sc_module_name &name, TraceSetup *setup, - unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests, bool addLengthConverter); + unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests, + unsigned int defaultDataLength, bool addLengthConverter); SC_HAS_PROCESS(TrafficInitiator); virtual void sendNextPayload() = 0; const bool addLengthConverter = false;