SV覆盖率选项中的type_option和option

这是事件的起因

在SV中覆盖率选项中常常会用到type_option和option进行某些限制,大概如下所示:

这时候常常有type_option和option两种,经过实验验证,大概是如下区别,如有问题,欢迎大佬们留言,不尽感激!

option用于统计覆盖率时,则只会用于个别实例instance,即当option.instance=0时,则打印单个instance的覆盖率不会再把该coverpoint的覆盖率统计在内,但是对于总的所有instance的覆盖率并没有影响,还是会计算该coverpoint的覆盖率。

type_option用于统计覆盖率时,则只会用于某个类型的coverpoint,即当type_option.instance=0时,则打印单个instance的覆盖率把该coverpoint的覆盖率统计在内,但是对于总的所有instance的覆盖率则有影响,不计算该coverpoint的覆盖率我们常用$get_coverage得到所有覆盖组的总的覆盖率,使用get_coverage得到单个覆盖组所有实例的覆盖率,使用get_inst_coverage得到单个覆盖组中特定实例的覆盖率。如下代码所示:
module tb;
  bit [3:0] mode1,mode2;
  covergroup cg;
     option.per_instance=1;
   m1: coverpoint mode1 {
     bins range1[] = {[0:1],[2:3],[4:15]};
     option.weight=0;
    }
  m2: coverpoint mode2 {
    bins range2[] = {[0:1],[2:3],[4:15]};
    option.weight=0;
    }
    m1xm2:cross m1,m2;
  endgroup
  
  initial begin
    cg cg_inst1 = new();
    for (int i = 0; i < 5; i++) begin
      #10 mode1 = i;mode2 = 5-i;
      cg_inst1.sample();
    end

  $display("coverage result b is %f",cg_inst1.get_coverage());
  $display("coverage result d is %f",cg_inst1.get_inst_coverage());
  $display("coverage result f is %f",$get_coverage());  
  end
  endmodule

使用option时,仿真结果如下:

上述仿真结果说明对单个instance有影响,对整体覆盖组无影响。
如果代码中把option.weight改为type_option.weight则仿真结果如下:


证实如上结论。

全部评论
学到了,楼主厉害,感谢分享
点赞 回复 分享
发布于 2022-08-06 19:11

相关推荐

AI牛可乐:哇,听起来你遇到了什么挑战呢!🐮牛可乐在这里,虽然小,但是勇敢又聪明,想听听你的具体情况哦!如果你愿意的话,可以点击我的头像给我私信,我们可以一起想办法应对挑战,好不好呀?🌟🎉
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务