From fba52f6d6b25530bf29ec66015310cc3bae1bd72 Mon Sep 17 00:00:00 2001 From: scorrea Date: Wed, 15 Apr 2020 14:09:06 +0200 Subject: [PATCH] mcconfig loaded from json file --- .../resources/configs/mcconfigs/fifo.json | 12 ++++++- .../resources/configs/mcconfigs/fr_fcfs.json | 3 +- .../configs/mcconfigs/fr_fcfs_grp.json | 2 +- .../simulations/ddr3-example-mcconfigjson.xml | 25 +++++++++++++ .../src/configuration/ConfigurationLoader.cpp | 35 +++++++++---------- .../src/configuration/ConfigurationLoader.h | 7 ++-- 6 files changed, 61 insertions(+), 23 deletions(-) create mode 100644 DRAMSys/library/resources/simulations/ddr3-example-mcconfigjson.xml diff --git a/DRAMSys/library/resources/configs/mcconfigs/fifo.json b/DRAMSys/library/resources/configs/mcconfigs/fifo.json index 82be88b8..95cd1871 100644 --- a/DRAMSys/library/resources/configs/mcconfigs/fifo.json +++ b/DRAMSys/library/resources/configs/mcconfigs/fifo.json @@ -1 +1,11 @@ -{"mcconfig": {"PagePolicy": {"@value": "Open"}, "Scheduler": {"@value": "Fifo"}, "RequestBufferSize": {"@value": "8"}, "CmdMux": {"@value": "Strict"}, "RespQueue": {"@value": "Fifo"}, "RefreshPolicy": {"@value": "Rankwise"}, "RefreshMode": {"@value": "1"}, "RefreshMaxPostponed": {"@value": "8"}, "RefreshMaxPulledin": {"@value": "8"}, "PowerDownPolicy": {"@value": "NoPowerDown"}, "PowerDownTimeout": {"@value": "100"}}} \ No newline at end of file +{"mcconfig": {"PagePolicy": "Open", +"Scheduler": "Fifo", +"RequestBufferSize": "8", +"CmdMux": "Strict", +"RespQueue": "Fifo", +"RefreshPolicy": "Rankwise", +"RefreshMode": "1", +"RefreshMaxPostponed": "8", +"RefreshMaxPulledin": "8", +"PowerDownPolicy": "NoPowerDown", +"PowerDownTimeout": "100"}} \ No newline at end of file diff --git a/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs.json b/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs.json index 1170848e..722147a1 100644 --- a/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs.json +++ b/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs.json @@ -1 +1,2 @@ -{"mcconfig": {"PagePolicy": {"@value": "Open"}, "Scheduler": {"@value": "FrFcfs"}, "RequestBufferSize": {"@value": "8"}, "CmdMux": {"@value": "Oldest"}, "RespQueue": {"@value": "Fifo"}, "RefreshPolicy": {"@value": "Rankwise"}, "RefreshMode": {"@value": "1"}, "RefreshMaxPostponed": {"@value": "8"}, "RefreshMaxPulledin": {"@value": "8"}, "PowerDownPolicy": {"@value": "NoPowerDown"}, "PowerDownTimeout": {"@value": "100"}}} \ No newline at end of file +{"mcconfig": { +"PagePolicy": "Open", "Scheduler": "FrFcfs", "RequestBufferSize": "8", "CmdMux": "Oldest", "RespQueue": "Fifo", "RefreshPolicy": "Rankwise", "RefreshMode": "1", "RefreshMaxPostponed": "8", "RefreshMaxPulledin": "8", "PowerDownPolicy": "NoPowerDown", "PowerDownTimeout": "100"}} diff --git a/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_grp.json b/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_grp.json index 2ed9772d..9cff3e26 100644 --- a/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_grp.json +++ b/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_grp.json @@ -1 +1 @@ -{"mcconfig": {"PagePolicy": {"@value": "Open"}, "Scheduler": {"@value": "FrFcfsGrp"}, "RequestBufferSize": {"@value": "8"}, "CmdMux": {"@value": "Oldest"}, "RespQueue": {"@value": "Fifo"}, "RefreshPolicy": {"@value": "Rankwise"}, "RefreshMode": {"@value": "1"}, "RefreshMaxPostponed": {"@value": "8"}, "RefreshMaxPulledin": {"@value": "8"}, "PowerDownPolicy": {"@value": "NoPowerDown"}, "PowerDownTimeout": {"@value": "100"}}} \ No newline at end of file +{"mcconfig": {"PagePolicy": "Open", "Scheduler": "FrFcfsGrp", "RequestBufferSize": "8", "CmdMux": "Oldest", "RespQueue": "Fifo", "RefreshPolicy": "Rankwise", "RefreshMode": "1", "RefreshMaxPostponed": "8", "RefreshMaxPulledin": "8", "PowerDownPolicy": "NoPowerDown", "PowerDownTimeout": "100"}} diff --git a/DRAMSys/library/resources/simulations/ddr3-example-mcconfigjson.xml b/DRAMSys/library/resources/simulations/ddr3-example-mcconfigjson.xml new file mode 100644 index 00000000..f1ce2b84 --- /dev/null +++ b/DRAMSys/library/resources/simulations/ddr3-example-mcconfigjson.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + ddr3_example.stl + + diff --git a/DRAMSys/library/src/configuration/ConfigurationLoader.cpp b/DRAMSys/library/src/configuration/ConfigurationLoader.cpp index 7a8e9579..e5b37691 100644 --- a/DRAMSys/library/src/configuration/ConfigurationLoader.cpp +++ b/DRAMSys/library/src/configuration/ConfigurationLoader.cpp @@ -48,6 +48,8 @@ #include "memspec/MemSpecGDDR6.h" using namespace tinyxml2; +using json = nlohmann::json; + void ConfigurationLoader::loadSimConfig(Configuration &config, std::string simconfigUri) @@ -100,6 +102,18 @@ void ConfigurationLoader::loadConfig(Configuration &config, } } +void ConfigurationLoader::loadConfigJson(Configuration &config, + json::object_t *configNode) +{ + json j = *configNode; + + for (auto& x : j.items()) + { + config.setParameter(x.key(), x.value()); + } + +} + void ConfigurationLoader::loadConfigFromUri(Configuration &config, std::string uri, std::string first_element) { @@ -112,27 +126,12 @@ void ConfigurationLoader::loadConfigFromUri(Configuration &config, void ConfigurationLoader::loadMCConfig(Configuration &config, std::string mcconfigUri) { - tinyxml2::XMLDocument doc; config.mcconfigUri = mcconfigUri; - loadXML(mcconfigUri, doc); - XMLElement *mcconfig = doc.FirstChildElement("mcconfig"); - loadConfig(config, mcconfig); + json doc = json::parse(std::ifstream(mcconfigUri)); + auto mcconfig = doc["mcconfig"].get_ptr(); + loadConfigJson(config, mcconfig); } -void ConfigurationLoader::loadMCConfig(Configuration &config, - XMLElement *mcconfig) -{ - if (mcconfig->Attribute("src")) - { - XMLDocument doc; - std::string src(mcconfig->Attribute("src")); - config.mcconfigUri = src; - loadXML(src, doc); - loadMCConfig(config, doc.FirstChildElement("mcconfig")); - } - else - loadConfig(config, mcconfig); -} void ConfigurationLoader::loadMemSpec(Configuration &config, std::string memspecUri) { diff --git a/DRAMSys/library/src/configuration/ConfigurationLoader.h b/DRAMSys/library/src/configuration/ConfigurationLoader.h index b5ea9290..14bad881 100644 --- a/DRAMSys/library/src/configuration/ConfigurationLoader.h +++ b/DRAMSys/library/src/configuration/ConfigurationLoader.h @@ -40,6 +40,7 @@ #include #include "../common/third_party/tinyxml2/tinyxml2.h" +#include "../common/third_party/nlohmann/single_include/nlohmann/json.hpp" #include "../common/utils.h" #include "Configuration.h" @@ -47,8 +48,9 @@ class ConfigurationLoader { public: - static void loadMCConfig(Configuration &config, std::string amconfigUri); - static void loadMCConfig(Configuration &config, tinyxml2::XMLElement *mcconfig); + + static void loadMCConfig(Configuration &config, std::string amconfigUri); + static void loadSimConfig(Configuration &config, std::string simconfigUri); static void loadSimConfig(Configuration &config, @@ -63,6 +65,7 @@ public: tinyxml2::XMLElement *simconfig); private: ConfigurationLoader() {} + static void loadConfigJson(Configuration &config, nlohmann::json::object_t *configNode); static void loadConfig(Configuration &config, tinyxml2::XMLElement *configNode); static void loadConfigFromUri(Configuration &config, std::string uri, std::string first_element);