mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| # Verilator Makefile for WALLY
 | |
| # Kunlin Han, Rose Thompson, David Harris 2024
 | |
| # SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
 | |
| 
 | |
| SHELL := /bin/bash
 | |
| .PHONY: profile run questa clean
 | |
| 
 | |
| # verilator configurations
 | |
| OPT=
 | |
| PARAMS?=-DVERILATOR=1 --no-trace-top
 | |
| NONPROF?=--stats
 | |
| VERILATOR_DIR=${WALLY}/sim/verilator
 | |
| SOURCE=${WALLY}/config/shared/*.vh ${WALLY}/config/${WALLYCONF} ${WALLY}/config/deriv/${WALLYCONF} ${WALLY}/src/cvw.sv ${WALLY}/testbench/*.sv ${WALLY}/testbench/common/*.sv ${WALLY}/src/*/*.sv ${WALLY}/src/*/*/*.sv
 | |
| EXTRA_ARGS=
 | |
| 
 | |
| 
 | |
| WALLYCONF?=rv64gc
 | |
| TEST?=arch64i
 | |
| TESTBENCH?=testbench 	
 | |
| 
 | |
| # constants
 | |
| # assume WALLY variable is correctly configured in the shell environment
 | |
| WORKING_DIR=${WALLY}/sim/verilator
 | |
| TARGET=$(WORKING_DIR)/target
 | |
| # INCLUDE_PATH are pathes that Verilator should search for files it needs
 | |
| INCLUDE_PATH="-I${WALLY}/config/shared" "-I${WALLY}/config/$(WALLYCONF)" "-I${WALLY}/config/deriv/$(WALLYCONF)"
 | |
| # SOURCES are source files
 | |
| SOURCES=${WALLY}/src/cvw.sv ${WALLY}/testbench/${TESTBENCH}.sv ${WALLY}/testbench/common/*.sv ${WALLY}/src/*/*.sv ${WALLY}/src/*/*/*.sv ${WALLY}/addins/verilog-ethernet/*/*.sv ${WALLY}/addins/verilog-ethernet/*/*/*/*.sv
 | |
| # DEPENDENCIES are configuration files and source files, which leads to recompilation of executables
 | |
| DEPENDENCIES=${WALLY}/config/shared/*.vh $(SOURCES)
 | |
| 
 | |
| # regular testbench requires a wrapper defining getenvval
 | |
| ifeq ($(TESTBENCH), testbench)
 | |
| 	WRAPPER=${WALLY}/sim/verilator/wrapper.c
 | |
| 	GTEST=
 | |
| 	ARGTEST=+TEST=$(TEST)
 | |
| else
 | |
| 	WRAPPER=
 | |
| 	GTEST=-GTEST="\"${TEST}\"" 
 | |
| 	ARGTEST=
 | |
| endif
 | |
| 
 | |
| default: run
 | |
| 
 | |
| run: wkdir/$(WALLYCONF)_$(TEST)/V${TESTBENCH}
 | |
| 	mkdir -p $(VERILATOR_DIR)/logs
 | |
| 	wkdir/$(WALLYCONF)_$(TEST)/V${TESTBENCH} ${ARGTEST} $(EXTRA_ARGS) 
 | |
| 
 | |
| profile: obj_dir_profiling/V${TESTBENCH}_$(WALLYCONF)
 | |
| 	$(VERILATOR_DIR)/obj_dir_profiling/V${TESTBENCH}_$(WALLYCONF) ${ARGTEST}
 | |
| 	mv gmon.out gmon_$(WALLYCONF).out
 | |
| 	gprof $(VERILATOR_DIR)/obj_dir_profiling/V${TESTBENCH}_$(WALLYCONF) gmon_$(WALLYCONF).out > gmon_$(WALLYCONF).log
 | |
| 	verilator_profcfunc gmon_$(WALLYCONF).log > gmon_$(WALLYCONF).log2
 | |
| 	mkdir -p $(VERILATOR_DIR)/logs_profiling
 | |
| 	mv gmon_$(WALLYCONF)* $(VERILATOR_DIR)/logs_profiling
 | |
| 	echo "Please check $(VERILATOR_DIR)/logs_profiling/gmon_$(WALLYCONF)* for logs and output files."
 | |
| 
 | |
| wkdir/$(WALLYCONF)_$(TEST)/V${TESTBENCH}: $(DEPENDENCIES)
 | |
| 	mkdir -p wkdir/$(WALLYCONF)_$(TEST)
 | |
| 	verilator \
 | |
| 	--Mdir wkdir/$(WALLYCONF)_$(TEST) -o V${TESTBENCH} \
 | |
| 	--binary --trace \
 | |
| 	$(OPT) $(PARAMS) $(NONPROF) \
 | |
| 	--top-module ${TESTBENCH}  --relative-includes \
 | |
| 	$(INCLUDE_PATH) \
 | |
| 	${WRAPPER} \
 | |
| 	${GTEST} \
 | |
| 	$(SOURCES)
 | |
| 
 | |
| obj_dir_profiling/V${TESTBENCH}_$(WALLYCONF): $(DEPENDENCIES)
 | |
| 	mkdir -p obj_dir_profiling
 | |
| 	verilator \
 | |
| 	--Mdir obj_dir_profiling -o V${TESTBENCH}_$(WALLYCONF) \
 | |
| 	--binary \
 | |
| 	--prof-cfuncs $(OPT) $(PARAMS) \
 | |
| 	--top-module ${TESTBENCH}  --relative-includes \
 | |
| 	$(INCLUDE_PATH) \
 | |
| 	${WRAPPER} \
 | |
| 	${GTEST} \
 | |
| 	$(SOURCES)
 | |
| 
 | |
| clean:
 | |
| 	rm -rf $(VERILATOR_DIR)/wkdir $(VERILATOR_DIR)/obj_dir_profiling $(VERILATOR_DIR)/logs $(VERILATOR_DIR)/logs_profiling
 |