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);