2010-10-26 20 views
1

J'ai essayé d'implémenter une classe de liste circulaire doublement liée (avec un seul noeud sentinelle) dans systemverilog. La liste elle-même semble fonctionner comme prévu mais finit par écraser le simulateur (pile corrompue?)est-ce que systemverilog supporte les listes chaînées?

Cela m'a amené à me demander si c'est quelque chose de fondamentalement non supporté par le langage (en termes d'allocation)? SV a une construction de "file d'attente" qui peut fonctionner de la même manière (probablement plus efficace à la fois en temps d'accès et en temps d'insertion).

Des idées?

Répondre

6

SystemVerilog possède une construction de file d'attente. Ils sont déclarés un peu comme des tableaux, mais utilisent le symbole $:

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

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

Selon la façon dont vous utilisez les combinaisons de méthodes push_front(), push_back(), pop_front() et pop_back(), vous pouvez mettre en œuvre des piles & et autres FIFOs. Une recherche rapide sur Internet devrait vous donner une liste complète des méthodes et des options de déclaration.

Je doute que les files d'attente SystemVerilog soient synthétisables. Et je ne suis pas sûr à 100% comment vous feriez de faire un tampon circulaire d'un sans vérifier les indices en premier ...

1

Rien de fondamentalement absent de la langue dont je suis absent. Presque tout est passé par référence, c'est donc la principale chose dont vous avez besoin. Seulement je peux penser est de se rappeler que SV est ramassé garbage, il est donc important d'annuler vos références aux instances quand ils sont supprimés de votre liste (mais vous le feriez probablement de toute façon)

Je suis assez sûr que la file d'attente serait implémentée en tant que liste liée en interne. Cela dit, j'ai eu des problèmes avec différents simulateurs quand j'ai voulu utiliser des files d'attente de manières étranges et merveilleuses.

1

SystemVerilog est un langage récupéré dans les ordures. Les listes à liens circulaires peuvent provoquer des problèmes si le schéma de récupération de place mis en œuvre par le simulateur que vous utilisez est bogué.