systemverilog поддерживает связанные списки? - PullRequest
1 голос
/ 26 октября 2010

Я пытался реализовать класс кольцевых двусвязных списков (с одним сторожевым узлом) в systemverilog.Кажется, что сам список работает, как и ожидалось, но в конечном итоге он выходит из строя симулятора (портит стек?)

Это заставило меня задуматься, не является ли это чем-то принципиально неподдерживаемым языком (с точки зрения распределения)?У SV есть конструкция "очереди", которую можно заставить работать одинаково (возможно, более эффективно как во время доступа, так и во время вставки).

Есть идеи?

Ответы [ 3 ]

6 голосов
/ 26 октября 2010

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 голос
/ 12 августа 2012

SystemVerilog - это язык для сбора мусора.Циркулярно связанные списки могут вызвать проблемы, если схема сборки мусора, реализованная используемым имитатором, содержит ошибки.

1 голос
/ 08 ноября 2010

Ничего, по сути, не хватает в языке, от которого я живу.Практически все передается по ссылке, так что это главное, что вам нужно.Единственное, о чем я могу думать, это помнить, что SV - это сборщик мусора, поэтому важно обнулить ваши ссылки на экземпляры, когда они удалены из вашего списка (но вы, вероятно, все равно это сделаете)Я уверен, что очередь будет реализована как связанный список внутри.Тем не менее, у меня были некоторые проблемы на разных симуляторах, когда я хотел использовать очереди странным и замечательным способом.

...