使用队列或动态创建过渡Coverage Bin

时间:2019-04-19 16:29:02

标签: 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 []应该像这样出来(红色=> d_blue,d_green => e_yellow,e_white)

1 个答案:

答案 0 :(得分:0)

以下对我有用:

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]

我看到您也尝试过此操作,但没有达到您的期望。也许是因为您的工具不正确地支持这一点。

您应该检查的另一件事是您正确创建了dColorseColors队列。您在问题中显示的示例代码不正确,并且不会在队列中放入适当的元素。