diff --git a/DRAMSys/library/src/configuration/Configuration.cpp b/DRAMSys/library/src/configuration/Configuration.cpp index 7ef11c0f..a5ee1c84 100644 --- a/DRAMSys/library/src/configuration/Configuration.cpp +++ b/DRAMSys/library/src/configuration/Configuration.cpp @@ -152,31 +152,31 @@ void Configuration::setParameter(std::string name, nlohmann::json value) if (value != "Celsius" && value != "Fahrenheit" && value != "Kelvin") SC_REPORT_FATAL("Configuration", ("Invalid value for parameter " + name + ".").c_str()); - temperatureSim.TemperatureScale = value; + temperatureSim.temperatureScale = value; } else if (name == "StaticTemperatureDefaultValue") - temperatureSim.StaticTemperatureDefaultValue = value; + temperatureSim.staticTemperatureDefaultValue = value; else if (name == "ThermalSimPeriod") - temperatureSim.ThermalSimPeriod = value; + temperatureSim.thermalSimPeriod = value; else if (name == "ThermalSimUnit") - temperatureSim.ThermalSimUnit = string2TimeUnit(value); + temperatureSim.thermalSimUnit = string2TimeUnit(value); else if (name == "PowerInfoFile") { temperatureSim.powerInfoFile = value; temperatureSim.parsePowerInfoFile(); } else if (name == "IceServerIp") - temperatureSim.IceServerIp = value; + temperatureSim.iceServerIp = value; else if (name == "IceServerPort") - temperatureSim.IceServerPort = value; + temperatureSim.iceServerPort = value; else if (name == "SimPeriodAdjustFactor") - temperatureSim.SimPeriodAdjustFactor = value; + temperatureSim.simPeriodAdjustFactor = value; else if (name == "NPowStableCyclesToIncreasePeriod") - temperatureSim.NPowStableCyclesToIncreasePeriod = value; + temperatureSim.nPowStableCyclesToIncreasePeriod = value; else if (name == "GenerateTemperatureMap") - temperatureSim.GenerateTemperatureMap = value; + temperatureSim.generateTemperatureMap = value; else if (name == "GeneratePowerMap") - temperatureSim.GeneratePowerMap = value; + temperatureSim.generatePowerMap = value; else SC_REPORT_FATAL("Configuration", ("Parameter " + name + " not defined in Configuration").c_str()); diff --git a/DRAMSys/library/src/configuration/ConfigurationLoader.cpp b/DRAMSys/library/src/configuration/ConfigurationLoader.cpp index 006a6727..e5bbc495 100644 --- a/DRAMSys/library/src/configuration/ConfigurationLoader.cpp +++ b/DRAMSys/library/src/configuration/ConfigurationLoader.cpp @@ -43,21 +43,14 @@ using json = nlohmann::json; void ConfigurationLoader::loadSimConfig(Configuration &config, std::string simconfigUri) { json doc = parseJSON(simconfigUri); - json::object_t *simconfig = doc["simconfig"].get_ptr(); - loadConfigJson(config, simconfig); + for (auto& x : doc["simconfig"].items()) + config.setParameter(x.key(), x.value()); } void ConfigurationLoader::loadTemperatureSimConfig(Configuration &config, std::string thermalsimconfigUri) { json doc = parseJSON(thermalsimconfigUri); - json::object_t *thermalconfig = doc["thermalsimconfig"].get_ptr(); - loadConfigJson(config, thermalconfig); -} - -void ConfigurationLoader::loadConfigJson(Configuration &config, json::object_t *configNode) -{ - json j = *configNode; - for (auto& x : j.items()) + for (auto& x : doc["thermalsimconfig"].items()) config.setParameter(x.key(), x.value()); } @@ -65,22 +58,17 @@ void ConfigurationLoader::loadMCConfig(Configuration &config, std::string mcconf { config.mcconfigUri = mcconfigUri; json doc = parseJSON(mcconfigUri); - json::object_t *mcconfig = doc["mcconfig"].get_ptr(); - loadConfigJson(config, mcconfig); + for (auto& x : doc["mcconfig"].items()) + config.setParameter(x.key(), x.value()); } void ConfigurationLoader::loadMemSpec(Configuration &config, std::string memspecUri) { config.memspecUri = memspecUri; json doc = parseJSON(memspecUri); - json::object_t *memspec = doc["memspec"].get_ptr(); - loadMemSpec(config, memspec); -} + json memspec = doc["memspec"]; -void ConfigurationLoader::loadMemSpec(Configuration &config, json::object_t *memspec) -{ - json j = *memspec; - std::string memoryType = j["memoryType"]; + std::string memoryType = memspec["memoryType"]; if (memoryType == "DDR3") { @@ -140,38 +128,36 @@ void ConfigurationLoader::loadMemSpec(Configuration &config, json::object_t *mem SC_REPORT_FATAL("ConfigurationLoader", "Unsupported DRAM type"); } -void ConfigurationLoader::loadCommons(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadCommons(Configuration &config, json &memspec) { MemSpec *memSpec = config.memSpec; - json j = *jsonSpec; - memSpec->memoryId = stringParameter(j["memoryId"], "memoryId"); - memSpec->memoryType = stringParameter(j["memoryType"], "memoryType"); + memSpec->memoryId = parseString(memspec["memoryId"], "memoryId"); + memSpec->memoryType = parseString(memspec["memoryType"], "memoryType"); // MemArchitecture - memSpec->burstLength = uIntParameter( j["memarchitecturespec"]["burstLength"],"burstLength"); - memSpec->dataRate = uIntParameter( j["memarchitecturespec"]["dataRate"],"dataRate"); - memSpec->numberOfRows = uIntParameter( j["memarchitecturespec"]["nbrOfRows"],"nbrOfRows"); - memSpec->numberOfColumns = uIntParameter( j["memarchitecturespec"]["nbrOfColumns"],"nbrOfColumns"); - memSpec->bitWidth = uIntParameter( j["memarchitecturespec"]["width"],"width"); + memSpec->burstLength = parseUint(memspec["memarchitecturespec"]["burstLength"],"burstLength"); + memSpec->dataRate = parseUint(memspec["memarchitecturespec"]["dataRate"],"dataRate"); + memSpec->numberOfRows = parseUint(memspec["memarchitecturespec"]["nbrOfRows"],"nbrOfRows"); + memSpec->numberOfColumns = parseUint(memspec["memarchitecturespec"]["nbrOfColumns"],"nbrOfColumns"); + memSpec->bitWidth = parseUint(memspec["memarchitecturespec"]["width"],"width"); // Clock - memSpec->fCKMHz = doubleParameter(j["memtimingspec"]["clkMhz"], "clkMhz"); + memSpec->fCKMHz = parseUdouble(memspec["memtimingspec"]["clkMhz"], "clkMhz"); memSpec->tCK = sc_time(1.0 / memSpec->fCKMHz, SC_US); memSpec->burstDuration = memSpec->tCK * (memSpec->burstLength / memSpec->dataRate); } -void ConfigurationLoader::loadDDR3(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadDDR3(Configuration &config, json &memspec) { MemSpecDDR3 *memSpec = dynamic_cast(config.memSpec); if (memSpec == nullptr) SC_REPORT_FATAL("ConfigurationLoader", "Wrong MemSpec chosen"); // MemArchitecture - json j = *jsonSpec; std::string arch = "memarchitecturespec"; - memSpec->numberOfRanks = uIntParameter(j[arch]["nbrOfRanks"],"nbrOfRanks"); - memSpec->banksPerRank = uIntParameter(j[arch]["nbrOfBanks"],"nbrOfBanks"); + memSpec->numberOfRanks = parseUint(memspec[arch]["nbrOfRanks"],"nbrOfRanks"); + memSpec->banksPerRank = parseUint(memspec[arch]["nbrOfBanks"],"nbrOfBanks"); memSpec->groupsPerRank = 1; memSpec->banksPerGroup = memSpec->banksPerRank / memSpec->groupsPerRank; memSpec->numberOfBanks = memSpec->banksPerRank * memSpec->numberOfRanks; @@ -179,147 +165,145 @@ void ConfigurationLoader::loadDDR3(Configuration &config, json::object_t *jsonSp // MemTimings specific for DDR3 std::string timings = "memtimingspec"; - memSpec->tCKE = memSpec->tCK * uIntParameter(j[timings]["CKE"], "CKE"); + memSpec->tCKE = memSpec->tCK * parseUint(memspec[timings]["CKE"], "CKE"); memSpec->tPD = memSpec->tCKE; - memSpec->tCKESR = memSpec->tCK * uIntParameter(j[timings]["CKESR"], "CKESR"); - memSpec->tCKE = memSpec->tCK * uIntParameter(j[timings]["DQSCK"], "DQSCK"); - memSpec->tRAS = memSpec->tCK * uIntParameter(j[timings]["RAS"], "RAS"); - memSpec->tRC = memSpec->tCK * uIntParameter(j[timings]["RC"], "RC"); - memSpec->tRCD = memSpec->tCK * uIntParameter(j[timings]["RCD"], "RCD"); - memSpec->tRL = memSpec->tCK * uIntParameter(j[timings]["RL"], "RL"); - memSpec->tRTP = memSpec->tCK * uIntParameter(j[timings]["RTP"], "RTP"); - memSpec->tWL = memSpec->tCK * uIntParameter(j[timings]["WL"], "WL"); - memSpec->tWR = memSpec->tCK * uIntParameter(j[timings]["WR"], "WR"); - memSpec->tXP = memSpec->tCK * uIntParameter(j[timings]["XP"], "XP"); - memSpec->tXS = memSpec->tCK * uIntParameter(j[timings]["XS"], "XS"); - memSpec->tCCD = memSpec->tCK * uIntParameter(j[timings]["CCD"], "CCD"); - memSpec->tFAW = memSpec->tCK * uIntParameter(j[timings]["FAW"], "FAW"); - memSpec->tREFI = memSpec->tCK * uIntParameter(j[timings]["REFI"], "REFI"); - memSpec->tRFC = memSpec->tCK * uIntParameter(j[timings]["RFC"], "RFC"); - memSpec->tRP = memSpec->tCK * uIntParameter(j[timings]["RP"], "RP"); - memSpec->tRRD = memSpec->tCK * uIntParameter(j[timings]["RRD"], "RRD"); - memSpec->tWTR = memSpec->tCK * uIntParameter(j[timings]["WTR"], "WTR"); - memSpec->tAL = memSpec->tCK * uIntParameter(j[timings]["AL"], "AL"); - memSpec->tXPDLL = memSpec->tCK * uIntParameter(j[timings]["XPDLL"], "XPDLL"); - memSpec->tXSDLL = memSpec->tCK * uIntParameter(j[timings]["XSDLL"], "XSDLL"); - memSpec->tACTPDEN = memSpec->tCK * uIntParameter(j[timings]["ACTPDEN"], "ACTPDEN"); - memSpec->tPRPDEN = memSpec->tCK * uIntParameter(j[timings]["PRPDEN"], "PRPDEN"); - memSpec->tREFPDEN = memSpec->tCK * uIntParameter(j[timings]["REFPDEN"], "REFPDEN"); - memSpec->tRTRS = memSpec->tCK * uIntParameter(j[timings]["RTRS"], "RTRS"); + memSpec->tCKESR = memSpec->tCK * parseUint(memspec[timings]["CKESR"], "CKESR"); + memSpec->tCKE = memSpec->tCK * parseUint(memspec[timings]["DQSCK"], "DQSCK"); + memSpec->tRAS = memSpec->tCK * parseUint(memspec[timings]["RAS"], "RAS"); + memSpec->tRC = memSpec->tCK * parseUint(memspec[timings]["RC"], "RC"); + memSpec->tRCD = memSpec->tCK * parseUint(memspec[timings]["RCD"], "RCD"); + memSpec->tRL = memSpec->tCK * parseUint(memspec[timings]["RL"], "RL"); + memSpec->tRTP = memSpec->tCK * parseUint(memspec[timings]["RTP"], "RTP"); + memSpec->tWL = memSpec->tCK * parseUint(memspec[timings]["WL"], "WL"); + memSpec->tWR = memSpec->tCK * parseUint(memspec[timings]["WR"], "WR"); + memSpec->tXP = memSpec->tCK * parseUint(memspec[timings]["XP"], "XP"); + memSpec->tXS = memSpec->tCK * parseUint(memspec[timings]["XS"], "XS"); + memSpec->tCCD = memSpec->tCK * parseUint(memspec[timings]["CCD"], "CCD"); + memSpec->tFAW = memSpec->tCK * parseUint(memspec[timings]["FAW"], "FAW"); + memSpec->tREFI = memSpec->tCK * parseUint(memspec[timings]["REFI"], "REFI"); + memSpec->tRFC = memSpec->tCK * parseUint(memspec[timings]["RFC"], "RFC"); + memSpec->tRP = memSpec->tCK * parseUint(memspec[timings]["RP"], "RP"); + memSpec->tRRD = memSpec->tCK * parseUint(memspec[timings]["RRD"], "RRD"); + memSpec->tWTR = memSpec->tCK * parseUint(memspec[timings]["WTR"], "WTR"); + memSpec->tAL = memSpec->tCK * parseUint(memspec[timings]["AL"], "AL"); + memSpec->tXPDLL = memSpec->tCK * parseUint(memspec[timings]["XPDLL"], "XPDLL"); + memSpec->tXSDLL = memSpec->tCK * parseUint(memspec[timings]["XSDLL"], "XSDLL"); + memSpec->tACTPDEN = memSpec->tCK * parseUint(memspec[timings]["ACTPDEN"], "ACTPDEN"); + memSpec->tPRPDEN = memSpec->tCK * parseUint(memspec[timings]["PRPDEN"], "PRPDEN"); + memSpec->tREFPDEN = memSpec->tCK * parseUint(memspec[timings]["REFPDEN"], "REFPDEN"); + memSpec->tRTRS = memSpec->tCK * parseUint(memspec[timings]["RTRS"], "RTRS"); // Currents and voltages std::string power = "mempowerspec"; - memSpec->iDD0 = doubleParameter(j[power]["idd0"], "idd0"); - memSpec->iDD2N = doubleParameter(j[power]["idd2n"], "idd2n"); - memSpec->iDD3N = doubleParameter(j[power]["idd3n"], "idd3n"); - memSpec->iDD4R = doubleParameter(j[power]["idd4r"], "idd4r"); - memSpec->iDD4W = doubleParameter(j[power]["idd4w"], "idd4w"); - memSpec->iDD5 = doubleParameter(j[power]["idd5"], "idd5"); - memSpec->iDD6 = doubleParameter(j[power]["idd6"], "idd6"); - memSpec->vDD = doubleParameter(j[power]["vdd"], "vdd"); - memSpec->iDD2P0 = doubleParameter(j[power]["idd2p0"], "idd2p0"); - memSpec->iDD2P1 = doubleParameter(j[power]["idd2p1"], "idd2p1"); - memSpec->iDD3P0 = doubleParameter(j[power]["idd3p0"], "idd3p0"); - memSpec->iDD3P1 = doubleParameter(j[power]["idd3p1"], "idd3p1"); + memSpec->iDD0 = parseUdouble(memspec[power]["idd0"], "idd0"); + memSpec->iDD2N = parseUdouble(memspec[power]["idd2n"], "idd2n"); + memSpec->iDD3N = parseUdouble(memspec[power]["idd3n"], "idd3n"); + memSpec->iDD4R = parseUdouble(memspec[power]["idd4r"], "idd4r"); + memSpec->iDD4W = parseUdouble(memspec[power]["idd4w"], "idd4w"); + memSpec->iDD5 = parseUdouble(memspec[power]["idd5"], "idd5"); + memSpec->iDD6 = parseUdouble(memspec[power]["idd6"], "idd6"); + memSpec->vDD = parseUdouble(memspec[power]["vdd"], "vdd"); + memSpec->iDD2P0 = parseUdouble(memspec[power]["idd2p0"], "idd2p0"); + memSpec->iDD2P1 = parseUdouble(memspec[power]["idd2p1"], "idd2p1"); + memSpec->iDD3P0 = parseUdouble(memspec[power]["idd3p0"], "idd3p0"); + memSpec->iDD3P1 = parseUdouble(memspec[power]["idd3p1"], "idd3p1"); } -void ConfigurationLoader::loadDDR4(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadDDR4(Configuration &config, json &memspec) { MemSpecDDR4 *memSpec = dynamic_cast(config.memSpec); if (memSpec == nullptr) SC_REPORT_FATAL("ConfigurationLoader", "Wrong MemSpec chosen"); - json j = *jsonSpec; // MemArchitecture std::string arch = "memarchitecturespec"; - memSpec->numberOfRanks = uIntParameter(j[arch]["nbrOfRanks"],"nbrOfRanks"); - memSpec->banksPerRank = uIntParameter(j[arch]["nbrOfBanks"],"nbrOfBanks"); - memSpec->groupsPerRank = uIntParameter(j[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); + memSpec->numberOfRanks = parseUint(memspec[arch]["nbrOfRanks"],"nbrOfRanks"); + memSpec->banksPerRank = parseUint(memspec[arch]["nbrOfBanks"],"nbrOfBanks"); + memSpec->groupsPerRank = parseUint(memspec[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); memSpec->banksPerGroup = memSpec->banksPerRank / memSpec->groupsPerRank; memSpec->numberOfBanks = memSpec->banksPerRank * memSpec->numberOfRanks; memSpec->numberOfBankGroups = memSpec->groupsPerRank * memSpec->numberOfRanks; // MemTimings specific for DDR4 std::string timings = "memtimingspec"; - memSpec->tCKE = memSpec->tCK * uIntParameter(j[timings]["CKE"], "CKE"); + memSpec->tCKE = memSpec->tCK * parseUint(memspec[timings]["CKE"], "CKE"); memSpec->tPD = memSpec->tCKE; - memSpec->tCKESR = memSpec->tCK * uIntParameter(j[timings]["CKESR"], "CKESR"); - memSpec->tDQSCK = memSpec->tCK * uIntParameter(j[timings]["DQSCK"], "DQSCK"); - memSpec->tRAS = memSpec->tCK * uIntParameter(j[timings]["RAS"], "RAS"); - memSpec->tRC = memSpec->tCK * uIntParameter(j[timings]["RC"], "RC"); - memSpec->tRCD = memSpec->tCK * uIntParameter(j[timings]["RCD"], "RCD"); - memSpec->tRL = memSpec->tCK * uIntParameter(j[timings]["RL"], "RL"); - memSpec->tRTP = memSpec->tCK * uIntParameter(j[timings]["RTP"], "RTP"); - memSpec->tWL = memSpec->tCK * uIntParameter(j[timings]["WL"], "WL"); - memSpec->tWR = memSpec->tCK * uIntParameter(j[timings]["WR"], "WR"); - memSpec->tXP = memSpec->tCK * uIntParameter(j[timings]["XP"], "XP"); - memSpec->tXS = memSpec->tCK * uIntParameter(j[timings]["XS"], "XS"); - memSpec->tCCD_S = memSpec->tCK * uIntParameter(j[timings]["CCD_S"], "CCD_S"); - memSpec->tCCD_L = memSpec->tCK * uIntParameter(j[timings]["CCD_L"], "CCD_L"); - memSpec->tFAW = memSpec->tCK * uIntParameter(j[timings]["FAW"], "FAW"); + memSpec->tCKESR = memSpec->tCK * parseUint(memspec[timings]["CKESR"], "CKESR"); + memSpec->tDQSCK = memSpec->tCK * parseUint(memspec[timings]["DQSCK"], "DQSCK"); + memSpec->tRAS = memSpec->tCK * parseUint(memspec[timings]["RAS"], "RAS"); + memSpec->tRC = memSpec->tCK * parseUint(memspec[timings]["RC"], "RC"); + memSpec->tRCD = memSpec->tCK * parseUint(memspec[timings]["RCD"], "RCD"); + memSpec->tRL = memSpec->tCK * parseUint(memspec[timings]["RL"], "RL"); + memSpec->tRTP = memSpec->tCK * parseUint(memspec[timings]["RTP"], "RTP"); + memSpec->tWL = memSpec->tCK * parseUint(memspec[timings]["WL"], "WL"); + memSpec->tWR = memSpec->tCK * parseUint(memspec[timings]["WR"], "WR"); + memSpec->tXP = memSpec->tCK * parseUint(memspec[timings]["XP"], "XP"); + memSpec->tXS = memSpec->tCK * parseUint(memspec[timings]["XS"], "XS"); + memSpec->tCCD_S = memSpec->tCK * parseUint(memspec[timings]["CCD_S"], "CCD_S"); + memSpec->tCCD_L = memSpec->tCK * parseUint(memspec[timings]["CCD_L"], "CCD_L"); + memSpec->tFAW = memSpec->tCK * parseUint(memspec[timings]["FAW"], "FAW"); unsigned refreshMode = Configuration::getInstance().refreshMode; if (refreshMode == 1) { - memSpec->tREFI = memSpec->tCK * uIntParameter(j[timings]["REFI"], "REFI"); - memSpec->tRFC = memSpec->tCK * uIntParameter(j[timings]["RFC"], "RFC"); + memSpec->tREFI = memSpec->tCK * parseUint(memspec[timings]["REFI"], "REFI"); + memSpec->tRFC = memSpec->tCK * parseUint(memspec[timings]["RFC"], "RFC"); } else if (refreshMode == 2) { - memSpec->tREFI = memSpec->tCK * (uIntParameter(j[timings]["REFI"], "REFI") / 2); - memSpec->tRFC = memSpec->tCK * uIntParameter(j[timings]["RFC2"], "RFC2"); + memSpec->tREFI = memSpec->tCK * (parseUint(memspec[timings]["REFI"], "REFI") / 2); + memSpec->tRFC = memSpec->tCK * parseUint(memspec[timings]["RFC2"], "RFC2"); } else if (refreshMode == 4) { - memSpec->tREFI = memSpec->tCK * (uIntParameter(j[timings]["REFI"], "REFI") / 2); - memSpec->tRFC = memSpec->tCK * uIntParameter(j[timings]["RFC4"], "RFC4"); + memSpec->tREFI = memSpec->tCK * (parseUint(memspec[timings]["REFI"], "REFI") / 2); + memSpec->tRFC = memSpec->tCK * parseUint(memspec[timings]["RFC4"], "RFC4"); } else SC_REPORT_FATAL("ConfigurationLoader", "Refresh Mode not supported"); - memSpec->tRP = memSpec->tCK * uIntParameter(j[timings]["RP"], "RP"); - memSpec->tRRD_S = memSpec->tCK * uIntParameter(j[timings]["RRD_S"], "RRD_S"); - memSpec->tRRD_L = memSpec->tCK * uIntParameter(j[timings]["RRD_L"], "RRD_L"); - memSpec->tWTR_S = memSpec->tCK * uIntParameter(j[timings]["WTR_S"], "WTR_S"); - memSpec->tWTR_L = memSpec->tCK * uIntParameter(j[timings]["WTR_L"], "WTR_L"); - memSpec->tAL = memSpec->tCK * uIntParameter(j[timings]["AL"], "AL"); - memSpec->tXPDLL = memSpec->tCK * uIntParameter(j[timings]["XPDLL"], "XPDLL"); - memSpec->tXSDLL = memSpec->tCK * uIntParameter(j[timings]["XSDLL"], "XSDLL"); - memSpec->tACTPDEN = memSpec->tCK * uIntParameter(j[timings]["ACTPDEN"], "ACTPDEN"); - memSpec->tPRPDEN = memSpec->tCK * uIntParameter(j[timings]["PRPDEN"], "PRPDEN"); - memSpec->tREFPDEN = memSpec->tCK * uIntParameter(j[timings]["REFPDEN"], "REFPDEN"); - memSpec->tRTRS = memSpec->tCK * uIntParameter(j[timings]["RTRS"], "RTRS"); + memSpec->tRP = memSpec->tCK * parseUint(memspec[timings]["RP"], "RP"); + memSpec->tRRD_S = memSpec->tCK * parseUint(memspec[timings]["RRD_S"], "RRD_S"); + memSpec->tRRD_L = memSpec->tCK * parseUint(memspec[timings]["RRD_L"], "RRD_L"); + memSpec->tWTR_S = memSpec->tCK * parseUint(memspec[timings]["WTR_S"], "WTR_S"); + memSpec->tWTR_L = memSpec->tCK * parseUint(memspec[timings]["WTR_L"], "WTR_L"); + memSpec->tAL = memSpec->tCK * parseUint(memspec[timings]["AL"], "AL"); + memSpec->tXPDLL = memSpec->tCK * parseUint(memspec[timings]["XPDLL"], "XPDLL"); + memSpec->tXSDLL = memSpec->tCK * parseUint(memspec[timings]["XSDLL"], "XSDLL"); + memSpec->tACTPDEN = memSpec->tCK * parseUint(memspec[timings]["ACTPDEN"], "ACTPDEN"); + memSpec->tPRPDEN = memSpec->tCK * parseUint(memspec[timings]["PRPDEN"], "PRPDEN"); + memSpec->tREFPDEN = memSpec->tCK * parseUint(memspec[timings]["REFPDEN"], "REFPDEN"); + memSpec->tRTRS = memSpec->tCK * parseUint(memspec[timings]["RTRS"], "RTRS"); // Currents and voltages std::string power = "mempowerspec"; - memSpec->iDD0 = doubleParameter(j[power]["idd0"], "idd0"); - memSpec->iDD2N = doubleParameter(j[power]["idd2n"], "idd2n"); - memSpec->iDD3N = doubleParameter(j[power]["idd3n"], "idd3n"); - memSpec->iDD4R = doubleParameter(j[power]["idd4r"], "idd4r"); - memSpec->iDD4W = doubleParameter(j[power]["idd4w"], "idd4w"); - memSpec->iDD5 = doubleParameter(j[power]["idd5"], "idd5"); - memSpec->iDD6 = doubleParameter(j[power]["idd6"], "idd6"); - memSpec->vDD = doubleParameter(j[power]["vdd"], "vdd"); - memSpec->iDD02 = doubleParameter(j[power]["idd02"], "idd02"); - memSpec->iDD2P0 = doubleParameter(j[power]["idd2p0"], "idd2p0"); - memSpec->iDD2P1 = doubleParameter(j[power]["idd2p1"], "idd2p1"); - memSpec->iDD3P0 = doubleParameter(j[power]["idd3p0"], "idd3p0"); - memSpec->iDD3P1 = doubleParameter(j[power]["idd3p1"], "idd3p1"); - memSpec->iDD62 = doubleParameter(j[power]["idd62"], "idd62"); - memSpec->vDD2 = doubleParameter(j[power]["vdd2"], "vdd2"); + memSpec->iDD0 = parseUdouble(memspec[power]["idd0"], "idd0"); + memSpec->iDD2N = parseUdouble(memspec[power]["idd2n"], "idd2n"); + memSpec->iDD3N = parseUdouble(memspec[power]["idd3n"], "idd3n"); + memSpec->iDD4R = parseUdouble(memspec[power]["idd4r"], "idd4r"); + memSpec->iDD4W = parseUdouble(memspec[power]["idd4w"], "idd4w"); + memSpec->iDD5 = parseUdouble(memspec[power]["idd5"], "idd5"); + memSpec->iDD6 = parseUdouble(memspec[power]["idd6"], "idd6"); + memSpec->vDD = parseUdouble(memspec[power]["vdd"], "vdd"); + memSpec->iDD02 = parseUdouble(memspec[power]["idd02"], "idd02"); + memSpec->iDD2P0 = parseUdouble(memspec[power]["idd2p0"], "idd2p0"); + memSpec->iDD2P1 = parseUdouble(memspec[power]["idd2p1"], "idd2p1"); + memSpec->iDD3P0 = parseUdouble(memspec[power]["idd3p0"], "idd3p0"); + memSpec->iDD3P1 = parseUdouble(memspec[power]["idd3p1"], "idd3p1"); + memSpec->iDD62 = parseUdouble(memspec[power]["idd62"], "idd62"); + memSpec->vDD2 = parseUdouble(memspec[power]["vdd2"], "vdd2"); } -void ConfigurationLoader::loadLPDDR4(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadLPDDR4(Configuration &config, json &memspec) { MemSpecLPDDR4 *memSpec = dynamic_cast(config.memSpec); if (memSpec == nullptr) SC_REPORT_FATAL("ConfigurationLoader", "Wrong MemSpec chosen"); - json j = *jsonSpec; // MemArchitecture: std::string arch = "memarchitecturespec"; - memSpec->numberOfRanks = uIntParameter(j[arch]["nbrOfRanks"],"nbrOfRanks"); - memSpec->banksPerRank = uIntParameter(j[arch]["nbrOfBanks"],"nbrOfBanks"); + memSpec->numberOfRanks = parseUint(memspec[arch]["nbrOfRanks"],"nbrOfRanks"); + memSpec->banksPerRank = parseUint(memspec[arch]["nbrOfBanks"],"nbrOfBanks"); memSpec->groupsPerRank = 1; memSpec->banksPerGroup = memSpec->banksPerRank / memSpec->groupsPerRank; memSpec->numberOfBanks = memSpec->banksPerRank * memSpec->numberOfRanks; @@ -327,53 +311,52 @@ void ConfigurationLoader::loadLPDDR4(Configuration &config, json::object_t *jso // MemTimings specific for LPDDR4 std::string timings = "memtimingspec"; - memSpec->tREFI = memSpec->tCK * uIntParameter(j[timings]["REFI"], "REFI"); - memSpec->tREFIpb = memSpec->tCK * uIntParameter(j[timings]["REFIPB"], "REFIPB"); - memSpec->tRFCab = memSpec->tCK * uIntParameter(j[timings]["RFCAB"], "RFCAB"); - memSpec->tRFCpb = memSpec->tCK * uIntParameter(j[timings]["RFCPB"], "RFCPB"); - memSpec->tRPab = memSpec->tCK * uIntParameter(j[timings]["RPAB"], "RPAB"); - memSpec->tRPpb = memSpec->tCK * uIntParameter(j[timings]["RPPB"], "RPPB"); - memSpec->tRCab = memSpec->tCK * uIntParameter(j[timings]["RCAB"], "RCAB"); - memSpec->tRCpb = memSpec->tCK * uIntParameter(j[timings]["RCPB"], "RCPB"); - memSpec->tPPD = memSpec->tCK * uIntParameter(j[timings]["PPD"], "PPD"); - memSpec->tRAS = memSpec->tCK * uIntParameter(j[timings]["RAS"], "RAS"); - memSpec->tRCD = memSpec->tCK * uIntParameter(j[timings]["RCD"], "RCD"); - memSpec->tFAW = memSpec->tCK * uIntParameter(j[timings]["FAW"], "FAW"); - memSpec->tRRD = memSpec->tCK * uIntParameter(j[timings]["RRD"], "RRD"); - memSpec->tCCD = memSpec->tCK * uIntParameter(j[timings]["CCD"], "CCD"); - memSpec->tRL = memSpec->tCK * uIntParameter(j[timings]["RL"], "RL"); - memSpec->tRPST = memSpec->tCK * uIntParameter(j[timings]["RPST"], "RPST"); - memSpec->tDQSCK = memSpec->tCK * uIntParameter(j[timings]["DQSCK"], "DQSCK"); - memSpec->tRTP = memSpec->tCK * uIntParameter(j[timings]["RTP"], "RTP"); - memSpec->tWL = memSpec->tCK * uIntParameter(j[timings]["WL"], "WL"); - memSpec->tDQSS = memSpec->tCK * uIntParameter(j[timings]["DQSS"], "DQSS"); - memSpec->tDQS2DQ = memSpec->tCK * uIntParameter(j[timings]["DQS2DQ"], "DQS2DQ"); - memSpec->tWR = memSpec->tCK * uIntParameter(j[timings]["WR"], "WR"); - memSpec->tWPRE = memSpec->tCK * uIntParameter(j[timings]["WPRE"], "WPRE"); - memSpec->tWTR = memSpec->tCK * uIntParameter(j[timings]["WTR"], "WTR"); - memSpec->tXP = memSpec->tCK * uIntParameter(j[timings]["XP"], "XP"); - memSpec->tSR = memSpec->tCK * uIntParameter(j[timings]["SR"], "SR"); - memSpec->tXSR = memSpec->tCK * uIntParameter(j[timings]["XSR"], "XSR"); - memSpec->tESCKE = memSpec->tCK * uIntParameter(j[timings]["ESCKE"], "ESCKE"); - memSpec->tCKE = memSpec->tCK * uIntParameter(j[timings]["CKE"], "CKE"); - memSpec->tCMDCKE = memSpec->tCK * uIntParameter(j[timings]["CMDCKE"], "CMDCKE"); - memSpec->tRTRS = memSpec->tCK * uIntParameter(j[timings]["RTRS"], "RTRS"); + memSpec->tREFI = memSpec->tCK * parseUint(memspec[timings]["REFI"], "REFI"); + memSpec->tREFIpb = memSpec->tCK * parseUint(memspec[timings]["REFIPB"], "REFIPB"); + memSpec->tRFCab = memSpec->tCK * parseUint(memspec[timings]["RFCAB"], "RFCAB"); + memSpec->tRFCpb = memSpec->tCK * parseUint(memspec[timings]["RFCPB"], "RFCPB"); + memSpec->tRPab = memSpec->tCK * parseUint(memspec[timings]["RPAB"], "RPAB"); + memSpec->tRPpb = memSpec->tCK * parseUint(memspec[timings]["RPPB"], "RPPB"); + memSpec->tRCab = memSpec->tCK * parseUint(memspec[timings]["RCAB"], "RCAB"); + memSpec->tRCpb = memSpec->tCK * parseUint(memspec[timings]["RCPB"], "RCPB"); + memSpec->tPPD = memSpec->tCK * parseUint(memspec[timings]["PPD"], "PPD"); + memSpec->tRAS = memSpec->tCK * parseUint(memspec[timings]["RAS"], "RAS"); + memSpec->tRCD = memSpec->tCK * parseUint(memspec[timings]["RCD"], "RCD"); + memSpec->tFAW = memSpec->tCK * parseUint(memspec[timings]["FAW"], "FAW"); + memSpec->tRRD = memSpec->tCK * parseUint(memspec[timings]["RRD"], "RRD"); + memSpec->tCCD = memSpec->tCK * parseUint(memspec[timings]["CCD"], "CCD"); + memSpec->tRL = memSpec->tCK * parseUint(memspec[timings]["RL"], "RL"); + memSpec->tRPST = memSpec->tCK * parseUint(memspec[timings]["RPST"], "RPST"); + memSpec->tDQSCK = memSpec->tCK * parseUint(memspec[timings]["DQSCK"], "DQSCK"); + memSpec->tRTP = memSpec->tCK * parseUint(memspec[timings]["RTP"], "RTP"); + memSpec->tWL = memSpec->tCK * parseUint(memspec[timings]["WL"], "WL"); + memSpec->tDQSS = memSpec->tCK * parseUint(memspec[timings]["DQSS"], "DQSS"); + memSpec->tDQS2DQ = memSpec->tCK * parseUint(memspec[timings]["DQS2DQ"], "DQS2DQ"); + memSpec->tWR = memSpec->tCK * parseUint(memspec[timings]["WR"], "WR"); + memSpec->tWPRE = memSpec->tCK * parseUint(memspec[timings]["WPRE"], "WPRE"); + memSpec->tWTR = memSpec->tCK * parseUint(memspec[timings]["WTR"], "WTR"); + memSpec->tXP = memSpec->tCK * parseUint(memspec[timings]["XP"], "XP"); + memSpec->tSR = memSpec->tCK * parseUint(memspec[timings]["SR"], "SR"); + memSpec->tXSR = memSpec->tCK * parseUint(memspec[timings]["XSR"], "XSR"); + memSpec->tESCKE = memSpec->tCK * parseUint(memspec[timings]["ESCKE"], "ESCKE"); + memSpec->tCKE = memSpec->tCK * parseUint(memspec[timings]["CKE"], "CKE"); + memSpec->tCMDCKE = memSpec->tCK * parseUint(memspec[timings]["CMDCKE"], "CMDCKE"); + memSpec->tRTRS = memSpec->tCK * parseUint(memspec[timings]["RTRS"], "RTRS"); // Currents and voltages // TODO: to be completed } -void ConfigurationLoader::loadWideIO(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadWideIO(Configuration &config, json &memspec) { MemSpecWideIO *memSpec = dynamic_cast(config.memSpec); if (memSpec == nullptr) SC_REPORT_FATAL("ConfigurationLoader", "Wrong MemSpec chosen"); - json j = *jsonSpec; // MemArchitecture std::string arch = "memarchitecturespec"; - memSpec->numberOfRanks = uIntParameter(j[arch]["nbrOfRanks"], "nbrOfRanks"); - memSpec->banksPerRank = uIntParameter(j[arch]["nbrOfBanks"], "nbrOfBanks"); + memSpec->numberOfRanks = parseUint(memspec[arch]["nbrOfRanks"], "nbrOfRanks"); + memSpec->banksPerRank = parseUint(memspec[arch]["nbrOfBanks"], "nbrOfBanks"); memSpec->groupsPerRank = 1; memSpec->banksPerGroup = memSpec->banksPerRank / memSpec->groupsPerRank; memSpec->numberOfBanks = memSpec->banksPerRank * memSpec->numberOfRanks; @@ -381,67 +364,66 @@ void ConfigurationLoader::loadWideIO(Configuration &config, json::object_t *jso // MemTimings specific for WideIO std::string timings = "memtimingspec"; - memSpec->tCKE = memSpec->tCK * uIntParameter(j[timings]["CKE"], "CKE"); - memSpec->tCKESR = memSpec->tCK * uIntParameter(j[timings]["CKESR"], "CKESR"); - memSpec->tDQSCK = memSpec->tCK * uIntParameter(j[timings]["DQSCK"], "DQSCK"); - memSpec->tAC = memSpec->tCK * uIntParameter(j[timings]["AC"], "AC"); - memSpec->tRAS = memSpec->tCK * uIntParameter(j[timings]["RAS"], "RAS"); - memSpec->tRC = memSpec->tCK * uIntParameter(j[timings]["RC"], "RC"); - memSpec->tRCD = memSpec->tCK * uIntParameter(j[timings]["RCD"], "RCD"); - memSpec->tRL = memSpec->tCK * uIntParameter(j[timings]["RL"], "RL"); - memSpec->tWL = memSpec->tCK * uIntParameter(j[timings]["WL"], "WL"); - memSpec->tWR = memSpec->tCK * uIntParameter(j[timings]["WR"], "WR"); - memSpec->tXP = memSpec->tCK * uIntParameter(j[timings]["XP"], "XP"); - memSpec->tXSR = memSpec->tCK * uIntParameter(j[timings]["XSR"], "XSR"); - memSpec->tCCD_R = memSpec->tCK * uIntParameter(j[timings]["CCD_R"], "CCD_R"); - memSpec->tCCD_W = memSpec->tCK * uIntParameter(j[timings]["CCD_W"], "CCD_W"); - memSpec->tREFI = memSpec->tCK * uIntParameter(j[timings]["REFI"], "REFI"); - memSpec->tRFC = memSpec->tCK * uIntParameter(j[timings]["RFC"], "RFC"); - memSpec->tRP = memSpec->tCK * uIntParameter(j[timings]["RP"], "RP"); - memSpec->tRRD = memSpec->tCK * uIntParameter(j[timings]["RRD"], "RRD"); - memSpec->tTAW = memSpec->tCK * uIntParameter(j[timings]["TAW"], "TAW"); - memSpec->tWTR = memSpec->tCK * uIntParameter(j[timings]["WTR"], "WTR"); - memSpec->tRTRS = memSpec->tCK * uIntParameter(j[timings]["RTRS"], "RTRS"); + memSpec->tCKE = memSpec->tCK * parseUint(memspec[timings]["CKE"], "CKE"); + memSpec->tCKESR = memSpec->tCK * parseUint(memspec[timings]["CKESR"], "CKESR"); + memSpec->tDQSCK = memSpec->tCK * parseUint(memspec[timings]["DQSCK"], "DQSCK"); + memSpec->tAC = memSpec->tCK * parseUint(memspec[timings]["AC"], "AC"); + memSpec->tRAS = memSpec->tCK * parseUint(memspec[timings]["RAS"], "RAS"); + memSpec->tRC = memSpec->tCK * parseUint(memspec[timings]["RC"], "RC"); + memSpec->tRCD = memSpec->tCK * parseUint(memspec[timings]["RCD"], "RCD"); + memSpec->tRL = memSpec->tCK * parseUint(memspec[timings]["RL"], "RL"); + memSpec->tWL = memSpec->tCK * parseUint(memspec[timings]["WL"], "WL"); + memSpec->tWR = memSpec->tCK * parseUint(memspec[timings]["WR"], "WR"); + memSpec->tXP = memSpec->tCK * parseUint(memspec[timings]["XP"], "XP"); + memSpec->tXSR = memSpec->tCK * parseUint(memspec[timings]["XSR"], "XSR"); + memSpec->tCCD_R = memSpec->tCK * parseUint(memspec[timings]["CCD_R"], "CCD_R"); + memSpec->tCCD_W = memSpec->tCK * parseUint(memspec[timings]["CCD_W"], "CCD_W"); + memSpec->tREFI = memSpec->tCK * parseUint(memspec[timings]["REFI"], "REFI"); + memSpec->tRFC = memSpec->tCK * parseUint(memspec[timings]["RFC"], "RFC"); + memSpec->tRP = memSpec->tCK * parseUint(memspec[timings]["RP"], "RP"); + memSpec->tRRD = memSpec->tCK * parseUint(memspec[timings]["RRD"], "RRD"); + memSpec->tTAW = memSpec->tCK * parseUint(memspec[timings]["TAW"], "TAW"); + memSpec->tWTR = memSpec->tCK * parseUint(memspec[timings]["WTR"], "WTR"); + memSpec->tRTRS = memSpec->tCK * parseUint(memspec[timings]["RTRS"], "RTRS"); // Currents and voltages std::string power = "mempowerspec"; - memSpec->iDD0 = doubleParameter(j[power]["idd0"], "idd0"); - memSpec->iDD2N = doubleParameter(j[power]["idd2n"], "idd2n"); - memSpec->iDD3N = doubleParameter(j[power]["idd3n"], "idd3n"); - memSpec->iDD4R = doubleParameter(j[power]["idd4r"], "idd4r"); - memSpec->iDD4W = doubleParameter(j[power]["idd4w"], "idd4w"); - memSpec->iDD5 = doubleParameter(j[power]["idd5"], "idd5"); - memSpec->iDD6 = doubleParameter(j[power]["idd6"], "idd6"); - memSpec->vDD = doubleParameter(j[power]["vdd"], "vdd"); - memSpec->iDD02 = doubleParameter(j[power]["idd02"], "idd02"); - memSpec->iDD2P0 = doubleParameter(j[power]["idd2p0"], "idd2p0"); - memSpec->iDD2P02 = doubleParameter(j[power]["idd2p02"], "idd2p02"); - memSpec->iDD2P1 = doubleParameter(j[power]["idd2p1"], "idd2p1"); - memSpec->iDD2P12 = doubleParameter(j[power]["idd2p12"], "idd2p12"); - memSpec->iDD2N2 = doubleParameter(j[power]["idd2n2"], "idd2n2"); - memSpec->iDD3P0 = doubleParameter(j[power]["idd3p0"], "idd3p0"); - memSpec->iDD3P02 = doubleParameter(j[power]["idd3p02"], "idd3p02"); - memSpec->iDD3P1 = doubleParameter(j[power]["idd3p1"], "idd3p1"); - memSpec->iDD3P12 = doubleParameter(j[power]["idd3p12"], "idd3p12"); - memSpec->iDD3N2 = doubleParameter(j[power]["idd3n2"], "idd3n2"); - memSpec->iDD4R2 = doubleParameter(j[power]["idd4r2"], "idd4r2"); - memSpec->iDD4W2 = doubleParameter(j[power]["idd4w2"], "idd4w2"); - memSpec->iDD52 = doubleParameter(j[power]["idd52"], "idd52"); - memSpec->iDD62 = doubleParameter(j[power]["idd62"], "idd62"); - memSpec->vDD2 = doubleParameter(j[power]["vdd2"], "vdd2"); + memSpec->iDD0 = parseUdouble(memspec[power]["idd0"], "idd0"); + memSpec->iDD2N = parseUdouble(memspec[power]["idd2n"], "idd2n"); + memSpec->iDD3N = parseUdouble(memspec[power]["idd3n"], "idd3n"); + memSpec->iDD4R = parseUdouble(memspec[power]["idd4r"], "idd4r"); + memSpec->iDD4W = parseUdouble(memspec[power]["idd4w"], "idd4w"); + memSpec->iDD5 = parseUdouble(memspec[power]["idd5"], "idd5"); + memSpec->iDD6 = parseUdouble(memspec[power]["idd6"], "idd6"); + memSpec->vDD = parseUdouble(memspec[power]["vdd"], "vdd"); + memSpec->iDD02 = parseUdouble(memspec[power]["idd02"], "idd02"); + memSpec->iDD2P0 = parseUdouble(memspec[power]["idd2p0"], "idd2p0"); + memSpec->iDD2P02 = parseUdouble(memspec[power]["idd2p02"], "idd2p02"); + memSpec->iDD2P1 = parseUdouble(memspec[power]["idd2p1"], "idd2p1"); + memSpec->iDD2P12 = parseUdouble(memspec[power]["idd2p12"], "idd2p12"); + memSpec->iDD2N2 = parseUdouble(memspec[power]["idd2n2"], "idd2n2"); + memSpec->iDD3P0 = parseUdouble(memspec[power]["idd3p0"], "idd3p0"); + memSpec->iDD3P02 = parseUdouble(memspec[power]["idd3p02"], "idd3p02"); + memSpec->iDD3P1 = parseUdouble(memspec[power]["idd3p1"], "idd3p1"); + memSpec->iDD3P12 = parseUdouble(memspec[power]["idd3p12"], "idd3p12"); + memSpec->iDD3N2 = parseUdouble(memspec[power]["idd3n2"], "idd3n2"); + memSpec->iDD4R2 = parseUdouble(memspec[power]["idd4r2"], "idd4r2"); + memSpec->iDD4W2 = parseUdouble(memspec[power]["idd4w2"], "idd4w2"); + memSpec->iDD52 = parseUdouble(memspec[power]["idd52"], "idd52"); + memSpec->iDD62 = parseUdouble(memspec[power]["idd62"], "idd62"); + memSpec->vDD2 = parseUdouble(memspec[power]["vdd2"], "vdd2"); } -void ConfigurationLoader::loadWideIO2(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadWideIO2(Configuration &config, json &memspec) { MemSpecWideIO2 *memSpec = dynamic_cast(config.memSpec); if (memSpec == nullptr) SC_REPORT_FATAL("ConfigurationLoader", "Wrong MemSpec chosen"); - json j = *jsonSpec; // MemArchitecture std::string arch = "memarchitecturespec"; - memSpec->numberOfRanks = uIntParameter(j[arch]["nbrOfRanks"], "nbrOfRanks"); - memSpec->banksPerRank = uIntParameter(j[arch]["nbrOfBanks"], "nbrOfBanks"); + memSpec->numberOfRanks = parseUint(memspec[arch]["nbrOfRanks"], "nbrOfRanks"); + memSpec->banksPerRank = parseUint(memspec[arch]["nbrOfBanks"], "nbrOfBanks"); memSpec->groupsPerRank = 1; memSpec->banksPerGroup = memSpec->banksPerRank / memSpec->groupsPerRank; memSpec->numberOfBanks = memSpec->banksPerRank * memSpec->numberOfRanks; @@ -449,274 +431,270 @@ void ConfigurationLoader::loadWideIO2(Configuration &config, json::object_t *js // MemTimings specific for WideIO std::string timings = "memtimingspec"; - memSpec->tDQSCK = memSpec->tCK * uIntParameter(j[timings]["DQSCK"], "DQSCK"); - memSpec->tDQSS = memSpec->tCK * uIntParameter(j[timings]["DQSS"], "DQSS"); - memSpec->tCKE = memSpec->tCK * uIntParameter(j[timings]["CKE"], "CKE"); - memSpec->tRL = memSpec->tCK * uIntParameter(j[timings]["RL"], "RL"); - memSpec->tWL = memSpec->tCK * uIntParameter(j[timings]["WL"], "WL"); - memSpec->tRCpb = memSpec->tCK * uIntParameter(j[timings]["RCPB"], "RCPB"); - memSpec->tRCab = memSpec->tCK * uIntParameter(j[timings]["RCAB"], "RCAB"); - memSpec->tCKESR = memSpec->tCK * uIntParameter(j[timings]["CKESR"], "CKESR"); - memSpec->tXSR = memSpec->tCK * uIntParameter(j[timings]["XSR"], "XSR"); - memSpec->tXP = memSpec->tCK * uIntParameter(j[timings]["XP"], "XP"); - memSpec->tCCD = memSpec->tCK * uIntParameter(j[timings]["CCD"], "CCD"); - memSpec->tRTP = memSpec->tCK * uIntParameter(j[timings]["RTP"], "RTP"); - memSpec->tRCD = memSpec->tCK * uIntParameter(j[timings]["RCD"], "RCD"); - memSpec->tRPpb = memSpec->tCK * uIntParameter(j[timings]["RPPB"], "RPPB"); - memSpec->tRPab = memSpec->tCK * uIntParameter(j[timings]["RPAB"], "RPAB"); - memSpec->tRAS = memSpec->tCK * uIntParameter(j[timings]["RAS"], "RAS"); - memSpec->tWR = memSpec->tCK * uIntParameter(j[timings]["WR"], "WR"); - memSpec->tWTR = memSpec->tCK * uIntParameter(j[timings]["WTR"], "WTR"); - memSpec->tRRD = memSpec->tCK * uIntParameter(j[timings]["RRD"], "RRD"); - memSpec->tFAW = memSpec->tCK * uIntParameter(j[timings]["FAW"], "FAW"); - memSpec->tREFI = memSpec->tCK * uIntParameter(j[timings]["REFI"], "REFI"); - memSpec->tREFIpb = memSpec->tCK * uIntParameter(j[timings]["REFIPB"], "REFIPB"); - memSpec->tRFCab = memSpec->tCK * uIntParameter(j[timings]["RFCAB"], "RFCAB"); - memSpec->tRFCpb = memSpec->tCK * uIntParameter(j[timings]["RFCPB"], "RFCPB"); - memSpec->tRTRS = memSpec->tCK * uIntParameter(j[timings]["RTRS"], "RTRS"); + memSpec->tDQSCK = memSpec->tCK * parseUint(memspec[timings]["DQSCK"], "DQSCK"); + memSpec->tDQSS = memSpec->tCK * parseUint(memspec[timings]["DQSS"], "DQSS"); + memSpec->tCKE = memSpec->tCK * parseUint(memspec[timings]["CKE"], "CKE"); + memSpec->tRL = memSpec->tCK * parseUint(memspec[timings]["RL"], "RL"); + memSpec->tWL = memSpec->tCK * parseUint(memspec[timings]["WL"], "WL"); + memSpec->tRCpb = memSpec->tCK * parseUint(memspec[timings]["RCPB"], "RCPB"); + memSpec->tRCab = memSpec->tCK * parseUint(memspec[timings]["RCAB"], "RCAB"); + memSpec->tCKESR = memSpec->tCK * parseUint(memspec[timings]["CKESR"], "CKESR"); + memSpec->tXSR = memSpec->tCK * parseUint(memspec[timings]["XSR"], "XSR"); + memSpec->tXP = memSpec->tCK * parseUint(memspec[timings]["XP"], "XP"); + memSpec->tCCD = memSpec->tCK * parseUint(memspec[timings]["CCD"], "CCD"); + memSpec->tRTP = memSpec->tCK * parseUint(memspec[timings]["RTP"], "RTP"); + memSpec->tRCD = memSpec->tCK * parseUint(memspec[timings]["RCD"], "RCD"); + memSpec->tRPpb = memSpec->tCK * parseUint(memspec[timings]["RPPB"], "RPPB"); + memSpec->tRPab = memSpec->tCK * parseUint(memspec[timings]["RPAB"], "RPAB"); + memSpec->tRAS = memSpec->tCK * parseUint(memspec[timings]["RAS"], "RAS"); + memSpec->tWR = memSpec->tCK * parseUint(memspec[timings]["WR"], "WR"); + memSpec->tWTR = memSpec->tCK * parseUint(memspec[timings]["WTR"], "WTR"); + memSpec->tRRD = memSpec->tCK * parseUint(memspec[timings]["RRD"], "RRD"); + memSpec->tFAW = memSpec->tCK * parseUint(memspec[timings]["FAW"], "FAW"); + memSpec->tREFI = memSpec->tCK * parseUint(memspec[timings]["REFI"], "REFI"); + memSpec->tREFIpb = memSpec->tCK * parseUint(memspec[timings]["REFIPB"], "REFIPB"); + memSpec->tRFCab = memSpec->tCK * parseUint(memspec[timings]["RFCAB"], "RFCAB"); + memSpec->tRFCpb = memSpec->tCK * parseUint(memspec[timings]["RFCPB"], "RFCPB"); + memSpec->tRTRS = memSpec->tCK * parseUint(memspec[timings]["RTRS"], "RTRS"); // Currents and voltages // TODO: to be completed } -void ConfigurationLoader::loadHBM2(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadHBM2(Configuration &config, json &memspec) { MemSpecHBM2 *memSpec = dynamic_cast(config.memSpec); if (memSpec == nullptr) SC_REPORT_FATAL("ConfigurationLoader", "Wrong MemSpec chosen"); - json j = *jsonSpec; // MemArchitecture std::string arch = "memarchitecturespec"; - memSpec->numberOfRanks = uIntParameter(j[arch]["nbrOfRanks"], "nbrOfRanks"); - memSpec->banksPerRank = uIntParameter(j[arch]["nbrOfBanks"], "nbrOfBanks"); - memSpec->groupsPerRank = uIntParameter(j[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); + memSpec->numberOfRanks = parseUint(memspec[arch]["nbrOfRanks"], "nbrOfRanks"); + memSpec->banksPerRank = parseUint(memspec[arch]["nbrOfBanks"], "nbrOfBanks"); + memSpec->groupsPerRank = parseUint(memspec[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); memSpec->banksPerGroup = memSpec->banksPerRank / memSpec->groupsPerRank; memSpec->numberOfBanks = memSpec->banksPerRank * memSpec->numberOfRanks; memSpec->numberOfBankGroups = memSpec->groupsPerRank * memSpec->numberOfRanks; // MemTimings specific for HBM2 std::string timings = "memtimingspec"; - memSpec->tDQSCK = memSpec->tCK * uIntParameter(j[timings]["DQSCK"], "DQSCK"); - memSpec->tRC = memSpec->tCK * uIntParameter(j[timings]["RC"], "RC"); - memSpec->tRAS = memSpec->tCK * uIntParameter(j[timings]["RAS"], "RAS"); - memSpec->tRCDRD = memSpec->tCK * uIntParameter(j[timings]["RCDRD"], "RCDRD"); - memSpec->tRCDWR = memSpec->tCK * uIntParameter(j[timings]["RCDWR"], "RCDWR"); - memSpec->tRRDL = memSpec->tCK * uIntParameter(j[timings]["RRDL"], "RRDL"); - memSpec->tRRDS = memSpec->tCK * uIntParameter(j[timings]["RRDS"], "RRDS"); - memSpec->tFAW = memSpec->tCK * uIntParameter(j[timings]["FAW"], "FAW"); - memSpec->tRTP = memSpec->tCK * uIntParameter(j[timings]["RTP"], "RTP"); - memSpec->tRP = memSpec->tCK * uIntParameter(j[timings]["RP"], "RP"); - memSpec->tRL = memSpec->tCK * uIntParameter(j[timings]["RL"], "RL"); - memSpec->tWL = memSpec->tCK * uIntParameter(j[timings]["WL"], "WL"); - memSpec->tPL = memSpec->tCK * uIntParameter(j[timings]["PL"], "PL"); - memSpec->tWR = memSpec->tCK * uIntParameter(j[timings]["WR"], "WR"); - memSpec->tCCDL = memSpec->tCK * uIntParameter(j[timings]["CCDL"], "CCDL"); - memSpec->tCCDS = memSpec->tCK * uIntParameter(j[timings]["CCDS"], "CCDS"); - memSpec->tWTRL = memSpec->tCK * uIntParameter(j[timings]["WTRL"], "WTRL"); - memSpec->tWTRS = memSpec->tCK * uIntParameter(j[timings]["WTRS"], "WTRS"); - memSpec->tRTW = memSpec->tCK * uIntParameter(j[timings]["RTW"], "RTW"); - memSpec->tXP = memSpec->tCK * uIntParameter(j[timings]["XP"], "XP"); - memSpec->tCKE = memSpec->tCK * uIntParameter(j[timings]["CKE"], "CKE"); + memSpec->tDQSCK = memSpec->tCK * parseUint(memspec[timings]["DQSCK"], "DQSCK"); + memSpec->tRC = memSpec->tCK * parseUint(memspec[timings]["RC"], "RC"); + memSpec->tRAS = memSpec->tCK * parseUint(memspec[timings]["RAS"], "RAS"); + memSpec->tRCDRD = memSpec->tCK * parseUint(memspec[timings]["RCDRD"], "RCDRD"); + memSpec->tRCDWR = memSpec->tCK * parseUint(memspec[timings]["RCDWR"], "RCDWR"); + memSpec->tRRDL = memSpec->tCK * parseUint(memspec[timings]["RRDL"], "RRDL"); + memSpec->tRRDS = memSpec->tCK * parseUint(memspec[timings]["RRDS"], "RRDS"); + memSpec->tFAW = memSpec->tCK * parseUint(memspec[timings]["FAW"], "FAW"); + memSpec->tRTP = memSpec->tCK * parseUint(memspec[timings]["RTP"], "RTP"); + memSpec->tRP = memSpec->tCK * parseUint(memspec[timings]["RP"], "RP"); + memSpec->tRL = memSpec->tCK * parseUint(memspec[timings]["RL"], "RL"); + memSpec->tWL = memSpec->tCK * parseUint(memspec[timings]["WL"], "WL"); + memSpec->tPL = memSpec->tCK * parseUint(memspec[timings]["PL"], "PL"); + memSpec->tWR = memSpec->tCK * parseUint(memspec[timings]["WR"], "WR"); + memSpec->tCCDL = memSpec->tCK * parseUint(memspec[timings]["CCDL"], "CCDL"); + memSpec->tCCDS = memSpec->tCK * parseUint(memspec[timings]["CCDS"], "CCDS"); + memSpec->tWTRL = memSpec->tCK * parseUint(memspec[timings]["WTRL"], "WTRL"); + memSpec->tWTRS = memSpec->tCK * parseUint(memspec[timings]["WTRS"], "WTRS"); + memSpec->tRTW = memSpec->tCK * parseUint(memspec[timings]["RTW"], "RTW"); + memSpec->tXP = memSpec->tCK * parseUint(memspec[timings]["XP"], "XP"); + memSpec->tCKE = memSpec->tCK * parseUint(memspec[timings]["CKE"], "CKE"); memSpec->tPD = memSpec->tCKE; memSpec->tCKESR = memSpec->tCKE + memSpec->tCK; - memSpec->tXS = memSpec->tCK * uIntParameter(j[timings]["XS"], "XS"); - memSpec->tRFC = memSpec->tCK * uIntParameter(j[timings]["RFC"], "RFC"); - memSpec->tRFCSB = memSpec->tCK * uIntParameter(j[timings]["RFCSB"], "RFCSB"); - memSpec->tRREFD = memSpec->tCK * uIntParameter(j[timings]["RREFD"], "RREFD"); - memSpec->tREFI = memSpec->tCK * uIntParameter(j[timings]["REFI"], "REFI"); - memSpec->tREFISB = memSpec->tCK * uIntParameter(j[timings]["REFISB"], "REFISB"); + memSpec->tXS = memSpec->tCK * parseUint(memspec[timings]["XS"], "XS"); + memSpec->tRFC = memSpec->tCK * parseUint(memspec[timings]["RFC"], "RFC"); + memSpec->tRFCSB = memSpec->tCK * parseUint(memspec[timings]["RFCSB"], "RFCSB"); + memSpec->tRREFD = memSpec->tCK * parseUint(memspec[timings]["RREFD"], "RREFD"); + memSpec->tREFI = memSpec->tCK * parseUint(memspec[timings]["REFI"], "REFI"); + memSpec->tREFISB = memSpec->tCK * parseUint(memspec[timings]["REFISB"], "REFISB"); // Currents and voltages // TODO: to be completed } -void ConfigurationLoader::loadGDDR5(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadGDDR5(Configuration &config, json &memspec) { MemSpecGDDR5 *memSpec = dynamic_cast(config.memSpec); if (memSpec == nullptr) SC_REPORT_FATAL("ConfigurationLoader", "Wrong MemSpec chosen"); - json j = *jsonSpec; // MemArchitecture std::string arch = "memarchitecturespec"; - memSpec->numberOfRanks = uIntParameter(j[arch]["nbrOfRanks"], "nbrOfRanks"); - memSpec->banksPerRank = uIntParameter(j[arch]["nbrOfBanks"], "nbrOfBanks"); - memSpec->groupsPerRank = uIntParameter(j[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); + memSpec->numberOfRanks = parseUint(memspec[arch]["nbrOfRanks"], "nbrOfRanks"); + memSpec->banksPerRank = parseUint(memspec[arch]["nbrOfBanks"], "nbrOfBanks"); + memSpec->groupsPerRank = parseUint(memspec[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); memSpec->banksPerGroup = memSpec->banksPerRank / memSpec->groupsPerRank; memSpec->numberOfBanks = memSpec->banksPerRank * memSpec->numberOfRanks; memSpec->numberOfBankGroups = memSpec->groupsPerRank * memSpec->numberOfRanks; // MemTimings specific for GDDR5 std::string timings = "memtimingspec"; - memSpec->tRP = memSpec->tCK * uIntParameter(j[timings]["RP"], "RP"); - memSpec->tRAS = memSpec->tCK * uIntParameter(j[timings]["RAS"], "RAS"); - memSpec->tRC = memSpec->tCK * uIntParameter(j[timings]["RC"], "RC"); - memSpec->tRCDRD = memSpec->tCK * uIntParameter(j[timings]["RCDRD"], "RCDRD"); - memSpec->tRCDWR = memSpec->tCK * uIntParameter(j[timings]["RCDWR"], "RCDWR"); - memSpec->tRTP = memSpec->tCK * uIntParameter(j[timings]["RTP"], "RTP"); - memSpec->tRRDS = memSpec->tCK * uIntParameter(j[timings]["RRDS"], "RRDS"); - memSpec->tRRDL = memSpec->tCK * uIntParameter(j[timings]["RRDL"], "RRDL"); - memSpec->tCCDS = memSpec->tCK * uIntParameter(j[timings]["CCDS"], "CCDS"); - memSpec->tCCDL = memSpec->tCK * uIntParameter(j[timings]["CCDL"], "CCDL"); - memSpec->tCL = memSpec->tCK * uIntParameter(j[timings]["CL"], "CL"); - memSpec->tWCK2CKPIN = memSpec->tCK * uIntParameter(j[timings]["WCK2CKPIN"], "WCK2CKPIN"); - memSpec->tWCK2CK = memSpec->tCK * uIntParameter(j[timings]["WCK2CK"], "WCK2CK"); - memSpec->tWCK2DQO = memSpec->tCK * uIntParameter(j[timings]["WCK2DQO"], "WCK2DQO"); - memSpec->tRTW = memSpec->tCK * uIntParameter(j[timings]["RTW"], "RTW"); - memSpec->tWL = memSpec->tCK * uIntParameter(j[timings]["WL"], "WL"); - memSpec->tWCK2DQI = memSpec->tCK * uIntParameter(j[timings]["WCK2DQI"], "WCK2DQI"); - memSpec->tWR = memSpec->tCK * uIntParameter(j[timings]["WR"], "WR"); - memSpec->tWTRS = memSpec->tCK * uIntParameter(j[timings]["WTRS"], "WTRS"); - memSpec->tWTRL = memSpec->tCK * uIntParameter(j[timings]["WTRL"], "WTRL"); - memSpec->tCKE = memSpec->tCK * uIntParameter(j[timings]["CKE"], "CKE"); - memSpec->tPD = memSpec->tCK * uIntParameter(j[timings]["PD"], "PD"); - memSpec->tXPN = memSpec->tCK * uIntParameter(j[timings]["XPN"], "XPN"); - memSpec->tREFI = memSpec->tCK * uIntParameter(j[timings]["REFI"], "REFI"); - memSpec->tREFIPB = memSpec->tCK * uIntParameter(j[timings]["REFIPB"], "REFIPB"); - memSpec->tRFC = memSpec->tCK * uIntParameter(j[timings]["RFC"], "RFC"); - memSpec->tRFCPB = memSpec->tCK * uIntParameter(j[timings]["RFCPB"], "RFCPB"); - memSpec->tRREFD = memSpec->tCK * uIntParameter(j[timings]["RREFD"], "RREFD"); - memSpec->tXS = memSpec->tCK * uIntParameter(j[timings]["XS"], "XS"); - memSpec->tFAW = memSpec->tCK * uIntParameter(j[timings]["FAW"], "FAW"); - memSpec->t32AW = memSpec->tCK * uIntParameter(j[timings]["32AW"], "32AW"); + memSpec->tRP = memSpec->tCK * parseUint(memspec[timings]["RP"], "RP"); + memSpec->tRAS = memSpec->tCK * parseUint(memspec[timings]["RAS"], "RAS"); + memSpec->tRC = memSpec->tCK * parseUint(memspec[timings]["RC"], "RC"); + memSpec->tRCDRD = memSpec->tCK * parseUint(memspec[timings]["RCDRD"], "RCDRD"); + memSpec->tRCDWR = memSpec->tCK * parseUint(memspec[timings]["RCDWR"], "RCDWR"); + memSpec->tRTP = memSpec->tCK * parseUint(memspec[timings]["RTP"], "RTP"); + memSpec->tRRDS = memSpec->tCK * parseUint(memspec[timings]["RRDS"], "RRDS"); + memSpec->tRRDL = memSpec->tCK * parseUint(memspec[timings]["RRDL"], "RRDL"); + memSpec->tCCDS = memSpec->tCK * parseUint(memspec[timings]["CCDS"], "CCDS"); + memSpec->tCCDL = memSpec->tCK * parseUint(memspec[timings]["CCDL"], "CCDL"); + memSpec->tCL = memSpec->tCK * parseUint(memspec[timings]["CL"], "CL"); + memSpec->tWCK2CKPIN = memSpec->tCK * parseUint(memspec[timings]["WCK2CKPIN"], "WCK2CKPIN"); + memSpec->tWCK2CK = memSpec->tCK * parseUint(memspec[timings]["WCK2CK"], "WCK2CK"); + memSpec->tWCK2DQO = memSpec->tCK * parseUint(memspec[timings]["WCK2DQO"], "WCK2DQO"); + memSpec->tRTW = memSpec->tCK * parseUint(memspec[timings]["RTW"], "RTW"); + memSpec->tWL = memSpec->tCK * parseUint(memspec[timings]["WL"], "WL"); + memSpec->tWCK2DQI = memSpec->tCK * parseUint(memspec[timings]["WCK2DQI"], "WCK2DQI"); + memSpec->tWR = memSpec->tCK * parseUint(memspec[timings]["WR"], "WR"); + memSpec->tWTRS = memSpec->tCK * parseUint(memspec[timings]["WTRS"], "WTRS"); + memSpec->tWTRL = memSpec->tCK * parseUint(memspec[timings]["WTRL"], "WTRL"); + memSpec->tCKE = memSpec->tCK * parseUint(memspec[timings]["CKE"], "CKE"); + memSpec->tPD = memSpec->tCK * parseUint(memspec[timings]["PD"], "PD"); + memSpec->tXPN = memSpec->tCK * parseUint(memspec[timings]["XPN"], "XPN"); + memSpec->tREFI = memSpec->tCK * parseUint(memspec[timings]["REFI"], "REFI"); + memSpec->tREFIPB = memSpec->tCK * parseUint(memspec[timings]["REFIPB"], "REFIPB"); + memSpec->tRFC = memSpec->tCK * parseUint(memspec[timings]["RFC"], "RFC"); + memSpec->tRFCPB = memSpec->tCK * parseUint(memspec[timings]["RFCPB"], "RFCPB"); + memSpec->tRREFD = memSpec->tCK * parseUint(memspec[timings]["RREFD"], "RREFD"); + memSpec->tXS = memSpec->tCK * parseUint(memspec[timings]["XS"], "XS"); + memSpec->tFAW = memSpec->tCK * parseUint(memspec[timings]["FAW"], "FAW"); + memSpec->t32AW = memSpec->tCK * parseUint(memspec[timings]["32AW"], "32AW"); // memSpec->tRDSRE = memSpec->tCL + memSpec->tWCK2CKPIN + memSpec->tWCK2CK // + memSpec->tWCK2DQO + memSpec->burstLength / memSpec->dataRate * memSpec->tCK; // memSpec->tWRSRE = memSpec->tWL + memSpec->tWCK2CKPIN + memSpec->tWCK2CK // + memSpec->tWCK2DQI + memSpec->burstLength / memSpec->dataRate * memSpec->tCK; - memSpec->tPPD = memSpec->tCK * uIntParameter(j[timings]["PPD"], "PPD"); - memSpec->tLK = memSpec->tCK * uIntParameter(j[timings]["LK"], "LK"); - memSpec->tRTRS = memSpec->tCK * uIntParameter(j[timings]["RTRS"], "RTRS"); + memSpec->tPPD = memSpec->tCK * parseUint(memspec[timings]["PPD"], "PPD"); + memSpec->tLK = memSpec->tCK * parseUint(memspec[timings]["LK"], "LK"); + memSpec->tRTRS = memSpec->tCK * parseUint(memspec[timings]["RTRS"], "RTRS"); // Currents and voltages // TODO: to be completed } -void ConfigurationLoader::loadGDDR5X(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadGDDR5X(Configuration &config, json &memspec) { MemSpecGDDR5X *memSpec = dynamic_cast(config.memSpec); if (memSpec == nullptr) SC_REPORT_FATAL("ConfigurationLoader", "Wrong MemSpec chosen"); - json j = *jsonSpec; // MemArchitecture std::string arch = "memarchitecturespec"; - memSpec->numberOfRanks = uIntParameter(j[arch]["nbrOfRanks"], "nbrOfRanks"); - memSpec->banksPerRank = uIntParameter(j[arch]["nbrOfBanks"], "nbrOfBanks"); - memSpec->groupsPerRank = uIntParameter(j[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); + memSpec->numberOfRanks = parseUint(memspec[arch]["nbrOfRanks"], "nbrOfRanks"); + memSpec->banksPerRank = parseUint(memspec[arch]["nbrOfBanks"], "nbrOfBanks"); + memSpec->groupsPerRank = parseUint(memspec[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); memSpec->banksPerGroup = memSpec->banksPerRank / memSpec->groupsPerRank; memSpec->numberOfBanks = memSpec->banksPerRank * memSpec->numberOfRanks; memSpec->numberOfBankGroups = memSpec->groupsPerRank * memSpec->numberOfRanks; // MemTimings specific for GDDR5X std::string timings = "memtimingspec"; - memSpec->tRP = memSpec->tCK * uIntParameter(j[timings]["RP"], "RP"); - memSpec->tRAS = memSpec->tCK * uIntParameter(j[timings]["RAS"], "RAS"); - memSpec->tRC = memSpec->tCK * uIntParameter(j[timings]["RC"], "RC"); - memSpec->tRCDRD = memSpec->tCK * uIntParameter(j[timings]["RCDRD"], "RCDRD"); - memSpec->tRCDWR = memSpec->tCK * uIntParameter(j[timings]["RCDWR"], "RCDWR"); - memSpec->tRTP = memSpec->tCK * uIntParameter(j[timings]["RTP"], "RTP"); - memSpec->tRRDS = memSpec->tCK * uIntParameter(j[timings]["RRDS"], "RRDS"); - memSpec->tRRDL = memSpec->tCK * uIntParameter(j[timings]["RRDL"], "RRDL"); - memSpec->tCCDS = memSpec->tCK * uIntParameter(j[timings]["CCDS"], "CCDS"); - memSpec->tCCDL = memSpec->tCK * uIntParameter(j[timings]["CCDL"], "CCDL"); - memSpec->tRL = memSpec->tCK * uIntParameter(j[timings]["RL"], "RL"); - memSpec->tWCK2CKPIN = memSpec->tCK * uIntParameter(j[timings]["WCK2CKPIN"], "WCK2CKPIN"); - memSpec->tWCK2CK = memSpec->tCK * uIntParameter(j[timings]["WCK2CK"], "WCK2CK"); - memSpec->tWCK2DQO = memSpec->tCK * uIntParameter(j[timings]["WCK2DQO"], "WCK2DQO"); - memSpec->tRTW = memSpec->tCK * uIntParameter(j[timings]["RTW"], "RTW"); - memSpec->tWL = memSpec->tCK * uIntParameter(j[timings]["WL"], "WL"); - memSpec->tWCK2DQI = memSpec->tCK * uIntParameter(j[timings]["WCK2DQI"], "WCK2DQI"); - memSpec->tWR = memSpec->tCK * uIntParameter(j[timings]["WR"], "WR"); - memSpec->tWTRS = memSpec->tCK * uIntParameter(j[timings]["WTRS"], "WTRS"); - memSpec->tWTRL = memSpec->tCK * uIntParameter(j[timings]["WTRL"], "WTRL"); - memSpec->tCKE = memSpec->tCK * uIntParameter(j[timings]["CKE"], "CKE"); - memSpec->tPD = memSpec->tCK * uIntParameter(j[timings]["PD"], "PD"); - memSpec->tXP = memSpec->tCK * uIntParameter(j[timings]["XP"], "XP"); - memSpec->tREFI = memSpec->tCK * uIntParameter(j[timings]["REFI"], "REFI"); - memSpec->tREFIPB = memSpec->tCK * uIntParameter(j[timings]["REFIPB"], "REFIPB"); - memSpec->tRFC = memSpec->tCK * uIntParameter(j[timings]["RFC"], "RFC"); - memSpec->tRFCPB = memSpec->tCK * uIntParameter(j[timings]["RFCPB"], "RFCPB"); - memSpec->tRREFD = memSpec->tCK * uIntParameter(j[timings]["RREFD"], "RREFD"); - memSpec->tXS = memSpec->tCK * uIntParameter(j[timings]["XS"], "XS"); - memSpec->tFAW = memSpec->tCK * uIntParameter(j[timings]["FAW"], "FAW"); - memSpec->t32AW = memSpec->tCK * uIntParameter(j[timings]["32AW"], "32AW"); + memSpec->tRP = memSpec->tCK * parseUint(memspec[timings]["RP"], "RP"); + memSpec->tRAS = memSpec->tCK * parseUint(memspec[timings]["RAS"], "RAS"); + memSpec->tRC = memSpec->tCK * parseUint(memspec[timings]["RC"], "RC"); + memSpec->tRCDRD = memSpec->tCK * parseUint(memspec[timings]["RCDRD"], "RCDRD"); + memSpec->tRCDWR = memSpec->tCK * parseUint(memspec[timings]["RCDWR"], "RCDWR"); + memSpec->tRTP = memSpec->tCK * parseUint(memspec[timings]["RTP"], "RTP"); + memSpec->tRRDS = memSpec->tCK * parseUint(memspec[timings]["RRDS"], "RRDS"); + memSpec->tRRDL = memSpec->tCK * parseUint(memspec[timings]["RRDL"], "RRDL"); + memSpec->tCCDS = memSpec->tCK * parseUint(memspec[timings]["CCDS"], "CCDS"); + memSpec->tCCDL = memSpec->tCK * parseUint(memspec[timings]["CCDL"], "CCDL"); + memSpec->tRL = memSpec->tCK * parseUint(memspec[timings]["RL"], "RL"); + memSpec->tWCK2CKPIN = memSpec->tCK * parseUint(memspec[timings]["WCK2CKPIN"], "WCK2CKPIN"); + memSpec->tWCK2CK = memSpec->tCK * parseUint(memspec[timings]["WCK2CK"], "WCK2CK"); + memSpec->tWCK2DQO = memSpec->tCK * parseUint(memspec[timings]["WCK2DQO"], "WCK2DQO"); + memSpec->tRTW = memSpec->tCK * parseUint(memspec[timings]["RTW"], "RTW"); + memSpec->tWL = memSpec->tCK * parseUint(memspec[timings]["WL"], "WL"); + memSpec->tWCK2DQI = memSpec->tCK * parseUint(memspec[timings]["WCK2DQI"], "WCK2DQI"); + memSpec->tWR = memSpec->tCK * parseUint(memspec[timings]["WR"], "WR"); + memSpec->tWTRS = memSpec->tCK * parseUint(memspec[timings]["WTRS"], "WTRS"); + memSpec->tWTRL = memSpec->tCK * parseUint(memspec[timings]["WTRL"], "WTRL"); + memSpec->tCKE = memSpec->tCK * parseUint(memspec[timings]["CKE"], "CKE"); + memSpec->tPD = memSpec->tCK * parseUint(memspec[timings]["PD"], "PD"); + memSpec->tXP = memSpec->tCK * parseUint(memspec[timings]["XP"], "XP"); + memSpec->tREFI = memSpec->tCK * parseUint(memspec[timings]["REFI"], "REFI"); + memSpec->tREFIPB = memSpec->tCK * parseUint(memspec[timings]["REFIPB"], "REFIPB"); + memSpec->tRFC = memSpec->tCK * parseUint(memspec[timings]["RFC"], "RFC"); + memSpec->tRFCPB = memSpec->tCK * parseUint(memspec[timings]["RFCPB"], "RFCPB"); + memSpec->tRREFD = memSpec->tCK * parseUint(memspec[timings]["RREFD"], "RREFD"); + memSpec->tXS = memSpec->tCK * parseUint(memspec[timings]["XS"], "XS"); + memSpec->tFAW = memSpec->tCK * parseUint(memspec[timings]["FAW"], "FAW"); + memSpec->t32AW = memSpec->tCK * parseUint(memspec[timings]["32AW"], "32AW"); // memSpec->tRDSRE = memSpec->tRL + memSpec->tWCK2CKPIN + memSpec->tWCK2CK // + memSpec->tWCK2DQO + memSpec->burstLength / memSpec->dataRate * memSpec->tCK; // memSpec->tWRSRE = memSpec->tWL + memSpec->tWCK2CKPIN + memSpec->tWCK2CK // + memSpec->tWCK2DQI + memSpec->burstLength / memSpec->dataRate * memSpec->tCK; - memSpec->tPPD = memSpec->tCK * uIntParameter(j[timings]["PPD"], "PPD"); - memSpec->tLK = memSpec->tCK * uIntParameter(j[timings]["LK"], "LK"); - memSpec->tRTRS = memSpec->tCK * uIntParameter(j[timings]["RTRS"], "RTRS"); + memSpec->tPPD = memSpec->tCK * parseUint(memspec[timings]["PPD"], "PPD"); + memSpec->tLK = memSpec->tCK * parseUint(memspec[timings]["LK"], "LK"); + memSpec->tRTRS = memSpec->tCK * parseUint(memspec[timings]["RTRS"], "RTRS"); // Currents and voltages // TODO: to be completed } -void ConfigurationLoader::loadGDDR6(Configuration &config, json::object_t *jsonSpec) +void ConfigurationLoader::loadGDDR6(Configuration &config, json &memspec) { MemSpecGDDR6 *memSpec = dynamic_cast(config.memSpec); if (memSpec == nullptr) SC_REPORT_FATAL("ConfigurationLoader", "Wrong MemSpec chosen"); - json j = *jsonSpec; // MemArchitecture std::string arch = "memarchitecturespec"; - memSpec->numberOfRanks = uIntParameter(j[arch]["nbrOfRanks"], "nbrOfRanks"); - memSpec->banksPerRank = uIntParameter(j[arch]["nbrOfBanks"], "nbrOfBanks"); - memSpec->groupsPerRank = uIntParameter(j[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); + memSpec->numberOfRanks = parseUint(memspec[arch]["nbrOfRanks"], "nbrOfRanks"); + memSpec->banksPerRank = parseUint(memspec[arch]["nbrOfBanks"], "nbrOfBanks"); + memSpec->groupsPerRank = parseUint(memspec[arch]["nbrOfBankGroups"], "nbrOfBankGroups"); memSpec->banksPerGroup = memSpec->banksPerRank / memSpec->groupsPerRank; memSpec->numberOfBanks = memSpec->banksPerRank * memSpec->numberOfRanks; memSpec->numberOfBankGroups = memSpec->groupsPerRank * memSpec->numberOfRanks; // MemTimings specific for GDDR6 std::string timings = "memtimingspec"; - memSpec->tRP = memSpec->tCK * uIntParameter(j[timings]["RP"], "RP"); - memSpec->tRAS = memSpec->tCK * uIntParameter(j[timings]["RAS"], "RAS"); - memSpec->tRC = memSpec->tCK * uIntParameter(j[timings]["RC"], "RC"); - memSpec->tRCDRD = memSpec->tCK * uIntParameter(j[timings]["RCDRD"], "RCDRD"); - memSpec->tRCDWR = memSpec->tCK * uIntParameter(j[timings]["RCDWR"], "RCDWR"); - memSpec->tRTP = memSpec->tCK * uIntParameter(j[timings]["RTP"], "RTP"); - memSpec->tRRDS = memSpec->tCK * uIntParameter(j[timings]["RRDS"], "RRDS"); - memSpec->tRRDL = memSpec->tCK * uIntParameter(j[timings]["RRDL"], "RRDL"); - memSpec->tCCDS = memSpec->tCK * uIntParameter(j[timings]["CCDS"], "CCDS"); - memSpec->tCCDL = memSpec->tCK * uIntParameter(j[timings]["CCDL"], "CCDL"); - memSpec->tRL = memSpec->tCK * uIntParameter(j[timings]["RL"], "RL"); - memSpec->tWCK2CKPIN = memSpec->tCK * uIntParameter(j[timings]["WCK2CKPIN"], "WCK2CKPIN"); - memSpec->tWCK2CK = memSpec->tCK * uIntParameter(j[timings]["WCK2CK"], "WCK2CK"); - memSpec->tWCK2DQO = memSpec->tCK * uIntParameter(j[timings]["WCK2DQO"], "WCK2DQO"); - memSpec->tRTW = memSpec->tCK * uIntParameter(j[timings]["RTW"], "RTW"); - memSpec->tWL = memSpec->tCK * uIntParameter(j[timings]["WL"], "WL"); - memSpec->tWCK2DQI = memSpec->tCK * uIntParameter(j[timings]["WCK2DQI"], "WCK2DQI"); - memSpec->tWR = memSpec->tCK * uIntParameter(j[timings]["WR"], "WR"); - memSpec->tWTRS = memSpec->tCK * uIntParameter(j[timings]["WTRS"], "WTRS"); - memSpec->tWTRL = memSpec->tCK * uIntParameter(j[timings]["WTRL"], "WTRL"); - memSpec->tPD = memSpec->tCK * uIntParameter(j[timings]["PD"], "PD"); - memSpec->tCKESR = memSpec->tCK * uIntParameter(j[timings]["CKESR"], "CKESR"); - memSpec->tXP = memSpec->tCK * uIntParameter(j[timings]["XP"], "XP"); - memSpec->tREFI = memSpec->tCK * uIntParameter(j[timings]["REFI"], "REFI"); - memSpec->tREFIPB = memSpec->tCK * uIntParameter(j[timings]["REFIPB"], "REFIPB"); - memSpec->tRFC = memSpec->tCK * uIntParameter(j[timings]["RFC"], "RFC"); - memSpec->tRFCPB = memSpec->tCK * uIntParameter(j[timings]["RFCPB"], "RFCPB"); - memSpec->tRREFD = memSpec->tCK * uIntParameter(j[timings]["RREFD"], "RREFD"); - memSpec->tXS = memSpec->tCK * uIntParameter(j[timings]["XS"], "XS"); - memSpec->tFAW = memSpec->tCK * uIntParameter(j[timings]["FAW"], "FAW"); + memSpec->tRP = memSpec->tCK * parseUint(memspec[timings]["RP"], "RP"); + memSpec->tRAS = memSpec->tCK * parseUint(memspec[timings]["RAS"], "RAS"); + memSpec->tRC = memSpec->tCK * parseUint(memspec[timings]["RC"], "RC"); + memSpec->tRCDRD = memSpec->tCK * parseUint(memspec[timings]["RCDRD"], "RCDRD"); + memSpec->tRCDWR = memSpec->tCK * parseUint(memspec[timings]["RCDWR"], "RCDWR"); + memSpec->tRTP = memSpec->tCK * parseUint(memspec[timings]["RTP"], "RTP"); + memSpec->tRRDS = memSpec->tCK * parseUint(memspec[timings]["RRDS"], "RRDS"); + memSpec->tRRDL = memSpec->tCK * parseUint(memspec[timings]["RRDL"], "RRDL"); + memSpec->tCCDS = memSpec->tCK * parseUint(memspec[timings]["CCDS"], "CCDS"); + memSpec->tCCDL = memSpec->tCK * parseUint(memspec[timings]["CCDL"], "CCDL"); + memSpec->tRL = memSpec->tCK * parseUint(memspec[timings]["RL"], "RL"); + memSpec->tWCK2CKPIN = memSpec->tCK * parseUint(memspec[timings]["WCK2CKPIN"], "WCK2CKPIN"); + memSpec->tWCK2CK = memSpec->tCK * parseUint(memspec[timings]["WCK2CK"], "WCK2CK"); + memSpec->tWCK2DQO = memSpec->tCK * parseUint(memspec[timings]["WCK2DQO"], "WCK2DQO"); + memSpec->tRTW = memSpec->tCK * parseUint(memspec[timings]["RTW"], "RTW"); + memSpec->tWL = memSpec->tCK * parseUint(memspec[timings]["WL"], "WL"); + memSpec->tWCK2DQI = memSpec->tCK * parseUint(memspec[timings]["WCK2DQI"], "WCK2DQI"); + memSpec->tWR = memSpec->tCK * parseUint(memspec[timings]["WR"], "WR"); + memSpec->tWTRS = memSpec->tCK * parseUint(memspec[timings]["WTRS"], "WTRS"); + memSpec->tWTRL = memSpec->tCK * parseUint(memspec[timings]["WTRL"], "WTRL"); + memSpec->tPD = memSpec->tCK * parseUint(memspec[timings]["PD"], "PD"); + memSpec->tCKESR = memSpec->tCK * parseUint(memspec[timings]["CKESR"], "CKESR"); + memSpec->tXP = memSpec->tCK * parseUint(memspec[timings]["XP"], "XP"); + memSpec->tREFI = memSpec->tCK * parseUint(memspec[timings]["REFI"], "REFI"); + memSpec->tREFIPB = memSpec->tCK * parseUint(memspec[timings]["REFIPB"], "REFIPB"); + memSpec->tRFC = memSpec->tCK * parseUint(memspec[timings]["RFC"], "RFC"); + memSpec->tRFCPB = memSpec->tCK * parseUint(memspec[timings]["RFCPB"], "RFCPB"); + memSpec->tRREFD = memSpec->tCK * parseUint(memspec[timings]["RREFD"], "RREFD"); + memSpec->tXS = memSpec->tCK * parseUint(memspec[timings]["XS"], "XS"); + memSpec->tFAW = memSpec->tCK * parseUint(memspec[timings]["FAW"], "FAW"); // memSpec->tRDSRE = memSpec->tRL + memSpec->tWCK2CKPIN + memSpec->tWCK2CK // + memSpec->tWCK2DQO + memSpec->burstLength / memSpec->dataRate * memSpec->tCK; // memSpec->tWRSRE = memSpec->tWL + memSpec->tWCK2CKPIN + memSpec->tWCK2CK // + memSpec->tWCK2DQI + memSpec->burstLength / memSpec->dataRate * memSpec->tCK; - memSpec->tPPD = memSpec->tCK * uIntParameter(j[timings]["PPD"], "PPD"); - memSpec->tLK = memSpec->tCK * uIntParameter(j[timings]["LK"], "LK"); - memSpec->tACTPDE = memSpec->tCK * uIntParameter(j[timings]["ACTPDE"], "ACTPDE"); - memSpec->tPREPDE = memSpec->tCK * uIntParameter(j[timings]["PREPDE"], "PREPDE"); - memSpec->tREFPDE = memSpec->tCK * uIntParameter(j[timings]["REFPDE"], "REFPDE"); - memSpec->tRTRS = memSpec->tCK * uIntParameter(j[timings]["RTRS"], "RTRS"); + memSpec->tPPD = memSpec->tCK * parseUint(memspec[timings]["PPD"], "PPD"); + memSpec->tLK = memSpec->tCK * parseUint(memspec[timings]["LK"], "LK"); + memSpec->tACTPDE = memSpec->tCK * parseUint(memspec[timings]["ACTPDE"], "ACTPDE"); + memSpec->tPREPDE = memSpec->tCK * parseUint(memspec[timings]["PREPDE"], "PREPDE"); + memSpec->tREFPDE = memSpec->tCK * parseUint(memspec[timings]["REFPDE"], "REFPDE"); + memSpec->tRTRS = memSpec->tCK * parseUint(memspec[timings]["RTRS"], "RTRS"); // Currents and voltages // TODO: to be completed } -unsigned int ConfigurationLoader::uIntParameter(nlohmann::json obj, std::string name) +unsigned int ConfigurationLoader::parseUint(json &obj, std::string name) { if (!obj.empty()) { @@ -729,7 +707,7 @@ unsigned int ConfigurationLoader::uIntParameter(nlohmann::json obj, std::string SC_REPORT_FATAL("Query json", ("Parameter '" + name + "' does not exist.").c_str()); } -double ConfigurationLoader::doubleParameter(nlohmann::json obj, std::string name) +double ConfigurationLoader::parseUdouble(json &obj, std::string name) { if (!obj.empty()) { @@ -742,7 +720,7 @@ double ConfigurationLoader::doubleParameter(nlohmann::json obj, std::string name SC_REPORT_FATAL("Query json", ("Parameter '" + name + "' does not exist.").c_str()); } -std::string ConfigurationLoader::stringParameter(nlohmann::json obj, std::string name) +std::string ConfigurationLoader::parseString(json &obj, std::string name) { if (!obj.empty()) { diff --git a/DRAMSys/library/src/configuration/ConfigurationLoader.h b/DRAMSys/library/src/configuration/ConfigurationLoader.h index 4f0a15f1..320a92fa 100644 --- a/DRAMSys/library/src/configuration/ConfigurationLoader.h +++ b/DRAMSys/library/src/configuration/ConfigurationLoader.h @@ -62,30 +62,28 @@ public: static void loadSimConfig(Configuration &config, std::string simconfigUri); static void loadMemSpec(Configuration &config, std::string memspecUri); - static void loadMemSpec(Configuration &config, nlohmann::json::object_t *memspec); static void loadTemperatureSimConfig(Configuration &config, std::string simconfigUri); private: ConfigurationLoader() {} - static void loadConfigJson(Configuration &config, nlohmann::json::object_t *configNode); // Loads common config of DRAMs - static void loadCommons(Configuration &config, nlohmann::json::object_t *memspec); + static void loadCommons(Configuration &config, nlohmann::json &memspec); // Load specific config - static void loadDDR3(Configuration &config, nlohmann::json::object_t *memspec); - static void loadDDR4(Configuration &config, nlohmann::json::object_t *memspec); - static void loadLPDDR4(Configuration &config, nlohmann::json::object_t *memspec); - static void loadWideIO(Configuration &config, nlohmann::json::object_t *memspec); - static void loadWideIO2(Configuration &config, nlohmann::json::object_t *memspec); - static void loadHBM2(Configuration &config, nlohmann::json::object_t *memspec); - static void loadGDDR5(Configuration &config, nlohmann::json::object_t *memspec); - static void loadGDDR5X(Configuration &config, nlohmann::json::object_t *memspec); - static void loadGDDR6(Configuration &config, nlohmann::json::object_t *memspec); + static void loadDDR3(Configuration &config, nlohmann::json &memspec); + static void loadDDR4(Configuration &config, nlohmann::json &memspec); + static void loadLPDDR4(Configuration &config, nlohmann::json &memspec); + static void loadWideIO(Configuration &config, nlohmann::json &memspec); + static void loadWideIO2(Configuration &config, nlohmann::json &memspec); + static void loadHBM2(Configuration &config, nlohmann::json &memspec); + static void loadGDDR5(Configuration &config, nlohmann::json &memspec); + static void loadGDDR5X(Configuration &config, nlohmann::json &memspec); + static void loadGDDR6(Configuration &config, nlohmann::json &memspec); - static unsigned int uIntParameter(nlohmann::json obj, std::string name); - static double doubleParameter(nlohmann::json obj, std::string name); - static std::string stringParameter(nlohmann::json obj, std::string name); + static unsigned int parseUint(nlohmann::json &obj, std::string name); + static double parseUdouble(nlohmann::json &obj, std::string name); + static std::string parseString(nlohmann::json &obj, std::string name); }; diff --git a/DRAMSys/library/src/configuration/TemperatureSimConfig.h b/DRAMSys/library/src/configuration/TemperatureSimConfig.h index c494443a..a0936f53 100644 --- a/DRAMSys/library/src/configuration/TemperatureSimConfig.h +++ b/DRAMSys/library/src/configuration/TemperatureSimConfig.h @@ -47,7 +47,7 @@ struct TemperatureSimConfig { // Temperature Scale - std::string TemperatureScale; + std::string temperatureScale; std::string pathToResources; void setPathToResources(std::string path) @@ -56,17 +56,17 @@ struct TemperatureSimConfig } // Static Temperature Simulation parameters - int StaticTemperatureDefaultValue; + int staticTemperatureDefaultValue; // Thermal Simulation parameters - double ThermalSimPeriod; - enum sc_time_unit ThermalSimUnit; - std::string IceServerIp; - unsigned int IceServerPort; - unsigned int SimPeriodAdjustFactor; - unsigned int NPowStableCyclesToIncreasePeriod; - bool GenerateTemperatureMap; - bool GeneratePowerMap; + double thermalSimPeriod; + enum sc_time_unit thermalSimUnit; + std::string iceServerIp; + unsigned int iceServerPort; + unsigned int simPeriodAdjustFactor; + unsigned int nPowStableCyclesToIncreasePeriod; + bool generateTemperatureMap; + bool generatePowerMap; // Power related information std::string powerInfoFile; @@ -78,51 +78,54 @@ struct TemperatureSimConfig PRINTDEBUGMESSAGE("TemperatureSimConfig", "Power Info File: " + powerInfoFile); powerInfoFile = pathToResources - + "/configs/thermalsim/" - + powerInfoFile; + + "/configs/thermalsim/" + + powerInfoFile; // Load the JSON file into memory and parse it - nlohmann::json powInfoElem = parseJSON(powerInfoFile); + nlohmann::json powInfoElem = parseJSON(powerInfoFile); - if (powInfoElem["powerInfo"].empty()){ - // Invalid file - std::string errormsg = "Invalid Power Info File " + powerInfoFile; - PRINTDEBUGMESSAGE("TemperatureSimConfig", errormsg); - SC_REPORT_FATAL("Temperature Sim Config", errormsg.c_str()); - } - else { - for ( auto it: powInfoElem["powerInfo"].items() ){ - - // Load initial power values for all devices - auto value= it.value(); - float pow = value["init_pow"]; - powerInitialValues.push_back(pow); - - // Load power thresholds for all devices - //Changes in power dissipation that exceed the threshods - //will make the thermal simulation to be executed more often) - - float thr = value["threshold"]; - powerThresholds.push_back(thr); - } - } - showTemperatureSimConfig(); - } - - void showTemperatureSimConfig() + if (powInfoElem["powerInfo"].empty()) { - int i __attribute__((unused)) = 0; - for (auto e __attribute__((unused)) : powerInitialValues) { - PRINTDEBUGMESSAGE("TemperatureSimConfig", "powerInitialValues[" - + std::to_string(i++) + "]: " + std::to_string(e)); - } - i = 0; - for (auto e __attribute__((unused)) : powerThresholds) { - PRINTDEBUGMESSAGE("TemperatureSimConfig", "powerThreshold[" - + std::to_string(i++) + "]: " + std::to_string(e)); + // Invalid file + std::string errormsg = "Invalid Power Info File " + powerInfoFile; + PRINTDEBUGMESSAGE("TemperatureSimConfig", errormsg); + SC_REPORT_FATAL("Temperature Sim Config", errormsg.c_str()); + } + else + { + for (auto it : powInfoElem["powerInfo"].items()) + { + // Load initial power values for all devices + auto value= it.value(); + float pow = value["init_pow"]; + powerInitialValues.push_back(pow); + + // Load power thresholds for all devices + //Changes in power dissipation that exceed the threshods + //will make the thermal simulation to be executed more often) + float thr = value["threshold"]; + powerThresholds.push_back(thr); } } - }; + showTemperatureSimConfig(); + } + + void showTemperatureSimConfig() + { + int i __attribute__((unused)) = 0; + for (auto e __attribute__((unused)) : powerInitialValues) + { + PRINTDEBUGMESSAGE("TemperatureSimConfig", "powerInitialValues[" + + std::to_string(i++) + "]: " + std::to_string(e)); + } + i = 0; + for (auto e __attribute__((unused)) : powerThresholds) + { + PRINTDEBUGMESSAGE("TemperatureSimConfig", "powerThreshold[" + + std::to_string(i++) + "]: " + std::to_string(e)); + } + } +}; #endif // TEMPERATURESIMCONFIG_H diff --git a/DRAMSys/library/src/simulation/DRAMSys.cpp b/DRAMSys/library/src/simulation/DRAMSys.cpp index a735f7b5..f99cf4e9 100644 --- a/DRAMSys/library/src/simulation/DRAMSys.cpp +++ b/DRAMSys/library/src/simulation/DRAMSys.cpp @@ -43,7 +43,6 @@ #include #include "DRAMSys.h" -#include "Setup.h" #include "../common/third_party/nlohmann/single_include/nlohmann/json.hpp" #include "../common/TlmRecorder.h" #include "../common/DebugManager.h" diff --git a/DRAMSys/library/src/simulation/TemperatureController.h b/DRAMSys/library/src/simulation/TemperatureController.h index a0ecc5b3..91e77082 100644 --- a/DRAMSys/library/src/simulation/TemperatureController.h +++ b/DRAMSys/library/src/simulation/TemperatureController.h @@ -59,18 +59,18 @@ public: } SC_CTOR(TemperatureController) { - temperatureScale = Configuration::getInstance().temperatureSim.TemperatureScale; + temperatureScale = Configuration::getInstance().temperatureSim.temperatureScale; dynamicTempSimEnabled = Configuration::getInstance().thermalSimulation; staticTemperature = - Configuration::getInstance().temperatureSim.StaticTemperatureDefaultValue; + Configuration::getInstance().temperatureSim.staticTemperatureDefaultValue; if (dynamicTempSimEnabled == true) { #ifdef THERMALSIM // Connect to the server - std::string ip = Configuration::getInstance().temperatureSim.IceServerIp; - unsigned int port = Configuration::getInstance().temperatureSim.IceServerPort; + std::string ip = Configuration::getInstance().temperatureSim.iceServerIp; + unsigned int port = Configuration::getInstance().temperatureSim.iceServerPort; thermalSimulation = new IceWrapper(ip, port); PRINTDEBUGMESSAGE(name(), "Dynamic temperature simulation. Server @ " + ip + ":" + std::to_string(port)); @@ -87,21 +87,21 @@ public: powerThresholds = Configuration::getInstance().temperatureSim.powerThresholds; decreaseSimPeriod = false; periodAdjustFactor = - Configuration::getInstance().temperatureSim.SimPeriodAdjustFactor; + Configuration::getInstance().temperatureSim.simPeriodAdjustFactor; nPowStableCyclesToIncreasePeriod = - Configuration::getInstance().temperatureSim.NPowStableCyclesToIncreasePeriod; + Configuration::getInstance().temperatureSim.nPowStableCyclesToIncreasePeriod; cyclesSinceLastPeriodAdjust = 0; // Get the target period for the thermal simulation from config. - targetPeriod = Configuration::getInstance().temperatureSim.ThermalSimPeriod; + targetPeriod = Configuration::getInstance().temperatureSim.thermalSimPeriod; period = targetPeriod; - t_unit = Configuration::getInstance().temperatureSim.ThermalSimUnit; + t_unit = Configuration::getInstance().temperatureSim.thermalSimUnit; - genTempMap = Configuration::getInstance().temperatureSim.GenerateTemperatureMap; + genTempMap = Configuration::getInstance().temperatureSim.generateTemperatureMap; temperatureMapFile = "temperature_map"; std::system("rm -f temperature_map*"); - genPowerMap = Configuration::getInstance().temperatureSim.GeneratePowerMap; + genPowerMap = Configuration::getInstance().temperatureSim.generatePowerMap; powerMapFile = "power_map"; std::system("rm -f power_map*");