Frage:
Wie man bei der Arbeit mit VHDL oder Verilog denkt
itsaboutcode
2013-02-11 03:50:33 UTC
view on stackexchange narkive permalink

Alle meine Erfahrungen gehören zu allgemeinen Programmiersprachen, z. c / c ++ usw., bei denen die einzelnen Anweisungen nacheinander ausgeführt werden, in VHDL / Verilog jedoch anscheinend alle Anweisungen gleichzeitig ausgeführt werden (parallele Prozesse)

Ich frage mich nur, ob es für den Programmierer eine Ressource gibt von allgemeinen Sprachen, um zu verstehen, wie VHDL funktioniert?

Referenz: http://en.wikibooks.org/wiki/Programmable_Logic/Parallel_Execution

Das VHDL-Handbuch? Sicher gibt es irgendwo ein Handbuch!
Nein, es gibt kein VHDL-Handbuch. Ich habe mir viele, viele VHDL-Bücher angesehen und sie * alle * saugen. Es ist unglaublich. Sie sind alle von Akademikern geschrieben und lehren auf die gleiche Weise. Wie man Dinge falsch macht, auf die nicht synthetisierbare Weise.
@Olin - Andrew hat recht, es gibt wirklich nicht viele anständige HDL-Bücher, die sich auf gute FPGA-Designpraxis und synthetisierbaren Code konzentrieren. Ich erinnere mich, dass ich für Verilog genau dasselbe gedacht habe. Ich denke, das liegt möglicherweise daran, dass beide (IIRC) Sprachen ursprünglich nicht für diesen Zweck vorgesehen waren, sondern nur an der Simulation. Später wurde Unterstützung für die Synthese hinzugefügt.
Das nächste ist immer noch Ashendens "Designer's Guide to VHDL" (entweder eine neue Ausgabe oder die alte, ergänzt durch "VHDL-2008 - nur das Neue").
Mein Dozent an der Universität hat ein kurzes Buch mit dem Titel "VHDL for Synthesis" geschrieben, das im Wesentlichen das Lehrbuch des Kurses war. Es ist kurz und unkompliziert, mit vielen Beispielen, die alle synthetisierbar sind. Es ist hier verfügbar: http://www.lulu.com/gb/en/shop/david-binnie/vhdl-for-synthesis/ebook/product-17473317.html
Fünf antworten:
Oli Glaser
2013-02-11 04:47:05 UTC
view on stackexchange narkive permalink

Bei HDL-Sprachen müssen Sie verstehen, dass Sie Hardware und nicht Software beschreiben. Ich denke, dies ist von grundlegender Bedeutung, um "den Dreh raus zu bekommen". Die Reihenfolge des Codes in Ihrem Modul spielt keine Rolle, alles geschieht auf einmal.
Es ist nicht so schlimm, wenn Sie loslegen - nachdem Sie einige einfache Module (z. B. Zähler, Addierer, Mux usw.) entworfen haben Der Verstand sollte sich natürlich an den Prozess anpassen.

Das beste Buch, das ich gelesen habe, um mit HDL loszulegen, ist Pong Chus "FPGA-Protoyping anhand von Verilog-Beispielen" (ich verwende Verilog, aber dort ist auch eine VHDL-Version dieses Buches.) Es konzentriert sich hauptsächlich auf das synthetisierbare Material, das Sie für FPGAs wissen möchten, abgesehen von z Testbench-Code, dem auch ein Kapitel gewidmet ist. (Ich gehe davon aus, dass Sie an der Verwendung von HDL für FPGAs / CPLDs interessiert sind.)

Abgesehen davon sind einige gute Nettoressourcen, die ich im Laufe der Zeit mit einem Lesezeichen versehen habe:

FPGA4Fun.com

Edaboard PLD-Forum

ASIC World

Mit Mit den obigen Links (insbesondere dem ersten) und dem Buch sollten Sie in kurzer Zeit "auf dem neuesten Stand" sein.

