Sv覆盖率-Function Coverage

本文详细介绍了SystemVerilog中的功能覆盖率,包括覆盖率的类型、显式与隐式指定、采样机制以及如何使用covergroup进行覆盖点、交叉覆盖率的定义。通过实例展示了covergroup的使用方法,如自定义仓、条件采样、交叉覆盖和权重设置等,旨在帮助读者深入理解SystemVerilog的覆盖率分析。
摘要由CSDN通过智能技术生成

参考博文: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这

        时,会

SV(SystemVerilog)中,覆盖率coverage)是用来衡量验证测试的有效性的一种度量指标。它可以帮助验证工程师确定测试是否充分覆盖了设计中的各个功能或语句。 通常情况下,覆盖率是基于特定的覆盖模型来定义的,这个模型描述了设计中需要被覆盖的特定条件或情况。在SV中,你可以使用通配符(wildcard)来进行覆盖率的定义和匹配。 在覆盖模型中,通配符可以用来表示一组可能的取值。例如,你可以使用通配符'?'来匹配一个比特位的任意取值,使用'*'来匹配多个比特位的任意取值。这样,你可以定义一个通配符模式,来捕捉多个情况的覆盖。 下面是一个示例,展示了如何在SV中使用通配符来定义覆盖率: ```systemverilog // 定义一个覆盖模型 covergroup my_covergroup; coverpoint signal_a with wildcard @(posedge clk) { bins wildcard_bin = {1'b?}; } endgroup // 实例化覆盖模型 my_covergroup cg = new(); // 触发覆盖率采样 always @(posedge clk) begin cg.sample(signal_a); end ``` 在上面的示例中,我们定义了一个名为`my_covergroup`的覆盖模型,并在其中使用了通配符`?`来匹配`signal_a`信号的任意取值。当信号`signal_a`在时钟上升沿触发时,我们通过调用`cg.sample(signal_a)`来采样覆盖率。 通过这种方式,你可以灵活地定义和匹配覆盖率条件,以评估测试的覆盖程度是否满足需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值