Altifigence Academy

29 / 63 · Konzept

Zustandsanzahl, Zählerbreite und unbenutzte Codes

Speicherbreite aus dem Zählbereich ableiten und Wiederherstellung ungültiger Zustände festlegen.

Auch ein Zähler ist ein Zustandsautomat

Ein Zähler, der wiederholt von 0 bis 9 zählt, benötigt zehn Zustände und mindestens ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 Speicherbits. Ein 4-Bit-RegisterRegister Speichert einen Zustand aus mehreren Bits. Die synchronen Register dieses Kurses übernehmen festgelegte Eingaben an Taktflanken. Mehr erfahren hat aber 16 Bitmuster: Die passende Breite allein implementiert noch kein Modulo-10.

N=⌈log⁡2M⌉,unused codes=2N−MN=\left\lceil\log_2 M\right\rceil,\qquad \text{unused codes}=2^N-M

M ist die Zustandsanzahl, nicht der Höchstwert. 0 bis M−1 unterscheidet sich von 0 bis M. Bei Unterstützung von M=1 muss die Breite mindestens eins sein und der Wert immer 0 bleiben.

Vier Speicherbits bieten 16 Codes, Modulo-10 nutzt nur zehn normale Zustände. Nach der Breitenwahl müssen Vergleich und Wiederherstellungsregel hinzukommen.

Speicherbreite und Umlaufbedingung getrennt entwerfen
  1. 10 Zustände: Regulärer count: 0 bis 9
  2. 4-Bit-Speicher: 16 Codes, davon 10 bis 15 ungenutzt
  3. Nächster Zustand: 0, wenn en=1 und count≥9

Ungültige Zustände gehören zum Entwurf

Was folgt, wenn der 4-Bit-Modulo-10-Zähler aus irgendeinem Grund 12 enthält? Entweder beweisen Initialisierungs- und ResetbedingungenReset Steuerung zur Rückkehr in einen festgelegten Anfangszustand. Synchron/asynchron und Priorität gegenüber anderen Steuerungen müssen definiert werden. Mehr erfahren, dass dies ausgeschlossen ist, oder eine Regel führt ab 9 nach 0 zurück. Eine solche Wiederherstellung garantiert keine Widerstandsfähigkeit gegen jeden Hardwarefehler.

SystemVerilog
always_ff @(posedge clk) begin
  if (rst) count <= 4'd0;
  else if (en) begin
    if (count >= 4'd9) count <= 4'd0;
    else count <= count + 4'd1;
  end
end

Das Beispiel korrigiert auch 10 bis 15 an einer Flanke mit en=1. Bei enable=0 hält es selbst ungültige Werte. Erfordert die Spezifikation sofortige Wiederherstellung, muss die Priorität geändert werden.

Breite und Funktion getrennt prüfen

Für 0 bis 999 genügen zehn Bit, freies Hochzählen läuft aber bis 1023. Vergleich und Auswahl müssen am spezifizierten Maximum nach 0 führen. Bei Speicheradressen, Iterations- und Paketlängenzählern führt dieser Unterschied unmittelbar zu Zugriffs- oder Längenfehlern.

Selbst ausprobieren

Wie breit muss ein Zähler 0–99 mindestens sein, wie viele Codes bleiben frei, und was ändert sich bei bloßem +1 in dieser Breite?

Erklärung lesen

Hundert Zustände benötigen sieben Bit; 128−100=28128-100=28 Codes bleiben unbenutzt. Einfaches Inkrementieren läuft über 99 bis 127 und ergibt Modulo-128 statt Modulo-100.

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