Altifigence Academy

10 / 37 · Konzept

Kombinatorisches RTL und vollständige Zuweisungen

Dieselbe Funktion mit bedingtem Operator und always_comb ausdrücken und Latch-verursachende Auslassungen finden.

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.

SystemVerilog
always_comb begin
  y = a;
  if (sel) y = b;
end

Die 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.

Zwei durch die Standardzuweisung abgedeckte Pfade

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.

SystemVerilog
always_comb begin
  next_y = sel ? b : a;
  inverted_y = ~next_y;
end

Ein 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.

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.