2

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

这是一个例子:

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>

4

1 回答 1

2

根据错误消息,您的模拟器尚不支持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。这适用于提供的测试用例,但是如果打算处理许多(可能是唯一的)类型的实例/覆盖组/覆盖点,它就不是很灵活。

于 2013-06-29T02:05:27.527 回答