覆盖率笔记(SV/UVM)

1.覆盖率类型及意义:

代码覆盖率:以下覆盖率的综合
  • 行覆盖率:哪些可执行的行被执行过
  • 路径覆盖率:有哪些路径被执行过
  • 翻转覆盖率:有哪些状态有过0,1翻转
  • 有限状态机覆盖率:状态机中哪些状态和状态转换被访问过
功能覆盖率:哪些功能已经被覆盖
断言覆盖率:测量断言被触发的频繁程度

2.覆盖组的格式

1)不指定仓名的覆盖组
covergroup covport;
    coverpoint tr.port;
endgroup
2)指定仓名的覆盖组
covergroup covkind;
    coverpoint tr.kind{
            bins zero = {0};        // 一个仓,名为zero
            bins low = {[1:3], 5};  // 一个仓,名为low
            bins high[] = {[8:$]};  // 多个独立仓,名为high_8,high_9,...
            bins misc = default;    // 一个仓,名为misc
           }
endgroup
3)指定覆盖率数据收集条件
covergroup covport;
    coverpoint tr.port iff(!bus_if.reset);  // reset时,不收集覆盖率数据
endgroup
4)覆盖组的触发——使用 .sample()
//  使用 .sample() 触发覆盖组的数据收集
covport = new();
covport.sample(); // 采集覆盖率数据
5)使用事件触发的覆盖组
covergroup covport@(trans_ready); // 当事件trans_ready被触发,则覆盖率数据开始收集
    coverpoint tr.port;
endgroup
6)覆盖率数据收集的启动与停止
covport ck = new();    // 在启用覆盖组前,需要先实例化覆盖组
#1ns ck.stop();        // 在reset前,停用覆盖组
bus_if.reset = 1;
#100ns bus_if.reset = 0;
ck.start();            // reset结束后,启用覆盖组
7)翻转覆盖率
covergroup covport;
    coverpoint tr.port{
            bins t1=(0=>1),(0=>2),(0=>3)    // 一个仓,当发生0=>1,0=>2,0=>3任一翻转,该仓hit一次
            bins t2=(1,2=>3,4)    // 等价于 bins t2=(1=>3),(1=>4),(2=>3),(2=>4)
            bins t3=(0=>1[*3]=>2) // 等价于 bins t3=(0=>1=>1=>1=>2)
            bins t4=(0=>1[*3:5]=>2) // 等价于 bins t4=(0=>1[*3]=>2),(0=>1[*4]=>2),(0=>1[*5]=>2)
           }
endgroup
8)应忽略的仓 和 不合法的仓
covergroup covport;
    coverpoint tr.port{
            ignore_bins low={[0, 1]};    // 不会收集这个仓内数值
            illegal_bins high={[6, 7]};  // 当仓内数值出现,立即报错
           }
endgroup
9)交叉覆盖仓

交叉覆盖仓的数据是基于 单个覆盖点 和 交叉覆盖组 的。

covergroup covport;
    kind: coverpoint tr.kind;
    port: coverpoint tr.port;
    cross kind, port;
endgroup
10)指定交叉覆盖仓的名称
covergroup covport;
    kind: coverpoint tr.kind{
                    bins .....;
                    .....;
                   }
    port: coverpoint tr.port{
                    bins .....;
                    .....;
                   }
    cross kind, port;
endgroup
11)在覆盖率度量中废除部分覆盖点
covergroup covport;
    kind: coverpoint tr.kind{
                    bins .....;
                    .....;
                    option.weight = 0;    // 这样就不会计入单个覆盖点的数据
                   }
    port: coverpoint tr.port{
                    bins .....;
                    .....;
                    option.weight = 0;    // 这样就不会计入单个覆盖点的数据
                   }
    cross kind, port;                     // 只会计算交叉覆盖组的数据
endgroup
12)排除掉部分交叉覆盖仓

使用binsof()intersect{},注意 binsof 后面是小括号,intersect 后面是大括号

covergroup covport;
    kind: coverpoint tr.kind{
                    bins .....;
                    .....;
                   }
    port: coverpoint tr.port{
                    bins .....;
                    .....;
                   }
    cross kind, port{
            ignore_bins high=binsof(port)intersect{7};    // 忽略掉 port 中的 数值 7
            ignore_bins mid=binsof(port)intersect{0} && binsof(kind)intersect{[9:11]};    // 忽略掉 port 中的 数值 0 和 kind 中的 数值 9 ~ 11 。
            ignore_bins low=binsof(kind.low);    // 忽略掉 kind 中的整个 low 仓
           }
endgroup
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值