关于覆盖率的一些知识

       覆盖率是衡量设计验证完备性的一个通用词语,覆盖率工具可以在仿真过程中收集信息,然后进行后续处理得到覆盖率报告,通过这个报告我们可以找到一些盲区,然后修改现有的测试或者创建一些新的测试来填补这些盲区。

当然,在不改变测试的情况下,我们应选择更多的种子来运行现有额测试程序,来提升覆盖率。覆盖率主要分为代码覆盖率和功能覆盖率,我将对其进行依次讲解。

代码覆盖率不需要添加任何额外的代码,仿真工具回分析源代码来自动完成代码覆盖率的统计。当完成所有的测试后,代码覆盖率工具会创建相应的数据库(这也是代码覆盖率的优势之一)。注意,代码覆盖率只能衡量你执行了设计中的多少代码,即测试对硬件设计描述的“实现”究竟测试的有多彻底。关注点在设计代码的分析上,即使代码覆盖率达到了100%,也不意味着工作已经完成。

再对其进行细分的话,代码覆盖率可以分为行覆盖率,路径覆盖率,翻转覆盖率,状态机覆盖率等等。

行覆盖率指的是由多少行代码被执行过,路径覆盖率(也叫分支覆盖率)指的是条件语句中的哪些分支被执行过。

状态机覆盖率(FSM):仿真工具可以自动识别状态机,他可以将每个状态的进入次数,状态之间的跳转次数,以及多个状态的跳转顺序记录下来。

翻转覆盖率主要用于衡量寄存器跳转的次数。端口跳转覆盖率主要用于测试IP模块之间的基本连接性,例如检查一些输入端口是否连接,或者已经连接的两个端口的bit位数是否一致,等等。

讲完了代码覆盖率,接下来说一说功能覆盖率,在收集功能覆盖率的时候,会降低仿真的性能。要注意,代码覆盖率和功能覆盖率是分开的,即代码覆盖率低,但功能覆盖率高,书名验证计划不完整,测试没有执行设计的所有代码。代码覆盖率高而佛那个能覆盖率低,则说明测试没有把设计定位到干兴趣的方面。

覆盖率中最重要的是覆盖组(covergroup),他与类相似,可以多次例化,他里面包含了一个或者多个coverpoint(检测某些变量在特定时候产生的值),重要的是,covergroup可以采集任何可见的变量,如程序变量,接口信号,设计端口等等。

covergroup是由采样的数据和被采样的时间构成的,当两个条件准备好了后,测试平台就会触发covergroup,擦过程直接通过sample函数完成,当然,我们也可以借助已经有的时间或者信号触发covergroup,即在covergroup里面声明阻塞语句。

在覆盖率中还有一个概念较为重要,即数据采样。当我在coverpoint制定采样一个变量或者表达式的时候,SV会创建很多bin来记录每个数值被捕捉的次数,而这个bin就是衡量功能覆盖率的就hi本单位。每一次cover group采样,就会在bin中留下标记,在仿真之后,就可以是用分析工具独缺这些数据来生成覆盖率报告。

覆盖率的计算方法:采样值的数目除以bin的数目。假设一个3bit变量的域是0-7,正常情况下糊会分8个bin,在仿真过程中由7个值被采样到,则覆盖率是7/8。注意:所有coverpoint的覆盖率构成了covergroup的覆盖率,左右covergroup的覆盖率构成了整体的功能覆盖率。

我们还可以使用wildcard来创建多个状态或者翻转。在表达式中,任何x,z,?都可以当作0或者1的通配符。还可以使用ingore_bins来排除不需要计算的阈值,用illegal_bins来标记非法的阈值。

在记录某一时刻多个变量直接按的组合i情况,我们还可以使用交叉覆盖率(cross)。

以上就是我总结的有关覆盖率的浅显的知识,清各位批评指正。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值