2010-10-26 58 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是一种垃圾收集语言。如果您正在使用的模拟器实施的垃圾收集方案存在错误,则循环链接列表可能会导致问题。