From 99282165ae1db9c5a8360eaa76813b7590f00ebe Mon Sep 17 00:00:00 2001 From: David Harris Date: Sat, 4 May 2024 02:45:01 -0700 Subject: [PATCH] Directed functional coverage tests --- Makefile | 12 ++++++++++-- tests/testgen/covergen.py | 24 ++++++++++++++++-------- tests/testgen/covergen_footer.S | 3 +++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 651933154..a94701b04 100644 --- a/Makefile +++ b/Makefile @@ -59,6 +59,8 @@ funcovreg: iter-elf.bash --search ${WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/I --cover vcover report -details -html ${SIM}/questa/riscv.ucdb + + # test_name=riscv_arithmetic_basic_test rvdv: python3 ${WALLY}/addins/riscv-dv/run.py --test ${test_name} --target rv64gc --output tests/riscvdv --iterations 1 -si questa --iss spike --verbose --cov --seed 0 --steps gen,gcc_compile >> ${SIM}/questa/regression_logs/${test_name}.log 2>&1 @@ -100,11 +102,17 @@ rvdv_regression: rvdv_combine_coverage: mkdir -p ${SIM}/questa/regcov cd ${SIM}/questa/regcov && rm -rf * - vcover merge ${SIM}/questa/regcov/regcov.ucdb ${SIM}/questa/regression_ucdbs/* -suppress 6854 -64 + run-elf-cov.bash --seed ${SIM}/questa/seed0.txt --verbose --coverdb ${SIM}/questa/regcov/add.ucdb --elf ${WALLY}/tests/functcov/rv64/I/WALLY-COV-add.elf >> ${SIM}/questa/regression_logs/add.log 2>&1 + run-elf-cov.bash --seed ${SIM}/questa/seed0.txt --verbose --coverdb ${SIM}/questa/regcov/and.ucdb --elf ${WALLY}/tests/functcov/rv64/I/WALLY-COV-and.elf >> ${SIM}/questa/regression_logs/add.log 2>&1 + run-elf-cov.bash --seed ${SIM}/questa/seed0.txt --verbose --coverdb ${SIM}/questa/regcov/ori.ucdb --elf ${WALLY}/tests/functcov/rv64/I/WALLY-COV-ori.elf >> ${SIM}/questa/regression_logs/add.log 2>&1 + + vcover merge ${SIM}/questa/regcov/regcov.ucdb ${SIM}/questa/regcov/*.ucdb -suppress 6854 -64 + # vcover merge ${SIM}/questa/regcov/regcov.ucdb ${SIM}/questa/regression_ucdbs/* -suppress 6854 -64 vcover report -details -html ${SIM}/questa/regcov/regcov.ucdb vcover report ${SIM}/questa/regcov/regcov.ucdb -details -cvg > ${SIM}/questa/regcov/regcov.ucdb.log vcover report ${SIM}/questa/regcov/regcov.ucdb -testdetails -cvg > ${SIM}/questa/regcov/regcov.ucdb.testdetails.log - vcover report ${SIM}/questa/regcov/regcov.ucdb -details -cvg -below 100 | egrep "Coverpoint|Covergroup|Cross" | grep -v Metric > ${SIM}/questa/regcov/regcov.ucdb.summary.log +# vcover report ${SIM}/questa/regcov/regcov.ucdb -details -cvg -below 100 | egrep "Coverpoint|Covergroup|Cross" | grep -v Metric > ${SIM}/questa/regcov/regcov.ucdb.summary.log + vcover report ${SIM}/questa/regcov/regcov.ucdb -details -cvg | egrep "Coverpoint|Covergroup|Cross|TYPE" > ${SIM}/questa/regcov/regcov.ucdb.summary.log grep "Total Coverage By Instance" ${SIM}/questa/regcov/regcov.ucdb.log remove_rvdv_artifacts: diff --git a/tests/testgen/covergen.py b/tests/testgen/covergen.py index d2170e476..92d5a1593 100755 --- a/tests/testgen/covergen.py +++ b/tests/testgen/covergen.py @@ -33,6 +33,10 @@ def signedImm12(imm): def writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen): lines = "\n# Testcase " + str(desc) + "\n" + if (rs1val < 0): + rs1val = rs1val + 2**xlen + if (rs2val < 0): + rs2val = rs2val + 2**xlen lines = lines + "li x" + str(rd) + ", " + formatstr.format(rdval) + " # initialize rd to a random value that should get changed\n" if (test in rtype): lines = lines + "li x" + str(rs1) + ", " + formatstr.format(rs1val) + " # initialize rs1 to a random value \n" @@ -52,6 +56,10 @@ def writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, stor def randomize(): rs1 = randint(1, 31) rs2 = randint(1, 31) + # choose rd that is different than rs1 and rs2 + rd = rs1 + while (rd == rs1 or rd == rs2): + rd = randint(1, 31) rd = randint(1, 31) rs1val = randint(0, 2**xlen-1) rs2val = randint(0, 2**xlen-1) @@ -80,25 +88,25 @@ def make_rs2(test, storecmd, xlen): def make_rd_rs1(test, storecmd, xlen): for r in range(32): [rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() - desc = "cp_rd_rs1 (Test rd = rs1 = x" + str(r) + ")" + desc = "cmp_rd_rs1 (Test rd = rs1 = x" + str(r) + ")" writeCovVector(desc, r, rs2, r, rs1val, rs2val, immval, rdval, test, storecmd, xlen) def make_rd_rs2(test, storecmd, xlen): for r in range(32): [rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() - desc = "cp_rd_rs2 (Test rd = rs1 = x" + str(r) + ")" + desc = "cmp_rd_rs2 (Test rd = rs1 = x" + str(r) + ")" writeCovVector(desc, rs1, r, r, rs1val, rs2val, immval, rdval, test, storecmd, xlen) def make_rd_rs1_rs2(test, storecmd, xlen): for r in range(32): [rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() - desc = "cp_rd_rs1_rs2 (Test rd = rs1 = rs2 = x" + str(r) + ")" + desc = "cmp_rd_rs1_rs2 (Test rd = rs1 = rs2 = x" + str(r) + ")" writeCovVector(desc, r, r, r, rs1val, rs2val, immval, rdval, test, storecmd, xlen) def make_rs1_rs2(test, storecmd, xlen): for r in range(32): [rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() - desc = "cp_rd_rs1_rs2 (Test rs1 = rs2 = x" + str(r) + ")" + desc = "cmp_rd_rs1_rs2 (Test rs1 = rs2 = x" + str(r) + ")" writeCovVector(desc, r, r, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen) def make_rs1_maxvals(test, storecmd, xlen): @@ -140,14 +148,14 @@ def make_rs1_rs2_eqval(test, storecmd, xlen): def make_rs1_sign(test, storecmd, xlen): for v in [1, -1]: [rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() - rs1val = abs(rs1val) * v; + rs1val = abs(rs1val % 2**(xlen-1)) * v; desc = "cp_rs1_sign (Test source rs1 value = " + hex(rs1val) + ")" writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen) def make_rs2_sign(test, storecmd, xlen): for v in [1, -1]: [rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() - rs2val = abs(rs2val) * v; + rs2val = abs(rs2val % 2**(xlen-1)) * v; desc = "cp_rs2_sign (Test source rs2 value = " + hex(rs2val) + ")" writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen) @@ -155,8 +163,8 @@ def make_cr_rs1_rs2_sign(test, storecmd, xlen): for v1 in [1, -1]: for v2 in [1, -1]: [rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() - rs1val = abs(rs1val) * v1; - rs2val = abs(rs2val) * v2; + rs1val = abs(rs1val % 2**(xlen-1)) * v1; + rs2val = abs(rs2val % 2**(xlen-1)) * v2; desc = "cr_rs1_rs2 (Test source rs1 = " + hex(rs1val) + " rs2 = " + hex(rs2val) + ")" writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen) diff --git a/tests/testgen/covergen_footer.S b/tests/testgen/covergen_footer.S index 597a00f2a..2e4abbbfc 100644 --- a/tests/testgen/covergen_footer.S +++ b/tests/testgen/covergen_footer.S @@ -1,2 +1,5 @@ +self_loop: + j self_loop + .end