Создание бункеров переходного покрытия с использованием очереди или динамически - PullRequest
0 голосов
/ 19 апреля 2019

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

В моей корзине я могу создать такой диапазон: 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

bins t [] должно получиться так (красный => d_blue, d_green => e_yellow, e_white)

1 Ответ

0 голосов
/ 20 апреля 2019

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

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.Пример кода, который вы показали в своем вопросе, неверен и не помещает нужные элементы в очереди.

...