Altifigence Academy

16 / 37 · Konzept

Modulo- und Sättigungszähler mit Endimpuls

Verhalten am Maximum und exakten Zyklus des Terminal-count-Signals festlegen.

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.

Cnextwrap=(C+1) mod 2NC_{next}^{wrap}=(C+1)\bmod2^N
Cnextsat=min⁡(C+1,2N−1)C_{next}^{sat}=\min(C+1,2^N-1)

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.

Drei Regeln nach Erreichen des Maximums
Wellenformdaten anzeigen
Wellenformdaten: Jedes Zeichen steht für ein Intervall, ein Punkt hält den vorherigen Zustand und p ist ein Taktzyklus.
SignalWellenformBuswerte
edge234523452E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8
mod10 after2345234529 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
wrap4 after2345234529 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1
sat4 after2345234..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.“

SystemVerilog
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
end

Die 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?

Am 4-Bit-Maximum anhalten oder umlaufen

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.

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.