diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..089d44d1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +*.stl filter=lfs diff=lfs merge=lfs -text +*.data.gz filter=lfs diff=lfs merge=lfs -text +*.inst.gz filter=lfs diff=lfs merge=lfs -text +*.tdb filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 61e23e3d..c2403c1b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ /dram/build *.user *.tdb -!/DRAMSys/tests/*/expected/*.tdb +!tests/tests_regression/*/expected/*.tdb *.tdb-journal *.out /build-simulation diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cdca1806..39238ae7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,10 +7,7 @@ before_script: stages: - build - - test_DDR3 - - test_DDR4 - - test_HBM2 - - test_LPDDR4 + - test - coverage build: @@ -22,31 +19,36 @@ build: - mkdir -p coverage - mkdir -p build - cd build - - cmake -DDRAMSYS_COVERAGE_CHECK=ON ../DRAMSys + - cmake -DDRAMSYS_COVERAGE_CHECK=ON -DDRAMSYS_ENABLE_EXTENSIONS=ON -DDRAMSYS_EXTENSION_TRACE_ANALYZER_ENABLE=ON -DDRAMSYS_WITH_DRAMPOWER=ON .. - make -j 10 - find . -name "*.o" -type f -delete artifacts: paths: - build/ - - DRAMSys/tests/ + - tests/ - coverage/ expire_in: 2 days coverage: stage: coverage + needs: + - test_DDR3 + - test_DDR4 + - test_HBM2 + - test_LPDDR4 coverage: '/Total:\|(\d+\.?\d+\%)/' script: # delete all empty files since they produce errors - find coverage -size 0 -type f -delete - ls coverage/ -lah - lcov `find coverage -type f -exec echo "-a {}" \;` -o coverage/final.out - - lcov --remove coverage/final.out '*/systemc*/include/*' '*/traceAnalyzer/*' '*/gcc*/include/*' '/usr/include/*' '*/third_party/*' -o coverage/final_dramsys.out + - lcov --remove coverage/final.out '/build/_deps/*' '/lib/*' '/usr/*' -o coverage/final_dramsys.out - lcov --list coverage/final_dramsys.out include: - - '/DRAMSys/tests/DDR3/ci.yml' - - '/DRAMSys/tests/DDR4/ci.yml' - - '/DRAMSys/tests/HBM2/ci.yml' - - '/DRAMSys/tests/LPDDR4/ci.yml' + - 'tests/tests_regression/DDR3/ci.yml' + - 'tests/tests_regression/DDR4/ci.yml' + - 'tests/tests_regression/HBM2/ci.yml' + - 'tests/tests_regression/LPDDR4/ci.yml' #- '/DRAMSys/tests/dramsys-gem5/ci.yml' # Should be activated again when a new gitlab runner with right dependencies is used diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 8456cd1e..00000000 --- a/.gitmodules +++ /dev/null @@ -1,16 +0,0 @@ -[submodule "DRAMSys/library/src/common/third_party/DRAMPower"] - path = DRAMSys/library/src/common/third_party/DRAMPower - url = https://github.com/tukl-msd/DRAMPower.git - branch = rgr -[submodule "DRAMSys/unitTests/googletest"] - path = DRAMSys/unitTests/googletest - url = https://github.com/google/googletest.git -[submodule "DRAMSys/library/src/common/third_party/systemc"] - path = DRAMSys/library/src/common/third_party/systemc - url = https://github.com/accellera-official/systemc.git -[submodule "DRAMSys/library/src/common/third_party/sqlite-amalgamation"] - path = DRAMSys/library/src/common/third_party/sqlite-amalgamation - url = https://github.com/azadkuh/sqlite-amalgamation.git -[submodule "DRAMSys/library/src/common/third_party/nlohmann"] - path = DRAMSys/library/src/common/third_party/nlohmann - url = https://github.com/nlohmann/json diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..e8679d5c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,191 @@ +# Copyright (c) 2020, Technische Universität Kaiserslautern +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER +# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: +# Thomas Psota + +############################################### +### DRAMSys ### +############################################### +cmake_minimum_required(VERSION 3.13.0) + +set(PROJECT_NAME "DRAMSys 5.0") +set(PROJECT_SHORTNAME "DRAMSys") + +project(${PROJECT_NAME} VERSION "5.0") + +### CMake settings ### +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") +include(build_source_group) +include(diagnostics_print) +include(enable_extensions) +include(FetchContent) + +if(POLICY CMP0135) + cmake_policy(SET CMP0135 NEW) +endif() + +# Check if standalone build or being included as submodule +get_directory_property(DRAMSYS_IS_SUBMODULE PARENT_DIRECTORY) + +set_property(GLOBAL PROPERTY USE_FOLDERS ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +### Project settings ### +message(STATUS "CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}") +message(STATUS "CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}") +message(STATUS "" ) + +if(NOT DRAMSYS_IS_SUBMODULE) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +endif() + +### DRAMSys directories ### +set(DRAMSYS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") +set(DRAMSYS_LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib") +set(DRAMSYS_TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests") +set(DRAMSYS_RESOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources") +set(DRAMSYS_EXTENSIONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extensions") + +### Build options ### +option(DRAMSYS_BUILD_TESTS "Build DRAMSys unit tests" OFF) +option(DRAMSYS_VERBOSE_CMAKE_OUTPUT "Show detailed CMake output" OFF) +option(DRAMSYS_BUILD_CLI "Build DRAMSys Command Line Tool" ON) +option(DRAMSYS_COVERAGE_CHECK "Coverage check of DRAMSys" OFF) +option(DRAMSYS_WITH_GEM5 "Build DRAMSys with gem5 coupling" OFF) +option(DRAMSYS_WITH_DRAMPOWER "Build with DRAMPower support enabled." OFF) +option(DRAMSYS_ENABLE_EXTENSIONS "Enable proprietary DRAMSys extensions." OFF) + +### Compiler settings ### +set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ Standard") + +if(DRAMSYS_COVERAGE_CHECK) + message("== Coverage check enabled") + set(GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage") + set(GCC_COVERAGE_LINK_FLAGS "-coverage -lgcov") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") +endif() + + +############################################### +### Library Settings ### +############################################### + +### Detect OS threading library ### +find_package(Threads) + +### nlohmann_json ### +add_subdirectory(${DRAMSYS_LIBRARY_DIR}/nlohmann_json) + +### sqlite3 ### +add_subdirectory(${DRAMSYS_LIBRARY_DIR}/sqlite3) + +### GoogleTest ### +if(DRAMSYS_BUILD_TESTS) + FetchContent_Declare( + googletest + GIT_REPOSITORY https://github.com/google/googletest + GIT_TAG release-1.12.1) + + # For Windows: Prevent overriding the parent project's compiler/linker settings + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + FetchContent_MakeAvailable(googletest) + set_target_properties(gmock PROPERTIES FOLDER lib/gtest) + set_target_properties(gmock_main PROPERTIES FOLDER lib/gtest) + set_target_properties(gtest PROPERTIES FOLDER lib/gtest) + set_target_properties(gtest_main PROPERTIES FOLDER lib/gtest) +endif() + +### sqlite-amalgamation ### +# FetchContent_Declare( +# sqlite-amalgamation +# GIT_REPOSITORY https://github.com/azadkuh/sqlite-amalgamation.git +# GIT_TAG 3.38.2) +# +# set(SQLITE_ENABLE_RTREE ON CACHE BOOL "Enable R-Tree Feature") +# FetchContent_MakeAvailable(sqlite-amalgamation) +# set_target_properties(SQLite3 PROPERTIES FOLDER lib) +# add_library(sqlite::sqlite3 ALIAS SQLite3) + +### SystemC ### +FetchContent_Declare( + systemc + GIT_REPOSITORY https://github.com/accellera-official/systemc.git + GIT_TAG 2.3.4) + +FetchContent_MakeAvailable(systemc) +set_target_properties(systemc PROPERTIES FOLDER lib) + +### DRAMPower ### +if (DRAMSYS_WITH_DRAMPOWER) + FetchContent_Declare( + DRAMPower + GIT_REPOSITORY https://github.com/tukl-msd/DRAMPower + GIT_TAG 9e64a1b) + + FetchContent_MakeAvailable(DRAMPower) + set_target_properties(DRAMPower PROPERTIES FOLDER lib) +endif () + +############################################### +### Source Directory ### +############################################### + +add_subdirectory(src/util) +add_subdirectory(src/configuration) +add_subdirectory(src/libdramsys) + +if(DRAMSYS_BUILD_CLI) + add_subdirectory(src/simulator) +endif() + +if(DRAMSYS_ENABLE_EXTENSIONS) + dramsys_enable_extensions() +endif() + +############################################### +### Test Directory ### +############################################### + +if(DRAMSYS_BUILD_TESTS) + include( GoogleTest ) + include( CTest ) + add_subdirectory(tests) +endif() + +# Add DRAMSysgem5 +#if(DEFINED ENV{GEM5} AND DRAMSYS_WITH_GEM5) +# message("== gem5 coupling included") +# add_subdirectory(gem5) +#endif() + diff --git a/DRAMSys/DRAMSys.astylerc b/DRAMSys.astylerc similarity index 100% rename from DRAMSys/DRAMSys.astylerc rename to DRAMSys.astylerc diff --git a/DRAMSys/library/CMakeLists.txt b/DRAMSys/library/CMakeLists.txt deleted file mode 100644 index adcb857b..00000000 --- a/DRAMSys/library/CMakeLists.txt +++ /dev/null @@ -1,268 +0,0 @@ -# Copyright (c) 2020, Technische Universität Kaiserslautern -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER -# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Authors: -# Matthias Jung -# Lukas Steiner -# Derek Christ - -cmake_minimum_required(VERSION 3.10) - -# Project Name -project(DRAMSysLibrary) - -# Configuration: -set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ Version") -set(DCMAKE_SH="CMAKE_SH-NOTFOUND") - -option(DRAMSYS_WITH_DRAMPOWER "Build with DRAMPower support enabled." ON) - -# Add DRAMPower: -if (DRAMSYS_WITH_DRAMPOWER) -add_subdirectory(src/common/third_party/DRAMPower) -endif() - -# Add Configuration -add_subdirectory(src/common/configuration) - -# Add SystemC: -if(DEFINED ENV{SYSTEMC_HOME}) - find_library(SYSTEMC_LIBRARY - NAMES systemc SnpsVP - PATHS $ENV{SYSTEMC_HOME}/lib-$ENV{SYSTEMC_TARGET_ARCH}/ $ENV{SYSTEMC_HOME}/lib-linux64/ $ENV{SYSTEMC_HOME}/lib64 $ENV{SYSTEMC_HOME}/libso-$ENV{COWARE_CXX_COMPILER}/ - ) - message("== Building with external SystemC located in $ENV{SYSTEMC_HOME}") -else() - set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build Shared Libs") - add_subdirectory(src/common/third_party/systemc) - set(SYSTEMC_LIBRARY systemc) - message("== Building with SystemC submodule") -endif() - -if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/common/third_party/sqlite-amalgamation) - message("== Database recording included") - # Add sqlite3 Dependency: - set(BUILD_ENABLE_RTREE ON CACHE BOOL "Enable R-Tree Feature") - set(BUILD_ENABLE_RTREE ON) - add_subdirectory(src/common/third_party/sqlite-amalgamation) - - set(RECORDING_SOURCES - src/common/TlmRecorder.cpp - src/controller/ControllerRecordable.cpp - src/simulation/DRAMSysRecordable.cpp - src/simulation/dram/DramRecordable.cpp - ) -endif() - -if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/controller/checker/CheckerDDR5.cpp) - message("== DDR5 included") - set(DDR5_SOURCES - src/configuration/memspec/MemSpecDDR5.cpp - src/controller/checker/CheckerDDR5.cpp - src/simulation/dram/DramDDR5.cpp - ) -endif() - -if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/controller/checker/CheckerLPDDR5.cpp) - message("== LPDDR5 included") - set(LPDDR5_SOURCES - src/configuration/memspec/MemSpecLPDDR5.cpp - src/controller/checker/CheckerLPDDR5.cpp - src/simulation/dram/DramLPDDR5.cpp - ) -endif() - -if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/controller/checker/CheckerHBM3.cpp) - message("== HBM3 included") - set(HBM3_SOURCES - src/configuration/memspec/MemSpecHBM3.cpp - src/controller/checker/CheckerHBM3.cpp - src/simulation/dram/DramHBM3.cpp - ) -endif() - -add_library(DRAMSysLibrary - src/common/DebugManager.cpp - src/common/dramExtensions.cpp - src/common/tlm2_base_protocol_checker.h - src/common/utils.cpp - - src/configuration/Configuration.cpp - src/configuration/TemperatureSimConfig.h - - src/configuration/memspec/MemSpec.cpp - src/configuration/memspec/MemSpecDDR3.cpp - src/configuration/memspec/MemSpecDDR4.cpp - src/configuration/memspec/MemSpecLPDDR4.cpp - src/configuration/memspec/MemSpecWideIO.cpp - src/configuration/memspec/MemSpecWideIO2.cpp - src/configuration/memspec/MemSpecGDDR5.cpp - src/configuration/memspec/MemSpecGDDR5X.cpp - src/configuration/memspec/MemSpecGDDR6.cpp - src/configuration/memspec/MemSpecHBM2.cpp - src/configuration/memspec/MemSpecSTTMRAM.cpp - - src/controller/BankMachine.cpp - src/controller/Command.cpp - src/controller/ControllerIF.h - src/controller/Controller.cpp - - src/controller/checker/CheckerIF.h - src/controller/checker/CheckerDDR3.cpp - src/controller/checker/CheckerDDR4.cpp - src/controller/checker/CheckerLPDDR4.cpp - src/controller/checker/CheckerWideIO.cpp - src/controller/checker/CheckerWideIO2.cpp - src/controller/checker/CheckerGDDR5.cpp - src/controller/checker/CheckerGDDR5X.cpp - src/controller/checker/CheckerGDDR6.cpp - src/controller/checker/CheckerHBM2.cpp - src/controller/checker/CheckerSTTMRAM.cpp - - src/controller/cmdmux/CmdMuxIF.h - src/controller/cmdmux/CmdMuxOldest.cpp - src/controller/cmdmux/CmdMuxStrict.cpp - - src/controller/powerdown/PowerDownManagerIF.h - src/controller/powerdown/PowerDownManagerDummy.cpp - src/controller/powerdown/PowerDownManagerStaggered.cpp - - src/controller/refresh/RefreshManagerIF.h - src/controller/refresh/RefreshManagerDummy.cpp - src/controller/refresh/RefreshManagerAllBank.cpp - src/controller/refresh/RefreshManagerPerBank.cpp - src/controller/refresh/RefreshManagerPer2Bank.cpp - src/controller/refresh/RefreshManagerSameBank.cpp - - src/controller/respqueue/RespQueueIF.h - src/controller/respqueue/RespQueueFifo.cpp - src/controller/respqueue/RespQueueReorder.cpp - - src/controller/scheduler/SchedulerIF.h - src/controller/scheduler/SchedulerFifo.cpp - src/controller/scheduler/SchedulerFrFcfs.cpp - src/controller/scheduler/SchedulerFrFcfsGrp.cpp - src/controller/scheduler/SchedulerGrpFrFcfs.cpp - src/controller/scheduler/SchedulerGrpFrFcfsWm.cpp - - src/controller/scheduler/BufferCounterIF.h - src/controller/scheduler/BufferCounterBankwise.cpp - src/controller/scheduler/BufferCounterReadWrite.cpp - src/controller/scheduler/BufferCounterShared.cpp - - src/error/eccbaseclass.cpp - src/error/ecchamming.cpp - src/error/errormodel.cpp - - src/error/ECC/Bit.cpp - src/error/ECC/ECC.cpp - src/error/ECC/Word.cpp - - src/simulation/Arbiter.cpp - src/simulation/AddressDecoder.cpp - src/simulation/DRAMSys.cpp - src/simulation/ReorderBuffer.h - src/simulation/TemperatureController.cpp - - src/simulation/dram/Dram.cpp - src/simulation/dram/DramDDR3.cpp - src/simulation/dram/DramDDR4.cpp - src/simulation/dram/DramLPDDR4.cpp - src/simulation/dram/DramWideIO.cpp - src/simulation/dram/DramWideIO2.cpp - src/simulation/dram/DramGDDR5.cpp - src/simulation/dram/DramGDDR5X.cpp - src/simulation/dram/DramGDDR6.cpp - src/simulation/dram/DramHBM2.cpp - src/simulation/dram/DramSTTMRAM.cpp - - ${RECORDING_SOURCES} - ${DDR5_SOURCES} - ${LPDDR5_SOURCES} - ${HBM3_SOURCES} -) - -if(DEFINED DDR5_SOURCES) - target_compile_definitions(DRAMSysLibrary PRIVATE DDR5_SIM) -endif() - -if(DEFINED LPDDR5_SOURCES) - target_compile_definitions(DRAMSysLibrary PRIVATE LPDDR5_SIM) -endif() - -if(DEFINED HBM3_SOURCES) - target_compile_definitions(DRAMSysLibrary PRIVATE HBM3_SIM) -endif() - -if(DEFINED ENV{LIBTHREED_ICE_HOME}) - message("== Thermal simulation available") - target_compile_definitions(DRAMSysLibrary PRIVATE THERMALSIM) - target_include_directories(DRAMSysLibrary - PRIVATE $ENV{LIBTHREED_ICE_HOME}/include/ - ) - find_library(3DICE_LIBRARY NAMES threed-ice-2.2.4 PATHS $ENV{LIBTHREED_ICE_HOME}/lib/) - target_link_libraries(DRAMSysLibrary - PRIVATE ${3DICE_LIBRARY} - ) -endif() - -if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/common/third_party/sqlite-amalgamation) - target_include_directories(DRAMSysLibrary - PUBLIC src/common/third_party/sqlite-amalgamation/ - ) - target_link_libraries(DRAMSysLibrary - PRIVATE sqlite3::sqlite3 - ) -endif() - -# Build: -target_include_directories(DRAMSysLibrary - PRIVATE src/common/third_party/DRAMPower/src/ - PUBLIC $ENV{SYSTEMC_HOME}/include/ -) - -if(EXISTS $ENV{SYSTEMC_HOME}/include/tlm/) - target_include_directories(DRAMSysLibrary - PUBLIC $ENV{SYSTEMC_HOME}/include/tlm/ - ) -endif() - -target_link_libraries(DRAMSysLibrary - PUBLIC ${SYSTEMC_LIBRARY} - PUBLIC DRAMSysConfiguration -) - -if (DRAMSYS_WITH_DRAMPOWER) -target_compile_definitions(DRAMSysLibrary PRIVATE DRAMPOWER) - -target_link_libraries(DRAMSysLibrary - PRIVATE DRAMPower -) -endif() diff --git a/DRAMSys/library/resources/.gitignore b/DRAMSys/library/resources/.gitignore deleted file mode 100644 index 0d20b648..00000000 --- a/DRAMSys/library/resources/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.pyc diff --git a/DRAMSys/library/resources/configs/simulator/ddr3.json b/DRAMSys/library/resources/configs/simulator/ddr3.json deleted file mode 100644 index 99ccdb45..00000000 --- a/DRAMSys/library/resources/configs/simulator/ddr3.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": false, - "SimulationName": "ddr3", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/ddr3_ecc.json b/DRAMSys/library/resources/configs/simulator/ddr3_ecc.json deleted file mode 100644 index e148c3aa..00000000 --- a/DRAMSys/library/resources/configs/simulator/ddr3_ecc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Hamming", - "EnableWindowing": true, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": true, - "SimulationName": "ddr3", - "SimulationProgressBar": true, - "StoreMode": "ErrorModel", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/ddr4.json b/DRAMSys/library/resources/configs/simulator/ddr4.json deleted file mode 100644 index 05cd86e2..00000000 --- a/DRAMSys/library/resources/configs/simulator/ddr4.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": false, - "SimulationName": "ddr4", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/ddr5.json b/DRAMSys/library/resources/configs/simulator/ddr5.json deleted file mode 100644 index d3987d37..00000000 --- a/DRAMSys/library/resources/configs/simulator/ddr5.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": false, - "SimulationName": "ddr5", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/hbm2.json b/DRAMSys/library/resources/configs/simulator/hbm2.json deleted file mode 100644 index 608aec41..00000000 --- a/DRAMSys/library/resources/configs/simulator/hbm2.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": false, - "SimulationName": "hbm2", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/hbm3.json b/DRAMSys/library/resources/configs/simulator/hbm3.json deleted file mode 100644 index 901dc498..00000000 --- a/DRAMSys/library/resources/configs/simulator/hbm3.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": false, - "SimulationName": "hbm3", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/lpddr4.json b/DRAMSys/library/resources/configs/simulator/lpddr4.json deleted file mode 100644 index 6ea5b1bd..00000000 --- a/DRAMSys/library/resources/configs/simulator/lpddr4.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": false, - "SimulationName": "lpddr4", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/stt-mram.json b/DRAMSys/library/resources/configs/simulator/stt-mram.json deleted file mode 100644 index 3248e9f0..00000000 --- a/DRAMSys/library/resources/configs/simulator/stt-mram.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": false, - "SimulationName": "stt-mram", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/wideio.json b/DRAMSys/library/resources/configs/simulator/wideio.json deleted file mode 100644 index 0c285f79..00000000 --- a/DRAMSys/library/resources/configs/simulator/wideio.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "simconfig": { - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": true, - "ErrorCSVFile": "../../DRAMSys/library/resources/error/wideio.csv", - "ErrorChipSeed": 42, - "PowerAnalysis": true, - "SimulationName": "wideio", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/wideio_ecc.json b/DRAMSys/library/resources/configs/simulator/wideio_ecc.json deleted file mode 100644 index 80acc3be..00000000 --- a/DRAMSys/library/resources/configs/simulator/wideio_ecc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "simconfig": { - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Hamming", - "EnableWindowing": true, - "ErrorCSVFile": "../../DRAMSys/library/resources/error/wideio.csv", - "ErrorChipSeed": 42, - "PowerAnalysis": true, - "SimulationName": "wideio_ecc", - "SimulationProgressBar": true, - "StoreMode": "ErrorModel", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/simulator/wideio_thermal.json b/DRAMSys/library/resources/configs/simulator/wideio_thermal.json deleted file mode 100644 index 6ce8c0a4..00000000 --- a/DRAMSys/library/resources/configs/simulator/wideio_thermal.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "simconfig": { - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": true, - "ErrorCSVFile": "../../DRAMSys/library/resources/error/wideio.csv", - "ErrorChipSeed": 42, - "PowerAnalysis": true, - "SimulationName": "wideio", - "SimulationProgressBar": true, - "StoreMode": "Store", - "ThermalSimulation": true, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/library/resources/configs/thermalsim/config.json b/DRAMSys/library/resources/configs/thermalsim/config.json deleted file mode 100644 index b88ed84c..00000000 --- a/DRAMSys/library/resources/configs/thermalsim/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "thermalsimconfig": { - "TemperatureScale": "Celsius", - "StaticTemperatureDefaultValue": 89, - "ThermalSimPeriod":100, - "ThermalSimUnit":"us", - "PowerInfoFile": "powerInfo.json", - "IceServerIp": "127.0.0.1", - "IceServerPort": 11880, - "SimPeriodAdjustFactor" : 10, - "NPowStableCyclesToIncreasePeriod": 5, - "GenerateTemperatureMap": true, - "GeneratePowerMap": true - } -} diff --git a/DRAMSys/library/resources/configs/thermalsim/core.flp b/DRAMSys/library/resources/configs/thermalsim/core.flp deleted file mode 100755 index e85e6801..00000000 --- a/DRAMSys/library/resources/configs/thermalsim/core.flp +++ /dev/null @@ -1,45 +0,0 @@ -CPUs : - - position 0, 0 ; - dimension 2750, 4300 ; - -GPU : - - position 3350, 0 ; - dimension 2750, 4000 ; - -BASEBAND1 : - - position 4250, 4000 ; - dimension 1850, 3300 ; - -BASEBAND2 : - - position 3350, 7300 ; - dimension 2750, 3300 ; - -LLCACHE : - - position 0, 4300 ; - dimension 1900, 3000 ; - -DRAMCTRL1 : - - position 1900, 4300 ; - dimension 850, 3000 ; - -DRAMCTRL2 : - - position 3350, 4000 ; - dimension 900, 3300 ; - -TSVS : - - position 2750, 2300 ; - dimension 600, 6000 ; - -ACELLERATORS : - - position 0, 7300 ; - dimension 2750, 3300 ; - diff --git a/DRAMSys/library/resources/configs/thermalsim/mem.flp b/DRAMSys/library/resources/configs/thermalsim/mem.flp deleted file mode 100755 index 29d02254..00000000 --- a/DRAMSys/library/resources/configs/thermalsim/mem.flp +++ /dev/null @@ -1,16 +0,0 @@ -channel0 : - position 150, 100 ; - dimension 2600, 5200 ; - -channel1 : - position 3350, 100 ; - dimension 2600, 5200 ; - -channel2 : - position 150, 5300 ; - dimension 2600, 5200 ; - -channel3 : - position 3350, 5300 ; - dimension 2600, 5200 ; - diff --git a/DRAMSys/library/resources/configs/thermalsim/powerInfo.json b/DRAMSys/library/resources/configs/thermalsim/powerInfo.json deleted file mode 100644 index 524f690f..00000000 --- a/DRAMSys/library/resources/configs/thermalsim/powerInfo.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "powerInfo": { - "dram_die_channel0": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel1": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel2": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel3": { - "init_pow": 0, - "threshold": 1.0 - } - } -} diff --git a/DRAMSys/library/resources/configs/thermalsim/stack.stk b/DRAMSys/library/resources/configs/thermalsim/stack.stk deleted file mode 100755 index ec74f020..00000000 --- a/DRAMSys/library/resources/configs/thermalsim/stack.stk +++ /dev/null @@ -1,49 +0,0 @@ -material SILICON : - thermal conductivity 1.30e-4 ; - volumetric heat capacity 1.628e-12 ; - -material BEOL : - thermal conductivity 2.25e-6 ; - volumetric heat capacity 2.175e-12 ; - -material COPPER : - thermal conductivity 4.01e-04 ; - volumetric heat capacity 3.37e-12 ; - -top heat sink : - //sink height 1e03, area 100e06, material COPPER ; - //spreader height 0.5e03, area 70e06, material SILICON ; - heat transfer coefficient 1.3e-09 ; - temperature 318.15 ; -dimensions : - chip length 6100, width 10600 ; - cell length 100, width 100 ; - - -layer PCB : - height 10 ; - material BEOL ; - -die DRAM : - layer 58.5 SILICON ; - source 2 SILICON ; - layer 1.5 BEOL ; - layer 58.5 SILICON ; - - -stack: - die DRAM_DIE DRAM floorplan "./mem.flp" ; - layer CONN_TO_PCB PCB ; - -solver: - transient step 0.01, slot 0.05 ; - initial temperature 300.0 ; - -output: - Tflpel(DRAM_DIE.channel0 , "temp_flp_element_ch0.txt" , average , slot ); - Tflpel(DRAM_DIE.channel1 , "temp_flp_element_ch1.txt" , average , slot ); - Tflpel(DRAM_DIE.channel2 , "temp_flp_element_ch2.txt" , average , slot ); - Tflpel(DRAM_DIE.channel3 , "temp_flp_element_ch3.txt" , average , slot ); - Tmap (DRAM_DIE, "output1.txt", slot) ; - Pmap (DRAM_DIE, "output2.txt", slot) ; - diff --git a/DRAMSys/library/resources/error/wideio.csv b/DRAMSys/library/resources/error/wideio.csv deleted file mode 100644 index 22e0d502..00000000 --- a/DRAMSys/library/resources/error/wideio.csv +++ /dev/null @@ -1,24 +0,0 @@ -75 64 0 0 0 0 -80 64 0 0 0 0 -85 64 0 0 0 0 -89 64 0 0 0 0 -75 127 0 0 0 0 -80 127 0 0 0 0 -85 127 0 0 0 0 -89 127 2 0.03 2 0.06 -75 145 0 0 0 0 -80 145 0 0 0 0 -85 145 0 0 1 0.03 -89 145 13 0.195 3 0.09 -75 164 0 0 0 0 -80 164 0 0 0 0 -85 164 8 0.12 2 0.06 -89 164 24 0.36 4 0.12 -75 182 0 0 0 0 -80 182 0 0 1 0.03 -85 182 16 0.24 2 0.06 -89 182 41 0.615 8 0.24 -75 200 0 0 0 0 -80 200 5 0.075 3 0.09 -85 200 24 0.36 4 0.12 -89 200 67 1.005 15 0.45 diff --git a/DRAMSys/library/resources/scripts/address_scrambler.pl b/DRAMSys/library/resources/scripts/address_scrambler.pl deleted file mode 100644 index 65396cb8..00000000 --- a/DRAMSys/library/resources/scripts/address_scrambler.pl +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/perl -use warnings; -use strict; - -my $filename = shift || die; - -open(FH, "$filename"); - -while() -{ - # Get all the data adress: - $_ =~ /(\d+):\s+(\w+)\s+0x([\w\d]+)/; - my $time = $1; - my $command = $2; - my $address = $3; - my $new_address; - - # Convert to binary: - $address = sprintf( "%032b", hex( $address ) ); - - # example: - # 31 0 - # 00000000000000000000000000000001 - # 00000000000000000000010000000000 - - # Swap adresses: - $new_address = substr($address,31 - 31,1). # R 31 - substr($address,31 - 30,1). # R 30 - substr($address,31 - 29,1). # R 29 - substr($address,31 - 28,1). # R 28 - substr($address,31 - 27,1). # R 27 - substr($address,31 - 26,1). # R 26 - substr($address,31 - 25,1). # R 25 - substr($address,31 - 24,1). # R 24 - substr($address,31 - 23,1). # R 23 - substr($address,31 - 22,1). # R 22 - substr($address,31 - 21,1). # R 21 - substr($address,31 - 20,1). # R 20 - substr($address,31 - 19,1). # R 19 - substr($address,31 - 18,1). # R 18 - substr($address,31 - 17,1). # R 17 - substr($address,31 - 16,1). # R 16 - substr($address,31 - 8,1). # R 15 - substr($address,31 - 7,1). # R 14 - substr($address,31 - 6,1). # R 13 - substr($address,31 - 11,1). # B 12 - substr($address,31 - 9,1). # B 11 - substr($address,31 - 0,1). # B 10 - substr($address,31 - 15,1). # C 9 - substr($address,31 - 14,1). # C 8 - substr($address,31 - 13,1). # C 7 - substr($address,31 - 12,1). # C 6 - substr($address,31 - 10,1). # C 5 - substr($address,31 - 5,1). # C 4 - substr($address,31 - 4,1). # C 3 - substr($address,31 - 3,1). # C 2 - substr($address,31 - 2,1). # C 1 - substr($address,31 - 1,1); # C 0 - - $new_address = sprintf("%X", oct( "0b$new_address" ) ); - - print $time.":\t".$command."\t0x".$new_address."\n"; -} - diff --git a/DRAMSys/library/resources/scripts/analyse_trace.pl b/DRAMSys/library/resources/scripts/analyse_trace.pl deleted file mode 100644 index 671179c2..00000000 --- a/DRAMSys/library/resources/scripts/analyse_trace.pl +++ /dev/null @@ -1,378 +0,0 @@ -#!/usr/bin/perl -use List::Util 'max'; -use warnings; -use strict; - -my $filename = shift || die("Please provide a input STL file"); - -my $numberOfRows = 16384; -my $numberOfBanks = 8; -my $numberOfColumns = 1024; -my $numberOfBytes = 8; # Byte Offset from e.g. DIMM - -my $numberOfBits = 32; -my $burstLength = 8; - -my $addressCorrection = 1; - -my $numberOfRowBits = log($numberOfRows)/log(2); -my $numberOfBankBits = log($numberOfBanks)/log(2); -my $numberOfColumnBits = log($numberOfColumns)/log(2); -my $numberOfByteBits = log($numberOfBytes)/log(2); -my $numberOfBurstBits = log($burstLength)/log(2); - -print "Number of Address Bits:\t".$numberOfBits."\n\n"; -print "Number of Row Bits:\t".$numberOfRowBits."\n"; -print "Number of Bank Bits:\t".$numberOfBankBits."\n"; -print "Number of Col Bits:\t".$numberOfColumnBits."\n"; -print ">Burst Bits in Col:\t".$numberOfBurstBits."\n"; -print "Number of Byte Bits:\t".$numberOfByteBits."\n"; - -my $numberOfXBits = $numberOfBits - $numberOfRowBits - $numberOfBankBits - $numberOfColumnBits - $numberOfByteBits; - -print "Number of Unused Bits:\t".$numberOfXBits."\n"; -print "\n"; -print "\n"; - -open(FH, "$filename"); - -my @activityCounter; -my @mapping; - -# Initialize: -for(my $i = 0; $i < $numberOfBits; $i++) -{ - $activityCounter[$i] = 0; -} - -for(my $i = $numberOfXBits-1; $i >= 0; $i--) -{ - $mapping[$numberOfBits-($numberOfXBits-$i)] = "X".$i; -} - -my $old_address = "00000000000000000000000000000000"; - -while() -{ - # Get the adress: - $_ =~ /\d+:\s+\w+\s+0x([\w\d]+)\s*[\d\w]*/; - my $address = $1; - $address = sprintf( "%0".$numberOfBits."b", hex( $address ) * $addressCorrection ); - - # $i = 0 :: most significant bit - for(my $i = 0; $i < $numberOfBits; $i++) - { - my $new = substr($address, $i, 1); - my $old = substr($old_address, $i, 1); - - if($new ne $old) - { - $activityCounter[$numberOfBits-1-$i]++; - } - } - - $old_address = $address; -} - -close(FH); - -# Make Consistency Check: -for(my $i = 0; $i < ($numberOfByteBits+$numberOfBankBits); $i++) -{ - if($activityCounter[$i] != 0) - { - print "Bits of lower C part or Y have toggled, this should not happen\n"; - exit -1; - } -} - -# Print bit numbers: -print "Bits\t\t"; -for(my $i = $numberOfBits-1; $i >= 0; $i--) -{ - print $i."\t"; -} - -#Print Activity -print "\nActivity\t"; -for(my $i = $numberOfBits-1; $i >= 0; $i--) -{ - print $activityCounter[$i]."\t"; -} - -#Print relative Activity -print "\nPercent\t\t"; -my $sum = 0; -my @percent; -for(my $i = $numberOfBits-1; $i >= 0; $i--) -{ - $sum = $sum + $activityCounter[$i]; -} - -for(my $i = $numberOfBits-1; $i >= 0; $i--) -{ - my $string = $activityCounter[$i]/$sum*100; - $string = sprintf("%.2f", $string); - $string =~ s/\./,/g; - $percent[$i] = $string."%"; - $string .= "%\t"; - print $string; -} - -#Fix Byte Offset: -for(my $i = 0; $i < $numberOfByteBits; $i++) -{ - $activityCounter[$i] = -1; - $mapping[$i] = "Y$i"; -} - -#Fix Constant 0 Bits in Column due to Burstlength: -for(my $i=0; $i < $numberOfBurstBits; $i++) -{ - $activityCounter[$numberOfByteBits + $i] = -1; - $mapping[$numberOfByteBits + $i] = "C$i"; -} - -#Search Column Locations -for(my $i = $numberOfBurstBits; $i < $numberOfColumnBits; $i++) -{ - my $maximum = max(@activityCounter); - my ($index) = grep $activityCounter[$_] == $maximum , 0.. $#activityCounter; - $mapping[$index] = "C$i"; - $activityCounter[$index] = -1; -} - -#Search Bank Locations -for(my $i = 0; $i < $numberOfBankBits; $i++) -{ - my $maximum = max(@activityCounter); - my ($index) = grep $activityCounter[$_] == $maximum , 0.. $#activityCounter; - $mapping[$index] = "B$i"; - $activityCounter[$index] = -1; -} - -#Search Row Locations -for(my $i = 0; $i < $numberOfRowBits; $i++) -{ - my $maximum = max(@activityCounter); - my ($index) = grep $activityCounter[$_] == $maximum , 0.. $#activityCounter; - $mapping[$index] = "R$i"; - $activityCounter[$index] = -1; -} - -#Print final mapping -my $header = ' -strict graph G -{ - forcelabels=true; - rankdir=LR; - { - graph [fontname = "courier"]; - node [shape=square, fontname="courier", fixedsize=true, width=0.85, height=0.85] - edge [fontname = "courier"]; -'; - -for(my $i = $numberOfBits-1; $i >= 0; $i--) -{ - $header .= " $i [pos=\"".($numberOfBits-1-$i).",0!\", xlp=\"-5,0\", label=\"$i\n".$percent[$i]."\" ]\n"; -} - -my $pos = 0; -for(my $i = $numberOfXBits-1; $i >= 0; $i--) -{ - my $pos2 = $numberOfBits-$pos-1; - $header .= " X$i [ label=\"$pos2\nX$i\" pos=\"$pos,-5!\"]\n"; - $pos++; -} -for(my $i = $numberOfBankBits-1; $i >= 0; $i--) -{ - my $pos2 = $numberOfBits-$pos-1; - $header .= " B$i [ label=\"$pos2\nB$i\" pos=\"$pos,-5!\"]\n"; - $pos++; -} -for(my $i = $numberOfRowBits-1; $i >= 0; $i--) -{ - my $pos2 = $numberOfBits-$pos-1; - $header .= " R$i [ label=\"$pos2\nR$i\" pos=\"$pos,-5!\"]\n"; - $pos++; -} -for(my $i = $numberOfColumnBits-1; $i >= 0; $i--) -{ - my $pos2 = $numberOfBits-$pos-1; - $header .= " C$i [ label=\"$pos2\nC$i\" pos=\"$pos,-5!\"]\n"; - $pos++; -} -for(my $i = $numberOfByteBits-1; $i >= 0; $i--) -{ - my $pos2 = $numberOfBits-$pos-1; - $header .= " Y$i [ label=\"$pos2\nY$i\" pos=\"$pos,-5!\"]\n"; - $pos++; -} -$header .= " }\n"; - -print "\nMapping\t\t"; -my $maximum = max(@activityCounter); -for(my $i = $numberOfBits-1; $i >= 0; $i--) -{ - if($mapping[$i] =~ /X\d/) - { - $header .= "$i -- ".$mapping[$i]." [ color=\"grey\"];\n"; - } - elsif($mapping[$i] =~ /B\d/) - { - $header .= "$i -- ".$mapping[$i]." [ color=\"green\"];\n"; - } - elsif($mapping[$i] =~ /R\d/) - { - $header .= "$i -- ".$mapping[$i]." [ color=\"blue\"];\n"; - } - elsif($mapping[$i] =~ /C\d/) - { - $header .= "$i -- ".$mapping[$i]." [ color=\"red\"];\n"; - } - elsif($mapping[$i] =~ /Y\d/) - { - $header .= "$i -- ".$mapping[$i]." [ color=\"grey\"];\n"; - } - print $mapping[$i]."\t"; -} -$header .= "}"; -print "\n"; - -#Generate Scrambled Trace: - -#Generate Configuration for 32x32 MUX: -# Assumption e.g. 32 bit: -# B R C -# X X B B B R R R R R R R R R R R R R R C C C C C C C C C C Y Y Y -# 31 30 29 27 26 13 12 3 2 0 -# A B C D E F -# -#print "A:".($numberOfBits-1)."\n"; -#print "B:".($numberOfBits-$numberOfXBits-1)."\n"; -#print "C:".($numberOfBits-$numberOfXBits-$numberOfBankBits-1)."\n"; -#print "D:".($numberOfBits-$numberOfXBits-$numberOfBankBits-$numberOfRowBits-1)."\n"; -#print "E:".($numberOfBits-$numberOfXBits-$numberOfBankBits-$numberOfRowBits-$numberOfColumnBits-1)."\n"; -#print "F:".($numberOfBits-$numberOfXBits-$numberOfBankBits-$numberOfRowBits-$numberOfColumnBits-$numberOfByteBits)."\n"; - -my @confVectorDecimal; -my @checkVector; -my $XCounter = 0; -my $rowCounter = 0; -my $bankCounter = 0; -my $columnCounter = 0; -my $byteCounter = 0; - -for(my $i = $numberOfBits-1; $i >= 0; $i--) -{ - if($mapping[$i] =~ /X(\d+)/) - { - my $idx = $numberOfBits-$numberOfXBits+$1; - #print "\$1=".$1." i=".$i." idx=".$idx." mapping=".$mapping[$i]."\n"; - $confVectorDecimal[$idx] = $i; - $checkVector[$idx] = "X"; - } - elsif($mapping[$i] =~ /B(\d+)/) - { - my $idx = $numberOfBits-$numberOfXBits-$numberOfBankBits+$1; - #print "\$1=".$1." i=".$i." idx=".$idx." mapping=".$mapping[$i]."\n"; - $confVectorDecimal[$idx] = $i; - $checkVector[$idx] = "B"; - } - elsif($mapping[$i] =~ /R(\d+)/) - { - my $idx = $numberOfBits-$numberOfXBits-$numberOfBankBits-$numberOfRowBits+$1; - #print "\$1=".$1." i=".$i." idx=".$idx." mapping=".$mapping[$i]."\n"; - $confVectorDecimal[$idx] = $i; - $checkVector[$idx] = "R"; - } - elsif($mapping[$i] =~ /C(\d+)/) - { - my $idx = $numberOfBits-$numberOfXBits-$numberOfBankBits-$numberOfRowBits-$numberOfColumnBits+$1; - #print "\$1=".$1." i=".$i." idx=".$idx." mapping=".$mapping[$i]."\n"; - $confVectorDecimal[$idx] = $i; - $checkVector[$idx] = "C"; - } - elsif($mapping[$i] =~ /Y(\d+)/) - { - my $idx = $numberOfBits-$numberOfXBits-$numberOfBankBits-$numberOfRowBits-$numberOfColumnBits-$numberOfByteBits+$1; - #print "\$1=".$1." i=".$i." idx=".$idx." mapping=".$mapping[$i]."\n"; - $confVectorDecimal[$idx] = $i; - $checkVector[$idx] = "Y"; - } -} - -print "\n"; -print "\n"; -print "Configuration Vector for the mapping "; -for(my $m = $numberOfBits-1; $m >= 0; $m--) -{ - print $checkVector[$m]; -} -print ":\n\n"; - -for(my $m = $numberOfBits-1; $m >= 0; $m--) -{ - #Debug: - print "mux: $m\t-->\t".$confVectorDecimal[$m]."\n"; -} - -print "\n"; -print "\n"; - -for(my $m = $numberOfBits-1; $m >= 0; $m--) -{ - print sprintf( "%05b", $confVectorDecimal[$m] ); -} -print "\n"; -print "\n"; - -# Generate Graph -my $dotname; -my $pdfname; -my $stlname; - -if($filename =~ /(.+)\.stl/) -{ - $dotname = $1.".dot"; - $pdfname = $1.".pdf"; - $stlname = $1."_scram.stl"; - - open(FH,">$dotname"); - print FH $header; - close(FH); - system("neato -o $pdfname -Tpdf $dotname"); -} - - -open(FH, "$filename"); -open(SH, ">$stlname"); - -while() -{ - # Get all the data adress: - $_ =~ /(\d+):\s+(\w+)\s+0x([\w\d]+)/; # XXX - my $time = $1; - my $command = $2; - my $address = $3; - my $new_address; - - # Convert to binary: - $address = sprintf( "%032b", hex( $address ) ); - - # Swap adresses: - $new_address = ""; - for(my $m = $numberOfBits-1; $m >= 0; $m--) - { - #print $confVectorDecimal[$m]."\n"; - $new_address .= substr($address,$numberOfBits-1-$confVectorDecimal[$m],1); - } - - # Convert to Hex: - $new_address = sprintf("%X", oct( "0b$new_address" ) ); - - print SH $time.":\t".$command."\t0x".$new_address."\n"; -} - -close(FH); -close(SH); diff --git a/DRAMSys/library/resources/scripts/generateTrace.py b/DRAMSys/library/resources/scripts/generateTrace.py deleted file mode 100644 index ba22f861..00000000 --- a/DRAMSys/library/resources/scripts/generateTrace.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/python -# This script generates an example trace for DDR3 -# -# -# -# -# 26 downto 13 --> 2^14 = 16384 -# Burstlength = 8 --> 8 down bits always zero --> 12 downto 3 --> 7 --> 2^7 = 128 -# 2^3 = 8 -# - -numberOfRows = 16384 -numberOfColumns = 128 -byteOffset = 64 -bankOffset = numberOfRows * numberOfColumns - -# Write to Bank 0 -for x in range(0, bankOffset): - print "{0:d}:\tread\t0x{1:X}".format(x,(x*byteOffset)) - -# Write to Bank 1 -for x in range(bankOffset, 2*bankOffset): - print "{0:d}:\tread\t0x{1:X}".format(x,(x*byteOffset)) diff --git a/DRAMSys/library/resources/scripts/memoryHog.pl b/DRAMSys/library/resources/scripts/memoryHog.pl deleted file mode 100644 index 0d2cf321..00000000 --- a/DRAMSys/library/resources/scripts/memoryHog.pl +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/perl -w -use warnings; -use strict; - -open(LINEAR, "> ../traces/linear.stl"); -open(RANDOM, "> ../traces/random.stl"); - -my $length = shift || die ("please give length of traces"); -my $size = 0x40; - -for(my $i=0; $i < $length; $i++) -{ - my $r = int(rand($length)); - #print $r." ".($size*$r)."\n"; - - print LINEAR "$i: read ".sprintf("0x%x",($size*$i))."\n"; - print RANDOM "$i: read ".sprintf("0x%x",($size*$r))."\n"; - - #my $rw = int(rand(2))%2; - #if($rw == 0) - #{ - # print LINEAR "$i: read ".sprintf("0x%x",($size*$i))."\n"; - # print RANDOM "$i: read ".sprintf("0x%x",($size*$r))."\n"; - #} - #else - #{ - # print LINEAR "$i: write ".sprintf("0x%x",($size*$i))."\n"; - # print RANDOM "$i: write ".sprintf("0x%x",($size*$r))."\n"; - #} -} - - -close(LINEAR); -close(RANDOM); diff --git a/DRAMSys/library/resources/scripts/stride_detection.pl b/DRAMSys/library/resources/scripts/stride_detection.pl deleted file mode 100644 index c15b2c28..00000000 --- a/DRAMSys/library/resources/scripts/stride_detection.pl +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/perl -use List::Util 'max'; -use warnings; -use strict; - -my $filename = shift || die("Please provide a input STL file"); -my $command = shift || die ("Pleas provide read/write"); - -open(FH, "$filename"); - -my $old_address = 0; -my %histogram; -my $command_occurance = 0; - -while() -{ - # Get the adress: - $_ =~ /\d+:\s+(\w+)\s+0x([\w\d]+)\s*[\d\w]*/; - if($command eq $1) - { - my $address = hex($2); - my $distance = $address - $old_address; - $histogram{$distance} ++; - $old_address = $address; - $command_occurance++; - } -} - -foreach my $key ( keys %histogram) -{ - my $percent = $histogram{$key}/$command_occurance; - my $hexkey = sprintf( "%032b", abs($key) ); - print "0x".$hexkey." ".abs($key)." = ".$histogram{$key}." (".$percent.")\n"; -} diff --git a/DRAMSys/library/resources/scripts/traceGenerationForNNTraining.pl b/DRAMSys/library/resources/scripts/traceGenerationForNNTraining.pl deleted file mode 100644 index 58a534bc..00000000 --- a/DRAMSys/library/resources/scripts/traceGenerationForNNTraining.pl +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/perl -use warnings; -use strict; - -my $phaseLength = 100; -my $phaseStatus = 0; -my $max = 100000; -my $base = 0; -my $maxAddressExp = 26; -my $maxAddress = 2**$maxAddressExp; - -for(my $i = 0; $i < $max; $i++) -{ - if($phaseStatus == 0) # Linear - { - my $addr = (($base << 6) + (($i % $phaseLength) << 6)) % $maxAddress; - print "$i: read 0x".sprintf("%x", $addr)."\n"; - } - else # Random - { - my $addr = (rand(2**($maxAddressExp-6))) << 6; - print "$i: read 0x".sprintf("%x", $addr)."\n"; - } - - if($i % 100 == 0 && $i != 0) - { - $phaseStatus = ($phaseStatus == 0) ? 1 : 0; - $base = rand(2**($maxAddressExp-6)); - } -} - diff --git a/DRAMSys/library/resources/scripts/trace_gen.py b/DRAMSys/library/resources/scripts/trace_gen.py deleted file mode 100755 index a2b42f42..00000000 --- a/DRAMSys/library/resources/scripts/trace_gen.py +++ /dev/null @@ -1,137 +0,0 @@ -#! /usr/bin/env python3 -# vim: set fileencoding=utf-8 - -# Copyright (c) 2018, Technische Universität Kaiserslautern -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER -# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Author: Éder F. Zulian - -import ctypes - -# A trace file is a pre-recorded file containing memory transactions. Each -# memory transaction has a timestamp that tells the simulator when it shall -# happen, a transaction type (read or write) and a memory address given in -# hexadecimal. -# -# Here is an example syntax: -# -# ``` -# # Comment lines begin with # -# # [clock-cyle]: [write|read] [hex-address] -# 31: read 0x400140 -# 33: read 0x400160 -# 56: write 0x7fff8000 -# 81: read 0x400180 -# ``` -# -# The timestamp corresponds to the time the request is to be issued and it is -# given in cycles of the bus master device. Example: the device is a FPGA with -# frequency 200 MHz (clock period of 5 ns). If the timestamp is 10 it means -# that the request is to be issued when time is 50 ns. -# - -# The default values given as example assume the following address mapping: -# -# DIMM Characteristics: -# Byte Offset (Y): 8 [0:2] (8-byte-wide memory module, i.e., 64-bit-wide data bus) -> 3 bit -# Cols (C): 1K [3:12] (A0 - A9) -> 10 bit -# Rows (R): 128K [13:29] (A0 - A16) -> 17 bit -# Bank (B): 8 [30:32] (BA0 - BA2) -> 3 bit -# -# 3 3 3 | 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 | 1 1 1 -# 2 1 0 | 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 | 2 1 0 9 8 7 6 5 4 3 | 2 1 0 -# B B B | R R R R R R R R R R R R R R R R R | C C C C C C C C C C | Y Y Y -# - -# Transaction type (read or write) -transaction = 'read' - -# Channel information. If your address mapping does not have channel bits keep -# it equal to 1 and set the shift to the extreme left of the address. -num_ch = 1 # Number of channels -ch_shift = 34 # Shift to reach the frist bit reserved for channels in the address -ch_mask = 0x1 # Mask for all channel bits in the address - -# Bank group information. If your address mapping does not have bank groups -# keep it equal to 1 and set the shift to the extreme left of the address. -num_bank_groups = 1 # Number of bank groups -bgroup_shift = 33 # Shift to reach the frist bit reserved for bank groups in the address -bgroup_mask = 0x1 # Mask for all bits in the address related to bank groups - -# Bank information -num_banks = 8 # Number of banks -bank_shift = 30 # Shift to reach the frist bit reserved for banks in the address -bank_mask = 0x7 # Mask for all bank bits in the address - -# Row information -num_rows = 128 * 1024 # Number of rows -row_shift = 13 # Shift to reach the frist bit reserved for rows in the address -row_mask = 0x1ffff # Mask for all row bits in the address - -# Column information -num_col = 1 * 1024 # Number of columns -col_shift = 3 # Shift to reach the frist bit reserved for columns in the address -col_mask = 0x3ff # Mask for all column bits in the address - -# Burst length of 8 columns. 8 columns written/read per access (in 4 full -# clock cycles of the memory bus). -burst_len = 8 - -# Initial clock cycle -clock_cycle = 0 - -# Clock cycle increment between two accesses -clock_increment = 10 - - -def clear_bits(mask, shift, val): - m = ctypes.c_uint64(~(mask << shift)).value - return ctypes.c_uint64(val & m).value - - -def set_bits(mask, shift, val, v): - val = clear_bits(mask, shift, val) - return ctypes.c_uint64(val | (v << shift)).value - - -address = 0 -for ch in range(0, num_ch): - address = set_bits(ch_mask, ch_shift, address, ch) - for bg in range(0, num_bank_groups): - address = set_bits(bgroup_mask, bgroup_shift, address, bg) - for b in range(0, num_banks): - address = set_bits(bank_mask, bank_shift, address, b) - for row in range(0, num_rows): - address = set_bits(row_mask, row_shift, address, row) - for col in range(0, num_col, burst_len): - address = set_bits(col_mask, col_shift, address, col) - print('# clock cycle: {0:d} | {1} | address: 0x{2:010X} | channel: {3} | bank group: {4} | bank: {5} | row: {6} | column: {7}'.format(clock_cycle, transaction, address, ch, bg, b, row, col)) - print('{0:d}:\t{1}\t0x{2:010X}'.format(clock_cycle, transaction, address)) - clock_cycle = clock_cycle + clock_increment diff --git a/DRAMSys/library/resources/scripts/video_rendering/Makefile b/DRAMSys/library/resources/scripts/video_rendering/Makefile deleted file mode 100644 index 51190ca8..00000000 --- a/DRAMSys/library/resources/scripts/video_rendering/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -all: - modulecmd bash load gnuplot/latest - modulecmd bash load image-magick/latest - ./temperatur.pl -movie: - ffmpeg -start_number 00000000 -i ../out/%08d.jpg -vcodec mpeg4 ../out.avi - -clean: - rm *.out *.err diff --git a/DRAMSys/library/resources/scripts/video_rendering/temperatur.job.pl b/DRAMSys/library/resources/scripts/video_rendering/temperatur.job.pl deleted file mode 100644 index 5c05db4c..00000000 --- a/DRAMSys/library/resources/scripts/video_rendering/temperatur.job.pl +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/perl -w -use warnings; -use strict; -use File::Copy; - -my $file = shift; -my $id = shift; -my $samples = shift; -my $inputPath = "/gu2/jungma/thermal/in/out-backup"; -my $extractPath = "/gu2/jungma/thermal/tmp/$id"; - -print "Create TMP path... "; -system("mkdir $extractPath"); -print " done\n"; - -print "Extract... "; -system("tar -xf $inputPath/$file -C $extractPath"); -print " done\n"; - -print "Preprocessing... "; -system("sed '1d' $extractPath/out/output_core_die_full.txt > $extractPath/die0.txt"); -system("sed '1d' $extractPath/out/output_mem_die_1_full.txt > $extractPath/die1.txt"); -system("sed '1d' $extractPath/out/output_mem_die_2_full.txt > $extractPath/die2.txt"); -system("sed '1d' $extractPath/out/output_mem_die_3_full.txt > $extractPath/die3.txt"); -system("sed '1d' $extractPath/out/output_mem_die_4_full.txt > $extractPath/die4.txt"); -print " done\n"; - -print "Gnuplot..."; -open( my $GP, '|-', 'gnuplot' ); -print $GP " - reset - set terminal pngcairo size 500,500 enhanced font 'Verdana,10' - - set border linewidth 0 - unset key - unset colorbox - unset tics - set lmargin screen 0.0 - set rmargin screen 1.0 - set tmargin screen 1.0 - set bmargin screen 0.0 - - set pm3d map - set pm3d interpolate 2,2 - set cbrange [318.0:388.0] - - #set palette rgbformulae 22,13,-31 - set palette defined ( 0 \"blue\", 3 \"green\", 4 \"yellow\", 5 \"red\", 6 \"black\" ) - - set output '$extractPath/die0.png' - splot '$extractPath/die0.txt' matrix every ::1 - - set output '$extractPath/die1.png' - splot '$extractPath/die1.txt' matrix every ::1 - - set output '$extractPath/die2.png' - splot '$extractPath/die2.txt' matrix every ::1 - - set output '$extractPath/die3.png' - splot '$extractPath/die3.txt' matrix every ::1 - - set output '$extractPath/die4.png' - splot '$extractPath/die4.txt' matrix every ::1"; -close($GP); -print " done\n"; - -print "Wait for files... "; -while (1) { last if -e "$extractPath/die0.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die1.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die2.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die3.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die4.png"; print "."; sleep 1;} -print " done\n"; - -print "Composite ..."; -system("composite -gravity center constants/thermal_model_core.png $extractPath/die0.png $extractPath/die0b.png"); -system("composite -gravity center constants/thermal_model_dram_0_1.png $extractPath/die1.png $extractPath/die1b.png"); -system("composite -gravity center constants/thermal_model_dram_2_3.png $extractPath/die2.png $extractPath/die2b.png"); -system("composite -gravity center constants/thermal_model_dram_4_5.png $extractPath/die3.png $extractPath/die3b.png"); -system("composite -gravity center constants/thermal_model_dram_6_7.png $extractPath/die4.png $extractPath/die4b.png"); -print " done\n"; - -print "Wait for files... "; -while (1) { last if -e "$extractPath/die0b.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die1b.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die2b.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die3b.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die4b.png"; print "."; sleep 1;} -print " done\n"; - -print "Convert ..."; -system("convert $extractPath/die0b.png -alpha set -background none -shear 0x-40 -rotate 60 +repage -crop 1048x485+0+205 $extractPath/die0c.png"); -system("convert $extractPath/die1b.png -alpha set -background none -shear 0x-40 -rotate 60 +repage -crop 1048x485+0+205 $extractPath/die1c.png"); -system("convert $extractPath/die2b.png -alpha set -background none -shear 0x-40 -rotate 60 +repage -crop 1048x485+0+205 $extractPath/die2c.png"); -system("convert $extractPath/die3b.png -alpha set -background none -shear 0x-40 -rotate 60 +repage -crop 1048x485+0+205 $extractPath/die3c.png"); -system("convert $extractPath/die4b.png -alpha set -background none -shear 0x-40 -rotate 60 +repage -crop 1048x485+0+205 $extractPath/die4c.png"); -print " done\n"; - -print "Wait for files... "; -while (1) { last if -e "$extractPath/die0c.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die1c.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die2c.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die3c.png"; print "."; sleep 1;} -while (1) { last if -e "$extractPath/die4c.png"; print "."; sleep 1;} -print " done\n"; - -my $outFileName = sprintf("%08d", $id); - -print "Produce Output ..."; -system("convert -size 1048x1680 xc:black $extractPath/die0c.png -geometry +0+1200 -composite $extractPath/die1c.png -geometry +0+900 -composite $extractPath/die2c.png -geometry +0+600 -composite $extractPath/die3c.png -geometry +0+300 -composite $extractPath/die4c.png -composite $extractPath/a$outFileName.jpg"); - -while (1) { last if -e "$extractPath/a$outFileName.jpg"; print "."; sleep 1;} -system("convert $extractPath/a$outFileName.jpg -pointsize 80 -fill white -gravity northeast -draw \"text 20,20 '".$samples."ms'\" $extractPath/b$outFileName.jpg"); - -while (1) { last if -e "$extractPath/b$outFileName.jpg"; print "."; sleep 1;} -system("convert $extractPath/b$outFileName.jpg constants/legend/legend4.png +append ../out/$outFileName.jpg"); - -print " done\n"; - -print "Produce Samples ..."; -for(my $i = 0; $i < $samples-1; $i++) -{ - $id++; - my $outFileNameCopy = sprintf("%08d", $id); - copy("../out/$outFileName.jpg","../out/$outFileNameCopy.jpg"); -} -print " done\n"; - -# cleanup -print "Cleanup ... "; -while (1) { last if -e "/gu2/jungma/thermal/out/$outFileName.jpg"; print "."; sleep 1;} -system("rm -rf $extractPath"); -print " done\n"; - -##ffmpeg -start_number 00000000 -i %08d.jpg -vcodec mpeg4 test.avi diff --git a/DRAMSys/library/resources/scripts/video_rendering/temperatur.pl b/DRAMSys/library/resources/scripts/video_rendering/temperatur.pl deleted file mode 100644 index 11279c14..00000000 --- a/DRAMSys/library/resources/scripts/video_rendering/temperatur.pl +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/perl -w -use warnings; -use strict; -use List::Util qw( min max ); - -#/Volumes/Etana_tmp2/tmp_sadri/backup/sep_16/log_smartbench_traces_50_cpu_1650_mhz_100_mhz_dram_100_mhz_sampling8X_bankwise_on_test/out-backup -my $inputPath = "../in/out-backup"; -my $extractPath = "../tmp"; -my $samplingFile = "../in/sampling"; - -# Read the input file names and store it in an array -opendir (DIR, $inputPath) or die $!; - -my @files; -my @sortetFiles; - -while (my $file = readdir(DIR)) -{ - push(@files, $file); -} - -@sortetFiles = sort @files; - - -print "Cleanup\n"; -system("rm -rf *.err *.out"); -system("rm -rf ../tmp/*"); -print "Load modules\n"; - - -# Estimate sampeling numbers - -open(SF,$samplingFile); - -my @refreshRates; - -while() -{ - $_ =~ /(\d+)\.0/; - my $rate = $1; - push(@refreshRates, $rate); -} - -print "Max. Rate:".max(@refreshRates)."\n"; -print "Min. Rate:".min(@refreshRates)."\n"; - -my $counter = 0; -my $i = 0; -# For each data package start one job! -foreach(@sortetFiles) -{ - my $file = $_; - - if($file =~ /(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)\.tgz/) - { - my $samples = $refreshRates[$i]; - system("bsub -W 00:05 ./temperatur.job.pl $file $counter $samples"); - $counter+=$samples; - $i++; - #if($i == 100) - #{ - # last; - #} - } -} - -##ffmpeg -start_number 00000000 -i %08d.jpg -vcodec mpeg4 test.avi diff --git a/DRAMSys/library/resources/simulations/ddr3-example2.json b/DRAMSys/library/resources/simulations/ddr3-example2.json deleted file mode 100644 index 99e1821a..00000000 --- a/DRAMSys/library/resources/simulations/ddr3-example2.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "simulation": { - "addressmapping": "am_ddr3_8x1Gbx8_dimm_p1KB_brc.json", - "mcconfig": "fr_fcfs.json", - "memspec": "MICRON_1Gb_DDR3-1600_8bit_G.json", - "simconfig": "ddr3.json", - "simulationid": "ddr3-example2", - "thermalconfig": "config.json", - "tracesetup": [ - { - "clkMhz": 300, - "name": "ddr3_example.stl" - }, - { - "clkMhz": 400, - "name": "ddr3_example.stl" - } - ] - } -} diff --git a/DRAMSys/library/resources/simulations/wideio-example.json b/DRAMSys/library/resources/simulations/wideio-example.json deleted file mode 100644 index 4bfd6979..00000000 --- a/DRAMSys/library/resources/simulations/wideio-example.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "simulation": { - "addressmapping": "am_wideio_4x256Mb_rbc.json", - "mcconfig": "fr_fcfs.json", - "memspec": "JEDEC_256Mb_WIDEIO-200_128bit.json", - "simconfig": "wideio.json", - "simulationid": "wideio-example", - "thermalconfig": "config.json", - "tracesetup": [ - { - "clkMhz": 1000, - "name": "chstone-adpcm_32.stl" - } - ] - } -} diff --git a/DRAMSys/library/resources/traces/generateErrorTest.pl b/DRAMSys/library/resources/traces/generateErrorTest.pl deleted file mode 100644 index 39589e25..00000000 --- a/DRAMSys/library/resources/traces/generateErrorTest.pl +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (c) 2015, Technische Universität Kaiserslautern -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER -# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Authors: -# Matthias Jung -# Eder F. Zulian -# Lukas Steiner - -use warnings; -use strict; - -# Assuming this address mapping: -# { -# "CONGEN": { -# "BYTE_BIT": [ -# 0, -# 1, -# 2, -# 3 -# ], -# "BANK_BIT": [ -# 4, -# 5 -# ], -# "COLUMN_BIT": [ -# 6, -# 7, -# 8, -# 9, -# 10, -# 11, -# 12 -# ], -# "ROW_BIT": [ -# 13, -# 14, -# 15, -# 16, -# 17, -# 18, -# 19, -# 20, -# 21, -# 22, -# 23, -# 24 -# ], -# "CHANNEL_BIT": [ -# 25, -# 26 -# ] -# } -# } - -# This is how it should look like later: -# 31: write 0x0 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - -my $numberOfChannels = 4; -my $numberOfRows = 4096; -my $numberOfColumns = 128; -my $bytesPerColumn = 16; -my $burstLength = 4; # burst length of 4 columns --> 4 columns written or read per access -my $dataLength = $bytesPerColumn * $burstLength; - -my $channelOffset = 0x2000000; -my $rowOffset = 0x2000; -my $columnOffset = 0x40; - -# Generate Data Pattern: -my $dataPatternByte = "ff"; - -my $dataPattern = "0x"; -for(my $i = 0; $i < $dataLength; $i++) -{ - $dataPattern .= $dataPatternByte; -} - -my $clkCounter = 0; -my $addr = 0; - -# Generate Trace file (writes): -for(my $cha = 0; $cha < ($numberOfChannels * $channelOffset); $cha = $cha + $channelOffset) -{ - for(my $row = 0; $row < ($numberOfRows * $rowOffset); $row = $row + $rowOffset) - { - for(my $col = 0; $col < ($numberOfColumns * $columnOffset); $col = $col + ($columnOffset * $burstLength)) - { - my $addrHex = sprintf("0x%x", $addr); - print "$clkCounter:\twrite\t$addrHex\t$dataPattern\n"; - $clkCounter++; - $addr += $columnOffset * $burstLength; - } - } -} - -$clkCounter = 50000000; -$addr = 0; - -# Generate Trace file (reads): -for(my $cha = 0; $cha < ($numberOfChannels * $channelOffset); $cha = $cha + $channelOffset) -{ - for(my $row = 0; $row < ($numberOfRows * $rowOffset); $row = $row + $rowOffset) - { - for(my $col = 0; $col < ($numberOfColumns * $columnOffset); $col = $col + ($columnOffset * $burstLength)) - { - my $addrHex = sprintf("0x%x", $addr); - print "$clkCounter:\tread\t$addrHex\n"; - $clkCounter++; - $addr += $columnOffset * $burstLength; - } - } -} \ No newline at end of file diff --git a/DRAMSys/library/src/common/configuration/ThermalConfig.cpp b/DRAMSys/library/src/common/configuration/ThermalConfig.cpp deleted file mode 100644 index f3bed414..00000000 --- a/DRAMSys/library/src/common/configuration/ThermalConfig.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2021, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Derek Christ - */ - -#include "ThermalConfig.h" -#include "util.h" - -namespace DRAMSysConfiguration -{ - -void to_json(json &j, const ThermalConfig &c) -{ - j = json{{"TemperatureScale", c.temperatureScale}, - {"StaticTemperatureDefaultValue", c.staticTemperatureDefaultValue}, - {"ThermalSimPeriod", c.thermalSimPeriod}, - {"ThermalSimUnit", c.thermalSimUnit}, - {"PowerInfoFile", c.powerInfo}, - {"IceServerIp", c.iceServerIp}, - {"IceServerPort", c.iceServerPort}, - {"SimPeriodAdjustFactor", c.simPeriodAdjustFactor}, - {"NPowStableCyclesToIncreasePeriod", c.nPowStableCyclesToIncreasePeriod}, - {"GenerateTemperatureMap", c.generateTemperatureMap}, - {"GeneratePowerMap", c.generatePowerMap}}; -} - -void from_json(const json &j, ThermalConfig &c) -{ - json j_thermalsim = get_config_json(j, thermalConfigPath, "thermalsimconfig"); - - j_thermalsim.at("TemperatureScale").get_to(c.temperatureScale); - j_thermalsim.at("StaticTemperatureDefaultValue").get_to(c.staticTemperatureDefaultValue); - j_thermalsim.at("ThermalSimPeriod").get_to(c.thermalSimPeriod); - j_thermalsim.at("ThermalSimUnit").get_to(c.thermalSimUnit); - j_thermalsim.at("PowerInfoFile").get_to(c.powerInfo); - j_thermalsim.at("IceServerIp").get_to(c.iceServerIp); - j_thermalsim.at("IceServerPort").get_to(c.iceServerPort); - j_thermalsim.at("SimPeriodAdjustFactor").get_to(c.simPeriodAdjustFactor); - j_thermalsim.at("NPowStableCyclesToIncreasePeriod").get_to(c.nPowStableCyclesToIncreasePeriod); - j_thermalsim.at("GenerateTemperatureMap").get_to(c.generateTemperatureMap); - j_thermalsim.at("GeneratePowerMap").get_to(c.generatePowerMap); -} - -void to_json(json &j, const DramDieChannel &c) -{ - j = json{{"init_pow", c.init_pow}, {"threshold", c.threshold}}; -} - -void from_json(const json &j, DramDieChannel &c) -{ - j.at("init_pow").get_to(c.init_pow); - j.at("threshold").get_to(c.threshold); -} - -void to_json(json &j, const PowerInfo &c) -{ - j = json{}; - - for (const auto &channel : c.channels) - { - j.emplace(channel.identifier, channel); - } -} - -void from_json(const json &j, PowerInfo &c) -{ - json j_powerinfo = get_config_json(j, thermalConfigPath, "powerInfo"); - - for (const auto &entry : j_powerinfo.items()) - { - DramDieChannel channel; - j_powerinfo.at(entry.key()).get_to(channel); - channel.identifier = entry.key(); - - c.channels.push_back(channel); - } -} - -void from_dump(const std::string &dump, ThermalConfig &c) -{ - json json_thermalconfig = json::parse(dump).at("thermalconfig"); - json_thermalconfig.get_to(c); -} - -std::string dump(const ThermalConfig &c, unsigned int indentation) -{ - json json_thermalconfig; - json_thermalconfig["thermalconfig"] = c; - return json_thermalconfig.dump(indentation); -} - -} // namespace DRAMSysConfiguration diff --git a/DRAMSys/library/src/common/configuration/ThermalConfig.h b/DRAMSys/library/src/common/configuration/ThermalConfig.h deleted file mode 100644 index 61592197..00000000 --- a/DRAMSys/library/src/common/configuration/ThermalConfig.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2021, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Derek Christ - */ - -#ifndef DRAMSYSCONFIGURATION_THERMALCONFIG_H -#define DRAMSYSCONFIGURATION_THERMALCONFIG_H - -#include - -namespace DRAMSysConfiguration -{ -using json = nlohmann::json; - -const std::string thermalConfigPath = "configs/thermalsim"; - -enum class TemperatureScale -{ - Celsius, - Fahrenheit, - Kelvin, - Invalid = -1, -}; - -NLOHMANN_JSON_SERIALIZE_ENUM(TemperatureScale, {{TemperatureScale::Invalid, nullptr}, - {TemperatureScale::Celsius, "Celsius"}, - {TemperatureScale::Fahrenheit, "Fahrenheit"}, - {TemperatureScale::Kelvin, "Kelvin"}}) - -enum class ThermalSimUnit -{ - Seconds, - Milliseconds, - Microseconds, - Nanoseconds, - Picoseconds, - Femtoseconds, - Invalid = -1, -}; - -NLOHMANN_JSON_SERIALIZE_ENUM(ThermalSimUnit, {{ThermalSimUnit::Invalid, nullptr}, - {ThermalSimUnit::Seconds, "s"}, - {ThermalSimUnit::Milliseconds, "ms"}, - {ThermalSimUnit::Microseconds, "us"}, - {ThermalSimUnit::Nanoseconds, "ns"}, - {ThermalSimUnit::Picoseconds, "ps"}, - {ThermalSimUnit::Femtoseconds, "fs"}}) - -struct DramDieChannel -{ - std::string identifier; - double init_pow; - double threshold; -}; - -void to_json(json &j, const DramDieChannel &c); -void from_json(const json &j, DramDieChannel &c); - -struct PowerInfo -{ - std::vector channels; -}; - -void to_json(json &j, const PowerInfo &c); -void from_json(const json &j, PowerInfo &c); - -struct ThermalConfig -{ - TemperatureScale temperatureScale; - int staticTemperatureDefaultValue; - double thermalSimPeriod; - ThermalSimUnit thermalSimUnit; - PowerInfo powerInfo; - std::string iceServerIp; - unsigned int iceServerPort; - unsigned int simPeriodAdjustFactor; - unsigned int nPowStableCyclesToIncreasePeriod; - bool generateTemperatureMap; - bool generatePowerMap; -}; - -void to_json(json &j, const ThermalConfig &c); -void from_json(const json &j, ThermalConfig &c); - -void from_dump(const std::string &dump, ThermalConfig &c); -std::string dump(const ThermalConfig &c, unsigned int indentation = -1); - -} // namespace Configuration - -#endif // DRAMSYSCONFIGURATION_THERMALCONFIG_H diff --git a/DRAMSys/library/src/common/configuration/tests/CMakeLists.txt b/DRAMSys/library/src/common/configuration/tests/CMakeLists.txt deleted file mode 100644 index 621a7230..00000000 --- a/DRAMSys/library/src/common/configuration/tests/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -add_executable(simpletest simpletest.cpp) -target_link_libraries(simpletest PRIVATE DRAMSysConfiguration nlohmann_json::nlohmann_json) - -add_executable(converter converter.cpp) -target_link_libraries(converter PRIVATE DRAMSysConfiguration nlohmann_json::nlohmann_json) diff --git a/DRAMSys/library/src/common/configuration/tests/simpletest.cpp b/DRAMSys/library/src/common/configuration/tests/simpletest.cpp deleted file mode 100644 index 8bac3858..00000000 --- a/DRAMSys/library/src/common/configuration/tests/simpletest.cpp +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright (c) 2021, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Derek Christ - */ - -#include -#include -#include - -using json = nlohmann::json; - -DRAMSysConfiguration::AddressMapping getAddressMapping() -{ - return DRAMSysConfiguration::AddressMapping{{{0, 1}}, - {{2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}}, - {{16}}, - {{13, 14, 15}}, - {{17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}}, - {{33}}, - {{}}, - {{}}}; -} - -DRAMSysConfiguration::McConfig getMcConfig() -{ - return DRAMSysConfiguration::McConfig{DRAMSysConfiguration::PagePolicy::Open, - DRAMSysConfiguration::Scheduler::FrFcfs, - DRAMSysConfiguration::SchedulerBuffer::Bankwise, - 8, - DRAMSysConfiguration::CmdMux::Oldest, - DRAMSysConfiguration::RespQueue::Fifo, - DRAMSysConfiguration::RefreshPolicy::AllBank, - 0, - 0, - DRAMSysConfiguration::PowerDownPolicy::NoPowerDown, - DRAMSysConfiguration::Arbiter::Simple, - 128, - {}}; -} - -DRAMSysConfiguration::SimConfig getSimConfig() -{ - return DRAMSysConfiguration::SimConfig{ - 0, false, true, false, false, {"error.csv"}, - 42, false, {"ddr5"}, true, DRAMSysConfiguration::StoreMode::NoStorage, false, false, - 1000}; -} - -DRAMSysConfiguration::ThermalConfig getThermalConfig() -{ - std::vector channels {{"dram_die_channel0", 0.0, 1.0}, {"dram_die_channel1", 0.0, 1.0}, {"dram_die_channel2", 0.0, 1.0}, {"dram_die_channel3", 0.0, 1.0}}; - - return DRAMSysConfiguration::ThermalConfig{ - DRAMSysConfiguration::TemperatureScale::Celsius, - 89, - 100, - DRAMSysConfiguration::ThermalSimUnit::Microseconds, - DRAMSysConfiguration::PowerInfo{channels}, - "127.0.0.1", - 118800, - 10, - 5, - true, - true}; -} - -DRAMSysConfiguration::TracePlayer getTracePlayer() -{ - DRAMSysConfiguration::TracePlayer player; - player.clkMhz = 100; - player.name = "mytrace.stl"; - - return player; -} - -DRAMSysConfiguration::TraceGenerator getTraceGeneratorOneState() -{ - DRAMSysConfiguration::TraceGenerator gen; - gen.clkMhz = 100; - gen.name = "MyTestGen"; - - DRAMSysConfiguration::TraceGeneratorTrafficState state0; - state0.numRequests = 1000; - state0.rwRatio = 0.5; - state0.addressDistribution = DRAMSysConfiguration::AddressDistribution::Random; - state0.addressIncrement = {}; - state0.minAddress = {}; - state0.maxAddress = {}; - state0.clksPerRequest = {}; - - gen.states.emplace(0, state0); - - return gen; -} - -DRAMSysConfiguration::TraceGenerator getTraceGeneratorMultipleStates() -{ - DRAMSysConfiguration::TraceGenerator gen; - - gen.clkMhz = 100; - gen.name = "MyTestGen"; - gen.maxPendingReadRequests = 8; - - DRAMSysConfiguration::TraceGeneratorTrafficState state0; - state0.numRequests = 1000; - state0.rwRatio = 0.5; - state0.addressDistribution = DRAMSysConfiguration::AddressDistribution::Sequential; - state0.addressIncrement = 256; - state0.minAddress = {}; - state0.maxAddress = 1024; - state0.clksPerRequest = {}; - - DRAMSysConfiguration::TraceGeneratorTrafficState state1; - state1.numRequests = 100; - state1.rwRatio = 0.75; - state1.addressDistribution = DRAMSysConfiguration::AddressDistribution::Sequential; - state1.addressIncrement = 512; - state1.minAddress = 1024; - state1.maxAddress = 2048; - state1.clksPerRequest = {}; - - gen.states.emplace(0, state0); - gen.states.emplace(1, state1); - - DRAMSysConfiguration::TraceGeneratorStateTransition transistion0{1, 1.0}; - - gen.transitions.emplace(0, transistion0); - - return gen; -} - -DRAMSysConfiguration::TraceHammer getTraceHammer() -{ - DRAMSysConfiguration::TraceHammer hammer; - - hammer.clkMhz = 100; - hammer.name = "MyTestHammer"; - hammer.numRequests = 4000; - hammer.rowIncrement = 2097152; - - return hammer; -} - -DRAMSysConfiguration::TraceSetup getTraceSetup() -{ - using namespace DRAMSysConfiguration; - - std::vector> initiators; - initiators.emplace_back(getTracePlayer()); - initiators.emplace_back(getTraceGeneratorOneState()); - initiators.emplace_back(getTraceGeneratorMultipleStates()); - initiators.emplace_back(getTraceHammer()); - - return DRAMSysConfiguration::TraceSetup{initiators}; -} - -DRAMSysConfiguration::Configuration getConfig(const DRAMSysConfiguration::MemSpec &memSpec) -{ - return DRAMSysConfiguration::Configuration{ - getAddressMapping(), - getMcConfig(), - memSpec, - getSimConfig(), - "std::string_simulationId", - getThermalConfig(), - // {{}, false}, works too - getTraceSetup(), - }; -} - -int main() -{ - DRAMSysConfiguration::Configuration conf = DRAMSysConfiguration::from_path("ddr5.json"); - std::ofstream fileout("myjson.json"); - json j_my; - j_my["simulation"] = getConfig(conf.memSpec); // just copy memspec over - fileout << j_my.dump(4); - - std::ifstream file2("hbm2.json"); - json hbm2_j = json::parse(file2, nullptr, false); - json hbm2_config = hbm2_j.at("simulation"); - DRAMSysConfiguration::Configuration hbm2conf = hbm2_config.get(); - std::ofstream filehbm2("myhbm2.json"); - json j_myhbm2; - j_myhbm2["simulation"] = hbm2conf; - filehbm2 << j_myhbm2.dump(4); - - std::ifstream file3("myjson.json"); - json ddr5_old = json::parse(file3, nullptr, false); - json ddr5_old_conf = ddr5_old.at("simulation"); - DRAMSysConfiguration::Configuration ddr5_old_config = ddr5_old_conf.get(); - std::ofstream fileoldout("myjson2.json"); - json j_oldconfconv; - j_oldconfconv["simulation"] = ddr5_old_config; - fileoldout << j_oldconfconv.dump(4); -} diff --git a/DRAMSys/library/src/common/configuration/util.h b/DRAMSys/library/src/common/configuration/util.h deleted file mode 100644 index 1a6ac463..00000000 --- a/DRAMSys/library/src/common/configuration/util.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2021, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Derek Christ - */ - -#ifndef DRAMSYSCONFIGURATION_UTIL_H -#define DRAMSYSCONFIGURATION_UTIL_H - -#include -#include -#include - -namespace DRAMSysConfiguration -{ -using json = nlohmann::json; - -// template -// class Optional : public std::pair -// { -// public: -// Optional() : std::pair{{}, false} -// { -// } -// Optional(const T &v) : std::pair{v, true} -// { -// } - -// bool isValid() const -// { -// return this->second; -// } - -// const T &getValue() const -// { -// assert(this->second == true); -// return this->first; -// } - -// void setValue(const T &v) -// { -// this->first = v; -// this->second = true; -// } - -// void invalidate() -// { -// this->second = false; -// } - -// /** -// * This methods only purpose is to make a optional type -// * valid so that it can be written to by reference. -// */ -// T &setByReference() -// { -// this->second = true; -// return this->first; -// } -// }; - -template -void invalidateEnum(T &value) -{ - if (value.has_value() && value.value() == T::value_type::Invalid) - value.reset(); -} - -json get_config_json(const json &j, const std::string &configPath, const std::string &objectName); - -inline void remove_null_values(json &j) -{ - std::vector keysToRemove; - - for (const auto &element : j.items()) - { - if (element.value() == nullptr) - keysToRemove.emplace_back(element.key()); - } - - std::for_each(keysToRemove.begin(), keysToRemove.end(), [&](const std::string &key) { j.erase(key); }); -} - -} // namespace DRAMSysConfiguration - -/** - * Inspired from - * https://json.nlohmann.me/features/arbitrary_types/#how-can-i-use-get-for-non-default-constructiblenon-copyable-types - */ -namespace nlohmann -{ - -template -void to_json(nlohmann::json &j, const std::optional &v) -{ - if (v.has_value()) - j = v.value(); - else - j = nullptr; -} - -template -void from_json(const nlohmann::json &j, std::optional &v) -{ - if (j.is_null()) - v = std::nullopt; - else - { - v = j.get(); - } -} - -} // namespace nlohmann - -#endif // DRAMSYSCONFIGURATION_UTIL_H diff --git a/DRAMSys/library/src/common/third_party/DRAMPower b/DRAMSys/library/src/common/third_party/DRAMPower deleted file mode 160000 index 1ddc48a3..00000000 --- a/DRAMSys/library/src/common/third_party/DRAMPower +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1ddc48a3872d93e2a60fc8c53348e0c2ed95fae1 diff --git a/DRAMSys/library/src/common/third_party/nlohmann b/DRAMSys/library/src/common/third_party/nlohmann deleted file mode 160000 index b7be613b..00000000 --- a/DRAMSys/library/src/common/third_party/nlohmann +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b7be613b6ec6269c829144ff1cc8a633876d3092 diff --git a/DRAMSys/library/src/common/third_party/sqlite-amalgamation b/DRAMSys/library/src/common/third_party/sqlite-amalgamation deleted file mode 160000 index 9be05e13..00000000 --- a/DRAMSys/library/src/common/third_party/sqlite-amalgamation +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9be05e13408dd8cf8dafe8f11b1700a28194e07e diff --git a/DRAMSys/library/src/common/third_party/systemc b/DRAMSys/library/src/common/third_party/systemc deleted file mode 160000 index 60418250..00000000 --- a/DRAMSys/library/src/common/third_party/systemc +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 604182509559ae42c34e878f508bae7c18abbbd6 diff --git a/DRAMSys/library/src/configuration/TemperatureSimConfig.h b/DRAMSys/library/src/configuration/TemperatureSimConfig.h deleted file mode 100644 index ac090b02..00000000 --- a/DRAMSys/library/src/configuration/TemperatureSimConfig.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Eder F. Zulian - * Matthias Jung - * Luiza Correa - * Derek Christ - */ - -#ifndef TEMPERATURESIMCONFIG_H -#define TEMPERATURESIMCONFIG_H - -#include -#include -#include -#include -#include -#include "../common/DebugManager.h" - -struct TemperatureSimConfig -{ - // Temperature Scale - enum class TemperatureScale {Celsius, Fahrenheit, Kelvin} temperatureScale; - - // Static Temperature Simulation parameters - int staticTemperatureDefaultValue; - - // Thermal Simulation parameters - double thermalSimPeriod; - enum sc_core::sc_time_unit thermalSimUnit; - std::string iceServerIp; - unsigned int iceServerPort; - unsigned int simPeriodAdjustFactor; - unsigned int nPowStableCyclesToIncreasePeriod; - bool generateTemperatureMap; - bool generatePowerMap; - - // Power related information - std::vector powerInitialValues; - std::vector powerThresholds; - - void showTemperatureSimConfig() - { - NDEBUG_UNUSED(int i) = 0; - for (NDEBUG_UNUSED(auto e) : powerInitialValues) - { - PRINTDEBUGMESSAGE("TemperatureSimConfig", "powerInitialValues[" - + std::to_string(i++) + "]: " + std::to_string(e)); - } - i = 0; - for (NDEBUG_UNUSED(auto e) : powerThresholds) - { - PRINTDEBUGMESSAGE("TemperatureSimConfig", "powerThreshold[" - + std::to_string(i++) + "]: " + std::to_string(e)); - } - } -}; - -#endif // TEMPERATURESIMCONFIG_H - diff --git a/DRAMSys/library/src/configuration/memspec/MemSpec.cpp b/DRAMSys/library/src/configuration/memspec/MemSpec.cpp deleted file mode 100644 index f675a806..00000000 --- a/DRAMSys/library/src/configuration/memspec/MemSpec.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Lukas Steiner - * Derek Christ - */ - -#include "MemSpec.h" - -using namespace sc_core; -using namespace tlm; - -MemSpec::MemSpec(const DRAMSysConfiguration::MemSpec &memSpec, - MemoryType memoryType, - unsigned numberOfChannels, unsigned pseudoChannelsPerChannel, - unsigned ranksPerChannel, unsigned banksPerRank, - unsigned groupsPerRank, unsigned banksPerGroup, - unsigned banksPerChannel, unsigned bankGroupsPerChannel, - unsigned devicesPerRank) - : numberOfChannels(numberOfChannels), - pseudoChannelsPerChannel(pseudoChannelsPerChannel), - ranksPerChannel(ranksPerChannel), - banksPerRank(banksPerRank), - groupsPerRank(groupsPerRank), - banksPerGroup(banksPerGroup), - banksPerChannel(banksPerChannel), - bankGroupsPerChannel(bankGroupsPerChannel), - devicesPerRank(devicesPerRank), - rowsPerBank(memSpec.memArchitectureSpec.entries.at("nbrOfRows")), - columnsPerRow(memSpec.memArchitectureSpec.entries.at("nbrOfColumns")), - defaultBurstLength(memSpec.memArchitectureSpec.entries.at("burstLength")), - maxBurstLength(memSpec.memArchitectureSpec.entries.find("maxBurstLength") != - memSpec.memArchitectureSpec.entries.end() - ? memSpec.memArchitectureSpec.entries.at("maxBurstLength") - : defaultBurstLength), - dataRate(memSpec.memArchitectureSpec.entries.at("dataRate")), - bitWidth(memSpec.memArchitectureSpec.entries.at("width")), - dataBusWidth(bitWidth * devicesPerRank), - bytesPerBeat(dataBusWidth / 8), - defaultBytesPerBurst((defaultBurstLength * dataBusWidth) / 8), - maxBytesPerBurst((maxBurstLength * dataBusWidth) / 8), - fCKMHz(memSpec.memTimingSpec.entries.at("clkMhz")), - tCK(sc_time(1.0 / fCKMHz, SC_US)), - memoryId(memSpec.memoryId), - memoryType(memoryType), - burstDuration(tCK * (static_cast(defaultBurstLength) / dataRate)), - memorySizeBytes(0) -{ - commandLengthInCycles = std::vector(Command::numberOfCommands(), 1); -} - -sc_time MemSpec::getCommandLength(Command command) const -{ - return tCK * commandLengthInCycles[command]; -} - -double MemSpec::getCommandLengthInCycles(Command command) const -{ - return commandLengthInCycles[command]; -} - -uint64_t MemSpec::getSimMemSizeInBytes() const -{ - return memorySizeBytes; -} - -sc_time MemSpec::getRefreshIntervalAB() const -{ - SC_REPORT_FATAL("MemSpec", "All-bank refresh not supported"); - return SC_ZERO_TIME; -} - -sc_time MemSpec::getRefreshIntervalPB() const -{ - SC_REPORT_FATAL("MemSpec", "Per-bank refresh not supported"); - return SC_ZERO_TIME; -} - -sc_time MemSpec::getRefreshIntervalP2B() const -{ - SC_REPORT_FATAL("MemSpec", "Per-2-bank refresh not supported"); - return SC_ZERO_TIME; -} - -sc_time MemSpec::getRefreshIntervalSB() const -{ - SC_REPORT_FATAL("MemSpec", "Same-bank refresh not supported"); - return SC_ZERO_TIME; -} - -unsigned MemSpec::getPer2BankOffset() const -{ - return 0; -} - -unsigned MemSpec::getRAACDR() const -{ - SC_REPORT_FATAL("MemSpec", "Refresh Management not supported"); - return 0; -} - -unsigned MemSpec::getRAAIMT() const -{ - SC_REPORT_FATAL("MemSpec", "Refresh Management not supported"); - return 0; -} - -unsigned MemSpec::getRAAMMT() const -{ - SC_REPORT_FATAL("MemSpec", "Refresh Management not supported"); - return 0; -} - -bool MemSpec::hasRasAndCasBus() const -{ - return false; -} diff --git a/DRAMSys/library/src/configuration/memspec/MemSpec.h b/DRAMSys/library/src/configuration/memspec/MemSpec.h deleted file mode 100644 index 0a1d0894..00000000 --- a/DRAMSys/library/src/configuration/memspec/MemSpec.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Janik Schlemminger - * Matthias Jung - * Lukas Steiner - * Derek Christ - */ - -#ifndef MEMSPEC_H -#define MEMSPEC_H - -#include -#include -#include -#include -#include -#include "../../common/utils.h" -#include "../../controller/Command.h" - -class MemSpec -{ -public: - const unsigned numberOfChannels; - const unsigned pseudoChannelsPerChannel; - const unsigned ranksPerChannel; - const unsigned banksPerRank; - const unsigned groupsPerRank; - const unsigned banksPerGroup; - const unsigned banksPerChannel; - const unsigned bankGroupsPerChannel; - const unsigned devicesPerRank; - const unsigned rowsPerBank; - const unsigned columnsPerRow; - const unsigned defaultBurstLength; - const unsigned maxBurstLength; - const unsigned dataRate; - const unsigned bitWidth; - const unsigned dataBusWidth; - const unsigned bytesPerBeat; - const unsigned defaultBytesPerBurst; - const unsigned maxBytesPerBurst; - - // Clock - const double fCKMHz; - const sc_core::sc_time tCK; - - const std::string memoryId; - const enum class MemoryType {DDR3, DDR4, DDR5, LPDDR4, LPDDR5, WideIO, - WideIO2, GDDR5, GDDR5X, GDDR6, HBM2, HBM3, STTMRAM} memoryType; - - virtual ~MemSpec() = default; - - virtual sc_core::sc_time getRefreshIntervalAB() const; - virtual sc_core::sc_time getRefreshIntervalPB() const; - virtual sc_core::sc_time getRefreshIntervalP2B() const; - virtual sc_core::sc_time getRefreshIntervalSB() const; - - virtual unsigned getPer2BankOffset() const; - - virtual unsigned getRAAIMT() const; - virtual unsigned getRAAMMT() const; - virtual unsigned getRAACDR() const; - - virtual bool hasRasAndCasBus() const; - - virtual sc_core::sc_time getExecutionTime(Command command, const tlm::tlm_generic_payload &payload) const = 0; - virtual TimeInterval getIntervalOnDataStrobe(Command command, const tlm::tlm_generic_payload &payload) const = 0; - - sc_core::sc_time getCommandLength(Command) const; - double getCommandLengthInCycles(Command) const; - uint64_t getSimMemSizeInBytes() const; - -protected: - MemSpec(const DRAMSysConfiguration::MemSpec &memSpec, - MemoryType memoryType, - unsigned numberOfChannels, unsigned pseudoChannelsPerChannel, - unsigned ranksPerChannel, unsigned banksPerRank, - unsigned groupsPerRank, unsigned banksPerGroup, - unsigned banksPerChannel, unsigned bankGroupsPerChannel, - unsigned devicesPerRank); - - // Command lengths in cycles on bus, usually one clock cycle - std::vector commandLengthInCycles; - sc_core::sc_time burstDuration; - uint64_t memorySizeBytes; -}; - -#endif // MEMSPEC_H - diff --git a/DRAMSys/library/src/error/ECC/Bit.h b/DRAMSys/library/src/error/ECC/Bit.h deleted file mode 100644 index 5e4b6779..00000000 --- a/DRAMSys/library/src/error/ECC/Bit.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -#pragma once -class CBit -{ -public: - enum VALUE { - ZERO = 0, - ONE = 1 - }; - -protected: - VALUE m_nValue; - -public: - CBit(VALUE nVal = ZERO); - virtual ~CBit(); - - inline void Set() - { - m_nValue = ONE; - }; - inline void Clear() - { - m_nValue = ZERO; - }; - inline unsigned Get() - { - if (m_nValue == ONE) - return 1; - else - return 0; - }; - - void Print(); - - CBit &operator=(unsigned d) - { - if (d == 0 ) { - m_nValue = ZERO; - } else { - m_nValue = ONE; - } - return *this; - } - - friend CBit operator^(CBit l, const CBit &r) - { - if (l.m_nValue == r.m_nValue) { - return CBit(ZERO); - } else { - return CBit(ONE); - } - } - - CBit &operator^=(const CBit &r) - { - if (m_nValue == r.m_nValue) { - m_nValue = ZERO; - } else { - m_nValue = ONE; - } - return *this; - } - - inline bool operator==(const CBit::VALUE &r) - { - return m_nValue == r; - } -}; - diff --git a/DRAMSys/library/src/error/ECC/ECC.cpp b/DRAMSys/library/src/error/ECC/ECC.cpp deleted file mode 100644 index fba2c953..00000000 --- a/DRAMSys/library/src/error/ECC/ECC.cpp +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -#include "ECC.h" - -// ************************************************************************************************ -// Function which calculates the number of additional bits needed for a given number of data bits -// to store the hamming code and parity bit for a SECDED implementation -unsigned ECC::GetNumParityBits(unsigned nDataBits) -{ - unsigned nParityBits = 0; - - // Function to calculate the nube of bits: n = 2^k - k - 1 - // ( Source: Hacker's Delight; p. 310; math. function 1 ) - while (nDataBits > ((1 << nParityBits) - nParityBits - 1)) { - ++nParityBits; - } - - return nParityBits + 1; // +1 for the parity bit -} - - -// ************************************************************************************************ -// Function which extends a given data word to the needed length for a SECDED code -void ECC::ExtendWord(CWord &v) -{ - unsigned end = v.GetLength() + ECC::GetNumParityBits(v.GetLength()); - - // Insert x bits for the hamming code at positions where pos = 2^a; a = [0..N] - // In "Hacker's Delight" the smallest index is 1 - But in this beautiful C-Code it's 0 as it - // should be. That's why there is a '-1' in the call of v.Insert. - unsigned i = 1; - while (i < end) { - v.Insert(i - 1, CBit()); - i <<= 1; - } - - // Append one bit for the parity - v.Append(CBit()); -} - -// ************************************************************************************************ -// Function which calculates the Hamming Code bits of an extended Data word. -// Function ExtendWord must be called before calling this function -// The calculated bits are stored in p, so the length of p should be at least -// 'GetNumParityBits(#data bits)-1' -void ECC::CalculateCheckbits(CWord &v, CWord &p) -{ - unsigned i = 1, l = 0; - - // Last bit is the parity bit - don't use this in the algorithm for hamming code - unsigned len = v.GetLength() - 1; - - // Following Graph should show you the behaviour of this algorithm - // #Data bits: 11 #Hamming bits: 4 -> SECDED bits: 16 (incl. parity bit) - // Hamming Code Bit: | Bits used -> data(X)/Hamming Code(H) // Bit unused - - // 0 | H-X-X-X-X-X-X-X - // 1 | -HX--XX--XX--XX - // 2 | ---HXXX----XXXX - // 3 | -------HXXXXXXX - // For further information read "Hacker's delight" chapter 15 - // ATTENTION: The order of indices is different from the one in the book, - // but it doesn't matter in which order your data or check bits are. - // But it should be the same for encoding and decoding - while (i < len) { - for (unsigned j = (i - 1); j < len; j += (i << 1)) { - for (unsigned k = 0; k < (i); k++) { - if (j + k >= len) - break; - p[l] ^= v[j + k]; - } - } - l++; - i <<= 1; - } -} - -// ************************************************************************************************ -// Function which inserts the checkbits which were calculated with 'CalculateCheckbits' in the -// extended data word. This is needed to calculate a proper parity of ALL bits to achive a SECDED -// behaviour. -void ECC::InsertCheckbits(CWord &v, CWord p) -{ - unsigned i = 1, j = 0; - while (i <= v.GetLength() - 1) { - v[i - 1] = p[j++]; - i <<= 1; - } -} - - -// ************************************************************************************************ -// Function which extracts the checkbits out of an extended data word. This is needed to check for -// bit error in the data word. -void ECC::ExtractCheckbits(CWord v, CWord &p) -{ - unsigned i = 1, j = 0; - while (i <= v.GetLength() - 1) { - p[j++] = v[i - 1]; - i <<= 1; - } -} - -// ************************************************************************************************ -// Function which calculates the overal parity -// Simply XOR all bits -void ECC::CalculateParityBit(CWord v, CBit &p) -{ - // Paritybit - p = CBit::ZERO; - for (unsigned i = 0; i < v.GetLength(); i++) { - p ^= v[i]; - } -} - -// ************************************************************************************************ -// Function to insert the parity bit into the extended data word -void ECC::InsertParityBit(CWord &v, CBit p) -{ - v[v.GetLength() - 1] = p; -} - -// ************************************************************************************************ -// Function to extract the parity bit out of an extended data word. -void ECC::ExtractParityBit(CWord v, CBit &p) -{ - p = v[v.GetLength() - 1]; -} diff --git a/DRAMSys/library/src/error/ECC/ECC.h b/DRAMSys/library/src/error/ECC/ECC.h deleted file mode 100644 index db2ed2ce..00000000 --- a/DRAMSys/library/src/error/ECC/ECC.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -#pragma once - -#include "Word.h" -#include "Bit.h" - -// ************************************************************************************************ -// -// | __/ __/ __| | __| _ _ _ __| |_(_)___ _ _ ___ -// | _| (_| (__ | _| || | ' \/ _| _| / _ \ ' \(_-< -// |___\___\___| |_| \_,_|_||_\__|\__|_\___/_||_/__/ -// -// ------------------------------------------------------------------------------------------------ -// ECC Implementation as described in "Hacker's Delight - second Edition" by Henry S. Warren, Jr. -// ------------------------------------------------------------------------------------------------ -// This namespace gives you some handy functions to get a SEC-DED implementation. -// -// SEC-DED: Single Error Correction - Double Error Detection -// This is the most common error correction code (ECC). -// It consists of two different correction codes: Haming code + parity code. -// -// For further details read chapter 15 of "Hacker's Delight - second Edition" -// ************************************************************************************************ - -namespace ECC { -unsigned GetNumParityBits(unsigned nDataBits); - -// Extends the data word that it can be used with hamming code -// Several bits will be included at specific places -void ExtendWord(CWord &v); - -void CalculateCheckbits(CWord &v, CWord &p); -void InsertCheckbits(CWord &v, CWord p); -void ExtractCheckbits(CWord v, CWord &p); - -void CalculateParityBit(CWord v, CBit &p); -void InsertParityBit(CWord &v, CBit p); -void ExtractParityBit(CWord v, CBit &p); -} diff --git a/DRAMSys/library/src/error/ECC/ECC_Test.cpp b/DRAMSys/library/src/error/ECC/ECC_Test.cpp deleted file mode 100644 index 42a6a3f0..00000000 --- a/DRAMSys/library/src/error/ECC/ECC_Test.cpp +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -// ECC_Test.cpp : Entry point for the console application. -// - -#include "stdafx.h" -#include -#include "ECC.h" - -int main() -{ - // Random number init - srand(time(NULL)); - - // Erstellen - unsigned size = 4; - CWord p(ECC::GetNumParityBits(size)), v(size); - - // Daten eingeben - for (unsigned a = 0; a < 16; a++) { - v = a; - v.Rotate(); - - ECC::ExtendWord(v); - printf("%d:\t", a); - - p = 0; - ECC::CalculateCheckbits(v, p); - ECC::InsertCheckbits(v, p); - ECC::CalculateParityBit(v, p[3]); - ECC::InsertParityBit(v, p[3]); - - v.Print(); - - v.Resize(size); - } - - printf("\r\n"); - - for (unsigned x = 0; x < 100; x++) { - //Get random number - unsigned a = rand() % 16; - - v.Resize(size); - v = a; - v.Rotate(); - - ECC::ExtendWord(v); - - p = 0; - ECC::CalculateCheckbits(v, p); - ECC::InsertCheckbits(v, p); - ECC::CalculateParityBit(v, p[3]); - ECC::InsertParityBit(v, p[3]); - v.Print(); - - // Insert error - unsigned pos = rand() % 8; - v[pos] ^= CBit(CBit::ONE); - - printf("Data: %d, Error at pos %d: ", a, pos + 1); - v[pos].Print(); - printf("\r\n"); - v.Print(); - - p = 0; - ECC::CalculateCheckbits(v, p); - ECC::CalculateParityBit(v, p[3]); - - printf("%d:\t", a); - - p.Print(); - - // Interpreting Data - - unsigned syndrome = 0; - for (unsigned i = 0; i < p.GetLength() - 1; i++) { - if (p[i] == CBit::ONE) - syndrome += (1 << i); - } - - if (p[3] == CBit::ZERO) { - // Parity even - - if (syndrome) { - // Double error - printf("Double error detected.\r\n"); - break; - } else { - // No Error - printf("No error detected.\r\n"); - break; - } - } else { - // Parity odd - - if (syndrome) { - // Bit error - printf("Error detected in Bit %d.\r\n", syndrome); - if (syndrome == pos + 1) - continue; - else - break; - } else { - // Overall parity Error - printf("Overall parity error detected.\r\n"); - if (pos == 7 || pos == 3 || pos == 1 || pos == 0) - continue; - else - break; - } - } - } - system("pause"); - - return 0; -} - diff --git a/DRAMSys/library/src/error/ECC/Word.cpp b/DRAMSys/library/src/error/ECC/Word.cpp deleted file mode 100644 index 928af5ce..00000000 --- a/DRAMSys/library/src/error/ECC/Word.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -#include "Word.h" - -#include -#include -#include - -using std::cout; -using std::deque; - -CWord::CWord(unsigned nBitLength) - : m_nBitLength(nBitLength) -{ - m_word.resize(nBitLength); -} - - -CWord::~CWord() -{ -} - -CBit *CWord::GetAt(unsigned nBitPos) -{ - if (nBitPos < m_nBitLength) { - return &m_word.at(nBitPos); - } - - return nullptr; -} - -void CWord::Set(unsigned data) -{ - deque::iterator it; - if (m_nBitLength < sizeof(data)) { - it = m_word.begin(); - for (unsigned i = 0; i < m_nBitLength; i++) { - (*it++) = data & 1; - data >>= 1; - } - } else { - for (it = m_word.begin(); it != m_word.end(); it++) { - (*it) = data & 1; - data >>= 1; - } - } -} - -void CWord::Set(const unsigned char *data, unsigned lengthInBits) -{ - deque::iterator it; - if (m_nBitLength < lengthInBits) { - it = m_word.begin(); - for (unsigned pos = 0; pos < m_nBitLength; pos++) { - (*it) = data[pos >> 3] & (1 << (7 - (pos & 7))); - it++; - } - } else { - unsigned pos = 0; - for (it = m_word.begin(); it != m_word.end(); it++) { - (*it) = data[pos >> 3] & (1 << (7 - (pos & 7))); - ++pos; - } - } -} - -void CWord::Rotate() -{ - deque buffer = m_word; - for (unsigned i = 0; i < m_nBitLength; i++) { - m_word.at(m_nBitLength - i - 1) = buffer.at(i); - } -} - -bool CWord::Insert(unsigned npos, CBit b) -{ - if (npos >= m_nBitLength) - return false; - - deque::iterator it = m_word.begin() + npos; - m_word.insert(it, b); - - m_nBitLength++; - - return true; -} - -bool CWord::Delete(unsigned npos) -{ - if (npos >= m_nBitLength) - return false; - - deque::iterator it = m_word.begin() + npos; - m_word.erase(it); - - m_nBitLength++; - - return true; -} - -void CWord::Append(CBit b) -{ - m_word.push_back(b); - - m_nBitLength++; -} - -void CWord::Resize(unsigned nsize) -{ - m_word.resize(nsize); - m_nBitLength = nsize; -} - -bool CWord::PartShiftRight(unsigned nPos, unsigned /*nShift*/) -{ - if (nPos >= m_nBitLength) - return false; - - /*for (unsigned i = 0; i < nShift; i++) - { - m_word.insert() - }*/ - - return true; -} - -void CWord::Print() -{ - deque::iterator it; - for (it = m_word.begin(); it != m_word.end(); it++) { - (*it).Print(); - } - cout << "\r\n"; -} - -void CWord::Copy(unsigned char *ptr) -{ - unsigned len = ceil(m_word.size() / 8); - memset(ptr, 0, len); - - unsigned pos = 0; - for (auto it = m_word.begin(); it != m_word.end(); it++) { - ptr[pos >> 3] |= (*it).Get() << (7 - (pos & 7)); - ++pos; - } -} diff --git a/DRAMSys/library/src/error/ECC/Word.h b/DRAMSys/library/src/error/ECC/Word.h deleted file mode 100644 index dec8606b..00000000 --- a/DRAMSys/library/src/error/ECC/Word.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -#pragma once - -#include -#include "Bit.h" - -class CWord -{ -protected: - - unsigned m_nBitLength; - std::deque m_word; - - -public: - CWord(unsigned nBitLength); - virtual ~CWord(); - - CBit *GetAt(unsigned nBitPos); - - void Set(unsigned data); - void Set(const unsigned char *data, unsigned lengthInBits); - void Rotate(); - - bool Insert(unsigned npos, CBit b); - bool Delete(unsigned npos); - - void Copy(unsigned char *ptr); - - void Append(CBit b); - - void Resize(unsigned nsize); - - bool PartShiftRight(unsigned nPos, unsigned nShift); - - inline unsigned GetLength() const - { - return m_nBitLength; - }; - - void Print(); - - CWord &operator=(unsigned d) - { - Set(d); - return *this; - } - - CBit &operator[](unsigned nPos) - { - return m_word.at(nPos); - } - - friend CWord operator >> (CWord l, const unsigned &r) - { - for (unsigned i = 0; i < r; i++) { - l.m_word.pop_front(); - l.m_word.push_back(CBit(CBit::VALUE::ZERO)); - } - return l; - } -}; - diff --git a/DRAMSys/library/src/error/eccbaseclass.cpp b/DRAMSys/library/src/error/eccbaseclass.cpp deleted file mode 100644 index 3f266077..00000000 --- a/DRAMSys/library/src/error/eccbaseclass.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -#include "eccbaseclass.h" - -using namespace sc_core; -using namespace tlm; - -tlm::tlm_sync_enum ECCBaseClass::nb_transport_fw( int id, - tlm::tlm_generic_payload &trans, tlm::tlm_phase &phase, sc_time &delay ) -{ - if (trans.get_command() == TLM_WRITE_COMMAND && phase == BEGIN_REQ) { - // Allocate memory for encoded data using the size provided by AllocationEncode - unsigned nEncodedDataSize = AllocationSize(trans.get_data_length()); - assert(nEncodedDataSize != 0); - unsigned char *pEncodedData = new unsigned char[nEncodedDataSize]; - - // Save memory pointer and size - m_mDataPointer[pEncodedData].pData = trans.get_data_ptr(); - m_mDataPointer[pEncodedData].nDataSize = trans.get_data_length(); - - // Data Encoding - Encode(trans.get_data_ptr(), trans.get_data_length(), pEncodedData, - nEncodedDataSize); - - // Change transport data length and pointer - trans.set_data_length(nEncodedDataSize); - trans.set_data_ptr(pEncodedData); - } else if (trans.get_command() == TLM_READ_COMMAND && phase == BEGIN_REQ) { - // Allocate memory for reading data using the size provided by AllocationEncode - unsigned nReadDataSize = AllocationSize(trans.get_data_length()); - assert(nReadDataSize != 0); - unsigned char *pReadData = new unsigned char[nReadDataSize]; - - // Save memory pointer and size - m_mDataPointer[pReadData].pData = trans.get_data_ptr(); - m_mDataPointer[pReadData].nDataSize = trans.get_data_length(); - - // Change transport data length and pointer - trans.set_data_length(nReadDataSize); - trans.set_data_ptr(pReadData); - } - - return i_socket[id]->nb_transport_fw( trans, phase, delay ); -} - - -// Backward interface -tlm::tlm_sync_enum ECCBaseClass::nb_transport_bw( int id, - tlm::tlm_generic_payload &trans, tlm::tlm_phase &phase, sc_time &delay ) -{ - if (trans.get_command() == TLM_READ_COMMAND && phase == BEGIN_RESP) { - //Look for the corresponding data pointer for decoding - auto it = m_mDataPointer.find(trans.get_data_ptr()); - assert(it != m_mDataPointer.end()); - - // Data Decoding - Decode(trans.get_data_ptr(), trans.get_data_length(), it->second.pData, - it->second.nDataSize); - - // delete data pointer from map - m_mDataPointer.erase(it); - - // Delete data pointer used for encoded data - delete[] trans.get_data_ptr(); - - // Set data pointer and size for decoded data - trans.set_data_ptr(it->second.pData); - trans.set_data_length(it->second.nDataSize); - } else if (trans.get_command() == TLM_WRITE_COMMAND && phase == BEGIN_RESP) { - //Look for the corresponding data pointer for decoding - auto it = m_mDataPointer.find(trans.get_data_ptr()); - assert(it != m_mDataPointer.end()); - - // delete data pointer from map - m_mDataPointer.erase(it); - - // Delete data pointer used for encoded data - delete[] trans.get_data_ptr(); - - // Set data pointer and size for decoded data - trans.set_data_ptr(it->second.pData); - trans.set_data_length(it->second.nDataSize); - } - - return t_socket[id]->nb_transport_bw( trans, phase, delay ); -} diff --git a/DRAMSys/library/src/error/eccbaseclass.h b/DRAMSys/library/src/error/eccbaseclass.h deleted file mode 100644 index 9a9d52bb..00000000 --- a/DRAMSys/library/src/error/eccbaseclass.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -#ifndef ECCBASECLASS_H -#define ECCBASECLASS_H - -#include -#include -#include -#include - -#include "ECC/ECC.h" - -#include "../common/DebugManager.h" - -class ECCBaseClass : sc_core::sc_module -{ -public: - struct DataStruct { - unsigned char *pData; - unsigned int nDataSize; - }; - -private: - std::map m_mDataPointer; - -public: - // Function prototype for calculated the size of memory needed for saving the encoded data - // Input nBytes: Number of bytes which have to be encoded - // Return value: Number of bytes which have to be allocated for storing the encoded data - virtual unsigned AllocationSize(unsigned nBytes) = 0; - -protected: - // Function prototype for encoding data. - // Data pointer is provided in pDataIn, length in Bytes provided in nDataIn - // Result should be written in pDataOut, which has a size of nDataOut. - // pDataOut is already allocated with a size given by function AllocationEncode - virtual void Encode(const unsigned char *pDataIn, unsigned nDataIn, - unsigned char *pDataOut, unsigned nDataOut) = 0; - - - // Function prototype for decoding data. - // Data pointer is provided in pDataIn, length in Bytes provided in nDataIn - // Result should be written in pDataOut, which has a size of nDataOut. - // pDataOut is already allocated with a size given by function AllocationDecode - virtual void Decode(const unsigned char *pDataIn, unsigned nDataIn, - unsigned char *pDataOut, unsigned nDataOut) = 0; - -public: - tlm_utils::multi_passthrough_target_socket t_socket; - tlm_utils::multi_passthrough_initiator_socket i_socket; - - SC_CTOR(ECCBaseClass) - : t_socket("t_socket") - , i_socket("i_socket") - { - t_socket.register_nb_transport_fw(this, &ECCBaseClass::nb_transport_fw); - i_socket.register_nb_transport_bw(this, &ECCBaseClass::nb_transport_bw); - } - // Forward interface - tlm::tlm_sync_enum nb_transport_fw( int id, tlm::tlm_generic_payload &trans, - tlm::tlm_phase &phase, sc_core::sc_time &delay ); - - // Backward interface - tlm::tlm_sync_enum nb_transport_bw( int id, tlm::tlm_generic_payload &trans, - tlm::tlm_phase &phase, sc_core::sc_time &delay ); -}; - -#endif // ECCBASECLASS_H diff --git a/DRAMSys/library/src/error/ecchamming.cpp b/DRAMSys/library/src/error/ecchamming.cpp deleted file mode 100644 index 65255532..00000000 --- a/DRAMSys/library/src/error/ecchamming.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -#include "ecchamming.h" - -#include "ECC/ECC.h" - -unsigned ECCHamming::AllocationSize(unsigned nBytes) -{ - // For this hamming for 8 bytes one extra byte is needed:l - return nBytes + ceil(nBytes / m_nDatawordSize) * m_nCodewordSize; -} - -void ECCHamming::Encode(const unsigned char *pDataIn, const unsigned nDataIn, - unsigned char *pDataOut, const unsigned nDataOut) -{ - // Calculate how many 8 byte blocks are there - unsigned nBlocks = nDataIn / m_nDatawordSize; - - // No partly filled blocks are supported - assert(nDataIn % m_nDatawordSize == 0); - - // Create ECC data for every block - for (unsigned i = 0; i < nBlocks; i++) { - // Create all variables needed for calulation - CWord dataword(InBits(m_nDatawordSize)); // Size in bits - CWord codeword(InBits(m_nCodewordSize)); // Size in bits - - // Fill in current data block - dataword.Set(&pDataIn[i * m_nDatawordSize], InBits(m_nDatawordSize)); - - // Extend data word. It grows from m_nDatawordSize to m_nDatawordSize + m_nCodewordSize - ECC::ExtendWord(dataword); - - // Initialize the codeword with zeros - codeword = 0; - - // Calculate Checkbits - ECC::CalculateCheckbits(dataword, codeword); - ECC::InsertCheckbits(dataword, codeword); - - // Calculate Parity - ECC::CalculateParityBit(dataword, codeword[7]); - - // Check if there is enough space in the output array (should always be) - assert((i + 1) * (m_nDatawordSize + m_nCodewordSize) <= nDataOut); - - // Copy old data - memcpy(&pDataOut[i * (m_nDatawordSize + m_nCodewordSize)], - &pDataIn[i * m_nDatawordSize], m_nDatawordSize); - - // Save hamming code + parity bit in the last byte - codeword.Copy(&pDataOut[i * (m_nDatawordSize + m_nCodewordSize) + - m_nDatawordSize]); - } -} - -void ECCHamming::Decode(const unsigned char *pDataIn, const unsigned nDataIn, - unsigned char *pDataOut, const unsigned nDataOut) -{ - // Calculate how many 9 byte blocks are there - unsigned nBlocks = nDataIn / (m_nDatawordSize + m_nCodewordSize); - - // No partly filled blocks are supported - assert(nDataIn % (m_nDatawordSize + m_nCodewordSize) == 0); - - // Verify ECC data for every block - for (unsigned i = 0; i < nBlocks; i++) { - // Create all variables needed for calulation - CWord dataword(InBits(m_nDatawordSize)); // Size in bits - CWord codeword(InBits(m_nCodewordSize)); // Size in bits - - // Fill in current data block - dataword.Set(&pDataIn[i * (m_nDatawordSize + m_nCodewordSize)], - InBits(m_nDatawordSize)); - codeword.Set(&pDataIn[i * (m_nDatawordSize + m_nCodewordSize) + - m_nDatawordSize], InBits(m_nCodewordSize)); - - // Extend data word. It grows from m_nDatawordSize to m_nDatawordSize + m_nCodewordSize - ECC::ExtendWord(dataword); - - // Insert old codeword - ECC::InsertCheckbits(dataword, codeword); - ECC::InsertParityBit(dataword, codeword[7]); - - // Reset codeword - codeword = 0; - - // Calculate Checkbits again - ECC::CalculateCheckbits(dataword, codeword); - - // Calculate Parity again - ECC::CalculateParityBit(dataword, codeword[7]); - - // Translate codeword - bool bParity = codeword[7] == CBit::ONE; - - // calculate syndrome - unsigned char c = 0; - codeword.Rotate(); - codeword.Copy(&c); - c &= 0x7F; - - // Parity Error? - if (bParity) { - // Parity Error - - if (c == 0) { - // Only Parity Bit broken - continue - std::cout << "Parity Bit error" << std::endl; - } else { - // Data or Hamming Code Bit broken - std::cout << "Single Error Detected" << std::endl; - } - } else { - // No Parity Error - - if (c == 0) { - // No error at all - continue - } else { - // Double error detected - std::cout << "Double Error Detected (Block " << i << ")." << std::endl; - } - } - - // Check if there is enough space in the output array (should always be) - assert((i + 1) * (m_nDatawordSize) <= nDataOut); - - // Copy data - memcpy(&pDataOut[i * m_nDatawordSize], - &pDataIn[i * (m_nDatawordSize + m_nCodewordSize)], m_nDatawordSize); - } -} diff --git a/DRAMSys/library/src/error/ecchamming.h b/DRAMSys/library/src/error/ecchamming.h deleted file mode 100644 index 14986cd7..00000000 --- a/DRAMSys/library/src/error/ecchamming.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2017, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Johannes Feldmann - * Eder F. Zulian - */ - -#ifndef ECCHAMMIMG_H -#define ECCHAMMIMG_H - -#include "eccbaseclass.h" - - -class ECCHamming : public ECCBaseClass -{ -private: - // Hamming constants for this special implementation - const unsigned m_nDatawordSize = 8; // bytes - const unsigned m_nCodewordSize = 1; // bytes - - inline unsigned InBits(unsigned n) - { - return n << 3; - }; // use this if constants are needed in bits - -public: - // Function prototype for calculated the size of memory needed for saving the encoded data - // Input nBytes: Number of bytes which have to be encoded - // Return value: Number of bytes which have to be allocated for storing the encoded data - virtual unsigned AllocationSize(unsigned nBytes); - -protected: - // Function prototype for encoding data. - // Data pointer is provided in pDataIn, length in Bytes provided in nDataIn - // Result should be written in pDataOut, which has a size of nDataOut. - // pDataOut is already allocated with a size given by function AllocationEncode - virtual void Encode(const unsigned char *pDataIn, unsigned nDataIn, - unsigned char *pDataOut, unsigned nDataOut); - - - // Function prototype for decoding data. - // Data pointer is provided in pDataIn, length in Bytes provided in nDataIn - // Result should be written in pDataOut, which has a size of nDataOut. - // pDataOut is already allocated with a size given by function AllocationDecode - virtual void Decode(const unsigned char *pDataIn, unsigned nDataIn, - unsigned char *pDataOut, unsigned nDataOut); - -public: - ECCHamming(::sc_core::sc_module_name name) : ECCBaseClass(name) - {}; -}; - -#endif // ECCHAMMIMG_H diff --git a/DRAMSys/library/src/error/errormodel.cpp b/DRAMSys/library/src/error/errormodel.cpp deleted file mode 100644 index 86e86a03..00000000 --- a/DRAMSys/library/src/error/errormodel.cpp +++ /dev/null @@ -1,753 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Matthias Jung - */ - -#include "errormodel.h" -#include "../common/DebugManager.h" -#include "../simulation/TemperatureController.h" -#include "../simulation/AddressDecoder.h" -#include "../common/dramExtensions.h" - -#ifdef DRAMPOWER -#include "../../common/third_party/DRAMPower/src/libdrampower/LibDRAMPower.h" -#endif - -#include -#include -#include -#include -#include -#include - -using namespace sc_core; - -errorModel::errorModel(const sc_module_name& name, const Configuration& config, - TemperatureController& temperatureController, libDRAMPower *dramPower) - : sc_module(name), memSpec(*config.memSpec), temperatureController(temperatureController) -{ - this->DRAMPower = dramPower; - init(config); -} - -void errorModel::init(const Configuration& config) -{ - powerAnalysis = config.powerAnalysis; - thermalSim = config.thermalSimulation; - // Get Configuration parameters: - burstLenght = config.memSpec->defaultBurstLength; - numberOfColumns = config.memSpec->columnsPerRow; - bytesPerColumn = std::log2(config.memSpec->dataBusWidth); - - // Adjust number of bytes per column dynamically to the selected ecc controller - //TODO: bytesPerColumn = Configuration::getInstance().adjustNumBytesAfterECC(bytesPerColumn); - - numberOfRows = config.memSpec->rowsPerBank; - numberOfBitErrorEvents = 0; - - - // Initialize the lastRow Access array: - lastRowAccess = new sc_time[numberOfRows]; - for (unsigned int i = 0; i < numberOfRows; i++) - lastRowAccess[i] = SC_ZERO_TIME; - - // The name is set when the context is clear. - contextStr = ""; - - // Parse data input: - parseInputData(config); - prepareWeakCells(); - - // Initialize context variables: - myChannel = -1; - myRank = -1; - myBankgroup = -1; - myBank = -1; - - // Test 1: - // If you want to test the function that get the number - // of bit errors for a given temperature and time - // uncomment the following lines: - // - //std::cout << "MAXTemp:" << maxTemperature << std::endl; - //std::cout << "MAXTime:" << maxTime << std::endl; - //getNumberOfFlips(45.0,sc_time(200.0,SC_MS)); - //getNumberOfFlips(45.0,sc_time(190.0,SC_MS)); - //getNumberOfFlips(45.0,sc_time(180.0,SC_MS)); - //getNumberOfFlips(75.0,sc_time(200.0,SC_MS)); - //getNumberOfFlips(75.0,sc_time(190.0,SC_MS)); - //getNumberOfFlips(75.0,sc_time(180.0,SC_MS)); - //getNumberOfFlips(85.0,sc_time(200.0,SC_MS)); - //getNumberOfFlips(85.0,sc_time(190.0,SC_MS)); - //getNumberOfFlips(85.0,sc_time(180.0,SC_MS)); - //getNumberOfFlips(88.0,sc_time(200.0,SC_MS)); - //getNumberOfFlips(88.0,sc_time(190.0,SC_MS)); - //getNumberOfFlips(88.0,sc_time(180.0,SC_MS)); - //getNumberOfFlips(89.0,sc_time(64.0,SC_MS)); - //getNumberOfFlips(89.0,sc_time(64.0,SC_MS)); - //getNumberOfFlips(89.0,sc_time(64.0,SC_MS)); - - // Test 2: - // X X X - // X 1 1 - // X 1 1 - //weakCells[0].bit = 0; - //weakCells[0].col = 0; - //weakCells[0].row = 0; - //weakCells[0].dependent = true; - - markBitFlips(); -} - -errorModel::~errorModel() -{ - // Remove all data from the dataMap: - for (std::map::iterator it = dataMap.begin(); - it != dataMap.end(); ++it ) { - delete it->second; - } - // Delete all elements from the dataMap: - dataMap.clear(); - - // Remove all data from the lastRowAccess - delete [] lastRowAccess; - - // Clean errorMap - errorMap.clear(); - - // Clean list of weak cells: - delete [] weakCells; - - // If an access happened to a bank the numner of error events should be shown: - if (myChannel != -1 && myBank != -1 && myBankgroup != -1 && myRank != -1 ) { - std::cout << contextStr - << ": Number of Retention Error Events = " << numberOfBitErrorEvents - << std::endl; - } -} - -void errorModel::store(tlm::tlm_generic_payload &trans) -{ - // Check wich bits have flipped during the last access and mark them as flipped: - markBitFlips(); - - // Get the key for the dataMap from the transaction's dram extension: - // FIXME -// ControllerExtension &ext = ControllerExtension::getExtension(trans); -// DecodedAddress key = DecodedAddress(ext.getChannel().ID(), ext.getRank().ID(), -// ext.getBankGroup().ID(), ext.getBank().ID(), -// ext.getRow().ID(), ext.getColumn().ID(), 0); - DecodedAddress key; -// Set context: - setContext(key); - - std::stringstream msg; - msg << "bank: " << key.bank << " group: " << key.bankgroup << " bytes: " << - key.byte << " channel: " << key.channel << " column: " << key.column << - " rank: " << key.rank << " row: " << key.row; - PRINTDEBUGMESSAGE(name(), msg.str()); - - // Check if the provided data length is correct: - assert((bytesPerColumn * burstLenght) == trans.get_data_length()); - - PRINTDEBUGMESSAGE(name(), ("Data length: " + std::to_string(trans.get_data_length()) + - " bytesPerColumn: " + std::to_string(bytesPerColumn)).c_str()); - - // Handle the DRAM burst, - for (unsigned int i = 0; i < trans.get_data_length(); i += bytesPerColumn) { - unsigned char *data; - - // Check if address is not already stored: - if (dataMap.count(key) == 0) { - // Generate a new data entry - data = new unsigned char[bytesPerColumn]; - } else { // In case the address was stored before: - data = dataMap[key]; - } - - // Copy the data from the transaction to the data pointer - memcpy(data, trans.get_data_ptr() + i, bytesPerColumn); - - // Save part of the burst in the dataMap - // TODO: Check if we can have double entries, is key unique? - dataMap.insert(std::pair(key, data)); - - // Reset flipped weak cells in this area, since they are rewritten now - for (unsigned int j = 0; j < maxNumberOfWeakCells; j++) { - // If the current written column in a row has a week cell: - if (weakCells[j].row == key.row && weakCells[j].col == key.column) { - // If the bit was marked as flipped due to a retention error - // mark it as unflipped: - if (weakCells[j].flipped == true) { - weakCells[j].flipped = false; - } - } - } - - // The next burst element is handled, therfore the column address must be increased - key.column++; - - // Check that there is no column overfow: - std::stringstream msg; - msg << "key.column is " << key.column << " columnsPerRow is " << - numberOfColumns; - PRINTDEBUGMESSAGE(name(), msg.str()); - assert(key.column <= numberOfColumns); - } -} - -void errorModel::load(tlm::tlm_generic_payload &trans) -{ - // Check wich bits have flipped during the last access and mark them as flipped: - markBitFlips(); - - // Get the key for the dataMap from the transaction's dram extension: - // FIXME -// DramExtension &ext = DramExtension::getExtension(trans); -// DecodedAddress key = DecodedAddress(ext.getChannel().ID(), ext.getRank().ID(), -// ext.getBankGroup().ID(), ext.getBank().ID(), -// ext.getRow().ID(), ext.getColumn().ID(), 0); - DecodedAddress key; - // Set context: - setContext(key); - - // Check if the provided data length is correct: - assert((bytesPerColumn * burstLenght) == trans.get_data_length()); - - // Handle the DRAM burst: - for (unsigned int i = 0; i < trans.get_data_length(); i += bytesPerColumn) { - // Check if address is not stored: - if (dataMap.count(key) == 0) { - SC_REPORT_FATAL("errormodel", "Reading from an empty memory location"); - } - - // Copy the dataMap to the transaction data pointer - memcpy(trans.get_data_ptr() + i, dataMap[key], bytesPerColumn); - - // The next burst element is handled, therfore the column address must be increased - key.column++; - - // Check that there is no column overfow: - assert(key.column <= numberOfColumns); - } -} - -void errorModel::markBitFlips() -{ - double temp = getTemperature(); - for (unsigned int row = 0; - row < memSpec.rowsPerBank; row++) { - // If the row has never been accessed ignore it and go to the next one - if (lastRowAccess[row] != SC_ZERO_TIME) { - // Get the time interval between now and the last acivate/refresh - sc_time interval = sc_time_stamp() - lastRowAccess[row]; - - // Obtain the number of bit flips for the current temperature and the time interval: - unsigned int n = getNumberOfFlips(temp, interval); - - // Check if the current row is in the range of bit flips for this interval - // and temperature, if yes mark it as flipped: - for (unsigned int i = 0; i < n; i++) { - // Check if Bit has marked as flipped yet, if yes mark it as flipped - if (!weakCells[i].flipped && weakCells[i].row == row) { - std::stringstream msg; - msg << "Maked weakCell[" << i << "] as flipped" << std::endl; - PRINTDEBUGMESSAGE(name(), msg.str()); - - weakCells[i].flipped = true; - } - } - } - } -} - -void errorModel::refresh(unsigned int row) -{ - // A refresh is internally composed of ACT and PRE that are executed - // on all banks, therefore we call the activate method: - activate(row); -} - -void errorModel::activate(unsigned int row) -{ - // Check wich bits have flipped during the last access and mark them as flipped: - markBitFlips(); - - // The Activate command is responsible that an retention error is manifested. - // Therefore, Flip the bit in the data structure if it is marked as flipped - // and if it is a one. Transisitons from 0 to 1 are only happening - // in DRAM with anticells. This behavior is not implemented yet. - for (unsigned int i = 0; i < maxNumberOfWeakCells; i++) { - if (weakCells[i].flipped == true && weakCells[i].row == row) { - // Estimate key to access column data - DecodedAddress key; - key.bank = myBank; - key.bankgroup = myBankgroup; - key.channel = myChannel; - key.column = weakCells[i].col; - key.rank = myRank; - key.row = row; - - // Byte position in column: - unsigned int byte = weakCells[i].bit / 8; - - // Bit position in byte: - unsigned int bitInByte = weakCells[i].bit % 8; - - // Check if the bit is 1 (only 1->0 transitions are supported) - // DRAMs based on anti cells are not supported yet by this model - if (getBit(key, byte, bitInByte) == 1) { - // Prepare bit mask: invert mask and AND it later - unsigned char mask = pow(2, bitInByte); - mask = ~mask; - - // Temporal storage for modification: - unsigned char tempByte; - - if (weakCells[i].dependent == false) { - // Load the affected byte to tempByte - memcpy(&tempByte, dataMap[key] + byte, 1); - - // Flip the bit: - tempByte = (tempByte & mask); - - // Output on the Console: - std::stringstream msg; - msg << "Bit Flipped!" - << " row: " << key.row - << " col: " << key.column - << " bit: " << weakCells[i].bit; - PRINTDEBUGMESSAGE(name(), msg.str()); - - numberOfBitErrorEvents++; - - // Copy the modified byte back to the dataMap: - memcpy(dataMap[key] + byte, &tempByte, 1); - } else { // if(weakCells[i].dependent == true) - // Get the neighbourhood of the bit and store it in the - // grid variable: - // | 0 1 2 | - // grid = | 3 4 5 | - // | 6 7 8 | - - unsigned int grid[9]; - - grid[0] = getBit(key.row - 1, key.column, byte, bitInByte - 1); - grid[1] = getBit(key.row - 1, key.column, byte, bitInByte ); - grid[2] = getBit(key.row - 1, key.column, byte, bitInByte + 1); - - grid[3] = getBit(key.row , key.column, byte, bitInByte - 1); - grid[4] = getBit(key.row , key.column, byte, bitInByte ); - grid[5] = getBit(key.row , key.column, byte, bitInByte + 1); - - grid[6] = getBit(key.row + 1, key.column, byte, bitInByte - 1); - grid[7] = getBit(key.row + 1, key.column, byte, bitInByte ); - grid[8] = getBit(key.row + 1, key.column, byte, bitInByte + 1); - - unsigned int sum = 0; - for (int s = 0; s < 9; s++) { - sum += grid[s]; - } - - if (sum <= 4) { - // Load the affected byte to tempByte - memcpy(&tempByte, dataMap[key] + byte, 1); - - // Flip the bit: - tempByte = (tempByte & mask); - numberOfBitErrorEvents++; - - // Copy the modified byte back to the dataMap: - memcpy(dataMap[key] + byte, &tempByte, 1); - - // Output on the Console: - std::stringstream msg; - msg << "Dependent Bit Flipped!" - << " row: " << key.row - << " col: " << key.column - << " bit: " << weakCells[i].bit - << " sum: " << sum << std::endl - << grid[0] << grid[1] << grid[2] << std::endl - << grid[3] << grid[4] << grid[5] << std::endl - << grid[6] << grid[7] << grid[8]; - PRINTDEBUGMESSAGE(name(), msg.str()); - } else { - // Output on the Console: - std::stringstream msg; - msg << "Dependent Bit NOT Flipped!" - << " row: " << key.row - << " col: " << key.column - << " bit: " << weakCells[i].bit - << " sum: " << sum << std::endl - << grid[0] << grid[1] << grid[2] << std::endl - << grid[3] << grid[4] << grid[5] << std::endl - << grid[6] << grid[7] << grid[8]; - PRINTDEBUGMESSAGE(name(), msg.str()); - } - } - } - } - } - - lastRowAccess[row] = sc_time_stamp(); -} - -// This method is used to get a bit with a key, usually for independent case: -unsigned int errorModel::getBit(DecodedAddress key, unsigned int byteInColumn, - unsigned int bitInByte) -{ - // If the data was not writte by the produce yet it is zero: - if (dataMap.count(key) == 0) { - return 0; - } else { // Return the value of the bit - unsigned char tempByte; - - // Copy affected byte to a temporal variable: - memcpy(&tempByte, dataMap[key] + byteInColumn, 1); - unsigned char mask = pow(2, bitInByte); - unsigned int result = (tempByte & mask) >> bitInByte; - std::bitset<8> x(mask); - - std::stringstream msg; - msg << "mask = " << x - << " bitInByte = " << bitInByte - << " tempByte = " << (unsigned int)tempByte - << " result = " << result; - - PRINTDEBUGMESSAGE(name(), msg.str()); - - return result; - } -} - -// This method is used to get neighbourhoods, for the dependent case: -unsigned int errorModel::getBit(int row, int column, int byteInColumn, - int bitInByte) -{ - // Border-Exception handling: - - // Switch the byte if bit under/overflow: - if (bitInByte < 0) { - byteInColumn--; - bitInByte = 7; - } else if (bitInByte >= 8) { - byteInColumn++; - bitInByte = 0; - } - - // Switch the column if byte under/overflow - if (byteInColumn < 0) { - column--; - byteInColumn = bytesPerColumn; - } else if (byteInColumn >= int(byteInColumn)) { - column++; - byteInColumn = 0; - } - - // If we switch the row we return 0 (culumn under/overflow) - if (column < 0) { - return 0; - } else if (column >= int(numberOfColumns)) { - return 0; - } - - // Row over/underflow return 0 - if (row < 0) { - return 0; - } else if (row >= int(numberOfRows)) { - return 0; - } - - DecodedAddress key; - key.bank = myBank; - key.bankgroup = myBankgroup; - key.channel = myChannel; - key.rank = myRank; - key.column = column; - key.row = row; - - return getBit(key, byteInColumn, bitInByte); -} - -double errorModel::getTemperature() -{ - // FIXME - // make sure the context is set (myChannel has the proper value) before - // requesting the temperature. - double temperature = 89; - - if (this->myChannel != -1) - { -#ifdef DRAMPOWER - if (thermalSim && powerAnalysis) - { - // TODO - // check if this is best way to request information to DRAMPower. - unsigned long long clk_cycles = sc_time_stamp() / memSpec.tCK; - DRAMPower->calcWindowEnergy(clk_cycles); - float average_power = (float)DRAMPower->getPower().average_power; - temperature = temperatureController.getTemperature(this->myChannel, average_power); - } else { - temperature = temperatureController.getTemperature(this->myChannel, 0); - } -#else - temperature = temperatureController.getTemperature(this->myChannel, 0); -#endif - } - - return temperature; -} - -void errorModel::parseInputData(const Configuration& config) -{ - std::string fileName = config.errorCSVFile; - std::ifstream inputFile(fileName); - - if (inputFile.is_open()) { - std::string line; - while (std::getline(inputFile, line)) { - std::istringstream iss(line); - std::string str_temperature; - std::string str_retentionTime; - std::string str_mu_independent; - std::string str_sigma_independent; - std::string str_mu_dependent; - std::string str_sigma_dependent; - - // Parse file: - iss >> str_temperature - >> str_retentionTime - >> str_mu_independent - >> str_sigma_independent - >> str_mu_dependent - >> str_sigma_dependent; - - double temp = std::stod(str_temperature.c_str(), 0); - sc_time retentionTime = sc_time(std::stod(str_retentionTime.c_str(), 0), - SC_MS); - - unsigned int mu_independent = std::stod(str_mu_independent.c_str(), 0); - unsigned int sigma_independent = std::stod(str_sigma_independent.c_str(), 0); - unsigned int mu_dependent = std::stod(str_mu_dependent.c_str(), 0); - unsigned int sigma_dependent = std::stod(str_sigma_dependent.c_str(), 0); - - errors e; - - //calculate normal distribution of # of independent errors - unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); - std::default_random_engine generator(seed); - std::normal_distribution distribution(mu_independent, - sigma_independent); - e.independent = ceil(distribution(generator)); - - // calculate normal distribution of # of dependent errors - unsigned seed2 = std::chrono::system_clock::now().time_since_epoch().count(); - std::default_random_engine generator2(seed2); - std::normal_distribution distribution2(mu_dependent, sigma_dependent); - e.dependent = ceil(distribution2(generator2)); - - // Store parsed data to the errorMap: - errorMap[temp][retentionTime] = e; - - std::stringstream msg; - msg << "Temperature = " << temp - << " Time = " << retentionTime - << " independent = " << errorMap[temp][retentionTime].independent - << " dependent = " << errorMap[temp][retentionTime].dependent; - - PRINTDEBUGMESSAGE(name(), msg.str()); - } - inputFile.close(); - } else { - SC_REPORT_FATAL("errormodel", "Cannot open ErrorCSVFile"); - } -} - -void errorModel::prepareWeakCells() -{ - // Get the Maxium number of weak cells by iterating over the errorMap: - maxNumberOfWeakCells = 0; - maxNumberOfDepWeakCells = 0; - for ( const auto &i : errorMap ) { - for ( const auto &j : i.second ) { - // Get number of dependent weak cells: - if ( j.second.dependent > maxNumberOfDepWeakCells) { - maxNumberOfDepWeakCells = j.second.dependent; - } - - // Get the total number of weak cells (independet + dependent): - if ( j.second.independent + j.second.dependent > maxNumberOfWeakCells) { - maxNumberOfWeakCells = j.second.independent + j.second.dependent; - } - } - } - - // Get the highest temperature in the error map: - maxTemperature = 0; - for ( const auto &i : errorMap ) { - if (i.first > maxTemperature) { - maxTemperature = i.first; - } - } - - // Get the highest time in the error map: - maxTime = SC_ZERO_TIME; - for ( const auto &i : errorMap ) { - for ( const auto &j : i.second ) { - if (j.first > maxTime) { - maxTime = j.first; - } - } - } - - // Generate weak cells: - - weakCells = new weakCell[maxNumberOfWeakCells]; - - for (unsigned int i = 0; i < maxNumberOfWeakCells; i++) { - unsigned int row, col, bit; - - // Select positions of weak cells randomly, uniformly distributed: - row = (unsigned int) (rand() % numberOfRows); - col = (unsigned int) (rand() % numberOfColumns); - bit = (unsigned int) (rand() % (bytesPerColumn * 8)); - - // Test if weak cell has been chosen already before: - bool found = false; - for (unsigned int k = 0; k < i; k++) { - if ((weakCells[k].row == row) && (weakCells[k].col == col) - && (weakCells[k].bit == bit)) { - found = true; - break; - } - } - // If a cell was already choosen as weak we have to roll the dice again: - if (found) { - i--; - } else { - weakCells[i].row = row; // Row in the bank - weakCells[i].col = col; // Column in the row - weakCells[i].bit = bit; // Bit position in column - weakCells[i].flipped = - false; // Flag whether this position has already flipped - weakCells[i].dependent = - false; // init dependency flag with false, dependent cells will be estimated in the next step - } - } - - // Generate dependent weak cells: - for (unsigned int i = 1; i <= maxNumberOfDepWeakCells; i++) { - unsigned int r = (rand() % maxNumberOfWeakCells); - - // If the dependent weak cell was choosen before roll the dice again: - if (weakCells[r].dependent) { - i--; - } else { - weakCells[r].dependent = true; - } - - } - - // Debug output where the weak cells are located: - for (unsigned int i = 0; i < maxNumberOfWeakCells; i++) { - std::stringstream msg; - msg << "row=" << weakCells[i].row - << " col=" << weakCells[i].col - << " bit=" << weakCells[i].bit - << " flip=" << weakCells[i].flipped - << " dep=" << weakCells[i].dependent; - PRINTDEBUGMESSAGE(name(), msg.str()); - } -} - -// Retrieve number of flipping bits which fits best to temperature input and time since last refresh -unsigned int errorModel::getNumberOfFlips(double temp, sc_time time) -{ - // Check if the provided temperature and retention time are in a valid - // range that is covered by the input data stored in the errorMap. In case - // of values out of the valid range the simulation will be aborted. - if (temp > maxTemperature) { - SC_REPORT_FATAL("errormodel", "temperature out of range"); - } - - if (time > maxTime) { - SC_REPORT_FATAL("errormodel", "time out of range"); - } - - // Find nearest temperature: - double nearestTemperature = 0; - for ( const auto &i : errorMap ) { - if (i.first >= temp) { // for worst case reasons we go to the next bin - nearestTemperature = i.first; - break; - } - } - - // Find nearest time: - sc_time nearestTime; - for ( const auto &i : errorMap[nearestTemperature]) { - if (i.first >= time) { // for worst case reasons we go to the next bin - nearestTime = i.first; - break; - } - } - - errors e = errorMap[nearestTemperature][nearestTime]; - - //std::stringstream msg; - //msg << "ACT/REF temp:" << temp - // << " time:" << time - // << " nearestTemp:" << nearestTemperature - // << " nearestTime:" << nearestTime - // << " ind:" << e.independent - // << " dep:" << e.dependent; - - //printDebugMessage(msg.str()); - - return e.independent + e.dependent; -} - -void errorModel::setContext(DecodedAddress addr) -{ - // This function is called the first store ore load to get the context in - // which channel, rank or bank the error model is used. - if (myChannel == -1 && myBank == -1 && myBankgroup == -1 && myRank == -1 ) { - myChannel = addr.channel; - myBank = addr.bank; - myBankgroup = addr.bankgroup; - myRank = addr.rank; - - contextStr = "Channel_" + std::to_string(myChannel) + "_Bank_" + std::to_string( - myBank) + " "; - } -} diff --git a/DRAMSys/library/src/error/errormodel.h b/DRAMSys/library/src/error/errormodel.h deleted file mode 100644 index 312bbdd6..00000000 --- a/DRAMSys/library/src/error/errormodel.h +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Matthias Jung - */ - -#ifndef ERRORMODEL_H -#define ERRORMODEL_H - -#include - -#include -#include "../configuration/Configuration.h" -#include "../simulation/AddressDecoder.h" -#include "../simulation/TemperatureController.h" - -class libDRAMPower; - -class errorModel : public sc_core::sc_module -{ -public: - errorModel(const sc_core::sc_module_name& name, const Configuration& config, - TemperatureController& temperatureController, libDRAMPower* dramPower = nullptr); - ~errorModel() override; - - // Access Methods: - void store(tlm::tlm_generic_payload &trans); - void load(tlm::tlm_generic_payload &trans); - void refresh(unsigned int row); - void activate(unsigned int row); - void setTemperature(double t); - double getTemperature(); - -private: - void init(const Configuration& config); - bool powerAnalysis; - libDRAMPower *DRAMPower; - bool thermalSim; - TemperatureController& temperatureController; - const MemSpec& memSpec; - // Configuration Parameters: - unsigned int burstLenght; - unsigned int numberOfColumns; - unsigned int bytesPerColumn; - unsigned int numberOfRows; - - // context: - std::string contextStr; - - // Online Parameters: - unsigned int numberOfBitErrorEvents; - - // Private Methods: - void parseInputData(const Configuration& config); - void prepareWeakCells(); - void markBitFlips(); - unsigned int getNumberOfFlips(double temp, sc_core::sc_time time); - void setContext(DecodedAddress addr); - unsigned int getBit(DecodedAddress key, unsigned int byte, - unsigned int bitInByte); - unsigned int getBit(int row, int column, int byteInColumn, int bitInByte); - - // Input related data structures: - - struct errors { - double independent; - double dependent; - }; - - // temperature time number of errors - // | | | - std::map > errorMap; - - unsigned int maxNumberOfWeakCells; - unsigned int maxNumberOfDepWeakCells; - double maxTemperature; - sc_core::sc_time maxTime; - - // Storage of weak cells: - struct weakCell { - unsigned int row; - unsigned int col; - unsigned int bit; - bool flipped; - bool dependent; - }; - - weakCell *weakCells; - - // To use a map for storing the data a comparing function must be defined - struct DecodedAddressComparer - { - bool operator() (const DecodedAddress &first , - const DecodedAddress &second) const - { - if (first.row == second.row) - return first.column < second.column; - else - return first.row < second.row; - } - }; - - // The data structure stores complete column accesses - // A DRAM burst will be splitted up in several column accesses - // e.g. BL=4 means that 4 elements will be added to the dataMap! - std::map dataMap; - - // An array to save when the last ACT/REF to a row happened: - sc_core::sc_time *lastRowAccess; - - // Context Variables (will be written by the first dram access) - int myChannel; - int myRank; - int myBankgroup; - int myBank; -}; - -#endif // ERRORMODEL_H diff --git a/DRAMSys/library/src/simulation/TemperatureController.cpp b/DRAMSys/library/src/simulation/TemperatureController.cpp deleted file mode 100644 index 4c0ddd0e..00000000 --- a/DRAMSys/library/src/simulation/TemperatureController.cpp +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Eder F. Zulian - * Matthias Jung - * Derek Christ - */ - -#include - -#include "TemperatureController.h" -#include "../configuration/Configuration.h" - -using namespace sc_core; - -double TemperatureController::temperatureConvert(double tKelvin) -{ - if (temperatureScale == TemperatureSimConfig::TemperatureScale::Celsius) { - return tKelvin - 273.15; - } else if (temperatureScale == TemperatureSimConfig::TemperatureScale::Fahrenheit) { - return (tKelvin - 273.15) * 1.8 + 32; - } - - return tKelvin; -} - -double TemperatureController::getTemperature(int deviceId, float currentPower) -{ - PRINTDEBUGMESSAGE(name(), "Temperature requested by device " + std::to_string( - deviceId) + " current power is " + std::to_string(currentPower)); - - if (dynamicTempSimEnabled) - { - currentPowerValues.at(deviceId) = currentPower; - checkPowerThreshold(deviceId); - - // FIXME: using the static temperature value until the vector of temperatures is filled - if (temperatureValues.empty()) - return temperatureConvert(staticTemperature + 273.15); - - return temperatureConvert(temperatureValues.at(deviceId)); - } - else - { - PRINTDEBUGMESSAGE(name(), "Temperature is " + std::to_string(staticTemperature)); - return staticTemperature; - } -} - -void TemperatureController::updateTemperatures() -{ -#ifdef THERMALSIM - thermalSimulation->sendPowerValues(¤tPowerValues); - thermalSimulation->simulate(); - thermalSimulation->getTemperature(temperaturesBuffer, TDICE_OUTPUT_INSTANT_SLOT, - TDICE_OUTPUT_TYPE_TFLPEL, TDICE_OUTPUT_QUANTITY_AVERAGE); - - std::string mapfile; - sc_time ts = sc_time_stamp(); - if (genTempMap == true) { - mapfile = temperatureMapFile + "_" + std::to_string(ts.to_default_time_units()) - + ".txt"; - thermalSimulation->getTemperatureMap(mapfile); - } - if (genPowerMap == true) { - mapfile = powerMapFile + "_" + std::to_string(ts.to_default_time_units()) + - ".txt"; - thermalSimulation->getPowerMap(mapfile); - } -#endif - // Save values just obtained for posterior use - temperatureValues = temperaturesBuffer; - // Clear the buffer, otherwise it will grow every request - temperaturesBuffer.clear(); -} - -void TemperatureController::checkPowerThreshold(int deviceId) -{ - if (std::abs(lastPowerValues.at(deviceId) - currentPowerValues.at( - deviceId)) > powerThresholds.at(deviceId)) { - decreaseSimPeriod = true; - } - lastPowerValues.at(deviceId) = currentPowerValues.at(deviceId); -} - -double TemperatureController::adjustThermalSimPeriod() -{ - // Temperature Simulation Period Dynamic Adjustment - // - // 1. Adjustment is requierd when: - // - // 1.1. The power dissipation of one or more devices change considerably - // (exceeds the configured threshold for that device in any direction, - // i.e. increases or decreases substantially) during the current - // simulaiton period. - // - // 1.1.1. The simulation period will be reduced by a factor of 'n' so the - // simulation occurs 'n' times more often. - // - // 1.1.2. The step 1.1.1 will be repeated until the point that there are - // no sustantial changes in power dissipation between two consecutive - // executions of the thermal simulation, i.e. all changes for all devices - // are less than the configured threshold. - // - // 1.2. The current simulation period differs from the target period - // defined in the configuration by the user. - // - // 1.2.1 Provided a scenario in which power dissipation changes do not - // exceed the thresholds, the situation period will be kept for a number - // of simulation cycles 'nc' and after 'nc' the period will be increased - // again in steps of 'n/2' until it achieves the desired value given by - // configuration or the described in 1.1 occurs. - - if (decreaseSimPeriod) - { - period = period / periodAdjustFactor; - cyclesSinceLastPeriodAdjust = 0; - decreaseSimPeriod = false; - PRINTDEBUGMESSAGE(name(), "Thermal Simulation period reduced to " + std::to_string( - period) + ". Target is " + std::to_string(targetPeriod)); - } - else - { - if (period != targetPeriod) { - cyclesSinceLastPeriodAdjust++; - if (cyclesSinceLastPeriodAdjust >= nPowStableCyclesToIncreasePeriod) { - cyclesSinceLastPeriodAdjust = 0; - period = period * ((double)periodAdjustFactor / 2); - if (period > targetPeriod) - period = targetPeriod; - PRINTDEBUGMESSAGE(name(), "Thermal Simulation period increased to " - + std::to_string(period) + ". Target is " + std::to_string(targetPeriod)); - } - } - } - - return period; -} - -void TemperatureController::temperatureThread() -{ - while (true) - { - updateTemperatures(); - double p = adjustThermalSimPeriod(); - - NDEBUG_UNUSED(int i) = 0; - for (NDEBUG_UNUSED(auto t) : temperatureValues) { - PRINTDEBUGMESSAGE(name(), "Temperature[" + std::to_string(i++) - + "] is " + std::to_string(t)); - } - PRINTDEBUGMESSAGE(name(), "Thermal simulation period is " + std::to_string(p)); - - wait(sc_time(p, t_unit)); - } -} diff --git a/DRAMSys/library/src/simulation/TemperatureController.h b/DRAMSys/library/src/simulation/TemperatureController.h deleted file mode 100644 index cf9f4fa2..00000000 --- a/DRAMSys/library/src/simulation/TemperatureController.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Eder F. Zulian - * Matthias Jung - * Derek Christ - */ - -#ifndef TEMPERATURECONTROLLER_H -#define TEMPERATURECONTROLLER_H - -#include - -#include -#include "../common/DebugManager.h" -#include "../common/utils.h" -#include "../configuration/Configuration.h" - -#ifdef THERMALSIM -#include "IceWrapper.h" -#endif - -class TemperatureController : sc_core::sc_module -{ -public: - TemperatureController(const TemperatureController&) = delete; - TemperatureController& operator=(const TemperatureController&) = delete; - - SC_HAS_PROCESS(TemperatureController); - TemperatureController() = default; - TemperatureController(const sc_core::sc_module_name& name, const Configuration& config) : sc_core::sc_module(name) - { - temperatureScale = config.temperatureSim.temperatureScale; - dynamicTempSimEnabled = config.thermalSimulation; - staticTemperature = config.temperatureSim.staticTemperatureDefaultValue; - - if (dynamicTempSimEnabled) - { -#ifdef THERMALSIM - // Connect to the server - std::string ip = config.temperatureSim.iceServerIp; - unsigned int port = config.temperatureSim.iceServerPort; - thermalSimulation = new IceWrapper(ip, port); - PRINTDEBUGMESSAGE(name(), "Dynamic temperature simulation. Server @ " - + ip + ":" + std::to_string(port)); -#else - SC_REPORT_FATAL(sc_module::name(), - "DRAMSys was build without support to dynamic temperature simulation. Check the README file for further details."); -#endif - // Initial power dissipation values (got from config) - currentPowerValues = config.temperatureSim.powerInitialValues; - lastPowerValues = currentPowerValues; - - // Substantial changes in power will trigger adjustments in the simulaiton period. Get the thresholds from config. - powerThresholds = config.temperatureSim.powerThresholds; - decreaseSimPeriod = false; - periodAdjustFactor = config.temperatureSim.simPeriodAdjustFactor; - nPowStableCyclesToIncreasePeriod = config.temperatureSim.nPowStableCyclesToIncreasePeriod; - cyclesSinceLastPeriodAdjust = 0; - - // Get the target period for the thermal simulation from config. - targetPeriod = config.temperatureSim.thermalSimPeriod; - period = targetPeriod; - t_unit = config.temperatureSim.thermalSimUnit; - - genTempMap = config.temperatureSim.generateTemperatureMap; - temperatureMapFile = "temperature_map"; - std::system("rm -f temperature_map*"); - - genPowerMap = config.temperatureSim.generatePowerMap; - powerMapFile = "power_map"; - std::system("rm -f power_map*"); - - SC_THREAD(temperatureThread); - } - else - { - PRINTDEBUGMESSAGE(sc_module::name(), "Static temperature simulation. Temperature set to " + - std::to_string(staticTemperature)); - } - } - - double getTemperature(int deviceId, float currentPower); - -private: - TemperatureSimConfig::TemperatureScale temperatureScale; - double temperatureConvert(double tKelvin); - - double staticTemperature; - - bool dynamicTempSimEnabled; - -#ifdef THERMALSIM - IceWrapper *thermalSimulation; -#endif - std::vector temperaturesBuffer; - std::vector temperatureValues; - - std::vector currentPowerValues; - std::vector lastPowerValues; - std::vector powerThresholds; - - double targetPeriod; - double period; - enum sc_core::sc_time_unit t_unit; - void temperatureThread(); - void updateTemperatures(); - double adjustThermalSimPeriod(); - void checkPowerThreshold(int deviceId); - bool decreaseSimPeriod; - unsigned int periodAdjustFactor; - unsigned int cyclesSinceLastPeriodAdjust; - unsigned int nPowStableCyclesToIncreasePeriod; - - bool genTempMap; - std::string temperatureMapFile; - bool genPowerMap; - std::string powerMapFile; -}; - -#endif // TEMPERATURECONTROLLER_H - diff --git a/DRAMSys/simulator/ExampleInitiator.h b/DRAMSys/simulator/ExampleInitiator.h deleted file mode 100644 index 8325f3ed..00000000 --- a/DRAMSys/simulator/ExampleInitiator.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (c) 2016, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Eder F. Zulian - */ - -#ifndef EXAMPLEINITIATOR_H -#define EXAMPLEINITIATOR_H - -#include -#include - -#include -#include "MemoryManager.h" -#include "common/dramExtensions.h" -#include "TracePlayer.h" - -struct ExampleInitiator : sc_core::sc_module -{ - // TLM-2 socket, defaults to 32-bits wide, base protocol - tlm_utils::simple_initiator_socket socket; - - SC_CTOR(ExampleInitiator) - : socket("socket"), - request_in_progress(nullptr), - m_peq(this, &ExampleInitiator::peq_cb) - { - socket.register_nb_transport_bw(this, &ExampleInitiator::nb_transport_bw); - SC_THREAD(thread_process); - } - - void thread_process() - { - tlm::tlm_generic_payload *trans; - tlm::tlm_phase phase; - sc_core::sc_time delay; - - dump_mem(); - init_mem(); - dump_mem(); - - for (unsigned char &i : data) - i = 0x55; - - // Generate 2 write transactions - for (int i = 0; i < 2; i++) { - int adr = i * 64; - - tlm::tlm_command cmd = tlm::TLM_WRITE_COMMAND; - - // Grab a new transaction from the memory manager - trans = m_mm.allocate(); - trans->acquire(); - - trans->set_command(cmd); - trans->set_address(adr); - trans->set_data_ptr(reinterpret_cast(&data[0])); - trans->set_data_length(64); - trans->set_streaming_width(4); - trans->set_byte_enable_ptr(nullptr); - trans->set_dmi_allowed(false); - trans->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE); - - // ExampleInitiator must honor BEGIN_REQ/END_REQ exclusion rule - if (request_in_progress) - wait(end_request_event); - request_in_progress = trans; - phase = tlm::BEGIN_REQ; - - // Timing annotation models processing time of initiator prior to call - delay = sc_core::sc_time(100000, sc_core::SC_PS); - - std::cout << "Address " << std::hex << adr << " new, cmd=" << (cmd ? "write" : "read") - << ", data=" << std::hex << data[0] << " at time " << sc_core::sc_time_stamp() - << " in " << name() << std::endl; - - GenerationExtension *genExtension = new GenerationExtension(sc_core::sc_time_stamp()); - trans->set_auto_extension(genExtension); - - - // Non-blocking transport call on the forward path - tlm::tlm_sync_enum status; - status = socket->nb_transport_fw( *trans, phase, delay ); - - // Check value returned from nb_transport_fw - if (status == tlm::TLM_UPDATED) { - // The timing annotation must be honored - m_peq.notify( *trans, phase, delay ); - } else if (status == tlm::TLM_COMPLETED) { - // The completion of the transaction necessarily ends the BEGIN_REQ phase - request_in_progress = nullptr; - - // The target has terminated the transaction - check_transaction( *trans ); - - // Allow the memory manager to free the transaction object - trans->release(); - } - - sc_core::wait(sc_core::sc_time(500, sc_core::SC_NS)); - - dump_mem(); - } - - sc_core::wait(sc_core::sc_time(500, sc_core::SC_NS)); - sc_core::sc_stop(); - } - - static void init_mem() - { - unsigned char buffer[64]; - for (unsigned char &i : buffer) - i = 0xff; - - for (int addr = 0; addr < 128; addr += 64) { - tlm::tlm_generic_payload trans; - trans.set_command( tlm::TLM_WRITE_COMMAND ); - trans.set_address( addr ); - trans.set_data_ptr( buffer ); - trans.set_data_length( 64 ); - - socket->transport_dbg( trans ); - } - } - - static void dump_mem() - { - for (int addr = 0; addr < 128; addr += 64) { - unsigned char buffer[64]; - tlm::tlm_generic_payload trans; - trans.set_command( tlm::TLM_READ_COMMAND ); - trans.set_address( addr ); - trans.set_data_ptr( buffer ); - trans.set_data_length( 64 ); - - socket->transport_dbg( trans ); - - std::cout << "\nMemory dump\n"; - for (int i = 0; i < 64; i++) - std::cout << "mem[" << addr + i << "] = " << std::hex << (int)buffer[i] << std::endl; - } - } - - // TLM-2 backward non-blocking transport method - - virtual tlm::tlm_sync_enum nb_transport_bw( tlm::tlm_generic_payload &trans, - tlm::tlm_phase &phase, sc_core::sc_time &delay ) - { - m_peq.notify( trans, phase, delay ); - return tlm::TLM_ACCEPTED; - } - - // Payload event queue callback to handle transactions from target - // Transaction could have arrived through return path or backward path - - void peq_cb(tlm::tlm_generic_payload &trans, const tlm::tlm_phase &phase) - { - if (phase == tlm::END_REQ || (&trans == request_in_progress - && phase == tlm::BEGIN_RESP)) { - // The end of the BEGIN_REQ phase - request_in_progress = nullptr; - end_request_event.notify(); - } else if (phase == tlm::BEGIN_REQ || phase == tlm::END_RESP) - SC_REPORT_FATAL("TLM-2", "Illegal transaction phase received by initiator"); - - if (phase == tlm::BEGIN_RESP) { - check_transaction( trans ); - - // Send final phase transition to target - tlm::tlm_phase fw_phase = tlm::END_RESP; - sc_core::sc_time delay = sc_core::sc_time(60000, sc_core::SC_PS); - socket->nb_transport_fw( trans, fw_phase, delay ); - // Ignore return value - - // Allow the memory manager to free the transaction object - trans.release(); - } - } - - // Called on receiving BEGIN_RESP or TLM_COMPLETED - void check_transaction(tlm::tlm_generic_payload &trans) - { - if ( trans.is_response_error() ) { - char txt[100]; - sprintf(txt, "Transaction returned with error, response status = %s", - trans.get_response_string().c_str()); - SC_REPORT_ERROR("TLM-2", txt); - } - - tlm::tlm_command cmd = trans.get_command(); - uint64_t adr = trans.get_address(); - int *ptr = reinterpret_cast( trans.get_data_ptr() ); - - std::cout << std::hex << adr << " check, cmd=" << (cmd ? "write" : "read") - << ", data=" << std::hex << *ptr << " at time " << sc_core::sc_time_stamp() - << " in " << sc_core::name() << std::endl; - - if (cmd == tlm::TLM_READ_COMMAND) - assert( *ptr == -int(adr) ); - } - - MemoryManager m_mm; - unsigned char data[64]; - tlm::tlm_generic_payload *request_in_progress; - sc_core::sc_event end_request_event; - tlm_utils::peq_with_cb_and_phase m_peq; -}; - -#endif // EXAMPLEINITIATOR_H diff --git a/DRAMSys/simulator/LengthConverter.cpp b/DRAMSys/simulator/LengthConverter.cpp deleted file mode 100644 index 288bf458..00000000 --- a/DRAMSys/simulator/LengthConverter.cpp +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (c) 2022, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Lukas Steiner - */ - -#include "LengthConverter.h" - -using namespace sc_core; -using namespace tlm; - -// TODO: return status, TLM_INCOMPLETE_RESPONSE, acquire + release - -LengthConverter::LengthConverter(const sc_module_name &name, unsigned maxOutputLength, bool storageEnabled) : - sc_module(name), payloadEventQueue(this, &LengthConverter::peqCallback), storageEnabled(storageEnabled), - memoryManager(storageEnabled, maxOutputLength), maxOutputLength(maxOutputLength) -{ - iSocket.register_nb_transport_bw(this, &LengthConverter::nb_transport_bw); - tSocket.register_nb_transport_fw(this, &LengthConverter::nb_transport_fw); - tSocket.register_transport_dbg(this, &LengthConverter::transport_dbg); -} - -tlm_sync_enum LengthConverter::nb_transport_fw(tlm_generic_payload& trans, - tlm_phase& phase, sc_time& fwDelay) -{ - if (phase == BEGIN_REQ) - trans.acquire(); - - payloadEventQueue.notify(trans, phase, fwDelay); - return TLM_ACCEPTED; -} - -tlm_sync_enum LengthConverter::nb_transport_bw(tlm_generic_payload &payload, - tlm_phase &phase, sc_time &bwDelay) -{ - payloadEventQueue.notify(payload, phase, bwDelay); - return TLM_ACCEPTED; -} - -unsigned int LengthConverter::transport_dbg(tlm_generic_payload &trans) -{ - return iSocket->transport_dbg(trans); -} - -void LengthConverter::peqCallback(tlm_generic_payload &cbTrans, const tlm_phase &cbPhase) -{ - if (cbPhase == BEGIN_REQ) // from initiator - { - if (cbTrans.get_data_length() <= maxOutputLength) - { - // pipe transaction through - tlm_phase fwPhase = BEGIN_REQ; - sc_time fwDelay = SC_ZERO_TIME; - tlm_sync_enum returnStatus = iSocket->nb_transport_fw(cbTrans, fwPhase, fwDelay); - // TODO: END_REQ/BEGIN_RESP shortcut - } - else - { - // split transaction up into multiple sub-transactions - createChildTranses(&cbTrans); - tlm_generic_payload* firstChildTrans = cbTrans.get_extension()->getNextChildTrans(); - tlm_phase fwPhase = BEGIN_REQ; - sc_time fwDelay = SC_ZERO_TIME; - tlm_sync_enum returnStatus = iSocket->nb_transport_fw(*firstChildTrans, fwPhase, fwDelay); - } - } - else if (cbPhase == END_REQ) - { - if (ChildExtension::isChildTrans(&cbTrans)) - { - tlm_generic_payload* nextChildTrans = cbTrans.get_extension()->getNextChildTrans(); - if (nextChildTrans != nullptr) - { - tlm_phase fwPhase = BEGIN_REQ; - //sc_time fwDelay = SC_ZERO_TIME; - sc_time fwDelay = sc_time(1, SC_NS); - tlm_sync_enum returnStatus = iSocket->nb_transport_fw(*nextChildTrans, fwPhase, fwDelay); - } - else - { - tlm_generic_payload* parentTrans = cbTrans.get_extension()->getParentTrans(); - tlm_phase bwPhase = END_REQ; - sc_time bwDelay = SC_ZERO_TIME; - tlm_sync_enum returnStatus = tSocket->nb_transport_bw(*parentTrans, bwPhase, bwDelay); - } - } - else - { - tlm_phase bwPhase = END_REQ; - sc_time bwDelay = SC_ZERO_TIME; - tlm_sync_enum returnStatus = tSocket->nb_transport_bw(cbTrans, bwPhase, bwDelay); - } - } - else if (cbPhase == BEGIN_RESP) - { - if (ChildExtension::isChildTrans(&cbTrans)) - { - { - tlm_phase fwPhase = END_RESP; - sc_time fwDelay = SC_ZERO_TIME; - tlm_sync_enum returnStatus = iSocket->nb_transport_fw(cbTrans, fwPhase, fwDelay); - } - - if (storageEnabled && cbTrans.is_read()) - { - tlm_generic_payload* parentTrans = cbTrans.get_extension()->getParentTrans(); - std::copy(cbTrans.get_data_ptr(), cbTrans.get_data_ptr() + maxOutputLength, - parentTrans->get_data_ptr() + (cbTrans.get_address() - parentTrans->get_address())); - } - - if (cbTrans.get_extension()->notifyChildTransCompletion()) // all children finished - { - // BEGIN_RESP über tSocket - tlm_generic_payload* parentTrans = cbTrans.get_extension()->getParentTrans(); - tlm_phase bwPhase = BEGIN_RESP; - sc_time bwDelay = SC_ZERO_TIME; - parentTrans->set_response_status(tlm::TLM_OK_RESPONSE); - tlm_sync_enum returnStatus = tSocket->nb_transport_bw(*parentTrans, bwPhase, bwDelay); - } - } - else - { - tlm_phase bwPhase = BEGIN_RESP; - sc_time bwDelay = SC_ZERO_TIME; - cbTrans.set_response_status(tlm::TLM_OK_RESPONSE); - tlm_sync_enum returnStatus = tSocket->nb_transport_bw(cbTrans, bwPhase, bwDelay); - } - } - else if (cbPhase == END_RESP) - { - if (ParentExtension::isParentTrans(&cbTrans)) - { - cbTrans.get_extension()->releaseChildTranses(); - } - else - { - tlm_phase fwPhase = END_RESP; - sc_time fwDelay = SC_ZERO_TIME; - tlm_sync_enum returnStatus = iSocket->nb_transport_fw(cbTrans, fwPhase, fwDelay); - } - cbTrans.release(); - } - else - SC_REPORT_FATAL(0, "Payload event queue in LengthConverter was triggered with unknown phase"); -} - -void LengthConverter::createChildTranses(tlm_generic_payload* parentTrans) -{ - unsigned numChildTranses = parentTrans->get_data_length() / maxOutputLength; - std::vector childTranses; - - for (unsigned childId = 0; childId < numChildTranses; childId++) - { - tlm_generic_payload* childTrans = memoryManager.allocate(); - childTrans->acquire(); - childTrans->set_command(parentTrans->get_command()); - childTrans->set_address(parentTrans->get_address() + childId * maxOutputLength); - childTrans->set_data_length(maxOutputLength); - if (storageEnabled && parentTrans->is_write()) - std::copy(parentTrans->get_data_ptr() + childId * maxOutputLength, parentTrans->get_data_ptr() + - (childId + 1) * maxOutputLength, childTrans->get_data_ptr()); - ChildExtension::setExtension(childTrans, parentTrans); - childTranses.push_back(childTrans); - } - ParentExtension::setExtension(parentTrans, std::move(childTranses)); -} - -LengthConverter::MemoryManager::MemoryManager(bool storageEnabled, unsigned maxDataLength) - : storageEnabled(storageEnabled), maxDataLength(maxDataLength) -{} - -LengthConverter::MemoryManager::~MemoryManager() -{ - while (!freePayloads.empty()) - { - tlm_generic_payload* payload = freePayloads.top(); - if (storageEnabled) - delete[] payload->get_data_ptr(); - payload->reset(); - delete payload; - freePayloads.pop(); - } -} - -tlm_generic_payload* LengthConverter::MemoryManager::allocate() -{ - if (freePayloads.empty()) - { - auto* payload = new tlm_generic_payload(this); - - if (storageEnabled) - { - auto* data = new unsigned char[maxDataLength]; - payload->set_data_ptr(data); - } - return payload; - } - else - { - tlm_generic_payload* result = freePayloads.top(); - freePayloads.pop(); - return result; - } -} - -void LengthConverter::MemoryManager::free(tlm_generic_payload* payload) -{ - freePayloads.push(payload); -} \ No newline at end of file diff --git a/DRAMSys/simulator/LengthConverter.h b/DRAMSys/simulator/LengthConverter.h deleted file mode 100644 index bac9c29d..00000000 --- a/DRAMSys/simulator/LengthConverter.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2022, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Lukas Steiner - */ - -#ifndef LENGTHCONVERTER_H -#define LENGTHCONVERTER_H - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -//TLM_DECLARE_EXTENDED_PHASE(REQ_ARBITRATION); -//TLM_DECLARE_EXTENDED_PHASE(RESP_ARBITRATION); - -class LengthConverter : public sc_core::sc_module -{ -public: - tlm_utils::simple_initiator_socket iSocket; - tlm_utils::simple_target_socket tSocket; - - LengthConverter(const sc_core::sc_module_name& name, unsigned maxOutputLength, bool storageEnabled); - SC_HAS_PROCESS(LengthConverter); - -private: - tlm_utils::peq_with_cb_and_phase payloadEventQueue; - void peqCallback(tlm::tlm_generic_payload &payload, const tlm::tlm_phase &phase); - - //std::vector tSocketIsBusy; - //std::vector iSocketIsBusy; - - const unsigned maxOutputLength; - const bool storageEnabled; - - void createChildTranses(tlm::tlm_generic_payload* parentTrans); - - //std::uint64_t getTargetAddress(std::uint64_t address) const; - //int getISocketId(std::uint64_t address) const; - - //std::vector> pendingRequests; - - tlm::tlm_sync_enum nb_transport_fw(tlm::tlm_generic_payload &trans, tlm::tlm_phase &phase, - sc_core::sc_time &fwDelay); - tlm::tlm_sync_enum nb_transport_bw(tlm::tlm_generic_payload &payload, tlm::tlm_phase &phase, - sc_core::sc_time &bwDelay); - unsigned int transport_dbg(tlm::tlm_generic_payload &trans); - - class MemoryManager : public tlm::tlm_mm_interface - { - public: - MemoryManager(bool storageEnabled, unsigned maxDataLength); - ~MemoryManager() override; - tlm::tlm_generic_payload* allocate(); - void free(tlm::tlm_generic_payload* payload) override; - - private: - std::stack freePayloads; - bool storageEnabled = false; - unsigned maxDataLength; - } memoryManager; - - class ChildExtension : public tlm::tlm_extension - { - private: - tlm::tlm_generic_payload* parentTrans; - explicit ChildExtension(tlm::tlm_generic_payload* parentTrans) : parentTrans(parentTrans) {} - - public: - //ChildExtension() = delete; - - tlm_extension_base* clone() const override - { - return new ChildExtension(parentTrans); - } - - void copy_from(tlm_extension_base const &ext) override - { - const auto& cpyFrom = dynamic_cast(ext); - parentTrans = cpyFrom.parentTrans; - } - - tlm::tlm_generic_payload* getParentTrans() - { - return parentTrans; - } - - static void setExtension(tlm::tlm_generic_payload* childTrans, tlm::tlm_generic_payload* parentTrans) - { - auto *extension = childTrans->get_extension(); - - if (extension != nullptr) - { - extension->parentTrans = parentTrans; - } - else - { - extension = new ChildExtension(parentTrans); - childTrans->set_auto_extension(extension); - } - } - - static bool isChildTrans(const tlm::tlm_generic_payload* trans) - { - if (trans->get_extension() != nullptr) - return true; - else - return false; - } - - tlm::tlm_generic_payload* getNextChildTrans() - { - return parentTrans->get_extension()->getNextChildTrans(); - } - - bool notifyChildTransCompletion() - { - return parentTrans->get_extension()->notifyChildTransCompletion(); - } - }; - - class ParentExtension : public tlm::tlm_extension - { - private: - std::vector childTranses; - unsigned nextEndReqChildId = 0; - unsigned completedChildTranses = 0; - explicit ParentExtension(std::vector _childTranses) - : childTranses(std::move(_childTranses)) {} - - public: - ParentExtension() = delete; - - tlm_extension_base* clone() const override - { - return new ParentExtension(childTranses); - } - - void copy_from(tlm_extension_base const &ext) override - { - const auto& cpyFrom = dynamic_cast(ext); - childTranses = cpyFrom.childTranses; - } - - static bool isParentTrans(const tlm::tlm_generic_payload* trans) - { - auto* extension = trans->get_extension(); - if (extension != nullptr) - return !extension->childTranses.empty(); - else - return false; - } - - static void setExtension(tlm::tlm_generic_payload* parentTrans, std::vector childTranses) - { - auto* extension = parentTrans->get_extension(); - - if (extension != nullptr) - { - extension->childTranses = std::move(childTranses); - extension->nextEndReqChildId = 0; - extension->completedChildTranses = 0; - } - else - { - extension = new ParentExtension(std::move(childTranses)); - parentTrans->set_auto_extension(extension); - } - } - - tlm::tlm_generic_payload* getNextChildTrans() - { - if (nextEndReqChildId < childTranses.size()) - return childTranses[nextEndReqChildId++]; - else - return nullptr; - } - - bool notifyChildTransCompletion() - { - completedChildTranses++; - return completedChildTranses == childTranses.size(); - } - - void releaseChildTranses() - { - std::for_each(childTranses.begin(), childTranses.end(), - [](tlm::tlm_generic_payload* childTrans){childTrans->release();}); - childTranses.clear(); - } - }; -}; - -#endif // LENGTHCONVERTER_H diff --git a/DRAMSys/tests/DDR3/ci.yml b/DRAMSys/tests/DDR3/ci.yml deleted file mode 100644 index 3a2c1eb0..00000000 --- a/DRAMSys/tests/DDR3/ci.yml +++ /dev/null @@ -1,29 +0,0 @@ -# DDR3 Dual Rank Test with Staggered Power Down Policy and Scheduler FrFcfsGrp -example_DDR3: - stage: test_DDR3 - script: - - export GCOV_PREFIX=$(pwd) - - export GCOV_PREFIX_STRIP=$(pwd | awk -F"/" '{print NF-1}') - - cd build/simulator - - ./DRAMSys ../../DRAMSys/tests/DDR3/simulations/ddr3-example.json ../../DRAMSys/tests/DDR3/ - - mv DRAMSys_ddr3-dual-rank_ddr3_ch0.tdb ddr3-dual-rank_ddr3_ch0.tdb - - ls -lah - - ls -lah ../../DRAMSys/tests/DDR3/expected/ - - sqldiff ../../DRAMSys/tests/DDR3/expected/ddr3-dual-rank_ddr3_ch0.tdb ddr3-dual-rank_ddr3_ch0.tdb - - perl -e 'if(`sqldiff --table Phases ../../DRAMSys/tests/DDR3/expected/ddr3-dual-rank_ddr3_ch0.tdb ddr3-dual-rank_ddr3_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Transactions ../../DRAMSys/tests/DDR3/expected/ddr3-dual-rank_ddr3_ch0.tdb ddr3-dual-rank_ddr3_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Power ../../DRAMSys/tests/DDR3/expected/ddr3-dual-rank_ddr3_ch0.tdb ddr3-dual-rank_ddr3_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - # Run Code Coverage - - lcov -q -c --rc geninfo_adjust_src_path=$GCOV_PREFIX -d ${CI_PROJECT_DIR}/build/ -o ${CI_PROJECT_DIR}/coverage/${CI_JOB_NAME}.out - - cache: - key: build - paths: - - build/ - policy: pull - - artifacts: - paths: - - build/simulator/ddr3-dual-rank_ddr3_ch0.tdb - - coverage/${CI_JOB_NAME}.out - expire_in: 2 days diff --git a/DRAMSys/tests/DDR3/configs/amconfigs/am_ddr3_8x2Gbx8_dimm_p1KB_dual_rank_rbc.json b/DRAMSys/tests/DDR3/configs/amconfigs/am_ddr3_8x2Gbx8_dimm_p1KB_dual_rank_rbc.json deleted file mode 100644 index c82926c9..00000000 --- a/DRAMSys/tests/DDR3/configs/amconfigs/am_ddr3_8x2Gbx8_dimm_p1KB_dual_rank_rbc.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "CONGEN": { - "XOR":[ - { - "FIRST":13, - "SECOND":16 - } - ], - "BANK_BIT": [ - 13, - 14, - 15 - ], - "BYTE_BIT": [ - 0, - 1, - 2 - ], - "COLUMN_BIT": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12 - ], - "ROW_BIT": [ - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "RANK_BIT": [ - 30 - ] - } -} diff --git a/DRAMSys/tests/DDR3/configs/mcconfigs/fr_fcfs_grp.json b/DRAMSys/tests/DDR3/configs/mcconfigs/fr_fcfs_grp.json deleted file mode 100644 index ec7ba66c..00000000 --- a/DRAMSys/tests/DDR3/configs/mcconfigs/fr_fcfs_grp.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "mcconfig": { - "PagePolicy": "Open", - "Scheduler": "FrFcfsGrp", - "RequestBufferSize": 8, - "CmdMux": "Oldest", - "RespQueue": "Fifo", - "RefreshPolicy": "Rankwise", - "RefreshMaxPostponed": 0, - "RefreshMaxPulledin": 0, - "PowerDownPolicy": "Staggered", - "PowerDownTimeout": 100 - } -} \ No newline at end of file diff --git a/DRAMSys/tests/DDR3/configs/memspecs/MICRON_2GB_DDR3-1066_64bit_D_SODIMM.json b/DRAMSys/tests/DDR3/configs/memspecs/MICRON_2GB_DDR3-1066_64bit_D_SODIMM.json deleted file mode 100644 index e9dc9a59..00000000 --- a/DRAMSys/tests/DDR3/configs/memspecs/MICRON_2GB_DDR3-1066_64bit_D_SODIMM.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "memspec": { - "memarchitecturespec": { - "burstLength": 8, - "dataRate": 2, - "nbrOfBanks": 8, - "nbrOfColumns": 1024, - "nbrOfRanks": 2, - "nbrOfChannels": 1, - "nbrOfRows": 16384, - "width": 64, - "nbrOfDevices": 1 - }, - "memoryId": "MICRON_2GB_DDR3-1066_64bit_D_SODIMM", - "memoryType": "DDR3", - "mempowerspec": { - "idd0": 720.0, - "idd2n": 400.0, - "idd2p0": 80.0, - "idd2p1": 200.0, - "idd3n": 440.0, - "idd3p0": 240.0, - "idd3p1": 240.0, - "idd4r": 1200.0, - "idd4w": 1200.0, - "idd5": 1760.0, - "idd6": 48.0, - "vdd": 1.5 - }, - "memtimingspec": { - "AL": 0, - "CCD": 4, - "CKE": 3, - "CKESR": 4, - "CL": 7, - "DQSCK": 0, - "FAW": 20, - "RAS": 20, - "RC": 27, - "RCD": 7, - "REFI": 4160, - "RFC": 59, - "RL": 7, - "RP": 7, - "RRD": 4, - "RTP": 4, - "WL": 6, - "WR": 8, - "WTR": 4, - "XP": 4, - "XPDLL": 13, - "XS": 64, - "XSDLL": 512, - "ACTPDEN": 1, - "PRPDEN": 1, - "REFPDEN": 1, - "RTRS": 1, - "clkMhz": 533 - } - } -} diff --git a/DRAMSys/tests/DDR3/configs/simulator/ddr3.json b/DRAMSys/tests/DDR3/configs/simulator/ddr3.json deleted file mode 100644 index 1ade5aea..00000000 --- a/DRAMSys/tests/DDR3/configs/simulator/ddr3.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": true, - "SimulationName": "ddr3", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/tests/DDR3/configs/thermalsim/config.json b/DRAMSys/tests/DDR3/configs/thermalsim/config.json deleted file mode 100644 index b88ed84c..00000000 --- a/DRAMSys/tests/DDR3/configs/thermalsim/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "thermalsimconfig": { - "TemperatureScale": "Celsius", - "StaticTemperatureDefaultValue": 89, - "ThermalSimPeriod":100, - "ThermalSimUnit":"us", - "PowerInfoFile": "powerInfo.json", - "IceServerIp": "127.0.0.1", - "IceServerPort": 11880, - "SimPeriodAdjustFactor" : 10, - "NPowStableCyclesToIncreasePeriod": 5, - "GenerateTemperatureMap": true, - "GeneratePowerMap": true - } -} diff --git a/DRAMSys/tests/DDR3/configs/thermalsim/core.flp b/DRAMSys/tests/DDR3/configs/thermalsim/core.flp deleted file mode 100755 index e85e6801..00000000 --- a/DRAMSys/tests/DDR3/configs/thermalsim/core.flp +++ /dev/null @@ -1,45 +0,0 @@ -CPUs : - - position 0, 0 ; - dimension 2750, 4300 ; - -GPU : - - position 3350, 0 ; - dimension 2750, 4000 ; - -BASEBAND1 : - - position 4250, 4000 ; - dimension 1850, 3300 ; - -BASEBAND2 : - - position 3350, 7300 ; - dimension 2750, 3300 ; - -LLCACHE : - - position 0, 4300 ; - dimension 1900, 3000 ; - -DRAMCTRL1 : - - position 1900, 4300 ; - dimension 850, 3000 ; - -DRAMCTRL2 : - - position 3350, 4000 ; - dimension 900, 3300 ; - -TSVS : - - position 2750, 2300 ; - dimension 600, 6000 ; - -ACELLERATORS : - - position 0, 7300 ; - dimension 2750, 3300 ; - diff --git a/DRAMSys/tests/DDR3/configs/thermalsim/mem.flp b/DRAMSys/tests/DDR3/configs/thermalsim/mem.flp deleted file mode 100755 index 29d02254..00000000 --- a/DRAMSys/tests/DDR3/configs/thermalsim/mem.flp +++ /dev/null @@ -1,16 +0,0 @@ -channel0 : - position 150, 100 ; - dimension 2600, 5200 ; - -channel1 : - position 3350, 100 ; - dimension 2600, 5200 ; - -channel2 : - position 150, 5300 ; - dimension 2600, 5200 ; - -channel3 : - position 3350, 5300 ; - dimension 2600, 5200 ; - diff --git a/DRAMSys/tests/DDR3/configs/thermalsim/powerInfo.json b/DRAMSys/tests/DDR3/configs/thermalsim/powerInfo.json deleted file mode 100644 index 524f690f..00000000 --- a/DRAMSys/tests/DDR3/configs/thermalsim/powerInfo.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "powerInfo": { - "dram_die_channel0": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel1": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel2": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel3": { - "init_pow": 0, - "threshold": 1.0 - } - } -} diff --git a/DRAMSys/tests/DDR3/configs/thermalsim/stack.stk b/DRAMSys/tests/DDR3/configs/thermalsim/stack.stk deleted file mode 100755 index ec74f020..00000000 --- a/DRAMSys/tests/DDR3/configs/thermalsim/stack.stk +++ /dev/null @@ -1,49 +0,0 @@ -material SILICON : - thermal conductivity 1.30e-4 ; - volumetric heat capacity 1.628e-12 ; - -material BEOL : - thermal conductivity 2.25e-6 ; - volumetric heat capacity 2.175e-12 ; - -material COPPER : - thermal conductivity 4.01e-04 ; - volumetric heat capacity 3.37e-12 ; - -top heat sink : - //sink height 1e03, area 100e06, material COPPER ; - //spreader height 0.5e03, area 70e06, material SILICON ; - heat transfer coefficient 1.3e-09 ; - temperature 318.15 ; -dimensions : - chip length 6100, width 10600 ; - cell length 100, width 100 ; - - -layer PCB : - height 10 ; - material BEOL ; - -die DRAM : - layer 58.5 SILICON ; - source 2 SILICON ; - layer 1.5 BEOL ; - layer 58.5 SILICON ; - - -stack: - die DRAM_DIE DRAM floorplan "./mem.flp" ; - layer CONN_TO_PCB PCB ; - -solver: - transient step 0.01, slot 0.05 ; - initial temperature 300.0 ; - -output: - Tflpel(DRAM_DIE.channel0 , "temp_flp_element_ch0.txt" , average , slot ); - Tflpel(DRAM_DIE.channel1 , "temp_flp_element_ch1.txt" , average , slot ); - Tflpel(DRAM_DIE.channel2 , "temp_flp_element_ch2.txt" , average , slot ); - Tflpel(DRAM_DIE.channel3 , "temp_flp_element_ch3.txt" , average , slot ); - Tmap (DRAM_DIE, "output1.txt", slot) ; - Pmap (DRAM_DIE, "output2.txt", slot) ; - diff --git a/DRAMSys/tests/DDR3/simulations/ddr3-example.json b/DRAMSys/tests/DDR3/simulations/ddr3-example.json deleted file mode 100644 index b924da62..00000000 --- a/DRAMSys/tests/DDR3/simulations/ddr3-example.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "simulation": { - "addressmapping": "am_ddr3_8x2Gbx8_dimm_p1KB_dual_rank_rbc.json", - "mcconfig": "fr_fcfs_grp.json", - "memspec": "MICRON_2GB_DDR3-1066_64bit_D_SODIMM.json", - "simconfig": "ddr3.json", - "simulationid": "ddr3-dual-rank", - "thermalconfig": "config.json", - "tracesetup": [ - { - "clkMhz": 533, - "name": "trace_test2.stl" - } - ] - } -} diff --git a/DRAMSys/tests/DDR4/ci.yml b/DRAMSys/tests/DDR4/ci.yml deleted file mode 100644 index 86bddbbb..00000000 --- a/DRAMSys/tests/DDR4/ci.yml +++ /dev/null @@ -1,29 +0,0 @@ -# DDR4 with 4 bank groups, flexible rankwise refresh and FrFcfs scheduler: -example_DDR4: - stage: test_DDR4 - script: - - export GCOV_PREFIX=$(pwd) - - export GCOV_PREFIX_STRIP=$(pwd | awk -F"/" '{print NF-1}') - - cd build/simulator - - ./DRAMSys ../../DRAMSys/tests/DDR4/simulations/ddr4-example.json ../../DRAMSys/tests/DDR4/ - - mv DRAMSys_ddr4-bankgrp_ddr4_ch0.tdb ddr4-bankgrp_ddr4_ch0.tdb - - ls -lah - - ls -lah ../../DRAMSys/tests/DDR4/expected/ - - sqldiff ../../DRAMSys/tests/DDR4/expected/ddr4-bankgrp_ddr4_ch0.tdb ddr4-bankgrp_ddr4_ch0.tdb - - perl -e 'if(`sqldiff --table Phases ../../DRAMSys/tests/DDR4/expected/ddr4-bankgrp_ddr4_ch0.tdb ddr4-bankgrp_ddr4_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Transactions ../../DRAMSys/tests/DDR4/expected/ddr4-bankgrp_ddr4_ch0.tdb ddr4-bankgrp_ddr4_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Power ../../DRAMSys/tests/DDR4/expected/ddr4-bankgrp_ddr4_ch0.tdb ddr4-bankgrp_ddr4_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - # Run Code Coverage - - lcov -q -c --rc geninfo_adjust_src_path=$GCOV_PREFIX -d ${CI_PROJECT_DIR}/build/ -o ${CI_PROJECT_DIR}/coverage/${CI_JOB_NAME}.out - - cache: - key: build - paths: - - build/ - policy: pull - - artifacts: - paths: - - build/simulator/ddr4-bankgrp_ddr4_ch0.tdb - - coverage/${CI_JOB_NAME}.out - expire_in: 2 days diff --git a/DRAMSys/tests/DDR4/configs/amconfigs/am_ddr4_8x4Gbx8_dimm_p1KB_brc.json b/DRAMSys/tests/DDR4/configs/amconfigs/am_ddr4_8x4Gbx8_dimm_p1KB_brc.json deleted file mode 100644 index be30b98f..00000000 --- a/DRAMSys/tests/DDR4/configs/amconfigs/am_ddr4_8x4Gbx8_dimm_p1KB_brc.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "CONGEN": { - "BANKGROUP_BIT":[ - 30, - 31 - ], - "BANK_BIT": [ - 28, - 29 - ], - "BYTE_BIT": [ - 0, - 1, - 2 - ], - "COLUMN_BIT": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12 - ], - "ROW_BIT": [ - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27 - ] - } -} diff --git a/DRAMSys/tests/DDR4/configs/mcconfigs/fr_fcfs.json b/DRAMSys/tests/DDR4/configs/mcconfigs/fr_fcfs.json deleted file mode 100644 index 787d87e2..00000000 --- a/DRAMSys/tests/DDR4/configs/mcconfigs/fr_fcfs.json +++ /dev/null @@ -1,11 +0,0 @@ -{"mcconfig": { - "PagePolicy": "ClosedAdaptive", - "Scheduler": "FrFcfs", - "RequestBufferSize": 8, - "CmdMux": "Oldest", - "RespQueue": "Fifo", - "RefreshPolicy": "Rankwise", - "RefreshMaxPostponed": 8, - "RefreshMaxPulledin": 8, - "PowerDownPolicy": "NoPowerDown", - "PowerDownTimeout": 100}} diff --git a/DRAMSys/tests/DDR4/configs/memspecs/MICRON_4Gb_DDR4-1866_8bit_A.json b/DRAMSys/tests/DDR4/configs/memspecs/MICRON_4Gb_DDR4-1866_8bit_A.json deleted file mode 100644 index 95234154..00000000 --- a/DRAMSys/tests/DDR4/configs/memspecs/MICRON_4Gb_DDR4-1866_8bit_A.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "memspec": { - "memarchitecturespec": { - "burstLength": 8, - "dataRate": 2, - "nbrOfBankGroups": 4, - "nbrOfBanks": 16, - "nbrOfColumns": 1024, - "nbrOfRanks": 1, - "nbrOfChannels": 1, - "nbrOfRows": 32768, - "width": 8, - "nbrOfDevices": 8 - }, - "memoryId": "MICRON_4Gb_DDR4-1866_8bit_A", - "memoryType": "DDR4", - "mempowerspec": { - "idd0": 56.25, - "idd02": 4.05, - "idd2n": 33.75, - "idd2p0": 17.0, - "idd2p1": 17.0, - "idd3n": 39.5, - "idd3p0": 22.5, - "idd3p1": 22.5, - "idd4r": 157.5, - "idd4w": 135.0, - "idd5": 118.0, - "idd6": 20.25, - "idd62": 2.6, - "vdd": 1.2, - "vdd2": 2.5 - }, - "memtimingspec": { - "AL": 0, - "CCD_L": 5, - "CCD_S": 4, - "CKE": 6, - "CKESR": 7, - "CL": 13, - "DQSCK": 2, - "FAW": 22, - "RAS": 32, - "RC": 45, - "RCD": 13, - "REFM": 1, - "REFI": 3644, - "RFC": 243, - "RL": 13, - "RPRE": 1, - "RP": 13, - "RRD_L": 5, - "RRD_S": 4, - "RTP": 8, - "WL": 12, - "WPRE": 1, - "WR": 14, - "WTR_L": 7, - "WTR_S": 3, - "XP": 8, - "XPDLL": 255, - "XS": 252, - "XSDLL": 512, - "ACTPDEN": 1, - "PRPDEN": 1, - "REFPDEN": 1, - "RTRS": 1, - "clkMhz": 933 - } - } -} diff --git a/DRAMSys/tests/DDR4/configs/simulator/ddr4.json b/DRAMSys/tests/DDR4/configs/simulator/ddr4.json deleted file mode 100644 index c88964d3..00000000 --- a/DRAMSys/tests/DDR4/configs/simulator/ddr4.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": true, - "SimulationName": "ddr4", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/tests/DDR4/configs/thermalsim/config.json b/DRAMSys/tests/DDR4/configs/thermalsim/config.json deleted file mode 100644 index b88ed84c..00000000 --- a/DRAMSys/tests/DDR4/configs/thermalsim/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "thermalsimconfig": { - "TemperatureScale": "Celsius", - "StaticTemperatureDefaultValue": 89, - "ThermalSimPeriod":100, - "ThermalSimUnit":"us", - "PowerInfoFile": "powerInfo.json", - "IceServerIp": "127.0.0.1", - "IceServerPort": 11880, - "SimPeriodAdjustFactor" : 10, - "NPowStableCyclesToIncreasePeriod": 5, - "GenerateTemperatureMap": true, - "GeneratePowerMap": true - } -} diff --git a/DRAMSys/tests/DDR4/configs/thermalsim/core.flp b/DRAMSys/tests/DDR4/configs/thermalsim/core.flp deleted file mode 100755 index e85e6801..00000000 --- a/DRAMSys/tests/DDR4/configs/thermalsim/core.flp +++ /dev/null @@ -1,45 +0,0 @@ -CPUs : - - position 0, 0 ; - dimension 2750, 4300 ; - -GPU : - - position 3350, 0 ; - dimension 2750, 4000 ; - -BASEBAND1 : - - position 4250, 4000 ; - dimension 1850, 3300 ; - -BASEBAND2 : - - position 3350, 7300 ; - dimension 2750, 3300 ; - -LLCACHE : - - position 0, 4300 ; - dimension 1900, 3000 ; - -DRAMCTRL1 : - - position 1900, 4300 ; - dimension 850, 3000 ; - -DRAMCTRL2 : - - position 3350, 4000 ; - dimension 900, 3300 ; - -TSVS : - - position 2750, 2300 ; - dimension 600, 6000 ; - -ACELLERATORS : - - position 0, 7300 ; - dimension 2750, 3300 ; - diff --git a/DRAMSys/tests/DDR4/configs/thermalsim/mem.flp b/DRAMSys/tests/DDR4/configs/thermalsim/mem.flp deleted file mode 100755 index 29d02254..00000000 --- a/DRAMSys/tests/DDR4/configs/thermalsim/mem.flp +++ /dev/null @@ -1,16 +0,0 @@ -channel0 : - position 150, 100 ; - dimension 2600, 5200 ; - -channel1 : - position 3350, 100 ; - dimension 2600, 5200 ; - -channel2 : - position 150, 5300 ; - dimension 2600, 5200 ; - -channel3 : - position 3350, 5300 ; - dimension 2600, 5200 ; - diff --git a/DRAMSys/tests/DDR4/configs/thermalsim/powerInfo.json b/DRAMSys/tests/DDR4/configs/thermalsim/powerInfo.json deleted file mode 100644 index 524f690f..00000000 --- a/DRAMSys/tests/DDR4/configs/thermalsim/powerInfo.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "powerInfo": { - "dram_die_channel0": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel1": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel2": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel3": { - "init_pow": 0, - "threshold": 1.0 - } - } -} diff --git a/DRAMSys/tests/DDR4/configs/thermalsim/stack.stk b/DRAMSys/tests/DDR4/configs/thermalsim/stack.stk deleted file mode 100755 index ec74f020..00000000 --- a/DRAMSys/tests/DDR4/configs/thermalsim/stack.stk +++ /dev/null @@ -1,49 +0,0 @@ -material SILICON : - thermal conductivity 1.30e-4 ; - volumetric heat capacity 1.628e-12 ; - -material BEOL : - thermal conductivity 2.25e-6 ; - volumetric heat capacity 2.175e-12 ; - -material COPPER : - thermal conductivity 4.01e-04 ; - volumetric heat capacity 3.37e-12 ; - -top heat sink : - //sink height 1e03, area 100e06, material COPPER ; - //spreader height 0.5e03, area 70e06, material SILICON ; - heat transfer coefficient 1.3e-09 ; - temperature 318.15 ; -dimensions : - chip length 6100, width 10600 ; - cell length 100, width 100 ; - - -layer PCB : - height 10 ; - material BEOL ; - -die DRAM : - layer 58.5 SILICON ; - source 2 SILICON ; - layer 1.5 BEOL ; - layer 58.5 SILICON ; - - -stack: - die DRAM_DIE DRAM floorplan "./mem.flp" ; - layer CONN_TO_PCB PCB ; - -solver: - transient step 0.01, slot 0.05 ; - initial temperature 300.0 ; - -output: - Tflpel(DRAM_DIE.channel0 , "temp_flp_element_ch0.txt" , average , slot ); - Tflpel(DRAM_DIE.channel1 , "temp_flp_element_ch1.txt" , average , slot ); - Tflpel(DRAM_DIE.channel2 , "temp_flp_element_ch2.txt" , average , slot ); - Tflpel(DRAM_DIE.channel3 , "temp_flp_element_ch3.txt" , average , slot ); - Tmap (DRAM_DIE, "output1.txt", slot) ; - Pmap (DRAM_DIE, "output2.txt", slot) ; - diff --git a/DRAMSys/tests/DDR4/simulations/ddr4-example.json b/DRAMSys/tests/DDR4/simulations/ddr4-example.json deleted file mode 100644 index d97481d9..00000000 --- a/DRAMSys/tests/DDR4/simulations/ddr4-example.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "simulation": { - "addressmapping": "am_ddr4_8x4Gbx8_dimm_p1KB_brc.json", - "mcconfig": "fr_fcfs.json", - "memspec": "MICRON_4Gb_DDR4-1866_8bit_A.json", - "simconfig": "ddr4.json", - "simulationid": "ddr4-bankgrp", - "thermalconfig": "config.json", - "tracesetup": [ - { - "clkMhz": 933, - "name": "trace_test3.stl" - } - ] - } -} diff --git a/DRAMSys/tests/HBM2/ci.yml b/DRAMSys/tests/HBM2/ci.yml deleted file mode 100644 index 91636d65..00000000 --- a/DRAMSys/tests/HBM2/ci.yml +++ /dev/null @@ -1,31 +0,0 @@ -example_HBM2: - stage: test_HBM2 - script: - - export GCOV_PREFIX=$(pwd) - - export GCOV_PREFIX_STRIP=$(pwd | awk -F"/" '{print NF-1}') - - cd build/simulator - - ./DRAMSys ../../DRAMSys/tests/HBM2/simulations/hbm2-example.json ../../DRAMSys/tests/HBM2/ - - mv DRAMSys_hbm2-example_hbm2_ch0.tdb hbm2-example_hbm2_ch0.tdb - - mv DRAMSys_hbm2-example_hbm2_ch1.tdb hbm2-example_hbm2_ch1.tdb - - ls -lah - - ls -lah ../../DRAMSys/tests/HBM2/expected/ - - sqldiff ../../DRAMSys/tests/HBM2/expected/hbm2-example_hbm2_ch0.tdb hbm2-example_hbm2_ch0.tdb - - perl -e 'if(`sqldiff --table Phases ../../DRAMSys/tests/HBM2/expected/hbm2-example_hbm2_ch0.tdb hbm2-example_hbm2_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Transactions ../../DRAMSys/tests/HBM2/expected/hbm2-example_hbm2_ch0.tdb hbm2-example_hbm2_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Power ../../DRAMSys/tests/HBM2/expected/hbm2-example_hbm2_ch0.tdb hbm2-example_hbm2_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - - sqldiff ../../DRAMSys/tests/HBM2/expected/hbm2-example_hbm2_ch1.tdb hbm2-example_hbm2_ch1.tdb - - perl -e 'if(`sqldiff --table Phases ../../DRAMSys/tests/HBM2/expected/hbm2-example_hbm2_ch1.tdb hbm2-example_hbm2_ch1.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Transactions ../../DRAMSys/tests/HBM2/expected/hbm2-example_hbm2_ch1.tdb hbm2-example_hbm2_ch1.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Power ../../DRAMSys/tests/HBM2/expected/hbm2-example_hbm2_ch1.tdb hbm2-example_hbm2_ch1.tdb` eq "") {exit(0)} else {exit(-1)}' - - lcov -q -c --rc geninfo_adjust_src_path=$GCOV_PREFIX -d ${CI_PROJECT_DIR}/build/ -o ${CI_PROJECT_DIR}/coverage/${CI_JOB_NAME}.out - cache: - key: build - paths: - - build/ - policy: pull - - artifacts: - paths: - - build/simulator/hbm2-example_hbm2_ch0.tdb - - coverage/${CI_JOB_NAME}.out - expire_in: 2 days diff --git a/DRAMSys/tests/HBM2/configs/amconfigs/am_hbm2_8Gb_pc_brc.json b/DRAMSys/tests/HBM2/configs/amconfigs/am_hbm2_8Gb_pc_brc.json deleted file mode 100644 index c9362ea4..00000000 --- a/DRAMSys/tests/HBM2/configs/amconfigs/am_hbm2_8Gb_pc_brc.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "CONGEN": { - "CHANNEL_BIT":[ - 30 - ], - "BANKGROUP_BIT":[ - 28, - 29 - ], - "BANK_BIT": [ - 26, - 27 - ], - "BYTE_BIT": [ - 0, - 1, - 2, - 3 - ], - "COLUMN_BIT": [ - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "ROW_BIT": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25 - ] - } -} diff --git a/DRAMSys/tests/HBM2/configs/mcconfigs/fifoStrict.json b/DRAMSys/tests/HBM2/configs/mcconfigs/fifoStrict.json deleted file mode 100644 index a1b1bc77..00000000 --- a/DRAMSys/tests/HBM2/configs/mcconfigs/fifoStrict.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "mcconfig": { - "PagePolicy": "Closed", - "Scheduler": "Fifo", - "RequestBufferSize": 8, - "CmdMux": "Strict", - "RespQueue": "Fifo", - "RefreshPolicy": "NoRefresh", - "RefreshMaxPostponed": 0, - "RefreshMaxPulledin": 0, - "PowerDownPolicy": "NoPowerDown", - "PowerDownTimeout": 100 - } -} \ No newline at end of file diff --git a/DRAMSys/tests/HBM2/configs/memspecs/HBM2.json b/DRAMSys/tests/HBM2/configs/memspecs/HBM2.json deleted file mode 100644 index de681372..00000000 --- a/DRAMSys/tests/HBM2/configs/memspecs/HBM2.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "memspec": { - "memarchitecturespec": { - "burstLength": 4, - "dataRate": 2, - "nbrOfBankGroups": 4, - "nbrOfBanks": 16, - "nbrOfColumns": 128, - "nbrOfPseudoChannels": 1, - "nbrOfChannels": 2, - "nbrOfDevices": 1, - "nbrOfRows": 32768, - "width": 128 - }, - "memoryId": "https://www.computerbase.de/2019-05/amd-memory-tweak-vram-oc/#bilder", - "memoryType": "HBM2", - "memtimingspec": { - "CCDL": 3, - "CCDS": 2, - "CKE": 8, - "DQSCK": 1, - "FAW": 16, - "PL": 0, - "RAS": 28, - "RC": 42, - "RCDRD": 12, - "RCDWR": 6, - "REFI": 3900, - "REFISB": 244, - "RFC": 220, - "RFCSB": 96, - "RL": 17, - "RP": 14, - "RRDL": 6, - "RRDS": 4, - "RREFD": 8, - "RTP": 5, - "RTW": 18, - "WL": 7, - "WR": 14, - "WTRL": 9, - "WTRS": 4, - "XP": 8, - "XS": 216, - "clkMhz": 1000 - } - } -} diff --git a/DRAMSys/tests/HBM2/configs/simulator/hbm2.json b/DRAMSys/tests/HBM2/configs/simulator/hbm2.json deleted file mode 100644 index 608aec41..00000000 --- a/DRAMSys/tests/HBM2/configs/simulator/hbm2.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": false, - "SimulationName": "hbm2", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/tests/HBM2/configs/thermalsim/config.json b/DRAMSys/tests/HBM2/configs/thermalsim/config.json deleted file mode 100644 index b88ed84c..00000000 --- a/DRAMSys/tests/HBM2/configs/thermalsim/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "thermalsimconfig": { - "TemperatureScale": "Celsius", - "StaticTemperatureDefaultValue": 89, - "ThermalSimPeriod":100, - "ThermalSimUnit":"us", - "PowerInfoFile": "powerInfo.json", - "IceServerIp": "127.0.0.1", - "IceServerPort": 11880, - "SimPeriodAdjustFactor" : 10, - "NPowStableCyclesToIncreasePeriod": 5, - "GenerateTemperatureMap": true, - "GeneratePowerMap": true - } -} diff --git a/DRAMSys/tests/HBM2/configs/thermalsim/core.flp b/DRAMSys/tests/HBM2/configs/thermalsim/core.flp deleted file mode 100755 index e85e6801..00000000 --- a/DRAMSys/tests/HBM2/configs/thermalsim/core.flp +++ /dev/null @@ -1,45 +0,0 @@ -CPUs : - - position 0, 0 ; - dimension 2750, 4300 ; - -GPU : - - position 3350, 0 ; - dimension 2750, 4000 ; - -BASEBAND1 : - - position 4250, 4000 ; - dimension 1850, 3300 ; - -BASEBAND2 : - - position 3350, 7300 ; - dimension 2750, 3300 ; - -LLCACHE : - - position 0, 4300 ; - dimension 1900, 3000 ; - -DRAMCTRL1 : - - position 1900, 4300 ; - dimension 850, 3000 ; - -DRAMCTRL2 : - - position 3350, 4000 ; - dimension 900, 3300 ; - -TSVS : - - position 2750, 2300 ; - dimension 600, 6000 ; - -ACELLERATORS : - - position 0, 7300 ; - dimension 2750, 3300 ; - diff --git a/DRAMSys/tests/HBM2/configs/thermalsim/mem.flp b/DRAMSys/tests/HBM2/configs/thermalsim/mem.flp deleted file mode 100755 index 29d02254..00000000 --- a/DRAMSys/tests/HBM2/configs/thermalsim/mem.flp +++ /dev/null @@ -1,16 +0,0 @@ -channel0 : - position 150, 100 ; - dimension 2600, 5200 ; - -channel1 : - position 3350, 100 ; - dimension 2600, 5200 ; - -channel2 : - position 150, 5300 ; - dimension 2600, 5200 ; - -channel3 : - position 3350, 5300 ; - dimension 2600, 5200 ; - diff --git a/DRAMSys/tests/HBM2/configs/thermalsim/powerInfo.json b/DRAMSys/tests/HBM2/configs/thermalsim/powerInfo.json deleted file mode 100644 index 524f690f..00000000 --- a/DRAMSys/tests/HBM2/configs/thermalsim/powerInfo.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "powerInfo": { - "dram_die_channel0": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel1": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel2": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel3": { - "init_pow": 0, - "threshold": 1.0 - } - } -} diff --git a/DRAMSys/tests/HBM2/configs/thermalsim/stack.stk b/DRAMSys/tests/HBM2/configs/thermalsim/stack.stk deleted file mode 100755 index ec74f020..00000000 --- a/DRAMSys/tests/HBM2/configs/thermalsim/stack.stk +++ /dev/null @@ -1,49 +0,0 @@ -material SILICON : - thermal conductivity 1.30e-4 ; - volumetric heat capacity 1.628e-12 ; - -material BEOL : - thermal conductivity 2.25e-6 ; - volumetric heat capacity 2.175e-12 ; - -material COPPER : - thermal conductivity 4.01e-04 ; - volumetric heat capacity 3.37e-12 ; - -top heat sink : - //sink height 1e03, area 100e06, material COPPER ; - //spreader height 0.5e03, area 70e06, material SILICON ; - heat transfer coefficient 1.3e-09 ; - temperature 318.15 ; -dimensions : - chip length 6100, width 10600 ; - cell length 100, width 100 ; - - -layer PCB : - height 10 ; - material BEOL ; - -die DRAM : - layer 58.5 SILICON ; - source 2 SILICON ; - layer 1.5 BEOL ; - layer 58.5 SILICON ; - - -stack: - die DRAM_DIE DRAM floorplan "./mem.flp" ; - layer CONN_TO_PCB PCB ; - -solver: - transient step 0.01, slot 0.05 ; - initial temperature 300.0 ; - -output: - Tflpel(DRAM_DIE.channel0 , "temp_flp_element_ch0.txt" , average , slot ); - Tflpel(DRAM_DIE.channel1 , "temp_flp_element_ch1.txt" , average , slot ); - Tflpel(DRAM_DIE.channel2 , "temp_flp_element_ch2.txt" , average , slot ); - Tflpel(DRAM_DIE.channel3 , "temp_flp_element_ch3.txt" , average , slot ); - Tmap (DRAM_DIE, "output1.txt", slot) ; - Pmap (DRAM_DIE, "output2.txt", slot) ; - diff --git a/DRAMSys/tests/HBM2/simulations/hbm2-example.json b/DRAMSys/tests/HBM2/simulations/hbm2-example.json deleted file mode 100644 index 6fd5f064..00000000 --- a/DRAMSys/tests/HBM2/simulations/hbm2-example.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "simulation": { - "addressmapping": "am_hbm2_8Gb_pc_brc.json", - "mcconfig": "fifoStrict.json", - "memspec": "HBM2.json", - "simconfig": "hbm2.json", - "simulationid": "hbm2-example", - "thermalconfig": "config.json", - "tracesetup": [ - { - "clkMhz": 1000, - "name": "trace1_test4.stl" - }, - { - "clkMhz": 1000, - "name": "trace2_test4.stl" - } - ] - } -} diff --git a/DRAMSys/tests/LPDDR4/ci.yml b/DRAMSys/tests/LPDDR4/ci.yml deleted file mode 100644 index 8f3ab1fd..00000000 --- a/DRAMSys/tests/LPDDR4/ci.yml +++ /dev/null @@ -1,29 +0,0 @@ -# LPDDR4 with Bankwise Flexible Refresh and FIFO Scheduler: -example_LPDDR4: - stage: test_LPDDR4 - script: - - export GCOV_PREFIX=$(pwd) - - export GCOV_PREFIX_STRIP=$(pwd | awk -F"/" '{print NF-1}') - - cd build/simulator - - ./DRAMSys ../../DRAMSys/tests/LPDDR4/simulations/lpddr4-example.json ../../DRAMSys/tests/LPDDR4/ - - mv DRAMSys_lpddr4-example_lpddr4_ch0.tdb lpddr4-example_lpddr4_ch0.tdb - - ls -lah - - ls -lah ../../DRAMSys/tests/LPDDR4/expected/ - - sqldiff ../../DRAMSys/tests/LPDDR4/expected/lpddr4-example_lpddr4_ch0.tdb lpddr4-example_lpddr4_ch0.tdb - - perl -e 'if(`sqldiff --table Phases ../../DRAMSys/tests/LPDDR4/expected/lpddr4-example_lpddr4_ch0.tdb lpddr4-example_lpddr4_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Transactions ../../DRAMSys/tests/LPDDR4/expected/lpddr4-example_lpddr4_ch0.tdb lpddr4-example_lpddr4_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - - perl -e 'if(`sqldiff --table Power ../../DRAMSys/tests/LPDDR4/expected/lpddr4-example_lpddr4_ch0.tdb lpddr4-example_lpddr4_ch0.tdb` eq "") {exit(0)} else {exit(-1)}' - # Run Code Coverage - - lcov -q -c --rc geninfo_adjust_src_path=$GCOV_PREFIX -d ${CI_PROJECT_DIR}/build/ -o ${CI_PROJECT_DIR}/coverage/${CI_JOB_NAME}.out - - cache: - key: build - paths: - - build/ - policy: pull - - artifacts: - paths: - - build/simulator/lpddr4-example_lpddr4_ch0.tdb - - coverage/${CI_JOB_NAME}.out - expire_in: 2 days diff --git a/DRAMSys/tests/LPDDR4/configs/amconfigs/am_lpddr4_8Gbx16_brc.json b/DRAMSys/tests/LPDDR4/configs/amconfigs/am_lpddr4_8Gbx16_brc.json deleted file mode 100644 index e9b3ac9f..00000000 --- a/DRAMSys/tests/LPDDR4/configs/amconfigs/am_lpddr4_8Gbx16_brc.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "CONGEN": { - "BANK_BIT": [ - 27, - 28, - 29 - ], - "BYTE_BIT": [ - 0 - ], - "COLUMN_BIT": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "ROW_BIT": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26 - ] - } -} \ No newline at end of file diff --git a/DRAMSys/tests/LPDDR4/configs/mcconfigs/fifo.json b/DRAMSys/tests/LPDDR4/configs/mcconfigs/fifo.json deleted file mode 100644 index d1793358..00000000 --- a/DRAMSys/tests/LPDDR4/configs/mcconfigs/fifo.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "mcconfig": { - "PagePolicy": "OpenAdaptive", - "Scheduler": "Fifo", - "RequestBufferSize": 8, - "CmdMux": "Oldest", - "RespQueue": "Fifo", - "RefreshPolicy": "Bankwise", - "RefreshMaxPostponed": 8, - "RefreshMaxPulledin": 8, - "PowerDownPolicy": "NoPowerDown", - "PowerDownTimeout": 100 - } -} \ No newline at end of file diff --git a/DRAMSys/tests/LPDDR4/configs/memspecs/JEDEC_8Gb_LPDDR4-3200_16bit.json b/DRAMSys/tests/LPDDR4/configs/memspecs/JEDEC_8Gb_LPDDR4-3200_16bit.json deleted file mode 100644 index 34230486..00000000 --- a/DRAMSys/tests/LPDDR4/configs/memspecs/JEDEC_8Gb_LPDDR4-3200_16bit.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "memspec": { - "memarchitecturespec": { - "burstLength": 16, - "dataRate": 2, - "nbrOfBanks": 8, - "nbrOfColumns": 1024, - "nbrOfRanks": 1, - "nbrOfChannels": 1, - "nbrOfDevices": 1, - "nbrOfRows": 65536, - "width": 16 - }, - "memoryId": "JEDEC_8Gb_LPDDR4-3200_16bit", - "memoryType": "LPDDR4", - "memtimingspec": { - "CCD": 8, - "CKE": 12, - "CMDCKE": 3, - "DQS2DQ": 2, - "DQSCK": 6, - "DQSS": 1, - "ESCKE": 3, - "FAW": 64, - "PPD": 4, - "RAS": 68, - "RCD": 29, - "REFI": 6246, - "REFIPB": 780, - "RFCAB": 448, - "RFCPB": 224, - "RL": 28, - "RPAB": 34, - "RPPB": 29, - "RCAB": 102, - "RCPB": 97, - "RPST": 0, - "RRD": 16, - "RTP": 12, - "SR": 24, - "WL": 14, - "WPRE": 2, - "WR": 29, - "WTR": 16, - "XP": 12, - "XSR": 460, - "RTRS": 1, - "clkMhz": 1600 - } - } -} diff --git a/DRAMSys/tests/LPDDR4/configs/simulator/lpddr4.json b/DRAMSys/tests/LPDDR4/configs/simulator/lpddr4.json deleted file mode 100644 index 6ea5b1bd..00000000 --- a/DRAMSys/tests/LPDDR4/configs/simulator/lpddr4.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "simconfig": { - "AddressOffset": 0, - "CheckTLM2Protocol": false, - "DatabaseRecording": true, - "Debug": false, - "ECCControllerMode": "Disabled", - "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, - "PowerAnalysis": false, - "SimulationName": "lpddr4", - "SimulationProgressBar": true, - "StoreMode": "NoStorage", - "ThermalSimulation": false, - "UseMalloc": false, - "WindowSize": 1000 - } -} diff --git a/DRAMSys/tests/LPDDR4/configs/thermalsim/config.json b/DRAMSys/tests/LPDDR4/configs/thermalsim/config.json deleted file mode 100644 index b88ed84c..00000000 --- a/DRAMSys/tests/LPDDR4/configs/thermalsim/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "thermalsimconfig": { - "TemperatureScale": "Celsius", - "StaticTemperatureDefaultValue": 89, - "ThermalSimPeriod":100, - "ThermalSimUnit":"us", - "PowerInfoFile": "powerInfo.json", - "IceServerIp": "127.0.0.1", - "IceServerPort": 11880, - "SimPeriodAdjustFactor" : 10, - "NPowStableCyclesToIncreasePeriod": 5, - "GenerateTemperatureMap": true, - "GeneratePowerMap": true - } -} diff --git a/DRAMSys/tests/LPDDR4/configs/thermalsim/core.flp b/DRAMSys/tests/LPDDR4/configs/thermalsim/core.flp deleted file mode 100755 index e85e6801..00000000 --- a/DRAMSys/tests/LPDDR4/configs/thermalsim/core.flp +++ /dev/null @@ -1,45 +0,0 @@ -CPUs : - - position 0, 0 ; - dimension 2750, 4300 ; - -GPU : - - position 3350, 0 ; - dimension 2750, 4000 ; - -BASEBAND1 : - - position 4250, 4000 ; - dimension 1850, 3300 ; - -BASEBAND2 : - - position 3350, 7300 ; - dimension 2750, 3300 ; - -LLCACHE : - - position 0, 4300 ; - dimension 1900, 3000 ; - -DRAMCTRL1 : - - position 1900, 4300 ; - dimension 850, 3000 ; - -DRAMCTRL2 : - - position 3350, 4000 ; - dimension 900, 3300 ; - -TSVS : - - position 2750, 2300 ; - dimension 600, 6000 ; - -ACELLERATORS : - - position 0, 7300 ; - dimension 2750, 3300 ; - diff --git a/DRAMSys/tests/LPDDR4/configs/thermalsim/mem.flp b/DRAMSys/tests/LPDDR4/configs/thermalsim/mem.flp deleted file mode 100755 index 29d02254..00000000 --- a/DRAMSys/tests/LPDDR4/configs/thermalsim/mem.flp +++ /dev/null @@ -1,16 +0,0 @@ -channel0 : - position 150, 100 ; - dimension 2600, 5200 ; - -channel1 : - position 3350, 100 ; - dimension 2600, 5200 ; - -channel2 : - position 150, 5300 ; - dimension 2600, 5200 ; - -channel3 : - position 3350, 5300 ; - dimension 2600, 5200 ; - diff --git a/DRAMSys/tests/LPDDR4/configs/thermalsim/powerInfo.json b/DRAMSys/tests/LPDDR4/configs/thermalsim/powerInfo.json deleted file mode 100644 index 524f690f..00000000 --- a/DRAMSys/tests/LPDDR4/configs/thermalsim/powerInfo.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "powerInfo": { - "dram_die_channel0": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel1": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel2": { - "init_pow": 0, - "threshold": 1.0 - }, - "dram_die_channel3": { - "init_pow": 0, - "threshold": 1.0 - } - } -} diff --git a/DRAMSys/tests/LPDDR4/configs/thermalsim/stack.stk b/DRAMSys/tests/LPDDR4/configs/thermalsim/stack.stk deleted file mode 100755 index ec74f020..00000000 --- a/DRAMSys/tests/LPDDR4/configs/thermalsim/stack.stk +++ /dev/null @@ -1,49 +0,0 @@ -material SILICON : - thermal conductivity 1.30e-4 ; - volumetric heat capacity 1.628e-12 ; - -material BEOL : - thermal conductivity 2.25e-6 ; - volumetric heat capacity 2.175e-12 ; - -material COPPER : - thermal conductivity 4.01e-04 ; - volumetric heat capacity 3.37e-12 ; - -top heat sink : - //sink height 1e03, area 100e06, material COPPER ; - //spreader height 0.5e03, area 70e06, material SILICON ; - heat transfer coefficient 1.3e-09 ; - temperature 318.15 ; -dimensions : - chip length 6100, width 10600 ; - cell length 100, width 100 ; - - -layer PCB : - height 10 ; - material BEOL ; - -die DRAM : - layer 58.5 SILICON ; - source 2 SILICON ; - layer 1.5 BEOL ; - layer 58.5 SILICON ; - - -stack: - die DRAM_DIE DRAM floorplan "./mem.flp" ; - layer CONN_TO_PCB PCB ; - -solver: - transient step 0.01, slot 0.05 ; - initial temperature 300.0 ; - -output: - Tflpel(DRAM_DIE.channel0 , "temp_flp_element_ch0.txt" , average , slot ); - Tflpel(DRAM_DIE.channel1 , "temp_flp_element_ch1.txt" , average , slot ); - Tflpel(DRAM_DIE.channel2 , "temp_flp_element_ch2.txt" , average , slot ); - Tflpel(DRAM_DIE.channel3 , "temp_flp_element_ch3.txt" , average , slot ); - Tmap (DRAM_DIE, "output1.txt", slot) ; - Pmap (DRAM_DIE, "output2.txt", slot) ; - diff --git a/DRAMSys/tests/LPDDR4/simulations/lpddr4-example.json b/DRAMSys/tests/LPDDR4/simulations/lpddr4-example.json deleted file mode 100644 index 30211e69..00000000 --- a/DRAMSys/tests/LPDDR4/simulations/lpddr4-example.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "simulation": { - "addressmapping": "am_lpddr4_8Gbx16_brc.json", - "mcconfig": "fifo.json", - "memspec": "JEDEC_8Gb_LPDDR4-3200_16bit.json", - "simconfig": "lpddr4.json", - "simulationid": "lpddr4-example", - "thermalconfig": "config.json", - "tracesetup": [ - { - "clkMhz": 1600, - "name": "trace_lpddr4.stl" - } - ] - } -} diff --git a/DRAMSys/traceAnalyzer/CMakeLists.txt b/DRAMSys/traceAnalyzer/CMakeLists.txt deleted file mode 100644 index bcc2b512..00000000 --- a/DRAMSys/traceAnalyzer/CMakeLists.txt +++ /dev/null @@ -1,178 +0,0 @@ -# Copyright (c) 2020, Technische Universität Kaiserslautern -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER -# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Authors: -# Matthias Jung -# Lukas Steiner -# Derek Christ -# Iron Prando da Silva - -cmake_minimum_required(VERSION 3.12) - -# Project Name: -project(TraceAnalyzer) - -# Add Python3 Dependency: -find_package(Python3 COMPONENTS Development) - -# Add QWT Dependency: -find_library(QWT_LIBRARY NAMES "qwt-qt5" "qwt" PATHS - "$ENV{QWT_HOME}/lib" - "/opt/homebrew/opt/qwt-qt5/lib" -) -find_path(QWT_INCLUDE_DIRS NAMES "qwt_plot.h" PATHS - "/usr/include/qwt-qt5" - "/usr/include/qwt" - "$ENV{QWT_HOME}/include" - "/opt/homebrew/opt/qwt-qt5/include" - "/opt/homebrew/opt/qwt-qt5/lib/qwt.framework/Headers" -) - -# Add QT Library: -if (APPLE) - set(Qt5_DIR "/opt/homebrew/opt/qt@5/lib/cmake/Qt5") -endif(APPLE) -find_package(Qt5 COMPONENTS Core Gui Widgets Sql REQUIRED) -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTOUIC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -# Configure: -set(CMAKE_CXX_STANDARD 17) -set(DCMAKE_SH="CMAKE_SH-NOTFOUND") - -add_executable(TraceAnalyzer - main.cpp - businessObjects/transaction.cpp - businessObjects/timespan.cpp - data/tracedb.cpp - presentation/tracenavigator.cpp - presentation/util/colorgenerator.cpp - presentation/util/colorobject.cpp - presentation/tracedrawing.cpp - presentation/traceplotitem.cpp - gototimedialog.cpp - presentation/traceplot.cpp - tracefiletab.cpp - presentation/tracescroller.cpp - traceanalyzer.cpp - presentation/transactiontreewidget.cpp - presentation/util/clkgrid.cpp - queryeditor.cpp - presentation/selectedtransactiontreewidget.cpp - businessObjects/phases/phasefactory.cpp - presentation/debugmessagetreewidget.cpp - presentation/tracePlotMouseLabel.cpp - evaluationtool.cpp - selectmetrics.cpp - presentation/util/testlight.cpp - presentation/util/togglecollapsedaction.cpp - businessObjects/pythoncaller.cpp - presentation/tracemetrictreewidget.cpp - businessObjects/phases/phase.cpp - businessObjects/phases/phasedependency.cpp - businessObjects/phases/dependencyinfos.cpp - presentation/tracedrawingproperties.cpp - presentation/util/customlabelscaledraw.cpp - businessObjects/configmodels.cpp - businessObjects/commentmodel.cpp - businessObjects/traceplotlinemodel.cpp - simulationdialog.cpp - businessObjects/dependencymodels.cpp - - businessObjects/dramTimeDependencies/common/QStringComparator.cpp - businessObjects/dramTimeDependencies/common/StringMapper.cpp - businessObjects/dramTimeDependencies/deviceDependencies/poolcontroller.cpp - businessObjects/dramTimeDependencies/deviceDependencies/poolcontrollermap.cpp - businessObjects/dramTimeDependencies/deviceDependencies/dramtimedependenciesbase.cpp - businessObjects/dramTimeDependencies/configurations/configurationBase.cpp - - businessObjects/dramTimeDependencies/dbEntries/specialized/DDR3dbphaseentry.cpp - # businessObjects/dramTimeDependencies/deviceDependencies/specialized/DDR3TimeDependencies.cpp - businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR3.cpp - businessObjects/dramTimeDependencies/configurations/specialized/DDR3Configuration.cpp - - businessObjects/dramTimeDependencies/dbEntries/specialized/DDR4dbphaseentry.cpp - businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR4.cpp - businessObjects/dramTimeDependencies/configurations/specialized/DDR4Configuration.cpp - - businessObjects/dramTimeDependencies/dbEntries/specialized/HBM2dbphaseentry.cpp - businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoHBM2.cpp - businessObjects/dramTimeDependencies/configurations/specialized/HBM2Configuration.cpp - - businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR4dbphaseentry.cpp - businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR4.cpp - businessObjects/dramTimeDependencies/configurations/specialized/LPDDR4Configuration.cpp - - businessObjects/dramTimeDependencies/dbEntries/specialized/DDR5dbphaseentry.cpp - businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR5.cpp - businessObjects/dramTimeDependencies/configurations/specialized/DDR5Configuration.cpp - - businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR5dbphaseentry.cpp - businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR5.cpp - businessObjects/dramTimeDependencies/configurations/specialized/LPDDR5Configuration.cpp - - businessObjects/dramTimeDependencies/configurations/configurationfactory.cpp - businessObjects/dramTimeDependencies/phasedependenciestracker.cpp - - selectmetrics.ui - preferences.ui - evaluationtool.ui - gototimedialog.ui - tracefiletab.ui - queryeditor.ui - traceanalyzer.ui - simulationdialog.ui - - scripts/memUtil.py - scripts/metrics.py - scripts/tests.py - scripts/plots.py - scripts/vcdExport.py - scripts/sonification.pl - scripts/dataExtractForNN.pl - - resources.qrc -) - -target_include_directories(TraceAnalyzer - PRIVATE ${QWT_INCLUDE_DIRS} - PRIVATE ${Python3_INCLUDE_DIRS} -) - -# Build: -target_link_libraries(TraceAnalyzer - PRIVATE ${Python3_LIBRARIES} - PRIVATE ${QWT_LIBRARY} - PRIVATE Qt5::Widgets - PRIVATE Qt5::Sql - PRIVATE DRAMSysConfiguration -) diff --git a/DRAMSys/traceAnalyzer/mainwindow.cpp b/DRAMSys/traceAnalyzer/mainwindow.cpp deleted file mode 100644 index 2b0ba7bd..00000000 --- a/DRAMSys/traceAnalyzer/mainwindow.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Janik Schlemminger - * Robert Gernhardt - * Matthias Jung - */ - -#include "mainwindow.h" -#include "ui_mainwindow.h" -#include "traceDB.h" -#include "xmldeserializer.h" -#include - -MainWindow::MainWindow(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MainWindow) -{ - ui->setupUi(this); - // xmlDeserializer des("config.xml"); - // des.xmlToTraceDB("tpr.xml") - - db = new TraceDB("tpr.tdb", true); - traceNavigator = new TraceNavigator(db->getGeneralInfo(), this); - ui->tracePlot->init(traceNavigator, db); - ui->traceScroller->init(traceNavigator, db, ui->tracePlot); - phases = db->getPhasesInTimespan( - traceNavigator->GeneralTraceInfo().TraceSpan()); - transactions = db->getTransactionsInTimespan( - traceNavigator->GeneralTraceInfo().TraceSpan()); - - ui->qwtPlot->setAxisScale(QwtPlot::xBottom, - traceNavigator->GeneralTraceInfo().TraceSpan().Begin(), - traceNavigator->GeneralTraceInfo().TraceSpan().End()); - unsigned int banksize = traceNavigator->GeneralTraceInfo().NumberOfBanks(); - ui->qwtPlot->setAxisScale(QwtPlot::yLeft, 0.0, banksize + 3, 1.0); - - PhaseCollectionDrawingProperties *drawingProperties = new - PhaseCollectionDrawingProperties(banksize, this); - drawingProperties->setDrawText(false); - drawingProperties->setDrawBorder(false); - drawingProperties->setDrawPowerDownStates(false); - phaseCollectionPlotItem *phaseCollectionPlot = new phaseCollectionPlotItem( - phases, transactions, drawingProperties); - phaseCollectionPlot->attach(ui->qwtPlot); - - traceNavigator->navigateToTime(0); -} - -MainWindow::~MainWindow() -{ - delete ui; -} diff --git a/DRAMSys/traceAnalyzer/mainwindow.h b/DRAMSys/traceAnalyzer/mainwindow.h deleted file mode 100644 index 794d7f22..00000000 --- a/DRAMSys/traceAnalyzer/mainwindow.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Janik Schlemminger - * Robert Gernhardt - * Matthias Jung - */ - -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include -#include - -#include "tracenavigator.h" - -class TraceDB; - -namespace Ui { -class MainWindow; -} - -class MainWindow : public QMainWindow -{ - Q_OBJECT - -public: - explicit MainWindow(QWidget *parent = 0); - ~MainWindow(); - -//private slots: -// void on_horizontalScrollBar_valueChanged(int value); - -private: - Ui::MainWindow *ui; - TraceNavigator *traceNavigator; - TraceDB *db; - QHash phases; - QHash transactions; - -}; - -#endif // MAINWINDOW_H diff --git a/DRAMSys/traceAnalyzer/markerplotitem.cpp b/DRAMSys/traceAnalyzer/markerplotitem.cpp deleted file mode 100644 index 9945814a..00000000 --- a/DRAMSys/traceAnalyzer/markerplotitem.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Janik Schlemminger - * Robert Gernhardt - * Matthias Jung - */ - -#include "markerplotitem.h" -#include "tracedrawing.h" -#include - -int MarkerPlotItem::rtti() const -{ - return QwtPlotItem::Rtti_PlotUserItem; -} - -void MarkerPlotItem::draw(QPainter *painter, const QwtScaleMap &xMap, - const QwtScaleMap &yMap, const QRectF &canvasRect) const -{ - drawVerticalLine(painter, xMap.transform(time), canvasRect, color, width); -} diff --git a/DRAMSys/traceAnalyzer/schedulerwrapper.h b/DRAMSys/traceAnalyzer/schedulerwrapper.h deleted file mode 100644 index a36fbd03..00000000 --- a/DRAMSys/traceAnalyzer/schedulerwrapper.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2015, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Janik Schlemminger - * Robert Gernhardt - * Matthias Jung - */ - -#ifndef SCHEDULERWRAPPER_H -#define SCHEDULERWRAPPER_H - -#include -#include -#include -#include -#include - -struct SchedulerWrapper : public sc_module { - tlm_utils::simple_initiator_socket iSocket; - tlm_utils::simple_target_socket tSocket; - - SC_HAS_PROCESS(SchedulerWrapper); - - SchedulerWrapper(sc_module_name name); - -private: - tlm_utils::peq_with_cb_and_phase payloadEventQueue; - - tlm::tlm_sync_enum nb_transport_bw(tlm::tlm_generic_payload &payload, - tlm::tlm_phase &phase, sc_time &bwDelay); - tlm::tlm_sync_enum nb_transport_fw(tlm::tlm_generic_payload &payload, - tlm::tlm_phase &phase, sc_time &fwDelay); - - void peqCallback(tlm::tlm_generic_payload &payload, - const tlm::tlm_phase &phase); - void sendToTarget(tlm::tlm_generic_payload &payload, - const tlm::tlm_phase &phase, const sc_time &delay); - void sendToInitiator(tlm::tlm_generic_payload &payload, - const tlm::tlm_phase &phase, const sc_time &delay); - -}; - -#endif // SCHEDULERWRAPPER_H - - diff --git a/DRAMSys/unitTests/CommandMuxTests.cpp b/DRAMSys/unitTests/CommandMuxTests.cpp deleted file mode 100644 index 15cb40f3..00000000 --- a/DRAMSys/unitTests/CommandMuxTests.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2019, Technische Universität Kaiserslautern - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Lukas Steiner - */ - -#include -#include -#include -#include -#include "../library/src/controller/CommandMux.h" -#include "../library/src/controller/Command.h" - -class CommandMuxState -{ -public: - Command firstCommand; - Command secondCommand; - Command resultCommand; -}; - -class CommandMuxTestBase : public testing::Test -{ -public: - CommandMux *commandMux; - - tlm_generic_payload *firstPayload; - tlm_generic_payload *secondPayload; - - std::pair firstPair; - std::pair secondPair; - - std::vector> readyCommands; - - std::pair result; - - CommandMuxTestBase() - { - commandMux = new CommandMux(); - firstPayload = new tlm_generic_payload(); - secondPayload = new tlm_generic_payload(); - } - - ~CommandMuxTestBase() - { - delete commandMux; - delete firstPayload; - delete secondPayload; - } -}; - -class CommandMuxTestParam : public CommandMuxTestBase, public testing::WithParamInterface -{ -public: - CommandMuxTestParam() - { - commandMux->insertPayload(firstPayload); - commandMux->insertPayload(secondPayload); - - firstPair.first = GetParam().firstCommand; - firstPair.second = firstPayload; - secondPair.first = GetParam().secondCommand; - secondPair.second = secondPayload; - - readyCommands.push_back(secondPair); - readyCommands.push_back(firstPair); - result = commandMux->selectCommand(readyCommands); - } -}; - -TEST_P(CommandMuxTestParam, satisfiesCommandOrder) -{ - EXPECT_EQ(result.first, GetParam().resultCommand); -} - -INSTANTIATE_TEST_CASE_P(Default, CommandMuxTestParam, testing::Values( - CommandMuxState{Command::RD, Command::WR, Command::RD}, - CommandMuxState{Command::RD, Command::ACT, Command::ACT})); diff --git a/DRAMSys/unitTests/googletest b/DRAMSys/unitTests/googletest deleted file mode 160000 index b77e5c76..00000000 --- a/DRAMSys/unitTests/googletest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b77e5c76252bac322bb82c5b444f050bd0d92451 diff --git a/README.md b/README.md index 2b81e63a..1fcd24b0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ - +DRAMSys Logo -**DRAMSys4.0** is a flexible DRAM subsystem design space exploration framework based on SystemC TLM-2.0. It was developed at the [Microelectronic Systems Design Research Group](https://ems.eit.uni-kl.de/en/start/) and [Fraunhofer IESE](https://www.iese.fraunhofer.de/en.html). +**DRAMSys** is a flexible DRAM subsystem design space exploration framework based on SystemC TLM-2.0. It was developed at the [Microelectronic Systems Design Research Group](https://ems.eit.uni-kl.de/en/start/) and [Fraunhofer IESE](https://www.iese.fraunhofer.de/en.html). \>> [Official Website](https://www.iese.fraunhofer.de/en/innovation_trends/autonomous-systems/memtonomy/DRAMSys.html) << @@ -17,28 +17,22 @@ If you decide to use DRAMSys in your research please cite the papers [2] [3]. To ## Key Features -- **standalone** simulator with trace players, **gem5**-coupled simulator and **TLM-AT-compliant library** -- support for **DDR3/4**, **LPDDR4**, **Wide I/O 1/2**, **GDDR5/5X/6** and **HBM1/2** -- support for **DDR5**, **LPDDR5** and **HBM3** under development (contact [Matthias Jung](mailto:matthias.jung@iese.fraunhofer.de) for more information) -- automatic source code generation for new JEDEC standards [3] [9] from the domain-specific language DRAMml -- FIFO, FR-FCFS and FR-FCFS with read/write grouping scheduling policies -- open, closed, open adaptive and closed adaptive page policy [8] -- all-bank refresh, same-bank refresh and per-bank refresh with pulled-in and postponed refresh commands -- staggered power down [5] -- coupling to **DRAMPower** [4] and **3D-ICE** [8] for power and thermal simulation +- **Standalone** simulator with trace players and traffic generators, **gem5**-coupled simulator and **TLM-AT-compliant library** +- Support for **DDR3/4**, **LPDDR4**, **Wide I/O 1/2**, **GDDR5/5X/6** and **HBM1/2** +- Support for **DDR5**, **LPDDR5** and **HBM3** (please contact [Matthias Jung](mailto:matthias.jung@iese.fraunhofer.de) for more information) +- Automatic source code generation for new JEDEC standards [3] [9] from DRAMml DSL +- Various scheduling policies +- Open, closed and adaptive page policies [8] +- All-bank, same-bank, per-bank and per-2-bank refresh +- Staggered power down [5] +- Coupling to **DRAMPower** [4] and for power simulation - **Trace Analyzer** for visual and metric-based result analysis ## Video -The linked video shows the background of DRAMSys and some examples how simulations can be performed. +The linked video shows the background of DRAMSys and some examples of how simulations can be performed. [![DRAMSys Video](https://img.youtube.com/vi/xdfaGv7MPVo/0.jpg)](https://www.youtube.com/watch?v=xdfaGv7MPVo) -## Architecture and Functionality - -A UML diagram of the software architecture is presented below; different component implementations are left out for simplicity. More information about the architecture and functionality can be found in the papers [1] [2] [3] and in the introduction video on [Youtube](https://www.youtube.com/watch?v=8EkC3mYWpQY). - -UML - ## Trace Analyzer Consulting and Custom-Tailored Modifications To provide better analysis capabilities for DRAM subsystem design space exploration than the usual performance-related outputs to the console, DRAMSys offers the Trace Analyzer. @@ -49,16 +43,15 @@ The Trace Analyzer's main window is shown below. If you are interested in the Trace Analyzer, if you need support with the setup of DRAMSys in a virtual platform of your company, or if you require custom modifications of the simulator please contact [Matthias Jung](mailto:matthias.jung@iese.fraunhofer.de). -![Trace Analyzer Main Window](DRAMSys/docs/images/traceanalyzer.png) +![Trace Analyzer Main Window](docs/images/traceanalyzer.png) ## Basic Setup Start using DRAMSys by cloning the repository. -Use the `--recursive` flag to initialize all submodules within the repository, namely **DRAMPower**, **SystemC**, **nlohmann JSON** and **SQLite Amalgamation**. ### Dependencies -DRAMSys requires a **C++17** compiler. The build process is based on **CMake** (minimum version **3.10**). Furthermore, the simulator is based on **SystemC**. SystemC is included as a submodule and will be build automatically with the project. If you want to use an external SystemC version, export the environment variables `SYSTEMC_HOME` (SystemC root directory) and `SYSTEMC_TARGET_ARCH` (e.g., linux64). +DRAMSys requires a **C++17** compiler. The build process is based on **CMake** (minimum version **3.13**). Furthermore, the simulator is based on **SystemC**. SystemC is included as a submodule and will be build automatically with the project. If you want to use an external SystemC version, export the environment variables `SYSTEMC_HOME` (SystemC root directory) and `SYSTEMC_TARGET_ARCH` (e.g., linux64). ### Building DRAMSys @@ -68,19 +61,11 @@ To build the standalone simulator for running memory trace files or a traffic ge $ cd DRAMSys $ mkdir build $ cd build -$ cmake ../DRAMSys/ +$ cmake .. $ make ``` -If you plan to integrate DRAMSys into your own SystemC TLM-2.0 project you can build the DRAMSys library only: - -```bash -$ cd DRAMSys -$ mkdir build -$ cd build -$ cmake ../DRAMSys/library/ -$ make -``` +To include **DRAMPower** in your build enable the CMake option `DRAMSYS_WITH_DRAMPOWER`. If you plan to integrate DRAMSys into your own SystemC TLM-2.0 project you can build the DRAMSys library only by disabling the CMake option `DRAMSYS_BUILD_CLI`. To build DRAMSys on Windows 10 we recommend to use the **Windows Subsystem for Linux (WSL)**. @@ -91,478 +76,26 @@ Information on how to couple DRAMSys with **gem5** can be found [here](DRAMSys/g From the build directory use the commands below to execute the DRAMSys standalone. ```bash -$ cd simulator +$ cd bin $ ./DRAMSys ``` -The default base config file is *ddr3-example.json* located in *DRAMSys/library/resources/simulations*, the default resource folder for all nested config files is *DRAMSys/library/resources*. +The default configuration file is *ddr4-example.json* located in *configs/*, the default folder for all nested configuration files is *configs/*. -To run DRAMSys with a specific base config file: +To run DRAMSys with a specific configuration file: ```bash -$ ./DRAMSys ../../DRAMSys/library/resources/simulations/ddr3-example.json +$ ./DRAMSys ../../configs/lpddr4-example.json ``` -To run DRAMSys with a specific base config file and a resource folder somewhere else to the standard: +To run DRAMSys with a specific configuration file and configuration folder: ```bash -$ ./DRAMSys ../../DRAMSys/tests/example_ddr3/simulations/ddr3-example.json ../../DRAMSys/tests/example_ddr3/ +$ ./DRAMSys ../../tests/tests_regression/DDR3/ddr3-example.json ../../tests/tests_regression/DDR3/ ``` -### DRAMSys Configuration +More information on the configuration can be found [here](configs/README.md). -The DRAMSys executable supports one argument, which is a JSON file that contains certain arguments and the name of nested configuration files for the desired simulation. Alternatively, the contents of nested configuration files can also be added directly to the top configuration file instead of the file name. - -The JSON code below shows an example configuration: - -```json -{ - "simulation": { - "simulationid": "ddr3-example", - "simconfig": "ddr3.json", - "thermalconfig": "config.json", - "memspec": "MICRON_1Gb_DDR3-1600_8bit_G.json", - "addressmapping": "am_ddr3_8x1Gbx8_dimm_p1KB_brc.json", - "mcconfig":"fifoStrict.json", - "tracesetup": [ - { - "clkMhz": 300, - "name": "ddr3_example.stl" - }, - { - "clkMhz": 2000, - "type": "generator", - "name": "gen0", - "numRequests": 2000, - "rwRatio": 0.85, - "addressDistribution": "random", - "seed": 123456, - "maxPendingReadRequests": 8, - "maxPendingWriteRequests": 8, - "minAddress": 16384, - "maxAddress": 32767 - }, - { - "clkMhz": 1000, - "type": "hammer", - "name": "ham0", - "numRequests": 4000, - "rowIncrement": 2097152 - } - ] - } -} -``` -Field Descriptions: -- "simulationid": simulation file identifier -- "simconfig": configuration file for the DRAMSys simulator -- "thermalconfig": thermal simulation configuration file -- "memspec": memory device configuration file -- "addressmapping": address mapping configuration file -- "mcconfig": memory controller configuration file -- "tracesetup": The trace setup is only used in standalone mode. In library mode or gem5 mode the trace setup is ignored. Each device should be added as a json object inside the "tracesetup" array. - -Each **trace setup** device configuration can be a **trace player** ("type": "player"), a **traffic generator** ("type": "generator") or a **row hammer generator** ("type": "hammer"). By not specifing the **type** parameter, the device will act as a **trace player**. -All device configurations must define a **clkMhz** (operation frequency of the **traffic initiator**) and a **name** (in case of a trace player this specifies the **trace file** to play; in case of a generator this field is only for identification purposes). -The **maxPendingReadRequests** and **maxPendingWriteRequests** parameters define the maximum number of outstanding read/write requests. The current implementation delays all memory accesses if one limit is reached. The default value (0) disables the limit. - -A **traffic generator** can be configured to generate **numRequests** requests in total, of which the **rwRatio** field defines the probability of one request being a read request. The length of a request (in bytes) can be specified with the **dataLength** parameter. The **seed** parameter can be used to produce identical results for all simulations. **minAddress** and **maxAddress** specify the address range, by default the whole address range is used. The parameter **addressDistribution** can either be set to **random** or **sequential**. In case of **sequential** the additional **addressIncrement** field must be specified, defining the address increment after each request. - -The **row hammer generator** is a special traffic generator that mimics a row hammer attack. It generates **numRequests** alternating read requests to two different addresses. The first address is 0x0, the second address is specified by the **rowIncrement** parameter and should decode to a different row in the same bank. Since only one outstanding request is allowed, the controller cannot perform any reordering, forcing a row switch (precharge and activate) for each access. That way the number of activations on the target rows are maximized. - -Most configuration fields reference other JSON files which contain more specialized chunks of the configuration like a memory specification, an address mapping and a memory controller configuration. - - -#### Trace Files - -A **trace file** is a prerecorded file containing memory transactions. Each memory transaction has a time stamp that tells the simulator when it shall happen, a transaction type (*read* or *write*) and a hexadecimal memory address. The optional length parameter (in bytes) allows sending transactions with a custom length that does not match the length of a single DRAM burst access. In this case a length converter has to be added. Write transactions also have to specify a data field when storage is enabled in DRAMSys. - -There are two different kinds of trace files. They differ in their timing behavior and are distinguished by their file extension. - -##### STL Traces (.stl) - -The time stamp corresponds to the time the request is to be issued and it is given in cycles of the bus master device. Example: The device is an FPGA with a frequency of 200 MHz (clock period of 5 ns). If the time stamp is 10 the request is to be issued when time is 50 ns. - -Syntax example: - -``` -# Comment lines begin with # -# cycle: [(length)] command hex-address [hex-data] -31: read 0x400140 -33: read 0x400160 -56: write 0x7fff8000 0x123456789abcdef... -81: (128) read 0x400180 -``` - -##### Relative STL Traces (.rstl) - -The time stamp corresponds to the time the request is to be issued relative to the end of the previous transaction. This results in a simulation in which the trace player is able to react to possible delays due to DRAM bottlenecks. - -Syntax example: - -``` -# Comment lines begin with # -# cycle: [(length)] command hex-address [hex-data] -31: read 0x400140 -2: (512) read 0x400160 -23: write 0x7fff8000 0x123456789abcdef... -10: read 0x400180 -``` - -##### Elastic Traces - -More information about elastic traces can be found in the [gem5 readme](DRAMSys/gem5/README.md). - -#### Trace Player - -A trace player is equivalent to a bus master device (processor, FPGA, etc.). It reads an input trace file and translates each line into a new memory request. By adding a new device element into the trace setup section one can specify a new trace player, its operating frequency and its trace file. - -#### Configuration File Sections - -The main configuration file is divided into self-contained sections. Each of these sections refers to sub-configuration files. Below, the sub-configurations are listed and explained. - -##### Simulator Configuration - -The content of [ddr3.json](DRAMSys/library/resources/configs/simulator/ddr3.json) is presented below as an example. - -```json -{ - "simconfig": { - "SimulationName": "ddr3", - "Debug": false, - "DatabaseRecording": true, - "PowerAnalysis": false, - "EnableWindowing": false, - "WindowSize": 1000, - "ThermalSimulation": false, - "SimulationProgressBar": true, - "CheckTLM2Protocol": false, - "ECCControllerMode": "Disabled", - "UseMalloc": false, - "AddressOffset": 0, - "ErrorChipSeed": 42, - "ErrorCSVFile": "", - "StoreMode": "NoStorage" - } -} -``` - - - *SimulationName* (string) - - Give the name of the simulation for distinguishing from other simulations. - - *Debug* (boolean) - - true: enables debug output on console (only supported by a debug build) - - false: disables debug output - - *DatabaseRecording* (boolean) - - true: enables output database recording for the Trace Analyzer tool - - false: disables output database recording - - *PowerAnalysis* (boolean) - - true: enables live power analysis with DRAMPower - - false: disables power analysis - - *EnableWindowing* (boolean) - - true: enables temporal windowing - - false: disables temporal windowing - - *WindowSize* (unsigned int) - - Size of the window in clock cycles used to evaluate average bandwidth and average power consumption - - *ThermalSimulation* (boolean) - - true: enables thermal simulation ([more information](#dramsys-with-thermal-simulation)) - - false: static temperature during simulation - - *SimulationProgressBar* (boolean) - - true: enables the simulation progress bar - - false: disables the simulation progress bar - - *CheckTLM2Protocol* (boolean) - - true: enables the TLM-2.0 Protocol Checking - - false: disables the TLM-2.0 Protocol Checking - - *ECCControllerMode* (string) - - "Disabled": No ECC controller is used - - "Hamming": Enables an ECC Controller with classic SECDED implementation using Hamming Code - - *UseMalloc* (boolean) - - false: model storage using mmap() (DEFAULT) - - true: allocate memory for modeling storage using malloc() - - *AddressOffset* (unsigned int) - - Address offset of the DRAM subsystem (required for the gem5 coupling). - - *ErrorChipSeed* (unsigned int) - - Seed to initialize the random error generator. - - *ErrorCSVFile* (string) - - CSV file with error injection information. - - *StoreMode* (string) - - "NoStorage": no storage - - "Store": store data without error model - - "ErrorModel": store data with error model [6] - -##### Thermal Simulation - -The thermal simulation configuration can be found [here](#thermal-simulation-configuration). - - -##### Memory Specification - -A file with memory specifications. Timings and currents come from data sheets and measurements and usually do not change. -The fields inside "mempowerspec" can be written directly as a **double** type, "memoryId" and "memoryType" are **string**, all other fields are **unsigned int**. - -##### Address Mapping - -DRAMSys uses the **ConGen** [7] format for address mappings. It provides bit-wise granularity. It also provides the possibility to XOR address bits in order to map page misses to different banks and reduce latencies. - -Used fields: -- "XOR": Defines an XOR connection of a "FIRST" and a "SECOND" bit -- "BYTE_BIT": Address bits that are connected to the byte bits in ascending order -- "COLUMN_BIT": Address bits that are connected to the column bits in ascending order -- "ROW_BIT": Address bits that are connected to the row bits in ascending order -- "BANK_BIT": Address bits that are connected to the bank bits in ascending order -- "BANKGROUP_BIT": Address bits that are connected to the bank group bits in ascending order -- "RANK_BIT": Address bits that are connected to the rank bits in ascending order -- "CHANNEL_BIT": Address bits that are connected to the channel bits in ascending order - -```json -{ - "CONGEN": { - "XOR": [ - { - "FIRST": 13, - "SECOND": 16 - } - ], - "BYTE_BIT": [0,1,2], - "COLUMN_BIT": [3,4,5,6,7,8,9,10,11,12], - "BANK_BIT": [13,14,15], - "ROW_BIT": [16,17,18,19,20,21,22,23,24,25,26,27,28,29] - } -} - -``` - -##### Memory Controller - -An example follows. - -```json -{ - "mcconfig": { - "PagePolicy": "Open", - "Scheduler": "Fifo", - "SchedulerBuffer": "ReadWrite", - "RequestBufferSize": 8, - "CmdMux": "Oldest", - "RespQueue": "Fifo", - "RefreshPolicy": "AllBank", - "RefreshMaxPostponed": 8, - "RefreshMaxPulledin": 8, - "PowerDownPolicy": "NoPowerDown", - "Arbiter": "Fifo", - "MaxActiveTransactions": 128, - "RefreshManagement": true - } -} -``` - - - *PagePolicy* (string) - - "Open": no auto-precharge is performed after read or write commands - - "OpenAdaptive": auto-precharge after read or write commands is only performed if further requests for the targeted bank are stored in the scheduler and all the requests are row misses - - "Closed": auto-precharge is performed after each read or write command - - "ClosedAdaptive": auto-precharge after read or write commands is performed if all further requests for the targeted bank stored in the scheduler are row misses or if there are no further requests stored - - *Scheduler* (string) - - all policies are applied locally to one bank, not globally to the whole channel - - "Fifo": first in, first out policy - - "FrFcfs": first-ready - first-come, first-served policy (row hits are preferred to row misses) - - "FrFcfsGrp": first-ready - first-come, first-served policy with additional grouping of read and write requests - - *SchedulerBuffer* (string) - - "Bankwise": requests are stored in bankwise buffers - - "ReadWrite": read and write requests are stored in different buffers - - "Shared": all requests are stored in one shared buffer - - *RequestBufferSize* (unsigned int) - - depth of a single scheduler buffer entity, total buffer depth depends on the selected scheduler buffer policy - - *CmdMux* (string) - - "Oldest": from all commands that are ready to be issued in the current clock cycle the one that belongs to the oldest transaction has the highest priority; commands from refresh managers have a higher priority than all other commands, commands from power down managers have a lower priority than all other commands - - "Strict": based on "Oldest", in addition, read and write commands are strictly issued in the order their corresponding requests arrived at the channel controller (can only be used in combination with the "Fifo" scheduler) - - *RespQueue* (string) - - "Fifo": the original request order is not restored for outgoing responses - - "Reorder": the original request order is restored for outgoing responses (only within the channel) - - *RefreshPolicy* (string) - - "NoRefresh": refresh is disabled - - "AllBank": all-bank refresh commands are issued (per rank) - - "PerBank": per-bank refresh commands are issued (only available in combination with LPDDR4, Wide I/O 2, GDDR5/5X/6 or HBM2) - - "SameBank": same-bank refresh commands are issued (only available in combination with DDR5) - - *RefreshMaxPostponed* (unsigned int) - - maximum number of refresh commands that can be postponed (with per-bank refresh the number is internally multiplied with the number of banks, with same-bank refresh the number is internally multiplied with the number of banks per bank group) - - *RefreshMaxPulledin* (unsigned int) - - maximum number of refresh commands that can be pulled in (with per-bank refresh the number is internally multiplied with the number of banks, with same-bank refresh the number is internally multiplied with the number of banks per bank group) - - *PowerDownPolicy* (string) - - "NoPowerDown": power down disabled - - "Staggered": staggered power down policy [5] - - *Arbiter* (string) - - "Simple": simple forwarding of transactions to the right channel or initiator - - "Fifo": transactions can be buffered internally to achieve a higher throughput especially in multi-initiator-multi-channel configurations - - "Reorder": based on "Fifo", in addition, the original request order is restored for outgoing responses (separately for each initiator and globally to all channels) - - *MaxActiveTransactions* (unsigned int) - - maximum number of active transactions per initiator (only applies to "Fifo" and "Reorder" arbiter policy) -- *RefreshManagement* (boolean) - - enable the sending of refresh management commands when the number of activates to one bank exceeds a certain management threshold (only supported in DDR5 and LPDDR5) - -## DRAMSys with Thermal Simulation - -The thermal simulation is performed by a **3D-ICE** [8] server accessed through the network. Therefore users interested in thermal simulation during their DRAMSys simulations need to make sure they have a 3D-ICE server up and running before starting. For more information about 3D-ICE visit the [official website](https://www.epfl.ch/labs/esl/open-source-software-projects/3d-ice/). An example video that visualizes the results of a thermal simulation is provided on [Youtube](https://www.youtube.com/watch?v=Eacsq71hHtY). - -#### Installing 3D-ICE - -Install SuperLU dependencies: - -```bash -$ sudo apt-get install build-essential git bison flex libblas-dev -``` - -Download and install SuperLU: - -```bash -$ wget http://crd.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz -$ tar xvfz superlu_4.3.tar.gz -$ cd SuperLU_4.3/ -$ cp MAKE_INC/make.linux make.inc -``` - -Make sure the *SuperLUroot* variable in *make.inc* is properly set. For example, if you downloaded it to your home folder set as follows: - -```bash -SuperLUroot = $(HOME)/SuperLU_4.3 -``` - -Compile the library: - -```bash -$ make superlulib -``` - -Download and install bison-2.4.1: - -```bash -$ wget http://ftp.gnu.org/gnu/bison/bison-2.4.1.tar.gz -$ tar xvzf bison-2.4.1.tar.gz -$ cd bison-2.4.1 -$ ./configure --program-suffix=-2.4.1 -$ make -$ sudo make install -``` - -[Download](https://www.epfl.ch/labs/esl/open-source-software-projects/3d-ice/3d-ice-download/) the lastest version of 3D-ICE. Make sure you got version 2.2.6 or greater. - -Unzip the archive and go to the 3D-ICE directory: - -```bash -$ unzip 3d-ice-latest.zip -$ cd 3d-ice-latest/3d-ice-2.2.6 -``` - -Open the makefile.def and set the following variables properly, e.g.: - -```bash -SLU_MAIN = $(HOME)/SuperLU_$(SLU_VERSION) -YACC = bison-2.4.1 - -SYSTEMC_VERSION = 2.3.4 -SYSTEMC_ARCH = linux64 -SYSTEMC_MAIN = $(HOME)/systemc-$(SYSTEMC_VERSION) -SYSTEMC_INCLUDE = $(SYSTEMC_MAIN)/include -SYSTEMC_LIB = $(SYSTEMC_MAIN)/lib-$(SYSTEMC_ARCH) -``` - -In case you are using the SystemC submodule and DRAMSys is located in your home directory the variables should be set as follows: - -```bash -SYSTEMC_INCLUDE = $(HOME)/DRAMSys/DRAMSys/library/src/common/third_party/systemc/src -SYSTEMC_LIB = $(HOME)/DRAMSys/build/library/src/common/third_party/systemc/src -``` - -Compile 3D-ICE with SystemC TLM-2.0 support: - -```bash -$ make SYSTEMC_WRAPPER=y -``` - -Export the environment variable `LIBTHREED_ICE_HOME`: - -```bash -$ export LIBTHREED_ICE_HOME=${HOME}/3d-ice-latest/3d-ice-2.2.6 -``` - -#### Running DRAMSys with Thermal Simulation - -In order to run DRAMSys with thermal simulation you have to rerun CMake and rebuild the project. The example input trace file can be generated with a Perl script: - - ```bash -$ cd DRAMSys/DRAMSys/library/resources/traces -$ ./generateErrorTest.pl > test_error.stl - ``` - -Before starting DRAMSys it is necessary to run the 3D-ICE server passing to it two arguments: a suitable configuration file and a socket port number. And then wait until the server is ready to receive requests. - -```bash -$ cd DRAMSys/DRAMSys/library/resources/configs/thermalsim -$ ~/3d-ice-latest/3d-ice-2.2.6/bin/3D-ICE-Server stack.stk 11880 -Preparing stk data ... done ! -Preparing thermal data ... done ! -Creating socket ... done ! -Waiting for client ... -``` - -In another terminal or terminal tab start DRAMSys with the special thermal simulation config: - -```bash -$ cd DRAMSys/build/simulator/ -$ ./DRAMSys ../../DRAMSys/library/resources/simulations/wideio-thermal.json -``` - -#### Thermal Simulation Configuration - -The content of [config.json](DRAMSys/library/resources/configs/thermalsim/config.json) is presented below as an example. - -```json -{ - "thermalsimconfig": { - "TemperatureScale": "Celsius", - "StaticTemperatureDefaultValue": 89, - "ThermalSimPeriod": 100, - "ThermalSimUnit": "us", - "PowerInfoFile": "powerInfo.json", - "IceServerIp": "127.0.0.1", - "IceServerPort": 11880, - "SimPeriodAdjustFactor": 10, - "NPowStableCyclesToIncreasePeriod": 5, - "GenerateTemperatureMap": true, - "GeneratePowerMap": true - } -} -``` - - - *TemperatureScale* (string) - - "Celsius" - - "Fahrenheit" - - "Kelvin" - - *StaticTemperatureDefaultValue* (int) - - Temperature value for simulations with static temperature - - *ThermalSimPeriod* (double) - - Period of the thermal simulation - - *ThermalSimUnit* (string) - - "s": seconds - - "ms": millisecond - - "us": microseconds - - "ns": nanoseconds - - "ps": picoseconds - - "fs": femtoseconds - - *PowerInfoFile* (string) - - File containing power related information: devices identifiers, initial power values and power thresholds. - - *IceServerIp* (string) - - 3D-ICE server IP address - - *IceServerPort* (unsigned int) - - 3D-ICE server port - - *SimPeriodAdjustFactor* (unsigned int) - - When substantial changes in power occur (i.e., changes that exceed the thresholds), then the simulation period will be divided by this number causing the thermal simulation to be executed more often. - - *NPowStableCyclesToIncreasePeriod* (unsigned int) - - Wait this number of thermal simulation cycles with power stability (i.e., changes that do not exceed the thresholds) to start increasing the simulation period back to its configured value. - - *GenerateTemperatureMap* (boolean) - - true: generate temperature map files during thermal simulation - - false: do not generate temperature map files during thermal simulation - - *GeneratePowerMap* (boolean) - - true: generate power map files during thermal simulation - - false: do not generate power map files during thermal simulation ## Acknowledgements diff --git a/cmake/build_source_group.cmake b/cmake/build_source_group.cmake new file mode 100644 index 00000000..563638bf --- /dev/null +++ b/cmake/build_source_group.cmake @@ -0,0 +1,13 @@ +############################################### +### build_source_group ### +############################################### +### +### Builds a source group from a set of files +### for nicer display in IDEs +### + +function( build_source_group ) + file(GLOB_RECURSE files ${CMAKE_CURRENT_SOURCE_DIR}/*.* ) + list(REMOVE_ITEM files "CMakeLists.txt") + source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "[src]" FILES ${files}) +endfunction() \ No newline at end of file diff --git a/cmake/diagnostics_print.cmake b/cmake/diagnostics_print.cmake new file mode 100644 index 00000000..a07ec142 --- /dev/null +++ b/cmake/diagnostics_print.cmake @@ -0,0 +1,32 @@ +############################################### +### diagnostics_print ### +############################################### +### +### Prints different diagnostics and infos +### about the specified target +### + +function( diagnostics_print target_name ) + message(STATUS "${target_name} settings:") + message(STATUS "==============\n") + + message(STATUS "Source Files:") + get_target_property(SOURCE_FILES ${target_name} SOURCES) + if(SOURCE_FILES) + message(STATUS "${SOURCE_FILES}") + endif() + + message(STATUS "\nInclude Directories:") + get_target_property(HEADER_DIR ${target_name} INCLUDE_DIRECTORIES) + if(HEADER_DIR) + message(STATUS "${HEADER_DIR}") + endif() + + message(STATUS "\nLink Libraries:") + get_target_property(LINKED_LIBS ${target_name} LINK_LIBRARIES) + if(LINKED_LIBS) + message(STATUS "${LINKED_LIBS}") + endif() + + message(STATUS "\n") +endfunction() \ No newline at end of file diff --git a/cmake/enable_extensions.cmake b/cmake/enable_extensions.cmake new file mode 100644 index 00000000..07f90cca --- /dev/null +++ b/cmake/enable_extensions.cmake @@ -0,0 +1,23 @@ +############################################### +### enable_extensions ### +############################################### +### +### Enable proprietary DRAMSys extensions +### during build generation +### + +function( dramsys_enable_extensions ) + file(GLOB sub_dirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${DRAMSYS_EXTENSIONS_DIR}/*) + + message(STATUS "Enabling DRAMSys extensions:") + message(STATUS "============================") + + FOREACH(sub_dir ${sub_dirs}) + IF(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${sub_dir}") + add_subdirectory(${sub_dir}) + ENDIF() + ENDFOREACH() + + message(STATUS "") + message(STATUS "") +endfunction() \ No newline at end of file diff --git a/configs/README.md b/configs/README.md new file mode 100644 index 00000000..6ed1fbef --- /dev/null +++ b/configs/README.md @@ -0,0 +1,266 @@ +# Configuration + +The DRAMSys executable supports one argument, which is a JSON file that contains certain arguments and the name of nested configuration files for the desired simulation. Alternatively, the contents of nested configuration files can also be added directly to the top configuration file instead of the file name. + +The JSON code below shows an example configuration: + +```json +{ + "simulation": { + "simulationid": "ddr3-example", + "simconfig": "example.json", + "memspec": "MICRON_1Gb_DDR3-1600_8bit_G.json", + "addressmapping": "am_ddr3_8x1Gbx8_dimm_p1KB_brc.json", + "mcconfig":"fifoStrict.json", + "tracesetup": [ + { + "clkMhz": 300, + "name": "example.stl" + }, + { + "clkMhz": 2000, + "type": "generator", + "name": "gen0", + "numRequests": 2000, + "rwRatio": 0.85, + "addressDistribution": "random", + "seed": 123456, + "maxPendingReadRequests": 8, + "maxPendingWriteRequests": 8, + "minAddress": 16384, + "maxAddress": 32767 + }, + { + "clkMhz": 1000, + "type": "hammer", + "name": "ham0", + "numRequests": 4000, + "rowIncrement": 2097152 + } + ] + } +} +``` +Field Descriptions: +- "simulationid": simulation file identifier +- "simconfig": configuration file for the DRAMSys simulator +- "memspec": memory device configuration file +- "addressmapping": address mapping configuration file +- "mcconfig": memory controller configuration file +- "tracesetup": The trace setup is only used in standalone mode. In library mode or gem5 mode the trace setup is ignored. Each device should be added as a json object inside the "tracesetup" array. + +Each **trace setup** device configuration can be a **trace player** ("type": "player"), a **traffic generator** ("type": "generator") or a **row hammer generator** ("type": "hammer"). By not specifing the **type** parameter, the device will act as a **trace player**. +All device configurations must define a **clkMhz** (operation frequency of the **traffic initiator**) and a **name** (in case of a trace player this specifies the **trace file** to play; in case of a generator this field is only for identification purposes). +The **maxPendingReadRequests** and **maxPendingWriteRequests** parameters define the maximum number of outstanding read/write requests. The current implementation delays all memory accesses if one limit is reached. The default value (0) disables the limit. + +A **traffic generator** can be configured to generate **numRequests** requests in total, of which the **rwRatio** field defines the probability of one request being a read request. The length of a request (in bytes) can be specified with the **dataLength** parameter. The **seed** parameter can be used to produce identical results for all simulations. **minAddress** and **maxAddress** specify the address range, by default the whole address range is used. The parameter **addressDistribution** can either be set to **random** or **sequential**. In case of **sequential** the additional **addressIncrement** field must be specified, defining the address increment after each request. + +The **row hammer generator** is a special traffic generator that mimics a row hammer attack. It generates **numRequests** alternating read requests to two different addresses. The first address is 0x0, the second address is specified by the **rowIncrement** parameter and should decode to a different row in the same bank. Since only one outstanding request is allowed, the controller cannot perform any reordering, forcing a row switch (precharge and activate) for each access. That way the number of activations on the target rows are maximized. + +Most configuration fields reference other JSON files which contain more specialized chunks of the configuration like a memory specification, an address mapping and a memory controller configuration. + + +## Trace Files + +A **trace file** is a prerecorded file containing memory transactions. Each memory transaction has a time stamp that tells the simulator when it shall happen, a transaction type (*read* or *write*) and a hexadecimal memory address. The optional length parameter (in bytes) allows sending transactions with a custom length that does not match the length of a single DRAM burst access. In this case a length converter has to be added. Write transactions also have to specify a data field when storage is enabled in DRAMSys. + +There are two different kinds of trace files. They differ in their timing behavior and are distinguished by their file extension. + +### STL Traces (.stl) + +The time stamp corresponds to the time the request is to be issued and it is given in cycles of the bus master device. Example: The device is an FPGA with a frequency of 200 MHz (clock period of 5 ns). If the time stamp is 10 the request is to be issued when time is 50 ns. + +Syntax example: + +``` +# Comment lines begin with # +# cycle: [(length)] command hex-address [hex-data] +31: read 0x400140 +33: read 0x400160 +56: write 0x7fff8000 0x123456789abcdef... +81: (128) read 0x400180 +``` + +### Relative STL Traces (.rstl) + +The time stamp corresponds to the time the request is to be issued relative to the end of the previous transaction. This results in a simulation in which the trace player is able to react to possible delays due to DRAM bottlenecks. + +Syntax example: + +``` +# Comment lines begin with # +# cycle: [(length)] command hex-address [hex-data] +31: read 0x400140 +2: (512) read 0x400160 +23: write 0x7fff8000 0x123456789abcdef... +10: read 0x400180 +``` + +### Elastic Traces + +More information about elastic traces can be found in the [gem5 readme](../src/gem5/README.md). + +## Trace Player + +A trace player is equivalent to a bus master device (processor, FPGA, etc.). It reads an input trace file and translates each line into a new memory request. By adding a new device element into the trace setup section one can specify a new trace player, its operating frequency and its trace file. + +## Configuration File Sections + +The main configuration file is divided into self-contained sections. Each of these sections refers to sub-configuration files. Below, the sub-configurations are listed and explained. + +### Simulator Configuration + +The content of [ddr3.json](simconfig/example.json) is presented below as an example. + +```json +{ + "simconfig": { + "SimulationName": "example", + "Debug": false, + "DatabaseRecording": true, + "PowerAnalysis": false, + "EnableWindowing": false, + "WindowSize": 1000, + "SimulationProgressBar": true, + "CheckTLM2Protocol": false, + "UseMalloc": false, + "AddressOffset": 0, + "StoreMode": "NoStorage" + } +} +``` + +- *SimulationName* (string) + - Give the name of the simulation for distinguishing from other simulations. +- *Debug* (boolean) + - true: enables debug output on console (only supported by a debug build) + - false: disables debug output +- *DatabaseRecording* (boolean) + - true: enables output database recording for the Trace Analyzer tool + - false: disables output database recording +- *PowerAnalysis* (boolean) + - true: enables live power analysis with DRAMPower + - false: disables power analysis +- *EnableWindowing* (boolean) + - true: enables temporal windowing + - false: disables temporal windowing +- *WindowSize* (unsigned int) + - Size of the window in clock cycles used to evaluate average bandwidth and average power consumption +- *SimulationProgressBar* (boolean) + - true: enables the simulation progress bar + - false: disables the simulation progress bar +- *CheckTLM2Protocol* (boolean) + - true: enables the TLM-2.0 Protocol Checking + - false: disables the TLM-2.0 Protocol Checking +- *UseMalloc* (boolean) + - false: model storage using mmap() (DEFAULT) + - true: allocate memory for modeling storage using malloc() +- *AddressOffset* (unsigned int) + - Address offset of the DRAM subsystem (required for the gem5 coupling). +- *StoreMode* (string) + - "NoStorage": no storage + - "Store": store data without error model + +### Memory Specification + +A file with memory specifications. Timings and currents come from data sheets and measurements and usually do not change. +The fields inside "mempowerspec" can be written directly as a **double** type, "memoryId" and "memoryType" are **string**, all other fields are **unsigned int**. + +### Address Mapping + +DRAMSys uses the **ConGen** [7] format for address mappings. It provides bit-wise granularity. It also provides the possibility to XOR address bits in order to map page misses to different banks and reduce latencies. + +Used fields: +- "XOR": Defines an XOR connection of a "FIRST" and a "SECOND" bit +- "BYTE_BIT": Address bits that are connected to the byte bits in ascending order +- "COLUMN_BIT": Address bits that are connected to the column bits in ascending order +- "ROW_BIT": Address bits that are connected to the row bits in ascending order +- "BANK_BIT": Address bits that are connected to the bank bits in ascending order +- "BANKGROUP_BIT": Address bits that are connected to the bank group bits in ascending order +- "RANK_BIT": Address bits that are connected to the rank bits in ascending order +- "CHANNEL_BIT": Address bits that are connected to the channel bits in ascending order + +```json +{ + "CONGEN": { + "XOR": [ + { + "FIRST": 13, + "SECOND": 16 + } + ], + "BYTE_BIT": [0,1,2], + "COLUMN_BIT": [3,4,5,6,7,8,9,10,11,12], + "BANK_BIT": [13,14,15], + "ROW_BIT": [16,17,18,19,20,21,22,23,24,25,26,27,28,29] + } +} + +``` + +### Memory Controller + +An example follows. + +```json +{ + "mcconfig": { + "PagePolicy": "Open", + "Scheduler": "Fifo", + "SchedulerBuffer": "ReadWrite", + "RequestBufferSize": 8, + "CmdMux": "Oldest", + "RespQueue": "Fifo", + "RefreshPolicy": "AllBank", + "RefreshMaxPostponed": 8, + "RefreshMaxPulledin": 8, + "PowerDownPolicy": "NoPowerDown", + "Arbiter": "Fifo", + "MaxActiveTransactions": 128, + "RefreshManagement": true + } +} +``` + +- *PagePolicy* (string) + - "Open": no auto-precharge is performed after read or write commands + - "OpenAdaptive": auto-precharge after read or write commands is only performed if further requests for the targeted bank are stored in the scheduler and all the requests are row misses + - "Closed": auto-precharge is performed after each read or write command + - "ClosedAdaptive": auto-precharge after read or write commands is performed if all further requests for the targeted bank stored in the scheduler are row misses or if there are no further requests stored +- *Scheduler* (string) + - all policies are applied locally to one bank, not globally to the whole channel + - "Fifo": first in, first out policy + - "FrFcfs": first-ready - first-come, first-served policy (row hits are preferred to row misses) + - "FrFcfsGrp": first-ready - first-come, first-served policy with additional grouping of read and write requests +- *SchedulerBuffer* (string) + - "Bankwise": requests are stored in bankwise buffers + - "ReadWrite": read and write requests are stored in different buffers + - "Shared": all requests are stored in one shared buffer +- *RequestBufferSize* (unsigned int) + - depth of a single scheduler buffer entity, total buffer depth depends on the selected scheduler buffer policy +- *CmdMux* (string) + - "Oldest": from all commands that are ready to be issued in the current clock cycle the one that belongs to the oldest transaction has the highest priority; commands from refresh managers have a higher priority than all other commands, commands from power down managers have a lower priority than all other commands + - "Strict": based on "Oldest", in addition, read and write commands are strictly issued in the order their corresponding requests arrived at the channel controller (can only be used in combination with the "Fifo" scheduler) +- *RespQueue* (string) + - "Fifo": the original request order is not restored for outgoing responses + - "Reorder": the original request order is restored for outgoing responses (only within the channel) +- *RefreshPolicy* (string) + - "NoRefresh": refresh is disabled + - "AllBank": all-bank refresh commands are issued (per rank) + - "PerBank": per-bank refresh commands are issued (only available in combination with LPDDR4, Wide I/O 2, GDDR5/5X/6 or HBM2) + - "SameBank": same-bank refresh commands are issued (only available in combination with DDR5) +- *RefreshMaxPostponed* (unsigned int) + - maximum number of refresh commands that can be postponed (with per-bank refresh the number is internally multiplied with the number of banks, with same-bank refresh the number is internally multiplied with the number of banks per bank group) +- *RefreshMaxPulledin* (unsigned int) + - maximum number of refresh commands that can be pulled in (with per-bank refresh the number is internally multiplied with the number of banks, with same-bank refresh the number is internally multiplied with the number of banks per bank group) +- *PowerDownPolicy* (string) + - "NoPowerDown": power down disabled + - "Staggered": staggered power down policy [5] +- *Arbiter* (string) + - "Simple": simple forwarding of transactions to the right channel or initiator + - "Fifo": transactions can be buffered internally to achieve a higher throughput especially in multi-initiator-multi-channel configurations + - "Reorder": based on "Fifo", in addition, the original request order is restored for outgoing responses (separately for each initiator and globally to all channels) +- *MaxActiveTransactions* (unsigned int) + - maximum number of active transactions per initiator (only applies to "Fifo" and "Reorder" arbiter policy) +- *RefreshManagement* (boolean) + - enable the sending of refresh management commands when the number of activates to one bank exceeds a certain management threshold (only supported in DDR5 and LPDDR5) diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr3_4x4Gbx16_dimm_p2KB_brc.json b/configs/addressmapping/am_ddr3_4x4Gbx16_dimm_p2KB_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr3_4x4Gbx16_dimm_p2KB_brc.json rename to configs/addressmapping/am_ddr3_4x4Gbx16_dimm_p2KB_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr3_4x4Gbx16_dimm_p2KB_rbc.json b/configs/addressmapping/am_ddr3_4x4Gbx16_dimm_p2KB_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr3_4x4Gbx16_dimm_p2KB_rbc.json rename to configs/addressmapping/am_ddr3_4x4Gbx16_dimm_p2KB_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr3_8x1Gbx8_dimm_p1KB_brc.json b/configs/addressmapping/am_ddr3_8x1Gbx8_dimm_p1KB_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr3_8x1Gbx8_dimm_p1KB_brc.json rename to configs/addressmapping/am_ddr3_8x1Gbx8_dimm_p1KB_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr3_8x1Gbx8_dimm_p1KB_rbc.json b/configs/addressmapping/am_ddr3_8x1Gbx8_dimm_p1KB_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr3_8x1Gbx8_dimm_p1KB_rbc.json rename to configs/addressmapping/am_ddr3_8x1Gbx8_dimm_p1KB_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr3_8x2Gbx8_dimm_p1KB_brc.json b/configs/addressmapping/am_ddr3_8x2Gbx8_dimm_p1KB_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr3_8x2Gbx8_dimm_p1KB_brc.json rename to configs/addressmapping/am_ddr3_8x2Gbx8_dimm_p1KB_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr3_8x2Gbx8_dimm_p1KB_rbc.json b/configs/addressmapping/am_ddr3_8x2Gbx8_dimm_p1KB_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr3_8x2Gbx8_dimm_p1KB_rbc.json rename to configs/addressmapping/am_ddr3_8x2Gbx8_dimm_p1KB_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr3_x16_brc.json b/configs/addressmapping/am_ddr3_x16_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr3_x16_brc.json rename to configs/addressmapping/am_ddr3_x16_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr3_x16_rbc.json b/configs/addressmapping/am_ddr3_x16_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr3_x16_rbc.json rename to configs/addressmapping/am_ddr3_x16_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr4_8x4Gbx8_dimm_p1KB_brc.json b/configs/addressmapping/am_ddr4_8x4Gbx8_dimm_p1KB_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr4_8x4Gbx8_dimm_p1KB_brc.json rename to configs/addressmapping/am_ddr4_8x4Gbx8_dimm_p1KB_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr5_2x2x8x4Gbx4_dimm_p1KB_rbc.json b/configs/addressmapping/am_ddr5_2x2x8x4Gbx4_dimm_p1KB_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr5_2x2x8x4Gbx4_dimm_p1KB_rbc.json rename to configs/addressmapping/am_ddr5_2x2x8x4Gbx4_dimm_p1KB_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr5_2x4x1Gbx8_dimm_p1KB_rbc.json b/configs/addressmapping/am_ddr5_2x4x1Gbx8_dimm_p1KB_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr5_2x4x1Gbx8_dimm_p1KB_rbc.json rename to configs/addressmapping/am_ddr5_2x4x1Gbx8_dimm_p1KB_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json b/configs/addressmapping/am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json rename to configs/addressmapping/am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ddr5_2x8x8x2Gbx4_dimm_p1KB_rbc.json b/configs/addressmapping/am_ddr5_2x8x8x2Gbx4_dimm_p1KB_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ddr5_2x8x8x2Gbx4_dimm_p1KB_rbc.json rename to configs/addressmapping/am_ddr5_2x8x8x2Gbx4_dimm_p1KB_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_hbm2_8Gb_pc_brc.json b/configs/addressmapping/am_hbm2_8Gb_pc_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_hbm2_8Gb_pc_brc.json rename to configs/addressmapping/am_hbm2_8Gb_pc_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_hbm3_8Gb_pc_brc.json b/configs/addressmapping/am_hbm3_8Gb_pc_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_hbm3_8Gb_pc_brc.json rename to configs/addressmapping/am_hbm3_8Gb_pc_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr4_1Gbx16_baroco.json b/configs/addressmapping/am_lpddr4_1Gbx16_baroco.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr4_1Gbx16_baroco.json rename to configs/addressmapping/am_lpddr4_1Gbx16_baroco.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr4_1Gbx16_robaco.json b/configs/addressmapping/am_lpddr4_1Gbx16_robaco.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr4_1Gbx16_robaco.json rename to configs/addressmapping/am_lpddr4_1Gbx16_robaco.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr4_1Gbx16_rocoba.json b/configs/addressmapping/am_lpddr4_1Gbx16_rocoba.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr4_1Gbx16_rocoba.json rename to configs/addressmapping/am_lpddr4_1Gbx16_rocoba.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr4_512Mbx16_baroco.json b/configs/addressmapping/am_lpddr4_512Mbx16_baroco.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr4_512Mbx16_baroco.json rename to configs/addressmapping/am_lpddr4_512Mbx16_baroco.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr4_512Mbx16_robaco.json b/configs/addressmapping/am_lpddr4_512Mbx16_robaco.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr4_512Mbx16_robaco.json rename to configs/addressmapping/am_lpddr4_512Mbx16_robaco.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr4_512Mbx16_rocoba.json b/configs/addressmapping/am_lpddr4_512Mbx16_rocoba.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr4_512Mbx16_rocoba.json rename to configs/addressmapping/am_lpddr4_512Mbx16_rocoba.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr4_8Gbx16_brc.json b/configs/addressmapping/am_lpddr4_8Gbx16_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr4_8Gbx16_brc.json rename to configs/addressmapping/am_lpddr4_8Gbx16_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_16B_robaco.json b/configs/addressmapping/am_lpddr5_1Gbx16_16B_robaco.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_16B_robaco.json rename to configs/addressmapping/am_lpddr5_1Gbx16_16B_robaco.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_16B_rocoba.json b/configs/addressmapping/am_lpddr5_1Gbx16_16B_rocoba.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_16B_rocoba.json rename to configs/addressmapping/am_lpddr5_1Gbx16_16B_rocoba.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_8B_robaco.json b/configs/addressmapping/am_lpddr5_1Gbx16_8B_robaco.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_8B_robaco.json rename to configs/addressmapping/am_lpddr5_1Gbx16_8B_robaco.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_8B_rocoba.json b/configs/addressmapping/am_lpddr5_1Gbx16_8B_rocoba.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_8B_rocoba.json rename to configs/addressmapping/am_lpddr5_1Gbx16_8B_rocoba.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_BG_robacobg.json b/configs/addressmapping/am_lpddr5_1Gbx16_BG_robacobg.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_BG_robacobg.json rename to configs/addressmapping/am_lpddr5_1Gbx16_BG_robacobg.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_BG_rocobabg.json b/configs/addressmapping/am_lpddr5_1Gbx16_BG_rocobabg.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_1Gbx16_BG_rocobabg.json rename to configs/addressmapping/am_lpddr5_1Gbx16_BG_rocobabg.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_16B_robaco.json b/configs/addressmapping/am_lpddr5_512Mbx16_16B_robaco.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_16B_robaco.json rename to configs/addressmapping/am_lpddr5_512Mbx16_16B_robaco.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_16B_rocoba.json b/configs/addressmapping/am_lpddr5_512Mbx16_16B_rocoba.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_16B_rocoba.json rename to configs/addressmapping/am_lpddr5_512Mbx16_16B_rocoba.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_8B_robaco.json b/configs/addressmapping/am_lpddr5_512Mbx16_8B_robaco.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_8B_robaco.json rename to configs/addressmapping/am_lpddr5_512Mbx16_8B_robaco.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_8B_rocoba.json b/configs/addressmapping/am_lpddr5_512Mbx16_8B_rocoba.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_8B_rocoba.json rename to configs/addressmapping/am_lpddr5_512Mbx16_8B_rocoba.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_BG_robacobg.json b/configs/addressmapping/am_lpddr5_512Mbx16_BG_robacobg.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_BG_robacobg.json rename to configs/addressmapping/am_lpddr5_512Mbx16_BG_robacobg.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_BG_rocobabg.json b/configs/addressmapping/am_lpddr5_512Mbx16_BG_rocobabg.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_lpddr5_512Mbx16_BG_rocobabg.json rename to configs/addressmapping/am_lpddr5_512Mbx16_BG_rocobabg.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ranktest.json b/configs/addressmapping/am_ranktest.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_ranktest.json rename to configs/addressmapping/am_ranktest.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_stt-mram_8x2Gbx8_dimm_p1KB_rbc.json b/configs/addressmapping/am_stt-mram_8x2Gbx8_dimm_p1KB_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_stt-mram_8x2Gbx8_dimm_p1KB_rbc.json rename to configs/addressmapping/am_stt-mram_8x2Gbx8_dimm_p1KB_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio2_4x64_4x2Gb_brc.json b/configs/addressmapping/am_wideio2_4x64_4x2Gb_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio2_4x64_4x2Gb_brc.json rename to configs/addressmapping/am_wideio2_4x64_4x2Gb_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio2_4x64_4x2Gb_rbc.json b/configs/addressmapping/am_wideio2_4x64_4x2Gb_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio2_4x64_4x2Gb_rbc.json rename to configs/addressmapping/am_wideio2_4x64_4x2Gb_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x1Gb_brc.json b/configs/addressmapping/am_wideio_4x1Gb_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x1Gb_brc.json rename to configs/addressmapping/am_wideio_4x1Gb_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x1Gb_rbc.json b/configs/addressmapping/am_wideio_4x1Gb_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x1Gb_rbc.json rename to configs/addressmapping/am_wideio_4x1Gb_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x256Mb_brc.json b/configs/addressmapping/am_wideio_4x256Mb_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x256Mb_brc.json rename to configs/addressmapping/am_wideio_4x256Mb_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x256Mb_rbc.json b/configs/addressmapping/am_wideio_4x256Mb_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x256Mb_rbc.json rename to configs/addressmapping/am_wideio_4x256Mb_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x2Gb_brc.json b/configs/addressmapping/am_wideio_4x2Gb_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x2Gb_brc.json rename to configs/addressmapping/am_wideio_4x2Gb_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x2Gb_rbc.json b/configs/addressmapping/am_wideio_4x2Gb_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x2Gb_rbc.json rename to configs/addressmapping/am_wideio_4x2Gb_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x4Gb_brc.json b/configs/addressmapping/am_wideio_4x4Gb_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x4Gb_brc.json rename to configs/addressmapping/am_wideio_4x4Gb_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x4Gb_rbc.json b/configs/addressmapping/am_wideio_4x4Gb_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x4Gb_rbc.json rename to configs/addressmapping/am_wideio_4x4Gb_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x512Mb_brc.json b/configs/addressmapping/am_wideio_4x512Mb_brc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x512Mb_brc.json rename to configs/addressmapping/am_wideio_4x512Mb_brc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_4x512Mb_rbc.json b/configs/addressmapping/am_wideio_4x512Mb_rbc.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_4x512Mb_rbc.json rename to configs/addressmapping/am_wideio_4x512Mb_rbc.json diff --git a/DRAMSys/library/resources/configs/amconfigs/am_wideio_thermal.json b/configs/addressmapping/am_wideio_thermal.json similarity index 100% rename from DRAMSys/library/resources/configs/amconfigs/am_wideio_thermal.json rename to configs/addressmapping/am_wideio_thermal.json diff --git a/DRAMSys/library/resources/simulations/ddr3-example.json b/configs/ddr3-example.json similarity index 73% rename from DRAMSys/library/resources/simulations/ddr3-example.json rename to configs/ddr3-example.json index 6b820354..4a947a58 100644 --- a/DRAMSys/library/resources/simulations/ddr3-example.json +++ b/configs/ddr3-example.json @@ -3,13 +3,12 @@ "addressmapping": "am_ddr3_8x1Gbx8_dimm_p1KB_rbc.json", "mcconfig": "fr_fcfs.json", "memspec": "MICRON_1Gb_DDR3-1600_8bit_G.json", - "simconfig": "ddr3.json", + "simconfig": "example.json", "simulationid": "ddr3-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 800, - "name": "ddr3_example.stl" + "name": "example.stl" } ] } diff --git a/DRAMSys/library/resources/simulations/ddr3-gem5-se.json b/configs/ddr3-gem5-se.json similarity index 60% rename from DRAMSys/library/resources/simulations/ddr3-gem5-se.json rename to configs/ddr3-gem5-se.json index 51b870ad..a340dc39 100644 --- a/DRAMSys/library/resources/simulations/ddr3-gem5-se.json +++ b/configs/ddr3-gem5-se.json @@ -3,8 +3,7 @@ "addressmapping": "am_ddr3_8x1Gbx8_dimm_p1KB_brc.json", "mcconfig": "fifoStrict.json", "memspec": "MICRON_1Gb_DDR3-1600_8bit_G.json", - "simconfig": "ddr3_gem5_se.json", - "simulationid": "ddr3-gem5-se", - "thermalconfig": "config.json" + "simconfig": "gem5_se.json", + "simulationid": "ddr3-gem5-se" } -} \ No newline at end of file +} diff --git a/DRAMSys/library/resources/simulations/ddr4-example.json b/configs/ddr4-example.json similarity index 73% rename from DRAMSys/library/resources/simulations/ddr4-example.json rename to configs/ddr4-example.json index 09fdac1b..645ca907 100644 --- a/DRAMSys/library/resources/simulations/ddr4-example.json +++ b/configs/ddr4-example.json @@ -3,13 +3,12 @@ "addressmapping": "am_ddr4_8x4Gbx8_dimm_p1KB_brc.json", "mcconfig": "fr_fcfs.json", "memspec": "JEDEC_4Gb_DDR4-1866_8bit_A.json", - "simconfig": "ddr4.json", + "simconfig": "example.json", "simulationid": "ddr4-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 200, - "name": "ddr3_example.stl" + "name": "example.stl" } ] } diff --git a/DRAMSys/library/resources/simulations/ddr5-example.json b/configs/ddr5-example.json similarity index 73% rename from DRAMSys/library/resources/simulations/ddr5-example.json rename to configs/ddr5-example.json index e85d1b92..d66dae74 100644 --- a/DRAMSys/library/resources/simulations/ddr5-example.json +++ b/configs/ddr5-example.json @@ -3,13 +3,12 @@ "addressmapping": "am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json", "mcconfig": "fr_fcfs.json", "memspec": "JEDEC_2x8x2Gbx4_DDR5-3200A.json", - "simconfig": "ddr5.json", + "simconfig": "example.json", "simulationid": "ddr5-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 2000, - "name": "ddr3_example.stl" + "name": "example.stl" } ] } diff --git a/DRAMSys/library/resources/simulations/ddr5-generator-example.json b/configs/ddr5-generator-example.json similarity index 93% rename from DRAMSys/library/resources/simulations/ddr5-generator-example.json rename to configs/ddr5-generator-example.json index 1835e48b..d3a74944 100644 --- a/DRAMSys/library/resources/simulations/ddr5-generator-example.json +++ b/configs/ddr5-generator-example.json @@ -3,9 +3,8 @@ "addressmapping": "am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json", "mcconfig": "fr_fcfs.json", "memspec": "JEDEC_2x8x2Gbx4_DDR5-3200A.json", - "simconfig": "ddr5.json", + "simconfig": "example.json", "simulationid": "ddr5-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 2000, diff --git a/DRAMSys/library/resources/simulations/ddr5-rfm.json b/configs/ddr5-rfm.json similarity index 91% rename from DRAMSys/library/resources/simulations/ddr5-rfm.json rename to configs/ddr5-rfm.json index eee91152..c8bb8160 100644 --- a/DRAMSys/library/resources/simulations/ddr5-rfm.json +++ b/configs/ddr5-rfm.json @@ -3,9 +3,8 @@ "addressmapping": "am_ddr5_2x2x8x4Gbx4_dimm_p1KB_rbc.json", "mcconfig": "fr_fcfs_rfm.json", "memspec": "JEDEC_2x2x8x4Gbx4_DDR5-3200A.json", - "simconfig": "ddr5.json", + "simconfig": "example.json", "simulationid": "ddr5-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 2000, diff --git a/DRAMSys/gem5/gem5_etrace/config.ini b/configs/gem5/gem5_etrace/config.ini similarity index 100% rename from DRAMSys/gem5/gem5_etrace/config.ini rename to configs/gem5/gem5_etrace/config.ini diff --git a/configs/gem5/gem5_etrace/system.cpu.traceListener.data.gz b/configs/gem5/gem5_etrace/system.cpu.traceListener.data.gz new file mode 100644 index 00000000..d0c9160e --- /dev/null +++ b/configs/gem5/gem5_etrace/system.cpu.traceListener.data.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea692bb0f6a9e7b7c9ce17d031ef24e8aa28c41e9b365eca703af546f4d94192 +size 6417136 diff --git a/configs/gem5/gem5_etrace/system.cpu.traceListener.inst.gz b/configs/gem5/gem5_etrace/system.cpu.traceListener.inst.gz new file mode 100644 index 00000000..9651753b --- /dev/null +++ b/configs/gem5/gem5_etrace/system.cpu.traceListener.inst.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:095bc05bd624fecc75629e0b155fbf4632bf697c470440d8b003e7e0f0aa788c +size 704043 diff --git a/DRAMSys/gem5/gem5_se/hello-ARM/config.ini b/configs/gem5/gem5_se/hello-ARM/config.ini similarity index 100% rename from DRAMSys/gem5/gem5_se/hello-ARM/config.ini rename to configs/gem5/gem5_se/hello-ARM/config.ini diff --git a/DRAMSys/gem5/gem5_se/hello-ARM/hello b/configs/gem5/gem5_se/hello-ARM/hello similarity index 100% rename from DRAMSys/gem5/gem5_se/hello-ARM/hello rename to configs/gem5/gem5_se/hello-ARM/hello diff --git a/DRAMSys/gem5/gem5_se/hello-X86/config.ini b/configs/gem5/gem5_se/hello-X86/config.ini similarity index 100% rename from DRAMSys/gem5/gem5_se/hello-X86/config.ini rename to configs/gem5/gem5_se/hello-X86/config.ini diff --git a/DRAMSys/gem5/gem5_se/hello-X86/hello b/configs/gem5/gem5_se/hello-X86/hello old mode 100755 new mode 100644 similarity index 100% rename from DRAMSys/gem5/gem5_se/hello-X86/hello rename to configs/gem5/gem5_se/hello-X86/hello diff --git a/DRAMSys/library/resources/simulations/hbm2-example.json b/configs/hbm2-example.json similarity index 70% rename from DRAMSys/library/resources/simulations/hbm2-example.json rename to configs/hbm2-example.json index 22eed0df..7b48bc60 100644 --- a/DRAMSys/library/resources/simulations/hbm2-example.json +++ b/configs/hbm2-example.json @@ -3,13 +3,12 @@ "addressmapping": "am_hbm2_8Gb_pc_brc.json", "mcconfig": "fr_fcfs.json", "memspec": "HBM2.json", - "simconfig": "hbm2.json", + "simconfig": "example.json", "simulationid": "hbm2-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 1000, - "name": "ddr3_example.stl" + "name": "example.stl" } ] } diff --git a/DRAMSys/library/resources/simulations/hbm3-example.json b/configs/hbm3-example.json similarity index 70% rename from DRAMSys/library/resources/simulations/hbm3-example.json rename to configs/hbm3-example.json index 6f64aa04..4d3505b8 100644 --- a/DRAMSys/library/resources/simulations/hbm3-example.json +++ b/configs/hbm3-example.json @@ -3,13 +3,12 @@ "addressmapping": "am_hbm3_8Gb_pc_brc.json", "mcconfig": "fr_fcfs.json", "memspec": "HBM3.json", - "simconfig": "hbm3.json", + "simconfig": "example.json", "simulationid": "hbm3-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 1000, - "name": "ddr3_example.stl" + "name": "example.stl" } ] } diff --git a/DRAMSys/library/resources/simulations/lpddr4-example.json b/configs/lpddr4-example.json similarity index 72% rename from DRAMSys/library/resources/simulations/lpddr4-example.json rename to configs/lpddr4-example.json index 0054b777..39ba60fd 100644 --- a/DRAMSys/library/resources/simulations/lpddr4-example.json +++ b/configs/lpddr4-example.json @@ -3,13 +3,12 @@ "addressmapping": "am_lpddr4_8Gbx16_brc.json", "mcconfig": "fr_fcfs.json", "memspec": "JEDEC_8Gb_LPDDR4-3200_16bit.json", - "simconfig": "lpddr4.json", + "simconfig": "example.json", "simulationid": "lpddr4-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 200, - "name": "ddr3_example.stl" + "name": "example.stl" } ] } diff --git a/DRAMSys/library/resources/simulations/lpddr5-example.json b/configs/lpddr5-example.json similarity index 81% rename from DRAMSys/library/resources/simulations/lpddr5-example.json rename to configs/lpddr5-example.json index 0c250ae0..26179bec 100644 --- a/DRAMSys/library/resources/simulations/lpddr5-example.json +++ b/configs/lpddr5-example.json @@ -5,11 +5,10 @@ "memspec": "JEDEC_1Gbx16_BG_LPDDR5-6400.json", "simconfig": "example.json", "simulationid": "lpddr5-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 200, - "name": "ddr3_example.stl" + "name": "example.stl" } ] } diff --git a/DRAMSys/library/resources/configs/mcconfigs/fifo.json b/configs/mcconfig/fifo.json similarity index 100% rename from DRAMSys/library/resources/configs/mcconfigs/fifo.json rename to configs/mcconfig/fifo.json diff --git a/DRAMSys/library/resources/configs/mcconfigs/fifoStrict.json b/configs/mcconfig/fifoStrict.json similarity index 100% rename from DRAMSys/library/resources/configs/mcconfigs/fifoStrict.json rename to configs/mcconfig/fifoStrict.json diff --git a/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs.json b/configs/mcconfig/fr_fcfs.json similarity index 100% rename from DRAMSys/library/resources/configs/mcconfigs/fr_fcfs.json rename to configs/mcconfig/fr_fcfs.json diff --git a/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_grp.json b/configs/mcconfig/fr_fcfs_grp.json similarity index 100% rename from DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_grp.json rename to configs/mcconfig/fr_fcfs_grp.json diff --git a/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_noref.json b/configs/mcconfig/fr_fcfs_noref.json similarity index 100% rename from DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_noref.json rename to configs/mcconfig/fr_fcfs_noref.json diff --git a/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_refp2b.json b/configs/mcconfig/fr_fcfs_refp2b.json similarity index 100% rename from DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_refp2b.json rename to configs/mcconfig/fr_fcfs_refp2b.json diff --git a/DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_rfm.json b/configs/mcconfig/fr_fcfs_rfm.json similarity index 100% rename from DRAMSys/library/resources/configs/mcconfigs/fr_fcfs_rfm.json rename to configs/mcconfig/fr_fcfs_rfm.json diff --git a/DRAMSys/library/resources/configs/memspecs/HBM2.json b/configs/memspec/HBM2.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/HBM2.json rename to configs/memspec/HBM2.json diff --git a/DRAMSys/library/resources/configs/memspecs/HBM3.json b/configs/memspec/HBM3.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/HBM3.json rename to configs/memspec/HBM3.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-0533.json b/configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-0533.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-0533.json rename to configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-0533.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-1067.json b/configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-1067.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-1067.json rename to configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-1067.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-1600.json b/configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-1600.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-1600.json rename to configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-1600.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-2133.json b/configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-2133.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-2133.json rename to configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-2133.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-2750.json b/configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-2750.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-2750.json rename to configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-2750.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-3200.json b/configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-3200.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_16B_LPDDR5-3200.json rename to configs/memspec/JEDEC_1Gbx16_16B_LPDDR5-3200.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-0533.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-0533.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-0533.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-0533.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-1067.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-1067.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-1067.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-1067.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-1600.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-1600.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-1600.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-1600.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-2133.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-2133.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-2133.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-2133.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-2750.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-2750.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-2750.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-2750.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-3200.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-3200.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-3200.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-3200.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-3733.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-3733.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-3733.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-3733.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-4267.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-4267.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-4267.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-4267.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-4800.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-4800.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-4800.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-4800.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-5500.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-5500.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-5500.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-5500.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-6000.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-6000.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-6000.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-6000.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-6400.json b/configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-6400.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_8B_LPDDR5-6400.json rename to configs/memspec/JEDEC_1Gbx16_8B_LPDDR5-6400.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-3733.json b/configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-3733.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-3733.json rename to configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-3733.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-4267.json b/configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-4267.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-4267.json rename to configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-4267.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-4800.json b/configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-4800.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-4800.json rename to configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-4800.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-5500.json b/configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-5500.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-5500.json rename to configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-5500.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-6000.json b/configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-6000.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-6000.json rename to configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-6000.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-6400.json b/configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-6400.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_BG_LPDDR5-6400.json rename to configs/memspec/JEDEC_1Gbx16_BG_LPDDR5-6400.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-0533.json b/configs/memspec/JEDEC_1Gbx16_LPDDR4-0533.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-0533.json rename to configs/memspec/JEDEC_1Gbx16_LPDDR4-0533.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-1066.json b/configs/memspec/JEDEC_1Gbx16_LPDDR4-1066.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-1066.json rename to configs/memspec/JEDEC_1Gbx16_LPDDR4-1066.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-1600.json b/configs/memspec/JEDEC_1Gbx16_LPDDR4-1600.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-1600.json rename to configs/memspec/JEDEC_1Gbx16_LPDDR4-1600.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-2133.json b/configs/memspec/JEDEC_1Gbx16_LPDDR4-2133.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-2133.json rename to configs/memspec/JEDEC_1Gbx16_LPDDR4-2133.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-2666.json b/configs/memspec/JEDEC_1Gbx16_LPDDR4-2666.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-2666.json rename to configs/memspec/JEDEC_1Gbx16_LPDDR4-2666.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-3200.json b/configs/memspec/JEDEC_1Gbx16_LPDDR4-3200.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-3200.json rename to configs/memspec/JEDEC_1Gbx16_LPDDR4-3200.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-3733.json b/configs/memspec/JEDEC_1Gbx16_LPDDR4-3733.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-3733.json rename to configs/memspec/JEDEC_1Gbx16_LPDDR4-3733.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-4266.json b/configs/memspec/JEDEC_1Gbx16_LPDDR4-4266.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_1Gbx16_LPDDR4-4266.json rename to configs/memspec/JEDEC_1Gbx16_LPDDR4-4266.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_256Mb_WIDEIO-200_128bit.json b/configs/memspec/JEDEC_256Mb_WIDEIO-200_128bit.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_256Mb_WIDEIO-200_128bit.json rename to configs/memspec/JEDEC_256Mb_WIDEIO-200_128bit.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_256Mb_WIDEIO-266_128bit.json b/configs/memspec/JEDEC_256Mb_WIDEIO-266_128bit.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_256Mb_WIDEIO-266_128bit.json rename to configs/memspec/JEDEC_256Mb_WIDEIO-266_128bit.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x2x8x4Gbx4_DDR5-3200A.json b/configs/memspec/JEDEC_2x2x8x4Gbx4_DDR5-3200A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x2x8x4Gbx4_DDR5-3200A.json rename to configs/memspec/JEDEC_2x2x8x4Gbx4_DDR5-3200A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-3200A.json b/configs/memspec/JEDEC_2x4x1Gbx8_DDR5-3200A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-3200A.json rename to configs/memspec/JEDEC_2x4x1Gbx8_DDR5-3200A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-3600A.json b/configs/memspec/JEDEC_2x4x1Gbx8_DDR5-3600A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-3600A.json rename to configs/memspec/JEDEC_2x4x1Gbx8_DDR5-3600A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-4000A.json b/configs/memspec/JEDEC_2x4x1Gbx8_DDR5-4000A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-4000A.json rename to configs/memspec/JEDEC_2x4x1Gbx8_DDR5-4000A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-4400A.json b/configs/memspec/JEDEC_2x4x1Gbx8_DDR5-4400A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-4400A.json rename to configs/memspec/JEDEC_2x4x1Gbx8_DDR5-4400A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-4800A.json b/configs/memspec/JEDEC_2x4x1Gbx8_DDR5-4800A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-4800A.json rename to configs/memspec/JEDEC_2x4x1Gbx8_DDR5-4800A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-5200A.json b/configs/memspec/JEDEC_2x4x1Gbx8_DDR5-5200A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-5200A.json rename to configs/memspec/JEDEC_2x4x1Gbx8_DDR5-5200A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-5600A.json b/configs/memspec/JEDEC_2x4x1Gbx8_DDR5-5600A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-5600A.json rename to configs/memspec/JEDEC_2x4x1Gbx8_DDR5-5600A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-6000A.json b/configs/memspec/JEDEC_2x4x1Gbx8_DDR5-6000A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-6000A.json rename to configs/memspec/JEDEC_2x4x1Gbx8_DDR5-6000A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-6400A.json b/configs/memspec/JEDEC_2x4x1Gbx8_DDR5-6400A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x4x1Gbx8_DDR5-6400A.json rename to configs/memspec/JEDEC_2x4x1Gbx8_DDR5-6400A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-3200A.json b/configs/memspec/JEDEC_2x8x2Gbx4_DDR5-3200A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-3200A.json rename to configs/memspec/JEDEC_2x8x2Gbx4_DDR5-3200A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-3600A.json b/configs/memspec/JEDEC_2x8x2Gbx4_DDR5-3600A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-3600A.json rename to configs/memspec/JEDEC_2x8x2Gbx4_DDR5-3600A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-4000A.json b/configs/memspec/JEDEC_2x8x2Gbx4_DDR5-4000A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-4000A.json rename to configs/memspec/JEDEC_2x8x2Gbx4_DDR5-4000A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-4400A.json b/configs/memspec/JEDEC_2x8x2Gbx4_DDR5-4400A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-4400A.json rename to configs/memspec/JEDEC_2x8x2Gbx4_DDR5-4400A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-4800A.json b/configs/memspec/JEDEC_2x8x2Gbx4_DDR5-4800A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-4800A.json rename to configs/memspec/JEDEC_2x8x2Gbx4_DDR5-4800A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-5200A.json b/configs/memspec/JEDEC_2x8x2Gbx4_DDR5-5200A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-5200A.json rename to configs/memspec/JEDEC_2x8x2Gbx4_DDR5-5200A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-5600A.json b/configs/memspec/JEDEC_2x8x2Gbx4_DDR5-5600A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-5600A.json rename to configs/memspec/JEDEC_2x8x2Gbx4_DDR5-5600A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-6000A.json b/configs/memspec/JEDEC_2x8x2Gbx4_DDR5-6000A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-6000A.json rename to configs/memspec/JEDEC_2x8x2Gbx4_DDR5-6000A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-6400A.json b/configs/memspec/JEDEC_2x8x2Gbx4_DDR5-6400A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x2Gbx4_DDR5-6400A.json rename to configs/memspec/JEDEC_2x8x2Gbx4_DDR5-6400A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x8x2Gbx4_DDR5-3200A.json b/configs/memspec/JEDEC_2x8x8x2Gbx4_DDR5-3200A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_2x8x8x2Gbx4_DDR5-3200A.json rename to configs/memspec/JEDEC_2x8x8x2Gbx4_DDR5-3200A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_4Gb_DDR4-1866_8bit_A.json b/configs/memspec/JEDEC_4Gb_DDR4-1866_8bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_4Gb_DDR4-1866_8bit_A.json rename to configs/memspec/JEDEC_4Gb_DDR4-1866_8bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_4Gb_DDR4-2400_8bit_A.json b/configs/memspec/JEDEC_4Gb_DDR4-2400_8bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_4Gb_DDR4-2400_8bit_A.json rename to configs/memspec/JEDEC_4Gb_DDR4-2400_8bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_4x64_2Gb_WIDEIO2-400_64bit.json b/configs/memspec/JEDEC_4x64_2Gb_WIDEIO2-400_64bit.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_4x64_2Gb_WIDEIO2-400_64bit.json rename to configs/memspec/JEDEC_4x64_2Gb_WIDEIO2-400_64bit.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_4x64_2Gb_WIDEIO2-533_64bit.json b/configs/memspec/JEDEC_4x64_2Gb_WIDEIO2-533_64bit.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_4x64_2Gb_WIDEIO2-533_64bit.json rename to configs/memspec/JEDEC_4x64_2Gb_WIDEIO2-533_64bit.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-0533.json b/configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-0533.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-0533.json rename to configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-0533.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-1067.json b/configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-1067.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-1067.json rename to configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-1067.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-1600.json b/configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-1600.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-1600.json rename to configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-1600.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-2133.json b/configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-2133.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-2133.json rename to configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-2133.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-2750.json b/configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-2750.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-2750.json rename to configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-2750.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-3200.json b/configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-3200.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_16B_LPDDR5-3200.json rename to configs/memspec/JEDEC_512Mbx16_16B_LPDDR5-3200.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-0533.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-0533.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-0533.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-0533.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-1067.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-1067.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-1067.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-1067.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-1600.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-1600.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-1600.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-1600.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-2133.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-2133.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-2133.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-2133.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-2750.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-2750.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-2750.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-2750.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-3200.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-3200.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-3200.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-3200.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-3733.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-3733.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-3733.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-3733.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-4267.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-4267.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-4267.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-4267.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-4800.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-4800.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-4800.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-4800.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-5500.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-5500.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-5500.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-5500.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-6000.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-6000.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-6000.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-6000.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-6400.json b/configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-6400.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_8B_LPDDR5-6400.json rename to configs/memspec/JEDEC_512Mbx16_8B_LPDDR5-6400.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-3733.json b/configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-3733.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-3733.json rename to configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-3733.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-4267.json b/configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-4267.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-4267.json rename to configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-4267.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-4800.json b/configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-4800.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-4800.json rename to configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-4800.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-5500.json b/configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-5500.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-5500.json rename to configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-5500.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-6000.json b/configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-6000.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-6000.json rename to configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-6000.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-6400.json b/configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-6400.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_BG_LPDDR5-6400.json rename to configs/memspec/JEDEC_512Mbx16_BG_LPDDR5-6400.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-0533.json b/configs/memspec/JEDEC_512Mbx16_LPDDR4-0533.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-0533.json rename to configs/memspec/JEDEC_512Mbx16_LPDDR4-0533.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-1066.json b/configs/memspec/JEDEC_512Mbx16_LPDDR4-1066.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-1066.json rename to configs/memspec/JEDEC_512Mbx16_LPDDR4-1066.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-1600.json b/configs/memspec/JEDEC_512Mbx16_LPDDR4-1600.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-1600.json rename to configs/memspec/JEDEC_512Mbx16_LPDDR4-1600.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-2133.json b/configs/memspec/JEDEC_512Mbx16_LPDDR4-2133.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-2133.json rename to configs/memspec/JEDEC_512Mbx16_LPDDR4-2133.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-2666.json b/configs/memspec/JEDEC_512Mbx16_LPDDR4-2666.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-2666.json rename to configs/memspec/JEDEC_512Mbx16_LPDDR4-2666.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-3200.json b/configs/memspec/JEDEC_512Mbx16_LPDDR4-3200.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-3200.json rename to configs/memspec/JEDEC_512Mbx16_LPDDR4-3200.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-3733.json b/configs/memspec/JEDEC_512Mbx16_LPDDR4-3733.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-3733.json rename to configs/memspec/JEDEC_512Mbx16_LPDDR4-3733.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-4266.json b/configs/memspec/JEDEC_512Mbx16_LPDDR4-4266.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_512Mbx16_LPDDR4-4266.json rename to configs/memspec/JEDEC_512Mbx16_LPDDR4-4266.json diff --git a/DRAMSys/library/resources/configs/memspecs/JEDEC_8Gb_LPDDR4-3200_16bit.json b/configs/memspec/JEDEC_8Gb_LPDDR4-3200_16bit.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/JEDEC_8Gb_LPDDR4-3200_16bit.json rename to configs/memspec/JEDEC_8Gb_LPDDR4-3200_16bit.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR2-1066_16bit_H.json b/configs/memspec/MICRON_1Gb_DDR2-1066_16bit_H.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR2-1066_16bit_H.json rename to configs/memspec/MICRON_1Gb_DDR2-1066_16bit_H.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR2-800_16bit_H.json b/configs/memspec/MICRON_1Gb_DDR2-800_16bit_H.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR2-800_16bit_H.json rename to configs/memspec/MICRON_1Gb_DDR2-800_16bit_H.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_16bit_G.json b/configs/memspec/MICRON_1Gb_DDR3-1066_16bit_G.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_16bit_G.json rename to configs/memspec/MICRON_1Gb_DDR3-1066_16bit_G.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_16bit_G_2s.json b/configs/memspec/MICRON_1Gb_DDR3-1066_16bit_G_2s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_16bit_G_2s.json rename to configs/memspec/MICRON_1Gb_DDR3-1066_16bit_G_2s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_16bit_G_3s.json b/configs/memspec/MICRON_1Gb_DDR3-1066_16bit_G_3s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_16bit_G_3s.json rename to configs/memspec/MICRON_1Gb_DDR3-1066_16bit_G_3s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_16bit_G_mu.json b/configs/memspec/MICRON_1Gb_DDR3-1066_16bit_G_mu.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_16bit_G_mu.json rename to configs/memspec/MICRON_1Gb_DDR3-1066_16bit_G_mu.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_8bit_G.json b/configs/memspec/MICRON_1Gb_DDR3-1066_8bit_G.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_8bit_G.json rename to configs/memspec/MICRON_1Gb_DDR3-1066_8bit_G.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_8bit_G_2s.json b/configs/memspec/MICRON_1Gb_DDR3-1066_8bit_G_2s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_8bit_G_2s.json rename to configs/memspec/MICRON_1Gb_DDR3-1066_8bit_G_2s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_8bit_G_3s.json b/configs/memspec/MICRON_1Gb_DDR3-1066_8bit_G_3s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_8bit_G_3s.json rename to configs/memspec/MICRON_1Gb_DDR3-1066_8bit_G_3s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_8bit_G_mu.json b/configs/memspec/MICRON_1Gb_DDR3-1066_8bit_G_mu.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1066_8bit_G_mu.json rename to configs/memspec/MICRON_1Gb_DDR3-1066_8bit_G_mu.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G.json b/configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G.json rename to configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G_2s.json b/configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G_2s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G_2s.json rename to configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G_2s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G_3s.json b/configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G_3s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G_3s.json rename to configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G_3s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G_less_refresh.json b/configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G_less_refresh.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G_less_refresh.json rename to configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G_less_refresh.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G_mu.json b/configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G_mu.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-1600_8bit_G_mu.json rename to configs/memspec/MICRON_1Gb_DDR3-1600_8bit_G_mu.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-800_8bit_G.json b/configs/memspec/MICRON_1Gb_DDR3-800_8bit_G.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_1Gb_DDR3-800_8bit_G.json rename to configs/memspec/MICRON_1Gb_DDR3-800_8bit_G.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2GB_DDR3-1066_64bit_D_SODIMM.json b/configs/memspec/MICRON_2GB_DDR3-1066_64bit_D_SODIMM.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2GB_DDR3-1066_64bit_D_SODIMM.json rename to configs/memspec/MICRON_2GB_DDR3-1066_64bit_D_SODIMM.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2GB_DDR3-1066_64bit_G_UDIMM.json b/configs/memspec/MICRON_2GB_DDR3-1066_64bit_G_UDIMM.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2GB_DDR3-1066_64bit_G_UDIMM.json rename to configs/memspec/MICRON_2GB_DDR3-1066_64bit_G_UDIMM.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2GB_DDR3-1333_64bit_D_SODIMM.json b/configs/memspec/MICRON_2GB_DDR3-1333_64bit_D_SODIMM.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2GB_DDR3-1333_64bit_D_SODIMM.json rename to configs/memspec/MICRON_2GB_DDR3-1333_64bit_D_SODIMM.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2GB_DDR3-1600_64bit_G_UDIMM.json b/configs/memspec/MICRON_2GB_DDR3-1600_64bit_G_UDIMM.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2GB_DDR3-1600_64bit_G_UDIMM.json rename to configs/memspec/MICRON_2GB_DDR3-1600_64bit_G_UDIMM.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1066_8bit_D.json b/configs/memspec/MICRON_2Gb_DDR3-1066_8bit_D.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1066_8bit_D.json rename to configs/memspec/MICRON_2Gb_DDR3-1066_8bit_D.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1066_8bit_D_2s.json b/configs/memspec/MICRON_2Gb_DDR3-1066_8bit_D_2s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1066_8bit_D_2s.json rename to configs/memspec/MICRON_2Gb_DDR3-1066_8bit_D_2s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1066_8bit_D_3s.json b/configs/memspec/MICRON_2Gb_DDR3-1066_8bit_D_3s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1066_8bit_D_3s.json rename to configs/memspec/MICRON_2Gb_DDR3-1066_8bit_D_3s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1066_8bit_D_mu.json b/configs/memspec/MICRON_2Gb_DDR3-1066_8bit_D_mu.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1066_8bit_D_mu.json rename to configs/memspec/MICRON_2Gb_DDR3-1066_8bit_D_mu.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1600_16bit_D.json b/configs/memspec/MICRON_2Gb_DDR3-1600_16bit_D.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1600_16bit_D.json rename to configs/memspec/MICRON_2Gb_DDR3-1600_16bit_D.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1600_16bit_D_2s.json b/configs/memspec/MICRON_2Gb_DDR3-1600_16bit_D_2s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1600_16bit_D_2s.json rename to configs/memspec/MICRON_2Gb_DDR3-1600_16bit_D_2s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1600_16bit_D_3s.json b/configs/memspec/MICRON_2Gb_DDR3-1600_16bit_D_3s.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1600_16bit_D_3s.json rename to configs/memspec/MICRON_2Gb_DDR3-1600_16bit_D_3s.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1600_16bit_D_mu.json b/configs/memspec/MICRON_2Gb_DDR3-1600_16bit_D_mu.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_DDR3-1600_16bit_D_mu.json rename to configs/memspec/MICRON_2Gb_DDR3-1600_16bit_D_mu.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_LPDDR-266_16bit_A.json b/configs/memspec/MICRON_2Gb_LPDDR-266_16bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_LPDDR-266_16bit_A.json rename to configs/memspec/MICRON_2Gb_LPDDR-266_16bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_LPDDR-333_16bit_A.json b/configs/memspec/MICRON_2Gb_LPDDR-333_16bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_LPDDR-333_16bit_A.json rename to configs/memspec/MICRON_2Gb_LPDDR-333_16bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_LPDDR2-1066-S4_16bit_A.json b/configs/memspec/MICRON_2Gb_LPDDR2-1066-S4_16bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_LPDDR2-1066-S4_16bit_A.json rename to configs/memspec/MICRON_2Gb_LPDDR2-1066-S4_16bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_LPDDR2-800-S4_16bit_A.json b/configs/memspec/MICRON_2Gb_LPDDR2-800-S4_16bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_2Gb_LPDDR2-800-S4_16bit_A.json rename to configs/memspec/MICRON_2Gb_LPDDR2-800-S4_16bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_4Gb_DDR4-1866_8bit_A.json b/configs/memspec/MICRON_4Gb_DDR4-1866_8bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_4Gb_DDR4-1866_8bit_A.json rename to configs/memspec/MICRON_4Gb_DDR4-1866_8bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_4Gb_DDR4-2400_8bit_A.json b/configs/memspec/MICRON_4Gb_DDR4-2400_8bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_4Gb_DDR4-2400_8bit_A.json rename to configs/memspec/MICRON_4Gb_DDR4-2400_8bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_4Gb_LPDDR3-1333_32bit_A.json b/configs/memspec/MICRON_4Gb_LPDDR3-1333_32bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_4Gb_LPDDR3-1333_32bit_A.json rename to configs/memspec/MICRON_4Gb_LPDDR3-1333_32bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_4Gb_LPDDR3-1600_32bit_A.json b/configs/memspec/MICRON_4Gb_LPDDR3-1600_32bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_4Gb_LPDDR3-1600_32bit_A.json rename to configs/memspec/MICRON_4Gb_LPDDR3-1600_32bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/MICRON_6Gb_LPDDR4-3200_32bit_A.json b/configs/memspec/MICRON_6Gb_LPDDR4-3200_32bit_A.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/MICRON_6Gb_LPDDR4-3200_32bit_A.json rename to configs/memspec/MICRON_6Gb_LPDDR4-3200_32bit_A.json diff --git a/DRAMSys/library/resources/configs/memspecs/README.md b/configs/memspec/README.md similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/README.md rename to configs/memspec/README.md diff --git a/DRAMSys/library/resources/configs/memspecs/SAMSUNG_K4B1G1646E_1Gb_DDR3-1600_16bit.json b/configs/memspec/SAMSUNG_K4B1G1646E_1Gb_DDR3-1600_16bit.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/SAMSUNG_K4B1G1646E_1Gb_DDR3-1600_16bit.json rename to configs/memspec/SAMSUNG_K4B1G1646E_1Gb_DDR3-1600_16bit.json diff --git a/DRAMSys/library/resources/configs/memspecs/SAMSUNG_K4B4G1646Q_4Gb_DDR3-1066_16bit.json b/configs/memspec/SAMSUNG_K4B4G1646Q_4Gb_DDR3-1066_16bit.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/SAMSUNG_K4B4G1646Q_4Gb_DDR3-1066_16bit.json rename to configs/memspec/SAMSUNG_K4B4G1646Q_4Gb_DDR3-1066_16bit.json diff --git a/DRAMSys/library/resources/configs/memspecs/STT-MRAM-1.2x.json b/configs/memspec/STT-MRAM-1.2x.json similarity index 96% rename from DRAMSys/library/resources/configs/memspecs/STT-MRAM-1.2x.json rename to configs/memspec/STT-MRAM-1.2x.json index 0d13d8be..e4d537a6 100644 --- a/DRAMSys/library/resources/configs/memspecs/STT-MRAM-1.2x.json +++ b/configs/memspec/STT-MRAM-1.2x.json @@ -1,44 +1,44 @@ -{ - "memspec": { - "memarchitecturespec": { - "burstLength": 8, - "dataRate": 2, - "nbrOfBanks": 8, - "nbrOfColumns": 1024, - "nbrOfRanks": 1, - "nbrOfRows": 32768, - "width": 8, - "nbrOfDevices": 8, - "nbrOfChannels": 1 - }, - "memoryId": "STT-MRAM-1.2x", - "memoryType": "STT-MRAM", - "memtimingspec": { - "AL": 0, - "CCD": 4, - "CKE": 4, - "CKESR": 7, - "CL": 11, - "DQSCK": 0, - "FAW": 29, - "RAS": 20, - "RC": 34, - "RCD": 14, - "RL": 11, - "RP": 14, - "RRD": 6, - "RTP": 6, - "WL": 11, - "WR": 12, - "WTR": 2, - "XP": 5, - "XPDLL": 325, - "XS": 324, - "XSDLL": 512, - "ACTPDEN": 2, - "PRPDEN": 2, - "RTRS": 1, - "clkMhz": 800 - } - } +{ + "memspec": { + "memarchitecturespec": { + "burstLength": 8, + "dataRate": 2, + "nbrOfBanks": 8, + "nbrOfColumns": 1024, + "nbrOfRanks": 1, + "nbrOfRows": 32768, + "width": 8, + "nbrOfDevices": 8, + "nbrOfChannels": 1 + }, + "memoryId": "STT-MRAM-1.2x", + "memoryType": "STT-MRAM", + "memtimingspec": { + "AL": 0, + "CCD": 4, + "CKE": 4, + "CKESR": 7, + "CL": 11, + "DQSCK": 0, + "FAW": 29, + "RAS": 20, + "RC": 34, + "RCD": 14, + "RL": 11, + "RP": 14, + "RRD": 6, + "RTP": 6, + "WL": 11, + "WR": 12, + "WTR": 2, + "XP": 5, + "XPDLL": 325, + "XS": 324, + "XSDLL": 512, + "ACTPDEN": 2, + "PRPDEN": 2, + "RTRS": 1, + "clkMhz": 800 + } + } } \ No newline at end of file diff --git a/DRAMSys/library/resources/configs/memspecs/STT-MRAM-1.5x.json b/configs/memspec/STT-MRAM-1.5x.json similarity index 96% rename from DRAMSys/library/resources/configs/memspecs/STT-MRAM-1.5x.json rename to configs/memspec/STT-MRAM-1.5x.json index 09a29967..71cefb79 100644 --- a/DRAMSys/library/resources/configs/memspecs/STT-MRAM-1.5x.json +++ b/configs/memspec/STT-MRAM-1.5x.json @@ -1,44 +1,44 @@ -{ - "memspec": { - "memarchitecturespec": { - "burstLength": 8, - "dataRate": 2, - "nbrOfBanks": 8, - "nbrOfColumns": 1024, - "nbrOfRanks": 1, - "nbrOfRows": 32768, - "width": 8, - "nbrOfDevices": 8, - "nbrOfChannels": 1 - }, - "memoryId": "STT-MRAM-1.5x", - "memoryType": "STT-MRAM", - "memtimingspec": { - "AL": 0, - "CCD": 4, - "CKE": 4, - "CKESR": 7, - "CL": 11, - "DQSCK": 0, - "FAW": 36, - "RAS": 23, - "RC": 40, - "RCD": 14, - "RL": 11, - "RP": 17, - "RRD": 8, - "RTP": 6, - "WL": 11, - "WR": 12, - "WTR": 6, - "XP": 5, - "XPDLL": 325, - "XS": 324, - "XSDLL": 512, - "ACTPDEN": 2, - "PRPDEN": 2, - "RTRS": 1, - "clkMhz": 800 - } - } +{ + "memspec": { + "memarchitecturespec": { + "burstLength": 8, + "dataRate": 2, + "nbrOfBanks": 8, + "nbrOfColumns": 1024, + "nbrOfRanks": 1, + "nbrOfRows": 32768, + "width": 8, + "nbrOfDevices": 8, + "nbrOfChannels": 1 + }, + "memoryId": "STT-MRAM-1.5x", + "memoryType": "STT-MRAM", + "memtimingspec": { + "AL": 0, + "CCD": 4, + "CKE": 4, + "CKESR": 7, + "CL": 11, + "DQSCK": 0, + "FAW": 36, + "RAS": 23, + "RC": 40, + "RCD": 14, + "RL": 11, + "RP": 17, + "RRD": 8, + "RTP": 6, + "WL": 11, + "WR": 12, + "WTR": 6, + "XP": 5, + "XPDLL": 325, + "XS": 324, + "XSDLL": 512, + "ACTPDEN": 2, + "PRPDEN": 2, + "RTRS": 1, + "clkMhz": 800 + } + } } \ No newline at end of file diff --git a/DRAMSys/library/resources/configs/memspecs/STT-MRAM-2.0x.json b/configs/memspec/STT-MRAM-2.0x.json similarity index 96% rename from DRAMSys/library/resources/configs/memspecs/STT-MRAM-2.0x.json rename to configs/memspec/STT-MRAM-2.0x.json index dd1fb2cc..56691163 100644 --- a/DRAMSys/library/resources/configs/memspecs/STT-MRAM-2.0x.json +++ b/configs/memspec/STT-MRAM-2.0x.json @@ -1,44 +1,44 @@ -{ - "memspec": { - "memarchitecturespec": { - "burstLength": 8, - "dataRate": 2, - "nbrOfBanks": 8, - "nbrOfColumns": 1024, - "nbrOfRanks": 1, - "nbrOfRows": 32768, - "width": 8, - "nbrOfDevices": 8, - "nbrOfChannels": 1 - }, - "memoryId": "STT-MRAM-2.0x", - "memoryType": "STT-MRAM", - "memtimingspec": { - "AL": 0, - "CCD": 4, - "CKE": 4, - "CKESR": 7, - "CL": 11, - "DQSCK": 0, - "FAW": 36, - "RAS": 28, - "RC": 50, - "RCD": 14, - "RL": 11, - "RP": 22, - "RRD": 10, - "RTP": 6, - "WL": 11, - "WR": 48, - "WTR": 6, - "XP": 5, - "XPDLL": 325, - "XS": 324, - "XSDLL": 512, - "ACTPDEN": 2, - "PRPDEN": 2, - "RTRS": 1, - "clkMhz": 800 - } - } +{ + "memspec": { + "memarchitecturespec": { + "burstLength": 8, + "dataRate": 2, + "nbrOfBanks": 8, + "nbrOfColumns": 1024, + "nbrOfRanks": 1, + "nbrOfRows": 32768, + "width": 8, + "nbrOfDevices": 8, + "nbrOfChannels": 1 + }, + "memoryId": "STT-MRAM-2.0x", + "memoryType": "STT-MRAM", + "memtimingspec": { + "AL": 0, + "CCD": 4, + "CKE": 4, + "CKESR": 7, + "CL": 11, + "DQSCK": 0, + "FAW": 36, + "RAS": 28, + "RC": 50, + "RCD": 14, + "RL": 11, + "RP": 22, + "RRD": 10, + "RTP": 6, + "WL": 11, + "WR": 48, + "WTR": 6, + "XP": 5, + "XPDLL": 325, + "XS": 324, + "XSDLL": 512, + "ACTPDEN": 2, + "PRPDEN": 2, + "RTRS": 1, + "clkMhz": 800 + } + } } \ No newline at end of file diff --git a/DRAMSys/library/resources/configs/memspecs/memspec_ranktest.json b/configs/memspec/memspec_ranktest.json similarity index 100% rename from DRAMSys/library/resources/configs/memspecs/memspec_ranktest.json rename to configs/memspec/memspec_ranktest.json diff --git a/DRAMSys/library/resources/simulations/ranktest.json b/configs/ranktest.json similarity index 81% rename from DRAMSys/library/resources/simulations/ranktest.json rename to configs/ranktest.json index 47f6b1c4..fbd2c08c 100644 --- a/DRAMSys/library/resources/simulations/ranktest.json +++ b/configs/ranktest.json @@ -3,9 +3,8 @@ "addressmapping": "am_ranktest.json", "mcconfig": "fr_fcfs.json", "memspec": "memspec_ranktest.json", - "simconfig": "ddr3.json", + "simconfig": "example.json", "simulationid": "ranktest", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 200, diff --git a/DRAMSys/library/resources/configs/simulator/example.json b/configs/simconfig/example.json similarity index 74% rename from DRAMSys/library/resources/configs/simulator/example.json rename to configs/simconfig/example.json index b57e9d14..6b65d7d0 100644 --- a/DRAMSys/library/resources/configs/simulator/example.json +++ b/configs/simconfig/example.json @@ -4,15 +4,11 @@ "CheckTLM2Protocol": false, "DatabaseRecording": true, "Debug": false, - "ECCControllerMode": "Disabled", "EnableWindowing": false, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, "PowerAnalysis": false, "SimulationName": "example", "SimulationProgressBar": true, "StoreMode": "NoStorage", - "ThermalSimulation": false, "UseMalloc": false, "WindowSize": 1000 } diff --git a/DRAMSys/library/resources/configs/simulator/ddr3_gem5_se.json b/configs/simconfig/gem5_se.json similarity index 66% rename from DRAMSys/library/resources/configs/simulator/ddr3_gem5_se.json rename to configs/simconfig/gem5_se.json index c0b12f97..36f846ee 100644 --- a/DRAMSys/library/resources/configs/simulator/ddr3_gem5_se.json +++ b/configs/simconfig/gem5_se.json @@ -4,15 +4,11 @@ "CheckTLM2Protocol": false, "DatabaseRecording": true, "Debug": false, - "ECCControllerMode": "Disabled", "EnableWindowing": true, - "ErrorCSVFile": "", - "ErrorChipSeed": 42, "PowerAnalysis": true, - "SimulationName": "ddr3", + "SimulationName": "gem5_se", "SimulationProgressBar": true, "StoreMode": "Store", - "ThermalSimulation": false, "UseMalloc": false, "WindowSize": 1000 } diff --git a/DRAMSys/library/resources/simulations/stt-mram-example.json b/configs/stt-mram-example.json similarity index 72% rename from DRAMSys/library/resources/simulations/stt-mram-example.json rename to configs/stt-mram-example.json index fd9e3fce..83403d0c 100644 --- a/DRAMSys/library/resources/simulations/stt-mram-example.json +++ b/configs/stt-mram-example.json @@ -3,13 +3,12 @@ "addressmapping": "am_stt-mram_8x2Gbx8_dimm_p1KB_rbc.json", "mcconfig": "fr_fcfs_noref.json", "memspec": "STT-MRAM-1.2x.json", - "simconfig": "stt-mram.json", + "simconfig": "example.json", "simulationid": "stt-mram-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 800, - "name": "ddr3_example.stl" + "name": "example.stl" } ] } diff --git a/configs/traces/example.stl b/configs/traces/example.stl new file mode 100644 index 00000000..bd538719 --- /dev/null +++ b/configs/traces/example.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c4a6442736df0c17ecb8676e55f2dc8638d151a43c502ee4b85d51b6dd028fd +size 36204 diff --git a/configs/traces/pct.stl b/configs/traces/pct.stl new file mode 100644 index 00000000..0829ea1b --- /dev/null +++ b/configs/traces/pct.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c1762dfe1890441b65c7e7e3aa08288ec952c5e91fff075f73b62c500c28043 +size 15280 diff --git a/configs/traces/ranktest.stl b/configs/traces/ranktest.stl new file mode 100644 index 00000000..537c9877 --- /dev/null +++ b/configs/traces/ranktest.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:135b1bdfc37d384bd26b09cf1f381737b91a9b43179eba1fc15337122681d96f +size 754 diff --git a/DRAMSys/library/resources/simulations/wideio-thermal.json b/configs/wideio-thermal.json similarity index 90% rename from DRAMSys/library/resources/simulations/wideio-thermal.json rename to configs/wideio-thermal.json index 1e9a1c0b..d0f488fa 100644 --- a/DRAMSys/library/resources/simulations/wideio-thermal.json +++ b/configs/wideio-thermal.json @@ -5,7 +5,6 @@ "memspec": "JEDEC_256Mb_WIDEIO-200_128bit.json", "simconfig": "wideio_thermal.json", "simulationid": "wideio-example", - "thermalconfig": "config.json", "tracesetup": [ { "clkMhz": 1000, diff --git a/docs/images/dramsys_logo.png b/docs/images/dramsys_logo.png new file mode 100644 index 00000000..856cbde2 --- /dev/null +++ b/docs/images/dramsys_logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74230fea7a27704772d6c519cd87a6d7f030406fdc6b0fa2a1b3ef06fddcd7b2 +size 48614 diff --git a/docs/images/dramsys_uml.png b/docs/images/dramsys_uml.png new file mode 100644 index 00000000..554a10c7 --- /dev/null +++ b/docs/images/dramsys_uml.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:376d0ae8425c75d974e2bfce79448bfb346d9592879e909e8a75e6eb542bf4a9 +size 237217 diff --git a/docs/images/traceanalyzer.png b/docs/images/traceanalyzer.png new file mode 100644 index 00000000..2e1affe4 --- /dev/null +++ b/docs/images/traceanalyzer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76588299b4a04c4c76ffde81994985f73c4f2b38f02d91a12e61bab8a5acb3bf +size 1686917 diff --git a/extensions/apps/CMakeLists.txt b/extensions/apps/CMakeLists.txt new file mode 100644 index 00000000..54dd7659 --- /dev/null +++ b/extensions/apps/CMakeLists.txt @@ -0,0 +1,17 @@ +############################################## +############################################## +### ### +### DRAMSys Extensions - Apps ### +### ### +############################################## +############################################## + +############################################## +### TraceAnalyzer ### +############################################## + +option(DRAMSYS_EXTENSION_TRACE_ANALYZER_ENABLE "Enable DRAMSys Trace Analyzer" OFF) +if(DRAMSYS_EXTENSION_TRACE_ANALYZER_ENABLE) + message(STATUS " * Trace Analyzer") + add_subdirectory(traceAnalyzer) +endif() \ No newline at end of file diff --git a/DRAMSys/traceAnalyzer/.clang-format b/extensions/apps/traceAnalyzer/.clang-format similarity index 100% rename from DRAMSys/traceAnalyzer/.clang-format rename to extensions/apps/traceAnalyzer/.clang-format diff --git a/DRAMSys/traceAnalyzer/.directory b/extensions/apps/traceAnalyzer/.directory similarity index 100% rename from DRAMSys/traceAnalyzer/.directory rename to extensions/apps/traceAnalyzer/.directory diff --git a/extensions/apps/traceAnalyzer/CMakeLists.txt b/extensions/apps/traceAnalyzer/CMakeLists.txt new file mode 100644 index 00000000..2576b624 --- /dev/null +++ b/extensions/apps/traceAnalyzer/CMakeLists.txt @@ -0,0 +1,90 @@ +# Copyright (c) 2020, Technische Universität Kaiserslautern +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER +# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: +# Matthias Jung +# Lukas Steiner +# Derek Christ +# Iron Prando da Silva + +######################################## +### TraceAnalyzer ### +######################################## + +project(TraceAnalyzer) + +file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS *.cpp) +file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS *.h;*.hpp) + +# Add Python3 Dependency: +find_package(Python3 COMPONENTS Development) + +# Add QWT Dependency: +find_library(QWT_LIBRARY NAMES "qwt" "qwt-qt5" PATHS + "$ENV{QWT_HOME}/lib" + "/opt/homebrew/opt/qwt-qt5/lib" +) +find_path(QWT_INCLUDE_DIRS NAMES "qwt_plot.h" PATHS + "$ENV{QWT_HOME}/include" + "/usr/include/qwt-qt5" + "/usr/include/qwt" + "/opt/homebrew/opt/qwt-qt5/include" + "/opt/homebrew/opt/qwt-qt5/lib/qwt.framework/Headers" +) + +# Add QT Library: +if (APPLE) + set(Qt5_DIR "/opt/homebrew/opt/qt@5/lib/cmake/Qt5") +endif(APPLE) +find_package(Qt5 COMPONENTS Core Gui Widgets Sql REQUIRED) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +add_executable(TraceAnalyzer ${SOURCE_FILES} ${HEADER_FILES}) + +target_include_directories(TraceAnalyzer + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE ${QWT_INCLUDE_DIRS} + PRIVATE ${Python3_INCLUDE_DIRS} +) + +target_link_libraries(TraceAnalyzer + PRIVATE ${Python3_LIBRARIES} + PRIVATE ${QWT_LIBRARY} + PRIVATE Qt5::Widgets + PRIVATE Qt5::Sql + PRIVATE DRAMSys::util + PRIVATE DRAMSys::config +) + +build_source_group() +diagnostics_print(${PROJECT_NAME}) diff --git a/DRAMSys/traceAnalyzer/README.md b/extensions/apps/traceAnalyzer/README.md similarity index 100% rename from DRAMSys/traceAnalyzer/README.md rename to extensions/apps/traceAnalyzer/README.md diff --git a/DRAMSys/traceAnalyzer/businessObjects/calculatedMetric.h b/extensions/apps/traceAnalyzer/businessObjects/calculatedMetric.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/calculatedMetric.h rename to extensions/apps/traceAnalyzer/businessObjects/calculatedMetric.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/commandlengths.h b/extensions/apps/traceAnalyzer/businessObjects/commandlengths.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/commandlengths.h rename to extensions/apps/traceAnalyzer/businessObjects/commandlengths.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/commentmodel.cpp b/extensions/apps/traceAnalyzer/businessObjects/commentmodel.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/commentmodel.cpp rename to extensions/apps/traceAnalyzer/businessObjects/commentmodel.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/commentmodel.h b/extensions/apps/traceAnalyzer/businessObjects/commentmodel.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/commentmodel.h rename to extensions/apps/traceAnalyzer/businessObjects/commentmodel.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/configmodels.cpp b/extensions/apps/traceAnalyzer/businessObjects/configmodels.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/configmodels.cpp rename to extensions/apps/traceAnalyzer/businessObjects/configmodels.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/configmodels.h b/extensions/apps/traceAnalyzer/businessObjects/configmodels.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/configmodels.h rename to extensions/apps/traceAnalyzer/businessObjects/configmodels.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dependencymodels.cpp b/extensions/apps/traceAnalyzer/businessObjects/dependencymodels.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dependencymodels.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dependencymodels.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dependencymodels.h b/extensions/apps/traceAnalyzer/businessObjects/dependencymodels.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dependencymodels.h rename to extensions/apps/traceAnalyzer/businessObjects/dependencymodels.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/README.md b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/README.md similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/README.md rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/README.md diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/QStringComparator.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/QStringComparator.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/QStringComparator.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/QStringComparator.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/QStringComparator.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/QStringComparator.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/QStringComparator.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/QStringComparator.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/StringMapper.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/StringMapper.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/StringMapper.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/StringMapper.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/StringMapper.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/StringMapper.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/StringMapper.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/StringMapper.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/common.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/common.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/common.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/common.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/timedependency.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/timedependency.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/common/timedependency.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/common/timedependency.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationBase.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationBase.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationBase.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationBase.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationBase.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationBase.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationBase.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationBase.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationfactory.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationfactory.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationfactory.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationfactory.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationfactory.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationfactory.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationfactory.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/configurationfactory.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR3Configuration.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR3Configuration.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR3Configuration.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR3Configuration.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR3Configuration.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR3Configuration.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR3Configuration.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR3Configuration.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR4Configuration.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR4Configuration.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR4Configuration.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR4Configuration.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR4Configuration.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR4Configuration.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR4Configuration.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR4Configuration.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR5Configuration.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR5Configuration.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR5Configuration.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR5Configuration.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR5Configuration.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR5Configuration.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR5Configuration.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/DDR5Configuration.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/HBM2Configuration.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/HBM2Configuration.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/HBM2Configuration.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/HBM2Configuration.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/HBM2Configuration.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/HBM2Configuration.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/HBM2Configuration.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/HBM2Configuration.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR4Configuration.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR4Configuration.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR4Configuration.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR4Configuration.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR4Configuration.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR4Configuration.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR4Configuration.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR4Configuration.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR5Configuration.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR5Configuration.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR5Configuration.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR5Configuration.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR5Configuration.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR5Configuration.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR5Configuration.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/configurations/specialized/LPDDR5Configuration.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/dbphaseentryBase.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/dbphaseentryBase.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/dbphaseentryBase.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/dbphaseentryBase.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR3dbphaseentry.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR3dbphaseentry.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR3dbphaseentry.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR3dbphaseentry.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR3dbphaseentry.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR3dbphaseentry.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR3dbphaseentry.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR3dbphaseentry.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR4dbphaseentry.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR4dbphaseentry.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR4dbphaseentry.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR4dbphaseentry.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR4dbphaseentry.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR4dbphaseentry.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR4dbphaseentry.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR4dbphaseentry.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR5dbphaseentry.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR5dbphaseentry.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR5dbphaseentry.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR5dbphaseentry.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR5dbphaseentry.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR5dbphaseentry.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR5dbphaseentry.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/DDR5dbphaseentry.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/HBM2dbphaseentry.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/HBM2dbphaseentry.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/HBM2dbphaseentry.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/HBM2dbphaseentry.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/HBM2dbphaseentry.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/HBM2dbphaseentry.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/HBM2dbphaseentry.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/HBM2dbphaseentry.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR4dbphaseentry.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR4dbphaseentry.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR4dbphaseentry.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR4dbphaseentry.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR4dbphaseentry.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR4dbphaseentry.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR4dbphaseentry.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR4dbphaseentry.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR5dbphaseentry.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR5dbphaseentry.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR5dbphaseentry.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR5dbphaseentry.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR5dbphaseentry.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR5dbphaseentry.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR5dbphaseentry.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/specialized/LPDDR5dbphaseentry.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/dramtimedependenciesbase.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/dramtimedependenciesbase.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/dramtimedependenciesbase.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/dramtimedependenciesbase.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/dramtimedependenciesbase.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/dramtimedependenciesbase.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/dramtimedependenciesbase.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/dramtimedependenciesbase.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontroller.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontroller.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontroller.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontroller.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontroller.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontroller.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontroller.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontroller.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontrollermap.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontrollermap.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontrollermap.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontrollermap.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontrollermap.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontrollermap.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontrollermap.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/poolcontrollermap.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/DDR3TimeDependencies.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/DDR3TimeDependencies.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/DDR3TimeDependencies.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/DDR3TimeDependencies.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/DDR3TimeDependencies.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/DDR3TimeDependencies.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/DDR3TimeDependencies.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/DDR3TimeDependencies.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR3.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR3.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR3.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR3.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR3.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR3.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR3.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR3.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR4.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR4.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR4.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR4.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR4.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR4.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR4.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR4.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR5.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR5.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR5.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR5.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR5.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR5.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR5.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoDDR5.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoHBM2.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoHBM2.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoHBM2.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoHBM2.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoHBM2.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoHBM2.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoHBM2.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoHBM2.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR4.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR4.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR4.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR4.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR4.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR4.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR4.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR4.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR5.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR5.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR5.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR5.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR5.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR5.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR5.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/deviceDependencies/specialized/TimeDependenciesInfoLPDDR5.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.cpp b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.cpp rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.h b/extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.h rename to extensions/apps/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/generalinfo.h b/extensions/apps/traceAnalyzer/businessObjects/generalinfo.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/generalinfo.h rename to extensions/apps/traceAnalyzer/businessObjects/generalinfo.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/dependencyinfos.cpp b/extensions/apps/traceAnalyzer/businessObjects/phases/dependencyinfos.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/phases/dependencyinfos.cpp rename to extensions/apps/traceAnalyzer/businessObjects/phases/dependencyinfos.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/dependencyinfos.h b/extensions/apps/traceAnalyzer/businessObjects/phases/dependencyinfos.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/phases/dependencyinfos.h rename to extensions/apps/traceAnalyzer/businessObjects/phases/dependencyinfos.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp b/extensions/apps/traceAnalyzer/businessObjects/phases/phase.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp rename to extensions/apps/traceAnalyzer/businessObjects/phases/phase.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h b/extensions/apps/traceAnalyzer/businessObjects/phases/phase.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/phases/phase.h rename to extensions/apps/traceAnalyzer/businessObjects/phases/phase.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phasedependency.cpp b/extensions/apps/traceAnalyzer/businessObjects/phases/phasedependency.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/phases/phasedependency.cpp rename to extensions/apps/traceAnalyzer/businessObjects/phases/phasedependency.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phasedependency.h b/extensions/apps/traceAnalyzer/businessObjects/phases/phasedependency.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/phases/phasedependency.h rename to extensions/apps/traceAnalyzer/businessObjects/phases/phasedependency.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp b/extensions/apps/traceAnalyzer/businessObjects/phases/phasefactory.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp rename to extensions/apps/traceAnalyzer/businessObjects/phases/phasefactory.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.h b/extensions/apps/traceAnalyzer/businessObjects/phases/phasefactory.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.h rename to extensions/apps/traceAnalyzer/businessObjects/phases/phasefactory.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/pythoncaller.cpp b/extensions/apps/traceAnalyzer/businessObjects/pythoncaller.cpp similarity index 99% rename from DRAMSys/traceAnalyzer/businessObjects/pythoncaller.cpp rename to extensions/apps/traceAnalyzer/businessObjects/pythoncaller.cpp index 2df106e8..fa21e2c8 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/pythoncaller.cpp +++ b/extensions/apps/traceAnalyzer/businessObjects/pythoncaller.cpp @@ -57,7 +57,7 @@ PythonCaller::PythonCaller() : getMetricFunctionName("getMetrics"), pathToScripts(QApplication::applicationDirPath().toStdString() + - "/../../DRAMSys/traceAnalyzer/scripts/"), + "/../../extensions/apps/traceAnalyzer/scripts/"), plotsModuleName("plots"), plotsFunctionName("generatePlots"), checkDependenciesModuleName("checkDependencies"), diff --git a/DRAMSys/traceAnalyzer/businessObjects/pythoncaller.h b/extensions/apps/traceAnalyzer/businessObjects/pythoncaller.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/pythoncaller.h rename to extensions/apps/traceAnalyzer/businessObjects/pythoncaller.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/testresult.h b/extensions/apps/traceAnalyzer/businessObjects/testresult.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/testresult.h rename to extensions/apps/traceAnalyzer/businessObjects/testresult.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/timespan.cpp b/extensions/apps/traceAnalyzer/businessObjects/timespan.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/timespan.cpp rename to extensions/apps/traceAnalyzer/businessObjects/timespan.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/timespan.h b/extensions/apps/traceAnalyzer/businessObjects/timespan.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/timespan.h rename to extensions/apps/traceAnalyzer/businessObjects/timespan.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/tracecalculatedmetrics.h b/extensions/apps/traceAnalyzer/businessObjects/tracecalculatedmetrics.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/tracecalculatedmetrics.h rename to extensions/apps/traceAnalyzer/businessObjects/tracecalculatedmetrics.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/traceplotlinemodel.cpp b/extensions/apps/traceAnalyzer/businessObjects/traceplotlinemodel.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/traceplotlinemodel.cpp rename to extensions/apps/traceAnalyzer/businessObjects/traceplotlinemodel.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/traceplotlinemodel.h b/extensions/apps/traceAnalyzer/businessObjects/traceplotlinemodel.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/traceplotlinemodel.h rename to extensions/apps/traceAnalyzer/businessObjects/traceplotlinemodel.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/tracetime.h b/extensions/apps/traceAnalyzer/businessObjects/tracetime.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/tracetime.h rename to extensions/apps/traceAnalyzer/businessObjects/tracetime.h diff --git a/DRAMSys/traceAnalyzer/businessObjects/transaction.cpp b/extensions/apps/traceAnalyzer/businessObjects/transaction.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/transaction.cpp rename to extensions/apps/traceAnalyzer/businessObjects/transaction.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/transaction.h b/extensions/apps/traceAnalyzer/businessObjects/transaction.h similarity index 100% rename from DRAMSys/traceAnalyzer/businessObjects/transaction.h rename to extensions/apps/traceAnalyzer/businessObjects/transaction.h diff --git a/DRAMSys/traceAnalyzer/data/QueryTexts.h b/extensions/apps/traceAnalyzer/data/QueryTexts.h similarity index 100% rename from DRAMSys/traceAnalyzer/data/QueryTexts.h rename to extensions/apps/traceAnalyzer/data/QueryTexts.h diff --git a/DRAMSys/traceAnalyzer/data/tracedb.cpp b/extensions/apps/traceAnalyzer/data/tracedb.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/data/tracedb.cpp rename to extensions/apps/traceAnalyzer/data/tracedb.cpp diff --git a/DRAMSys/traceAnalyzer/data/tracedb.h b/extensions/apps/traceAnalyzer/data/tracedb.h similarity index 100% rename from DRAMSys/traceAnalyzer/data/tracedb.h rename to extensions/apps/traceAnalyzer/data/tracedb.h diff --git a/DRAMSys/traceAnalyzer/evaluationtool.cpp b/extensions/apps/traceAnalyzer/evaluationtool.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/evaluationtool.cpp rename to extensions/apps/traceAnalyzer/evaluationtool.cpp diff --git a/DRAMSys/traceAnalyzer/evaluationtool.h b/extensions/apps/traceAnalyzer/evaluationtool.h similarity index 100% rename from DRAMSys/traceAnalyzer/evaluationtool.h rename to extensions/apps/traceAnalyzer/evaluationtool.h diff --git a/DRAMSys/traceAnalyzer/evaluationtool.ui b/extensions/apps/traceAnalyzer/evaluationtool.ui similarity index 100% rename from DRAMSys/traceAnalyzer/evaluationtool.ui rename to extensions/apps/traceAnalyzer/evaluationtool.ui diff --git a/DRAMSys/traceAnalyzer/gototimedialog.cpp b/extensions/apps/traceAnalyzer/gototimedialog.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/gototimedialog.cpp rename to extensions/apps/traceAnalyzer/gototimedialog.cpp diff --git a/DRAMSys/traceAnalyzer/gototimedialog.h b/extensions/apps/traceAnalyzer/gototimedialog.h similarity index 100% rename from DRAMSys/traceAnalyzer/gototimedialog.h rename to extensions/apps/traceAnalyzer/gototimedialog.h diff --git a/DRAMSys/traceAnalyzer/gototimedialog.ui b/extensions/apps/traceAnalyzer/gototimedialog.ui similarity index 100% rename from DRAMSys/traceAnalyzer/gototimedialog.ui rename to extensions/apps/traceAnalyzer/gototimedialog.ui diff --git a/DRAMSys/traceAnalyzer/icon.svg b/extensions/apps/traceAnalyzer/icon.svg similarity index 100% rename from DRAMSys/traceAnalyzer/icon.svg rename to extensions/apps/traceAnalyzer/icon.svg diff --git a/DRAMSys/traceAnalyzer/main.cpp b/extensions/apps/traceAnalyzer/main.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/main.cpp rename to extensions/apps/traceAnalyzer/main.cpp diff --git a/DRAMSys/traceAnalyzer/markerplotitem.h b/extensions/apps/traceAnalyzer/markerplotitem.h similarity index 100% rename from DRAMSys/traceAnalyzer/markerplotitem.h rename to extensions/apps/traceAnalyzer/markerplotitem.h diff --git a/DRAMSys/traceAnalyzer/preferences.ui b/extensions/apps/traceAnalyzer/preferences.ui similarity index 100% rename from DRAMSys/traceAnalyzer/preferences.ui rename to extensions/apps/traceAnalyzer/preferences.ui diff --git a/DRAMSys/traceAnalyzer/presentation/debugmessagetreewidget.cpp b/extensions/apps/traceAnalyzer/presentation/debugmessagetreewidget.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/debugmessagetreewidget.cpp rename to extensions/apps/traceAnalyzer/presentation/debugmessagetreewidget.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/debugmessagetreewidget.h b/extensions/apps/traceAnalyzer/presentation/debugmessagetreewidget.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/debugmessagetreewidget.h rename to extensions/apps/traceAnalyzer/presentation/debugmessagetreewidget.h diff --git a/DRAMSys/traceAnalyzer/presentation/selectedtransactiontreewidget.cpp b/extensions/apps/traceAnalyzer/presentation/selectedtransactiontreewidget.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/selectedtransactiontreewidget.cpp rename to extensions/apps/traceAnalyzer/presentation/selectedtransactiontreewidget.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/selectedtransactiontreewidget.h b/extensions/apps/traceAnalyzer/presentation/selectedtransactiontreewidget.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/selectedtransactiontreewidget.h rename to extensions/apps/traceAnalyzer/presentation/selectedtransactiontreewidget.h diff --git a/DRAMSys/traceAnalyzer/presentation/tracePlotMouseLabel.cpp b/extensions/apps/traceAnalyzer/presentation/tracePlotMouseLabel.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracePlotMouseLabel.cpp rename to extensions/apps/traceAnalyzer/presentation/tracePlotMouseLabel.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/tracePlotMouseLabel.h b/extensions/apps/traceAnalyzer/presentation/tracePlotMouseLabel.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracePlotMouseLabel.h rename to extensions/apps/traceAnalyzer/presentation/tracePlotMouseLabel.h diff --git a/DRAMSys/traceAnalyzer/presentation/tracedrawing.cpp b/extensions/apps/traceAnalyzer/presentation/tracedrawing.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracedrawing.cpp rename to extensions/apps/traceAnalyzer/presentation/tracedrawing.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/tracedrawing.h b/extensions/apps/traceAnalyzer/presentation/tracedrawing.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracedrawing.h rename to extensions/apps/traceAnalyzer/presentation/tracedrawing.h diff --git a/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.cpp b/extensions/apps/traceAnalyzer/presentation/tracedrawingproperties.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.cpp rename to extensions/apps/traceAnalyzer/presentation/tracedrawingproperties.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h b/extensions/apps/traceAnalyzer/presentation/tracedrawingproperties.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h rename to extensions/apps/traceAnalyzer/presentation/tracedrawingproperties.h diff --git a/DRAMSys/traceAnalyzer/presentation/tracemetrictreewidget.cpp b/extensions/apps/traceAnalyzer/presentation/tracemetrictreewidget.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracemetrictreewidget.cpp rename to extensions/apps/traceAnalyzer/presentation/tracemetrictreewidget.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/tracemetrictreewidget.h b/extensions/apps/traceAnalyzer/presentation/tracemetrictreewidget.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracemetrictreewidget.h rename to extensions/apps/traceAnalyzer/presentation/tracemetrictreewidget.h diff --git a/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp b/extensions/apps/traceAnalyzer/presentation/tracenavigator.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp rename to extensions/apps/traceAnalyzer/presentation/tracenavigator.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/tracenavigator.h b/extensions/apps/traceAnalyzer/presentation/tracenavigator.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracenavigator.h rename to extensions/apps/traceAnalyzer/presentation/tracenavigator.h diff --git a/DRAMSys/traceAnalyzer/presentation/traceplot.cpp b/extensions/apps/traceAnalyzer/presentation/traceplot.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/traceplot.cpp rename to extensions/apps/traceAnalyzer/presentation/traceplot.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/traceplot.h b/extensions/apps/traceAnalyzer/presentation/traceplot.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/traceplot.h rename to extensions/apps/traceAnalyzer/presentation/traceplot.h diff --git a/DRAMSys/traceAnalyzer/presentation/traceplotitem.cpp b/extensions/apps/traceAnalyzer/presentation/traceplotitem.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/traceplotitem.cpp rename to extensions/apps/traceAnalyzer/presentation/traceplotitem.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/traceplotitem.h b/extensions/apps/traceAnalyzer/presentation/traceplotitem.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/traceplotitem.h rename to extensions/apps/traceAnalyzer/presentation/traceplotitem.h diff --git a/DRAMSys/traceAnalyzer/presentation/tracescroller.cpp b/extensions/apps/traceAnalyzer/presentation/tracescroller.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracescroller.cpp rename to extensions/apps/traceAnalyzer/presentation/tracescroller.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/tracescroller.h b/extensions/apps/traceAnalyzer/presentation/tracescroller.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/tracescroller.h rename to extensions/apps/traceAnalyzer/presentation/tracescroller.h diff --git a/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.cpp b/extensions/apps/traceAnalyzer/presentation/transactiontreewidget.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/transactiontreewidget.cpp rename to extensions/apps/traceAnalyzer/presentation/transactiontreewidget.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.h b/extensions/apps/traceAnalyzer/presentation/transactiontreewidget.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/transactiontreewidget.h rename to extensions/apps/traceAnalyzer/presentation/transactiontreewidget.h diff --git a/DRAMSys/traceAnalyzer/presentation/util/clkgrid.cpp b/extensions/apps/traceAnalyzer/presentation/util/clkgrid.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/clkgrid.cpp rename to extensions/apps/traceAnalyzer/presentation/util/clkgrid.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/util/clkgrid.h b/extensions/apps/traceAnalyzer/presentation/util/clkgrid.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/clkgrid.h rename to extensions/apps/traceAnalyzer/presentation/util/clkgrid.h diff --git a/DRAMSys/traceAnalyzer/presentation/util/colorgenerator.cpp b/extensions/apps/traceAnalyzer/presentation/util/colorgenerator.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/colorgenerator.cpp rename to extensions/apps/traceAnalyzer/presentation/util/colorgenerator.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/util/colorgenerator.h b/extensions/apps/traceAnalyzer/presentation/util/colorgenerator.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/colorgenerator.h rename to extensions/apps/traceAnalyzer/presentation/util/colorgenerator.h diff --git a/DRAMSys/traceAnalyzer/presentation/util/colorobject.cpp b/extensions/apps/traceAnalyzer/presentation/util/colorobject.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/colorobject.cpp rename to extensions/apps/traceAnalyzer/presentation/util/colorobject.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/util/colorobject.h b/extensions/apps/traceAnalyzer/presentation/util/colorobject.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/colorobject.h rename to extensions/apps/traceAnalyzer/presentation/util/colorobject.h diff --git a/DRAMSys/traceAnalyzer/presentation/util/customlabelscaledraw.cpp b/extensions/apps/traceAnalyzer/presentation/util/customlabelscaledraw.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/customlabelscaledraw.cpp rename to extensions/apps/traceAnalyzer/presentation/util/customlabelscaledraw.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/util/customlabelscaledraw.h b/extensions/apps/traceAnalyzer/presentation/util/customlabelscaledraw.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/customlabelscaledraw.h rename to extensions/apps/traceAnalyzer/presentation/util/customlabelscaledraw.h diff --git a/DRAMSys/traceAnalyzer/presentation/util/engineeringScaleDraw.h b/extensions/apps/traceAnalyzer/presentation/util/engineeringScaleDraw.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/engineeringScaleDraw.h rename to extensions/apps/traceAnalyzer/presentation/util/engineeringScaleDraw.h diff --git a/DRAMSys/traceAnalyzer/presentation/util/testlight.cpp b/extensions/apps/traceAnalyzer/presentation/util/testlight.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/testlight.cpp rename to extensions/apps/traceAnalyzer/presentation/util/testlight.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/util/testlight.h b/extensions/apps/traceAnalyzer/presentation/util/testlight.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/testlight.h rename to extensions/apps/traceAnalyzer/presentation/util/testlight.h diff --git a/DRAMSys/traceAnalyzer/presentation/util/togglecollapsedaction.cpp b/extensions/apps/traceAnalyzer/presentation/util/togglecollapsedaction.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/togglecollapsedaction.cpp rename to extensions/apps/traceAnalyzer/presentation/util/togglecollapsedaction.cpp diff --git a/DRAMSys/traceAnalyzer/presentation/util/togglecollapsedaction.h b/extensions/apps/traceAnalyzer/presentation/util/togglecollapsedaction.h similarity index 100% rename from DRAMSys/traceAnalyzer/presentation/util/togglecollapsedaction.h rename to extensions/apps/traceAnalyzer/presentation/util/togglecollapsedaction.h diff --git a/DRAMSys/traceAnalyzer/queryeditor.cpp b/extensions/apps/traceAnalyzer/queryeditor.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/queryeditor.cpp rename to extensions/apps/traceAnalyzer/queryeditor.cpp diff --git a/DRAMSys/traceAnalyzer/queryeditor.h b/extensions/apps/traceAnalyzer/queryeditor.h similarity index 100% rename from DRAMSys/traceAnalyzer/queryeditor.h rename to extensions/apps/traceAnalyzer/queryeditor.h diff --git a/DRAMSys/traceAnalyzer/queryeditor.ui b/extensions/apps/traceAnalyzer/queryeditor.ui similarity index 100% rename from DRAMSys/traceAnalyzer/queryeditor.ui rename to extensions/apps/traceAnalyzer/queryeditor.ui diff --git a/DRAMSys/traceAnalyzer/resources.qrc b/extensions/apps/traceAnalyzer/resources.qrc similarity index 95% rename from DRAMSys/traceAnalyzer/resources.qrc rename to extensions/apps/traceAnalyzer/resources.qrc index 4470471f..c047e82d 100644 --- a/DRAMSys/traceAnalyzer/resources.qrc +++ b/extensions/apps/traceAnalyzer/resources.qrc @@ -1,5 +1,5 @@ - - - icon.svg - - + + + icon.svg + + diff --git a/DRAMSys/traceAnalyzer/scripts/checkDependencies.py b/extensions/apps/traceAnalyzer/scripts/checkDependencies.py old mode 100755 new mode 100644 similarity index 100% rename from DRAMSys/traceAnalyzer/scripts/checkDependencies.py rename to extensions/apps/traceAnalyzer/scripts/checkDependencies.py diff --git a/DRAMSys/traceAnalyzer/scripts/dataExtractForNN.pl b/extensions/apps/traceAnalyzer/scripts/dataExtractForNN.pl old mode 100755 new mode 100644 similarity index 100% rename from DRAMSys/traceAnalyzer/scripts/dataExtractForNN.pl rename to extensions/apps/traceAnalyzer/scripts/dataExtractForNN.pl diff --git a/DRAMSys/traceAnalyzer/scripts/memUtil.py b/extensions/apps/traceAnalyzer/scripts/memUtil.py old mode 100755 new mode 100644 similarity index 100% rename from DRAMSys/traceAnalyzer/scripts/memUtil.py rename to extensions/apps/traceAnalyzer/scripts/memUtil.py diff --git a/DRAMSys/traceAnalyzer/scripts/metrics.py b/extensions/apps/traceAnalyzer/scripts/metrics.py similarity index 100% rename from DRAMSys/traceAnalyzer/scripts/metrics.py rename to extensions/apps/traceAnalyzer/scripts/metrics.py diff --git a/DRAMSys/traceAnalyzer/scripts/plots.py b/extensions/apps/traceAnalyzer/scripts/plots.py old mode 100755 new mode 100644 similarity index 100% rename from DRAMSys/traceAnalyzer/scripts/plots.py rename to extensions/apps/traceAnalyzer/scripts/plots.py diff --git a/DRAMSys/traceAnalyzer/scripts/sonification.pl b/extensions/apps/traceAnalyzer/scripts/sonification.pl similarity index 100% rename from DRAMSys/traceAnalyzer/scripts/sonification.pl rename to extensions/apps/traceAnalyzer/scripts/sonification.pl diff --git a/DRAMSys/traceAnalyzer/scripts/tests.py b/extensions/apps/traceAnalyzer/scripts/tests.py old mode 100755 new mode 100644 similarity index 100% rename from DRAMSys/traceAnalyzer/scripts/tests.py rename to extensions/apps/traceAnalyzer/scripts/tests.py diff --git a/DRAMSys/traceAnalyzer/scripts/vcdExport.py b/extensions/apps/traceAnalyzer/scripts/vcdExport.py old mode 100755 new mode 100644 similarity index 100% rename from DRAMSys/traceAnalyzer/scripts/vcdExport.py rename to extensions/apps/traceAnalyzer/scripts/vcdExport.py diff --git a/DRAMSys/traceAnalyzer/selectmetrics.cpp b/extensions/apps/traceAnalyzer/selectmetrics.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/selectmetrics.cpp rename to extensions/apps/traceAnalyzer/selectmetrics.cpp diff --git a/DRAMSys/traceAnalyzer/selectmetrics.h b/extensions/apps/traceAnalyzer/selectmetrics.h similarity index 100% rename from DRAMSys/traceAnalyzer/selectmetrics.h rename to extensions/apps/traceAnalyzer/selectmetrics.h diff --git a/DRAMSys/traceAnalyzer/selectmetrics.ui b/extensions/apps/traceAnalyzer/selectmetrics.ui similarity index 100% rename from DRAMSys/traceAnalyzer/selectmetrics.ui rename to extensions/apps/traceAnalyzer/selectmetrics.ui diff --git a/DRAMSys/traceAnalyzer/simulationdialog.cpp b/extensions/apps/traceAnalyzer/simulationdialog.cpp similarity index 89% rename from DRAMSys/traceAnalyzer/simulationdialog.cpp rename to extensions/apps/traceAnalyzer/simulationdialog.cpp index cc0f6958..df72ec9a 100644 --- a/DRAMSys/traceAnalyzer/simulationdialog.cpp +++ b/extensions/apps/traceAnalyzer/simulationdialog.cpp @@ -34,7 +34,7 @@ */ #include "simulationdialog.h" -#include "TraceSetup.h" +#include "DRAMSys/config/TraceSetup.h" #include #include @@ -217,7 +217,7 @@ void SimulationDialog::saveConfiguration(QFile &file) loadConfigurationFromTextFields(); - std::string dump = DRAMSysConfiguration::dump(configuration, 4); + std::string dump = DRAMSys::Config::dump(configuration, 4); out << dump.c_str(); } @@ -239,14 +239,13 @@ void SimulationDialog::processMessage(const std::string &msg) void SimulationDialog::loadConfigurationFromTextFields() { - using namespace DRAMSysConfiguration; + using namespace DRAMSys::Config; AddressMapping addressMapping; McConfig mcConfig; MemSpec memSpec; SimConfig simConfig; std::string simulationId; - ThermalConfig thermalConfig; TraceSetup traceSetup; simulationId = ui->simulationIdLineEdit->text().toStdString(); @@ -258,9 +257,6 @@ void SimulationDialog::loadConfigurationFromTextFields() from_dump(ui->memSpecTextEdit->toPlainText().toStdString(), memSpec); from_dump(ui->simConfigTextEdit->toPlainText().toStdString(), simConfig); - if (!ui->thermalConfigTextEdit->toPlainText().toStdString().empty()) - from_dump(ui->thermalConfigTextEdit->toPlainText().toStdString(), thermalConfig); - if (!ui->traceSetupTextEdit->toPlainText().toStdString().empty()) from_dump(ui->traceSetupTextEdit->toPlainText().toStdString(), traceSetup); } @@ -270,12 +266,11 @@ void SimulationDialog::loadConfigurationFromTextFields() return; } - configuration = DRAMSysConfiguration::Configuration{addressMapping, + configuration = DRAMSys::Config::Configuration{addressMapping, mcConfig, memSpec, simConfig, simulationId, - std::make_optional(std::move(thermalConfig)), std::make_optional(std::move(traceSetup))}; loadConfiguration(); @@ -290,7 +285,7 @@ void SimulationDialog::loadConfigurationFromPath() try { - configuration = DRAMSysConfiguration::from_path(ui->jsonPath->text().toStdString()); + configuration = DRAMSys::Config::from_path(ui->jsonPath->text().toStdString()); } catch (const std::exception &e) { @@ -313,7 +308,6 @@ void SimulationDialog::loadConfiguration() loadMcConfig(); loadMemSpec(); loadAddressMapping(); - loadThermalConfig(); loadTraceSetup(); loadPreview(); } @@ -322,7 +316,7 @@ void SimulationDialog::loadSimConfig() { ui->simConfigTextEdit->clear(); - std::string dump = DRAMSysConfiguration::dump(configuration.simConfig, 4); + std::string dump = DRAMSys::Config::dump(configuration.simConfig, 4); ui->simConfigTextEdit->setText(dump.c_str()); } @@ -330,7 +324,7 @@ void SimulationDialog::loadMcConfig() { ui->mcConfigTextEdit->clear(); - std::string dump = DRAMSysConfiguration::dump(configuration.mcConfig, 4); + std::string dump = DRAMSys::Config::dump(configuration.mcConfig, 4); ui->mcConfigTextEdit->setText(dump.c_str()); } @@ -338,7 +332,7 @@ void SimulationDialog::loadMemSpec() { ui->memSpecTextEdit->clear(); - std::string dump = DRAMSysConfiguration::dump(configuration.memSpec, 4); + std::string dump = DRAMSys::Config::dump(configuration.memSpec, 4); ui->memSpecTextEdit->setText(dump.c_str()); } @@ -346,28 +340,17 @@ void SimulationDialog::loadAddressMapping() { ui->addressMappingTextEdit->clear(); - std::string dump = DRAMSysConfiguration::dump(configuration.addressMapping, 4); + std::string dump = DRAMSys::Config::dump(configuration.addressMapping, 4); ui->addressMappingTextEdit->setText(dump.c_str()); } -void SimulationDialog::loadThermalConfig() -{ - ui->thermalConfigTextEdit->clear(); - - if (const auto &thermalConfig = configuration.thermalConfig) - { - std::string dump = DRAMSysConfiguration::dump(*thermalConfig, 4); - ui->thermalConfigTextEdit->setText(dump.c_str()); - } -} - void SimulationDialog::loadTraceSetup() { ui->traceSetupTextEdit->clear(); if (const auto &traceSetup = configuration.traceSetup) { - std::string dump = DRAMSysConfiguration::dump(*traceSetup, 4); + std::string dump = DRAMSys::Config::dump(*traceSetup, 4); ui->traceSetupTextEdit->setText(dump.c_str()); } } @@ -376,7 +359,7 @@ void SimulationDialog::loadPreview() { ui->previewTextEdit->clear(); - std::string dump = DRAMSysConfiguration::dump(configuration, 4); + std::string dump = DRAMSys::Config::dump(configuration, 4); ui->previewTextEdit->setText(dump.c_str()); } diff --git a/DRAMSys/traceAnalyzer/simulationdialog.h b/extensions/apps/traceAnalyzer/simulationdialog.h similarity index 96% rename from DRAMSys/traceAnalyzer/simulationdialog.h rename to extensions/apps/traceAnalyzer/simulationdialog.h index 168ceb55..d4d8cd0c 100644 --- a/DRAMSys/traceAnalyzer/simulationdialog.h +++ b/extensions/apps/traceAnalyzer/simulationdialog.h @@ -38,7 +38,8 @@ #include "ui_simulationdialog.h" -#include +#include "DRAMSys/config/DRAMSysConfiguration.h" + #include #include #include @@ -80,7 +81,6 @@ private: void loadMcConfig(); void loadMemSpec(); void loadAddressMapping(); - void loadThermalConfig(); void loadTraceSetup(); void loadPreview(); @@ -92,7 +92,7 @@ private: void openSimulationResults(const QFileInfoList &fileInfos); QTemporaryFile temporaryConfigurationFile; - DRAMSysConfiguration::Configuration configuration; + DRAMSys::Config::Configuration configuration; QPointer simulatorProcess; diff --git a/DRAMSys/traceAnalyzer/simulationdialog.ui b/extensions/apps/traceAnalyzer/simulationdialog.ui similarity index 100% rename from DRAMSys/traceAnalyzer/simulationdialog.ui rename to extensions/apps/traceAnalyzer/simulationdialog.ui diff --git a/DRAMSys/traceAnalyzer/traceanalyzer.cpp b/extensions/apps/traceAnalyzer/traceanalyzer.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/traceanalyzer.cpp rename to extensions/apps/traceAnalyzer/traceanalyzer.cpp diff --git a/DRAMSys/traceAnalyzer/traceanalyzer.h b/extensions/apps/traceAnalyzer/traceanalyzer.h similarity index 100% rename from DRAMSys/traceAnalyzer/traceanalyzer.h rename to extensions/apps/traceAnalyzer/traceanalyzer.h diff --git a/DRAMSys/traceAnalyzer/traceanalyzer.ui b/extensions/apps/traceAnalyzer/traceanalyzer.ui similarity index 100% rename from DRAMSys/traceAnalyzer/traceanalyzer.ui rename to extensions/apps/traceAnalyzer/traceanalyzer.ui diff --git a/DRAMSys/traceAnalyzer/tracefiletab.cpp b/extensions/apps/traceAnalyzer/tracefiletab.cpp similarity index 100% rename from DRAMSys/traceAnalyzer/tracefiletab.cpp rename to extensions/apps/traceAnalyzer/tracefiletab.cpp diff --git a/DRAMSys/traceAnalyzer/tracefiletab.h b/extensions/apps/traceAnalyzer/tracefiletab.h similarity index 100% rename from DRAMSys/traceAnalyzer/tracefiletab.h rename to extensions/apps/traceAnalyzer/tracefiletab.h diff --git a/DRAMSys/traceAnalyzer/tracefiletab.ui b/extensions/apps/traceAnalyzer/tracefiletab.ui similarity index 100% rename from DRAMSys/traceAnalyzer/tracefiletab.ui rename to extensions/apps/traceAnalyzer/tracefiletab.ui diff --git a/extensions/standards/CMakeLists.txt b/extensions/standards/CMakeLists.txt new file mode 100644 index 00000000..86694d5b --- /dev/null +++ b/extensions/standards/CMakeLists.txt @@ -0,0 +1,9 @@ +file(GLOB sub_dirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*) + +message(STATUS " Standards:") + +FOREACH(sub_dir ${sub_dirs}) + IF(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${sub_dir}") + add_subdirectory(${sub_dir}) + ENDIF() +ENDFOREACH() \ No newline at end of file diff --git a/extensions/standards/DDR5/CMakeLists.txt b/extensions/standards/DDR5/CMakeLists.txt new file mode 100644 index 00000000..f537c8ac --- /dev/null +++ b/extensions/standards/DDR5/CMakeLists.txt @@ -0,0 +1,14 @@ +option(DRAMSYS_EXTENSION_DDR5_ENABLE "Enable DRAMSys DDR5 Support" ON) + +if(DRAMSYS_EXTENSION_DDR5_ENABLE) + message(STATUS " * DDR5") + + file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS *.cpp) + file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS *.h;*.hpp) + + target_sources(DRAMSys_libdramsys PRIVATE ${SOURCE_FILES} ${HEADER_FILES}) + target_include_directories(DRAMSys_libdramsys PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + target_compile_definitions(DRAMSys_libdramsys PUBLIC DDR5_SIM) + + build_source_group() +endif() diff --git a/DRAMSys/library/src/configuration/memspec/MemSpecDDR5.cpp b/extensions/standards/DDR5/DRAMSys/configuration/memspec/MemSpecDDR5.cpp similarity index 99% rename from DRAMSys/library/src/configuration/memspec/MemSpecDDR5.cpp rename to extensions/standards/DDR5/DRAMSys/configuration/memspec/MemSpecDDR5.cpp index c8ff40ba..1558946a 100644 --- a/DRAMSys/library/src/configuration/memspec/MemSpecDDR5.cpp +++ b/extensions/standards/DDR5/DRAMSys/configuration/memspec/MemSpecDDR5.cpp @@ -34,15 +34,16 @@ * Derek Christ */ -#include - -#include "../../common/utils.h" #include "MemSpecDDR5.h" +#include + +#include + using namespace sc_core; using namespace tlm; -MemSpecDDR5::MemSpecDDR5(const DRAMSysConfiguration::MemSpec &memSpec) +MemSpecDDR5::MemSpecDDR5(const DRAMSys::Config::MemSpec &memSpec) : MemSpec(memSpec, MemoryType::DDR5, memSpec.memArchitectureSpec.entries.at("nbrOfChannels"), 1, diff --git a/DRAMSys/library/src/configuration/memspec/MemSpecDDR5.h b/extensions/standards/DDR5/DRAMSys/configuration/memspec/MemSpecDDR5.h similarity index 97% rename from DRAMSys/library/src/configuration/memspec/MemSpecDDR5.h rename to extensions/standards/DDR5/DRAMSys/configuration/memspec/MemSpecDDR5.h index 25cf54f5..156d2a96 100644 --- a/DRAMSys/library/src/configuration/memspec/MemSpecDDR5.h +++ b/extensions/standards/DDR5/DRAMSys/configuration/memspec/MemSpecDDR5.h @@ -38,12 +38,12 @@ #define MEMSPECDDR5_H #include -#include "MemSpec.h" +#include class MemSpecDDR5 final : public MemSpec { public: - explicit MemSpecDDR5(const DRAMSysConfiguration::MemSpec &memSpec); + explicit MemSpecDDR5(const DRAMSys::Config::MemSpec &memSpec); const unsigned dimmRanksPerChannel; const unsigned physicalRanksPerDimmRank; diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR5.cpp b/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.cpp similarity index 99% rename from DRAMSys/library/src/controller/checker/CheckerDDR5.cpp rename to extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.cpp index 5a6d92ef..d1c9d87b 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR5.cpp +++ b/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.cpp @@ -32,10 +32,12 @@ * Author: Lukas Steiner */ -#include - #include "CheckerDDR5.h" +#include "DRAMSys/common/DebugManager.h" + +#include + using namespace sc_core; using namespace tlm; diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR5.h b/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.h similarity index 95% rename from DRAMSys/library/src/controller/checker/CheckerDDR5.h rename to extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.h index 62ddf7d7..c03cd051 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR5.h +++ b/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.h @@ -38,10 +38,11 @@ #include #include -#include "CheckerIF.h" -#include "../../configuration/memspec/MemSpecDDR5.h" -#include "../../configuration/Configuration.h" -#include "../../common/utils.h" +#include + +#include +#include +#include class CheckerDDR5 final : public CheckerIF { diff --git a/DRAMSys/library/src/simulation/dram/DramDDR5.cpp b/extensions/standards/DDR5/DRAMSys/simulation/dram/DramDDR5.cpp similarity index 85% rename from DRAMSys/library/src/simulation/dram/DramDDR5.cpp rename to extensions/standards/DDR5/DRAMSys/simulation/dram/DramDDR5.cpp index 135ff852..95c35db3 100644 --- a/DRAMSys/library/src/simulation/dram/DramDDR5.cpp +++ b/extensions/standards/DDR5/DRAMSys/simulation/dram/DramDDR5.cpp @@ -34,18 +34,14 @@ */ #include "DramDDR5.h" -#include "../../configuration/Configuration.h" -#include "../../configuration/memspec/MemSpecDDR5.h" using namespace sc_core; -DramDDR5::DramDDR5(const sc_module_name& name, const Configuration& config, - TemperatureController& temperatureController) +DramDDR5::DramDDR5(const sc_module_name& name, const Configuration& config) : Dram(name, config) { - if (storeMode == Configuration::StoreMode::ErrorModel) - SC_REPORT_FATAL("DramDDR5", "Error Model not supported for DDR5"); - +#ifdef DRAMPOWER if (powerAnalysis) SC_REPORT_FATAL("DramDDR5", "DRAMPower does not support DDR5"); +#endif } diff --git a/DRAMSys/library/src/simulation/dram/DramDDR5.h b/extensions/standards/DDR5/DRAMSys/simulation/dram/DramDDR5.h similarity index 93% rename from DRAMSys/library/src/simulation/dram/DramDDR5.h rename to extensions/standards/DDR5/DRAMSys/simulation/dram/DramDDR5.h index 039ebae8..1e06dba3 100644 --- a/DRAMSys/library/src/simulation/dram/DramDDR5.h +++ b/extensions/standards/DDR5/DRAMSys/simulation/dram/DramDDR5.h @@ -36,16 +36,14 @@ #ifndef DRAMDDR5_H #define DRAMDDR5_H -#include +#include "DRAMSys/simulation/dram/Dram.h" -#include "Dram.h" -#include "../TemperatureController.h" +#include class DramDDR5 : public Dram { public: - DramDDR5(const sc_core::sc_module_name& name, const Configuration& config, - TemperatureController& temperatureController); + DramDDR5(const sc_core::sc_module_name& name, const Configuration& config); SC_HAS_PROCESS(DramDDR5); }; diff --git a/extensions/standards/HBM3/CMakeLists.txt b/extensions/standards/HBM3/CMakeLists.txt new file mode 100644 index 00000000..46de65f7 --- /dev/null +++ b/extensions/standards/HBM3/CMakeLists.txt @@ -0,0 +1,14 @@ +option(DRAMSYS_EXTENSION_HBM3_ENABLE "Enable DRAMSys HBM3 Support" ON) + +if(DRAMSYS_EXTENSION_HBM3_ENABLE) + message(STATUS " * HBM3") + + file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS *.cpp) + file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS *.h;*.hpp) + + target_sources(DRAMSys_libdramsys PRIVATE ${SOURCE_FILES} ${HEADER_FILES}) + target_include_directories(DRAMSys_libdramsys PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + target_compile_definitions(DRAMSys_libdramsys PUBLIC HBM3_SIM) + + build_source_group() +endif() \ No newline at end of file diff --git a/DRAMSys/library/src/configuration/memspec/MemSpecHBM3.cpp b/extensions/standards/HBM3/DRAMSys/configuration/memspec/MemSpecHBM3.cpp similarity index 98% rename from DRAMSys/library/src/configuration/memspec/MemSpecHBM3.cpp rename to extensions/standards/HBM3/DRAMSys/configuration/memspec/MemSpecHBM3.cpp index d5aeaada..7a4251c7 100644 --- a/DRAMSys/library/src/configuration/memspec/MemSpecHBM3.cpp +++ b/extensions/standards/HBM3/DRAMSys/configuration/memspec/MemSpecHBM3.cpp @@ -36,13 +36,13 @@ #include -#include "../../common/utils.h" +#include #include "MemSpecHBM3.h" using namespace sc_core; using namespace tlm; -MemSpecHBM3::MemSpecHBM3(const DRAMSysConfiguration::MemSpec &memSpec) +MemSpecHBM3::MemSpecHBM3(const DRAMSys::Config::MemSpec &memSpec) : MemSpec(memSpec, MemoryType::HBM3, memSpec.memArchitectureSpec.entries.at("nbrOfChannels"), memSpec.memArchitectureSpec.entries.at("nbrOfPseudoChannels"), diff --git a/DRAMSys/library/src/configuration/memspec/MemSpecHBM3.h b/extensions/standards/HBM3/DRAMSys/configuration/memspec/MemSpecHBM3.h similarity index 96% rename from DRAMSys/library/src/configuration/memspec/MemSpecHBM3.h rename to extensions/standards/HBM3/DRAMSys/configuration/memspec/MemSpecHBM3.h index f9a32241..02126885 100644 --- a/DRAMSys/library/src/configuration/memspec/MemSpecHBM3.h +++ b/extensions/standards/HBM3/DRAMSys/configuration/memspec/MemSpecHBM3.h @@ -38,12 +38,12 @@ #define MemSpecHBM3_H #include -#include "MemSpec.h" +#include class MemSpecHBM3 final : public MemSpec { public: - explicit MemSpecHBM3(const DRAMSysConfiguration::MemSpec &memSpec); + explicit MemSpecHBM3(const DRAMSys::Config::MemSpec& memSpec); const unsigned RAAIMT; const unsigned RAAMMT; diff --git a/DRAMSys/library/src/controller/checker/CheckerHBM3.cpp b/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.cpp similarity index 99% rename from DRAMSys/library/src/controller/checker/CheckerHBM3.cpp rename to extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.cpp index 88fe561c..85cb7782 100644 --- a/DRAMSys/library/src/controller/checker/CheckerHBM3.cpp +++ b/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.cpp @@ -32,10 +32,12 @@ * Author: Lukas Steiner */ -#include - #include "CheckerHBM3.h" +#include "DRAMSys/common/DebugManager.h" + +#include + using namespace sc_core; using namespace tlm; diff --git a/DRAMSys/library/src/controller/checker/CheckerHBM3.h b/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.h similarity index 93% rename from DRAMSys/library/src/controller/checker/CheckerHBM3.h rename to extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.h index 8bd4423d..1215b2d0 100644 --- a/DRAMSys/library/src/controller/checker/CheckerHBM3.h +++ b/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.h @@ -38,9 +38,11 @@ #include #include -#include "CheckerIF.h" -#include "../../configuration/memspec/MemSpecHBM3.h" -#include "../../configuration/Configuration.h" +#include + +#include +#include +#include class CheckerHBM3 final : public CheckerIF { diff --git a/DRAMSys/library/src/simulation/dram/DramHBM3.cpp b/extensions/standards/HBM3/DRAMSys/simulation/dram/DramHBM3.cpp similarity index 85% rename from DRAMSys/library/src/simulation/dram/DramHBM3.cpp rename to extensions/standards/HBM3/DRAMSys/simulation/dram/DramHBM3.cpp index 0fee7304..62802a4d 100644 --- a/DRAMSys/library/src/simulation/dram/DramHBM3.cpp +++ b/extensions/standards/HBM3/DRAMSys/simulation/dram/DramHBM3.cpp @@ -34,18 +34,17 @@ */ #include "DramHBM3.h" -#include "../../configuration/Configuration.h" -#include "../../configuration/memspec/MemSpecHBM3.h" + +#include +#include using namespace sc_core; -DramHBM3::DramHBM3(const sc_module_name& name, const Configuration& config, - TemperatureController& temperatureController) +DramHBM3::DramHBM3(const sc_module_name& name, const Configuration& config) : Dram(name, config) { - if (storeMode == Configuration::StoreMode::ErrorModel) - SC_REPORT_FATAL("DramHBM3", "Error Model not supported for HBM3"); - +#ifdef DRAMPOWER if (powerAnalysis) SC_REPORT_FATAL("DramHBM3", "DRAMPower does not support HBM3"); +#endif } diff --git a/DRAMSys/library/src/simulation/dram/DramHBM3.h b/extensions/standards/HBM3/DRAMSys/simulation/dram/DramHBM3.h similarity index 93% rename from DRAMSys/library/src/simulation/dram/DramHBM3.h rename to extensions/standards/HBM3/DRAMSys/simulation/dram/DramHBM3.h index e1137002..a5d2d67e 100644 --- a/DRAMSys/library/src/simulation/dram/DramHBM3.h +++ b/extensions/standards/HBM3/DRAMSys/simulation/dram/DramHBM3.h @@ -36,16 +36,14 @@ #ifndef DRAMHBM3_H #define DRAMHBM3_H -#include +#include "DRAMSys/simulation/dram/Dram.h" -#include "Dram.h" -#include "../TemperatureController.h" +#include class DramHBM3 : public Dram { public: - DramHBM3(const sc_core::sc_module_name &name, const Configuration& config, - TemperatureController& temperatureController); + DramHBM3(const sc_core::sc_module_name &name, const Configuration& config); SC_HAS_PROCESS(DramHBM3); }; diff --git a/extensions/standards/LPDDR5/CMakeLists.txt b/extensions/standards/LPDDR5/CMakeLists.txt new file mode 100644 index 00000000..fae4a84f --- /dev/null +++ b/extensions/standards/LPDDR5/CMakeLists.txt @@ -0,0 +1,14 @@ +option(DRAMSYS_EXTENSION_LPDDR5_ENABLE "Enable DRAMSys LPDDR5 Support" ON) + +if(DRAMSYS_EXTENSION_LPDDR5_ENABLE) + message(STATUS " * LPDDR5") + + file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS *.cpp) + file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS *.h;*.hpp) + + target_sources(DRAMSys_libdramsys PRIVATE ${SOURCE_FILES} ${HEADER_FILES}) + target_include_directories(DRAMSys_libdramsys PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + target_compile_definitions(DRAMSys_libdramsys PUBLIC LPDDR5_SIM) + + build_source_group() +endif() \ No newline at end of file diff --git a/DRAMSys/library/src/configuration/memspec/MemSpecLPDDR5.cpp b/extensions/standards/LPDDR5/DRAMSys/configuration/memspec/MemSpecLPDDR5.cpp similarity index 98% rename from DRAMSys/library/src/configuration/memspec/MemSpecLPDDR5.cpp rename to extensions/standards/LPDDR5/DRAMSys/configuration/memspec/MemSpecLPDDR5.cpp index dcf670a9..7754f188 100644 --- a/DRAMSys/library/src/configuration/memspec/MemSpecLPDDR5.cpp +++ b/extensions/standards/LPDDR5/DRAMSys/configuration/memspec/MemSpecLPDDR5.cpp @@ -33,15 +33,16 @@ * Lukas Steiner */ -#include - -#include "../../common/utils.h" #include "MemSpecLPDDR5.h" +#include + +#include + using namespace sc_core; using namespace tlm; -MemSpecLPDDR5::MemSpecLPDDR5(const DRAMSysConfiguration::MemSpec &memSpec) +MemSpecLPDDR5::MemSpecLPDDR5(const DRAMSys::Config::MemSpec &memSpec) : MemSpec(memSpec, MemoryType::LPDDR5, memSpec.memArchitectureSpec.entries.at("nbrOfChannels"), 1, diff --git a/DRAMSys/library/src/configuration/memspec/MemSpecLPDDR5.h b/extensions/standards/LPDDR5/DRAMSys/configuration/memspec/MemSpecLPDDR5.h similarity index 95% rename from DRAMSys/library/src/configuration/memspec/MemSpecLPDDR5.h rename to extensions/standards/LPDDR5/DRAMSys/configuration/memspec/MemSpecLPDDR5.h index 1a356ecc..49b1c284 100644 --- a/DRAMSys/library/src/configuration/memspec/MemSpecLPDDR5.h +++ b/extensions/standards/LPDDR5/DRAMSys/configuration/memspec/MemSpecLPDDR5.h @@ -37,13 +37,14 @@ #define MEMSPECLPDDR5_H #include -#include "MemSpec.h" -#include "../../common/third_party/nlohmann/single_include/nlohmann/json.hpp" +#include + +#include class MemSpecLPDDR5 final : public MemSpec { public: - explicit MemSpecLPDDR5(const DRAMSysConfiguration::MemSpec &memSpec); + explicit MemSpecLPDDR5(const DRAMSys::Config::MemSpec &memSpec); // Memspec Variables: const sc_core::sc_time tREFI; diff --git a/DRAMSys/library/src/controller/checker/CheckerLPDDR5.cpp b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp similarity index 99% rename from DRAMSys/library/src/controller/checker/CheckerLPDDR5.cpp rename to extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp index 59e1c1ee..f5f68f3a 100644 --- a/DRAMSys/library/src/controller/checker/CheckerLPDDR5.cpp +++ b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp @@ -32,10 +32,12 @@ * Author: Lukas Steiner */ -#include - #include "CheckerLPDDR5.h" +#include "DRAMSys/common/DebugManager.h" + +#include + using namespace sc_core; using namespace tlm; diff --git a/DRAMSys/library/src/controller/checker/CheckerLPDDR5.h b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.h similarity index 94% rename from DRAMSys/library/src/controller/checker/CheckerLPDDR5.h rename to extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.h index b6a8f52c..eeec8f6d 100644 --- a/DRAMSys/library/src/controller/checker/CheckerLPDDR5.h +++ b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.h @@ -38,10 +38,11 @@ #include #include -#include "CheckerIF.h" -#include "../../configuration/memspec/MemSpecLPDDR5.h" -#include "../../configuration/Configuration.h" -#include "../../common/utils.h" +#include + +#include +#include +#include class CheckerLPDDR5 final : public CheckerIF { diff --git a/DRAMSys/library/src/simulation/dram/DramLPDDR5.cpp b/extensions/standards/LPDDR5/DRAMSys/simulation/dram/DramLPDDR5.cpp similarity index 84% rename from DRAMSys/library/src/simulation/dram/DramLPDDR5.cpp rename to extensions/standards/LPDDR5/DRAMSys/simulation/dram/DramLPDDR5.cpp index 58e19439..156d0946 100644 --- a/DRAMSys/library/src/simulation/dram/DramLPDDR5.cpp +++ b/extensions/standards/LPDDR5/DRAMSys/simulation/dram/DramLPDDR5.cpp @@ -35,19 +35,17 @@ #include "DramLPDDR5.h" -#include "Dram.h" -#include "../../configuration/Configuration.h" -#include "../../configuration/memspec/MemSpecLPDDR5.h" +#include +#include + using namespace sc_core; -DramLPDDR5::DramLPDDR5(const sc_module_name& name, const Configuration& config, - TemperatureController& temperatureController) +DramLPDDR5::DramLPDDR5(const sc_module_name& name, const Configuration& config) : Dram(name, config) { - if (storeMode == Configuration::StoreMode::ErrorModel) - SC_REPORT_FATAL("DramLPDDR5", "Error Model not supported for LPDDR5"); - +#ifdef DRAMPOWER if (powerAnalysis) SC_REPORT_FATAL("DramLPDDR5", "DRAMPower does not support LPDDR5"); +#endif } diff --git a/DRAMSys/library/src/simulation/dram/DramLPDDR5.h b/extensions/standards/LPDDR5/DRAMSys/simulation/dram/DramLPDDR5.h similarity index 93% rename from DRAMSys/library/src/simulation/dram/DramLPDDR5.h rename to extensions/standards/LPDDR5/DRAMSys/simulation/dram/DramLPDDR5.h index 2326ab75..62ce647b 100644 --- a/DRAMSys/library/src/simulation/dram/DramLPDDR5.h +++ b/extensions/standards/LPDDR5/DRAMSys/simulation/dram/DramLPDDR5.h @@ -36,16 +36,14 @@ #ifndef DRAMLPDDR5_H #define DRAMLPDDR5_H -#include +#include "DRAMSys/simulation/dram/Dram.h" -#include "Dram.h" -#include "../TemperatureController.h" +#include class DramLPDDR5 : public Dram { public: - DramLPDDR5(const sc_core::sc_module_name& name, const Configuration& config, - TemperatureController& temperatureController); + DramLPDDR5(const sc_core::sc_module_name& name, const Configuration& config); SC_HAS_PROCESS(DramLPDDR5); }; diff --git a/lib/nlohmann_json/CMakeLists.txt b/lib/nlohmann_json/CMakeLists.txt new file mode 100644 index 00000000..cd30eaff --- /dev/null +++ b/lib/nlohmann_json/CMakeLists.txt @@ -0,0 +1,10 @@ +######################################## +### nlohmann_json ### +######################################## + +project(nlohmann_json VERSION 3.11.2) + +add_library(${PROJECT_NAME} INTERFACE) +target_include_directories(${PROJECT_NAME} INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include") + +add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) \ No newline at end of file diff --git a/lib/nlohmann_json/include/nlohmann/json.hpp b/lib/nlohmann_json/include/nlohmann/json.hpp new file mode 100644 index 00000000..e11f5296 --- /dev/null +++ b/lib/nlohmann_json/include/nlohmann/json.hpp @@ -0,0 +1,24640 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file docs/README.md. * +\****************************************************************************/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 2 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 2 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // nullptr_t +#include // exception +#if JSON_DIAGNOSTICS + #include // accumulate +#endif +#include // runtime_error +#include // to_string +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // declval, pair +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + + +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson +// SPDX-License-Identifier: MIT + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// #include + + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1); + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + + +// inspired from https://stackoverflow.com/a/26745591 +// allows to call any std function as if (e.g. with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif + +#if JSON_HAS_THREE_WAY_COMPARISON + #include // partial_ordering +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +#if JSON_HAS_THREE_WAY_COMPARISON + inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* +#else + inline bool operator<(const value_t lhs, const value_t rhs) noexcept +#endif +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); +#if JSON_HAS_THREE_WAY_COMPARISON + if (l_index < order.size() && r_index < order.size()) + { + return order[l_index] <=> order[r_index]; // *NOPAD* + } + return std::partial_ordering::unordered; +#else + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +#endif +} + +// GCC selects the built-in operator< over an operator rewritten from +// a user-defined spaceship operator +// Clang, MSVC, and ICC select the rewritten candidate +// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) +#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + return std::is_lt(lhs <=> rhs); // *NOPAD* +} +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +template +inline void replace_substring(StringType& s, const StringType& f, + const StringType& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != StringType::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +template +inline StringType escape(StringType s) +{ + replace_substring(s, StringType{"~"}, StringType{"~0"}); + replace_substring(s, StringType{"/"}, StringType{"~1"}); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +template +static void unescape(StringType& s) +{ + replace_substring(s, StringType{"~1"}, StringType{"/"}); + replace_substring(s, StringType{"~0"}, StringType{"~"}); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // size_t + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +inline constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval +#include // tuple + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // random_access_iterator_tag + +// #include + +// #include + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ + #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + #include // int64_t, uint64_t + #include // map + #include // allocator + #include // string + #include // vector + + // #include + + + /*! + @brief namespace for Niels Lohmann + @see https://github.com/nlohmann + @since version 1.0.0 + */ + NLOHMANN_JSON_NAMESPACE_BEGIN + + /*! + @brief default JSONSerializer template argument + + This serializer ignores the template arguments and uses ADL + ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) + for serialization. + */ + template + struct adl_serializer; + + /// a class to store JSON values + /// @sa https://json.nlohmann.me/api/basic_json/ + template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector, // cppcheck-suppress syntaxError + class CustomBaseClass = void> + class basic_json; + + /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document + /// @sa https://json.nlohmann.me/api/json_pointer/ + template + class json_pointer; + + /*! + @brief default specialization + @sa https://json.nlohmann.me/api/json/ + */ + using json = basic_json<>; + + /// @brief a minimal map-like container that preserves insertion order + /// @sa https://json.nlohmann.me/api/ordered_map/ + template + struct ordered_map; + + /// @brief specialization that maintains the insertion order of object keys + /// @sa https://json.nlohmann.me/api/ordered_json/ + using ordered_json = basic_json; + + NLOHMANN_JSON_NAMESPACE_END + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& + is_complete_type < + detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template