保姆级教程超硬核包会,SystemVerilog SV 覆盖率

本文解析了代码覆盖率和功能覆盖率的概念,包括跳转覆盖率、行覆盖率、分支覆盖率等,并详细介绍了如何使用SystemVerilog实现功能覆盖率,包括covergroup、coverpoint、cross等关键概念。

前言: 介绍了代码覆盖率和功能覆盖率,对其中的关键词做了简单介绍。

覆盖率

  • 验证如果没有量化,那么就意味着没有尽头。
  • 覆盖率是用来衡量验证精度和完备性的数据指标,在仿真时设计的哪些结构被触发,哪些没有被触发。
  • 如果想要得到全面的验证精度,需要多个覆盖率种类的指标。

划分覆盖率的两种方法

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

本文主要介绍代码覆盖率和功能覆盖率。

1.代码覆盖率

  • 代码覆盖率的优势是可以由仿真工具自动收集,可以指出测试程序中设计源代码哪些被激活,哪些是非激活。
  • 代码覆盖率的数据无法直接反映哪些设计功能被测试 。

1.1 跳转覆盖率

  • 用来衡量寄存器跳转的次数,从0到1,从1到0。
  • 跳转覆盖率经常用来测试ip模块之间的基本连接性,比如检查输入端口有没有连接。

1.2 跳转覆盖率行覆盖率

  • 哪些代码被执行过哪些没有执行,一行一行检查。

1.2 分支覆盖率

  • 分支覆盖率是用来对条件语句(if/else, case, ?😃,指出其执行的分支轨迹
  • 例如判断表达式为true或false
if (parity == odd || parity == even) begin;

1.3 条件覆盖率

  • 条件覆盖率是同来衡量布尔表达式中各个条件真伪判断的执行轨迹。
if (parity == odd || parity == even) begin;
结果为 parity == odd或 parity !== odd;
	   parity == even或parity !== even.

1.4 状态机覆盖率

  • 每个状态的进入次数,状态之间的跳转次数,多个状态的跳转顺序都可以由仿真工具记录下来。

2. 功能覆盖率

  • 面向数据的覆盖率:对已进行的数据组合检查.我们可以通过编写覆盖组(coverage groups)、覆盖点(coverage points)和交叉覆盖(cross coverage)获得面向数据的覆盖率。
  • 面向控制的覆盖率:检查行为序列(sequences of
    behaviors)是否已经发生。通过编写SVA来获得断言覆盖率(assertion coverage).

面向数据的覆盖率可以协助在回归测试时,自动检测哪些功能被激活。
主要包括两个步骤:

  • 从功能描述文档提取拆分需要测试的功能点。
  • 将功能点量化为与设计实现对应的SV功能覆盖代码。

2.1 覆盖组covergroup

  • 覆盖组包含覆盖点coverpoint,选项option,形式参数argument和可选触发trigger event。
  • 一个覆盖组包含了一个或多个数据点全部在同一时间采集。
  • 通过new()来创建实例,覆盖组可以定义在module、program、interface以及class中。
  • 覆盖组可以采集任何可见的变量,比如程序模块变量。
  • 在类中的覆盖组也可以采集类的成员变量。
  • 一个类可以包含多个覆盖组,每个覆盖组根据需要使能或禁止。
  • 覆盖组与类相似,在一次定义后可以进行多次例化。

通过下段代码来简单了解。

enum{
   
    red, green, blue } color; 
bit[3:0] pixel_adr , pixel_offset, pixel_hue;
covergroup g2 @(posedge clk); //在上升沿对里边的变量采样
	hue: coverpoint pixel_hue; // 对pixel_hue采样,hue是这个coverpoint的名字
	offset: coverpoint pixel_offset; //对pixel_offset采样	
	axc : cross color 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值