功能覆盖率

先写一个简单的例子:

covergroup cov_0_cg(ref int a,ref int b);
    option_per_instance = 1 ;
    a_cg : coverpoint a{
        bins zeros = {0};
    }
    b_cg : coverpoint b{
        bins zeros = {0};
        bins other = {[1:100]};
    }
    cross a_cg,b_cg;
endgroup

上面这种covergroup,在new的时候需要传入要采样的变量,而sample的时候不需要传入采样的变量;

covergroup cov_1_cg with function sample(int a,int b);
    option.per_instance = 1;
    a_cg : coverpoint a{
        bins ones = {1};
    }
    b_cg : coverpoint b{
        bins zeros = {0};
        bins other = {[1:100]};
    }
    cross a_cg,b_cg;
endgroup

上面这种covergroup在new的时候不需要传入变量,但是在调用sample的时候需要传入采样的变量;

class cov;
    int a,b;
    cov_0_cg cov_0_cg;
    cov_1_cg cov_1_cg;
    function new();
        cov_0_cg = new(a,b);
        cov_1_cg = new();
    endfunction
    function void sample(int a_in,int b_in);
        a = a_in;
        b = b_in;
        cov_0_cg.sample();
        cov_1_cg.sample(a,b);
    endfunction
endclass

上面展示在类里面调用上面的两种covergroup;

program cov_test;
    int a,b;
    cov cov_0;
    cov cov_1;
    
    initial begin
        cov_0 = new();
        cov_0.cov_0_cg.option.name = "cov_0.cov_0_cg";
        cov_0.cov_1_cg.option.name = "cov_0.cov_1_cg";
        cov_1 = new();
        cov_1.cov_0_cg.option.name = "cov_1.cov_0_cg";
        cov_1.cov_1_cg.option.name = "cov_1.cov_1_cg";
        a = 0 ;
        b = 1 ;
        cov.sample(a,b);
        #10;
        a = 1 ;
        b = 0 ;
        cov.sample(a,b);
    end
endprogram

用上面的program对例子进行测试,测试结果如下:

coverage的options

Option可以控制covergroup、coverpoint和cross的行为;

存在两种option:1.控制covergroup instance的行为;2.控制covergroup type的行为;

控制covergroup instance行为的options:

Option选项

默认值

描述

name

自动分配名

指定covergroup instance名

weight

1

权重;可以在covergroup、coverpoint和cross层次设置

goal

100

目标得分;可以在covergroup、coverpoint和cross层次设置

comment

“”

注释;可以显示在报告里面;可以在covergroup、coverpoint和cross层次设置

at_least

1

最小击中次数,小于该次数被认为没有击中;可以在covergroup、coverpoint和cross层次设置

auto_bin_max

64

没有指定bins的coverpoint的最大bins数;可以在covergroup、coverpoint层次设置

cross_num_print_missing

0

没有覆盖到的cross结果需要打印到报告;可以在covergroup和cross层次设置

detect_overlap

0

如果一个coverpoint里面两个bins有重叠,会报warning;可以在covergroup、coverpoint层次设置

per_instance

0

如果为1,则没有instance独立统计数据;可以在covergroup层次设置

get_inst_coverage

0

当为1时,可以获取每个inst的coverage;

否则结果和get_coverage一样。可以在covergroup层次设置

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值