参考博文:https://www.cnblogs.com/-9-8/p/4414689.html和http://www.asic-world.com/systemverilog/coverage8.html#Default_bins_creation
SV采用CRT的激励形式,而判断验证进度的标准也就是覆盖率(coverage)。
覆盖率的两种指定形式:显式的,直接通过SV来指定出的,如SVA,covergroup。
隐式的,在验证过程中,随"register move"就可以由simulator得到的,如代码覆盖率等。
覆盖率类型:代码覆盖率---由仿真器直接提供,只能表示设计的冗余度,与spec关系不大。(toggle/expression/block)
功能覆盖率---与spec比较来发现,design是否行为正确,需要按verification plan来比较进度。(assertion/covergroup)
断言覆盖率---用于检查几个信号之间的关系,常用在查找错误。
漏洞率-------同一功能验证,运行多个seed,寻找bug
功能覆盖率的两个重要部分是采样的数据和数据被采样的时刻。数据被采样的时刻可以是1)使用wait或@来阻塞赋值,2)使用sample的方法。采样的数据则需要在代
码中加入覆盖组(Covergroup)和仓(Bin),覆盖组可以定义在类中,程序块,模块中。使用覆盖组之前必须先进行实例化。所以一般在类中使用覆盖组时,将
覆盖组的实例化加在类的构造函数new()中。Covergroup和Coverpoint的命名应当尽可能的明确,这样方便检查覆盖率文件。
class Driver_cbs_coverage extends Driver_cbs; event trans_ready; //@event来触发采样
covergroup CovPort; covergroup CovPort @(trans_ready)
....... coverpoint ifc.cb.port;
endgroup endgroup
virtual task post_tx(Transaction tr);
CovPort.sample(); //显示通过callback来回调sample函数,完成采样
endtask
SV支持自动仓的创建,但是更多地适用于2的幂次方,因为这样才有可能100%命中,最大的自动创建仓的数目是64。auto_bin_max限制自动创建仓的个数,SV这
时,会