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
上述仿真结果说明对单个instance有影响,对整体覆盖组无影响。
如果代码中把option.weight改为type_option.weight则仿真结果如下:
如果代码中把option.weight改为type_option.weight则仿真结果如下:
证实如上结论。