2009-02-28 7 views
2

Comment puis-je simuler le comportement d'une pile ou d'une file d'attente en VHDL? Des pointeurs?Comment implémenter des structures de données comme pile/file d'attente en VHDL?

J'avais pensé à utiliser quelque chose comme une opération de décalage logique de bits mais comment vérifier que les contraintes de la pile sont vides ou le cas d'un dépassement de pile?

+3

Vous demandez comment "simuler le comportement". Voulez-vous écrire du code synthétisable (qui va au matériel), ou voulez-vous du code pour votre simulation. Cela fait une grande différence dans les constructions VHDL que vous pouvez utiliser. – Philippe

Répondre

4

Vous pouvez commencer par lire Peter Ashenden livre "Le Guide du concepteur de VHDL". Sur le chapitre 19, il implémente un réseau de files d'attente et il va longuement expliquer comment implémenter les files d'attente sur VHDL. Vous pouvez obtenir les fichiers VHDL pour ce livre à: http://www.csee.umbc.edu/help/VHDL/ashenden/ch_19/

3

Vous devez implémenter une FIFO si vous travaillez en VHDL/Verilog. Si cela va être instancié dans un FPGA réel, vous modéliserez le FIFO avec des pointeurs de lecture et d'écriture pour bloquer le RAM dans le FPGA. Consultez une mise en œuvre bien développé à OpenCores ...

http://opencores.org/project,versatile_fifo

1

Ne pas mettre en œuvre une pile. Utilisez le noyau du fournisseur FPGA.

+3

Je discuterais contre l'utilisation des cœurs du fournisseur. La logique inférée a le potentiel d'être aussi efficace qu'un cœur de fournisseur. Cela permet également de rendre votre technologie de conception indépendante, vous donnant le choix de changer de fournisseur de FPGA ou de cibler différentes technologies ASIC. – Philippe

0

Vous pouvez créer un composant RAM et l'utiliser comme FIFO, LIFO ou tout type de structure de données que vous voulez.

Si vous avez besoin d'une pile, après avoir créé le composant RAM, n'utilisez pas de bus d'adresse, créez une variable contenant l'adresse Top Of Stack. puis avec POP le diminuer (envoyer d'abord la sortie au bus de données) et avec PUSH l'augmenter (puis sauvegarder l'entrée dans la variable TOS [dessus de la pile]).

Questions connexes