Merge branch 'develop' into contact_info
# Conflicts: # README.md
This commit is contained in:
@@ -14,6 +14,7 @@ build:
|
||||
after_script:
|
||||
- find . -name "*.o" -type f -delete
|
||||
- find . -name "*.a" -type f -delete
|
||||
- rm -r build/coverage/_deps
|
||||
artifacts:
|
||||
paths:
|
||||
- build/coverage
|
||||
@@ -26,6 +27,8 @@ test:
|
||||
script:
|
||||
- cd build/coverage
|
||||
- ctest --output-on-failure -j$(nproc)
|
||||
after_script:
|
||||
- find . -name "*.tdb" -type f -delete
|
||||
artifacts:
|
||||
paths:
|
||||
- build/coverage
|
||||
|
||||
@@ -89,6 +89,8 @@ set(DRAMSYS_RESOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/configs")
|
||||
set(DRAMSYS_EXTENSIONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extensions")
|
||||
|
||||
### Build options ###
|
||||
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
|
||||
|
||||
option(DRAMSYS_BUILD_TESTS "Build DRAMSys unit tests" OFF)
|
||||
option(DRAMSYS_BUILD_BENCHMARKS "Build DRAMSys benchmarks" OFF)
|
||||
option(DRAMSYS_VERBOSE_CMAKE_OUTPUT "Show detailed CMake output" OFF)
|
||||
@@ -156,6 +158,9 @@ if (NOT TARGET SystemC::systemc)
|
||||
FetchContent_MakeAvailable(systemc)
|
||||
endif()
|
||||
|
||||
# Set include directories to SYSTEM to suppress warnings
|
||||
set_target_properties(systemc PROPERTIES SYSTEM TRUE)
|
||||
|
||||
### DRAMPower ###
|
||||
if (DRAMSYS_WITH_DRAMPOWER)
|
||||
FetchContent_Declare(
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
},
|
||||
{
|
||||
"name": "dev",
|
||||
"generator": "Unix Makefiles",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build",
|
||||
"inherits": [
|
||||
"dev-mode",
|
||||
@@ -70,8 +70,8 @@
|
||||
],
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Debug",
|
||||
"CMAKE_CXX_FLAGS": "-Wall -Wextra -Wpedantic"
|
||||
"CMAKE_CXX_FLAGS": "-Wall -Wextra -Wpedantic -fdiagnostics-color=always"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
35
NOTICE
Normal file
35
NOTICE
Normal file
@@ -0,0 +1,35 @@
|
||||
NOTICE
|
||||
|
||||
This software uses the following third-party libraries:
|
||||
|
||||
1. SQLite3
|
||||
License: Public Domain
|
||||
License URL: https://www.sqlite.org/copyright.html
|
||||
|
||||
2. NLohmann JSON
|
||||
License: MIT
|
||||
License URL: https://github.com/nlohmann/json/blob/develop/LICENSE.MIT
|
||||
|
||||
3. SystemC
|
||||
License: Apache-2.0
|
||||
License URL: https://github.com/accellera-official/systemc/blob/main/LICENSE
|
||||
|
||||
4. Qt5
|
||||
License: LGPL-3.0-only
|
||||
License URL: https://doc.qt.io/qt-5/lgpl.html
|
||||
|
||||
5. Qwt6 (Qt Widgets for Technical Applications)
|
||||
License: Qwt License (based on LGPL-2.1)
|
||||
License URL: https://qwt.sourceforge.io/qwtlicense.html
|
||||
|
||||
6. Google Test
|
||||
License: BSD-3-Clause
|
||||
License URL: https://github.com/google/googletest/blob/main/LICENSE
|
||||
|
||||
7. Google Benchmark
|
||||
License: Apache-2.0
|
||||
License URL: https://github.com/google/benchmark/blob/main/LICENSE
|
||||
|
||||
8. Pybind11
|
||||
License: BSD-3-Clause
|
||||
License URL: https://github.com/pybind/pybind11/blob/master/LICENSE
|
||||
42
README.md
42
README.md
@@ -58,21 +58,26 @@ To use DRAMSys, first clone the repository.
|
||||
|
||||
### Dependencies
|
||||
|
||||
DRAMSys requires a **C++17** compiler. The build process is based on **CMake** (minimum version **3.24**). Furthermore, the simulator is based on **SystemC**. SystemC is included with FetchContent and will be build automatically with the project. If you want to use a preinstalled SystemC version, export the environment variable `SYSTEMC_HOME` (SystemC installation directory). Also make sure that the SystemC library was built with the same C++ version.
|
||||
DRAMSys requires a **C++17** compiler. The build process is based on **CMake** (minimum version **3.24**). Furthermore, the simulator is based on **SystemC**. SystemC is included with FetchContent and will be build automatically with the project. If you want to use a preinstalled SystemC version, export the environment variable `SYSTEMC_HOME` (SystemC installation directory) and set the CMake option `DRAMSYS_USE_EXTERNAL_SYSTEMC`. Also make sure that the SystemC library was built with the same C++ version.
|
||||
|
||||
### Building DRAMSys
|
||||
|
||||
To build the standalone simulator for running memory trace files or traffic generators, create a build folder in the project root directory, then run CMake and make:
|
||||
To build the standalone simulator for running memory trace files or traffic generators, first configure the project using CMake, then build the project:
|
||||
|
||||
```bash
|
||||
```console
|
||||
$ cd DRAMSys
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
$ cmake ..
|
||||
$ make
|
||||
$ cmake -S . -B build
|
||||
$ cmake --build build
|
||||
```
|
||||
|
||||
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 only the DRAMSys library by disabling the CMake option `DRAMSYS_BUILD_CLI`.
|
||||
To include **DRAMPower** in your build enable the CMake option `DRAMSYS_WITH_DRAMPOWER`:
|
||||
```console
|
||||
$ cmake -B build -D DRAMSYS_WITH_DRAMPOWER=Y
|
||||
```
|
||||
|
||||
If you plan to integrate DRAMSys into your own SystemC TLM-2.0 project you can build only the DRAMSys library by disabling the CMake option `DRAMSYS_BUILD_CLI`.
|
||||
|
||||
In order to include any proprietary extensions such as the Trace Analyzer, enable the CMake option `DRAMSYS_ENABLE_EXTENSIONS`.
|
||||
|
||||
To build DRAMSys on Windows 10 we recommend to use the **Windows Subsystem for Linux (WSL)**.
|
||||
|
||||
@@ -80,7 +85,7 @@ To build DRAMSys on Windows 10 we recommend to use the **Windows Subsystem for L
|
||||
|
||||
From the build directory use the commands below to execute the DRAMSys standalone.
|
||||
|
||||
```bash
|
||||
```console
|
||||
$ cd bin
|
||||
$ ./DRAMSys
|
||||
```
|
||||
@@ -89,35 +94,42 @@ The default configuration file is *ddr4-example.json* located in *configs/*, the
|
||||
|
||||
To run DRAMSys with a specific configuration file:
|
||||
|
||||
```bash
|
||||
```console
|
||||
$ ./DRAMSys ../../configs/lpddr4-example.json
|
||||
```
|
||||
|
||||
To run DRAMSys with a specific configuration file and configuration folder:
|
||||
|
||||
```bash
|
||||
```console
|
||||
$ ./DRAMSys ../../tests/tests_regression/DDR3/ddr3-example.json ../../tests/tests_regression/DDR3/
|
||||
```
|
||||
|
||||
More information on the configuration can be found [here](configs/README.md).
|
||||
|
||||
## gem5 Coupling
|
||||
|
||||
There are two ways to couple DRAMSys with **gem5**:
|
||||
- Use the official integration of DRAMSys in gem5. More information can be found in `ext/dramsys` of the gem5 repository.
|
||||
- (Deprecated) Compile gem5 as a shared library and link it with DRAMSys, which is only supported in older versions of DRAMSys (tag v4.0).
|
||||
|
||||
## Development
|
||||
|
||||
Some additional development sources required for tests may be obtained using Git LFS.
|
||||
Make sure to have Git LFS installed through your system's package manager and set up for your user:
|
||||
```bash
|
||||
git lfs install
|
||||
```console
|
||||
$ git lfs install
|
||||
```
|
||||
|
||||
To make the additional files available, run:
|
||||
```bash
|
||||
git lfs pull
|
||||
```console
|
||||
$ git lfs pull
|
||||
```
|
||||
|
||||
## Third-party libraries
|
||||
|
||||
This application uses several third-party libraries.
|
||||
For detailed license information, please refer to the [NOTICE](NOTICE) file.
|
||||
|
||||
## Contact Information
|
||||
|
||||
Further questions about the simulator and the Trace Analyzer can be directed to:
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
### benches_dramsys ###
|
||||
###############################################
|
||||
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
|
||||
project(benches_dramsys)
|
||||
|
||||
add_executable(${PROJECT_NAME}
|
||||
|
||||
@@ -108,7 +108,14 @@ def maximum_data_rate(connection):
|
||||
width = memspec.getIntValue("memarchitecturespec", "nbrOfDevices") * memspec.getIntValue("memarchitecturespec", "width")
|
||||
except:
|
||||
width = memspec.getIntValue("memarchitecturespec", "width")
|
||||
clk = memspec.getIntValue("memtimingspec", "clkMhz")
|
||||
|
||||
# Backwards compatibility for traces where clkMHz was not yet replaced with tCK
|
||||
clk = None
|
||||
try:
|
||||
clk = 1000000 / memspec.getIntValue("memtimingspec", "tCK")
|
||||
except:
|
||||
clk = memspec.getIntValue("memtimingspec", "clkMhz")
|
||||
|
||||
rate = memspec.getIntValue("memarchitecturespec", "dataRate")
|
||||
if getPseudoChannelMode(connection):
|
||||
maxDataRate = float(clk) * float(width) * float(rate) * 2
|
||||
|
||||
@@ -58,6 +58,8 @@ void TraceAnalyzer::setUpGui()
|
||||
ui->setupUi(this);
|
||||
setUpStatusBar();
|
||||
ui->traceFileTabs->clear();
|
||||
|
||||
QObject::connect(ui->actionAbout_Qt, &QAction::triggered, qApp, &QApplication::aboutQt);
|
||||
}
|
||||
|
||||
TraceAnalyzer::TraceAnalyzer(QWidget* parent) :
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
<string>&Help</string>
|
||||
</property>
|
||||
<addaction name="actionAbout"/>
|
||||
<addaction name="actionAbout_Qt"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuRun">
|
||||
<property name="title">
|
||||
@@ -240,6 +241,14 @@
|
||||
<string>&Simulate...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionAbout_Qt">
|
||||
<property name="text">
|
||||
<string>About &Qt</string>
|
||||
</property>
|
||||
<property name="menuRole">
|
||||
<enum>QAction::AboutQtRole</enum>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
|
||||
@@ -553,7 +553,7 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command,
|
||||
lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank];
|
||||
if (lastCommandStart != scMaxTime)
|
||||
{
|
||||
if (lastBurstLengthByCommandAndBank[Command::RDA][bank] == 32)
|
||||
if (lastBurstLengthByCommandAndBank[Command::WRA][bank] == 32)
|
||||
earliestTimeToStart =
|
||||
std::max(earliestTimeToStart,
|
||||
lastCommandStart + memSpec.tWL + memSpec.BL_n_min_32 + memSpec.tCK +
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
"XPDLL": 20,
|
||||
"XS": 96,
|
||||
"XSDLL": 512,
|
||||
"clkMhz": 800
|
||||
"tCK": 1250
|
||||
}
|
||||
},
|
||||
"simconfig": {
|
||||
|
||||
@@ -41,7 +41,7 @@ project(DRAMSys_Configuration)
|
||||
file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS *.cpp)
|
||||
file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS *.h;*.hpp)
|
||||
|
||||
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES} ${HEADER_FILES})
|
||||
add_library(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
@@ -57,4 +57,4 @@ target_compile_definitions(${PROJECT_NAME}
|
||||
|
||||
add_library(DRAMSys::config ALIAS ${PROJECT_NAME})
|
||||
|
||||
build_source_group()
|
||||
build_source_group()
|
||||
|
||||
@@ -41,7 +41,7 @@ project(DRAMSys_libdramsys)
|
||||
file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS *.cpp)
|
||||
file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS *.h;*.hpp)
|
||||
|
||||
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES} ${HEADER_FILES})
|
||||
add_library(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
|
||||
@@ -75,6 +75,14 @@ McConfig::McConfig(const Config::McConfig& config, const MemSpec& memSpec) :
|
||||
config.BlockingWriteDelay.value_or(DEFAULT_BLOCKING_WRITE_DELAY_NS), sc_core::SC_NS))
|
||||
|
||||
{
|
||||
if (schedulerBuffer == Config::SchedulerBufferType::ReadWrite &&
|
||||
config.RequestBufferSize.has_value())
|
||||
{
|
||||
SC_REPORT_WARNING("McConfig",
|
||||
"RequestBufferSize ignored when using ReadWrite SchedulerBuffer. Use "
|
||||
"RequestBufferSizeRead and RequestBufferSizeWrite instead!");
|
||||
}
|
||||
|
||||
if (pagePolicy == Config::PagePolicyType::Invalid)
|
||||
SC_REPORT_FATAL("McConfig", "Invalid PagePolicy");
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS *.h;*.hpp)
|
||||
|
||||
list(FILTER SOURCE_FILES EXCLUDE REGEX "main.cpp")
|
||||
|
||||
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES} ${HEADER_FILES})
|
||||
add_library(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ project(DRAMSys_Util)
|
||||
file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS *.cpp)
|
||||
file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS *.h;*.hpp)
|
||||
|
||||
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES} ${HEADER_FILES})
|
||||
add_library(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
### tests_configuration ###
|
||||
###############################################
|
||||
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
|
||||
project(tests_configuration)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/test_configuration.cpp)
|
||||
|
||||
@@ -75,6 +75,7 @@ protected:
|
||||
addressMapBitVector({13, 14, 15}),
|
||||
addressMapBitVector({17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}),
|
||||
addressMapBitVector({33}),
|
||||
std::nullopt,
|
||||
std::nullopt};
|
||||
|
||||
DRAMSys::Config::McConfig mcConfig{PagePolicyType::Open,
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
### tests_dramsys ###
|
||||
###############################################
|
||||
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
|
||||
project(tests_dramsys)
|
||||
|
||||
file(GLOB_RECURSE SOURCE_FILES *.cpp)
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
"simconfig": {
|
||||
"AddressOffset": 0,
|
||||
"CheckTLM2Protocol": false,
|
||||
"DatabaseRecording": true,
|
||||
"DatabaseRecording": false,
|
||||
"Debug": false,
|
||||
"EnableWindowing": false,
|
||||
"PowerAnalysis": false,
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
"simconfig": {
|
||||
"AddressOffset": 0,
|
||||
"CheckTLM2Protocol": false,
|
||||
"DatabaseRecording": true,
|
||||
"DatabaseRecording": false,
|
||||
"Debug": false,
|
||||
"EnableWindowing": false,
|
||||
"PowerAnalysis": false,
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
### tests_regression ###
|
||||
###############################################
|
||||
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
|
||||
project(tests_regression)
|
||||
|
||||
find_program(SqlDiff sqldiff)
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
### tests_simulator ###
|
||||
###############################################
|
||||
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
|
||||
project(tests_simulator)
|
||||
|
||||
add_executable(${PROJECT_NAME}
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
### tests_util ###
|
||||
###############################################
|
||||
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
|
||||
project(tests_util)
|
||||
|
||||
file(GLOB_RECURSE SOURCE_FILES *.cpp)
|
||||
@@ -20,4 +18,4 @@ target_link_libraries(${PROJECT_NAME}
|
||||
|
||||
gtest_discover_tests(${PROJECT_NAME})
|
||||
|
||||
build_source_group()
|
||||
build_source_group()
|
||||
|
||||
Reference in New Issue
Block a user