Grenz- und Steuerungsabdeckung
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 29 von 38.
Einige Tests zu bestehen, ist etwas anderes, als die wichtigen Szenarien zu prüfen. Verfolge, ob Minimal-, Maximal- und gewöhnliche Werte getestet wurden und ob konkurrierende Steuerungen gemeinsam auftraten. Ein Abdeckungsindikator hält fest, dass ein case beobachtet wurde; er beweist nicht, dass das Design korrekt reagiert hat. Kombiniere die Abdeckung mit Ergebnisprüfungen.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
if(value==0) seen[0]=1;
else if(value==15) seen[1]=1;
else seen[2]=1;Die Bitmaske merkt sich, welche Kategorien aufgetreten sind, ohne frühere Treffer zu ersetzen.
Kombiniere die Abdeckung von Grenzwerten und Steuerungskombinationen mit unabhängigen Korrektheitsprüfungen.
Aufgabe
MittelVerfolge drei Eingangsabdeckungs-Bins in seen, ohne frühere Treffer zu löschen: Bit 0 zeichnet value=0 auf, Bit 1 zeichnet value=15 auf und Bit 2 zeichnet Werte von 1 bis 14 auf. Die Eingänge enthalten bekannte Bits. Der Aufrufer initialisiert seen=0 vor einem Szenario. Dieses Modul enthält eine nur für die Simulation vorgesehene task, die von der gesperrten Testbench aufgerufen wird. Ausgabespalten: seen als Dezimalzahl.
Vervollständige design.v und bewahre seine Modulnamen und Ports. Die gesperrte testbench.v liefert Eingangsänderungen und gibt die Ausgaben aus, sobald 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 mit Dezimalwerten pro Beobachtung, durch ein Leerzeichen getrennt und mit einem Zeilenumbruch abgeschlossen.
Probier es selbst
module dut;
task observe;
input [3:0] value;
inout [2:0] seen;
begin
// Vervollständige die Checker-Aufgabe.
seen=seen;
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