Merge branch 'feat/traffic_gen_length' into 'develop'

Add data length parameter to traffic generators.

See merge request ems/astdm/modeling.dram/dram.sys!350
This commit is contained in:
Lukas Steiner
2022-03-15 15:00:15 +00:00
7 changed files with 20 additions and 10 deletions

View File

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

View File

@@ -117,6 +117,7 @@ struct TraceGenerator : public TrafficInitiator
{
std::optional<uint64_t> seed;
std::optional<uint64_t> maxTransactions;
std::optional<unsigned> dataLength;
std::map<unsigned int, std::variant<TraceGeneratorIdleState, TraceGeneratorTrafficState>> states;
std::multimap<unsigned int, TraceGeneratorStateTransition> transitions;
std::optional<std::string> idleUntil;

View File

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

View File

@@ -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<uint64_t>::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)
{
}

View File

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

View File

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

View File

@@ -57,7 +57,8 @@ class TrafficInitiator : public sc_core::sc_module
public:
tlm_utils::simple_initiator_socket<TrafficInitiator> 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;