184e9d6ebSZihao YuTOP = TopMain 21cd939dcSZihao YuFPGATOP = FPGANOOP 384e9d6ebSZihao YuBUILD_DIR = ./build 484e9d6ebSZihao YuTOP_V = $(BUILD_DIR)/$(TOP).v 584e9d6ebSZihao YuSCALA_FILE = $(shell find ./src/main/scala -name '*.scala') 61a772c7eSZihao YuTEST_FILE = $(shell find ./src/test/scala -name '*.scala') 7885733f1SZihao YuMEM_GEN = ./scripts/vlsi_mem_gen 884e9d6ebSZihao Yu 90991dc5eSZihao YuSIMTOP = top.TestMain 10e8ab4e39SZihao YuIMAGE ?= temp 1107379a26SZihao Yu 12*de74d363SYinan Xu# co-simulation with DRAMsim3 13*de74d363SYinan Xuifeq ($(WITH_DRAMSIM3),1) 14*de74d363SYinan Xuifndef DRAMSIM3_HOME 15*de74d363SYinan Xu$(error DRAMSIM3_HOME is not set) 16*de74d363SYinan Xuendif 17*de74d363SYinan Xuoverride SIM_ARGS += --with-dramsim3 18*de74d363SYinan Xu 19*de74d363SYinan XuEMU_CXXFLAGS += -I$(DRAMSIM3_HOME)/src 20*de74d363SYinan XuEMU_CXXFLAGS += -DWITH_DRAMSIM3 -DDRAMSIM3_CONFIG=\\\"$(DRAMSIM3_HOME)/configs/XiangShan.ini\\\" -DDRAMSIM3_OUTDIR=\\\"$(BUILD_DIR)\\\" 21*de74d363SYinan XuEMU_LDFLAGS += $(DRAMSIM3_HOME)/build/libdramsim3.a 22*de74d363SYinan Xuendif 23*de74d363SYinan Xu 2406b2abbaSYinan Xu# remote machine with more cores to speedup c++ build 257eaffc59SYinan XuREMOTE ?= localhost 267eaffc59SYinan Xu 270016469dSZihao Yu.DEFAULT_GOAL = verilog 280016469dSZihao Yu 29d22ebddaSZihao Yuhelp: 3029c0dd83Slinjiawei mill XiangShan.test.runMain top.$(TOP) --help 31d22ebddaSZihao Yu 3284e9d6ebSZihao Yu$(TOP_V): $(SCALA_FILE) 3384e9d6ebSZihao Yu mkdir -p $(@D) 34ab51325dSYinan Xu mill XiangShan.test.runMain $(SIMTOP) -X verilog -td $(@D) --full-stacktrace --output-file $(@F) --disable-all --fpga-platform $(SIM_ARGS) 35f874f036SYinan Xu # mill XiangShan.runMain top.$(TOP) -X verilog -td $(@D) --output-file $(@F) --infer-rw $(FPGATOP) --repl-seq-mem -c:$(FPGATOP):-o:$(@D)/$(@F).conf 36f874f036SYinan Xu # $(MEM_GEN) $(@D)/$(@F).conf >> $@ 37f874f036SYinan Xu # sed -i -e 's/_\(aw\|ar\|w\|r\|b\)_\(\|bits_\)/_\1/g' $@ 38f874f036SYinan Xu # @git log -n 1 >> .__head__ 39f874f036SYinan Xu # @git diff >> .__diff__ 40f874f036SYinan Xu # @sed -i 's/^/\/\// ' .__head__ 41f874f036SYinan Xu # @sed -i 's/^/\/\//' .__diff__ 42f874f036SYinan Xu # @cat .__head__ .__diff__ $@ > .__out__ 43f874f036SYinan Xu # @mv .__out__ $@ 44f874f036SYinan Xu # @rm .__head__ .__diff__ 4584e9d6ebSZihao Yu 46709152c8SWang Huizhedeploy: build/top.zip 47709152c8SWang Huizhe 48709152c8SWang Huizhe 49709152c8SWang Huizhebuild/top.zip: $(TOP_V) 50709152c8SWang Huizhe @zip -r $@ $< $<.conf build/*.anno.json 51709152c8SWang Huizhe 52709152c8SWang Huizhe.PHONY: deploy build/top.zip 53709152c8SWang Huizhe 540016469dSZihao Yuverilog: $(TOP_V) 550016469dSZihao Yu 561e3fad10SLinJiaweiSIM_TOP = XSSimTop 5719dedbf6SZihao YuSIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v 581a772c7eSZihao Yu$(SIM_TOP_V): $(SCALA_FILE) $(TEST_FILE) 5919dedbf6SZihao Yu mkdir -p $(@D) 60003b6d2eSYinan Xu date -R 6129c0dd83Slinjiawei mill XiangShan.test.runMain $(SIMTOP) -X verilog -td $(@D) --full-stacktrace --output-file $(@F) $(SIM_ARGS) 62003b6d2eSYinan Xu date -R 6319dedbf6SZihao Yu 6419dedbf6SZihao YuEMU_CSRC_DIR = $(abspath ./src/test/csrc) 6519dedbf6SZihao YuEMU_VSRC_DIR = $(abspath ./src/test/vsrc) 6619dedbf6SZihao YuEMU_CXXFILES = $(shell find $(EMU_CSRC_DIR) -name "*.cpp") 6719dedbf6SZihao YuEMU_VFILES = $(shell find $(EMU_VSRC_DIR) -name "*.v" -or -name "*.sv") 6819dedbf6SZihao Yu 69360f082fSYinan XuEMU_CXXFLAGS += -std=c++11 -static -Wall -I$(EMU_CSRC_DIR) 7019dedbf6SZihao YuEMU_CXXFLAGS += -DVERILATOR -Wno-maybe-uninitialized 71155966d2SZihao YuEMU_LDFLAGS = -lpthread -lSDL2 -ldl 72360f082fSYinan Xu 738ea79e0dSYinan XuVEXTRA_FLAGS = -I$(abspath $(BUILD_DIR)) --x-assign unique -O3 -CFLAGS "$(EMU_CXXFLAGS)" -LDFLAGS "$(EMU_LDFLAGS)" 748ea79e0dSYinan Xu 75360f082fSYinan Xu# Verilator trace support 768ea79e0dSYinan Xuifeq ($(EMU_TRACE),1) 778ea79e0dSYinan XuVEXTRA_FLAGS += --trace 788ea79e0dSYinan Xuendif 79360f082fSYinan Xu 80360f082fSYinan Xu# Verilator multi-thread support 81360f082fSYinan XuEMU_THREADS ?= 1 828ea79e0dSYinan Xuifneq ($(EMU_THREADS),1) 83360f082fSYinan XuVEXTRA_FLAGS += --threads $(EMU_THREADS) --threads-dpi none 848ea79e0dSYinan Xuendif 85360f082fSYinan Xu 86360f082fSYinan Xu# Verilator savable 87360f082fSYinan Xuifeq ($(EMU_SNAPSHOT),1) 88360f082fSYinan XuVEXTRA_FLAGS += --savable 89360f082fSYinan XuEMU_CXXFLAGS += -DVM_SAVABLE 90d791ba37Slinjiaweiendif 9119dedbf6SZihao Yu 92d791ba37Slinjiawei# --trace 9319dedbf6SZihao YuVERILATOR_FLAGS = --top-module $(SIM_TOP) \ 94c357e0e1SZihao Yu +define+VERILATOR=1 \ 9519dedbf6SZihao Yu +define+PRINTF_COND=1 \ 9619dedbf6SZihao Yu +define+RANDOMIZE_REG_INIT \ 976ddc3619SZihao Yu +define+RANDOMIZE_MEM_INIT \ 98360f082fSYinan Xu $(VEXTRA_FLAGS) \ 99a7fc95b2SZihao Yu --assert \ 1006b369accSZihao Yu --stats-vars \ 101a7fc95b2SZihao Yu --output-split 5000 \ 1028ea79e0dSYinan Xu --output-split-cfuncs 5000 10319dedbf6SZihao Yu 10419dedbf6SZihao YuEMU_MK := $(BUILD_DIR)/emu-compile/V$(SIM_TOP).mk 10519dedbf6SZihao YuEMU_DEPS := $(EMU_VFILES) $(EMU_CXXFILES) 10619dedbf6SZihao YuEMU_HEADERS := $(shell find $(EMU_CSRC_DIR) -name "*.h") 10719dedbf6SZihao YuEMU := $(BUILD_DIR)/emu 10819dedbf6SZihao Yu 10919dedbf6SZihao Yu$(EMU_MK): $(SIM_TOP_V) | $(EMU_DEPS) 11019dedbf6SZihao Yu @mkdir -p $(@D) 111003b6d2eSYinan Xu date -R 11219dedbf6SZihao Yu verilator --cc --exe $(VERILATOR_FLAGS) \ 1139ae8972bSZihao Yu -o $(abspath $(EMU)) -Mdir $(@D) $^ $(EMU_DEPS) 114003b6d2eSYinan Xu date -R 11519dedbf6SZihao Yu 11610325796SYinan Xuifndef NEMU_HOME 11710325796SYinan Xu$(error NEMU_HOME is not set) 11810325796SYinan Xuendif 1194a7b9111SLinJiaweiREF_SO := $(NEMU_HOME)/build/riscv64-nemu-interpreter-so 1205211b1c1SZihao Yu$(REF_SO): 121aa38aa4dSWilliam Wang $(MAKE) -C $(NEMU_HOME) ISA=riscv64 SHARE=1 1225211b1c1SZihao Yu 1235211b1c1SZihao Yu$(EMU): $(EMU_MK) $(EMU_DEPS) $(EMU_HEADERS) $(REF_SO) 124003b6d2eSYinan Xu date -R 1255496d1b7SYinan Xuifeq ($(REMOTE),localhost) 1265496d1b7SYinan Xu CPPFLAGS=-DREF_SO=\\\"$(REF_SO)\\\" $(MAKE) VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(abspath $(dir $(EMU_MK))) -f $(abspath $(EMU_MK)) 1275496d1b7SYinan Xuelse 128960af85eSYinan Xu ssh -tt $(REMOTE) 'CPPFLAGS=-DREF_SO=\\\"$(REF_SO)\\\" $(MAKE) -j128 VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(abspath $(dir $(EMU_MK))) -f $(abspath $(EMU_MK))' 1295496d1b7SYinan Xuendif 130003b6d2eSYinan Xu date -R 13119dedbf6SZihao Yu 132f19d0b9dSYinan XuSEED ?= $(shell shuf -i 1-10000 -n 1) 1336ddc3619SZihao Yu 1343e354996SLinJiawei 1351d0ee72fSLinJiawei# log will only be printed when (B<=GTimer<=E) && (L < loglevel) 1361d0ee72fSLinJiawei# use 'emu -h' to see more details 1373e354996SLinJiaweiB ?= 0 1383e354996SLinJiaweiE ?= -1 139c0788c7eSYinan XuSNAPSHOT ?= 140c0788c7eSYinan Xu 141a428082bSLinJiawei# enable this runtime option if you want to generate a vcd file 142a428082bSLinJiawei# use 'emu -h' to see more details 143a428082bSLinJiawei#WAVEFORM = --dump-wave 144a428082bSLinJiawei 145c0788c7eSYinan Xuifeq ($(SNAPSHOT),) 146c0788c7eSYinan XuSNAPSHOT_OPTION = 147c0788c7eSYinan Xuelse 14806b2abbaSYinan XuSNAPSHOT_OPTION = --load-snapshot=$(SNAPSHOT) 149c0788c7eSYinan Xuendif 150c0788c7eSYinan Xu 15110325796SYinan Xuifndef NOOP_HOME 15210325796SYinan Xu$(error NOOP_HOME is not set) 15310325796SYinan Xuendif 154a428082bSLinJiaweiEMU_FLAGS = -s $(SEED) -b $(B) -e $(E) $(SNAPSHOT_OPTION) $(WAVEFORM) 1553e354996SLinJiawei 15619dedbf6SZihao Yuemu: $(EMU) 157e471b1f5SYinan Xu ls build 15806b2abbaSYinan Xu $(EMU) -i $(IMAGE) $(EMU_FLAGS) 15919dedbf6SZihao Yu 1609a36b64cSZihao Yucache: 161bc5a4cf6SZihao Yu $(MAKE) emu IMAGE=Makefile 1629a36b64cSZihao Yu 16384e9d6ebSZihao Yuclean: 164917276a0SJiuyang liu git submodule foreach git clean -fdx 165917276a0SJiuyang liu git clean -fd 166c3515a9cSYinan Xu rm -rf ./build 1670016469dSZihao Yu 1689e38a5d4Slinjiaweiinit: 1699e38a5d4Slinjiawei git submodule update --init 1709e38a5d4Slinjiawei 171917276a0SJiuyang liubump: 172917276a0SJiuyang liu git submodule foreach "git fetch origin&&git checkout master&&git reset --hard origin/master" 173917276a0SJiuyang liu 174917276a0SJiuyang liubsp: 175917276a0SJiuyang liu mill -i mill.contrib.BSP/install 176917276a0SJiuyang liu.PHONY: verilog emu clean help init bump bsp $(REF_SO) 177