29 / 63 · Konzept
Zustandsanzahl, Zählerbreite und unbenutzte Codes
Speicherbreite aus dem Zählbereich ableiten und Wiederherstellung ungültiger Zustände festlegen.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
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 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.
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.
- 10 Zustände: Regulärer count: 0 bis 9
- 4-Bit-Speicher: 16 Codes, davon 10 bis 15 ungenutzt
- 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.
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
endDas 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; Codes bleiben unbenutzt. Einfaches Inkrementieren läuft über 99 bis 127 und ergibt Modulo-128 statt Modulo-100.