diff --git a/DRAMSys/library/src/common/configuration/TraceSetup.cpp b/DRAMSys/library/src/common/configuration/TraceSetup.cpp index 33cf0f8b..9d39a78f 100644 --- a/DRAMSys/library/src/common/configuration/TraceSetup.cpp +++ b/DRAMSys/library/src/common/configuration/TraceSetup.cpp @@ -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(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(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(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); diff --git a/DRAMSys/simulator/TraceSetup.cpp b/DRAMSys/simulator/TraceSetup.cpp index 40d80cb4..2f4bb012 100644 --- a/DRAMSys/simulator/TraceSetup.cpp +++ b/DRAMSys/simulator/TraceSetup.cpp @@ -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."); diff --git a/DRAMSys/traceAnalyzer/simulationdialog.cpp b/DRAMSys/traceAnalyzer/simulationdialog.cpp index e4c1dc18..218909ce 100644 --- a/DRAMSys/traceAnalyzer/simulationdialog.cpp +++ b/DRAMSys/traceAnalyzer/simulationdialog.cpp @@ -210,6 +210,9 @@ void SimulationDialog::saveConfiguration(QFile &file) return; } + // Clear the file + file.resize(0); + QTextStream out(&file); loadConfigurationFromTextFields();