Makefile 3.4 KB
Newer Older
Z
Zihao Yu 已提交
1
TOP = TopMain
2
FPGATOP = FPGANOOP
Z
Zihao Yu 已提交
3 4 5
BUILD_DIR = ./build
TOP_V = $(BUILD_DIR)/$(TOP).v
SCALA_FILE = $(shell find ./src/main/scala -name '*.scala')
6
TEST_FILE = $(shell find ./src/test/scala -name '*.scala')
Z
Zihao Yu 已提交
7
MEM_GEN = ./scripts/vlsi_mem_gen
Z
Zihao Yu 已提交
8

Z
Zihao Yu 已提交
9
SIMTOP = top.TestMain
Z
Zihao Yu 已提交
10
IMAGE ?= temp
Z
Zihao Yu 已提交
11

12 13
# remote machine with high frequency to speedup verilog generation
REMOTE ?= localhost
Y
Yinan Xu 已提交
14 15
REMOTE_PREFIX ?= /nfs/24
REMOTE_PRJ_HOME = $(REMOTE_PREFIX)/$(abspath .)/
16

Z
Zihao Yu 已提交
17 18
.DEFAULT_GOAL = verilog

Z
Zihao Yu 已提交
19
help:
Z
Zihao Yu 已提交
20
	mill chiselModule.test.runMain top.$(TOP) --help
Z
Zihao Yu 已提交
21

Z
Zihao Yu 已提交
22 23
$(TOP_V): $(SCALA_FILE)
	mkdir -p $(@D)
24
	mill chiselModule.runMain top.$(TOP) -X verilog -td $(@D) --output-file $(@F) --infer-rw $(FPGATOP) --repl-seq-mem -c:$(FPGATOP):-o:$(@D)/$(@F).conf
Z
Zihao Yu 已提交
25
	$(MEM_GEN) $(@D)/$(@F).conf >> $@
Z
Zihao Yu 已提交
26
	sed -i -e 's/_\(aw\|ar\|w\|r\|b\)_\(\|bits_\)/_\1/g' $@
27 28 29 30
	@git log -n 1 >> .__head__
	@git diff >> .__diff__
	@sed -i 's/^/\/\// ' .__head__
	@sed -i 's/^/\/\//' .__diff__
31 32
	@cat .__head__ .__diff__ $@ > .__out__
	@mv .__out__ $@
33
	@rm .__head__ .__diff__
34 35 36 37 38

deploy: build/top.zip


build/top.zip: $(TOP_V)
39 40 41 42
	@zip -r $@ $< $<.conf build/*.anno.json

.PHONY: deploy build/top.zip

Z
Zihao Yu 已提交
43 44
verilog: $(TOP_V)

L
LinJiawei 已提交
45
SIM_TOP = XSSimTop
Z
Zihao Yu 已提交
46
SIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v
47
SIM_ARGS =
48
$(SIM_TOP_V): $(SCALA_FILE) $(TEST_FILE)
Z
Zihao Yu 已提交
49
	mkdir -p $(@D)
50
ifeq ($(REMOTE),localhost)
51
	mill chiselModule.test.runMain $(SIMTOP) -X verilog -td $(@D) --output-file $(@F) $(SIM_ARGS)
52
else
53
	ssh -tt $(REMOTE) "cd $(REMOTE_PRJ_HOME) && mill chiselModule.test.runMain $(SIMTOP) -X verilog -td $(@D) --output-file $(@F) $(SIM_ARGS)"
54
endif
Z
Zihao Yu 已提交
55 56 57 58 59 60 61 62 63


EMU_CSRC_DIR = $(abspath ./src/test/csrc)
EMU_VSRC_DIR = $(abspath ./src/test/vsrc)
EMU_CXXFILES = $(shell find $(EMU_CSRC_DIR) -name "*.cpp")
EMU_VFILES = $(shell find $(EMU_VSRC_DIR) -name "*.v" -or -name "*.sv")

EMU_CXXFLAGS  = -O3 -std=c++11 -static -g -Wall -I$(EMU_CSRC_DIR)
EMU_CXXFLAGS += -DVERILATOR -Wno-maybe-uninitialized
Z
Zihao Yu 已提交
64
EMU_LDFLAGS   = -lpthread -lSDL2 -ldl
Z
Zihao Yu 已提交
65

66
# dump vcd: --debug --trace
Z
Zihao Yu 已提交
67
VERILATOR_FLAGS = --top-module $(SIM_TOP) \
Z
Zihao Yu 已提交
68
  +define+VERILATOR=1 \
Z
Zihao Yu 已提交
69
  +define+PRINTF_COND=1 \
Z
Zihao Yu 已提交
70
  +define+RANDOMIZE_REG_INIT \
71
  +define+RANDOMIZE_MEM_INIT \
Z
Zihao Yu 已提交
72 73 74
  --assert \
  --output-split 5000 \
  --output-split-cfuncs 5000 \
75
  -I$(abspath $(BUILD_DIR)) \
Z
Zihao Yu 已提交
76
  --x-assign unique -O3 -CFLAGS "$(EMU_CXXFLAGS)" \
Z
Zihao Yu 已提交
77
  -LDFLAGS "$(EMU_LDFLAGS)"
Z
Zihao Yu 已提交
78 79 80 81 82 83 84 85 86

EMU_MK := $(BUILD_DIR)/emu-compile/V$(SIM_TOP).mk
EMU_DEPS := $(EMU_VFILES) $(EMU_CXXFILES)
EMU_HEADERS := $(shell find $(EMU_CSRC_DIR) -name "*.h")
EMU := $(BUILD_DIR)/emu

$(EMU_MK): $(SIM_TOP_V) | $(EMU_DEPS)
	@mkdir -p $(@D)
	verilator --cc --exe $(VERILATOR_FLAGS) \
Z
Zihao Yu 已提交
87
		-o $(abspath $(EMU)) -Mdir $(@D) $^ $(EMU_DEPS)
Z
Zihao Yu 已提交
88

Y
Yinan Xu 已提交
89
ifeq ($(REMOTE),localhost)
L
LinJiawei 已提交
90
REF_SO := $(NEMU_HOME)/build/riscv64-nemu-interpreter-so
Y
Yinan Xu 已提交
91
else
L
LinJiawei 已提交
92
REF_SO := /home/pcl/NEMU/build/riscv64-nemu-interpreter-so
Y
Yinan Xu 已提交
93 94
endif

Z
Zihao Yu 已提交
95
$(REF_SO):
96
	$(MAKE) -C $(NEMU_HOME) ISA=riscv64 SHARE=1
Z
Zihao Yu 已提交
97 98

$(EMU): $(EMU_MK) $(EMU_DEPS) $(EMU_HEADERS) $(REF_SO)
99
	CPPFLAGS=-DREF_SO=\\\"$(REF_SO)\\\" $(MAKE) VM_PARALLEL_BUILDS=1 -C $(dir $(EMU_MK)) -f $(abspath $(EMU_MK))
Z
Zihao Yu 已提交
100

L
LinJiawei 已提交
101
SEED = -s $(shell shuf -i 1-10000 -n 1)
102

103

104 105
# log will only be printed when (B<=GTimer<=E) && (L < loglevel)
# use 'emu -h' to see more details
106 107 108
B ?= 0
E ?= -1

Z
Zihao Yu 已提交
109
emu: $(EMU)
110
ifeq ($(REMOTE),localhost)
L
LinJiawei 已提交
111
	@$(EMU) -i $(IMAGE) $(SEED) -b $(B) -e $(E)
112
else
113
	ssh -tt $(REMOTE) "cd $(REMOTE_PRJ_HOME) && $(EMU) -i $(REMOTE_PREFIX)/$(realpath $(IMAGE)) $(SEED) -b $(B) -e $(E)"
114
endif
Z
Zihao Yu 已提交
115

Z
Zihao Yu 已提交
116
cache:
Z
Zihao Yu 已提交
117
	$(MAKE) emu IMAGE=Makefile
Z
Zihao Yu 已提交
118

Z
Zihao Yu 已提交
119
clean:
120
	rm -rf $(BUILD_DIR)
Z
Zihao Yu 已提交
121

Z
Zihao Yu 已提交
122
.PHONY: verilog emu clean help $(REF_SO)