фильтрующие элементы в системном переходе с функциональным покрытием - PullRequest
0 голосов
/ 25 сентября 2019

Есть ли способ ограничения бинов, сгенерированных в покрытии переходов, в точках покрытия System Verilog?

Например, я бы хотел покрыть переход от до некоторого значения и переход от некоторого значения, но мне все равно, что это за переход в / из, и я не хочу выписывать отдельный бин для каждого рассматриваемого «некоторого значения».

module a  ;
   logic [7-1 : 0] b;

   covergroup c ;
      cp_aaa : coverpoint b {
         bins tr [] = ([0:128] => [0:128]) ;
      }
   endgroup
endmodule

производит 2 ^ 14 бинов, что слишком много.

Было бы неплохо иметь что-то вроде следующего псевдокода:

bins tr [] = (notq => q)
   for q inside {[128-1:0]}
   where notq != q && notq inside {[128-1:0]};

и генерировать просто128 ячеек.

Да, в данном конкретном случае это почти то же самое, что сказать bins tr [] = {[128-1:0]}, но меня интересует принцип.

В идеале был бы способ процедурно(не декларативно) генерировать ящики ...

1 Ответ

0 голосов
/ 26 сентября 2019

Я бы не пытался использовать переходные корзины для этого - это слишком сложно.Используйте cross

covergroup c;
currvalue: coverpoint q {
   bins v[128] = {0:127]};
}
prevvalue: coverpoint prevq {
   bins v[128] = {0:127]};
}
X: coverpoint q != prevq {
   bins xx = (1);   // 1 bin
}
to: cross currvalue,X; // creates 128 cross bins
away: cross prevvalue,X; 

endgroup

Я не пробовал этого, так как вы не дали полный пример, но должны приблизить вас.

...