Pong Chu mag auf Verilog in Ordnung sein, aber ich habe ein ziemlich ekelhaftes (aber technisch korrektes) Stück VHDL gesehen, das voller Stilfehler für Anfänger ist, die kürzlich hier veröffentlicht wurden. es wurde aus dem Pong Chu Buch gehoben! Ich vermute, das Problem ist, dass er Verilog in beiden Sprachen geschrieben hat.
@BrianDrummond - Ah okay, danke für die Info - Ich habe nur das Verilog-Buch gelesen, das sehr gut ist (obwohl ich seinen Verilog-Stil nicht verwende, da er für ein großes Projekt etwas langwierig ist, ist das Buch sicherlich lesenswert, wenn anfangen)
Ich mag Chus-Bücher.Aber die allgemeine Idee ist, dass Sie kein Programm schreiben, sondern eine Schaltung entwerfen.Überlegen Sie, wie die Logikgatter funktionieren, wie sie auf Eingaben in Bezug zueinander reagieren und wie sich Drähte verhalten.Das ist es, was Sie in Ihrem Code tun können.Jetzt ist sim testbench eher ein Programm, bur kann immer noch teilweise wie Schaltungsdesign sein.Aber Design-Code, den Sie in fpga oder Silizium bauen möchten, ist alles Schaltungsdesign.Ich musste aus der Programmier-Denkweise herauskommen, um dieses Zeug wirklich zu bekommen.
Martin Thompson
2013-02-11 20:07:42 UTC
view on stackexchange narkive permalink

"Alle Anweisungen werden auf einmal ausgeführt" ist auch nicht ganz so, wie es ist ...

Ich denke, eine sehr gute Beschreibung, wie die Planung von "Anweisungen" (als "Aktualisierungen von" angesehen wird) Werte ") finden Sie hier:

http://www.sigasi.com/content/vhdls-crown-jewel

Sobald Sie verstanden haben Wie Signal- und Variablenaktualisierungen funktionieren, können Sie sich darauf konzentrieren, zu beschreiben, was in kleineren Blöcken geschehen soll, wobei Signale zwischen ihnen kommunizieren.

Stellen Sie sicher, dass Sie in dieser Phase häufig synthetisieren und simulieren, wie Sie es möchten Finden Sie heraus, welche Teile der Sprache nicht in einen Chip eingefügt werden können. Darüber hinaus erfahren Sie auch, welche Arten von Codierungsstilen lange Logikketten erzeugen, die einem funktionierenden Chip "im Weg stehen". Hardwaretypen sagen gerne Dinge wie "Sie müssen lernen, in Hardware-Begriffen zu denken". Sie vergessen, wie schwierig dies ist, es sei denn, Sie können es bereits tun - aber wenn Sie Ihren Code nehmen, synthetisieren und die Ergebnisse im schematischen Viewer betrachten, haben wir es wahrscheinlich alle vor vielen Jahren tatsächlich gelernt, und es wird auch für Sie funktionieren / p>

(Eine andere Sache, die Nicht-Elektronik-Typen übersehen, bis sie sie beißen, ist, dass Sie an den Pins des Geräts darauf achten müssen, dass Signale in die Interna des Chips synchronisiert werden. Hier gibt es irgendwo andere Fragen dazu !)

bythenumbers
2013-02-11 21:43:12 UTC
view on stackexchange narkive permalink

Ich fand eine vorteilhafte Möglichkeit, Prozeduren in VHDL auszudrücken, darin, die endliche Zustandsmaschine zu berücksichtigen. Indem Sie Ihren Algorithmus als Zustände in einem FSM visualisieren, können Sie beginnen, Ihren Code in etwas umzuformen, das auf einmal ausgeführt werden kann und nur aufgrund des FSM Schritt für Schritt ausgeführt wird.

Ich sage nicht, dass Sie für jede Zeile ähnlich funktionierenden C ++ - Codes einen Status erstellen müssen (obwohl dies theoretisch funktionieren würde), aber Sie können Dinge wie Zuweisungen und Berechnungen gruppieren und an übergeben Ein Zustand, der gleichzeitig ausgeführt werden soll, wenn der FSM in diesen Zustand eintritt.

Jetzt wird Ihr "Programm" zu einem FSM, der in VHDL eine große Anweisung vom Typ "case switch" (basierend auf dem Status des FSM) und eine Logik dafür ist, wie der Status aktualisiert werden muss um zum nächsten Status für Ihren Algorithmus zu gelangen.

Hoffe das hilft !!

Beachten Sie, dass ein FSM eine Menge kombinatorischer Logik (wie alle nächsten Ausgangssignale und wie der nächste Zustand sein wird) sowie eine relativ kleine Menge an sequentieller Logik ist, um den neuen aktuellen Zustand, neue Ausgangswerte usw. zu erfassen, wenn die Taktflanke kommt.
In der Hardware stimmt. Und das ist in der Tat das Endergebnis auf dem FPGA oder was auch immer Sie verwenden. Bei den modernen Compilern, die heutzutage verfügbar sind, ist es jedoch nicht erforderlich, all diese Logik explizit zu definieren. Alles, was Sie wirklich brauchen, ist eine kleine Testlogik (wenn ... dann nicht UND ODER), um zu entscheiden, was als Ihr nächster beabsichtigter Zustand gespeichert werden soll. Unter Hardware-Gesichtspunkten ist es sinnvoll, aber die Frage stellt Fragen in Bezug auf c / c ++, die von der sequentiellen Programmierung zu VHDL und nicht von Hardware zu VHDL reichen.
billt
2013-02-12 06:58:03 UTC
view on stackexchange narkive permalink

