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