Merge branch 'feat/remove_resource_directory' into 'develop'
Remove the concept of a resource directory See merge request ems/astdm/modeling.dram/dram.sys.5!115
This commit is contained in:
@@ -52,13 +52,12 @@ static void example_simulation(benchmark::State& state, Args&&... args)
|
|||||||
{
|
{
|
||||||
sc_core::sc_get_curr_simcontext()->reset();
|
sc_core::sc_get_curr_simcontext()->reset();
|
||||||
|
|
||||||
std::filesystem::path configFile(std::get<0>(args_tuple));
|
std::filesystem::path configFile = std::get<0>(args_tuple);
|
||||||
std::filesystem::path resourceDirectory("configs");
|
|
||||||
|
|
||||||
DRAMSys::Config::Configuration configuration =
|
DRAMSys::Config::Configuration configuration =
|
||||||
DRAMSys::Config::from_path(configFile.c_str());
|
DRAMSys::Config::from_path(configFile.c_str());
|
||||||
|
|
||||||
Simulator simulator(std::move(configuration), std::move(resourceDirectory));
|
Simulator simulator(std::move(configuration), configFile);
|
||||||
simulator.run();
|
simulator.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
{
|
|
||||||
"addressmapping": {
|
|
||||||
"RANK_BIT":[
|
|
||||||
30,
|
|
||||||
31
|
|
||||||
],
|
|
||||||
"BANK_BIT": [
|
|
||||||
27,
|
|
||||||
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
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"simulation": {
|
"simulation": {
|
||||||
"addressmapping": "am_ddr3_8x1Gbx8_dimm_p1KB_rbc.json",
|
"addressmapping": "addressmapping/am_ddr3_8x1Gbx8_dimm_p1KB_rbc.json",
|
||||||
"mcconfig": "fr_fcfs.json",
|
"mcconfig": "mcconfig/fr_fcfs.json",
|
||||||
"memspec": "MICRON_1Gb_DDR3-1600_8bit_G.json",
|
"memspec": "memspec/MICRON_1Gb_DDR3-1600_8bit_G.json",
|
||||||
"simconfig": "example.json",
|
"simconfig": "simconfig/example.json",
|
||||||
"simulationid": "ddr3-example",
|
"simulationid": "ddr3-example",
|
||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 800,
|
"clkMhz": 800,
|
||||||
"name": "example.stl"
|
"name": "traces/example.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"simulation": {
|
|
||||||
"addressmapping": "am_ddr3_8x1Gbx8_dimm_p1KB_brc.json",
|
|
||||||
"mcconfig": "fifoStrict.json",
|
|
||||||
"memspec": "MICRON_1Gb_DDR3-1600_8bit_G.json",
|
|
||||||
"simconfig": "gem5_se.json",
|
|
||||||
"simulationid": "ddr3-gem5-se"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"simulation": {
|
"simulation": {
|
||||||
"addressmapping": "am_ddr4_8x4Gbx8_dimm_p1KB_brc.json",
|
"addressmapping": "addressmapping/am_ddr4_8x4Gbx8_dimm_p1KB_brc.json",
|
||||||
"mcconfig": "fr_fcfs.json",
|
"mcconfig": "mcconfig/fr_fcfs.json",
|
||||||
"memspec": "JEDEC_4Gb_DDR4-1866_8bit_A.json",
|
"memspec": "memspec/JEDEC_4Gb_DDR4-1866_8bit_A.json",
|
||||||
"simconfig": "example.json",
|
"simconfig": "simconfig/example.json",
|
||||||
"simulationid": "ddr4-example",
|
"simulationid": "ddr4-example",
|
||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 200,
|
"clkMhz": 200,
|
||||||
"name": "example.stl"
|
"name": "traces/example.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,7 +147,7 @@
|
|||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 200,
|
"clkMhz": 200,
|
||||||
"name": "example.stl"
|
"name": "traces/example.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"simulation": {
|
"simulation": {
|
||||||
"addressmapping": "am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json",
|
"addressmapping": "addressmapping/am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json",
|
||||||
"mcconfig": "fr_fcfs.json",
|
"mcconfig": "mcconfig/fr_fcfs.json",
|
||||||
"memspec": "JEDEC_2x8x2Gbx4_DDR5-3200A.json",
|
"memspec": "memspec/JEDEC_2x8x2Gbx4_DDR5-3200A.json",
|
||||||
"simconfig": "example.json",
|
"simconfig": "simconfig/example.json",
|
||||||
"simulationid": "ddr5-example",
|
"simulationid": "ddr5-example",
|
||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 2000,
|
"clkMhz": 2000,
|
||||||
"name": "example.stl"
|
"name": "traces/example.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"simulation": {
|
"simulation": {
|
||||||
"addressmapping": "am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json",
|
"addressmapping": "addressmapping/am_ddr5_2x8x2Gbx4_dimm_p1KB_rbc.json",
|
||||||
"mcconfig": "fr_fcfs.json",
|
"mcconfig": "mcconfig/fr_fcfs.json",
|
||||||
"memspec": "JEDEC_2x8x2Gbx4_DDR5-3200A.json",
|
"memspec": "memspec/JEDEC_2x8x2Gbx4_DDR5-3200A.json",
|
||||||
"simconfig": "example.json",
|
"simconfig": "simconfig/example.json",
|
||||||
"simulationid": "ddr5-example",
|
"simulationid": "ddr5-example",
|
||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
"simulation": {
|
|
||||||
"addressmapping": "am_ddr5_2x2x8x4Gbx4_dimm_p1KB_rbc.json",
|
|
||||||
"mcconfig": "fr_fcfs_rfm.json",
|
|
||||||
"memspec": "JEDEC_2x2x8x4Gbx4_DDR5-3200A.json",
|
|
||||||
"simconfig": "example.json",
|
|
||||||
"simulationid": "ddr5-example",
|
|
||||||
"tracesetup": [
|
|
||||||
{
|
|
||||||
"clkMhz": 2000,
|
|
||||||
"type": "generator",
|
|
||||||
"name": "gen0",
|
|
||||||
"numRequests": 126000,
|
|
||||||
"rwRatio": 0.85,
|
|
||||||
"addressDistribution": "random",
|
|
||||||
"seed": 123456,
|
|
||||||
"maxPendingReadRequests": 24,
|
|
||||||
"maxPendingWriteRequests": 24
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"clkMhz": 4000,
|
|
||||||
"type": "hammer",
|
|
||||||
"name": "ham0",
|
|
||||||
"numRequests": 4000,
|
|
||||||
"rowIncrement": 2097152
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"simulation": {
|
"simulation": {
|
||||||
"addressmapping": "am_hbm2_8Gb_pc_brc.json",
|
"addressmapping": "addressmapping/am_hbm2_8Gb_pc_brc.json",
|
||||||
"mcconfig": "fr_fcfs.json",
|
"mcconfig": "mcconfig/fr_fcfs.json",
|
||||||
"memspec": "HBM2.json",
|
"memspec": "memspec/HBM2.json",
|
||||||
"simconfig": "example.json",
|
"simconfig": "simconfig/example.json",
|
||||||
"simulationid": "hbm2-example",
|
"simulationid": "hbm2-example",
|
||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 1000,
|
"clkMhz": 1000,
|
||||||
"name": "example.stl"
|
"name": "traces/example.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"simulation": {
|
"simulation": {
|
||||||
"addressmapping": "am_hbm3_8Gb_pc_brc.json",
|
"addressmapping": "addressmapping/am_hbm3_8Gb_pc_brc.json",
|
||||||
"mcconfig": "fr_fcfs.json",
|
"mcconfig": "mcconfig/fr_fcfs.json",
|
||||||
"memspec": "HBM3.json",
|
"memspec": "memspec/HBM3.json",
|
||||||
"simconfig": "example.json",
|
"simconfig": "simconfig/example.json",
|
||||||
"simulationid": "hbm3-example",
|
"simulationid": "hbm3-example",
|
||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"simulation": {
|
"simulation": {
|
||||||
"addressmapping": "am_lpddr4_8Gbx16_brc.json",
|
"addressmapping": "addressmapping/am_lpddr4_8Gbx16_brc.json",
|
||||||
"mcconfig": "fr_fcfs.json",
|
"mcconfig": "mcconfig/fr_fcfs.json",
|
||||||
"memspec": "JEDEC_8Gb_LPDDR4-3200_16bit.json",
|
"memspec": "memspec/JEDEC_8Gb_LPDDR4-3200_16bit.json",
|
||||||
"simconfig": "example.json",
|
"simconfig": "simconfig/example.json",
|
||||||
"simulationid": "lpddr4-example",
|
"simulationid": "lpddr4-example",
|
||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 200,
|
"clkMhz": 200,
|
||||||
"name": "example.stl"
|
"name": "traces/example.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"simulation": {
|
"simulation": {
|
||||||
"addressmapping": "am_lpddr5_1Gbx16_BG_rocobabg.json",
|
"addressmapping": "addressmapping/am_lpddr5_1Gbx16_BG_rocobabg.json",
|
||||||
"mcconfig": "fr_fcfs_refp2b.json",
|
"mcconfig": "mcconfig/fr_fcfs_refp2b.json",
|
||||||
"memspec": "JEDEC_1Gbx16_BG_LPDDR5-6400.json",
|
"memspec": "memspec/JEDEC_1Gbx16_BG_LPDDR5-6400.json",
|
||||||
"simconfig": "example.json",
|
"simconfig": "simconfig/example.json",
|
||||||
"simulationid": "lpddr5-example",
|
"simulationid": "lpddr5-example",
|
||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 200,
|
"clkMhz": 200,
|
||||||
"name": "example.stl"
|
"name": "traces/example.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
{
|
|
||||||
"memspec": {
|
|
||||||
"memarchitecturespec": {
|
|
||||||
"burstLength": 8,
|
|
||||||
"dataRate": 2,
|
|
||||||
"nbrOfBanks": 8,
|
|
||||||
"nbrOfColumns": 1024,
|
|
||||||
"nbrOfRanks": 4,
|
|
||||||
"nbrOfRows": 16384,
|
|
||||||
"width": 8,
|
|
||||||
"nbrOfDevicesOnDIMM": 8,
|
|
||||||
"nbrOfChannels": 1
|
|
||||||
},
|
|
||||||
"memoryId": "MICRON_1Gb_DDR3-1600_8bit_G",
|
|
||||||
"memoryType": "DDR3",
|
|
||||||
"mempowerspec": {
|
|
||||||
"idd0": 70.0,
|
|
||||||
"idd2n": 45.0,
|
|
||||||
"idd2p0": 12.0,
|
|
||||||
"idd2p1": 30.0,
|
|
||||||
"idd3n": 45.0,
|
|
||||||
"idd3p0": 35.0,
|
|
||||||
"idd3p1": 35.0,
|
|
||||||
"idd4r": 140.0,
|
|
||||||
"idd4w": 145.0,
|
|
||||||
"idd5": 170.0,
|
|
||||||
"idd6": 8.0,
|
|
||||||
"vdd": 1.5
|
|
||||||
},
|
|
||||||
"memtimingspec": {
|
|
||||||
"AL": 0,
|
|
||||||
"CCD": 4,
|
|
||||||
"CKE": 3,
|
|
||||||
"CKESR": 4,
|
|
||||||
"CL": 10,
|
|
||||||
"DQSCK": 0,
|
|
||||||
"FAW": 24,
|
|
||||||
"RAS": 28,
|
|
||||||
"RC": 38,
|
|
||||||
"RCD": 10,
|
|
||||||
"REFI": 6240,
|
|
||||||
"RFC": 88,
|
|
||||||
"RL": 10,
|
|
||||||
"RP": 10,
|
|
||||||
"RRD": 5,
|
|
||||||
"RTP": 6,
|
|
||||||
"WL": 8,
|
|
||||||
"WR": 12,
|
|
||||||
"WTR": 6,
|
|
||||||
"XP": 6,
|
|
||||||
"XPDLL": 20,
|
|
||||||
"XS": 96,
|
|
||||||
"XSDLL": 512,
|
|
||||||
"ACTPDEN": 1,
|
|
||||||
"PRPDEN": 1,
|
|
||||||
"REFPDEN": 1,
|
|
||||||
"RTRS": 1,
|
|
||||||
"tCK": 1250
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"simulation": {
|
|
||||||
"addressmapping": "am_ranktest.json",
|
|
||||||
"mcconfig": "fr_fcfs.json",
|
|
||||||
"memspec": "memspec_ranktest.json",
|
|
||||||
"simconfig": "example.json",
|
|
||||||
"simulationid": "ranktest",
|
|
||||||
"tracesetup": [
|
|
||||||
{
|
|
||||||
"clkMhz": 200,
|
|
||||||
"name": "ranktest.stl"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"simulation": {
|
"simulation": {
|
||||||
"addressmapping": "am_stt-mram_8x2Gbx8_dimm_p1KB_rbc.json",
|
"addressmapping": "addressmapping/am_stt-mram_8x2Gbx8_dimm_p1KB_rbc.json",
|
||||||
"mcconfig": "fr_fcfs_noref.json",
|
"mcconfig": "mcconfig/fr_fcfs_noref.json",
|
||||||
"memspec": "STT-MRAM-1.2x.json",
|
"memspec": "memspec/STT-MRAM-1.2x.json",
|
||||||
"simconfig": "example.json",
|
"simconfig": "simconfig/example.json",
|
||||||
"simulationid": "stt-mram-example",
|
"simulationid": "stt-mram-example",
|
||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 800,
|
"clkMhz": 800,
|
||||||
"name": "example.stl"
|
"name": "traces/example.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
0: write 0x00000000
|
|
||||||
1: write 0x08000000
|
|
||||||
2: write 0x10000000
|
|
||||||
3: write 0x18000000
|
|
||||||
4: write 0x20000000
|
|
||||||
5: write 0x28000000
|
|
||||||
6: write 0x30000000
|
|
||||||
7: write 0x38000000
|
|
||||||
8: write 0x40000000
|
|
||||||
9: write 0x48000000
|
|
||||||
10: write 0x50000000
|
|
||||||
11: write 0x58000000
|
|
||||||
12: write 0x60000000
|
|
||||||
13: write 0x68000000
|
|
||||||
14: write 0x70000000
|
|
||||||
15: write 0x78000000
|
|
||||||
16: write 0x80000000
|
|
||||||
17: write 0x88000000
|
|
||||||
18: write 0x90000000
|
|
||||||
19: write 0x98000000
|
|
||||||
20: write 0xA0000000
|
|
||||||
21: write 0xA8000000
|
|
||||||
22: write 0xB0000000
|
|
||||||
23: write 0xB8000000
|
|
||||||
24: write 0xC0000000
|
|
||||||
25: write 0xC8000000
|
|
||||||
26: write 0xD0000000
|
|
||||||
27: write 0xD8000000
|
|
||||||
28: write 0xE0000000
|
|
||||||
29: write 0xE8000000
|
|
||||||
30: write 0xF0000000
|
|
||||||
31: write 0xF8000000
|
|
||||||
32: write 0x00000000
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"simulation": {
|
|
||||||
"addressmapping": "am_wideio_thermal.json",
|
|
||||||
"mcconfig": "fr_fcfs.json",
|
|
||||||
"memspec": "JEDEC_256Mb_WIDEIO-200_128bit.json",
|
|
||||||
"simconfig": "wideio_thermal.json",
|
|
||||||
"simulationid": "wideio-example",
|
|
||||||
"tracesetup": [
|
|
||||||
{
|
|
||||||
"clkMhz": 1000,
|
|
||||||
"name": "test_error.stl"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -50,10 +50,5 @@ target_link_libraries(configuration
|
|||||||
nlohmann_json::nlohmann_json
|
nlohmann_json::nlohmann_json
|
||||||
)
|
)
|
||||||
|
|
||||||
target_compile_definitions(configuration
|
|
||||||
PUBLIC
|
|
||||||
DRAMSYS_RESOURCE_DIR="${DRAMSYS_RESOURCE_DIR}"
|
|
||||||
)
|
|
||||||
|
|
||||||
target_compile_features(configuration PUBLIC cxx_std_17)
|
target_compile_features(configuration PUBLIC cxx_std_17)
|
||||||
add_library(DRAMSys::config ALIAS configuration)
|
add_library(DRAMSys::config ALIAS configuration)
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ namespace DRAMSys::Config
|
|||||||
struct AddressMapping
|
struct AddressMapping
|
||||||
{
|
{
|
||||||
static constexpr std::string_view KEY = "addressmapping";
|
static constexpr std::string_view KEY = "addressmapping";
|
||||||
static constexpr std::string_view SUB_DIR = "addressmapping";
|
|
||||||
|
|
||||||
using BitEntry = std::variant<unsigned int, std::vector<unsigned int>>;
|
using BitEntry = std::variant<unsigned int, std::vector<unsigned int>>;
|
||||||
|
|
||||||
|
|||||||
@@ -36,14 +36,14 @@
|
|||||||
#include "DRAMSysConfiguration.h"
|
#include "DRAMSysConfiguration.h"
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
namespace DRAMSys::Config
|
namespace DRAMSys::Config
|
||||||
{
|
{
|
||||||
|
|
||||||
Configuration from_path(std::string_view path, std::string_view resourceDirectory)
|
Configuration from_path(std::filesystem::path baseConfig)
|
||||||
{
|
{
|
||||||
std::ifstream file(path.data());
|
std::ifstream file(baseConfig);
|
||||||
|
std::filesystem::path baseDir = baseConfig.parent_path();
|
||||||
|
|
||||||
enum class SubConfig
|
enum class SubConfig
|
||||||
{
|
{
|
||||||
@@ -59,7 +59,7 @@ Configuration from_path(std::string_view path, std::string_view resourceDirector
|
|||||||
// with the actual json data.
|
// with the actual json data.
|
||||||
std::function<bool(int depth, nlohmann::detail::parse_event_t event, json_t& parsed)>
|
std::function<bool(int depth, nlohmann::detail::parse_event_t event, json_t& parsed)>
|
||||||
parser_callback;
|
parser_callback;
|
||||||
parser_callback = [&parser_callback, ¤t_sub_config, resourceDirectory](
|
parser_callback = [&parser_callback, ¤t_sub_config, baseDir](
|
||||||
int depth, nlohmann::detail::parse_event_t event, json_t& parsed) -> bool
|
int depth, nlohmann::detail::parse_event_t event, json_t& parsed) -> bool
|
||||||
{
|
{
|
||||||
using nlohmann::detail::parse_event_t;
|
using nlohmann::detail::parse_event_t;
|
||||||
@@ -90,13 +90,10 @@ Configuration from_path(std::string_view path, std::string_view resourceDirector
|
|||||||
if (event == parse_event_t::value && current_sub_config != SubConfig::Unkown)
|
if (event == parse_event_t::value && current_sub_config != SubConfig::Unkown)
|
||||||
{
|
{
|
||||||
// Replace name of json file with actual json data
|
// Replace name of json file with actual json data
|
||||||
auto parse_json = [&parser_callback,
|
auto parse_json = [&parser_callback, baseDir](std::string_view sub_config_key,
|
||||||
resourceDirectory](std::string_view base_dir,
|
|
||||||
std::string_view sub_config_key,
|
|
||||||
const std::string& filename) -> json_t
|
const std::string& filename) -> json_t
|
||||||
{
|
{
|
||||||
std::filesystem::path path(resourceDirectory);
|
std::filesystem::path path{baseDir};
|
||||||
path /= base_dir;
|
|
||||||
path /= filename;
|
path /= filename;
|
||||||
|
|
||||||
std::ifstream json_file(path);
|
std::ifstream json_file(path);
|
||||||
@@ -110,15 +107,15 @@ Configuration from_path(std::string_view path, std::string_view resourceDirector
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (current_sub_config == SubConfig::MemSpec)
|
if (current_sub_config == SubConfig::MemSpec)
|
||||||
parsed = parse_json(MemSpec::SUB_DIR, MemSpec::KEY, parsed);
|
parsed = parse_json(MemSpec::KEY, parsed);
|
||||||
else if (current_sub_config == SubConfig::AddressMapping)
|
else if (current_sub_config == SubConfig::AddressMapping)
|
||||||
parsed = parse_json(AddressMapping::SUB_DIR, AddressMapping::KEY, parsed);
|
parsed = parse_json(AddressMapping::KEY, parsed);
|
||||||
else if (current_sub_config == SubConfig::McConfig)
|
else if (current_sub_config == SubConfig::McConfig)
|
||||||
parsed = parse_json(McConfig::SUB_DIR, McConfig::KEY, parsed);
|
parsed = parse_json(McConfig::KEY, parsed);
|
||||||
else if (current_sub_config == SubConfig::SimConfig)
|
else if (current_sub_config == SubConfig::SimConfig)
|
||||||
parsed = parse_json(SimConfig::SUB_DIR, SimConfig::KEY, parsed);
|
parsed = parse_json(SimConfig::KEY, parsed);
|
||||||
else if (current_sub_config == SubConfig::TraceSetup)
|
else if (current_sub_config == SubConfig::TraceSetup)
|
||||||
parsed = parse_json(TraceSetupConstants::SUB_DIR, TraceSetupConstants::KEY, parsed);
|
parsed = parse_json(TraceSetupConstants::KEY, parsed);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -129,7 +126,7 @@ Configuration from_path(std::string_view path, std::string_view resourceDirector
|
|||||||
json_t simulation = json_t::parse(file, parser_callback, true, true).at(Configuration::KEY);
|
json_t simulation = json_t::parse(file, parser_callback, true, true).at(Configuration::KEY);
|
||||||
return simulation.get<Config::Configuration>();
|
return simulation.get<Config::Configuration>();
|
||||||
}
|
}
|
||||||
throw std::runtime_error("Failed to open file " + std::string(path));
|
throw std::runtime_error("Failed to open file " + std::string(baseConfig));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace DRAMSys::Config
|
} // namespace DRAMSys::Config
|
||||||
|
|||||||
@@ -75,8 +75,7 @@ struct Configuration
|
|||||||
NLOHMANN_JSONIFY_ALL_THINGS(
|
NLOHMANN_JSONIFY_ALL_THINGS(
|
||||||
Configuration, addressmapping, mcconfig, memspec, simconfig, simulationid, tracesetup)
|
Configuration, addressmapping, mcconfig, memspec, simconfig, simulationid, tracesetup)
|
||||||
|
|
||||||
Configuration from_path(std::string_view path,
|
Configuration from_path(std::filesystem::path baseConfig);
|
||||||
std::string_view resourceDirectory = DRAMSYS_RESOURCE_DIR);
|
|
||||||
|
|
||||||
} // namespace DRAMSys::Config
|
} // namespace DRAMSys::Config
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,6 @@ NLOHMANN_JSON_SERIALIZE_ENUM(ArbiterType,
|
|||||||
struct McConfig
|
struct McConfig
|
||||||
{
|
{
|
||||||
static constexpr std::string_view KEY = "mcconfig";
|
static constexpr std::string_view KEY = "mcconfig";
|
||||||
static constexpr std::string_view SUB_DIR = "mcconfig";
|
|
||||||
|
|
||||||
std::optional<PagePolicyType> PagePolicy;
|
std::optional<PagePolicyType> PagePolicy;
|
||||||
std::optional<SchedulerType> Scheduler;
|
std::optional<SchedulerType> Scheduler;
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ NLOHMANN_JSON_SERIALIZE_ENUM(StoreModeType,
|
|||||||
struct SimConfig
|
struct SimConfig
|
||||||
{
|
{
|
||||||
static constexpr std::string_view KEY = "simconfig";
|
static constexpr std::string_view KEY = "simconfig";
|
||||||
static constexpr std::string_view SUB_DIR = "simconfig";
|
|
||||||
|
|
||||||
std::optional<uint64_t> AddressOffset;
|
std::optional<uint64_t> AddressOffset;
|
||||||
std::optional<bool> CheckTLM2Protocol;
|
std::optional<bool> CheckTLM2Protocol;
|
||||||
|
|||||||
@@ -205,7 +205,6 @@ NLOHMANN_JSONIFY_ALL_THINGS(RowHammer,
|
|||||||
struct TraceSetupConstants
|
struct TraceSetupConstants
|
||||||
{
|
{
|
||||||
static constexpr std::string_view KEY = "tracesetup";
|
static constexpr std::string_view KEY = "tracesetup";
|
||||||
static constexpr std::string_view SUB_DIR = "tracesetup";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
using Initiator =
|
using Initiator =
|
||||||
|
|||||||
@@ -78,12 +78,11 @@ NLOHMANN_JSON_SERIALIZE_ENUM(MemoryType,
|
|||||||
{MemoryType::GDDR6, "GDDR6"},
|
{MemoryType::GDDR6, "GDDR6"},
|
||||||
{MemoryType::HBM2, "HBM2"},
|
{MemoryType::HBM2, "HBM2"},
|
||||||
{MemoryType::HBM3, "HBM3"},
|
{MemoryType::HBM3, "HBM3"},
|
||||||
{MemoryType::STTMRAM, "STTMRAM"}})
|
{MemoryType::STTMRAM, "STT-MRAM"}})
|
||||||
|
|
||||||
struct MemSpec
|
struct MemSpec
|
||||||
{
|
{
|
||||||
static constexpr std::string_view KEY = "memspec";
|
static constexpr std::string_view KEY = "memspec";
|
||||||
static constexpr std::string_view SUB_DIR = "memspec";
|
|
||||||
|
|
||||||
MemArchitectureSpecType memarchitecturespec;
|
MemArchitectureSpecType memarchitecturespec;
|
||||||
std::string memoryId;
|
std::string memoryId;
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ target_compile_features(libdramsys PUBLIC cxx_std_17)
|
|||||||
|
|
||||||
target_compile_definitions(libdramsys
|
target_compile_definitions(libdramsys
|
||||||
PUBLIC
|
PUBLIC
|
||||||
|
DRAMSYS_RESOURCE_DIR="${DRAMSYS_RESOURCE_DIR}"
|
||||||
$<$<BOOL:${DRAMPower_FOUND}>:DRAMPOWER>
|
$<$<BOOL:${DRAMPower_FOUND}>:DRAMPOWER>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -42,21 +42,15 @@
|
|||||||
int sc_main(int argc, char** argv)
|
int sc_main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
std::filesystem::path resourceDirectory = DRAMSYS_RESOURCE_DIR;
|
std::filesystem::path resourceDirectory = DRAMSYS_RESOURCE_DIR;
|
||||||
if (argc >= 3)
|
|
||||||
{
|
|
||||||
resourceDirectory = argv[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
std::filesystem::path baseConfig = resourceDirectory / "ddr4-example.json";
|
std::filesystem::path baseConfig = resourceDirectory / "ddr4-example.json";
|
||||||
if (argc >= 2)
|
if (argc >= 2)
|
||||||
{
|
{
|
||||||
baseConfig = argv[1];
|
baseConfig = argv[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
DRAMSys::Config::Configuration configuration =
|
DRAMSys::Config::Configuration configuration = DRAMSys::Config::from_path(baseConfig.c_str());
|
||||||
DRAMSys::Config::from_path(baseConfig.c_str(), resourceDirectory.c_str());
|
|
||||||
|
|
||||||
Simulator simulator(std::move(configuration), std::move(resourceDirectory));
|
Simulator simulator(std::move(configuration), std::move(baseConfig));
|
||||||
simulator.run();
|
simulator.run();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -41,13 +41,12 @@
|
|||||||
#include "player/StlPlayer.h"
|
#include "player/StlPlayer.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
Simulator::Simulator(DRAMSys::Config::Configuration configuration,
|
Simulator::Simulator(DRAMSys::Config::Configuration configuration, std::filesystem::path baseConfig) :
|
||||||
std::filesystem::path resourceDirectory) :
|
|
||||||
storageEnabled(configuration.simconfig.StoreMode == DRAMSys::Config::StoreModeType::Store),
|
storageEnabled(configuration.simconfig.StoreMode == DRAMSys::Config::StoreModeType::Store),
|
||||||
memoryManager(storageEnabled),
|
memoryManager(storageEnabled),
|
||||||
configuration(std::move(configuration)),
|
configuration(std::move(configuration)),
|
||||||
resourceDirectory(std::move(resourceDirectory)),
|
dramSys(std::make_unique<DRAMSys::DRAMSys>("DRAMSys", this->configuration)),
|
||||||
dramSys(std::make_unique<DRAMSys::DRAMSys>("DRAMSys", this->configuration))
|
baseConfig(baseConfig)
|
||||||
{
|
{
|
||||||
terminateInitiator = [this]()
|
terminateInitiator = [this]()
|
||||||
{
|
{
|
||||||
@@ -104,7 +103,7 @@ Simulator::instantiateInitiator(const DRAMSys::Config::Initiator& initiator)
|
|||||||
}
|
}
|
||||||
else if constexpr (std::is_same_v<T, DRAMSys::Config::TracePlayer>)
|
else if constexpr (std::is_same_v<T, DRAMSys::Config::TracePlayer>)
|
||||||
{
|
{
|
||||||
std::filesystem::path tracePath = resourceDirectory / TRACE_DIRECTORY / config.name;
|
std::filesystem::path tracePath = baseConfig.parent_path() / config.name;
|
||||||
|
|
||||||
std::optional<StlPlayer::TraceType> traceType;
|
std::optional<StlPlayer::TraceType> traceType;
|
||||||
|
|
||||||
|
|||||||
@@ -41,13 +41,10 @@
|
|||||||
#include <DRAMSys/config/DRAMSysConfiguration.h>
|
#include <DRAMSys/config/DRAMSysConfiguration.h>
|
||||||
#include <DRAMSys/simulation/DRAMSys.h>
|
#include <DRAMSys/simulation/DRAMSys.h>
|
||||||
|
|
||||||
static constexpr std::string_view TRACE_DIRECTORY = "traces";
|
|
||||||
|
|
||||||
class Simulator
|
class Simulator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Simulator(DRAMSys::Config::Configuration configuration,
|
Simulator(DRAMSys::Config::Configuration configuration, std::filesystem::path baseConfig);
|
||||||
std::filesystem::path resourceDirectory);
|
|
||||||
|
|
||||||
void run();
|
void run();
|
||||||
|
|
||||||
@@ -58,7 +55,6 @@ private:
|
|||||||
MemoryManager memoryManager;
|
MemoryManager memoryManager;
|
||||||
|
|
||||||
DRAMSys::Config::Configuration configuration;
|
DRAMSys::Config::Configuration configuration;
|
||||||
std::filesystem::path resourceDirectory;
|
|
||||||
|
|
||||||
std::unique_ptr<DRAMSys::DRAMSys> dramSys;
|
std::unique_ptr<DRAMSys::DRAMSys> dramSys;
|
||||||
std::vector<std::unique_ptr<Initiator>> initiators;
|
std::vector<std::unique_ptr<Initiator>> initiators;
|
||||||
@@ -69,4 +65,6 @@ private:
|
|||||||
unsigned int terminatedInitiators = 0;
|
unsigned int terminatedInitiators = 0;
|
||||||
uint64_t totalTransactions{};
|
uint64_t totalTransactions{};
|
||||||
uint64_t transactionsFinished = 0;
|
uint64_t transactionsFinished = 0;
|
||||||
|
|
||||||
|
std::filesystem::path baseConfig;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -288,12 +288,6 @@ TEST_F(ConfigurationTest, DumpConfiguration)
|
|||||||
std::cout << json.dump(4) << std::endl;
|
std::cout << json.dump(4) << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Configuration, ResourceDirectory)
|
|
||||||
{
|
|
||||||
// Test should not throw exceptions
|
|
||||||
Configuration config = from_path("resources/ddr5-example.json", "resources");
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(Configuration, FromPath)
|
TEST(Configuration, FromPath)
|
||||||
{
|
{
|
||||||
// Test should not throw exceptions
|
// Test should not throw exceptions
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ set(TABLES_TO_COMPARE
|
|||||||
Power
|
Power
|
||||||
)
|
)
|
||||||
|
|
||||||
function(test_standard standard test_name base_config resource_dir output_filename)
|
function(test_standard standard test_name base_config output_filename)
|
||||||
if(NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${standard})
|
if(NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${standard})
|
||||||
message(WARNING "Cannot find regression test ${standard}")
|
message(WARNING "Cannot find regression test ${standard}")
|
||||||
return()
|
return()
|
||||||
@@ -61,7 +61,7 @@ function(test_standard standard test_name base_config resource_dir output_filena
|
|||||||
add_test(
|
add_test(
|
||||||
NAME Regression${test_name}.CreateDatabase
|
NAME Regression${test_name}.CreateDatabase
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${test_name}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${test_name}
|
||||||
COMMAND $<TARGET_FILE:DRAMSys> ${base_config} ${resource_dir}
|
COMMAND $<TARGET_FILE:DRAMSys> ${base_config}
|
||||||
)
|
)
|
||||||
set_tests_properties(Regression${test_name}.CreateDatabase PROPERTIES FIXTURES_SETUP Regression${test_name}.CreateDatabase)
|
set_tests_properties(Regression${test_name}.CreateDatabase PROPERTIES FIXTURES_SETUP Regression${test_name}.CreateDatabase)
|
||||||
|
|
||||||
@@ -89,12 +89,12 @@ function(test_standard standard test_name base_config resource_dir output_filena
|
|||||||
endforeach()
|
endforeach()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
test_standard(DDR3 DDR3 ${CMAKE_CURRENT_SOURCE_DIR}/DDR3/ddr3-example.json ${CMAKE_CURRENT_SOURCE_DIR}/DDR3 DRAMSys_ddr3-dual-rank_ddr3_ch0.tdb)
|
test_standard(DDR3 DDR3 ${CMAKE_CURRENT_SOURCE_DIR}/DDR3/ddr3-example.json DRAMSys_ddr3-dual-rank_ddr3_ch0.tdb)
|
||||||
test_standard(DDR4 DDR4 ${CMAKE_CURRENT_SOURCE_DIR}/DDR4/ddr4-example.json ${CMAKE_CURRENT_SOURCE_DIR}/DDR4 DRAMSys_ddr4-bankgrp_ddr4_ch0.tdb)
|
test_standard(DDR4 DDR4 ${CMAKE_CURRENT_SOURCE_DIR}/DDR4/ddr4-example.json DRAMSys_ddr4-bankgrp_ddr4_ch0.tdb)
|
||||||
test_standard(DDR5 DDR5.Ch0 ${CMAKE_CURRENT_SOURCE_DIR}/DDR5/ddr5-example.json ${CMAKE_CURRENT_SOURCE_DIR}/DDR5 DRAMSys_ddr5-example_ddr5_ch0.tdb)
|
test_standard(DDR5 DDR5.Ch0 ${CMAKE_CURRENT_SOURCE_DIR}/DDR5/ddr5-example.json DRAMSys_ddr5-example_ddr5_ch0.tdb)
|
||||||
test_standard(DDR5 DDR5.Ch1 ${CMAKE_CURRENT_SOURCE_DIR}/DDR5/ddr5-example.json ${CMAKE_CURRENT_SOURCE_DIR}/DDR5 DRAMSys_ddr5-example_ddr5_ch1.tdb)
|
test_standard(DDR5 DDR5.Ch1 ${CMAKE_CURRENT_SOURCE_DIR}/DDR5/ddr5-example.json DRAMSys_ddr5-example_ddr5_ch1.tdb)
|
||||||
test_standard(LPDDR4 LPDDR4 ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR4/lpddr4-example.json ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR4 DRAMSys_lpddr4-example_lpddr4_ch0.tdb)
|
test_standard(LPDDR4 LPDDR4 ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR4/lpddr4-example.json DRAMSys_lpddr4-example_lpddr4_ch0.tdb)
|
||||||
test_standard(LPDDR5 LPDDR5 ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR5/lpddr5-example.json ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR5 DRAMSys_lpddr5-example_lpddr5_ch0.tdb)
|
test_standard(LPDDR5 LPDDR5 ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR5/lpddr5-example.json DRAMSys_lpddr5-example_lpddr5_ch0.tdb)
|
||||||
test_standard(HBM2 HBM2.Ch0 ${CMAKE_CURRENT_SOURCE_DIR}/HBM2/hbm2-example.json ${CMAKE_CURRENT_SOURCE_DIR}/HBM2 DRAMSys_hbm2-example_hbm2_ch0.tdb)
|
test_standard(HBM2 HBM2.Ch0 ${CMAKE_CURRENT_SOURCE_DIR}/HBM2/hbm2-example.json DRAMSys_hbm2-example_hbm2_ch0.tdb)
|
||||||
test_standard(HBM2 HBM2.Ch1 ${CMAKE_CURRENT_SOURCE_DIR}/HBM2/hbm2-example.json ${CMAKE_CURRENT_SOURCE_DIR}/HBM2 DRAMSys_hbm2-example_hbm2_ch1.tdb)
|
test_standard(HBM2 HBM2.Ch1 ${CMAKE_CURRENT_SOURCE_DIR}/HBM2/hbm2-example.json DRAMSys_hbm2-example_hbm2_ch1.tdb)
|
||||||
test_standard(HBM3 HBM3 ${CMAKE_CURRENT_SOURCE_DIR}/HBM3/hbm3-example.json ${CMAKE_CURRENT_SOURCE_DIR}/HBM3 DRAMSys_hbm3-example_hbm3_ch0.tdb)
|
test_standard(HBM3 HBM3 ${CMAKE_CURRENT_SOURCE_DIR}/HBM3/hbm3-example.json DRAMSys_hbm3-example_hbm3_ch0.tdb)
|
||||||
|
|||||||
@@ -135,7 +135,7 @@
|
|||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 533,
|
"clkMhz": 533,
|
||||||
"name": "trace_test2.stl"
|
"name": "traces/trace_test2.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,7 +146,7 @@
|
|||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 933,
|
"clkMhz": 933,
|
||||||
"name": "trace_test3.stl"
|
"name": "traces/trace_test3.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,7 +158,7 @@
|
|||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 1600,
|
"clkMhz": 1600,
|
||||||
"name": "trace_test3.stl"
|
"name": "traces/trace_test3.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,11 +126,11 @@
|
|||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 1000,
|
"clkMhz": 1000,
|
||||||
"name": "trace1_test4.stl"
|
"name": "traces/trace1_test4.stl"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"clkMhz": 1000,
|
"clkMhz": 1000,
|
||||||
"name": "trace2_test4.stl"
|
"name": "traces/trace2_test4.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,11 +129,11 @@
|
|||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 1600,
|
"clkMhz": 1600,
|
||||||
"name": "trace1_test4.stl"
|
"name": "traces/trace1_test4.stl"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"clkMhz": 1600,
|
"clkMhz": 1600,
|
||||||
"name": "trace2_test4.stl"
|
"name": "traces/trace2_test4.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 1600,
|
"clkMhz": 1600,
|
||||||
"name": "trace_lpddr4.stl"
|
"name": "traces/trace_lpddr4.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,7 +134,7 @@
|
|||||||
"tracesetup": [
|
"tracesetup": [
|
||||||
{
|
{
|
||||||
"clkMhz": 1600,
|
"clkMhz": 1600,
|
||||||
"name": "trace_lpddr5.stl"
|
"name": "traces/trace_lpddr5.stl"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,9 +54,8 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string pathToJson = argv[1];
|
std::string pathToJson = argv[1];
|
||||||
std::string resourceDirectory = argc <= 3 ? DRAMSYS_RESOURCE_DIR : argv[3];
|
|
||||||
|
|
||||||
auto configuration = DRAMSys::Config::from_path(pathToJson, resourceDirectory);
|
auto configuration = DRAMSys::Config::from_path(pathToJson);
|
||||||
|
|
||||||
nlohmann::json json;
|
nlohmann::json json;
|
||||||
json["simulation"] = configuration;
|
json["simulation"] = configuration;
|
||||||
|
|||||||
Reference in New Issue
Block a user