Directed functional coverage tests

This commit is contained in:
David Harris 2024-05-04 02:45:01 -07:00
parent 712a167a3a
commit 99282165ae
3 changed files with 29 additions and 10 deletions

View File

@ -59,6 +59,8 @@ funcovreg:
iter-elf.bash --search ${WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/I --cover iter-elf.bash --search ${WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/I --cover
vcover report -details -html ${SIM}/questa/riscv.ucdb vcover report -details -html ${SIM}/questa/riscv.ucdb
# test_name=riscv_arithmetic_basic_test # test_name=riscv_arithmetic_basic_test
rvdv: 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 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: rvdv_combine_coverage:
mkdir -p ${SIM}/questa/regcov mkdir -p ${SIM}/questa/regcov
cd ${SIM}/questa/regcov && rm -rf * 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 -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 -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 -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 grep "Total Coverage By Instance" ${SIM}/questa/regcov/regcov.ucdb.log
remove_rvdv_artifacts: remove_rvdv_artifacts:

View File

@ -33,6 +33,10 @@ def signedImm12(imm):
def writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen): def writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen):
lines = "\n# Testcase " + str(desc) + "\n" 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" lines = lines + "li x" + str(rd) + ", " + formatstr.format(rdval) + " # initialize rd to a random value that should get changed\n"
if (test in rtype): if (test in rtype):
lines = lines + "li x" + str(rs1) + ", " + formatstr.format(rs1val) + " # initialize rs1 to a random value \n" 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(): def randomize():
rs1 = randint(1, 31) rs1 = randint(1, 31)
rs2 = 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) rd = randint(1, 31)
rs1val = randint(0, 2**xlen-1) rs1val = randint(0, 2**xlen-1)
rs2val = 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): def make_rd_rs1(test, storecmd, xlen):
for r in range(32): for r in range(32):
[rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() [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) writeCovVector(desc, r, rs2, r, rs1val, rs2val, immval, rdval, test, storecmd, xlen)
def make_rd_rs2(test, storecmd, xlen): def make_rd_rs2(test, storecmd, xlen):
for r in range(32): for r in range(32):
[rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() [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) writeCovVector(desc, rs1, r, r, rs1val, rs2val, immval, rdval, test, storecmd, xlen)
def make_rd_rs1_rs2(test, storecmd, xlen): def make_rd_rs1_rs2(test, storecmd, xlen):
for r in range(32): for r in range(32):
[rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() [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) writeCovVector(desc, r, r, r, rs1val, rs2val, immval, rdval, test, storecmd, xlen)
def make_rs1_rs2(test, storecmd, xlen): def make_rs1_rs2(test, storecmd, xlen):
for r in range(32): for r in range(32):
[rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() [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) writeCovVector(desc, r, r, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen)
def make_rs1_maxvals(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): def make_rs1_sign(test, storecmd, xlen):
for v in [1, -1]: for v in [1, -1]:
[rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() [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) + ")" desc = "cp_rs1_sign (Test source rs1 value = " + hex(rs1val) + ")"
writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen) writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen)
def make_rs2_sign(test, storecmd, xlen): def make_rs2_sign(test, storecmd, xlen):
for v in [1, -1]: for v in [1, -1]:
[rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() [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) + ")" desc = "cp_rs2_sign (Test source rs2 value = " + hex(rs2val) + ")"
writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen) 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 v1 in [1, -1]:
for v2 in [1, -1]: for v2 in [1, -1]:
[rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize() [rs1, rs2, rd, rs1val, rs2val, immval, rdval] = randomize()
rs1val = abs(rs1val) * v1; rs1val = abs(rs1val % 2**(xlen-1)) * v1;
rs2val = abs(rs2val) * v2; rs2val = abs(rs2val % 2**(xlen-1)) * v2;
desc = "cr_rs1_rs2 (Test source rs1 = " + hex(rs1val) + " rs2 = " + hex(rs2val) + ")" desc = "cr_rs1_rs2 (Test source rs1 = " + hex(rs1val) + " rs2 = " + hex(rs2val) + ")"
writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen) writeCovVector(desc, rs1, rs2, rd, rs1val, rs2val, immval, rdval, test, storecmd, xlen)

View File

@ -1,2 +1,5 @@
self_loop:
j self_loop
.end .end