Add minAddress and maxAddress fields to traffic generators.

This commit is contained in:
Lukas Steiner
2021-09-30 11:13:40 +02:00
parent fdbfc416f5
commit 98e6e2be2c
3 changed files with 57 additions and 17 deletions

View File

@@ -59,7 +59,7 @@ TraceSetup::TraceSetup(const std::string &uri,
SC_REPORT_FATAL("TraceSetup", "tracesetup is empty"); SC_REPORT_FATAL("TraceSetup", "tracesetup is empty");
for (auto &it : simulationdoc["simulation"]["tracesetup"].items()) for (auto &it : simulationdoc["simulation"]["tracesetup"].items())
{ {
auto value = it.value(); nlohmann::json value = it.value();
if (!value.empty()) if (!value.empty())
{ {
sc_time playerClk; sc_time playerClk;
@@ -143,8 +143,34 @@ TraceSetup::TraceSetup(const std::string &uri,
SC_REPORT_FATAL("TraceSetup", "Address distribution must either be sequential or random."); SC_REPORT_FATAL("TraceSetup", "Address distribution must either be sequential or random.");
unsigned int seed = 0; unsigned int seed = 0;
if (value["seed"].is_number_unsigned()) if (!value["seed"].empty())
seed = value["seed"]; {
if (value["seed"].is_number_unsigned())
seed = value["seed"];
else
SC_REPORT_FATAL("TraceSetup", "Seed is not an unsigned number.");
}
uint64_t minAddress = 0;
if (!value["minAddress"].empty())
{
if (value["minAddress"].is_number_unsigned())
minAddress = value["minAddress"];
else
SC_REPORT_FATAL("TraceSetup", "minAddress is not an unsigned number.");
}
uint64_t maxAddress = Configuration::getInstance().memSpec->getSimMemSizeInBytes() - 1;
if (!value["maxAddress"].empty())
{
if (value["maxAddress"].is_number_unsigned())
maxAddress = value["maxAddress"];
else
SC_REPORT_FATAL("TraceSetup", "maxAddress is not an unsigned number.");
}
if (maxAddress < minAddress)
SC_REPORT_FATAL("TraceSetup", "maxAddress is smaller than minAddress.");
TrafficInitiator* generator; TrafficInitiator* generator;
@@ -152,19 +178,20 @@ TraceSetup::TraceSetup(const std::string &uri,
{ {
uint64_t addressIncrement = 0x0; uint64_t addressIncrement = 0x0;
if (!value["addressIncrement"].is_number_unsigned()) if (!value["addressIncrement"].is_number_unsigned())
SC_REPORT_FATAL("TraceSetup", "Address increment is not a number."); SC_REPORT_FATAL("TraceSetup", "Address increment is not an unsigned number.");
else
addressIncrement = value["addressIncrement"]; addressIncrement = value["addressIncrement"];
generator = new TrafficGeneratorSequential(name.c_str(), playerClk, numRequests, generator = new TrafficGeneratorSequential(name.c_str(), playerClk, numRequests,
maxPendingReadRequests, maxPendingWriteRequests, maxPendingReadRequests, maxPendingWriteRequests,
rwRatio, addressIncrement, seed, this); minAddress, maxAddress, rwRatio, addressIncrement, seed,
this);
} }
else else
{ {
generator = new TrafficGeneratorRandom(name.c_str(), playerClk, numRequests, generator = new TrafficGeneratorRandom(name.c_str(), playerClk, numRequests,
maxPendingReadRequests, maxPendingWriteRequests, maxPendingReadRequests, maxPendingWriteRequests,
rwRatio, seed, this); minAddress, maxAddress, rwRatio, seed, this);
} }
players.push_back(generator); players.push_back(generator);
@@ -186,6 +213,8 @@ TraceSetup::TraceSetup(const std::string &uri,
players.push_back(generator); players.push_back(generator);
} }
} }
else
SC_REPORT_FATAL("TraceSetup", "Empty trace setup item.");
} }
remainingTransactions = totalTransactions; remainingTransactions = totalTransactions;

View File

@@ -111,14 +111,15 @@ TrafficGeneratorRandom::TrafficGeneratorRandom(const sc_core::sc_module_name &na
uint64_t numRequests, uint64_t numRequests,
unsigned int maxPendingReadRequests, unsigned int maxPendingReadRequests,
unsigned int maxPendingWriteRequests, unsigned int maxPendingWriteRequests,
uint64_t minAddress,
uint64_t maxAddress,
float rwRatio, float rwRatio,
unsigned int seed, unsigned int seed,
TraceSetup *setup) : TraceSetup *setup) :
TrafficGenerator(name, generatorClk, numRequests, maxPendingReadRequests, TrafficGenerator(name, generatorClk, numRequests, maxPendingReadRequests, maxPendingWriteRequests, rwRatio, seed,
maxPendingWriteRequests, rwRatio, seed, setup) setup)
{ {
randomAddressDistribution = std::uniform_int_distribution<uint64_t> randomAddressDistribution = std::uniform_int_distribution<uint64_t> (minAddress, maxAddress);
(0, Configuration::getInstance().memSpec->getSimMemSizeInBytes());
} }
uint64_t TrafficGeneratorRandom::getNextAddress() uint64_t TrafficGeneratorRandom::getNextAddress()
@@ -131,13 +132,15 @@ TrafficGeneratorSequential::TrafficGeneratorSequential(const sc_core::sc_module_
uint64_t numRequests, uint64_t numRequests,
unsigned int maxPendingReadRequests, unsigned int maxPendingReadRequests,
unsigned int maxPendingWriteRequests, unsigned int maxPendingWriteRequests,
uint64_t minAddress,
uint64_t maxAddress,
float rwRatio, float rwRatio,
uint64_t addressIncrement, uint64_t addressIncrement,
unsigned int seed, unsigned int seed,
TraceSetup *setup) : TraceSetup *setup) :
TrafficGenerator(name, generatorClk, numRequests, maxPendingReadRequests, TrafficGenerator(name, generatorClk, numRequests, maxPendingReadRequests, maxPendingWriteRequests, rwRatio, seed,
maxPendingWriteRequests, rwRatio, seed, setup), setup), minAddress(minAddress), maxAddress(maxAddress), addressIncrement(addressIncrement),
addressIncrement(addressIncrement) currentAddress(minAddress)
{ {
} }
@@ -145,6 +148,8 @@ uint64_t TrafficGeneratorSequential::getNextAddress()
{ {
uint64_t address = currentAddress; uint64_t address = currentAddress;
currentAddress += addressIncrement; currentAddress += addressIncrement;
if (currentAddress > maxAddress)
currentAddress = minAddress;
return address; return address;
} }
@@ -154,7 +159,7 @@ TrafficGeneratorHammer::TrafficGeneratorHammer(const sc_core::sc_module_name &na
uint64_t numRequests, uint64_t numRequests,
uint64_t rowIncrement, uint64_t rowIncrement,
TraceSetup *setup) : TraceSetup *setup) :
TrafficGenerator(name, generatorClk, numRequests, 1, 1, 1, 1, setup), rowIncrement(rowIncrement) TrafficGenerator(name, generatorClk, numRequests, 1, 1, 1.0f, 1, setup), rowIncrement(rowIncrement)
{ {
} }

