Lernen › Thema 10
Zähler und Schieberegister: Entwurf Schritt für Schritt
7 Min. Lesezeit · bitGateLab-Team
Ein Zähler ist eine Gruppe von Flipflops, die mit jedem Taktimpuls eine feste Folge von Zuständen durchläuft; ein Register ist eine Gruppe von Flipflops, die ein Binärwort speichert oder verschiebt. Damit misst man Zeiten, teilt Frequenzen, wandelt Daten von seriell nach parallel und erzeugt Steuerfolgen. Du solltest die D-, JK- und T-Flipflops und ihre Anregungstabellen sicher beherrschen; sie werden im Thema Latches und Flipflops erklärt.
Asynchronzähler (Ripple-Zähler)
Am einfachsten zählt man, indem man T-Flipflops mit T = 1 verkettet, sodass jedes toggelt und die Frequenz durch 2 teilt. Nur das erste erhält den Systemtakt; jedes folgende nimmt als Takt den Ausgang des vorherigen. Bei Flipflops, die auf die fallende Flanke getriggert werden, verbindet man Q einer Stufe mit dem Takt der nächsten, und der Zähler zählt aufwärts; bei steigender Flanke muss man Q verwenden, um aufwärts zu zählen (mit Q würde er abwärts zählen).
Sein Nachteil ist die aufsummierte Verzögerung: Stufe n ändert sich erst, wenn sich alle vorherigen geändert haben, wie eine Welle, die durch die Kette läuft. Während dieser Zeit durchläuft der Ausgang falsche Werte.
Beispiel: 4-Bit-Asynchronzähler mit tCQ = 12 ns pro Flipflop. Er wechselt von 0111 auf 1000.
- Q0 wechselt nach 12 ns von 1 auf 0: Am Ausgang liest man 0110.
- Q1 wechselt nach 24 ns: 0100.
- Q2 wechselt nach 36 ns: 0000.
- Q3 wechselt nach 48 ns: 1000, der richtige Wert.
48 ns lang zeigte der Ausgang 0110, 0100 und 0000. Decodiert eine Schaltung diese Werte, sieht sie falsche Impulse. Um immer einen stabilen Wert zu lesen, muss die Taktperiode länger als 48 ns sein, also f < 20.8 MHz.
Synchronzähler
Beim Synchronzähler erhalten alle Flipflops denselben Takt, und die Logik entscheidet, welches toggelt. In einem binären Aufwärtszähler toggelt ein Bit, wenn alle niederwertigeren Bits 1 sind:
T0 = 1, T1 = Q0, T2 = Q0·Q1, T3 = Q0·Q1·Q2
Alle Ausgänge ändern sich gemeinsam, tCQ nach der Flanke. Die minimale Periode hängt nicht mehr über die Flipflop-Kette von der Anzahl der Bits ab, sondern von tCQ + Laufzeit des AND + tsu.
Modulo-N-Zähler
Ein Modulo-N-Zähler durchläuft N Zustände und beginnt dann von vorn. Er braucht mindestens ⌈log2 N⌉ Flipflops. Es gibt zwei Möglichkeiten, ihn zu bauen.
Mit asynchronem Reset: Man nimmt einen Binärzähler und erkennt den ersten Zustand, der nicht auftreten darf. Für Modulo 10 ist das der Zustand 1010; es genügt ein NAND von Q3 und Q1 am low-aktiven Clear-Eingang, denn hier sind Q3 und Q1 zum ersten Mal gleichzeitig 1. Das funktioniert, aber der Zustand 1010 erscheint für einige Nanosekunden und erzeugt einen kurzen Impuls an den Ausgängen.
Synchroner Entwurf: Man stellt die Zustandstabelle auf und berechnet die Eingänge mit der Anregungstabelle. Es gibt keine Übergangszustände.
Beispiel: synchroner Modulo-6-Zähler (0 bis 5) mit T-Flipflops. Zustände Q2 Q1 Q0; die Zustände 110 und 111 werden nicht verwendet und gelten als X.
| Q2 Q1 Q0 | Folgezustand | T2 | T1 | T0 |
|---|---|---|---|---|
| 000 | 001 | 0 | 0 | 1 |
| 001 | 010 | 0 | 1 | 1 |
| 010 | 011 | 0 | 0 | 1 |
| 011 | 100 | 1 | 1 | 1 |
| 100 | 101 | 0 | 0 | 1 |
| 101 | 000 | 1 | 0 | 1 |
Jedes T ist 1, wenn sich das Bit ändert. Vereinfacht mit den X:
- T0 = 1.
- T1 = Q2·Q0 (überdeckt 001 und 011; bei 101 ist es 0, weil Q2 = 1).
- T2 = Q1·Q0 + Q2·Q0 = Q0·(Q1 + Q2).
Prüfe die unbenutzten Zustände: Von 110 aus gilt T2 = 0, T1 = 0, T0 = 1, der Zähler geht nach 111; von 111 aus gilt T2 = 1, T1 = 0, T0 = 1, er geht nach 010. Beide kehren in die Folge zurück: Der Zähler ist selbststartend, auch wenn er in einem ungültigen Zustand einschaltet.
Schieberegister
Ein Schieberegister besteht aus verketteten D-Flipflops: Der Ausgang jedes Flipflops speist den Eingang des nächsten, und mit jeder Flanke rücken alle Bits um eine Stelle weiter. Je nachdem, wie die Daten hinein- und herauskommen, unterscheidet man:
- SISO (serieller Eingang, serieller Ausgang): verzögert ein Signal um n Taktzyklen.
- SIPO (serieller Eingang, paralleler Ausgang): empfängt die Bits einzeln und gibt sie gemeinsam aus. Wandelt seriell in parallel.
- PISO (paralleler Eingang, serieller Ausgang): lädt ein ganzes Wort und gibt es Bit für Bit aus. Jedes Flipflop hat einen 2-zu-1-MUX an seinem Eingang:
Di = LADEN·Pi + LADEN·Qi−1. - PIPO (parallel nach parallel): ein einfaches Speicherregister.
Beispiel: 4-Bit-SIPO-Register, anfangs auf 0000, mit Q0 ← Eingang, Q1 ← Q0, Q2 ← Q1, Q3 ← Q2. Gesendet werden die Bits 1, 0, 1, 1 in dieser Reihenfolge.
| Flanke | Eingangsbit | Q0 Q1 Q2 Q3 |
|---|---|---|
| 1 | 1 | 1 0 0 0 |
| 2 | 0 | 0 1 0 0 |
| 3 | 1 | 1 0 1 0 |
| 4 | 1 | 1 1 0 1 |
Nach 4 Flanken enthält das Register, gelesen als Q3 Q2 Q1 Q0, den Wert 1011: Das zuerst gesendete Bit steht in Q3.
Ringzähler und Johnson-Zähler
Verbindet man den Ausgang des letzten Flipflops eines Schieberegisters mit dem Eingang des ersten, erhält man einen Ringzähler. Er wird mit einer einzigen 1 initialisiert (zum Beispiel 1000), und diese 1 läuft um: 1000, 0100, 0010, 0001, 1000. Mit n Flipflops hat er n Zustände, und jeder Zustand ist bereits decodiert, weil nur ein Ausgang auf 1 liegt. Das anfängliche Laden muss sichergestellt sein; startet er bei 0000, bleibt er für immer dort.
Koppelt man statt Q den Ausgang Q des letzten Flipflops zurück, erhält man den Johnson-Zähler (auch verdrillter Ringzähler genannt) mit 2n Zuständen. Für 4 Bits (Q0 Q1 Q2 Q3, mit Q0 ← Q3):
0000 → 1000 → 1100 → 1110 → 1111 → 0111 → 0011 → 0001 → 0000
Jeder Zustand lässt sich mit einem AND mit nur zwei Eingängen erkennen, indem man auf die Grenze zwischen Einsen und Nullen achtet: Zum Beispiel ist 1100 der einzige Zustand mit Q1 = 1 und Q2 = 0, und 0000 ist der einzige mit Q0 = 0 und Q3 = 0.
Häufige Fehler
- Die Ausgänge eines Asynchronzählers mit kombinatorischer Logik zu decodieren, ohne die Übergangszustände zu berücksichtigen.
- Zwischen den Stufen eines Asynchronzählers mit steigender Flanke Q statt Q anzuschließen und einen Abwärtszähler zu erhalten.
- Zu vergessen nachzuprüfen, wohin die unbenutzten Zustände eines Modulo-N-Zählers führen.
- Einen Ringzähler zu starten, ohne die anfängliche 1 zu laden.
- Beim Auslesen eines SIPO-Registers die Reihenfolge der Bits zu verwechseln: Das zuerst eingeschobene Bit landet am entferntesten Ende.
Probiere es im Simulator aus
Einen Asynchronzähler im Zeitdiagramm mit einem Synchronzähler zu vergleichen ist der beste Weg, den Ripple-Effekt zu sehen.
- Platziere vier T-Flipflops mit T = 1, schließe den Takt an das erste an und verkette die übrigen zu einem Asynchronzähler.
- Verbinde die vier Ausgänge mit LED-Anzeigen sowie mit einer Ziffernanzeige oder einem LED-Bargraph.
- Baue daneben den Synchronzähler mit T1 = Q0, T2 = Q0·Q1 und T3 = Q0·Q1·Q2 auf, alle mit demselben Takt.
- Öffne das Zeitdiagramm, lass den Takt laufen und beobachte bei beiden den Übergang von 0111 auf 1000.
- Baue ein Register aus vier verketteten D-Flipflops auf, ändere vor jeder Flanke den seriellen Eingang und beobachte, wie die Bits weiterrücken; kopple danach Q der letzten Stufe auf die erste zurück und prüfe die 8 Zustände des Johnson-Zählers.
Übungen
- Wie viele Flipflops brauchst du für einen Modulo-12-Zähler als Binärzähler, als Ringzähler und als Johnson-Zähler?
Lösung
Binär: 4 (24 = 16 ≥ 12). Ring: 12. Johnson: 6 (2 × 6 = 12).
- Welches Gatter und welche Ausgänge würdest du verwenden, um aus einem 4-Bit-Binärzähler einen Modulo-12-Zähler mit low-aktivem asynchronem Reset zu machen?
Lösung
12 = 1100. Ein NAND von Q3 und Q2 am Clear-Eingang, weil hier beide zum ersten Mal 1 sind.
- Ein 8-Bit-Asynchronzähler verwendet Flipflops mit tCQ = 10 ns. Wie groß ist die Einschwingzeit im ungünstigsten Fall?
Lösung
8 × 10 = 80 ns, zum Beispiel beim Übergang von 01111111 auf 10000000.
- Welches AND mit zwei Eingängen decodiert den Zustand 0111 des 4-Bit-Johnson-Zählers?
Lösung
Q0·Q1: Es ist der einzige Zustand mit Q0 = 0 und Q1 = 1.