2013-05-20 67 views
1

SystemVerilog的錯誤我有些隊列宣稱,像這樣:與隊列插入瓦特/另一個隊列作爲參數

static bit [127:0] same_addr_mem_model [int][$]; 
static bit [127:0] temp_addr_mem_model [int][$]; 

再後來就的代碼行:

same_addr_mem_model[write_addr].insert(0,temp_addr_mem_model[write_addr]); // write_addr is some int 

而該行給我的與Cadence IES編譯器錯誤:

賦值運算符類型檢查失敗(期望數據類型與'打包數組'兼容,但發現'打包隊列位的數組[127:0])。

但正如我發現在線文檔,它看起來像一個隊列是insert()一個完全有效的論據。任何想法這裏有什麼錯誤?順便說一句,此代碼編譯並與Synopsys VCS一起運行。

+0

你能鏈接到提到的在線文檔嗎? – dwikle

+0

也許文檔是錯誤的詞...這是一篇文章。 http://asicguru.com/system-verilog/tutorial/sv-arrays/4/ – Rich

+0

聯繫Cadence。 – toolic

回答

3

的函數原型insert是:

function void insert(input int index, input element_t item); 

所以,如果你正在創建的ints隊列,那麼你不能添加使用insertints隊列。

供應商不實施所有語言規範或實現不符合規範的特定於供應商的功能的情況並不少見。這是一種情況,雖然看起來VCS在允許的情況下是錯誤的。我會仔細檢查它實際上是在做你期望的。

SystemVerilog中的函數不能被參數類型重載,因此將無法實現兩個insert函數,一個採用元素類型,另一個採用元素隊列。

您應該能夠使用賦值語法來獲得等價的行爲。

same_addr_mem_model[write_addr] = {temp_addr_mem_model[write_addr], same_addr_mem_model[write_addr]}); 

請參閱2012 SystemVerilog規範的第7.10.4節。

+0

好吧,這是有趣的知道。關於手頭的問題,我假設代碼嘗試將temp_addr_mem_model [write_addr]的內容插入到隊列前面的same_addr_mem_model [write_addr]中。有沒有辦法可以做到這一點,或者我需要一次做一個嗎? – Rich

+0

我對你的示例代碼做了相同的假設。我的答案顯示瞭如何對分配做同樣的事情,例如q1 = {q1,q2}。 – dwikle