Wiederverwendbare Checker-Tasks
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 27 von 38.
Eine Verilog-task fasst prozedurale Arbeit zusammen und kann Ergebnisse über output- oder inout-Argumente zurückgeben. Testbench-Tasks reduzieren doppelte Prüfungen. Im Gegensatz zu einer kombinatorischen function kann eine task bei Bedarf Zeitsteuerungen enthalten, aber diese Checker-Tasks führen nur zeitlose Vergleiche durch. Verwende automatische Tasks, wenn separate nebenläufige Aufrufe unabhängigen lokalen Speicher benötigen; die hier bereitgestellten Aufrufe erfolgen sequenziell.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
task check_value;
input [7:0] actual,expected;
output ok;
begin ok = (actual === expected); end
endtaskDer Aufrufer erhält das Prüfergebnis über ein explizites Ausgabeargument.
Definiere die Argumentrichtungen von task und setze die Ergebnisvariablen pro Aufruf zurück, bevor du Fehler sammelst.
Aufgabe
MittelImplementiere check_value, sodass ok den Wert eins hat, wenn actual und expected gemäß der Vierzustands-Gleichheit übereinstimmen, und andernfalls den Wert null. Dieses Modul enthält eine nur für die Simulation bestimmte task, die von der gesperrten Testbench aufgerufen wird. Ausgabespalten: ok.
Vervollständige design.v und bewahre die Modulnamen und Ports. Die gesperrte testbench.v liefert Eingangsänderungen und gibt die Ausgaben aus, nachdem sie sich stabilisiert haben. Sie wählt ein Szenario mithilfe eines Simulatorarguments wie +CASE=1; eine Standardeingabe ist nicht erforderlich. Belasse die Ausgabe und die Szenariosteuerung in der gesperrten Testbench; 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_value;
input [7:0] actual,expected;
output ok;
begin
// Vervollständige die Checker-Task.
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