路科验证MCDF_svlab5笔记

本文详细介绍了如何通过编译选项设置、仿真过程中的覆盖率命令,以及合并和分析覆盖率数据来确保软件设计的有效验证。涵盖了MCDF实验Lab5的关键步骤,包括代码和功能覆盖率的检查与优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

收集覆盖率的软件操作

一、编译

在编译过程中,需要对于设计相关的文件设置额外的覆盖率编译选项,目的是通过工具自动统计你选中的代码覆盖率类型(功能覆盖率的收集需要写额外的代码)。注意,我们的关注点在于执行了设计中的多少代码,而不是测试平台,所以不需要对测试相关的文件进行覆盖率编译选项的设置。

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、

参考:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hardworking_IC_boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值