1

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

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)之外,还有其他方法可以查找它是否存在于这个打包+解包数组中?提前致谢!

4

1 回答 1

2

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

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

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

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

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

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

于 2012-05-11T16:40:11.377 回答