Priorität von Reset und Enable
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 16 von 38.
Ein getakteter Block kann ein Register halten, indem eine Zuweisung an deaktivierten Flanken weggelassen wird. Diese beabsichtigte Speicherung unterscheidet sich von einem unbeabsichtigten kombinatorischen Latch. Schreibe eine explizite Priorität zwischen Reset, Laden und Aktivieren. Hier sind die Resets synchron: Sie werden nur an der steigenden Taktflanke wirksam.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
always @(posedge clk) begin
if(rst) q <= 0;
else if(en) q <= data;
endDer Reset hat Vorrang, wenn beide Steuersignale aktiviert sind, und deaktivierte Nicht-Reset-Flanken behalten q bei.
Verwende eine getaktete Prioritätskette und definiere das Verhalten für Rücksetzen, Laden, Aktivieren und Halten präzise.
Aufgabe
MittelImplementiere ein 8-Bit-Register q mit synchronem Active-High-Reset rst und Enable en. Bei einer steigenden Flanke hat der Reset Vorrang und löscht q; andernfalls laden aktivierte Flanken a, während deaktivierte Flanken q halten. Ausgabespalten: q. Alle Steuer- und Datensignale sind vor jeder steigenden Taktflanke stabil; die Ergebnisse werden danach beobachtet.
Vervollständige design.v und bewahre seine 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; 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 clk, input rst, input en, input [7:0] a, output reg [7:0] q);
// Ersetzen Sie diesen Platzhalter durch Ihr Design.
initial q = 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