我是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处有一个?
答案 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}