数字验证学习笔记——SystemVerilog芯片验证22 ——功能覆盖率策略&覆盖组

一、功能覆盖率策略

1.1 收集信息而非数据

  • 对于一些设计,你需要关心的是合法的寄存器地址和非法的寄存器地址,可写的寄存器域和非法的寄存器域,而不是具体的寄存器地址数值。
  • 一旦关注的地方着眼于感兴趣的状态,而不是具体数值,那么这对于你如何定义功能覆盖率,以及如何收集信息会减轻很大的负担。
  • 设计信号如果数量范围太大,应该拆分为多个小范围再加上边界情况。

1.2 只测量需要的内容

  • Verifier 需要懂得,在使能功能覆盖率收集时,这一特性会降低很大的仿真性能。
  • 由于收集功能覆盖率数据的开销很大,所以应该只测量你会用来分析并且改进测试的那部分数据。
  • 同时也需要设计合理的覆盖率采样的事件,一方面提升采样效率,一方面也可以降低收集覆盖率的开销。

1.3 验证的完备性

  • 完备的覆盖率测量结果和漏洞增长曲线,可以帮助确认设计是否被完整地验证过。
  • 如果功能覆盖率高但代码覆盖率低,这说明验证计划不完整,测试没有执行设计的所有代码。
  • 如果代码覆盖率高但功能覆盖率低,这说明即使测试平台很好地执行了设计的所有代码,但是测试还是没有把设计定位到所有感兴趣的状态上。
  • 你的目标是同时驱动高的代码覆盖率和功能覆盖率。

二、覆盖组

  • 覆盖组(covergroup)与类相似,一次定义后便可以多次实例化。
  • covergroup可以包含一个或者多个coverpoint,且全都在同一时间采集。
  • covergroup可以定义在类中,也可以定义在interface或者module中。
  • covergroup可以采样任何可见的变量,例如程序变量、接口信号或者设计端口。
  • 一个类里可以包含多个covergroup。
  • 当你拥有多个独立的covergroup,每个covergroup可以根据需要自行使能或者禁止。
  • 每个covergroup可以定义单独的触发采样事件,允许从多个源头收集数据。
  • covergroup必须被例化才可以用来收集数据。

2.1 在类里定义covergroup

数字验证学习笔记——SystemVerilog芯片验证22 ——功能覆盖率策略&覆盖组_第1张图片
CovPort 的例化 也可也这样 CovPort cg1=new();

  • covergroup由采样的数据数据被采样的事件构成。
  • 当这两个条件都准备好以后,测试平台便会触发covergroup。
  • 这个过程可以通过直接使用sample()函数完成,也可以在covergroup中使用采样阻塞表示式wait或**@**实现在信号或事件上的阻塞。
    数字验证学习笔记——SystemVerilog芯片验证22 ——功能覆盖率策略&覆盖组_第2张图片

你可能感兴趣的:(验证学习,SV,学习)