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");
|
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;
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user