In C oder C ++, Java usw. erstellen Sie im Wesentlichen eine Folge von Ereignissen, die der Reihe nach auftreten sollen. Verstehen Sie, dass Sie in einer HDL nur ein sequentielles Programm in der Testbench ausführen, um eine zeitgesteuerte Folge von Signalwerten zu erhalten.

Der gute Teil der Codierung in HDL besteht darin, eine Schaltungsnetzliste zu entwerfen, nicht eine Programm. Stellen Sie sich einen Fall oder einen Schaltblock als Multiplexer vor. Eingänge sind Drähte, Ausgänge sind Drähte, in der Mitte ist kombinatorische Logik. Auf Silizium oder einem Steckbrett wartet ein Draht nicht darauf, dass ihm gesagt wird, was zu tun ist. Ein 74xx nand Gate wartet nicht darauf, dass ihm gesagt wird, was zu tun ist. Es ist immer ein Nand-Tor, und es ist immer Nanding, solange die Stromversorgung eingeschaltet ist. Ein Multiplexer multiplext immer. Ein Wechselrichter invertiert immer. Dann floppen Flops immer bei jeder Taktflanke, und ein Latch rastet immer bei seiner Freigabe ein. Das gleiche, als hätten Sie einen Schaltplan gezeichnet. Module und Entitäten sind die gleichen wie ein heirarchisches Schema. Es machte für mich viel mehr Sinn, als ich aufhörte, es als Programm zu betrachten und stattdessen die Schaltung zu sehen.

Meine Lieblingsreferenz ist Chus RTL-Hardware-Design mit VHDL. Sogar Verilog-Leute würden von dem Konzept profitieren, aber es ist alles VHDL-Syntax. http://www.amazon.com/gp/aw/d/0471720925/ref=mp_s_a_1?qid=1360628255&sr=8-1&pi=SL75

Peter Green
2017-10-06 23:05:51 UTC
view on stackexchange narkive permalink

VHDL und Verilog wurden ursprünglich als Sprachen zur Beschreibung der Hardware für die Simulation entwickelt. Sie wurden später als Sprachen wiederverwendet, um Hardware für die Synthese zu beschreiben.

Es gibt zwei Strategien zur Beschreibung von Hardware: Verhalten und Struktur. In der Verhaltensbeschreibung verwenden wir Programmcode, um das Verhalten unserer Hardware zu beschreiben. In der Strukturbeschreibung beschreiben wir unser Hardware-Stück in Form kleinerer Hardware-Teile.

Die meisten praktischen Designs verwenden eine Mischung aus beiden. Sie haben also kleine Verhaltensblöcke (immer Blöcke in Verilog, Prozesse in VHDL) innerhalb eines Gesamtstrukturentwurfs.

Normalerweise haben wir zwei Haupttypen von Verhaltensblockaden. "kombinatorische" Blöcke definieren eine kombinatorische Funktion ihrer Eingänge. Logischerweise werden sie ausgeführt, wenn sich eine Eingabe ändert, und sie haben keinen Speicher.

Sequentielle Blöcke werden normalerweise geschrieben, um zu definieren, was nach der Taktflanke passiert, was vor der Taktflanke passiert ist. Auf diese Weise schaffen wir es, ein deterministisches Design beizubehalten, obwohl alle durch dieselbe Taktflanke ausgelösten Blöcke im Simulator und gleichzeitig in der synthetisierten Hardware in einer nicht deterministischen Reihenfolge ausgeführt werden.

Wenn Sie vorhaben, Ihren Code zu synthetisieren, müssen Sie darüber nachdenken, was Dinge strukturell bedeuten, auch wenn Sie sie verhaltensmäßig definieren, da der Synthisizer als erstes Ihre Verhaltensbeschreibung in eine strukturelle übersetzen wird. Schleifen werden abgewickelt, arithmetische und logische Anweisungen werden zu arithmetischen und logischen Hardwareblöcken. Flusssteuerungsanweisungen werden zu Multiplexern (möglicherweise sehr breite).



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...