VHDL: variable und Prozess
Ich studiere VHDL und ich fand eine Sache besonders schwer zu verstehen, da VHDL ist eine HDL, meiner bescheidenen Meinung nach, alles, was es beschreiben sollte in der Lage sein, um umgewandelt werden in eine Schaltung. Aber wie konnte das passieren, zu variabel und zu verarbeiten? Gibt es eine Schaltung realisieren können variable und verarbeiten? Können Sie mir ein Beispiel dafür? Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prozesse mit Variablen sicher umgewandelt werden kann, in schaltungen.
Hier sind ein paar einfache Beispiele.
In jedem Taktzyklus, wenn der Eingang En (Enable) ist low, the input data D ist gespeichert in der variable Q; sonst passiert nichts (und die variable behält Ihren alten Wert). Dies ist eine sehr spezifische Schaltung; ein 8-bit-register mit enable, suchen die 74LS377 in einem alten Buch zu sehen, die gleiche Schaltung in TTL.
Beachten Sie, dass die Uhr "if" - Anweisung ist getrennt von der En-Anweisung, und es umgibt. Synthese-tools, die die Suche nach bestimmten mustern, dass Sie wissen, wie zu übersetzen, und dies ist einer von Ihnen. Wenn Sie irgendwelche software-Erfahrung, die Sie könnten versucht sein, Sie zu kombinieren :
if rising_edge(Clk) and En = '0' then ...
- und in der simulation, würden Sie bekommen genau das gleiche Verhalten.Jedoch einige Synthese-tools kann nicht erkennen das Muster, und kann Fehler melden, statt generieren von hardware. (Synthese-tools sind immer besser, also können Sie froh sein heutzutage). Der Werkzeug-Dokumentation (z.B. Xilinx "synthesis and simulation design guide") sollte beschreiben, was ist und ist nicht möglich. [edit:] leider ist es um stecken 1995 Praktiken und enthält einige wirklich schreckliche Beispiele in VHDL.
Beachten Sie, dass Variablen, wie Signale, nicht brauchen, um Logik-Typen; ganze zahlen, arrays und records (mit einigen Einschränkungen), sind die synthetisierbaren; Schwimmer sind in der Regel nicht (obwohl dies ändert sich als Werkzeuge zu verbessern). Merke ich, wie begrenzt die Reichweite der Ganzzahl, um eine 8-bit-Zähler.
Mit ganzen zahlen, müssen Sie auch explizit angeben, was passiert, wenn Sie überlaufen (wie ich hier) - ansonsten erhalten Sie Fehler in der simulation. Jedoch, unter Angabe der offensichtliche Verhalten (wie hier) sollte nicht auf Kosten irgendeine zusätzliche hardware. Und auch mit anderen numerischen Typen wie numeric_std.unsigned, die tools sind nicht so pingelig.
Habe ich vereinfacht ein wenig; normalerweise gibt es eine Reset-Klausel in einem typischen Prozess können Sie Steuern, startup-Verhalten, aber diese Beispiele sind real und sollte funktionieren.
Variablen sehr nützlich sein kann - Sie ändern sich sofort, kann aber auch halten, deren Wert von einem tick zum nächsten. Dies zu vermeiden, replizieren-code, wenn Sie möchten den Zugriff auf eine zuvor berechnete Wert ist in der Regel ein "output" des Prozesses.
Als zum erstellen von schaltungen, Variablen und Signale nur Werte übertragen von einem Ort zum anderen innerhalb der Gestaltung. Variablen sind begrenzt, um innerhalb eines Prozesses können die Signale fließen alle über das design. So oder so wird die Sprachausgabe, der job ist es, herauszufinden, mit welchem Verhalten Sie Sie beschrieben haben, und die Logik implementieren zu entsprechen. Wenn Sie erhöhen eine variable oder ein signal, das gleiche set von "Tore" (oder look-up-Tabellen, etc) Ergebnisse.