Standardwerte verhindern Latches
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 1 von 38.
Ein kombinatorischer Ausgang muss für jeden Eingangspfad zugewiesen werden. Wenn ein always-Block die Zuweisung eines Ausgangs überspringt, behält dieser Ausgang seinen alten Wert bei, wodurch ein Latch abgeleitet werden kann. Eine default-Zuweisung, gefolgt von Überschreibungen, macht die Abdeckung sichtbar.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
always @* begin
y = 0;
if (en) y = data;
enddefault deckt den deaktivierten Pfad ab, sodass der Ausgang nur von den aktuellen Eingängen abhängt.
Weise jedem kombinatorischen Ausgang auf jedem Pfad einen Wert zu; verwende Standardwerte vor bedingten Überschreibungen.
Aufgabe
MittelImplementiere eine 8-Bit-Ausgabe mit Freigabesteuerung: Wenn en eins ist, entspricht y dem Wert a; andernfalls ist y null. Weise y auf jedem kombinatorischen Pfad einen Wert zu. Ausgabespalten: y. Alle Stimuluswerte sind bekannte Binärwerte.
Vervollständige design.v und bewahre seine Modulnamen und Ports. Das gesperrte testbench.v liefert Eingangsä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, durch jeweils ein Leerzeichen getrennt und mit einem Zeilenumbruch abgeschlossen.
Probier es selbst
module dut (input en, input [7:0] a, output reg [7:0] y);
// Ersetzen Sie diesen Platzhalter durch Ihr Design.
initial y = 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