SV语言-覆盖率

覆盖率类型

用一个反馈环路分析覆盖的结果,决定采取哪种行动达到100%的覆盖率。
首选是使用更多的种子来运行现有的测试程序。
当大量种子对覆盖率增长没帮助时,建立新的约束
只有在趋势需要的时候才求助于创建定向测试。

  • 代码覆盖率
    代码覆盖率达到100%并不意味着验证工作的完成,但代码覆盖率100%是验证工作完备性的必要条件。
  • 断言覆盖率
  • 漏洞率
  • 功能覆盖率

功能覆盖率策略

  • 收集信息和非数据

着眼于感兴趣的状态,而非具体数值;
数量范围太大,应该拆分成小范围在加上边界的情形
要关注信息而非数值

  • 只测量需要的内容
  • 验证的完备性

功能覆盖率很高,但代码覆盖率很低,可能验证计划不完整;
代码覆盖率很高,但功能覆盖率很低,可能测试没有定位到感兴趣的状态上或设计没有实现某部分功能

覆盖组covergroup

一次定义,多次例化
可以包含多个coverpoint,且都在同一时间采集
可定义在class、interface、module中

一个类可以有多个covergroup
多个独立covergroup,每个都可以自行使能或禁止
每个covergroup可以定义单独的触发采用事件
必须例化才用来收集数据

covergroup由采样的数据和数据被采样的事件构成
二者都准备好后,才会触发
可以直接使用sample()函数完成
可以借助已有事件触发,在声明中使用阻塞语句

event tans_ready;
covergroup CovDst9 @(trans_ready);
	coverpoint ifc.cb.dst;
endgroup

数据采样

仓(bin) 记录每个数值被捕获到的次数;
为了计算一个coverpoint上的覆盖率,首先需要确定可能数的个数,也被称为
auto_bin_max 指定自动创建bin的最大数目

covergroup CovPort;
	options.auto_bin_max = 8;
	coverpoint tr.port
	{option.auto_bin_max = 2;}
endgroup

用户自定义bin

covergroup CovKind;
	coverpoint tr.kind{
		bins zero = {0};  //1个仓代表kind==0
		bins lo = {[1:3], 5}; //1个仓代表1:3 和5
		bins hi[] = {[8:$]};   //8个独立仓代表8:15
		bins misc = default;  //1个仓代表剩余的所有值
   	}
endgroup

条件覆盖率

//iff给覆盖点添加条件
covergroup CoverPort;
	coverpoint port iff
		{!bus_if.reset};
endgroup

//start和stop函数
initial begin
	CovPort ck = new();
	#1ns;
	ck.stop();
	bus_if.reset=1;
	#100ns bus_if.reset = 0;
	ck.start();
end

翻转覆盖率
coverpoint可以用来记录变量从A值到B值得跳转情况

covergroup CoverPort;
	coverpoint port{
		bins t1 = (0=>1), (0=>2), (0=>3);
	}
endgroup

wildcard覆盖率
创建多个状态或翻转

bit [2:0] port;
covergroup CoverPort;
	coverpoint port{
		wildcard bins even = {3'b??0};
		wildcard bins odd = {3'b??1};
	}

忽略的bin igore_bins

bit [2:0] low_ports_0_5;
covergroup CoverPort;
	coverpoint low_ports_0_5{
		ignore_bins hi = {[6,7]};
	}
endgroup

非法的bin illegal_bins

bit [2:0] low_ports_0_5;
covergroup CoverPort;
	coverpoint low_ports_0_5{
		illegal_bins hi = {[6,7]};
	}
endgroup

交叉覆盖率 参见书
覆盖选项
数据分析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值