2010-10-26 57 views
1

我嘗試在systemverilog中實現一個循環雙向鏈表類(帶有單個哨兵節點)。列表本身似乎按預期工作,但最終崩潰的模擬器(腐敗堆棧?)沒有systemverilog支持鏈表?

這讓我想知道這是從根本上不支持的語言(按分配)? SV確實有一個「隊列」結構,可以以相同的方式工作(可能在訪問和插入時更有效)。

任何想法?

回答

6

SystemVerilog確實有一個隊列結構。他們宣稱有點像數組,但使用$符號:

int myqueue[$]; // $ indicates a queue 

myqueue.push_front(14); 
some_int = myqueue.pop_back(); 

您可以根據自己使用的方法push_front()push_back()pop_front()pop_back()組合,可以實現堆棧&的FIFO等。快速的互聯網搜索應該給你一個完整的方法和聲明選項列表。

我懷疑SystemVerilog隊列是否可綜合。我不是100%確定如何從一個循環緩衝區開始,而不先檢查索引...

1

沒有從我不在的語言中缺失的東西。幾乎所有的東西都是通過參考,所以這是你需要的主要東西。我能想到的唯一問題就是要記住SV是垃圾收集的,所以重要的是當你從你的列表中刪除對實例的引用(但你可能會這麼做)

我是很確定隊列將在內部作爲鏈接列表實現。這就是說,當我想以奇怪而奇妙的方式使用隊列時,我在不同的模擬器上遇到了一些問題。

1

SystemVerilog是一種垃圾收集語言。如果您正在使用的模擬器實施的垃圾收集方案存在錯誤,則循環鏈接列表可能會導致問題。