10 / 37 · Konzept
Kombinatorisches RTL und vollständige Zuweisungen
Dieselbe Funktion mit bedingtem Operator und always_comb ausdrücken und Latch-verursachende Auslassungen finden.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Kombinatorische Ausgänge hängen von aktuellen Eingängen ab
Ein MUXMultiplexer Kombinatorische Schaltung, die gemäß Auswahlsignal einen Eingang zum Ausgang verbindet. Die Zuordnung von Auswahlbits und Eingangsnummern muss festgelegt sein. Mehr erfahren wird direkt als assign y = sel ? b : a; beschrieben. Für mehrere gemeinsam berechnete Ausgänge eignet sich always_comb.
always_comb begin
y = a;
if (sel) y = b;
endDie erste Standardzuweisung definiert auch den Pfad sel=0. Bliebe nur if (sel) y = b;, müsste y bei sel=0 den alten Wert behalten und wäre keine rein kombinatorische Funktion. Ignorieren Sie keine Werkzeugwarnungen und verlassen Sie sich nicht allein auf always_comb.
Der Standard y=a, bei sel=1 durch b ersetzt, hat dieselbe 0/1-Funktion wie die folgende Schaltung. Auch für sel=0 ist der Ausgang eindeutig bestimmt.
y = sel ? b : a
Prozedurale Syntax ist mehr als Software-Ausführungsreihenfolge
Kombinatorische Blöcke berechnen Zwischenergebnisse üblicherweise mit blockierendem =. Liest eine spätere Gleichung ein vorher zugewiesenes Ergebnis, wird diese Abhängigkeit zum kombinatorischen Pfad. Unterscheiden Sie dies von nichtblockierendemNonblocking Sequenzielle RTL-Zuweisung mit <=. Nach Auswertung der rechten Seite wird die Aktualisierung geplant, sodass Register derselben Flanke den alten Zustand verwenden. Mehr erfahren <= für RegisteraktualisierungenRegister Speichert einen Zustand aus mehreren Bits. Die synchronen Register dieses Kurses übernehmen festgelegte Eingaben an Taktflanken. Mehr erfahren.
always_comb begin
next_y = sel ? b : a;
inverted_y = ~next_y;
endEin weiterer Grundsatz ist ein einziger Treiber je Ausgang. Verfolgen Sie auch über Modulgrenzen hinweg, wer ein Signal exklusiv treibt.
Unterschiedliche Datenbreiten zuerst angleichen
Bei Auswahl zwischen acht und zwölf Bit sind y-Breite und Vorzeichenerweiterung ausdrücklich festzulegen. Bestimmen Sie die Eingangsbereiche beim Entwurf, statt erst zufällig im Zeitdiagramm passende implizite Erweiterung zu entdecken. Bei sel=X kann der bedingte Operator anders wirken als ein einfaches if. Die Zweizustandsergebnisse dieses Kurses gelten daher nicht pauschal für alle vier Zustände.
Selbst ausprobieren
In always_comb steht nur if(en) y=d;. Wie wird daraus kombinatorische Logik, die ohne Freigabe 0 ausgibt?
Erklärung lesen
Weisen Sie zuerst y=0 zu und überschreiben Sie es bei en mit d, oder verwenden Sie eine breitenklare Form von assign y = en ? d : 0. Halten bei en=0 ist eine eigene Register-/Latch-Spezifikation und nicht gleichbedeutend mit Ausgabe 0.