SystemVerilog学习之路(8)— QuestaSim里覆盖率的查看
UVM学习之路(8)— 覆盖率的查看和调整一、前言“覆盖率”是衡量设计验证完成程度的一个通用词,随着测试逐步覆盖各种合理的组合,仿真过程会慢慢勾画出你的设计情况。覆盖率工具会在仿真过程中收集信息,然后进行后续处理并得到覆盖率报告。二、创建工程代码连接在文章末尾,我们新建一个工程,将代码添加到工程中,如下所示三、编译设置按住【Ctrl】键,点选中所有的设计文件及verilog文件,然后右键点击选择【
SystemVerilog学习之路(8)— QuestaSim里覆盖率的查看
一、前言
“覆盖率”是衡量设计验证完成程度的一个通用词,随着测试逐步覆盖各种合理的组合,仿真过程会慢慢勾画出你的设计情况。覆盖率工具会在仿真过程中收集信息,然后进行后续处理并得到覆盖率报告。
二、创建工程
代码链接在文章末尾,我们新建一个工程,将代码添加到工程中,如下所示
三、编译设置
按住【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: 在当前的mti_covdb文件夹下生成一个覆盖率数据文件-testname mcdf_full_random: 本次仿真的名称,后续生成的覆盖率数据文件名为{testname}_{Sv_Seed}+TESTNAME=mcdf_full_random_test:TESTNAME参数,我们会在tb.sv文件中用到,作为传入参数选择不同的测试用例
编译完成后如下所示,并获得随机化的种子975244233,这样我们得到的覆盖率数据文件为mcdf_full_random_975244233.data
使用run -all命令让其跑完整个测试,然后会弹出询问是否结束测试,我们选择【否】,因为选择是会退出软件,这不是我们想要的
接着我们点击【Simulate】->【End Simulation】来手动结束仿真,因为结束仿真才能得到覆盖率数据文件
这时候我们就可以看到在【mti_covdb】文件夹下有一个mcdf_full_random_975244233.data覆盖率数据文件
五、查看覆盖率
因为我们已经关闭了仿真,所以没有当前的覆盖率了,我们再次运行仿真,仿真完成后我们不关闭,打开【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】添加进来可以看到其下的每个覆盖率文件
七、生成HTML报告
点击【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】表示该忽略是合理的
接下来我们再次生成一次网页,可以看到覆盖率是上升了的
十、附录
更多推荐



所有评论(0)