View File

@@ -78,6 +78,8 @@ public:
uint64_t numRequests, uint64_t numRequests,
unsigned int maxPendingReadRequests, unsigned int maxPendingReadRequests,
unsigned int maxPendingWriteRequests, unsigned int maxPendingWriteRequests,
uint64_t minAddress,
uint64_t maxAddress,
float rwRatio, float rwRatio,
unsigned int seed, unsigned int seed,
TraceSetup *setup); TraceSetup *setup);
@@ -96,6 +98,8 @@ public:
uint64_t numRequests, uint64_t numRequests,
unsigned int maxPendingReadRequests, unsigned int maxPendingReadRequests,
unsigned int maxPendingWriteRequests, unsigned int maxPendingWriteRequests,
uint64_t minAddress,
uint64_t maxAddress,
float rwRatio, float rwRatio,
uint64_t addressIncrement, uint64_t addressIncrement,
unsigned int seed, unsigned int seed,
@@ -104,8 +108,10 @@ public:
private: private:
uint64_t getNextAddress() override; uint64_t getNextAddress() override;
uint64_t currentAddress = 0x0; uint64_t currentAddress;
uint64_t addressIncrement; uint64_t addressIncrement;
uint64_t minAddress;
uint64_t maxAddress;
}; };
class TrafficGeneratorHammer final : public TrafficGenerator class TrafficGeneratorHammer final : public TrafficGenerator