SV基础知识---功能覆盖率3(语言部分)

本文深入探讨了SystemVerilog中的交叉覆盖率,包括如何创建和管理交叉覆盖点,如何排除不需要的交叉仓,调整覆盖率权重以及分析覆盖率数据。此外,还介绍了通用覆盖组的参数传递和覆盖选项的设置,如单个实例覆盖率、注释、目标及空仓打印。文章还讨论了在仿真过程中动态监测覆盖率的重要性,并提供了不同方法来优化覆盖率统计。

目录

一、交叉覆盖率【难点】

1、基本的交叉覆盖率的例子

2、对交叉覆盖仓进行标号

3、排除掉部分交叉覆盖仓(难点:课后反复研究)

4、从总体覆盖率的度量中排除掉部分覆盖率

5、从多个值域中合并数据

6、交叉覆盖的替代方式

二、通用的覆盖组

1、通过数值传递覆盖组参数

2、通过引用传递覆盖组参数

三、覆盖选项

​编辑

1、单个实例(覆盖组)的覆盖率

2、覆盖组的注释(注释最终会显示在覆盖率报告里)

3、覆盖阈值

4、打印空仓

5、覆盖率目标

四、覆盖率数据的分析

五、在仿真过程中进行覆盖率统计


一、交叉覆盖率【难点】

覆盖点记录的是单个变量或者表达式的观测值,而交叉覆盖率可以同时测量两个或者两个以上覆盖点的值。 若其中一个有N种取值,另个一有M种取值,则SV需要N*M个交叉仓来存储所有的组合。

1、基本的交叉覆盖率的例子

SV中的cross结构可以用来记录一个组里两个或两个以上覆盖点的组合值。但是即使每个覆盖点都达到了100%的覆盖率,交叉组合可能会达不到100%。

基本的交叉覆盖率,指定(覆盖点名)

/*
在tr.kind和tr.port上创建了覆盖点,然后这两个点便交叉显示出各种组合。
SV总共创建了128(8*16)个仓。
*/
class Transaction;
	rand bit[3:0] kind;
	rand bit[2:0] port;
endclass

Transaction tr;

covergroup CovPort;
	kind: coverpoint tr.kind;		//创建覆盖点kind  注意格式  变量名称:coverpoint 变量
	port: coverpoint tr.port;		//创建覆盖点port
	cross kind,port;				//把kind和port交叉
endgroup

2、对交叉覆盖仓进行标号

指定交叉覆盖仓的名称(仓名)

covergroup CovPortKind;
	port: coverpoint tr.port{
		bins port[] = {0:$};
		}
	kind: coverpoint tr.kind{
		bins zero = {0};		//一个仓zero,对kind采样值为0进行计数
		bins lo = {[1:3],5};	//lo仓代表1:3和5的值
		bins hi[] = {[8:$]};	//8个独立的仓8-15,分别保存
		bins misc = default;	//一个仓用来保存没有被选中的值
		}
	cross kind,port;
endgroup

3、排除掉部分交叉覆盖仓(难点:课后反复研究)

在交叉覆盖中,可以使用binofintersect分别指定覆盖点和数值集,这样可以使用单个的ignore_bins结构清除掉个体仓。

在交叉覆盖中排除掉部分bin

covergroup CovPort;
	port: coverpoint tr.port{
		bins port[] = {0:$};
		}
	kind: coverpoint tr.kind{
		bins zero = {0};		//一个仓zero,对kind采样值为0进行计数
		bins lo = {[1:3],5};	//lo仓代表1:3和5的值
		bins hi[] = {[8:$]};	//8个独立的仓8-15,分别保存
		bins misc = default;	//一个仓用来保存没有被选中的值
		}
//port8个bin,kind11个bin。 一共8*11=88个交叉bin
	cross kind,port{
		ignore_bins hi = binof(port) intersect {7};			//排除掉了所有代表port为7和任意kind值组合的仓
		ignore_bins md = binof(port) intersect {0} &&		//排除掉了port为0和kind为9、10、11的组合,共3个仓。
						 binof(kind) intersect {[9:11]};
		ignore_bins lo = binof(kind.lo);					//使用仓名排除掉了lo整个仓和任意(即0:7)port组合的仓
		}
endgroup

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值