2009-02-28 7 views
2

Wie kann ich das Verhalten eines Stapels oder einer Warteschlange in VHDL simulieren? Irgendwelche Zeiger?Wie implementiert man Datenstrukturen wie Stack/Queue in VHDL?

Ich hatte gedacht, etwas wie logische Verschiebungsoperation von Bits zu verwenden, aber wie man die Beschränkungen des Stapels prüft, der leer ist oder den Fall des Stapelüberlaufs?

+3

Sie fragen, wie man "das Verhalten simulieren". Möchten Sie synthetisierbaren Code schreiben (der zur Hardware gehört), oder möchten Sie Code für Ihre Simulation? Das macht einen großen Unterschied, in welchen VHDL-Konstrukten Sie verwenden können. – Philippe

Antwort

4

Sie können beginnen, indem Sie Peter Ashenden Buch "The Designer's Guide to VHDL" lesen. In Kapitel 19 implementiert er ein Warteschlangen-Netzwerk und er erklärt ausführlich, wie man Warteschlangen auf VHDL implementiert. Sie können die VHDL-Dateien für dieses Buch abrufen unter: http://www.csee.umbc.edu/help/VHDL/ashenden/ch_19/

3

Sie möchten ein FIFO implementieren, wenn Sie in VHDL/Verilog arbeiten. Wenn dies in einem tatsächlichen FPGA instanziiert wird, modellieren Sie den FIFO mit Lese- und Schreibzeigern, um RAM im FPGA zu blockieren. Schauen Sie sich eine gut ausgebaute Umsetzung auf Opencores ...

http://opencores.org/project,versatile_fifo

1

Sie einen Stapel nicht implementieren. Verwenden Sie den Kern des FPGA-Anbieters.

+3

Ich würde dagegen argumentieren, die Kerne von Anbietern zu verwenden. Die abgeleitete Logik hat das Potenzial, genauso effizient zu sein wie ein Anbieterkern. Es ermöglicht auch, dass Ihre Design-Technologie unabhängig ist und Sie die Wahl haben, FPGA-Anbieter zu wechseln oder auf verschiedene ASIC-Technologien zu zielen. – Philippe

0

Sie können eine RAM-Komponente machen und sie als FIFO, LIFO oder jede Art von Datenstruktur verwenden, die Sie wollen.

Wenn Sie einen Stack benötigen, nachdem Sie die RAM-Komponente nicht mit dem Adressbus erstellt haben, erstellen Sie eine Variable, die die Top Of Stack-Adresse enthält. dann mit POP verringern Sie es (zuerst senden Sie die Ausgabe an Datenbus) und mit PUSH erhöhen Sie es (dann speichern Sie die Eingabe in TOS [oben auf dem Stapel] Variable).

Wenn Sie mehr brauchen, kann ich Ihnen mehr sagen ...