Fix bug regarding addressIncrement

This commit is contained in:
2021-12-02 11:03:52 +01:00
parent 335993e9fe
commit de4cb1be66
3 changed files with 32 additions and 19 deletions

View File

@@ -49,36 +49,37 @@ void to_json(json &j, const TraceSetup &c)
for (const auto &initiator : c.initiators)
{
json inititator_j;
json initiator_j;
inititator_j["name"] = initiator->name;
inititator_j["clkMhz"] = initiator->clkMhz;
inititator_j["maxPendingReadRequests"] = initiator->maxPendingReadRequests;
inititator_j["maxPendingWriteRequests"] = initiator->maxPendingWriteRequests;
initiator_j["name"] = initiator->name;
initiator_j["clkMhz"] = initiator->clkMhz;
initiator_j["maxPendingReadRequests"] = initiator->maxPendingReadRequests;
initiator_j["maxPendingWriteRequests"] = initiator->maxPendingWriteRequests;
if (const auto generator = dynamic_cast<TraceGenerator *>(initiator.get()))
{
inititator_j["type"] = "generator";
inititator_j["numRequests"] = generator->numRequests;
inititator_j["rwRatio"] = generator->rwRatio;
inititator_j["addressDistribution"] = generator->addressDistribution;
inititator_j["seed"] = generator->seed;
inititator_j["minAddress"] = generator->minAddress;
inititator_j["maxAddress"] = generator->maxAddress;
initiator_j["type"] = "generator";
initiator_j["numRequests"] = generator->numRequests;
initiator_j["rwRatio"] = generator->rwRatio;
initiator_j["addressDistribution"] = generator->addressDistribution;
initiator_j["addressIncrement"] = generator->addressIncrement;
initiator_j["seed"] = generator->seed;
initiator_j["minAddress"] = generator->minAddress;
initiator_j["maxAddress"] = generator->maxAddress;
}
else if (const auto hammer = dynamic_cast<TraceHammer *>(initiator.get()))
{
inititator_j["type"] = "hammer";
inititator_j["numRequests"] = hammer->numRequests;
inititator_j["rowIncrement"] = hammer->rowIncrement;
initiator_j["type"] = "hammer";
initiator_j["numRequests"] = hammer->numRequests;
initiator_j["rowIncrement"] = hammer->rowIncrement;
}
else if (const auto player = dynamic_cast<TracePlayer *>(initiator.get()))
{
inititator_j["type"] = "player";
initiator_j["type"] = "player";
}
remove_null_values(inititator_j);
j.insert(j.end(), inititator_j);
remove_null_values(initiator_j);
j.insert(j.end(), initiator_j);
}
}
@@ -102,6 +103,9 @@ void from_json(const json &j, TraceSetup &c)
initiator_j.at("rwRatio").get_to(generator->rwRatio);
initiator_j.at("addressDistribution").get_to(generator->addressDistribution);
if (initiator_j.contains("addressIncrement"))
initiator_j.at("addressIncrement").get_to(generator->addressIncrement);
if (initiator_j.contains("seed"))
initiator_j.at("seed").get_to(generator->seed);

View File

@@ -117,13 +117,19 @@ TraceSetup::TraceSetup(const DRAMSysConfiguration::TraceSetup &traceSetup,
return 0;
}();
if (minAddress > Configuration::getInstance().memSpec->getSimMemSizeInBytes() - 1)
SC_REPORT_FATAL("TraceSetup", "minAddress is out of range.");
uint64_t maxAddress = [=]() -> uint64_t {
if (generator->maxAddress.isValid())
return generator->maxAddress.getValue();
else
return 0;
return Configuration::getInstance().memSpec->getSimMemSizeInBytes() - 1;
}();
if (maxAddress > Configuration::getInstance().memSpec->getSimMemSizeInBytes() - 1)
SC_REPORT_FATAL("TraceSetup", "minAddress is out of range.");
if (maxAddress < minAddress)
SC_REPORT_FATAL("TraceSetup", "maxAddress is smaller than minAddress.");

View File

@@ -210,6 +210,9 @@ void SimulationDialog::saveConfiguration(QFile &file)
return;
}
// Clear the file
file.resize(0);
QTextStream out(&file);
loadConfigurationFromTextFields();