‚Wenn‘ vs ‚wenn‘ für den Multiplexer machen
Frage
Ich habe zu verwenden, sagt ‚wenn‘ Aussage Multiplexer, aber nicht verwenden ‚if‘ Anweisung, wie es Timing-Fehler verursacht ... Ich verstehe nicht, diese ... so was ist der Unterschied zwischen ‚wenn‘ und ‚wann‘? und ordnet sie auf denselben in Hardware?
Lösung
OK, können einige Punkte zunächst auf den Unterschied zwischen, ob und wann Aussagen diskutieren:
- Beide sind Datenfluß-Design-Elemente genannt.
wenn Anweisung
- gleichzeitige Anweisung
- nicht in Verfahren verwendet werden, nur in der Architektur als Prozess verwendet wird, ist eine sequentielle Ausführung
if-Anweisung
- sequentielle Anweisung
- in Verfahren verwendet, da es sequentielle Anweisung ist, und nicht außerhalb des Prozesses verwendet
Und Sie wissen, Multiplexer eine Komponente ist nicht Prozessblock benötigen, da sein Verhalten mit Änderung seiner Eingabe nicht ändert, so wird es außerhalb Prozess sein, so haben Sie es zu schreiben, wenn Anweisung, wie es gleichzeitige Aussage .. Und wenn Sie es mit if-Anweisung geschrieben hat, kann Timing-Fehler auftreten. Auch alle Referenzen und auch Xilinx-Hilfe (wenn Sie mit Xilinx) schreiben den Multiplexer-Block zu verwenden, wenn Anweisung nicht if-Anweisung
Referenz: Digital Design Principles & Practices, John F. Wakerly, 3. Auflage
Andere Tipps
Sehen Sie diese:
- VHDL gleichzeitige Aussagen , die
when
enthält. - VHDL sequentielle Anweisungen , die umfasst
if
.
Grundsätzlich if
ist sequentiell, und when
ist gleichzeitig. Sie ordne nicht auf dasselbe in Hardware ... Diese Seite beschreibt, am Boden, benötigten einige der besonderen Überlegungen eine if
Aussage zu synthetisieren.
Beide Codierungsarten sind völlig gültig.
Lassen Sie uns einige Elemente wieder zu verwenden. Ausgehend von HDL, die Synthese wird in zwei Haupt Schritten:
- Zuerst wird die VHDL analysiert, um zu erkennen, RTL Vorlagen (bestehend in RTL Elementen: Flip-Flops, arithmetische Ausdrücke, Multiplexer-Steuerlogik). Wir sagen, dass diese Elemente „infered“ sind (das heißt Sie die richtige Vorlage verwenden, müssen Code zu bekommen, was Sie wollten zunächst. Sie müssen sich vorstellen, wie diese Elemente miteinander verbunden sind, vor der Codierung).
- Der zweite Schritt ist real Logiksynthese , dass ein bestimmten Zieltechnologieparameter berücksichtigt (Arten von Toren vorhanden, Timing, Fläche, Leistung) führt.
Diese beiden Schritte trennen deutlich RTL funktionelle Anforderungen (Steuerungslogik, Berechnungen) von der Technologie Eventualitäten (Timing usw.).
Kommen wir zurück zum ersten Schritt (RTL):
In Bezug auf die Multiplexer, mehrere Codierungsarten sind möglich:
-
mit gleichzeitiger assignement:
y <= a1, wenn cond1 sonst a2 wenn cond2 sonst cond3;
-
mit if-Anweisung innerhalb eines Prozesses:
Verfahren (a1, a2, a3, cond1, cond2) Start if (cond1), dann y <= a1; elsif (cond2), dann y <= a2; sonst y <= a3; end if; Ende;
-
unter Verwendung eines anderen gleichzeitige Zuordnung Form, geeignet für Generika Beschreibungen: wenn sel eine ganze Zahl ist, und MUXIN eine Reihe von Signalen, dann gilt:
MUXOUT <= MUXIN (sel); --will eine Mux schließen
Beachten Sie, dass die 3-Kodierungs Arten immer. Beachten Sie auch, dass sie „ein bisschen mehr“ als einfache Multiplexer als Codierstil Kraft das Vorhandensein einer Priorität Codierung sind (wenn elsif, wenn sonst), was nicht der Fall einer einfachen Gleichung basierende Multiplexer ist, wirklich symmetrisch.
-
mit einer Case-Anweisung
Verfahren (a1, a2, a3, cond1, cond2) variable Cond: std_logic (1 downto 0); Start Ltg: = cond2 & cond1; Fall cond wenn "01" => y <= a1; wenn "10" => y <= a2; wenn andere => y <= a3; Endgehäuse; Ende;
-
mit einer select-Anweisung (in unserem beispielsweise zwei gleichzeitige assignements erforderlich):
sel <= cond2 & cond1; MIT sel SELECT y <= a1, wenn "01" ist, a2, wenn "10" ist, a3 WHEN OTHERS;
Eine abschließende Bemerkung ist, über die die Abstraktion steigt, auch für RTL-Design: die Synthesizer sind jetzt wirklich reif. Hier finden Sie aktuelle Jiri Gaisler Codierung Stile für LEON2 Open-Source-Prozessor zum Beispiel, wie auch seine Codierung Stile ( siehe hier ). Er ProNES einen ganz anderen Ansatz, doch vollkommen gültig, von den klassischen Büchern.
Sie sollten immer verstehen, was der RTL-Synthesizer wird schließen.
Im Gegenteil, Verhaltenssynthese ermöglicht (teilweise) zu vergessen, was der Synthesizer schließen wird. Aber das ist eine andere Geschichte.