2012-05-10 60 views
0

我有這種奇怪的情況:我目前在做這樣的:替代通過填充+解壓縮陣列搜索SystemVerilog中

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

其中

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

現在我想這個延遲在第二輪去robin從0 - > ....-> 7-> 0等等,但它應該滿足它應該存在於strm中的條件。所以,我想是這樣

while (delay not in strm) begin 
delay+=1; 
end 

除了去,雖然每個指數(2^16-1)有沒有發現,如果它在這個包裝+解壓縮陣列中存在的任何其他方式?提前致謝!

+0

如果您現在已經找到解決方案,請將其作爲自我回答發佈。如果發佈的答案幫助你做出正確的決定,那麼就可以對它的答案進行投票或至少提供有關dwikle問題的反饋。 – ZF007

回答

0

如果你不知道,你聲明strm作爲一個關聯數組(哈希),其中密鑰和數據都是16位值。

如果你想strm是一個固定大小的16位值的2^16項陣列,該聲明將是:

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

關聯數組,你可以使用array.exists(key)以確定鍵在數組中。但似乎這可能不是你想要做的。

使用解包陣列,您可以使用inside運算符來測試集合成員資格。但是我的模擬器(Incisive)不喜歡隨機調用之外的這種用法。所以你可能需要自己去搜索它。但是,如果您先排序,則不必循環整個數組。你可以用array.sort()來做到這一點。

我還指出,你正在尋找某種16位值的數組中的3位值。這沒有什麼意義,所以你可能想澄清你的問題。