Sichere Case-Dekodierung
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 4 von 38.
Verwende eine gewöhnliche case-Anweisung für exakte Steuercodes. Lege ein default-Verhalten für nicht unterstützte Codes fest und assign alle Ausgaben. Die Wildcard-Dekodierung mit casex kann unbekannte Steuerbits in der Simulation verbergen und ist daher ungeeignet, wenn Unbekannte beim Debugging sichtbar bleiben sollen.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
always @* begin
y = 0;
invalid = 0;
case (op)
0: y = a & b;
1: y = a | b;
default: invalid = 1;
endcase
endNicht unterstützte Codes erzeugen einen expliziten Status, anstatt eine vorherige Ausgabe beizubehalten.
Definiere nicht unterstützte Steuerungscodes explizit und vermeide es, unbekannte Steuerungen mit casex zu maskieren.
Aufgabe
MittelImplementiere eine 8-Bit-Logikeinheit: op 0 berechnet ein AND von a und b, op 1 berechnet ein OR von a und b, op 2 berechnet ein XOR von a und b, und op 3 gibt null zurück, wobei invalid auf eins gesetzt wird. invalid ist bei unterstützten Operationen null. Ausgabespalten: y, invalid. Alle Stimuluswerte sind bekannte Binärwerte.
Vervollständige design.v und bewahre die Modulnamen und Ports. Das gesperrte testbench.v liefert Eingabeänderungen und gibt die Ausgaben aus, nachdem sie sich stabilisiert haben. Es wählt ein Szenario mithilfe eines Simulatorarguments wie +CASE=1 aus; eine Standardeingabe ist nicht erforderlich. Füge dem Design keine Ausgaben, Verzögerungen oder Simulationsbeendigung hinzu. Die erwartete Ausgabe besteht aus einer Zeile dezimaler Werte pro Beobachtung, getrennt durch ein Leerzeichen und mit einem abschließenden Zeilenumbruch.
Probier es selbst
module dut (input [1:0] op, input [7:0] a, input [7:0] b, output reg [7:0] y, output reg invalid);
// Ersetze diesen Platzhalter durch dein Design.
initial y = 0;
initial invalid = 0;
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in RTL-Design und Verifikation
1Zuverlässige kombinatorische RTL
Standardwerte verhindern LatchesPrioritätsencoderOne-Hot-ValidierungSichere Case-DekodierungRückblick – Request-Router4Kontrolliertes sequentielles RTL
Priorität von Reset und EnableSättigungszählerPipelining von Daten und ValidErkennen abgetasteter FlankenRückblick – Ereigniszähler2Bitbreiten und vorzeichenbehaftete Arithmetik
Übertragsbits bewahrenVorzeichenbehaftete VergleicheArithmetische RechtsschiebungenÜberlauf und SättigungRückblick – vorzeichenbehaftete Differenz5Speicher und Nachschlagetabellen
Kombinatorische ROM-TabellenSpeicherung in Register-ArraysRegistrierte LeseportsRead-Write-WeiterleitungRückblick – Bank mit zwei Leseports8Abschließende Herausforderungen
Herausforderung – Paritäts-PipelineHerausforderung – MusterereignisseHerausforderung – Begrenzte SummeÜbe selbstständig: Online-Verilog-Compiler