Run verilator configurations and testsuites in different folders.

This commit is contained in:
Kunlin Han 2024-04-22 11:32:46 -07:00
parent f94aab2d0d
commit c383bef1ad

View File

@ -3,8 +3,7 @@
OPT= OPT=
PARAMS?=-DVERILATOR=1 --no-trace-top PARAMS?=-DVERILATOR=1 --no-trace-top
NONPROF?=--stats NONPROF?=--stats
WORKING_DIR=${WALLY}/sim/verilator VERILATOR_DIR=${WALLY}/sim/verilator
TARGET=$(WORKING_DIR)/target
SOURCE=${WALLY}/config/shared/*.vh ${WALLY}/config/${WALLYCONF} ${WALLY}/src/cvw.sv ${WALLY}/testbench/testbench.sv ${WALLY}/testbench/common/*.sv ${WALLY}/src/*/*.sv ${WALLY}/src/*/*/*.sv SOURCE=${WALLY}/config/shared/*.vh ${WALLY}/config/${WALLYCONF} ${WALLY}/src/cvw.sv ${WALLY}/testbench/testbench.sv ${WALLY}/testbench/common/*.sv ${WALLY}/src/*/*.sv ${WALLY}/src/*/*/*.sv
WALLYCONF?=rv64gc WALLYCONF?=rv64gc
@ -13,42 +12,41 @@ TEST?=arch64i
default: run default: run
profile: obj_dir_profiling/Vtestbench_$(WALLYCONF) profile: obj_dir_profiling/Vtestbench_$(WALLYCONF)
$(WORKING_DIR)/obj_dir_profiling/Vtestbench_$(WALLYCONF) +TEST=$(TEST) $(VERILATOR_DIR)/obj_dir_profiling/Vtestbench_$(WALLYCONF) +TEST=$(TEST)
mv gmon.out gmon_$(WALLYCONF).out mv gmon.out gmon_$(WALLYCONF).out
gprof $(WORKING_DIR)/obj_dir_profiling/Vtestbench_$(WALLYCONF) gmon_$(WALLYCONF).out > gmon_$(WALLYCONF).log gprof $(VERILATOR_DIR)/obj_dir_profiling/Vtestbench_$(WALLYCONF) gmon_$(WALLYCONF).out > gmon_$(WALLYCONF).log
verilator_profcfunc gmon_$(WALLYCONF).log > gmon_$(WALLYCONF).log2 verilator_profcfunc gmon_$(WALLYCONF).log > gmon_$(WALLYCONF).log2
mkdir -p $(WORKING_DIR)/logs_profiling mkdir -p $(VERILATOR_DIR)/logs_profiling
mv gmon_$(WALLYCONF)* $(WORKING_DIR)/logs_profiling mv gmon_$(WALLYCONF)* $(VERILATOR_DIR)/logs_profiling
echo "Please check $(WORKING_DIR)/logs_profiling/gmon_$(WALLYCONF)* for logs and output files." echo "Please check $(VERILATOR_DIR)/logs_profiling/gmon_$(WALLYCONF)* for logs and output files."
run: obj_dir_non_profiling/Vtestbench_$(WALLYCONF) run: wkdir/$(WALLYCONF)_$(TEST)/Vtestbench
mkdir -p $(WORKING_DIR)/logs mkdir -p $(VERILATOR_DIR)/logs
time $(WORKING_DIR)/obj_dir_non_profiling/Vtestbench_$(WALLYCONF) +TEST=$(TEST) 2>&1 > $(WORKING_DIR)/logs/$(WALLYCONF)_$(TEST).log wkdir/$(WALLYCONF)_$(TEST)/Vtestbench +TEST=$(TEST) 2>&1 > $(VERILATOR_DIR)/logs/$(WALLYCONF)_$(TEST).log
echo "Please check $(WORKING_DIR)/logs/$(WALLYCONF)_$(TEST).log for logs and output files." echo "Please check $(VERILATOR_DIR)/logs/$(WALLYCONF)_$(TEST).log for logs and output files."
obj_dir_non_profiling/Vtestbench_$(WALLYCONF): $(SOURCE) wkdir/$(WALLYCONF)_$(TEST)/Vtestbench: $(SOURCE)
mkdir -p obj_dir_non_profiling verilator \
time verilator \ --Mdir wkdir/$(WALLYCONF)_$(TEST) -o Vtestbench \
--Mdir obj_dir_non_profiling -o Vtestbench_$(WALLYCONF) \ --binary \
-cc --binary \
$(OPT) $(PARAMS) $(NONPROF) \ $(OPT) $(PARAMS) $(NONPROF) \
--timescale "1ns/1ns" --timing --top-module testbench --relative-includes \ --timescale "1ns/1ns" --timing --top-module testbench --relative-includes \
"-I${WALLY}/config/shared" "-I${WALLY}/config/$(WALLYCONF)" \ "-I${WALLY}/config/shared" "-I${WALLY}/config/$(WALLYCONF)" \
wrapper.c \ ${WALLY}/sim/verilator/wrapper.c \
${WALLY}/src/cvw.sv ${WALLY}/testbench/testbench.sv ${WALLY}/testbench/common/*.sv ${WALLY}/src/*/*.sv ${WALLY}/src/*/*/*.sv ${WALLY}/src/cvw.sv ${WALLY}/testbench/testbench.sv ${WALLY}/testbench/common/*.sv ${WALLY}/src/*/*.sv ${WALLY}/src/*/*/*.sv
obj_dir_profiling/Vtestbench_$(WALLYCONF): $(SOURCE) obj_dir_profiling/Vtestbench_$(WALLYCONF): $(SOURCE)
mkdir -p obj_dir_profiling mkdir -p obj_dir_profiling
time verilator \ verilator \
--Mdir obj_dir_profiling -o Vtestbench_$(WALLYCONF) \ --Mdir obj_dir_profiling -o Vtestbench_$(WALLYCONF) \
-cc --binary \ --binary \
--prof-cfuncs $(OPT) $(PARAMS) \ --prof-cfuncs $(OPT) $(PARAMS) \
--timescale "1ns/1ns" --timing --top-module testbench --relative-includes \ --timescale "1ns/1ns" --timing --top-module testbench --relative-includes \
wrapper.c \ wrapper.c \
"-I${WALLY}/config/shared" "-I${WALLY}/config/$(WALLYCONF)" ${WALLY}/src/cvw.sv ${WALLY}/testbench/testbench.sv ${WALLY}/testbench/common/*.sv ${WALLY}/src/*/*.sv ${WALLY}/src/*/*/*.sv "-I${WALLY}/config/shared" "-I${WALLY}/config/$(WALLYCONF)" ${WALLY}/src/cvw.sv ${WALLY}/testbench/testbench.sv ${WALLY}/testbench/common/*.sv ${WALLY}/src/*/*.sv ${WALLY}/src/*/*/*.sv
questa: questa:
time vsim -c -do "do ${WALLY}/sim/wally-batch.do $(WALLYCONF) $(TEST)" vsim -c -do "do ${WALLY}/sim/wally-batch.do $(WALLYCONF) $(TEST)"
clean: clean:
rm -rf $(WORKING_DIR)/obj_dir_non_profiling $(WORKING_DIR)/obj_dir_profiling $(WORKING_DIR)/logs $(WORKING_DIR)/logs_profiling rm -rf $(VERILATOR_DIR)/wkdir $(VERILATOR_DIR)/obj_dir_profiling $(VERILATOR_DIR)/logs $(VERILATOR_DIR)/logs_profiling