1TOP = TopMain 2FPGATOP = FPGANOOP 3BUILD_DIR = ./build 4TOP_V = $(BUILD_DIR)/$(TOP).v 5SCALA_FILE = $(shell find ./src/main/scala -name '*.scala') 6TEST_FILE = $(shell find ./src/test/scala -name '*.scala') 7MEM_GEN = ./scripts/vlsi_mem_gen 8 9SIMTOP = top.TestMain 10IMAGE ?= temp 11 12# remote machine with more cores to speedup c++ build 13REMOTE ?= localhost 14 15.DEFAULT_GOAL = verilog 16 17help: 18 mill XiangShan.test.runMain top.$(TOP) --help 19 20$(TOP_V): $(SCALA_FILE) 21 mkdir -p $(@D) 22 mill XiangShan.runMain top.$(TOP) -X verilog -td $(@D) --output-file $(@F) --infer-rw $(FPGATOP) --repl-seq-mem -c:$(FPGATOP):-o:$(@D)/$(@F).conf 23 $(MEM_GEN) $(@D)/$(@F).conf >> $@ 24 sed -i -e 's/_\(aw\|ar\|w\|r\|b\)_\(\|bits_\)/_\1/g' $@ 25 @git log -n 1 >> .__head__ 26 @git diff >> .__diff__ 27 @sed -i 's/^/\/\// ' .__head__ 28 @sed -i 's/^/\/\//' .__diff__ 29 @cat .__head__ .__diff__ $@ > .__out__ 30 @mv .__out__ $@ 31 @rm .__head__ .__diff__ 32 33deploy: build/top.zip 34 35 36build/top.zip: $(TOP_V) 37 @zip -r $@ $< $<.conf build/*.anno.json 38 39.PHONY: deploy build/top.zip 40 41verilog: $(TOP_V) 42 43SIM_TOP = XSSimTop 44SIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v 45SIM_ARGS = 46$(SIM_TOP_V): $(SCALA_FILE) $(TEST_FILE) 47 mkdir -p $(@D) 48 mill XiangShan.test.runMain $(SIMTOP) -X verilog -td $(@D) --full-stacktrace --output-file $(@F) $(SIM_ARGS) 49 50EMU_CSRC_DIR = $(abspath ./src/test/csrc) 51EMU_VSRC_DIR = $(abspath ./src/test/vsrc) 52EMU_CXXFILES = $(shell find $(EMU_CSRC_DIR) -name "*.cpp") 53EMU_VFILES = $(shell find $(EMU_VSRC_DIR) -name "*.v" -or -name "*.sv") 54 55EMU_CXXFLAGS += -std=c++11 -static -Wall -I$(EMU_CSRC_DIR) 56EMU_CXXFLAGS += -DVERILATOR -Wno-maybe-uninitialized 57EMU_LDFLAGS = -lpthread -lSDL2 -ldl 58 59# Verilator trace support 60VEXTRA_FLAGS = --trace 61 62# Verilator multi-thread support 63EMU_THREADS ?= 1 64VEXTRA_FLAGS += --threads $(EMU_THREADS) --threads-dpi none 65 66# Verilator savable 67EMU_SNAPSHOT ?= 0 68ifeq ($(EMU_SNAPSHOT),1) 69VEXTRA_FLAGS += --savable 70EMU_CXXFLAGS += -DVM_SAVABLE 71endif 72 73# --trace 74VERILATOR_FLAGS = --top-module $(SIM_TOP) \ 75 +define+VERILATOR=1 \ 76 +define+PRINTF_COND=1 \ 77 +define+RANDOMIZE_REG_INIT \ 78 +define+RANDOMIZE_MEM_INIT \ 79 $(VEXTRA_FLAGS) \ 80 --assert \ 81 --stats-vars \ 82 --output-split 5000 \ 83 --output-split-cfuncs 5000 \ 84 -I$(abspath $(BUILD_DIR)) \ 85 --x-assign unique -O3 -CFLAGS "$(EMU_CXXFLAGS)" \ 86 -LDFLAGS "$(EMU_LDFLAGS)" 87 88EMU_MK := $(BUILD_DIR)/emu-compile/V$(SIM_TOP).mk 89EMU_DEPS := $(EMU_VFILES) $(EMU_CXXFILES) 90EMU_HEADERS := $(shell find $(EMU_CSRC_DIR) -name "*.h") 91EMU := $(BUILD_DIR)/emu 92 93$(EMU_MK): $(SIM_TOP_V) | $(EMU_DEPS) 94 @mkdir -p $(@D) 95 verilator --cc --exe $(VERILATOR_FLAGS) \ 96 -o $(abspath $(EMU)) -Mdir $(@D) $^ $(EMU_DEPS) 97 98REF_SO := $(NEMU_HOME)/build/riscv64-nemu-interpreter-so 99$(REF_SO): 100 $(MAKE) -C $(NEMU_HOME) ISA=riscv64 SHARE=1 101 102$(EMU): $(EMU_MK) $(EMU_DEPS) $(EMU_HEADERS) $(REF_SO) 103ifeq ($(REMOTE),localhost) 104 CPPFLAGS=-DREF_SO=\\\"$(REF_SO)\\\" $(MAKE) VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(abspath $(dir $(EMU_MK))) -f $(abspath $(EMU_MK)) 105else 106 ssh -tt $(REMOTE) 'CPPFLAGS=-DREF_SO=\\\"$(REF_SO)\\\" $(MAKE) -j200 VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(abspath $(dir $(EMU_MK))) -f $(abspath $(EMU_MK))' 107endif 108 109SEED ?= $(shell shuf -i 1-10000 -n 1) 110 111 112# log will only be printed when (B<=GTimer<=E) && (L < loglevel) 113# use 'emu -h' to see more details 114B ?= 0 115E ?= -1 116SNAPSHOT ?= 117 118# enable this runtime option if you want to generate a vcd file 119# use 'emu -h' to see more details 120#WAVEFORM = --dump-wave 121 122ifeq ($(SNAPSHOT),) 123SNAPSHOT_OPTION = 124else 125SNAPSHOT_OPTION = --load-snapshot=$(SNAPSHOT) 126endif 127 128 129EMU_FLAGS = -s $(SEED) -b $(B) -e $(E) $(SNAPSHOT_OPTION) $(WAVEFORM) 130 131emu: $(EMU) 132 ls build 133 $(EMU) -i $(IMAGE) $(EMU_FLAGS) 134 135cache: 136 $(MAKE) emu IMAGE=Makefile 137 138clean: 139 git submodule foreach git clean -fdx 140 git clean -fd 141 142init: 143 git submodule update --init 144 145bump: 146 git submodule foreach "git fetch origin&&git checkout master&&git reset --hard origin/master" 147 148bsp: 149 mill -i mill.contrib.BSP/install 150.PHONY: verilog emu clean help init bump bsp $(REF_SO) 151