Sättigungszähler
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 17 von 38.
In den Grundlagen wurde ein umlaufender Zähler verwendet. Ein sättigender Zähler stoppt stattdessen an einer Grenze, was für begrenzte Zählwerte nützlich ist. Füge eine explizite Schutzbedingung zur arithmetischen Aktualisierung hinzu und halte das Enable- und Reset-Verhalten unabhängig vom Limit.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
always @(posedge clk) begin
if(rst) count <= 0;
else if(en && count != 15) count <= count + 1;
endDer Maximalwert bleibt erhalten, anstatt auf null zurückzulaufen.
Begrenze Aktualisierungen an den Grenzen ausdrücklich, wenn ein Zähler saturieren soll, anstatt überzulaufen.
Aufgabe
MittelErstelle einen 4-Bit-Sättigungszähler q. Das synchrone rst löscht ihn. Aktivierte Flanken erhöhen den Wert bis 15; anschließend bleibt er bei 15. Deaktivierte Flanken lassen den Wert ebenfalls unverändert. Der Reset hat Vorrang. Ausgabespalten: q. Alle Steuer- und Datensignale sind vor jeder steigenden Taktflanke stabil; die Ergebnisse werden anschließend beobachtet.
Vervollständige design.v und bewahre seine Modulnamen und Ports. Die gesperrte Datei 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 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, getrennt durch ein Leerzeichen und abgeschlossen mit einem Zeilenumbruch.
Probier es selbst
module dut (input clk, input rst, input en, output reg [3:0] q);
// Ersetze diesen Platzhalter durch dein 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