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?

War es hilfreich?

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:

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:

  1. 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).
  2. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top