diff --git a/dram/dramSys/dramSys.pro b/dram/dramSys/dramSys.pro
index 1b3163b3..3448244c 100644
--- a/dram/dramSys/dramSys.pro
+++ b/dram/dramSys/dramSys.pro
@@ -36,7 +36,6 @@ SOURCES += \
../src/common/TlmRecorder.cpp \
../src/common/dramExtension.cpp \
../src/common/DebugManager.cpp \
- ../src/controller/core/configuration/MemSpecLoader.cpp \
../src/controller/core/configuration/Configuration.cpp \
../src/controller/core/powerdown/PowerDownManagerTimeout.cpp \
../src/controller/core/powerdown/PowerDownManagerBankwise.cpp \
@@ -68,7 +67,8 @@ SOURCES += \
../src/simulation/main.cpp \
../src/controller/core/RowBufferStates.cpp \
../src/controller/scheduler/Scheduler.cpp \
- ../src/controller/scheduler/readwritegrouper.cpp
+ ../src/controller/scheduler/readwritegrouper.cpp \
+ ../src/controller/core/configuration/ConfigurationLoader.cpp
HEADERS += \
../src/common/third_party/tinyxml2.h \
@@ -79,7 +79,6 @@ HEADERS += \
../src/common/protocol.h \
../src/common/dramExtension.h \
../src/common/DebugManager.h \
- ../src/controller/core/configuration/MemSpecLoader.h \
../src/controller/core/configuration/Configuration.h \
../src/controller/core/powerdown/PowerDownManagerTimeout.h \
../src/controller/core/powerdown/PowerDownManagerBankwise.h \
@@ -123,5 +122,6 @@ HEADERS += \
../src/controller/core/RowBufferStates.h \
../src/controller/scheduler/readwritegrouper.h \
../src/simulation/ReorderBuffer.h \
- ../src/controller/core/configuration/MemSpec.h
+ ../src/controller/core/configuration/MemSpec.h \
+ ../src/controller/core/configuration/ConfigurationLoader.h
diff --git a/dram/resources/configs/memconfigs/fr_fcfs.xml b/dram/resources/configs/memconfigs/fr_fcfs.xml
index 8aa70731..cce963c7 100644
--- a/dram/resources/configs/memconfigs/fr_fcfs.xml
+++ b/dram/resources/configs/memconfigs/fr_fcfs.xml
@@ -1,14 +1,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dram/src/common/Utils.cpp b/dram/src/common/Utils.cpp
index 0425aef2..96bd6d63 100644
--- a/dram/src/common/Utils.cpp
+++ b/dram/src/common/Utils.cpp
@@ -96,7 +96,7 @@ double queryDoubleParameter(XMLElement* node, string name)
bool queryBoolParameter(XMLElement* node, string name)
{
bool result;
- XMLElement* element;
+ XMLElement* element;// = node->FirstChildElement("parameter");
for (element = node->FirstChildElement("parameter"); element != NULL;
element = element->NextSiblingElement("parameter"))
{
diff --git a/dram/src/controller/core/configuration/Configuration.cpp b/dram/src/controller/core/configuration/Configuration.cpp
index c3ba3e73..b8eef538 100644
--- a/dram/src/controller/core/configuration/Configuration.cpp
+++ b/dram/src/controller/core/configuration/Configuration.cpp
@@ -6,8 +6,7 @@
*/
#include "Configuration.h"
-#include "MemSpecLoader.h"
-#include "systemc.h"
+#include "ConfigurationLoader.h"
#include "boost/lexical_cast.hpp"
using namespace std;
@@ -15,12 +14,9 @@ using namespace std;
namespace core{
string Configuration::memspecUri = "";
-string Configuration::memconfigUri = "";
Configuration::Configuration()
{
- MemSpecLoader loader;
- loader.loadConfiguration(*this, Configuration::memspecUri, Configuration::memconfigUri);
}
int string2bool(string s)
@@ -47,13 +43,14 @@ int string2int(string s)
PowerDownMode string2PDNMode(string s)
{
- if(s == "Staggered")
+ if(s == "NoPowerDown")
+ return PowerDownMode::NoPowerDown;
+ else if(s == "Staggered")
return PowerDownMode::Staggered;
else if (s == "TimeoutPDN")
return PowerDownMode::TimeoutPDN;
else if (s == "TimeoutSREF")
return PowerDownMode::TimeoutSREF;
-
else
{
SC_REPORT_FATAL("Configuration", ("Unknown PowerDownMode: " + s).c_str());
@@ -82,10 +79,13 @@ void Configuration::setParameter(std::string name, std::string value)
powerDownTimeoutInClk = string2int(value);
else if(name == "PowerDownMode")
powerDownMode = string2PDNMode(value);
- else if(name == "databaseRecordingEnabled")
+ else if(name == "DatabaseRecordingEnabled")
databaseRecordingEnabled = string2bool(value);
else
- throw "Parameter " + name + " not defined in Configuration";
+ {
+ SC_REPORT_FATAL("Configuration", ("Parameter " + name + " not defined in Configuration").c_str());
+ throw;
+ }
}
void Configuration::setParameters(std::map parameterMap)
@@ -96,6 +96,5 @@ void Configuration::setParameters(std::map parameterMa
}
}
-
} /* namespace core */
diff --git a/dram/src/controller/core/configuration/Configuration.h b/dram/src/controller/core/configuration/Configuration.h
index 86214d36..cc4835cc 100644
--- a/dram/src/controller/core/configuration/Configuration.h
+++ b/dram/src/controller/core/configuration/Configuration.h
@@ -12,10 +12,9 @@
#include
#include "MemSpec.h"
-
namespace core{
-enum class PowerDownMode{Staggered, TimeoutPDN, TimeoutSREF};
+enum class PowerDownMode{NoPowerDown, Staggered, TimeoutPDN, TimeoutSREF};
struct Configuration
@@ -29,7 +28,7 @@ struct Configuration
return configuration;
}
- //MemConfiguration
+ //MemConfig
bool BankwiseLogic = false;
bool OpenPagePolicy = true;
bool AdaptiveOpenPagePolicy = false;
@@ -40,10 +39,10 @@ struct Configuration
sc_time getPowerDownTimeout(){return powerDownTimeoutInClk*memSpec.clk;}
PowerDownMode powerDownMode = PowerDownMode::Staggered;
- //Simulation Configuration
+ //SimConfig
bool databaseRecordingEnabled = true;
- //Memory Specification (from DRAM Power XML)
+ //MemSpec(from DRAM-Power XML)
MemSpec memSpec;
void setParameter(std::string name, std::string value);
diff --git a/dram/src/controller/core/configuration/MemSpecLoader.cpp b/dram/src/controller/core/configuration/ConfigurationLoader.cpp
similarity index 76%
rename from dram/src/controller/core/configuration/MemSpecLoader.cpp
rename to dram/src/controller/core/configuration/ConfigurationLoader.cpp
index cb2b9eb9..67611c08 100644
--- a/dram/src/controller/core/configuration/MemSpecLoader.cpp
+++ b/dram/src/controller/core/configuration/ConfigurationLoader.cpp
@@ -5,7 +5,7 @@
* Author: jonny
*/
-#include "MemSpecLoader.h"
+#include "ConfigurationLoader.h"
#include "MemSpec.h"
#include "../TimingCalculation.h"
@@ -14,51 +14,46 @@ using namespace std;
namespace core {
-void MemSpecLoader::loadConfiguration(Configuration& config, string memspecUri, string memconfigUri)
+void ConfigurationLoader::loadSimConfig(Configuration& config, string simconfigUri)
+{
+ tinyxml2::XMLDocument doc;
+
+ loadXML(simconfigUri, doc);
+ XMLElement* simconfig = doc.FirstChildElement("simconfig");
+ loadConfig(config, simconfig);
+}
+
+
+void ConfigurationLoader::loadMemConfig(Configuration& config, string memconfigUri)
+{
+ tinyxml2::XMLDocument doc;
+
+ loadXML(memconfigUri, doc);
+ XMLElement* memconfig = doc.FirstChildElement("memconfig");
+ loadConfig(config, memconfig);
+}
+
+void ConfigurationLoader::loadConfig(Configuration& config, XMLElement* configNode)
+{
+ XMLElement* element;
+ for (element = configNode->FirstChildElement(); element != NULL;
+ element = element->NextSiblingElement())
+ {
+ config.setParameter(element->Name(), element->Attribute("value"));
+
+ }
+}
+
+void ConfigurationLoader::loadMemSpec(Configuration& config, string memspecUri)
{
tinyxml2::XMLDocument doc;
loadXML(memspecUri, doc);
XMLElement* memspec = doc.FirstChildElement("memspec");
loadMemSpec(config, memspec);
-
- loadXML(memconfigUri, doc);
- XMLElement* memconfig = doc.FirstChildElement("memspec");
- loadMemConfig(config, memconfig);
}
-void MemSpecLoader::loadMemConfig(Configuration& config, XMLElement* memconfig)
-{
- //MemConfiguration
- XMLElement* configuration = memconfig->FirstChildElement("memconfig");
-
- config.BankwiseLogic = queryBoolParameter(configuration, "bankwiseLogic");
- config.OpenPagePolicy = queryBoolParameter(configuration, "openPagePolicy");
- config.AdaptiveOpenPagePolicy = queryBoolParameter(configuration, "adaptiveOpenPagePolicy");
- config.RefreshAwareScheduling = queryBoolParameter(configuration, "refreshAwareScheduling");
- config.MaxNrOfTransactions = queryUIntParameter(configuration, "maxNrOfTransactionsInDram");
- config.Scheduler = queryStringParameter(configuration, "scheduler");
- config.Capsize = queryUIntParameter(configuration, "capsize");
-
- string mode = queryStringParameter(configuration, "powerDownMode");
- if (mode.compare("Staggered") == 0)
- {
- config.powerDownMode = PowerDownMode::Staggered;
- }
- else if (mode.compare("TimeoutPDN") == 0)
- {
- config.powerDownMode = PowerDownMode::TimeoutPDN;
- }
- else if (mode.compare("TimeoutSREF") == 0)
- {
- config.powerDownMode = PowerDownMode::TimeoutSREF;
- }
- config.setParameter("PowerDownTimeout", queryStringParameter(configuration, "powerDownTimeout"));
-
- config.databaseRecordingEnabled = queryBoolParameter(configuration, "databaseRecordingEnabled");
-}
-
-void MemSpecLoader::loadMemSpec(Configuration& config, XMLElement* memspec)
+void ConfigurationLoader::loadMemSpec(Configuration& config, XMLElement* memspec)
{
config.memSpec.MemoryId = queryStringParameter(memspec, "memoryId");
config.memSpec.MemoryType = queryStringParameter(memspec, "memoryType");
@@ -77,9 +72,9 @@ void MemSpecLoader::loadMemSpec(Configuration& config, XMLElement* memspec)
}
}
-void MemSpecLoader::loadDDR4(Configuration& config, XMLElement* memspec)
+void ConfigurationLoader::loadDDR4(Configuration& config, XMLElement* memspec)
{
- //MemSpecification
+ //MemArchitecture
XMLElement* architecture = memspec->FirstChildElement("memarchitecturespec");
config.memSpec.NumberOfBanks = queryUIntParameter(architecture, "nbrOfBanks");
@@ -126,7 +121,7 @@ void MemSpecLoader::loadDDR4(Configuration& config, XMLElement* memspec)
}
}
-void MemSpecLoader::loadWideIO(Configuration& config, XMLElement* memspec)
+void ConfigurationLoader::loadWideIO(Configuration& config, XMLElement* memspec)
{
//MemSpecification
XMLElement* architecture = memspec->FirstChildElement("memarchitecturespec");
diff --git a/dram/src/controller/core/configuration/ConfigurationLoader.h b/dram/src/controller/core/configuration/ConfigurationLoader.h
new file mode 100644
index 00000000..26e18d54
--- /dev/null
+++ b/dram/src/controller/core/configuration/ConfigurationLoader.h
@@ -0,0 +1,38 @@
+/*
+ * ConfigurationLoader.h
+ *
+ * Created on: Apr 7, 2014
+ * Author: jonny
+ */
+
+#ifndef CONFIGURATIONLOADER_H_
+#define CONFIGURATIONLOADER_H_
+
+#include
+#include "../../../common/third_party/tinyxml2.h"
+#include "../../../common/Utils.h"
+#include "Configuration.h"
+
+namespace core {
+
+class ConfigurationLoader
+{
+public:
+ static void loadMemConfig(Configuration& config, std::string memconfigUri);
+ static void loadSimConfig(Configuration& config, std::string simconfigUri);
+
+ static void loadMemSpec(Configuration& config, std::string memspecUri);
+ static void loadMemSpec(Configuration& config, tinyxml2::XMLElement* memspec);
+
+private:
+ ConfigurationLoader(){}
+ static void loadConfig(Configuration& config, tinyxml2::XMLElement* configNode);
+
+ //specific loader
+ static void loadDDR4(Configuration& config, tinyxml2::XMLElement* memspec);
+ static void loadWideIO(Configuration& config, tinyxml2::XMLElement* memspec);
+};
+
+} /* namespace core */
+
+#endif /* CONFIGURATIONLOADER_H_ */
diff --git a/dram/src/controller/core/configuration/MemSpec.h b/dram/src/controller/core/configuration/MemSpec.h
index 9a47ce35..5be412e5 100644
--- a/dram/src/controller/core/configuration/MemSpec.h
+++ b/dram/src/controller/core/configuration/MemSpec.h
@@ -11,6 +11,7 @@
#include
#include