“覆盖率”是衡量设计验证完成程度的一个通用词,随着测试逐步覆盖各种合理的组合,仿真过程会慢慢勾画出你的设计情况。覆盖率工具会在仿真过程中收集信息,然后进行后续处理并得到覆盖率报告。
代码链接在文章末尾,我们新建一个工程,将代码添加到工程中,如下所示
按住【Ctrl】键,点选中所有的设计文件及verilog文件,然后右键点击选择【Compile】->【Compile Properties…】 点开【Coverage】即覆盖率一栏,点击选中如下项目,然后点击【OK】即可 接下来调整编译顺序,让设计代码先编译,让底层代码先编译,在空白处点击右键,选择【Compile】->【Compile Order…】
我们可以让其自动识别一下,点击【Auto Generate】 然后等待其自动识别完成 然后我们可以看到其并不能完全自动识别,所以我们需要进行调整,如下所示,然后点击【OK】 接下来就可以对其全部编译了 然后可以看到其全编译成功,由于我们刚才对设计文件(Verilog文件)选中了代码覆盖率选项,所以这次在编译DUT文件时会生成代码覆盖率的模型。
使用如下命令开始编译
vsim -i -novopt -classdebug -solvefaildebug -coverage -coverstore ./mti_covdb -testname mcdf_full_random -sv_seed random +TESTNAME=mcdf_full_random_test work.tb
其中部分编译选项如下所示
-coverage
-coverstore ./mti_covdb
-testname mcdf_full_random
+TESTNAME=mcdf_full_random_test
编译完成后如下所示,并获得随机化的种子975244233,这样我们得到的覆盖率数据文件为mcdf_full_random_975244233.data 使用run -all命令让其跑完整个测试,然后会弹出询问是否结束测试,我们选择【否】,因为选择是会退出软件,这不是我们想要的 接着我们点击【Simulate】->【End Simulation】来手动结束仿真,因为结束仿真才能得到覆盖率数据文件 这时候我们就可以看到在【mti_covdb】文件夹下有一个mcdf_full_random_975244233.data覆盖率数据文件
975244233
mcdf_full_random_975244233.data
run -all
因为我们已经关闭了仿真,所以没有当前的覆盖率了,我们再次运行仿真,仿真完成后我们不关闭,打开【Analysis】窗口可以看到当前的代码覆盖情况 如果没有自动打开【Analysis】窗口,我们点击【View】->【Coverage】->【Code Coverage Analysis】就可以打开【Analysis】窗口了 点击打开【Covergroups】窗口即可看到当前的覆盖率 同样的,如果没有自动打开【Covergroups】窗口,我们点击【View】->【Coverage】->【【Covergroups】就可以打开【Covergroups】窗口了
我们可以多跑几次仿真或者使用不同的测试用例跑仿真,每一次仿真都会得到一个覆盖率文件,最后我们可以将这些覆盖率都合并,输入如下代码
vcover merge -out merged.ucdb ./mti_covdb
其中merged.ucdb表示合并后的文件名,./mti_covdb表示需要合并的文件的存放路径,执行成功如下所示 接下来我们直接用仿真器即可打开这个合并后的UCDB覆盖率数据库,点击【File】->【Open…】 选择UCDB文件打开 然后同样的,打开【Analysis】窗口可以看到代码覆盖情况 打开【Covergroups】窗口可看到覆盖率 另外我们也可以查看单个覆盖率文件的,点击【View】->【Verification Management】->【Browser】打开【Browser】窗口 然后再其窗口中右击选择【Add File…】 将【merged】添加进来可以看到其下的每个覆盖率文件
merged.ucdb
./mti_covdb
点击【Tools】->【Coverage Report】->【HTML…】 然后勾选如下所示选项
然后就会在浏览器打开如下所示的HTML文件了
我们可以看到覆盖率类型中【Toggles】是最低的 然后我们点击【List of Design Units included in report…】
我们可以进一步看到【Toggles】覆盖率低可以细分至【ctrl_regs】
然后我们点击【Design】选项,选择到【ctrl_reg_inst】,点击【Toggles】进入详细 进入后点击【Show Missing】可以看到如下所示
重新回到QuestaSim软件,打开【Analysis】窗口,选中【ctrl_regs_inst】打开 然后将关注点转为【Toggle】 可以看到,【cmd_data_reg】的5-31位都是没有覆盖到的,而且实际的设计上【cmd_data_reg】的6-31位就是没有使用的,我们可在覆盖率分析时将其忽略,如下所示,选中6-31位,右键选中【Exclude with Comment…】将其忽略掉 然后输入提交信息【reasonable for register value boundary limit】表示该忽略是合理的 接下来我们再次生成一次网页,可以看到覆盖率是上升了的
代码下载:【lab5 】【mcdf 】