Как получить ручку для укрытия?
Как я могу получить дескриптор для точки покрытия, чтобы я мог вызывать методы, используя этот дескриптор? Сначала мне нужно знать тип точки покрытия, чтобы я мог создать экземпляр дескриптора.
Вот пример:
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 ответ
Судя по сообщению об ошибке, ваш симулятор еще не поддерживает 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
). Это будет работать для предоставленного тестового примера, однако оно не очень гибкое, если предназначено для работы со многими (возможно, уникальными) типами экземпляров / групп покрытия / точек покрытия.