Add minAddress and maxAddress fields to traffic generators.
This commit is contained in:
@@ -59,7 +59,7 @@ TraceSetup::TraceSetup(const std::string &uri,
|
||||
SC_REPORT_FATAL("TraceSetup", "tracesetup is empty");
|
||||
for (auto &it : simulationdoc["simulation"]["tracesetup"].items())
|
||||
{
|
||||
auto value = it.value();
|
||||
nlohmann::json value = it.value();
|
||||
if (!value.empty())
|
||||
{
|
||||
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.");
|
||||
|
||||
unsigned int seed = 0;
|
||||
if (value["seed"].is_number_unsigned())
|
||||
seed = value["seed"];
|
||||
if (!value["seed"].empty())
|
||||
{
|
||||
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;
|
||||
|
||||
@@ -152,19 +178,20 @@ TraceSetup::TraceSetup(const std::string &uri,
|
||||
{
|
||||
uint64_t addressIncrement = 0x0;
|
||||
if (!value["addressIncrement"].is_number_unsigned())
|
||||
SC_REPORT_FATAL("TraceSetup", "Address increment is not a number.");
|
||||
|
||||
addressIncrement = value["addressIncrement"];
|
||||
SC_REPORT_FATAL("TraceSetup", "Address increment is not an unsigned number.");
|
||||
else
|
||||
addressIncrement = value["addressIncrement"];
|
||||
|
||||
generator = new TrafficGeneratorSequential(name.c_str(), playerClk, numRequests,
|
||||
maxPendingReadRequests, maxPendingWriteRequests,
|
||||
rwRatio, addressIncrement, seed, this);
|
||||
minAddress, maxAddress, rwRatio, addressIncrement, seed,
|
||||
this);
|
||||
}
|
||||
else
|
||||
{
|
||||
generator = new TrafficGeneratorRandom(name.c_str(), playerClk, numRequests,
|
||||
maxPendingReadRequests, maxPendingWriteRequests,
|
||||
rwRatio, seed, this);
|
||||
minAddress, maxAddress, rwRatio, seed, this);
|
||||
}
|
||||
|
||||
players.push_back(generator);
|
||||
@@ -186,6 +213,8 @@ TraceSetup::TraceSetup(const std::string &uri,
|
||||
players.push_back(generator);
|
||||
}
|
||||
}
|
||||
else
|
||||
SC_REPORT_FATAL("TraceSetup", "Empty trace setup item.");
|
||||
}
|
||||
|
||||
remainingTransactions = totalTransactions;
|
||||
|
||||
@@ -111,14 +111,15 @@ TrafficGeneratorRandom::TrafficGeneratorRandom(const sc_core::sc_module_name &na
|
||||
uint64_t numRequests,
|
||||
unsigned int maxPendingReadRequests,
|
||||
unsigned int maxPendingWriteRequests,
|
||||
uint64_t minAddress,
|
||||
uint64_t maxAddress,
|
||||
float rwRatio,
|
||||
unsigned int seed,
|
||||
TraceSetup *setup) :
|
||||
TrafficGenerator(name, generatorClk, numRequests, maxPendingReadRequests,
|
||||
maxPendingWriteRequests, rwRatio, seed, setup)
|
||||
TrafficGenerator(name, generatorClk, numRequests, maxPendingReadRequests, maxPendingWriteRequests, rwRatio, seed,
|
||||
setup)
|
||||
{
|
||||
randomAddressDistribution = std::uniform_int_distribution<uint64_t>
|
||||
(0, Configuration::getInstance().memSpec->getSimMemSizeInBytes());
|
||||
randomAddressDistribution = std::uniform_int_distribution<uint64_t> (minAddress, maxAddress);
|
||||
}
|
||||
|
||||
uint64_t TrafficGeneratorRandom::getNextAddress()
|
||||
@@ -131,13 +132,15 @@ TrafficGeneratorSequential::TrafficGeneratorSequential(const sc_core::sc_module_
|
||||
uint64_t numRequests,
|
||||
unsigned int maxPendingReadRequests,
|
||||
unsigned int maxPendingWriteRequests,
|
||||
uint64_t minAddress,
|
||||
uint64_t maxAddress,
|
||||
float rwRatio,
|
||||
uint64_t addressIncrement,
|
||||
unsigned int seed,
|
||||
TraceSetup *setup) :
|
||||
TrafficGenerator(name, generatorClk, numRequests, maxPendingReadRequests,
|
||||
maxPendingWriteRequests, rwRatio, seed, setup),
|
||||
addressIncrement(addressIncrement)
|
||||
TrafficGenerator(name, generatorClk, numRequests, maxPendingReadRequests, maxPendingWriteRequests, rwRatio, seed,
|
||||
setup), minAddress(minAddress), maxAddress(maxAddress), addressIncrement(addressIncrement),
|
||||
currentAddress(minAddress)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -145,6 +148,8 @@ uint64_t TrafficGeneratorSequential::getNextAddress()
|
||||
{
|
||||
uint64_t address = currentAddress;
|
||||
currentAddress += addressIncrement;
|
||||
if (currentAddress > maxAddress)
|
||||
currentAddress = minAddress;
|
||||
return address;
|
||||
}
|
||||
|
||||
@@ -154,7 +159,7 @@ TrafficGeneratorHammer::TrafficGeneratorHammer(const sc_core::sc_module_name &na
|
||||
uint64_t numRequests,
|
||||
uint64_t rowIncrement,
|
||||
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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -78,6 +78,8 @@ public:
|
||||
uint64_t numRequests,
|
||||
unsigned int maxPendingReadRequests,
|
||||
unsigned int maxPendingWriteRequests,
|
||||
uint64_t minAddress,
|
||||
uint64_t maxAddress,
|
||||
float rwRatio,
|
||||
unsigned int seed,
|
||||
TraceSetup *setup);
|
||||
@@ -96,6 +98,8 @@ public:
|
||||
uint64_t numRequests,
|
||||
unsigned int maxPendingReadRequests,
|
||||
unsigned int maxPendingWriteRequests,
|
||||
uint64_t minAddress,
|
||||
uint64_t maxAddress,
|
||||
float rwRatio,
|
||||
uint64_t addressIncrement,
|
||||
unsigned int seed,
|
||||
@@ -104,8 +108,10 @@ public:
|
||||
private:
|
||||
uint64_t getNextAddress() override;
|
||||
|
||||
uint64_t currentAddress = 0x0;
|
||||
uint64_t currentAddress;
|
||||
uint64_t addressIncrement;
|
||||
uint64_t minAddress;
|
||||
uint64_t maxAddress;
|
||||
};
|
||||
|
||||
class TrafficGeneratorHammer final : public TrafficGenerator
|
||||
|
||||
Reference in New Issue
Block a user