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 127eaffc59SYinan Xu# remote machine with high frequency to speedup verilog generation 137eaffc59SYinan XuREMOTE ?= localhost 140a7baf8fSYinan XuREMOTE_PREFIX ?= 15f18d2d8fSYinan XuREMOTE_PRJ_HOME = $(REMOTE_PREFIX)/$(abspath .)/ 167eaffc59SYinan Xu 170016469dSZihao Yu.DEFAULT_GOAL = verilog 180016469dSZihao Yu 19d22ebddaSZihao Yuhelp: 2029c0dd83Slinjiawei mill XiangShan.test.runMain top.$(TOP) --help 21d22ebddaSZihao Yu 2284e9d6ebSZihao Yu$(TOP_V): $(SCALA_FILE) 2384e9d6ebSZihao Yu mkdir -p $(@D) 2429c0dd83Slinjiawei mill XiangShan.runMain top.$(TOP) -X verilog -td $(@D) --output-file $(@F) --infer-rw $(FPGATOP) --repl-seq-mem -c:$(FPGATOP):-o:$(@D)/$(@F).conf 25885733f1SZihao Yu $(MEM_GEN) $(@D)/$(@F).conf >> $@ 2606977425SZihao Yu sed -i -e 's/_\(aw\|ar\|w\|r\|b\)_\(\|bits_\)/_\1/g' $@ 27b9dcac5bSZihao Yu @git log -n 1 >> .__head__ 28b9dcac5bSZihao Yu @git diff >> .__diff__ 29b9dcac5bSZihao Yu @sed -i 's/^/\/\// ' .__head__ 30b9dcac5bSZihao Yu @sed -i 's/^/\/\//' .__diff__ 31b9dcac5bSZihao Yu @cat .__head__ .__diff__ $@ > .__out__ 32b9dcac5bSZihao Yu @mv .__out__ $@ 33b9dcac5bSZihao Yu @rm .__head__ .__diff__ 3484e9d6ebSZihao Yu 35709152c8SWang Huizhedeploy: build/top.zip 36709152c8SWang Huizhe 37709152c8SWang Huizhe 38709152c8SWang Huizhebuild/top.zip: $(TOP_V) 39709152c8SWang Huizhe @zip -r $@ $< $<.conf build/*.anno.json 40709152c8SWang Huizhe 41709152c8SWang Huizhe.PHONY: deploy build/top.zip 42709152c8SWang Huizhe 430016469dSZihao Yuverilog: $(TOP_V) 440016469dSZihao Yu 451e3fad10SLinJiaweiSIM_TOP = XSSimTop 4619dedbf6SZihao YuSIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v 4767aa35f4SLinJiaweiSIM_ARGS = 481a772c7eSZihao Yu$(SIM_TOP_V): $(SCALA_FILE) $(TEST_FILE) 4919dedbf6SZihao Yu mkdir -p $(@D) 507eaffc59SYinan Xuifeq ($(REMOTE),localhost) 5129c0dd83Slinjiawei mill XiangShan.test.runMain $(SIMTOP) -X verilog -td $(@D) --full-stacktrace --output-file $(@F) $(SIM_ARGS) 527eaffc59SYinan Xuelse 5329c0dd83Slinjiawei ssh -tt $(REMOTE) "cd $(REMOTE_PRJ_HOME) && mill XiangShan.test.runMain $(SIMTOP) -X verilog -td $(@D) --full-stacktrace --output-file $(@F) $(SIM_ARGS)" 547eaffc59SYinan Xuendif 5519dedbf6SZihao Yu 5619dedbf6SZihao Yu 5719dedbf6SZihao YuEMU_CSRC_DIR = $(abspath ./src/test/csrc) 5819dedbf6SZihao YuEMU_VSRC_DIR = $(abspath ./src/test/vsrc) 5919dedbf6SZihao YuEMU_CXXFILES = $(shell find $(EMU_CSRC_DIR) -name "*.cpp") 6019dedbf6SZihao YuEMU_VFILES = $(shell find $(EMU_VSRC_DIR) -name "*.v" -or -name "*.sv") 6119dedbf6SZihao Yu 6228371fc7SZihao YuEMU_CXXFLAGS = -std=c++11 -static -Wall -I$(EMU_CSRC_DIR) 6319dedbf6SZihao YuEMU_CXXFLAGS += -DVERILATOR -Wno-maybe-uninitialized 64155966d2SZihao YuEMU_LDFLAGS = -lpthread -lSDL2 -ldl 6519dedbf6SZihao Yu 6619dedbf6SZihao YuVERILATOR_FLAGS = --top-module $(SIM_TOP) \ 67c357e0e1SZihao Yu +define+VERILATOR=1 \ 6819dedbf6SZihao Yu +define+PRINTF_COND=1 \ 6919dedbf6SZihao Yu +define+RANDOMIZE_REG_INIT \ 706ddc3619SZihao Yu +define+RANDOMIZE_MEM_INIT \ 71a7fc95b2SZihao Yu --assert \ 72a4b0d645SZihao Yu --savable \ 736b369accSZihao Yu --stats-vars \ 74a428082bSLinJiawei --trace \ 75a7fc95b2SZihao Yu --output-split 5000 \ 76a7fc95b2SZihao Yu --output-split-cfuncs 5000 \ 77b65ec060SZihao Yu -I$(abspath $(BUILD_DIR)) \ 7819dedbf6SZihao Yu --x-assign unique -O3 -CFLAGS "$(EMU_CXXFLAGS)" \ 7919dedbf6SZihao Yu -LDFLAGS "$(EMU_LDFLAGS)" 8019dedbf6SZihao Yu 8119dedbf6SZihao YuEMU_MK := $(BUILD_DIR)/emu-compile/V$(SIM_TOP).mk 8219dedbf6SZihao YuEMU_DEPS := $(EMU_VFILES) $(EMU_CXXFILES) 8319dedbf6SZihao YuEMU_HEADERS := $(shell find $(EMU_CSRC_DIR) -name "*.h") 8419dedbf6SZihao YuEMU := $(BUILD_DIR)/emu 8519dedbf6SZihao Yu 8619dedbf6SZihao Yu$(EMU_MK): $(SIM_TOP_V) | $(EMU_DEPS) 8719dedbf6SZihao Yu @mkdir -p $(@D) 8819dedbf6SZihao Yu verilator --cc --exe $(VERILATOR_FLAGS) \ 899ae8972bSZihao Yu -o $(abspath $(EMU)) -Mdir $(@D) $^ $(EMU_DEPS) 9019dedbf6SZihao Yu 919d8a74b5SYinan Xuifeq ($(REMOTE),localhost) 924a7b9111SLinJiaweiREF_SO := $(NEMU_HOME)/build/riscv64-nemu-interpreter-so 939d8a74b5SYinan Xuelse 944a7b9111SLinJiaweiREF_SO := /home/pcl/NEMU/build/riscv64-nemu-interpreter-so 959d8a74b5SYinan Xuendif 969d8a74b5SYinan Xu 975211b1c1SZihao Yu$(REF_SO): 98aa38aa4dSWilliam Wang $(MAKE) -C $(NEMU_HOME) ISA=riscv64 SHARE=1 995211b1c1SZihao Yu 1005211b1c1SZihao Yu$(EMU): $(EMU_MK) $(EMU_DEPS) $(EMU_HEADERS) $(REF_SO) 10128371fc7SZihao Yu CPPFLAGS=-DREF_SO=\\\"$(REF_SO)\\\" time $(MAKE) VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(dir $(EMU_MK)) -f $(abspath $(EMU_MK)) 10219dedbf6SZihao Yu 103f19d0b9dSYinan XuSEED ?= $(shell shuf -i 1-10000 -n 1) 1046ddc3619SZihao Yu 1053e354996SLinJiawei 1061d0ee72fSLinJiawei# log will only be printed when (B<=GTimer<=E) && (L < loglevel) 1071d0ee72fSLinJiawei# use 'emu -h' to see more details 1083e354996SLinJiaweiB ?= 0 1093e354996SLinJiaweiE ?= -1 110c0788c7eSYinan XuSNAPSHOT ?= 111c0788c7eSYinan Xu 112a428082bSLinJiawei# enable this runtime option if you want to generate a vcd file 113a428082bSLinJiawei# use 'emu -h' to see more details 114a428082bSLinJiawei#WAVEFORM = --dump-wave 115a428082bSLinJiawei 116c0788c7eSYinan Xuifeq ($(SNAPSHOT),) 117c0788c7eSYinan XuSNAPSHOT_OPTION = 118c0788c7eSYinan Xuelse 119c0788c7eSYinan XuSNAPSHOT_OPTION = --load-snapshot=$(REMOTE_PREFIX)/$(SNAPSHOT) 120c0788c7eSYinan Xuendif 121c0788c7eSYinan Xu 122a428082bSLinJiaweiEMU_FLAGS = -s $(SEED) -b $(B) -e $(E) $(SNAPSHOT_OPTION) $(WAVEFORM) 1233e354996SLinJiawei 12419dedbf6SZihao Yuemu: $(EMU) 125ea45c659SYinan Xuifeq ($(REMOTE),localhost) 126c0788c7eSYinan Xu @$(EMU) -i $(IMAGE) $(EMU_FLAGS) 127ea45c659SYinan Xuelse 128c0788c7eSYinan Xu ssh -tt $(REMOTE) "cd $(REMOTE_PRJ_HOME) && export NOOP_HOME=$(REMOTE_PREFIX)/$(NOOP_HOME) && $(EMU) -i $(REMOTE_PREFIX)/$(IMAGE) $(EMU_FLAGS)" 129ea45c659SYinan Xuendif 13019dedbf6SZihao Yu 1319a36b64cSZihao Yucache: 132bc5a4cf6SZihao Yu $(MAKE) emu IMAGE=Makefile 1339a36b64cSZihao Yu 13484e9d6ebSZihao Yuclean: 135ce52d698SZihao Yu rm -rf $(BUILD_DIR) 1360016469dSZihao Yu 137*9e38a5d4Slinjiaweiinit: 138*9e38a5d4Slinjiawei git submodule update --init 139*9e38a5d4Slinjiawei # do not use a recursive init to pull some not used submodules 140*9e38a5d4Slinjiawei cd ./rocket-chip/ && git submodule update --init api-config-chipsalliance hardfloat 141*9e38a5d4Slinjiawei 142*9e38a5d4Slinjiawei.PHONY: verilog emu clean help init $(REF_SO) 143