diff --git a/configs/README.md b/configs/README.md index d4bddead..ecd635e4 100644 --- a/configs/README.md +++ b/configs/README.md @@ -157,6 +157,7 @@ The content of [ddr3.json](simconfig/example.json) is presented below as an exam { "simconfig": { "SimulationName": "example", + "SimulationTime": 1e-3, "Debug": false, "DatabaseRecording": true, "PowerAnalysis": false, @@ -173,6 +174,9 @@ The content of [ddr3.json](simconfig/example.json) is presented below as an exam - *SimulationName* (string) - Give the name of the simulation for distinguishing from other simulations. +- *SimulationTime* (double) + - Time at which the simulation is forcefully stopped. Useful for generating multiple simulations over the exact same timeframe. + - Default: unlimited - *Debug* (boolean) - true: enables debug output on console (only supported by a debug build) - false: disables debug output diff --git a/src/configuration/DRAMSys/config/SimConfig.h b/src/configuration/DRAMSys/config/SimConfig.h index bbd60ed4..fcbfd6ba 100644 --- a/src/configuration/DRAMSys/config/SimConfig.h +++ b/src/configuration/DRAMSys/config/SimConfig.h @@ -72,6 +72,7 @@ struct SimConfig std::optional ThermalSimulation; std::optional UseMalloc; std::optional WindowSize; + std::optional SimulationTime; }; NLOHMANN_JSONIFY_ALL_THINGS(SimConfig, @@ -86,7 +87,8 @@ NLOHMANN_JSONIFY_ALL_THINGS(SimConfig, StoreMode, ThermalSimulation, UseMalloc, - WindowSize) + WindowSize, + SimulationTime) } // namespace DRAMSys::Config diff --git a/src/simulator/main.cpp b/src/simulator/main.cpp index 8d8e1580..32484de1 100644 --- a/src/simulator/main.cpp +++ b/src/simulator/main.cpp @@ -57,7 +57,7 @@ int sc_main(int argc, char** argv) DRAMSys::Config::from_path(baseConfig.c_str(), resourceDirectory.c_str()); Simulator simulator(std::move(configuration), std::move(resourceDirectory)); - Simulator::run(); + simulator.run(); return 0; } diff --git a/src/simulator/simulator/Simulator.cpp b/src/simulator/simulator/Simulator.cpp index 6a118353..24443a64 100644 --- a/src/simulator/simulator/Simulator.cpp +++ b/src/simulator/simulator/Simulator.cpp @@ -156,7 +156,15 @@ void Simulator::run() auto start = std::chrono::high_resolution_clock::now(); // Start the SystemC simulation - sc_core::sc_start(); + if (configuration.simconfig.SimulationTime.has_value()) + { + sc_core::sc_start( + sc_core::sc_time(configuration.simconfig.SimulationTime.value(), sc_core::SC_SEC)); + } + else + { + sc_core::sc_start(); + } if (!sc_core::sc_end_of_simulation_invoked()) { diff --git a/src/simulator/simulator/Simulator.h b/src/simulator/simulator/Simulator.h index 05573c6a..5255169c 100644 --- a/src/simulator/simulator/Simulator.h +++ b/src/simulator/simulator/Simulator.h @@ -49,7 +49,7 @@ public: Simulator(DRAMSys::Config::Configuration configuration, std::filesystem::path resourceDirectory); - static void run(); + void run(); private: std::unique_ptr instantiateInitiator(const DRAMSys::Config::Initiator& initiator); diff --git a/tests/tests_configuration/reference.json b/tests/tests_configuration/reference.json index 820bf82c..f2cbf6fd 100644 --- a/tests/tests_configuration/reference.json +++ b/tests/tests_configuration/reference.json @@ -151,7 +151,8 @@ "StoreMode": "NoStorage", "ThermalSimulation": false, "UseMalloc": false, - "WindowSize": 1000 + "WindowSize": 1000, + "SimulationTime": 1e-3 }, "simulationid": "std::string_simulationId", "tracesetup": [ diff --git a/tests/tests_configuration/test_configuration.cpp b/tests/tests_configuration/test_configuration.cpp index 94ff53a2..d41781ac 100644 --- a/tests/tests_configuration/test_configuration.cpp +++ b/tests/tests_configuration/test_configuration.cpp @@ -39,7 +39,6 @@ #include #include #include -#include using namespace DRAMSys::Config; @@ -115,7 +114,8 @@ protected: DRAMSys::Config::StoreModeType::NoStorage, false, false, - 1000}; + 1000, + 1e-3}; DRAMSys::Config::MemSpec memSpec; @@ -328,7 +328,8 @@ TEST_F(ConfigurationTest, SimConfig) "StoreMode": "NoStorage", "ThermalSimulation": false, "UseMalloc": false, - "WindowSize": 1000 + "WindowSize": 1000, + "SimulationTime": 1e-3 } } )";