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

一、功能覆盖率策略

1.1 收集信息而非数据

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

1.2 只测量需要的内容

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

1.3 验证的完备性

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

二、覆盖组

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

2.1 在类里定义covergroup

在这里插入图片描述
CovPort 的例化 也可也这样 CovPort cg1=new();

  • covergroup由采样的数据数据被采样的事件构成。
  • 当这两个条件都准备好以后,测试平台便会触发covergroup。
  • 这个过程可以通过直接使用sample()函数完成,也可以在covergroup中使用采样阻塞表示式wait或**@**实现在信号或事件上的阻塞。
    在这里插入图片描述
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值