Skip to content

Commit 41434fd

Browse files
committed
Update Wally benchmarks
1 parent 4b29ea8 commit 41434fd

File tree

2 files changed

+141
-0
lines changed

2 files changed

+141
-0
lines changed

benchmarks/coremark/Makefile

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Wally Coremark Makefile
2+
# Daniel Torres & David Harris 28 July 2022
3+
# Dogan Ulus 2025
4+
# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
5+
6+
WALLY ?= /opt/openhwgroup/cvw
7+
LABS344 ?= /workspaces/labs344
8+
9+
PORT_DIR = ${WALLY}/benchmarks/coremark/riscv64-baremetal
10+
cmbase= ${WALLY}/addins/coremark
11+
work_dir= ${LABS344}/benchmarks/coremark/work
12+
XLEN ?=32
13+
sources=$(cmbase)/core_main.c $(cmbase)/core_list_join.c $(cmbase)/coremark.h \
14+
$(cmbase)/core_matrix.c $(cmbase)/core_state.c $(cmbase)/core_util.c \
15+
$(PORT_DIR)/core_portme.h $(PORT_DIR)/core_portme.c $(PORT_DIR)/core_portme.mak \
16+
$(PORT_DIR)/crt.S $(PORT_DIR)/encoding.h $(PORT_DIR)/util.h $(PORT_DIR)/syscalls.c
17+
ABI := $(if $(findstring "64","$(XLEN)"),lp64,ilp32)
18+
ARCH := rv$(XLEN)im_zicsr_zba_zbb_zbs
19+
CONFIG := rv$(XLEN)gc
20+
#ARCH := rv$(XLEN)gc
21+
#ARCH := rv$(XLEN)imc_zicsr
22+
#ARCH := rv$(XLEN)im_zicsr
23+
#ARCH := rv$(XLEN)i_zicsr
24+
25+
PORT_CFLAGS = -g -mabi=$(ABI) -march=$(ARCH) -static -falign-functions=16 \
26+
-mbranch-cost=1 -DSKIP_DEFAULT_MEMSET -mtune=sifive-3-series -O3 -finline-functions -falign-jumps=4 \
27+
-fno-delete-null-pointer-checks -fno-rename-registers --param=loop-max-datarefs-for-datadeps=0 \
28+
-funroll-all-loops --param=uninlined-function-insns=8 -fno-tree-vrp -fwrapv -fipa-pta \
29+
-nostdlib -nostartfiles -ffreestanding -mstrict-align \
30+
-DTOTAL_DATA_SIZE=2000 -DMAIN_HAS_NOARGC=1 -DPERFORMANCE_RUN=1 -DITERATIONS=10 -DXLEN=$(XLEN)
31+
32+
all: $(work_dir)/coremark.bare.riscv.elf.memfile
33+
34+
run: $(work_dir)/coremark.bare.riscv.elf.memfile
35+
# python3 ${LABS344}/bin/wsim --sim verilator ${CONFIG} coremark 2>&1 | tee $(work_dir)/coremark.sim.log
36+
make -C ${LABS344}/sim/verilator WALLYCONF=${CONFIG} TEST=coremark TESTBENCH=testbench
37+
38+
$(work_dir)/coremark.bare.riscv.elf.memfile: $(work_dir)/coremark.bare.riscv
39+
riscv64-unknown-elf-objdump -D $< > $<.elf.objdump
40+
riscv64-unknown-elf-elf2hex --bit-width $(XLEN) --input $< --output $@
41+
${WALLY}/bin/extractFunctionRadix.sh $<.elf.objdump
42+
43+
$(work_dir)/coremark.bare.riscv: $(sources) Makefile
44+
$(MAKE) -C $(cmbase) PORT_DIR=$(PORT_DIR) compile RISCV=$(RISCV) XCFLAGS="$(PORT_CFLAGS)"
45+
mkdir -p $(work_dir)
46+
mv $(cmbase)/coremark.bare.riscv $(work_dir)
47+
48+
.PHONY: clean
49+
50+
clean:
51+
$(MAKE) -C $(cmbase) clean
52+
rm -f $(work_dir)/*
53+
54+

sim/verilator/Makefile

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# Verilator Makefile for WALLY
2+
# Kunlin Han, Rose Thompson, David Harris 2024
3+
# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
4+
5+
SHELL := /bin/bash
6+
WALLY ?= /opt/openhwgroup/cvw
7+
LABS344 ?= /workspaces/labs344
8+
9+
.PHONY: profile run clean
10+
11+
# verilator configurations
12+
OPT=--assert
13+
PARAMS?=--no-trace-top
14+
NONPROF?=--stats
15+
VERILATOR_DIR=${LABS344}/sim/verilator
16+
PLUS_ARGS=
17+
PARAM_ARGS=
18+
DEFINE_ARGS=
19+
EXPANDED_PARAM_ARGS:=$(patsubst %,-G%,$(PARAM_ARGS))
20+
21+
WALLYCONF?=rv64gc
22+
TEST?=arch64i
23+
TESTBENCH?=testbench
24+
25+
# constants
26+
# assume WALLY variable is correctly configured in the shell environment
27+
# INCLUDE_PATH are paths that Verilator should search for files it needs
28+
INCLUDE_PATH="-I${WALLY}/config/shared" "-I${WALLY}/config/$(WALLYCONF)" "-I${WALLY}/config/deriv/$(WALLYCONF)" "-I/usr/share/verilator/include"
29+
# SOURCES are source files
30+
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
31+
# DEPENDENCIES are configuration files and source files, which leads to recompilation of executables
32+
DEPENDENCIES=${WALLY}/config/shared/*.vh $(SOURCES)
33+
34+
WORKDIR = $(VERILATOR_DIR)/wkdir/$(WALLYCONF)_$(TEST)
35+
36+
# regular testbench requires a wrapper defining getenvval
37+
ifeq ($(TESTBENCH), testbench)
38+
WRAPPER=${WALLY}/sim/verilator/wrapper.c
39+
ARGTEST=+TEST=$(TEST)
40+
else
41+
WRAPPER=
42+
ARGTEST=
43+
endif
44+
45+
default: run
46+
47+
run: $(WORKDIR)/V${TESTBENCH}
48+
mkdir -p $(VERILATOR_DIR)/logs
49+
$(WORKDIR)/V${TESTBENCH} ${ARGTEST} $(PLUS_ARGS)
50+
51+
profile: obj_dir_profiling/V${TESTBENCH}_$(WALLYCONF)
52+
$(VERILATOR_DIR)/obj_dir_profiling/V${TESTBENCH}_$(WALLYCONF) ${ARGTEST}
53+
mv gmon.out gmon_$(WALLYCONF).out
54+
gprof $(VERILATOR_DIR)/obj_dir_profiling/V${TESTBENCH}_$(WALLYCONF) gmon_$(WALLYCONF).out > gmon_$(WALLYCONF).log
55+
verilator_profcfunc gmon_$(WALLYCONF).log > gmon_$(WALLYCONF).log2
56+
mkdir -p $(VERILATOR_DIR)/logs_profiling
57+
mv gmon_$(WALLYCONF)* $(VERILATOR_DIR)/logs_profiling
58+
echo "Please check $(VERILATOR_DIR)/logs_profiling/gmon_$(WALLYCONF)* for logs and output files."
59+
60+
$(WORKDIR)/V${TESTBENCH}: $(DEPENDENCIES)
61+
mkdir -p $(WORKDIR)
62+
verilator \
63+
--Mdir $(WORKDIR) -o V${TESTBENCH} \
64+
--binary --trace \
65+
$(OPT) $(PARAMS) $(NONPROF) \
66+
--top-module ${TESTBENCH} --relative-includes \
67+
$(INCLUDE_PATH) \
68+
${WRAPPER} \
69+
${DEFINE_ARGS} \
70+
${EXPANDED_PARAM_ARGS} \
71+
$(SOURCES)
72+
73+
obj_dir_profiling/V${TESTBENCH}_$(WALLYCONF): $(DEPENDENCIES)
74+
mkdir -p obj_dir_profiling
75+
verilator \
76+
--Mdir obj_dir_profiling -o V${TESTBENCH}_$(WALLYCONF) \
77+
--binary \
78+
--prof-cfuncs $(OPT) $(PARAMS) \
79+
--top-module ${TESTBENCH} --relative-includes \
80+
$(INCLUDE_PATH) \
81+
${WRAPPER} \
82+
${DEFINE_ARGS} \
83+
${EXPANDED_PARAM_ARGS} \
84+
$(SOURCES)
85+
86+
clean:
87+
rm -rf $(VERILATOR_DIR)/wkdir $(VERILATOR_DIR)/obj_dir_profiling $(VERILATOR_DIR)/logs $(VERILATOR_DIR)/logs_profiling

0 commit comments

Comments
 (0)