Создание ячеек покрытия перехода с использованием очереди или динамически

#system-verilog

#system-verilog

Вопрос:

Я хочу написать покрытие перехода для перечисления. Одной из частей этого перехода является очередь перечисления. Я создаю эту очередь в своем конструкторе. Рассматривая приведенный ниже пример, как можно было бы это сделать.

В моей ячейке покрытия я могу создать диапазон, подобный этому A => [queue1Enum[0]:queue1Enum[$]] => [queue2Enum[0]:queue2Enum[$]]. Но тогда я получаю только первый и последний элемент.

 typedef enum { red, d_green, d_blue, e_yellow, e_white, e_black } Colors;
 Colors dColors[$];
 Colors eColors[$];
 Lcolors = Colors.first();
 do begin
  if (Lcolors[0].name=='d') begin
   dColors.push_back(Lcolors);
  end
  if (Lcolors[0].name=='e') begin
   eColors.push_back(Lcolors);
  end
 end while(Lcolors != Lcolors.first())

 covergroup cgTest with function sample(Colors c);
   cpTran : coverpoint c{
      bins t[] = (red => dColors =>eColors);   
   }
 endgroup
 

ячейки t[] должны выглядеть следующим образом (red=> d_blue, d_green=> e_yellow,e_white)

Ответ №1:

Для меня сработало следующее:

 bins t[] = (
    red =>
    [dColors[0] : dColors[$]] =>
    [eColors[0] : eColors[$]]);
 

Я получил ячейки, которые вы ожидали:

 t[red=>d_green=>e_yellow]
t[red=>d_green=>e_white]
t[red=>d_green=>e_black]
t[red=>d_blue=>e_yellow]
t[red=>d_blue=>e_white]
t[red=>d_blue=>e_black]
 

Я вижу, что вы тоже пробовали это, но не получили того, что ожидали. Возможно, это связано с тем, что ваш инструмент не поддерживает это должным образом.

Еще одна вещь, которую вы должны проверить, это то, что вы dColors правильно создали eColors очереди и. Пример кода, который вы показали в своем вопросе, неверен и не помещает правильные элементы в очереди.