【路科V0】systemVerilog基础18——覆盖率

概述

“验证如果没有量化,那么就意味着没有尽头。”
伴随着复杂SoC系统的验证难度系数成倍增加,无论是定向测试还是随机测试,我们在验证的过程中终究需要回答两个问题:

  • 是否所有设计的功能在验证计划中都已经验证?
  • 代码中的某些部分是否从未执行过?

覆盖率就是用来帮助我们在仿真中回答以上问题的指标。
覆盖率已经被广泛采用,作为衡量验证进度的重要数据。

覆盖率是衡量设计验证完备性的一个通用词语。
随着测试逐步覆盖各种合理的组合,仿真过程会慢慢勾画出你的设计情况。
覆盖率工具会在仿真过程中收集信息,然后进行后续处理并且得到覆盖率报告。
通过这个报告找出覆盖率之外的盲区,然后修改现有测试或者创建新的测试来填补这些盲区。
这个过程可以一直迭代进行,直到你对覆盖率满意为止。
 

覆盖率反馈回路

【路科V0】systemVerilog基础18——覆盖率_第1张图片

优化验证效率

一旦通过覆盖率来量化验证,我们可以在更复杂的情况下捕捉一些功能特性是否被覆盖:

  • 当我们在测试X特性的时候,Y特性是否也在同一时刻被使能和测试?
  • 是否可以精简我们已有的测试来加速仿真,并且取得同样的覆盖率?
  • 覆盖率在达到一定的数值的时候,是否停滞,不再继续上升?

        简单而言,覆盖率就是用来衡量验证精度和完备性的数据指标。
        覆盖率可以告诉我们在仿真时设计的哪些结构被触发,当然,它也可以告诉我们设计的哪些结构在仿真时从未被触发过。

覆盖率分类

最常见的划分覆盖率的两种方法

  • 按照覆盖率生成的方法,,即隐性生成还是显性生成。
  • 按照覆盖率溯源,即它们从功能描述而来还是从设计实现而来。
     

         功能覆盖率是显性的,并且需要依照功能描述去定义的覆盖率。
        
代码覆盖率则是隐性覆盖率,仿真工具可以自动分析RTL设计代码的执行结果来提供。

        如果将上述两个分类的方式进行组合,那么可以将代码覆盖率、断言盖率以及功能覆盖率分别置入到不同的象限。

        但是需要注意,目前有一个象限仍然处于研究阶段,没有隐性的可以从功能描述生成某种覆盖
率的方法,这也是为什么功能覆盖率依然需要人为定义的原因。

【路科V0】systemVerilog基础18——覆盖率_第2张图片

 接下来我们将认识主要的两种覆盖率

  • 代码覆盖率(隐性覆盖率)
  • 功能覆盖率(显性覆盖率)

覆盖率辩证

        没有任何一种单一的覆盖率可以完备地去衡量验证过程。
        即使我们可以达到100%的代码覆盖率,但这并不意味着100%的功能覆盖率。原因在于代码覆盖率并不是用来衡量设计内部的功能运转,或者模块之间的互动,或者功能时序的触发等。
        类似地,我们即便达到了100%功能覆盖率,也可能只达到了90%的代码覆盖率。原因可能在于我们疏漏了去测试某些功能,或者一些实现的功能并没有被描述。
        从上述关于代码覆盖率和功能覆盖率简单的论述就可以证明,如果想要得到全面的验证精度,我们就需要多个覆盖率种类的指标。

你可能感兴趣的:(数字验证,数字验证,systemVerilog)