Referenzmodelle und Bewertungen
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 28 von 38.
Ein selbstprüfender Testbench berechnet das erwartete Verhalten unabhängig von der Ausgabe des Entwurfs. Ein Referenzmodell kann einfache arithmetische Berechnungen verwenden, selbst wenn die Implementierung eine andere Struktur nutzt. Ein Scoreboard zählt Beobachtungen und Abweichungen. Initialisiere seine Zähler einmal pro Szenario und vergleiche erst, nachdem sich die Ausgabe des Entwurfs stabilisiert hat.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
expected = {1'b0,a} + {1'b0,b};
checked = checked + 1;
if(actual !== expected) errors = errors + 1;Der erwartete Wert ergibt sich aus dem angegebenen Eingabeverhalten, nicht durch das Kopieren von actual.
Berechne erwartete Werte unabhängig voneinander, führe zu einem festgelegten Zeitpunkt eine Stichprobe durch und verfolge jedes überprüfte Ergebnis.
Aufgabe
MittelImplementiere eine Referenzprüfung für einen vorzeichenlosen Vier-Bit-Addierer. Berechne die vollständige mathematische Fünf-Bit-Summe von a+b und gib dann nur dann ok=1 zurück, wenn actual in einem Vierzustandsvergleich exakt diesem Ergebnis entspricht. Dieses Modul enthält eine simulationsbasierte task, die vom gesperrten Testbench aufgerufen wird. Ausgabespalten: ok.
Vervollständige design.v und bewahre die Modulnamen und Ports. Der gesperrte testbench.v liefert Eingabeänderungen und gibt die Ausgaben aus, nachdem sie sich stabilisiert haben. Er wählt ein Szenario mithilfe eines Simulatorarguments wie +CASE=1 aus; eine Standardeingabe ist nicht erforderlich. Belasse die Ausgabe und die Szenariosteuerung im gesperrten Testbench und implementiere nur den Körper der task. Die erwartete Ausgabe besteht aus einer Zeile dezimaler Werte pro Beobachtung, durch ein Leerzeichen getrennt und mit einem Zeilenumbruch abgeschlossen.
Probier es selbst
module dut;
task check_sum;
input [3:0] a,b;
input [4:0] actual;
output ok;
reg [4:0] expected;
begin
// Vervollständige die Checker-Aufgabe.
ok=0;
end
endtask
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