mirror of
https://github.com/openhwgroup/cva6.git
synced 2025-04-22 05:07:21 -04:00
Add torture test to CI
This commit is contained in:
parent
e9cabc452c
commit
54010e961a
7 changed files with 223 additions and 43 deletions
|
@ -23,15 +23,16 @@ variables:
|
|||
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
- test_std
|
||||
|
||||
# prepare
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- ci/build-riscv-tests.sh
|
||||
- ci/get-torture.sh
|
||||
- make clean
|
||||
- make build questa_version=$QUESTASIM_VERSION
|
||||
- make verilate verilator=$VERILATOR_ROOT/bin/verilator
|
||||
- make torture-gen
|
||||
artifacts:
|
||||
paths:
|
||||
- tmp
|
||||
|
@ -74,4 +75,16 @@ run-benchmarks-verilator:
|
|||
dependencies:
|
||||
- build
|
||||
|
||||
torture-quest:
|
||||
stage: test_std
|
||||
script:
|
||||
- make torture-rtest
|
||||
dependencies:
|
||||
- build
|
||||
|
||||
torture-ver:
|
||||
stage: test_std
|
||||
script:
|
||||
- make torture-rtest-verilator
|
||||
dependencies:
|
||||
- build
|
||||
|
|
|
@ -29,6 +29,7 @@ addons:
|
|||
- texinfo
|
||||
- python-pexpect
|
||||
- libusb-1.0-0-dev
|
||||
- default-jdk
|
||||
env:
|
||||
global:
|
||||
- RISCV="/home/travis/riscv_install"
|
||||
|
@ -86,5 +87,12 @@ jobs:
|
|||
script:
|
||||
- ci/build-riscv-tests.sh
|
||||
- make -j${NUM_JOBS} run-asm-tests2-verilator verilator=$VERILATOR_ROOT/bin/verilator
|
||||
- stage: test
|
||||
name: run torture
|
||||
script:
|
||||
- ci/get-torture.sh
|
||||
- make clean
|
||||
- make torture-gen
|
||||
- make torture-rtest-verilator verilator=$VERILATOR_ROOT/bin/verilator
|
||||
# extra time during long builds
|
||||
install: travis_wait
|
||||
|
|
124
Makefile
124
Makefile
|
@ -17,14 +17,16 @@ questa_version ?= ${QUESTASIM_VERSION}
|
|||
verilator ?= verilator
|
||||
# traget option
|
||||
target-options ?=
|
||||
# additional definess
|
||||
defines ?=
|
||||
# Sources
|
||||
# Package files -> compile first
|
||||
ariane_pkg := include/riscv_pkg.sv \
|
||||
src/debug/dm_pkg.sv \
|
||||
src/axi/src/axi_pkg.sv \
|
||||
include/ariane_pkg.sv \
|
||||
include/std_cache_pkg.sv \
|
||||
include/axi_if.sv
|
||||
ariane_pkg := include/riscv_pkg.sv \
|
||||
src/debug/dm_pkg.sv \
|
||||
src/axi/src/axi_pkg.sv \
|
||||
include/ariane_pkg.sv \
|
||||
include/std_cache_pkg.sv \
|
||||
include/axi_if.sv
|
||||
|
||||
# utility modules
|
||||
util := $(wildcard src/util/*.svh) \
|
||||
|
@ -63,11 +65,12 @@ src := $(filter-out src/ariane_regfile.sv, $(wildcard src/*.sv)) \
|
|||
|
||||
|
||||
|
||||
|
||||
# root path
|
||||
root-dir := $(shell pwd)
|
||||
# look for testbenches
|
||||
tbs := tb/ariane_tb.sv tb/ariane_testharness.sv
|
||||
# RISCV asm tests and benchmark setup (used for CI)
|
||||
# there is a defined test-list with selected CI tests
|
||||
# there is a definesd test-list with selected CI tests
|
||||
riscv-test-dir := tmp/riscv-tests/build/isa/
|
||||
riscv-benchmarks-dir := tmp/riscv-tests/build/benchmarks/
|
||||
riscv-asm-tests-list := ci/riscv-asm-tests.list
|
||||
|
@ -76,17 +79,20 @@ riscv-asm-tests := $(shell xargs printf '\n%s' < $(riscv-asm-tests-list)
|
|||
riscv-benchmarks := $(shell xargs printf '\n%s' < $(riscv-benchmarks-list) | cut -b 1-)
|
||||
# preset which runs a single test
|
||||
riscv-test ?= rv64ui-p-add
|
||||
# failed test directory
|
||||
failed-tests := $(wildcard failedtests/*.S)
|
||||
|
||||
# Search here for include files (e.g.: non-standalone components)
|
||||
incdir := ./includes
|
||||
# Compile and sim flags
|
||||
compile_flag += +cover=bcfst+/dut -incr -64 -nologo -quiet -suppress 13262 -permissive
|
||||
compile_flag += +cover=bcfst+/dut -incr -64 -nologo -quiet -suppress 13262 -permissive +define+$(defines)
|
||||
uvm-flags += +UVM_NO_RELNOTES
|
||||
# Iterate over all include directories and write them with +incdir+ prefixed
|
||||
# +incdir+ works for Verilator and QuestaSim
|
||||
list_incdir := $(foreach dir, ${incdir}, +incdir+$(dir))
|
||||
|
||||
# RISCV torture setup
|
||||
riscv-torture-dir := tmp/riscv-torture/
|
||||
riscv-torture-bin := java -Xmx1G -Xss8M -XX:MaxPermSize=128M -jar sbt-launch.jar
|
||||
|
||||
# Build the TB and module using QuestaSim
|
||||
build: $(library) $(library)/.build-srcs $(library)/.build-tb $(library)/ariane_dpi.so
|
||||
# Optimize top level
|
||||
|
@ -107,10 +113,12 @@ $(library)/.build-tb: $(dpi) $(tbs)
|
|||
touch $(library)/.build-tb
|
||||
|
||||
# compile DPIs
|
||||
work/%.o: tb/dpi/%.cc $(dpi_hdr)
|
||||
$(library)/%.o: tb/dpi/%.cc $(dpi_hdr)
|
||||
mkdir -p $(library)
|
||||
$(CXX) -shared -fPIC -std=c++0x -Bsymbolic -I$(QUESTASIM_HOME)/include -o $@ $<
|
||||
|
||||
$(library)/ariane_dpi.so: $(dpi)
|
||||
mkdir -p $(library)
|
||||
# Compile C-code and generate .so file
|
||||
$(CXX) -shared -m64 -o $(library)/ariane_dpi.so $? -lfesvr
|
||||
|
||||
|
@ -118,59 +126,57 @@ $(library):
|
|||
# Create the library
|
||||
vlib${questa_version} ${library}
|
||||
|
||||
# +jtag_rbb_enable=1
|
||||
sim: build $(library)/ariane_dpi.so
|
||||
vsim${questa_version} +permissive -64 -lib ${library} +max-cycles=$(max_cycles) +UVM_TESTNAME=${test_case} \
|
||||
+BASEDIR=$(riscv-test-dir) $(uvm-flags) "+UVM_VERBOSITY=LOW" -coverage -classdebug +jtag_rbb_enable=0 \
|
||||
$(QUESTASIM_FLAGS) \
|
||||
-gblso $(RISCV)/lib/libfesvr.so -sv_lib $(library)/ariane_dpi -do " do tb/wave/wave_core.do; run -all; exit" \
|
||||
vsim${questa_version} +permissive -64 -lib ${library} +max-cycles=$(max_cycles) +UVM_TESTNAME=${test_case} \
|
||||
+BASEDIR=$(riscv-test-dir) $(uvm-flags) "+UVM_VERBOSITY=LOW" -coverage -classdebug +jtag_rbb_enable=0 \
|
||||
$(QUESTASIM_FLAGS) \
|
||||
-gblso $(RISCV)/lib/libfesvr.so -sv_lib $(library)/ariane_dpi -do " do tb/wave/wave_core.do; run -all; exit" \
|
||||
${top_level}_optimized +permissive-off ++$(riscv-test-dir)/$(riscv-test) ++$(target-options)
|
||||
|
||||
simc: build $(library)/ariane_dpi.so
|
||||
vsim${questa_version} +permissive -64 -c -lib ${library} +max-cycles=$(max_cycles) +UVM_TESTNAME=${test_case} \
|
||||
+BASEDIR=$(riscv-test-dir) $(uvm-flags) "+UVM_VERBOSITY=LOW" -coverage -classdebug +jtag_rbb_enable=0 \
|
||||
$(QUESTASIM_FLAGS) \
|
||||
-gblso $(RISCV)/lib/libfesvr.so -sv_lib $(library)/ariane_dpi -do " run -all; exit" \
|
||||
+BASEDIR=$(riscv-test-dir) $(uvm-flags) "+UVM_VERBOSITY=LOW" -coverage -classdebug +jtag_rbb_enable=0 \
|
||||
$(QUESTASIM_FLAGS) \
|
||||
-gblso $(RISCV)/lib/libfesvr.so -sv_lib $(library)/ariane_dpi -do " run -all; exit" \
|
||||
${top_level}_optimized +permissive-off ++$(riscv-test-dir)/$(riscv-test) ++$(target-options)
|
||||
|
||||
|
||||
$(riscv-asm-tests): build $(library)/ariane_dpi.so
|
||||
vsim${questa_version} +permissive -64 -c -lib ${library} +max-cycles=$(max_cycles) +UVM_TESTNAME=${test_case} \
|
||||
+BASEDIR=$(riscv-test-dir) $(uvm-flags) "+UVM_VERBOSITY=LOW" -coverage -classdebug +jtag_rbb_enable=0 \
|
||||
$(QUESTASIM_FLAGS) \
|
||||
-gblso $(RISCV)/lib/libfesvr.so -sv_lib $(library)/ariane_dpi \
|
||||
+BASEDIR=$(riscv-test-dir) $(uvm-flags) "+UVM_VERBOSITY=LOW" -coverage -classdebug +jtag_rbb_enable=0 \
|
||||
$(QUESTASIM_FLAGS) \
|
||||
-gblso $(RISCV)/lib/libfesvr.so -sv_lib $(library)/ariane_dpi \
|
||||
-do "coverage save -onexit tmp/$@.ucdb; run -a; quit -code [coverage attribute -name TESTSTATUS -concise]" \
|
||||
${top_level}_optimized +permissive-off ++$(riscv-test-dir)/$@ ++$(target-options) | tee tmp/riscv-asm-tests-$@.log
|
||||
|
||||
$(riscv-benchmarks): build $(library)/ariane_dpi.so
|
||||
vsim${questa_version} +permissive -64 -c -lib ${library} +max-cycles=$(max_cycles) +UVM_TESTNAME=${test_case} \
|
||||
+BASEDIR=$(riscv-benchmarks-dir) $(uvm-flags) "+UVM_VERBOSITY=LOW" -coverage -classdebug +jtag_rbb_enable=0 \
|
||||
$(QUESTASIM_FLAGS) \
|
||||
-gblso $(RISCV)/lib/libfesvr.so -sv_lib $(library)/ariane_dpi \
|
||||
$(QUESTASIM_FLAGS) \
|
||||
-gblso $(RISCV)/lib/libfesvr.so -sv_lib $(library)/ariane_dpi \
|
||||
-do "coverage save -onexit tmp/$@.ucdb; run -a; quit -code [coverage attribute -name TESTSTATUS -concise]" \
|
||||
${top_level}_optimized +permissive-off ++$(riscv-benchmarks-dir)/$@ ++$(target-options) | tee tmp/riscv-benchmarks-$@.log
|
||||
|
||||
|
||||
# can use -jX to run ci tests in parallel using X processes
|
||||
run-asm-tests: $(riscv-asm-tests)
|
||||
make check-asm-tests
|
||||
|
||||
check-asm-tests:
|
||||
ci/check-tests.sh tmp/riscv-asm-tests- $(riscv-asm-tests-list)
|
||||
ci/check-tests.sh tmp/riscv-asm-tests- $(shell wc -l $(riscv-asm-tests-list) | awk -F " " '{ print $1 }')
|
||||
|
||||
# can use -jX to run ci tests in parallel using X processes
|
||||
run-benchmarks: $(riscv-benchmarks)
|
||||
make check-benchmarks
|
||||
|
||||
check-benchmarks:
|
||||
ci/check-tests.sh tmp/riscv-benchmarks- $(riscv-benchmarks-list)
|
||||
|
||||
ci/check-tests.sh tmp/riscv-benchmarks- $(shell wc -l $(riscv-benchmarks-list) | awk -F " " '{ print $1 }')
|
||||
|
||||
# verilator-specific
|
||||
verilate_command := $(verilator) \
|
||||
$(ariane_pkg) \
|
||||
$(filter-out tb/ariane_bt.sv,$(src)) \
|
||||
+define+$(defines) \
|
||||
src/util/sram.sv \
|
||||
+incdir+src/axi_node \
|
||||
+incdir+src/axi_node \
|
||||
--unroll-count 256 \
|
||||
-Werror-PINMISSING \
|
||||
-Werror-IMPLICIT \
|
||||
|
@ -189,7 +195,7 @@ verilate_command := $(verilator)
|
|||
--exe tb/ariane_tb.cpp tb/dpi/SimDTM.cc tb/dpi/SimJTAG.cc tb/dpi/remote_bitbang.cc
|
||||
|
||||
# User Verilator, at some point in the future this will be auto-generated
|
||||
verilate:
|
||||
verilate: $(library)/ariane_dpi.so $(library)/SimJTAG.o $(library)/SimDTM.o $(library)/remote_bitbang.o
|
||||
$(verilate_command)
|
||||
cd build && make -j${NUM_JOBS} -f Variane_testharness.mk
|
||||
|
||||
|
@ -209,16 +215,54 @@ $(addsuffix -verilator,$(riscv-benchmarks)): verilate
|
|||
|
||||
run-benchmarks-verilator: $(addsuffix -verilator,$(riscv-benchmarks))
|
||||
|
||||
|
||||
verify:
|
||||
qverify vlog -sv src/csr_regfile.sv
|
||||
|
||||
clean:
|
||||
rm -rf work/ *.ucdb
|
||||
rm -rf build
|
||||
rm -f tmp/*.ucdb
|
||||
rm -f tmp/*.log
|
||||
rm -f *.wlf *vstf wlft*
|
||||
# torture-specific
|
||||
torture-gen:
|
||||
cd $(riscv-torture-dir) && $(riscv-torture-bin) 'generator/run'
|
||||
|
||||
torture-itest:
|
||||
cd $(riscv-torture-dir) && $(riscv-torture-bin) 'testrun/run -a output/test.S'
|
||||
|
||||
torture-rtest: build
|
||||
cd $(riscv-torture-dir) && printf "#!/bin/sh\ncd $(root-dir) && make run-torture defines=$(defines)" > call.sh && chmod +x call.sh
|
||||
cd $(riscv-torture-dir) && $(riscv-torture-bin) 'testrun/run -r ./call.sh -a output/test.S' | tee output/test.log
|
||||
make check-torture
|
||||
|
||||
torture-rtest-verilator: verilate
|
||||
cd $(riscv-torture-dir) && printf "#!/bin/sh\ncd $(root-dir) && make run-torture-verilator defines=$(defines)" > call.sh && chmod +x call.sh
|
||||
cd $(riscv-torture-dir) && $(riscv-torture-bin) 'testrun/run -r ./call.sh -a output/test.S' | tee output/test-verilator.log
|
||||
make check-torture-verilator
|
||||
|
||||
run-torture: build $(library)/ariane_dpi.so
|
||||
vsim${questa_version} +permissive -64 -c -lib ${library} +max-cycles=$(max_cycles)+UVM_TESTNAME=${test_case} \
|
||||
+BASEDIR=$(riscv-torture-dir) $(uvm-flags) "+UVM_VERBOSITY=LOW" -coverage -classdebug +jtag_rbb_enable=0 \
|
||||
$(QUESTASIM_FLAGS) \
|
||||
-gblso $(RISCV)/lib/libfesvr.so -sv_lib $(library)/ariane_dpi \
|
||||
-do "coverage save -onexit tmp/$@.ucdb; run -a; quit -code [coverage attribute -name TESTSTATUS -concise]" \
|
||||
${top_level}_optimized +permissive-off \
|
||||
+signature=$(riscv-torture-dir)/output/test.rtlsim.sig ++$(riscv-torture-dir)/output/test ++$(target-options)
|
||||
|
||||
run-torture-verilator: verilate
|
||||
build/Variane_testharness +max-cycles=$(max_cycles) +signature=$(riscv-torture-dir)/output/test.rtlsim.verilator.sig $(riscv-torture-dir)/output/test
|
||||
|
||||
|
||||
check-torture:
|
||||
grep 'All signatures match for output/test' $(riscv-torture-dir)/output/test.log
|
||||
diff -s $(riscv-torture-dir)/output/test.spike.sig $(riscv-torture-dir)/output/test.rtlsim.sig
|
||||
|
||||
check-torture-verilator:
|
||||
grep 'All signatures match for output/test' $(riscv-torture-dir)/output/test-verilator.log
|
||||
diff -s $(riscv-torture-dir)/output/test.spike.sig $(riscv-torture-dir)/output/test.rtlsim.verilator.sig
|
||||
|
||||
clean:
|
||||
rm -rf $(riscv-torture-dir)/output/test*
|
||||
rm -rf work/ *.ucdb build
|
||||
rm -f tmp/*.ucdb tmp/*.log *.wlf *vstf wlft*
|
||||
|
||||
.PHONY:
|
||||
build lint build-moore $(riscv-asm-tests) $(addsuffix _verilator,$(riscv-asm-tests)) $(riscv-benchmarks) $(addsuffix _verilator,$(riscv-benchmarks)) check simc sim verilate clean verilate
|
||||
build lint build-moore check simc sim verilate clean verilate \
|
||||
$(riscv-asm-tests) $(addsuffix _verilator,$(riscv-asm-tests)) \
|
||||
$(riscv-benchmarks) $(addsuffix _verilator,$(riscv-benchmarks)) \
|
||||
torture-gen torture-igentest torture-rgentest torture-itest torture-rtest
|
||||
|
|
52
ci/default.config
Normal file
52
ci/default.config
Normal file
|
@ -0,0 +1,52 @@
|
|||
torture.generator.nseqs 1000
|
||||
torture.generator.memsize 1024
|
||||
torture.generator.fprnd 0
|
||||
torture.generator.amo false
|
||||
torture.generator.mul true
|
||||
torture.generator.divider true
|
||||
torture.generator.segment true
|
||||
torture.generator.loop true
|
||||
torture.generator.loop_size 64
|
||||
|
||||
torture.generator.mix.xmem 15
|
||||
torture.generator.mix.xbranch 25
|
||||
torture.generator.mix.xalu 60
|
||||
torture.generator.mix.fgen 0
|
||||
torture.generator.mix.fpmem 0
|
||||
torture.generator.mix.fax 0
|
||||
torture.generator.mix.fdiv 0
|
||||
torture.generator.mix.vec 0
|
||||
|
||||
torture.generator.vec.vf 1
|
||||
torture.generator.vec.seq 20
|
||||
torture.generator.vec.memsize 128
|
||||
torture.generator.vec.numsregs 64
|
||||
torture.generator.vec.mul false
|
||||
torture.generator.vec.div false
|
||||
torture.generator.vec.mix true
|
||||
torture.generator.vec.fpu false
|
||||
torture.generator.vec.fma false
|
||||
torture.generator.vec.fcvt false
|
||||
torture.generator.vec.fdiv false
|
||||
torture.generator.vec.amo false
|
||||
torture.generator.vec.seg false
|
||||
torture.generator.vec.stride false
|
||||
torture.generator.vec.pred_alu true
|
||||
torture.generator.vec.pred_mem true
|
||||
|
||||
torture.generator.vec.mix.valu 20
|
||||
torture.generator.vec.mix.vpop 60
|
||||
torture.generator.vec.mix.vmem 20
|
||||
torture.generator.vec.mix.vonly 0
|
||||
|
||||
torture.testrun.maxcycles 10000000
|
||||
torture.testrun.virtual false
|
||||
torture.testrun.seek true
|
||||
torture.testrun.dump false
|
||||
torture.testrun.vec false
|
||||
|
||||
torture.overnight.errors 1
|
||||
torture.overnight.minutes 1
|
||||
torture.overnight.outdir output/failedtests
|
||||
torture.overnight.email your@email.address
|
||||
|
21
ci/get-torture.sh
Executable file
21
ci/get-torture.sh
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
||||
VERSION="59b0f0f224ff4f1eb6ebb1b4dd7eaf1ab3fac2e5"
|
||||
|
||||
cd $ROOT/tmp
|
||||
|
||||
if [ -z ${NUM_JOBS} ]; then
|
||||
NUM_JOBS=1
|
||||
fi
|
||||
|
||||
[ -d $ROOT/tmp/riscv-torture ] || git clone https://github.com/ucb-bar/riscv-torture.git
|
||||
cd riscv-torture
|
||||
git checkout $VERSION
|
||||
git submodule update --init --recursive
|
||||
|
||||
# copy ariane specific config
|
||||
cp config/default.config config/default.config.bak
|
||||
cp $ROOT/ci/default.config config/default.config
|
||||
git apply $ROOT/ci/torture_make.patch
|
||||
|
41
ci/torture_make.patch
Normal file
41
ci/torture_make.patch
Normal file
|
@ -0,0 +1,41 @@
|
|||
diff --git a/output/Makefile b/output/Makefile
|
||||
index cf1214f..c81bccc 100644
|
||||
--- a/output/Makefile
|
||||
+++ b/output/Makefile
|
||||
@@ -20,9 +20,9 @@ extra_files =
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
RISCV_GCC = riscv64-unknown-elf-gcc
|
||||
-RISCV_GCC_OPTS = -nostdlib -nostartfiles -Wa,-march=RVIMAFDXhwacha
|
||||
+RISCV_GCC_OPTS = -nostdlib -nostartfiles -Wa,-march=rv64imc
|
||||
RISCV_OBJDUMP = riscv64-unknown-elf-objdump --disassemble-all --section=.text --section=.data --section=.bss
|
||||
-RISCV_SIM = spike --extension=hwacha
|
||||
+RISCV_SIM = spike
|
||||
|
||||
#------------------------------------------------------------
|
||||
# Build assembly tests
|
||||
@@ -38,9 +38,6 @@ $(asm_tests_dump): %.dump: %
|
||||
$(asm_tests_bin): %: %.S $(extra_files)
|
||||
$(RISCV_GCC) $(RISCV_GCC_OPTS) -I../env/p -T../env/p/link.ld $< -o $@
|
||||
|
||||
-$(asm_tests_hex): %.hex: % $(extra_files)
|
||||
- elf2hex 16 16384 $< > $@
|
||||
-
|
||||
$(asm_tests_sig): %.sig: %
|
||||
$(RISCV_SIM) +signature=$@ $<
|
||||
|
||||
@@ -51,12 +48,12 @@ run: $(asm_tests_sig)
|
||||
echo; perl -ne 'print " [$$1] $$ARGV \t$$2\n" if /\*{3}(.{8})\*{3}(.*)/' \
|
||||
$(asm_tests_sig); echo;
|
||||
|
||||
-junk += $(asm_tests_bin) $(asm_tests_dump) $(asm_tests_sig) $(asm_tests_hex)
|
||||
+junk += $(asm_tests_bin) $(asm_tests_dump) $(asm_tests_sig)
|
||||
|
||||
#------------------------------------------------------------
|
||||
# Default
|
||||
|
||||
-all: $(asm_tests_dump) $(asm_tests_hex)
|
||||
+all: $(asm_tests_dump)
|
||||
|
||||
#------------------------------------------------------------
|
||||
# Clean up
|
|
@ -38,3 +38,4 @@ make clean
|
|||
make -j${NUM_JOBS} verilate verilator=$VERILATOR_ROOT/bin/verilator
|
||||
make -j${NUM_JOBS} run-asm-tests-verilator verilator=$VERILATOR_ROOT/bin/verilator
|
||||
make -j${NUM_JOBS} run-benchmarks-verilator verilator=$VERILATOR_ROOT/bin/verilator
|
||||
make -j${NUM_JOBS} run-torture-verilator verilator=$VERILATOR_ROOT/bin/verilator
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue