Vierzustandsprüfungen
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 26 von 38.
Eine Testbench muss Unbekannte bewusst behandeln. Gewöhnliche Gleichheit kann X zurückgeben, wodurch ein Fehler in einer if-Bedingung verborgen werden kann. Fallgleichheit und Fallungleichheit, === und !==, vergleichen alle vier Werte wörtlich und geben einen bekannten booleschen Wert zurück. Ein Reduktions-XOR, gefolgt von einem case-Vergleich mit X, kann unbekannte Bits erkennen. Verwende dies als Simulationsprüfungen, nicht als Modell einer Hardware, die physische X-Werte erkennt.
Relevanter Ausschnitt; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
if(actual !== expected) errors = errors + 1;Ein Unterschied, der X oder Z beinhaltet, wird gezählt, anstatt in einer unbekannten Bedingung zu verschwinden.
Verwende in Simulationsprüfern explizite Vergleiche mit vier Zuständen und lege fest, wie Unbekannte behandelt werden sollen.
Aufgabe
MittelDies ist ein ausschließlich für die Simulation bestimmter Prüfer, keine synthetisierbare Datenpfadlogik. Setze mismatch, wenn sich actual und expected im Vierzustandsvergleich unterscheiden. Wenn beide an denselben Positionen dasselbe X oder Z enthalten, sind sie gleich. Das Ergebnis muss always ein bekannter Wert 0 oder 1 sein. Ausgabespalten: mismatch. 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 mit Dezimalwerten pro Beobachtung, durch ein Leerzeichen getrennt und mit einem Zeilenumbruch abgeschlossen.
Probier es selbst
module dut (input [3:0] actual, input [3:0] expected, output mismatch);
// Ersetzen Sie diesen Platzhalter durch Ihr Design.
assign mismatch = 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 Summe3Wiederverwendbares RTL
Kombinatorische FunktionenBreitensichere ParameterGenerate-SchleifenBedingtes GenerateRückblick – Wiederverwendbare Bitmaske6Selbstprüfende Testbenches
VierzustandsprüfungenWiederverwendbare Checker-TasksReferenzmodelle und BewertungenGrenz- und SteuerungsabdeckungRückblick – AddiererprüfungÜbe selbstständig: Online-Verilog-Compiler