QuestaSim里覆盖率的查看

前言

“覆盖率”是衡量设计验证完成程度的一个通用词,随着测试逐步覆盖各种合理的组合,仿真过程会慢慢勾画出你的设计情况。覆盖率工具会在仿真过程中收集信息,然后进行后续处理并得到覆盖率报告。

一、创建工程

代码链接在文章末尾,我们新建一个工程,将代码添加到工程中,如下所示

QuestaSim里覆盖率的查看_第1张图片

二、编译设置

按住【Ctrl】键,点选中所有的设计文件及verilog文件,然后右键点击选择【Compile】->【Compile Properties…】
QuestaSim里覆盖率的查看_第2张图片
点开【Coverage】即覆盖率一栏,点击选中如下项目,然后点击【OK】即可
QuestaSim里覆盖率的查看_第3张图片
接下来调整编译顺序,让设计代码先编译,让底层代码先编译,在空白处点击右键,选择【Compile】->【Compile Order…】
QuestaSim里覆盖率的查看_第4张图片
我们可以让其自动识别一下,点击【Auto Generate】

QuestaSim里覆盖率的查看_第5张图片
然后等待其自动识别完成
QuestaSim里覆盖率的查看_第6张图片接下来就可以对其全部编译了
QuestaSim里覆盖率的查看_第7张图片
然后可以看到其全编译成功,由于我们刚才对设计文件(Verilog文件)选中了代码覆盖率选项,所以这次在编译DUT文件时会生成代码覆盖率的模型。
QuestaSim里覆盖率的查看_第8张图片

三、开始仿真

使用如下命令开始编译

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文件中用到,作为传入参数选择不同的测试用例
    编译完成后如下所示,并获得随机化的种子92949893,这样我们得到的覆盖率数据文件为mcdf_full_random_92949893.data
    使用run -all命令让其跑完整个测试,然后会弹出询问是否结束测试,我们选择【否】,因为选择是会退出软件,这不是我们想要的
    QuestaSim里覆盖率的查看_第9张图片
    接着我们点击【Simulate】->【End Simulation】来手动结束仿真,因为结束仿真才能得到覆盖率数据文件
    QuestaSim里覆盖率的查看_第10张图片
    QuestaSim里覆盖率的查看_第11张图片

四、查看覆盖率

因为我们已经关闭了仿真,所以没有当前的覆盖率了,我们再次运行仿真,仿真完成后我们不关闭,打开【Analysis】窗口可以看到当前的代码覆盖情况,如果没有自动打开【Analysis】窗口,我们点击【View】->【Coverage】->【Code Coverage Analysis】就可以打开【Analysis】窗口了
QuestaSim里覆盖率的查看_第12张图片
点击打开【Covergroups】窗口即可看到当前的覆盖率
QuestaSim里覆盖率的查看_第13张图片
同样的,如果没有自动打开【Covergroups】窗口,我们点击【View】->【Coverage】->【【Covergroups】就可以打开【Covergroups】窗口了
QuestaSim里覆盖率的查看_第14张图片
QuestaSim里覆盖率的查看_第15张图片
covergroup中的ctrl_reg对应代码中的class的名字,value_cg是covergroup的名字,通过代码可知道该conerage中定义了四个coverpoint,以chnl_en coverpoint为例进行说明,该变量为单比特,建了两个bin,发现为1时,击中7次,为0未被击中,故该变量的覆盖率是50%;prio_level是两比特变量,自动分配4个bin,为0的bin未被击中,其余都被击中,覆盖率为75%。在这里插入图片描述
在这里插入图片描述
cg_mcdf_reg_write_read covergroup下的addr coverpoint建了6个bin,其中3个bin被击中,覆盖率为50%。
QuestaSim里覆盖率的查看_第16张图片

在这里插入图片描述

五、遇到问题及解决方法

1.修改代码之后,未编译直接进行refresh,发现error并未消除
QuestaSim里覆盖率的查看_第17张图片
QuestaSim里覆盖率的查看_第18张图片

解决方法重新进行编译再refresh,确保编译通过
QuestaSim里覆盖率的查看_第19张图片
2.error定位,需要地方,根据log文件确定出现error的地方,消除error
QuestaSim里覆盖率的查看_第20张图片
QuestaSim里覆盖率的查看_第21张图片
方法:将930行注释掉,error清除。
3.找不到覆盖率文件,原因是所路径并非项目所在路径,根据log文件确定项目路径,在对应路径下找到覆盖率文件

QuestaSim里覆盖率的查看_第22张图片
QuestaSim里覆盖率的查看_第23张图片

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38113006/article/details/120406749

你可能感兴趣的:(硬件工程,fpga开发)