在systemverilog中搜索packed + unpacked数组的替代方法

时间:2012-05-10 16:31:15

标签: multidimensional-array verilog system-verilog

我有这种奇怪的情况,我目前正在这样做:

if (!this.randomize(delay) with {delay inside {strm};}) 
......

,其中

rand bit [2:0] delay;
bit [15:0] strm [bit [15:0]];

现在我希望这个延迟从0-> ....-> 7-> 0开始循环,依此类推,但是它应该满足它应该存在于strm中的条件。所以我想要像

这样的东西
while (delay not in strm) begin
delay+=1;
end 

除了去每个索引(2 ^ 16-1)之外还有其他方法可以找到它是否存在于这个打包+解包的数组中?提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果您不知道,您将strm声明为关联数组(也称为哈希),其中键和数据都是16位值。

如果您希望strm是16位值的固定大小的2 ^ 16条目数组,则声明为:

bit[15:0] strm [2**16];

使用关联数组,您可以使用array.exists(key)来确定密钥是否在数组中。但似乎这可能不是你想要做的。

使用解压缩数组,您可以使用inside运算符来测试集合成员资格。但我的模拟器(Incisive)不喜欢随机调用之外的这种用法。所以你可能需要自己搜索一下。但是,如果先对其进行排序,则不必迭代整个数组。你可以用array.sort()

来做到这一点

我还要指出,您正在寻找某种16位值数组中的3位值。这没有用,所以你可能想澄清一下你的问题。