在systemverilog中与“ with”运算符唯一

时间:2018-06-21 10:55:43

标签: system-verilog

我是SystemVerilog的新用户,我遇到了一种奇怪的行为(从我的角度来看),该行为将调用固定数组的唯一方法与with运算符组合在一起。

module test();
  int arr[12] = '{1,2,1,2,3,4,5,8,9,10,10,8};
  int q[$]
  initial begin
    q = arr.unique() with (item > 5 ? item : 0);
    $display("the result is %p",q);
  end

我期望得到队列{8,9,10},但我却得到了{1,8,9,10}。

为什么索引0处有一个?

1 个答案:

答案 0 :(得分:2)

您正在尝试将find方法的操作与unique结合在一起。不幸的是,它不能按您期望的方式工作。 unique返回元素,而不是with子句中的表达式,元素1,2,3,4和5为0。模拟器可以选择这些元素中的任何一个来表示唯一值为0(不同的模拟器选择不同的值)

您需要分别编写它们:

module test();
  int arr[$] = '{1,2,1,2,3,4,5,8,9,10,10,8};
  int q[$]
  initial begin
    arr = arr.find() with (item > 5);
    q = arr.unique();
    $display("the result is %p",q);
  end

更新说明了原始结果

with子句生成值列表以检查唯一性

'{0,0,0,0,0,0,0,8,9,10,10,8};
  ^.            ^ ^ ^

假定模拟器选择要保留的第一个匹配值,然后从原始数组{arr[0], arr[7], arr[8], arr[9]}返回{1,8,9,10}