From 616320ca9b29a3853c946e5b02951cfd90c6e910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89der=20F=2E=20Zulian?= Date: Fri, 10 Mar 2017 15:40:04 +0100 Subject: [PATCH 1/5] Fix for disable refresh --- .../simulator/src/controller/core/ControllerCore.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/DRAMSys/simulator/src/controller/core/ControllerCore.cpp b/DRAMSys/simulator/src/controller/core/ControllerCore.cpp index d8650e70..45b3bd47 100644 --- a/DRAMSys/simulator/src/controller/core/ControllerCore.cpp +++ b/DRAMSys/simulator/src/controller/core/ControllerCore.cpp @@ -160,11 +160,16 @@ void ControllerCore::scheduleRequest(Command command, tlm::tlm_generic_payload & sc_time start = clkAlign(sc_time_stamp()); state->cleanUp(start); ScheduledCommand scheduledCommand = schedule(command, start, payload); - if(!((command == Command::Precharge || command == Command::Activate) - && refreshManager->hasCollision(scheduledCommand))) - { + if (config.ControllerCoreDisableRefresh == true) { state->change(scheduledCommand); controller.send(scheduledCommand, payload); + } else { + if(!((command == Command::Precharge || command == Command::Activate) + && refreshManager->hasCollision(scheduledCommand))) + { + state->change(scheduledCommand); + controller.send(scheduledCommand, payload); + } } } From ead929d3da7b5e5f84c60982540593bba5632a92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89der=20F=2E=20Zulian?= Date: Wed, 22 Mar 2017 19:03:05 +0100 Subject: [PATCH 2/5] Small fix. Gem5 support is built based on the presence of the GEM5 environment variable. --- DRAMSys/DRAMSys.pro | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/DRAMSys/DRAMSys.pro b/DRAMSys/DRAMSys.pro index 0530961c..0852d9e4 100644 --- a/DRAMSys/DRAMSys.pro +++ b/DRAMSys/DRAMSys.pro @@ -1,8 +1,7 @@ TEMPLATE = subdirs thermalsim = $$(THERMALSIM) -isEmpty(thermalsim) -{ +isEmpty(thermalsim) { thermalsim = false } @@ -19,14 +18,13 @@ SUBDIRS += analyzer/traceAnalyzer.pro # Check if gem5 is installed: gem5 = $$(GEM5) -isEmpty(gem5) -{ - DEFINES += DRAMSYS_GEM5 -} - -contains(DEFINES,DRAMSYS_GEM5) -{ +isEmpty(gem5) { + message(GEM5 environment variable not found) + message(Gem5 Simulation Disabled) +} else { message(Gem5 Simulation Feature Enabled) + message(Gem5 home is $${gem5}) + DEFINES += DRAMSYS_GEM5 SUBDIRS += gem5/gem5.pro } From 22eca68f6ad13f259e4753acee9d9bfc9b877609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89der=20F=2E=20Zulian?= Date: Wed, 5 Apr 2017 08:39:58 +0200 Subject: [PATCH 3/5] Avoid some assertions when using gem5 Using preprocessor directives instead of a configuration. It seems to be ok for now. --- DRAMSys/simulator/library.pro | 11 +++++++++++ .../configs/simulator/ddr3-single-device.xml | 1 - .../simulator/resources/configs/simulator/ddr3.xml | 2 -- .../core/configuration/Configuration.cpp | 2 -- .../controller/core/configuration/Configuration.h | 1 - DRAMSys/simulator/src/simulation/Dram.h | 14 ++++---------- 6 files changed, 15 insertions(+), 16 deletions(-) diff --git a/DRAMSys/simulator/library.pro b/DRAMSys/simulator/library.pro index 0a930c9a..5e9f63a4 100644 --- a/DRAMSys/simulator/library.pro +++ b/DRAMSys/simulator/library.pro @@ -28,6 +28,17 @@ $$eval(dramsys_pct) { DEFINES += DRAMSYS_PCT } +# Check if gem5 should be used +gem5 = $$(GEM5) +isEmpty(gem5) { + message(GEM5 environment variable not found) + message(Gem5 Simulation Disabled) +} else { + message(Gem5 Simulation Feature Enabled) + message(Gem5 home is $${gem5}) + DEFINES += DRAMSYS_GEM5 +} + message(SystemC home is $${systemc_home}) systemc_target_arch = $$(SYSTEMC_TARGET_ARCH) diff --git a/DRAMSys/simulator/resources/configs/simulator/ddr3-single-device.xml b/DRAMSys/simulator/resources/configs/simulator/ddr3-single-device.xml index 059d3ee1..35fd3dec 100644 --- a/DRAMSys/simulator/resources/configs/simulator/ddr3-single-device.xml +++ b/DRAMSys/simulator/resources/configs/simulator/ddr3-single-device.xml @@ -11,5 +11,4 @@ - diff --git a/DRAMSys/simulator/resources/configs/simulator/ddr3.xml b/DRAMSys/simulator/resources/configs/simulator/ddr3.xml index 431f052d..3138494c 100644 --- a/DRAMSys/simulator/resources/configs/simulator/ddr3.xml +++ b/DRAMSys/simulator/resources/configs/simulator/ddr3.xml @@ -11,11 +11,9 @@ - diff --git a/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp b/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp index 90061259..64391837 100644 --- a/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp +++ b/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp @@ -190,8 +190,6 @@ void Configuration::setParameter(std::string name, std::string value) SC_REPORT_FATAL("Configuration", ("Invalid value for parameter " + name + ". This parameter must be at least one.").c_str()); } else NumberOfDevicesOnDIMM = string2int(value); - else if(name == "gem5") - gem5 = string2bool(value); else if(name == "AddressOffset") { AddressOffset = string2ull(value); diff --git a/DRAMSys/simulator/src/controller/core/configuration/Configuration.h b/DRAMSys/simulator/src/controller/core/configuration/Configuration.h index e7e9b3e8..8695b133 100644 --- a/DRAMSys/simulator/src/controller/core/configuration/Configuration.h +++ b/DRAMSys/simulator/src/controller/core/configuration/Configuration.h @@ -81,7 +81,6 @@ struct Configuration bool SimulationProgressBar = false; unsigned int NumberOfDevicesOnDIMM = 1; bool CheckTLM2Protocol = false; - bool gem5 = false; unsigned long long int AddressOffset = 0; // MemSpec (from DRAM-Power XML) diff --git a/DRAMSys/simulator/src/simulation/Dram.h b/DRAMSys/simulator/src/simulation/Dram.h index 3710a8ae..fa3d9dec 100644 --- a/DRAMSys/simulator/src/simulation/Dram.h +++ b/DRAMSys/simulator/src/simulation/Dram.h @@ -390,11 +390,8 @@ struct Dram : sc_module } else if (phase == BEGIN_WR) { -#ifndef DRAMSYS_PCT - if(Configuration::getInstance().gem5 == false) - { - assert(payload.get_data_length() == bytesPerBurst); - } +#if !defined (DRAMSYS_PCT) && !defined (DRAMSYS_GEM5) + assert(payload.get_data_length() == bytesPerBurst); #endif if(powerAnalysis == true){DRAMPower->doCommand(MemCommand::WR, bank, cycle);} @@ -418,11 +415,8 @@ struct Dram : sc_module } else if (phase == BEGIN_RD) { -#ifndef DRAMSYS_PCT - if(Configuration::getInstance().gem5 == false) - { - assert(payload.get_data_length() == bytesPerBurst); - } +#if !defined (DRAMSYS_PCT) && !defined (DRAMSYS_GEM5) + assert(payload.get_data_length() == bytesPerBurst); #endif numberOfTransactionsServed++; From eb526e7e83e36f47361b66b35f66ebf10ee28963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89der=20F=2E=20Zulian?= Date: Wed, 5 Apr 2017 16:46:52 +0200 Subject: [PATCH 4/5] AddressOffset is only used when we use gem5. If gem5 is not used the configuration field AddressOffset is set to zero despite the value in the xml file. --- DRAMSys/simulator/resources/configs/simulator/ddr3.xml | 2 +- .../src/controller/core/configuration/Configuration.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/DRAMSys/simulator/resources/configs/simulator/ddr3.xml b/DRAMSys/simulator/resources/configs/simulator/ddr3.xml index 3138494c..9e322605 100644 --- a/DRAMSys/simulator/resources/configs/simulator/ddr3.xml +++ b/DRAMSys/simulator/resources/configs/simulator/ddr3.xml @@ -14,6 +14,6 @@ diff --git a/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp b/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp index 64391837..ded14c17 100644 --- a/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp +++ b/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp @@ -192,7 +192,11 @@ void Configuration::setParameter(std::string name, std::string value) NumberOfDevicesOnDIMM = string2int(value); else if(name == "AddressOffset") { +#ifdef DRAMSYS_GEM5 AddressOffset = string2ull(value); +#else + AddressOffset = 0; +#endif cout << "Address Offset: " << AddressOffset << endl; } else if(name == "CheckTLM2Protocol") From 904aef9361e7440f3fa5a42795867b45f8952864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89der=20F=2E=20Zulian?= Date: Fri, 16 Jun 2017 10:53:16 +0200 Subject: [PATCH 5/5] Update path of gem5 files. --- DRAMSys/gem5/gem5.pro | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/DRAMSys/gem5/gem5.pro b/DRAMSys/gem5/gem5.pro index cb3dcc2d..fe171ebd 100644 --- a/DRAMSys/gem5/gem5.pro +++ b/DRAMSys/gem5/gem5.pro @@ -48,7 +48,7 @@ INCLUDEPATH += ../simulator/src/common/third_party/DRAMPower/src/libdrampower INCLUDEPATH += $${gem5_root}/build/$${gem5_arch}/ INCLUDEPATH += $${gem5_root}/util/tlm/examples/slave_port INCLUDEPATH += $${gem5_root}/util/tlm/examples/common -INCLUDEPATH += $${gem5_root}/util/tlm/ +INCLUDEPATH += $${gem5_root}/util/tlm/src/ INCLUDEPATH += $${gem5_root}/util/systemc LIBS += -L$${systemc_home}/lib-$${systemc_target_arch} -lsystemc @@ -63,13 +63,13 @@ SOURCES += $${gem5_root}/util/systemc/sc_module.cc SOURCES += $${gem5_root}/util/systemc/stats.cc SOURCES += $${gem5_root}/util/tlm/examples/common/cli_parser.cc SOURCES += $${gem5_root}/util/tlm/examples/common/report_handler.cc -SOURCES += $${gem5_root}/util/tlm/master_transactor.cc -SOURCES += $${gem5_root}/util/tlm/sc_master_port.cc -SOURCES += $${gem5_root}/util/tlm/sc_slave_port.cc -SOURCES += $${gem5_root}/util/tlm/slave_transactor.cc -SOURCES += $${gem5_root}/util/tlm/sc_ext.cc -SOURCES += $${gem5_root}/util/tlm/sc_mm.cc -SOURCES += $${gem5_root}/util/tlm/sim_control.cc +SOURCES += $${gem5_root}/util/tlm/src/master_transactor.cc +SOURCES += $${gem5_root}/util/tlm/src/sc_master_port.cc +SOURCES += $${gem5_root}/util/tlm/src/sc_slave_port.cc +SOURCES += $${gem5_root}/util/tlm/src/slave_transactor.cc +SOURCES += $${gem5_root}/util/tlm/src/sc_ext.cc +SOURCES += $${gem5_root}/util/tlm/src/sc_mm.cc +SOURCES += $${gem5_root}/util/tlm/src/sim_control.cc SOURCES += main.cpp