SV学习笔记(17)

学习目标:

SV绿皮书第九章:功能覆盖率

学习内容:

1.覆盖率是衡量设计验证完备性的一个通用词语

2.覆盖率类型:代码覆盖率、断言覆盖率、漏洞率曲线、功能覆盖率

3.代码覆盖率:行覆盖率、路径覆盖率、翻转覆盖率、状态机覆盖率
仿真器都带有代码覆盖率的工具,当运行完所有测试,代码覆盖率工具便会创建相应的数据库,覆盖率数据也可被转换为可读格式

4.代码覆盖率最终的结果是用于衡量你执行了设计中的多少代码,到达100%并不代表验证工作完成

5.断言覆盖率需要自己定义,断言最常用于查找错误

6.漏洞率曲线,每次漏洞率下降时,就应该寻找各种不同的方法去测试可能的边界情况

7.验证的目的就是确保设计在实际环境中的行为正确

覆盖率稳步增长 添加新种子或者加长测试时间
覆盖率增速放缓 添加额外的约束
覆盖率停止增长 创建新的测试

在这里插入图片描述
10.覆盖组(covergroup)与类相似,一次定义后便可以多次实例化

11.covergroup可以包含一个或者多个coverpoint,且全都在同一时间采集
covergroup可以定义在类中,也可以定义在interface或者module中
covergroup可以采样任何可见的变量
covergroup----采样哪些数据、、关心的数值、采样的触发事件是什么

12.一个类中可以包含多个covergroup,当有多个独立的covergroup时,每个covergroup可以根据需求自行使能或者禁止,且可以单独定义触发采样事件
covergroup必须被例化才可以用来收集数据

13.在类中定义covergroup

class Transactor;
	Transaction  tr;
	mailbox mbx_in;
	//定义
	covergroup  CovPort;		//关键词+名字
		coverpoint  tr.port;	//关键词+采样变量---关心的数值未给出,所有都关心---coverpoint名字未给出
	endgroup

	function  new(mailbox  mbx_in)
		CovPort=new();		//例化,实例名与名字一样,只能例化一次
	  //CovPort  cg1=new();   //例化多次,covergroup  名字+实例名
	    this.mbx_in=mbx_in;
	endfunction

	task  main;
		forever  begin
			tr=mbx_in.get;
			ifc.cb.port<=tr.port;
			ifc.cb.data<=tr.data;
			CovPort.sample();		//采样,sample()函数为采样事件
	    end
	endtask
endclass

14.可以使用sample()函数完成,也可以在covergroup 中采样阻塞表达式使用wait或者@实现在信号或事件上的阻塞,也可以同时使用,至少有一种

event  trans_ready;
covergroup  CovPort  @(trans_ready);
	coverpoint  ifc.cb.port;
endgroup

15.当你在coverpoint指定采样一个变

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值