交叉覆盖率cross中需要交叉的俩变量,应该先各自定义并声明其覆盖点coverpoint和各个bins,然后在交叉覆盖率中,直接引用一个覆盖点中的哪个bins和另一个覆盖点中的哪个bins来交叉;
如果没有声明两者各自的覆盖点的话,那么在交叉覆盖率中可以用“bins a0b0 = binsof(a) intersect {0} && binsof(b) intersect {0}”等,来选择俩变量中需要交叉的。
且求交叉覆盖率时,将被交叉俩变量的覆盖点权重等于0——“option.weight = 0”,即不计算俩变量各自的覆盖率,只计算两者的交叉覆盖率。声明覆盖点权重等于0——该coverpoint不会生成默认的bins,即你声明了几个就是几个bins。
默认的寄存器地址:0,2,4,8循环
二进制 十六进制 0000_0000 8’h00 0000_0010 8’h02 0000_0100 8’h04 0000_1000 8’h08 0001_0000 8’h10 0001_0010 8’h12 0001_0100 8’h14 0001_1000 8’h18 0010_0000 8’h20 … …
mcdf_base_test中,增加了“do_watchdog看门狗”任务,它和do_data一起fork…join_any开始运行,并在timeout * 1ms时结束仿真。作用就是:如果测试不会正常结束,那么该任务会在规定的时间结束仿真。
收集覆盖率运行指令:
vsim -i -classdebug -solvefaildebug -coverage -coverstore /home/verifier/project/rkv_labs/hsy_sv/v2.1_lab/lab5 -testname mcdf_full_random_test -sv_seed random +TESTNAME=mcdf_full_random_test -l mcdf_full_random_test.log work.tb
合并覆盖率指令:
vcover merge -out merged_coverage.ucdb /home/verifier/project/rkv_labs/hsy_sv/v2.1_lab/lab5
将lab4的6个测试跑了一边,加上mcdf_full_random_test跑了多次,最后得到合并覆盖率:
功能覆盖率100%:
代码覆盖率87.7%: