收集覆盖率的软件操作
一、编译
在编译过程中,需要对于设计相关的文件设置额外的覆盖率编译选项,目的是通过工具自动统计你选中的代码覆盖率类型(功能覆盖率的收集需要写额外的代码)。注意,我们的关注点在于执行了设计中的多少代码,而不是测试平台,所以不需要对测试相关的文件进行覆盖率编译选项的设置。
1、只选中与设计相关的文件
2、点击右键,选择compile->compile properties,在弹出设置栏的coverage一栏中,如图选择以下选项,然后点击OK。
3、完成所有文件的编译“Compile All”。这一步将在编译DUT文件时生成代码覆盖率的模型。
二、仿真
在仿真窗口中,输入如下命令
vsim -i -classdebug -solvefaildebug -coverage -coverstore D:/Questasim64_10.6c/win64/project/svlab5/coverage -testname mcdf_full_random_test -sv_seed random +TESTNAME=mcdf_full_random_test -l mcdf_full_random_test.log work.tb
- -coverage:添加这个命令能在仿真时产生代码覆盖率的数据。(功能覆盖率会默认生成,和此选项无关)
- -coverstore COVERAGE_STORAGE_PATH:此命令用来在仿真结束时生成覆盖率数据并存储到你设定的COVERAGE_STORAGE_PATH位置。我自己是设在了下面这个位置:D:/Questasim64_10.6c/win64/project/svlab5/coverage。注意不要有中文
- -testname TESTNAME:这个选项是你需要添加本次仿真的test名称,可以使用和+TESTNAME选项一样的test名称。仿真结束后,会在COVERAGE_STORAGE_PATH下产生一个覆盖率数据文件“{TESTNAME}_{SV_SEED}.data”。由于仿真时传入的种子是随机值,所以每次提交测试结束后,都会产生一个独一无二的覆盖率数据。
执行"run -all"。执行完后先不要退出仿真,可以利用仿真器查看代码和功能覆盖率。
- 代码覆盖率:通过View->Coverage->Code Coverage Analysis,点击新添加的窗口,然后在sim窗口下选择dut下的某一个模块,查看代码的执行情况,如下图
- 功能覆盖率:通过View->Coverage->Covergroups打开窗口即可查看,如下图
执行"quit -sim"命令之后,可以发现文件下中多了一个data文件
三、合并覆盖率
仿真不同的测试,或者多次仿真同一个测试后,会产生多个.data覆盖率数据文件,我们就可以进行合并覆盖率的操作。
执行下述命令,会看到上述4个覆盖率文件被合并了:
vcover merge -out merged_coverage.ucdb D:/Questasim64_10.6c/win64/project/svlab5/coverage
此处的地址就是之前设定.data文件放置的位置。
打开合并后的覆盖率文件的两种方式:
1、通过File->Open,选择UCDB Files格式即可看到合并后的覆盖率文件。
2、点击View->Verification Management->Browser,在打开的Browser窗口右击,选择Add File,将merged_coverage.ucdb添加进来即可。双击merged_coverage.ucdb即可打开合并后的覆盖率数据。
可以发现合并后的覆盖率比单次的覆盖率要高。
四、分析覆盖率
可以选择Tools->Coverage Report->HTML生成报告
下面这些选项就选择你关注的就行。
通过分析覆盖率,需要修改约束或者创建新的测试最终来达到验证完备性的要求。
举例:
比如我们在下图中发现翻转覆盖率只有15.71%,特别低。
于是我们如下图选择Toggle,可以看到没有翻转的位。其中,bit(31:6)不翻转是正常的,因为在描述文档中,读写寄存器的bit(31:6)是保留位,无法写入的(只读寄存器的bit(7:0)是可变的,bit(31:8)是保留位,复位值为0,也不翻转,那bit(8:7)这两位咋处理?待解决),
所以我们可以选中这几位,如下图操作:
写入你排除的原因,点击ok
结果如下:
再次通过Tools->Coverage Report->HTML生成报告,可以发现翻转覆盖率从原来的15.71%变成了现在的61.11%。
而被我们手动排除的部分可以通过Tools->Coverage Report->Exclusions来查看
代码细品
A、
参考:
- 路科MCDF_lab5的实验讲义
- MCDF实验——Lab5