xref: /XiangShan/Makefile (revision c6d439803a044ea209139672b25e35fe8d7f4aa0)
1*c6d43980SLemover#***************************************************************************************
2*c6d43980SLemover# Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
3*c6d43980SLemover#
4*c6d43980SLemover# XiangShan is licensed under Mulan PSL v2.
5*c6d43980SLemover# You can use this software according to the terms and conditions of the Mulan PSL v2.
6*c6d43980SLemover# You may obtain a copy of Mulan PSL v2 at:
7*c6d43980SLemover#          http://license.coscl.org.cn/MulanPSL2
8*c6d43980SLemover#
9*c6d43980SLemover# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
10*c6d43980SLemover# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
11*c6d43980SLemover# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
12*c6d43980SLemover#
13*c6d43980SLemover# See the Mulan PSL v2 for more details.
14*c6d43980SLemover#***************************************************************************************
15*c6d43980SLemover
168b037849SYinan XuTOP = XSTop
178b037849SYinan XuFPGATOP = top.TopMain
18c786d283SLingrui98BUILD_DIR = ./build
1984e9d6ebSZihao YuTOP_V = $(BUILD_DIR)/$(TOP).v
2084e9d6ebSZihao YuSCALA_FILE = $(shell find ./src/main/scala -name '*.scala')
211a772c7eSZihao YuTEST_FILE = $(shell find ./src/test/scala -name '*.scala')
22885733f1SZihao YuMEM_GEN = ./scripts/vlsi_mem_gen
2384e9d6ebSZihao Yu
242225d46eSJiawei LinSIMTOP = top.SimTop
25e8ab4e39SZihao YuIMAGE ?= temp
2605f23f57SWilliam WangCONFIG ?= DefaultConfig
2707379a26SZihao Yu
28de74d363SYinan Xu# co-simulation with DRAMsim3
29de74d363SYinan Xuifeq ($(WITH_DRAMSIM3),1)
30de74d363SYinan Xuifndef DRAMSIM3_HOME
31de74d363SYinan Xu$(error DRAMSIM3_HOME is not set)
32de74d363SYinan Xuendif
33de74d363SYinan Xuoverride SIM_ARGS += --with-dramsim3
34de74d363SYinan Xuendif
35de74d363SYinan Xu
36672098b7SZihao YuTIMELOG = $(BUILD_DIR)/time.log
37672098b7SZihao YuTIME_CMD = time -a -o $(TIMELOG)
38672098b7SZihao Yu
3906b2abbaSYinan Xu# remote machine with more cores to speedup c++ build
407eaffc59SYinan XuREMOTE ?= localhost
417eaffc59SYinan Xu
420016469dSZihao Yu.DEFAULT_GOAL = verilog
430016469dSZihao Yu
44d22ebddaSZihao Yuhelp:
458b037849SYinan Xu	mill XiangShan.test.runMain $(SIMTOP) --help
46d22ebddaSZihao Yu
4784e9d6ebSZihao Yu$(TOP_V): $(SCALA_FILE)
4884e9d6ebSZihao Yu	mkdir -p $(@D)
4905f23f57SWilliam Wang	mill XiangShan.test.runMain $(FPGATOP) -td $(@D) --config $(CONFIG) --full-stacktrace --output-file $(@F) --disable-all --remove-assert --infer-rw --repl-seq-mem -c:$(FPGATOP):-o:$(@D)/$(@F).conf $(SIM_ARGS)
504f24fc9aSDan Tang	$(MEM_GEN) $(@D)/$(@F).conf --tsmc28 --output_file $(@D)/tsmc28_sram.v > $(@D)/tsmc28_sram.v.conf
518b037849SYinan Xu	$(MEM_GEN) $(@D)/$(@F).conf --output_file $(@D)/sim_sram.v
52f874f036SYinan Xu	# sed -i -e 's/_\(aw\|ar\|w\|r\|b\)_\(\|bits_\)/_\1/g' $@
53ca388318SYinan Xu	@git log -n 1 >> .__head__
54ca388318SYinan Xu	@git diff >> .__diff__
55ca388318SYinan Xu	@sed -i 's/^/\/\// ' .__head__
56ca388318SYinan Xu	@sed -i 's/^/\/\//' .__diff__
57439dd8f0SYinan Xu	@cat .__head__ .__diff__ $@ > .__out__
58ca388318SYinan Xu	@mv .__out__ $@
59ca388318SYinan Xu	@rm .__head__ .__diff__
6084e9d6ebSZihao Yu
61709152c8SWang Huizhedeploy: build/top.zip
62709152c8SWang Huizhe
63709152c8SWang Huizhe
64709152c8SWang Huizhebuild/top.zip: $(TOP_V)
65709152c8SWang Huizhe	@zip -r $@ $< $<.conf build/*.anno.json
66709152c8SWang Huizhe
67709152c8SWang Huizhe.PHONY: deploy build/top.zip
68709152c8SWang Huizhe
690016469dSZihao Yuverilog: $(TOP_V)
700016469dSZihao Yu
712225d46eSJiawei LinSIM_TOP   = SimTop
7219dedbf6SZihao YuSIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v
731a772c7eSZihao Yu$(SIM_TOP_V): $(SCALA_FILE) $(TEST_FILE)
7419dedbf6SZihao Yu	mkdir -p $(@D)
75672098b7SZihao Yu	@echo "\n[mill] Generating Verilog files..." > $(TIMELOG)
76672098b7SZihao Yu	@date -R | tee -a $(TIMELOG)
7705f23f57SWilliam Wang	$(TIME_CMD) mill XiangShan.test.runMain $(SIMTOP) -td $(@D) --config $(CONFIG) --full-stacktrace --output-file $(@F) --infer-rw --repl-seq-mem -c:$(SIMTOP):-o:$(@D)/$(@F).conf $(SIM_ARGS)
782b3df3d4SYinan Xu	$(MEM_GEN) $(@D)/$(@F).conf --output_file $(@D)/$(@F).sram.v
792b3df3d4SYinan Xu	@git log -n 1 >> .__head__
802b3df3d4SYinan Xu	@git diff >> .__diff__
812b3df3d4SYinan Xu	@sed -i 's/^/\/\// ' .__head__
822b3df3d4SYinan Xu	@sed -i 's/^/\/\//' .__diff__
832b3df3d4SYinan Xu	@cat .__head__ .__diff__ $@ $(@D)/$(@F).sram.v > .__out__
842b3df3d4SYinan Xu	@mv .__out__ $@
852b3df3d4SYinan Xu	@rm .__head__ .__diff__
86c4401c32SYinan Xu	sed -i -e 's/$$fatal/xs_assert(`__LINE__)/g' $(SIM_TOP_V)
8719dedbf6SZihao Yu
88e354ebdcSZihao Yusim-verilog: $(SIM_TOP_V)
89e354ebdcSZihao Yu
902225d46eSJiawei LinSIM_CSRC_DIR = $(abspath ./src/test/csrc/common)
912225d46eSJiawei LinSIM_CXXFILES = $(shell find $(SIM_CSRC_DIR) -name "*.cpp")
9219dedbf6SZihao Yu
932225d46eSJiawei LinDIFFTEST_CSRC_DIR = $(abspath ./src/test/csrc/difftest)
942225d46eSJiawei LinDIFFTEST_CXXFILES = $(shell find $(DIFFTEST_CSRC_DIR) -name "*.cpp")
95360f082fSYinan Xu
96acd0ebb7SYinan XuSIM_VSRC = $(shell find ./src/test/vsrc/common -name "*.v" -or -name "*.sv")
978ea79e0dSYinan Xu
98acd0ebb7SYinan Xuinclude verilator.mk
99acd0ebb7SYinan Xuinclude vcs.mk
10019dedbf6SZihao Yu
10110325796SYinan Xuifndef NEMU_HOME
10210325796SYinan Xu$(error NEMU_HOME is not set)
10310325796SYinan Xuendif
1044a7b9111SLinJiaweiREF_SO := $(NEMU_HOME)/build/riscv64-nemu-interpreter-so
1055211b1c1SZihao Yu$(REF_SO):
106aa38aa4dSWilliam Wang	$(MAKE) -C $(NEMU_HOME) ISA=riscv64 SHARE=1
1075211b1c1SZihao Yu
108f19d0b9dSYinan XuSEED ?= $(shell shuf -i 1-10000 -n 1)
1096ddc3619SZihao Yu
110c786d283SLingrui98VME_SOURCE ?= $(shell pwd)/build/$(TOP).v
111c786d283SLingrui98VME_MODULES ?=
1123e354996SLinJiawei
113c786d283SLingrui98#-----------------------timing scripts-------------------------
114c786d283SLingrui98# run "make vme/tap help=1" to get help info
115c786d283SLingrui98
1162f98fa94SLingrui98# extract verilog module from TopMain.v
1172f98fa94SLingrui98# usage: make vme VME_MODULES=Roq
1182f98fa94SLingrui98TIMING_SCRIPT_PATH = ./timingScripts
1192f98fa94SLingrui98vme: $(TOP_V)
120c786d283SLingrui98	make -C $(TIMING_SCRIPT_PATH) vme
1212f98fa94SLingrui98
1222f98fa94SLingrui98# get and sort timing analysis with total delay(start+end) and max delay(start or end)
1232f98fa94SLingrui98# and print it out
1242f98fa94SLingrui98tap:
1252f98fa94SLingrui98	make -C $(TIMING_SCRIPT_PATH) tap
12605d50a24SWilliam Wang
12705d50a24SWilliam Wang# usage: make phy_evaluate VME_MODULE=Roq REMOTE=100
12805d50a24SWilliam Wangphy_evaluate: vme
12905d50a24SWilliam Wang	scp -r ./build/extracted/* $(REMOTE):~/phy_evaluation/remote_run/rtl
13005d50a24SWilliam Wang	ssh -tt $(REMOTE) 'cd ~/phy_evaluation/remote_run && $(MAKE) evaluate DESIGN_NAME=$(VME_MODULE)'
131516a0385SWilliam Wang	scp -r  $(REMOTE):~/phy_evaluation/remote_run/rpts ./build
13205d50a24SWilliam Wang
13305d50a24SWilliam Wang# usage: make phy_evaluate_atc VME_MODULE=Roq REMOTE=100
13405d50a24SWilliam Wangphy_evaluate_atc: vme
13505d50a24SWilliam Wang	scp -r ./build/extracted/* $(REMOTE):~/phy_evaluation/remote_run/rtl
13605d50a24SWilliam Wang	ssh -tt $(REMOTE) 'cd ~/phy_evaluation/remote_run && $(MAKE) evaluate_atc DESIGN_NAME=$(VME_MODULE)'
137516a0385SWilliam Wang	scp -r  $(REMOTE):~/phy_evaluation/remote_run/rpts ./build
13805d50a24SWilliam Wang
1399a36b64cSZihao Yucache:
140bc5a4cf6SZihao Yu	$(MAKE) emu IMAGE=Makefile
1419a36b64cSZihao Yu
1422f32751aSLinJiaweirelease-lock:
1432f32751aSLinJiawei	ssh -tt $(REMOTE) 'rm -f $(LOCK)'
1442f32751aSLinJiawei
145acd0ebb7SYinan Xuclean: vcs-clean
146c3515a9cSYinan Xu	rm -rf ./build
1470016469dSZihao Yu
1489e38a5d4Slinjiaweiinit:
1499e38a5d4Slinjiawei	git submodule update --init
1509e38a5d4Slinjiawei
151917276a0SJiuyang liubump:
152917276a0SJiuyang liu	git submodule foreach "git fetch origin&&git checkout master&&git reset --hard origin/master"
153917276a0SJiuyang liu
154917276a0SJiuyang liubsp:
15516cf0dd4SJiawei Lin	mill -i mill.bsp.BSP/install
1562225d46eSJiawei Lin
157e354ebdcSZihao Yu.PHONY: verilog sim-verilog emu clean help init bump bsp $(REF_SO)
1582225d46eSJiawei Lin
159