Erkennen abgetasteter Flanken
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 19 von 38.
Ein Pegel kann über viele Zyklen hinweg hoch bleiben, während ein Ereignisimpuls eine Zyklusdauer haben sollte. Speichere den zuvor abgetasteten Pegel und vergleiche ihn mit dem aktuellen. Dieser Flankendetektor setzt voraus, dass ein Eingang bereits mit diesem Takt synchron ist; er ist kein Synchronisierer für den Taktbereichsübergang.
Relevanter Ausschnitt; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
previous <= sig;
rising <= sig & ~previous;Der zuvor gespeicherte Pegel erzeugt beim abgetasteten Übergang einen einzelnen Impuls.
Vergleiche die aktuell und zuvor abgetasteten Pegel; verwende diesen Detektor nur mit einem synchronen Eingang.
Aufgabe
MittelFür ein bereits zu clk synchrones Signal sig soll bei jeder abgetasteten 0-zu-1-Flanke ein registrierter Impuls über einen Taktzyklus erzeugt werden. Das synchrone rst setzt den gespeicherten vorherigen Pegel und den Impuls zurück. Ein hohes sig an der ersten Flanke nach dem Zurücksetzen erzeugt daher einen Impuls. Ausgabespalten: pulse. 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 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 ein Leerzeichen getrennt und mit einem Zeilenumbruch abgeschlossen.
Probier es selbst
module dut (input clk, input rst, input sig, output reg pulse);
// Ersetzen Sie diesen Platzhalter durch Ihr Design.
initial pulse = 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