16 / 37 · Konzept
Modulo- und Sättigungszähler mit Endimpuls
Verhalten am Maximum und exakten Zyklus des Terminal-count-Signals festlegen.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Drei verschiedene Regeln für Bereichsüberschreitung
Dasselbe N-Bit-RegisterRegister Speichert einen Zustand aus mehreren Bits. Die synchronen Register dieses Kurses übernehmen festgelegte Eingaben an Taktflanken. Mehr erfahren kann am Maximum umlaufen, dort sättigen oder einen Fehler melden. Die Spezifikation entscheidet.
Ein 8-Bit-Modulozähler folgt auf 255 mit 0, ein sättigender mit 255: unterschiedliche Funktionen. Ein Akkumulator für negative und positive Werte benötigt zusätzlich den signed-Bereich und beide Sättigungsgrenzen.
Jede Spalte dokumentiert eine steigende FlankeSteigende Flanke Übergang des Takts von 0 auf 1. Nicht zu verwechseln mit dem gesamten hohen Pegelintervall CLK=1. Mehr erfahren. Eingänge gelten unmittelbar davor, Zustände mit „after“ unmittelbar nach der Aktualisierung. Die Spalten zeigen die Reihenfolge der Abtastungen, keine physische LaufzeitLaufzeit Zeit nach einer Eingangsänderung, bis der Ausgang auf dem richtigen Wert stabil ist. Logische Äquivalenz und zeitliche Eigenschaften sind getrennte Aussagen. Mehr erfahren. Anfangs count=8, reset=0, enable=1. Dieselben Eingaben erzeugen bei Modulo-10, 4-Bit-Umlauf und 4-Bit-Sättigung verschiedene Folgen.
Wellenformdaten anzeigen
| Signal | Wellenform | Buswerte |
|---|---|---|
| edge | 234523452 | E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8 |
| mod10 after | 234523452 | 9 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 |
| wrap4 after | 234523452 | 9 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1 |
| sat4 after | 2345234.. | 9 → 10 → 11 → 12 → 13 → 14 → 15 |
Den letzten Modulo-M-Zustand vergleichen
Für einen Puls je zehn Zählschritte werden 0–9 verwendet und nur freigegebene Flanken gezählt. Ein registrierter pulse kann bedeuten: „An dieser Flanke wurde 9 verarbeitet und auf 0 zurückgekehrt.“
always_ff @(posedge clk) begin
if (rst) begin
count <= 4'd0;
pulse <= 1'b0;
end else begin
pulse <= 1'b0;
if (en) begin
if (count == 4'd9) begin
count <= 4'd0;
pulse <= 1'b1;
end else count <= count + 4'd1;
end
end
endDie Standardzuweisung setzt pulse an der nächsten Flanke auf 0. Eine bloße Ausgabe count==9 könnte bei enable=0 mehrere Zyklen 1 bleiben. Unterscheiden Sie Endzustand und Abschlussereignis.
Die Zählgrundlage der Periode
Nach Reset bei count=0 kommt der erste pulse nach zehn Flanken mit enable=1. Wichtiger als die Bezeichnung der ersten Flanke als 0 oder 1 ist eine konsistente Definition von Eingabe-, Zustands- und Ausgabetabelle.
Die Übung ist ein Modulo-16-Zähler. Aus 1110 wird nach einer Flanke 1111, danach 0000. Stoppen Sie bei 1111 mit enable=0. Halten und Sättigung sehen dann gleich aus, verhalten sich bei Fortsetzung aber verschieden. Welchen Wert müsste ein Sättigungszähler liefern?
Der synchrone reset hat Vorrang vor enable. Bei enable=0 bleibt der gespeicherte Wert erhalten. q=1110; q_next = (q + 1) mod 16
Selbst ausprobieren
Bei count=9, pulse=0 folgen zwei Flanken mit en=0 und eine mit en=1. Wie ändern sich count und pulse?
Erklärung lesen
Während der zwei Stopps bleibt count=9, pulse=0. An der dritten Flanke werden count=0, pulse=1. An der folgenden setzt die Standardzuweisung pulse=0.