module testbench;
bit [2:0] A;
bit [2:0] data[];
int i;
bit [2:0] b;
covergroup cov_grp;
c1 : coverpoint A {
bins b1 = {0,1,2};
bins b2 = {3,4,5};
bins b3 = {6,7};}
endgroup
sequence seq;
(b == 'd7);
endsequence
initial
begin
cov_grp cov_ins = new();
data = new[10];
for(i=0;i<8;i++)
begin
data[i] = $random;
A = data[i];
assert property @(seq) cov_ins.sample();
end
end
endmodule
Я хочу сделать выборку для экземпляра группы прикрытия cov_ins, когда происходит последовательность seq. Когда b = 'd7, он должен произвести выборку ................................................. ................................................. ................................................. ................................................. ................................................. ................................................. ...
Точно так же, как вашему covergroup
нужно событие для запуска выборки, sequence
нужно событие, чтобы знать, когда делать выборку и оценивать выражение b = 'd7
(кстати, ваш тестовый стенд никогда не устанавливает b
).
И из вашего теста неясно, почему вам вообще нужно использовать последовательность, которая является простым логическим выражением. Вы могли бы просто написать:
if (b == 'd7) cov_ins.sample();
Но предполагая, что ваша последовательность более сложная, вам нужны часы в вашей последовательности, и вам нужно написать что-то вроде
sequence seq;
@(posedge clk) (b == 'd7)[->1]; // when b transitions to 'b7
endsequence
covergroup cov_grp @seq; // instead of calling sample()
c1 : coverpoint A {
bins b1 = {0,1,2};
bins b2 = {3,4,5};
bins b3 = {6,7};}
endgroup
Я попробовал ваш код, и он работал без ошибок, да, теперь я понимаю, что не установил b на 7 в своем тестовом стенде, спасибо!