如何处理封面?

时间:2013-06-24 18:54:17

标签: system-verilog function-coverage

如何获得封面的句柄,以便我可以使用该句柄调用方法? 首先,我需要知道封面点的类型,以便我可以实例化句柄。

以下是一个例子:

class my_coverage_class;
  rand bit my_coverpoint;
  covergroup my_covergroup;
    option.per_instance = 1;
    coverpoint my_coverpoint;
  endgroup
  function new;
    my_covergroup = new;
  endfunction
endclass: my_coverage_class

program automatic testbench;
  initial begin
    my_coverage_class inst = new();
    begin 
      var type(inst.my_covergroup.my_coverpoint) cp
        = inst.my_covergroup.my_coverpoint; // BREAKS HERE
      cp.get_inst_coverage();
    end
  end
endprogram // testbench

当我使用VCS 2013.06运行上述内容时,我得到:

Error-[NYI] Not Yet Implemented
testbench, 16
Feature is not yet supported: Type operator not supported 

注意:当我运行$display("%s", $typename(inst.my_covergroup.my_coverpoint))时,我会获得<unknown>

1 个答案:

答案 0 :(得分:1)

根据错误消息,您的模拟器尚不支持type。即使它确实如此,我也看不到任何IEEE Std 1800-2012表明可以有coverpoint的句柄。如果您的模拟器支持covergorups的句柄,那么您应该能够执行以下操作:

package my_package;
  covergroup my_cover_group(bit cp);
    option.per_instance = 1;
    coverpoint cp;
  endgroup
  class my_coverage_class;
    rand bit my_coverpoint;
    my_cover_group my_covergroup;
    function new;
      this.my_covergroup = new(this.my_coverpoint);
    endfunction
  endclass: my_coverage_class
endpackage : my_package

program automatic testbench;
  import my_package::*;
  my_cover_group covgrp_handle;
  initial begin
    my_coverage_class inst = new();
    begin 
      covgrp_handle = inst.my_covgrp;
      covgrp_handle.cp.get_inst_coverage();
    end
  end
endprogram // testbench

其他选项是使用宏(例如:`define cp inst.my_covergroup.my_coverpoint)。这适用于所提供的测试用例,但如果用于处理许多(可能是唯一的)实例/封面组/封面点,则它不是很灵活。