Added dramsim2 memory model to the emulator backend
This commit is contained in:
parent
34da073077
commit
5d75ddc553
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -10,3 +10,6 @@
|
|||||||
[submodule "uncore"]
|
[submodule "uncore"]
|
||||||
path = uncore
|
path = uncore
|
||||||
url = git@github.com:ucb-bar/uncore.git
|
url = git@github.com:ucb-bar/uncore.git
|
||||||
|
[submodule "dramsim2"]
|
||||||
|
path = dramsim2
|
||||||
|
url = git@github.com:dramninjasUMD/DRAMSim2.git
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "emulator.h"
|
#include "emulator.h"
|
||||||
#include "mm_emulator.cc"
|
//#include "mm_emulator.cc"
|
||||||
|
#include "mm_emulator_dramsim2.cc"
|
||||||
#include "Top.h" // chisel-generated code...
|
#include "Top.h" // chisel-generated code...
|
||||||
#include "disasm.h"
|
#include "disasm.h"
|
||||||
|
|
||||||
@ -82,9 +83,11 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// basic fixed latency memory model
|
// basic fixed latency memory model
|
||||||
uint64_t* mem = mm_init();
|
/*uint64_t* mem = mm_init();*/
|
||||||
|
uint64_t* mm_mem = dramsim2_init();
|
||||||
if (loadmem != NULL)
|
if (loadmem != NULL)
|
||||||
load_mem(mem, loadmem);
|
load_mem(mm_mem, loadmem);
|
||||||
|
|
||||||
|
|
||||||
// The chisel generated code
|
// The chisel generated code
|
||||||
Top_t tile;
|
Top_t tile;
|
||||||
@ -104,8 +107,10 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
while (max_cycles == 0 || trace_count < max_cycles)
|
while (max_cycles == 0 || trace_count < max_cycles)
|
||||||
{
|
{
|
||||||
|
// fprintf(stderr, "trace count: %ld\n", trace_count);
|
||||||
// memory model
|
// memory model
|
||||||
mm_tick_emulator (
|
// mm_tick_emulator(
|
||||||
|
dramsim2_tick_emulator (
|
||||||
tile.Top__io_mem_req_cmd_valid.lo_word(),
|
tile.Top__io_mem_req_cmd_valid.lo_word(),
|
||||||
&tile.Top__io_mem_req_cmd_ready.values[0],
|
&tile.Top__io_mem_req_cmd_ready.values[0],
|
||||||
tile.Top__io_mem_req_cmd_bits_rw.lo_word(),
|
tile.Top__io_mem_req_cmd_bits_rw.lo_word(),
|
||||||
@ -120,6 +125,7 @@ int main(int argc, char** argv)
|
|||||||
&tile.Top__io_mem_resp_bits_tag.values[0],
|
&tile.Top__io_mem_resp_bits_tag.values[0],
|
||||||
&tile.Top__io_mem_resp_bits_data.values[0]
|
&tile.Top__io_mem_resp_bits_data.values[0]
|
||||||
);
|
);
|
||||||
|
// fprintf(stderr, "trace count: %ld (after dramsim2_tick_emulator)\n", trace_count);
|
||||||
|
|
||||||
tile.Top__io_host_in_valid = LIT<1>(htif_phy.in_valid());
|
tile.Top__io_host_in_valid = LIT<1>(htif_phy.in_valid());
|
||||||
tile.Top__io_host_in_bits = LIT<64>(htif_phy.in_bits());
|
tile.Top__io_host_in_bits = LIT<64>(htif_phy.in_bits());
|
||||||
|
1
dramsim2
Submodule
1
dramsim2
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit d0045b18ce34b350139a43c95c9e432f4c6e43a5
|
@ -9,6 +9,10 @@ all: emulator
|
|||||||
CXXSRCS := emulator disasm
|
CXXSRCS := emulator disasm
|
||||||
CXXFLAGS := $(CXXFLAGS) -Itestbench -I$(basedir)/chisel/csrc
|
CXXFLAGS := $(CXXFLAGS) -Itestbench -I$(basedir)/chisel/csrc
|
||||||
|
|
||||||
|
DRAMSIM2_PATH := ../dramsim2/
|
||||||
|
CXXFLAGS := $(CXXFLAGS) -I$(DRAMSIM2_PATH) -L$(DRAMSIM2_PATH) -ldramsim
|
||||||
|
DRAMSIM2_LIB := libdramsim.so
|
||||||
|
|
||||||
generated-src/$(MODEL).cpp: $(basedir)/riscv-rocket/src/*.scala $(basedir)/riscv-hwacha/src/*.scala $(basedir)/chisel/src/main/scala/* $(basedir)/uncore/src/*.scala
|
generated-src/$(MODEL).cpp: $(basedir)/riscv-rocket/src/*.scala $(basedir)/riscv-hwacha/src/*.scala $(basedir)/chisel/src/main/scala/* $(basedir)/uncore/src/*.scala
|
||||||
cd $(basedir)/sbt && $(SBT) "project rocket" "run rocket.Top --backend c --noIoDebug --targetDir ../emulator/generated-src"
|
cd $(basedir)/sbt && $(SBT) "project rocket" "run rocket.Top --backend c --noIoDebug --targetDir ../emulator/generated-src"
|
||||||
|
|
||||||
@ -33,6 +37,9 @@ emulator: $(addsuffix .o,$(CXXSRCS)) $(MODEL).o
|
|||||||
emulator-debug: $(addsuffix -debug.o,$(CXXSRCS)) $(MODEL)-debug.o
|
emulator-debug: $(addsuffix -debug.o,$(CXXSRCS)) $(MODEL)-debug.o
|
||||||
$(CXX) $(CXXFLAGS) -o $@ $^
|
$(CXX) $(CXXFLAGS) -o $@ $^
|
||||||
|
|
||||||
|
dramsim2:
|
||||||
|
cd $(DRAMSIM2_PATH) ; make $(DRAMSIM2_LIB)
|
||||||
|
|
||||||
all: emulator
|
all: emulator
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@ -52,10 +59,10 @@ global_vecasm_timer_tests_vpd = $(addsuffix .vpd, $(global_vecasm_timer_tests))
|
|||||||
global_bmarks_vpd = $(addsuffix .vpd, $(global_bmarks))
|
global_bmarks_vpd = $(addsuffix .vpd, $(global_bmarks))
|
||||||
|
|
||||||
$(global_asm_tests_out): %.out: $(global_tstdir)/%.hex emulator
|
$(global_asm_tests_out): %.out: $(global_tstdir)/%.hex emulator
|
||||||
fesvr -c -testrun -m1000000 -l +loadmem=$< none 2> $@
|
fesvr -c -testrun -m2000000 -l +loadmem=$< none 2> $@
|
||||||
|
|
||||||
$(global_vecasm_tests_out): %.out: $(global_tstdir)/%.hex emulator
|
$(global_vecasm_tests_out): %.out: $(global_tstdir)/%.hex emulator
|
||||||
fesvr -c -testrun -m1000000 -l +loadmem=$< none 2> $@
|
fesvr -c -testrun -m2000000 -l +loadmem=$< none 2> $@
|
||||||
|
|
||||||
$(global_vecasm_timer_tests_out): %.out: $(global_tstdir)/%.hex emulator
|
$(global_vecasm_timer_tests_out): %.out: $(global_tstdir)/%.hex emulator
|
||||||
fesvr -c -testrun -m3000000 -l +loadmem=$< none 2> $@
|
fesvr -c -testrun -m3000000 -l +loadmem=$< none 2> $@
|
||||||
|
58
emulator/dramsim2_ini/DDR3_micron_64M_8B_x4_sg15.ini
Normal file
58
emulator/dramsim2_ini/DDR3_micron_64M_8B_x4_sg15.ini
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
NUM_BANKS=8
|
||||||
|
NUM_ROWS=32768
|
||||||
|
NUM_COLS=2048
|
||||||
|
DEVICE_WIDTH=4
|
||||||
|
|
||||||
|
;in nanoseconds
|
||||||
|
;#define REFRESH_PERIOD 7800
|
||||||
|
REFRESH_PERIOD=7800
|
||||||
|
tCK=1.5 ;*
|
||||||
|
|
||||||
|
CL=10 ;*
|
||||||
|
AL=0 ;*
|
||||||
|
;AL=3; needs to be tRCD-1 or 0
|
||||||
|
;RL=(CL+AL)
|
||||||
|
;WL=(RL-1)
|
||||||
|
BL=8 ;*
|
||||||
|
tRAS=24;*
|
||||||
|
tRCD=10 ;*
|
||||||
|
tRRD=4 ;*
|
||||||
|
tRC=34 ;*
|
||||||
|
tRP=10 ;*
|
||||||
|
tCCD=4 ;*
|
||||||
|
tRTP=5 ;*
|
||||||
|
tWTR=5 ;*
|
||||||
|
tWR=10 ;*
|
||||||
|
tRTRS=1; -- RANK PARAMETER, TODO
|
||||||
|
tRFC=107;*
|
||||||
|
tFAW=20;*
|
||||||
|
tCKE=4 ;*
|
||||||
|
tXP=4 ;*
|
||||||
|
|
||||||
|
tCMD=1 ;*
|
||||||
|
|
||||||
|
IDD0=100;
|
||||||
|
IDD1=130;
|
||||||
|
IDD2P=10;
|
||||||
|
IDD2Q=70;
|
||||||
|
IDD2N=70;
|
||||||
|
IDD3Pf=60;
|
||||||
|
IDD3Ps=60;
|
||||||
|
IDD3N=90;
|
||||||
|
IDD4W=255;
|
||||||
|
IDD4R=230;
|
||||||
|
IDD5=305;
|
||||||
|
IDD6=9;
|
||||||
|
IDD6L=12;
|
||||||
|
IDD7=415;
|
||||||
|
|
||||||
|
;same bank
|
||||||
|
;READ_TO_PRE_DELAY=(AL+BL/2+max(tRTP,2)-2)
|
||||||
|
;WRITE_TO_PRE_DELAY=(WL+BL/2+tWR)
|
||||||
|
;READ_TO_WRITE_DELAY=(RL+BL/2+tRTRS-WL)
|
||||||
|
;READ_AUTOPRE_DELAY=(AL+tRTP+tRP)
|
||||||
|
;WRITE_AUTOPRE_DELAY=(WL+BL/2+tWR+tRP)
|
||||||
|
;WRITE_TO_READ_DELAY_B=(WL+BL/2+tWTR);interbank
|
||||||
|
;WRITE_TO_READ_DELAY_R=(WL+BL/2+tRTRS-RL);interrank
|
||||||
|
|
||||||
|
Vdd=1.5 ; TODO: double check this
|
25
emulator/dramsim2_ini/system.ini
Normal file
25
emulator/dramsim2_ini/system.ini
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
; COPY THIS FILE AND MODIFY IT TO SUIT YOUR NEEDS
|
||||||
|
|
||||||
|
NUM_CHANS=1 ; number of *logically independent* channels (i.e. each with a separate memory controller); should be a power of 2
|
||||||
|
JEDEC_DATA_BUS_BITS=64 ; Always 64 for DDRx; if you want multiple *ganged* channels, set this to N*64
|
||||||
|
TRANS_QUEUE_DEPTH=32 ; transaction queue, i.e., CPU-level commands such as: READ 0xbeef
|
||||||
|
CMD_QUEUE_DEPTH=32 ; command queue, i.e., DRAM-level commands such as: CAS 544, RAS 4
|
||||||
|
EPOCH_LENGTH=100000 ; length of an epoch in cycles (granularity of simulation)
|
||||||
|
ROW_BUFFER_POLICY=open_page ; close_page or open_page
|
||||||
|
ADDRESS_MAPPING_SCHEME=scheme2 ;valid schemes 1-7; For multiple independent channels, use scheme7 since it has the most parallelism
|
||||||
|
SCHEDULING_POLICY=rank_then_bank_round_robin ; bank_then_rank_round_robin or rank_then_bank_round_robin
|
||||||
|
QUEUING_STRUCTURE=per_rank ;per_rank or per_rank_per_bank
|
||||||
|
|
||||||
|
;for true/false, please use all lowercase
|
||||||
|
DEBUG_TRANS_Q=false
|
||||||
|
DEBUG_CMD_Q=false
|
||||||
|
DEBUG_ADDR_MAP=false
|
||||||
|
DEBUG_BUS=false
|
||||||
|
DEBUG_BANKSTATE=false
|
||||||
|
DEBUG_BANKS=false
|
||||||
|
DEBUG_POWER=false
|
||||||
|
VIS_FILE_OUTPUT=false
|
||||||
|
|
||||||
|
USE_LOW_POWER=true ; go into low power mode when idle?
|
||||||
|
VERIFICATION_OUTPUT=false ; should be false for normal operation
|
||||||
|
TOTAL_ROW_ACCESSES=4 ; maximum number of open page requests to send to the same row before forcing a row close (to prevent starvation)
|
Loading…
Reference in New Issue
Block a user