# Synchronzähler

Ein Synchronzähler ist ein elektrisches Bauelement der Digitaltechnik, das eine Folge von Ereignissen zählt. Jede dabei entstehende Zahl wird bis zum nächsten Ereignis gespeichert. Der Zählerstand wird im einfachsten Fall in Zahlen des Dualsystems dargestellt. In diesem Fall sind bei $n$ vorhandenen binären Speicherelementen die möglichen Zahlen auf $\left[0;\,2^{n}-1\right]$ beschränkt. Man spricht dann auch von n-bit-Synchronzählern. Durch geeignete Schaltung sind auch Zähler im Dezimalsystem möglich und verbreitet im Einsatz. Das zu zählende Eingangssignal wird bei periodischer Folge auch als Taktsignal bezeichnet.
Synchronzähler gehören zu den synchronen Schaltkreisen, weil sich alle Speicherelemente nur zu einer festgelegten (steigenden oder fallenden) Flanke eines gemeinsamen Signals ändern können. Diese Gleichzeitigkeit über alle Speicherelemente ist dann erforderlich, wenn der Zählerstand von einer elektronischen Einrichtung (z. B. Mikroprozessor) kurz nach dem Ereignis (z. B. nach ½ Periodendauer) übernommen werden soll.

## Aufbau

Ein Synchronzähler kann aus JK-Flipflops aufgebaut sein wie in der nebenstehenden Schaltung. Der Triggereingang jedes Flipflops ist hier über den Eingang CLK mit dem Signal des zu zählenden Ereignisses verbunden. Diese Struktur lässt alle Flipflops untereinander synchron laufen und gibt der Schaltung den Namen (im Gegensatz zum Asynchronzähler).
Durch die Verschaltung der Eingänge jedes einzelnen Flipflops können deren Ausgangssignale als eine Ziffernfolge verstanden werden. Im Beispiel steht jeder Ausgang für die Ziffer einer vierstelligen Binärzahl, mit Q$_0$ an niederwertigster Stelle. Durch andere Schaltungen lassen sich beispielsweise vier Flipflops zur Darstellung des 8-4-2-1-Codes einer Dezimalziffer verwenden, siehe Frequenzteiler.
Ein JK-Flipflop verhält sich wie ein T-Flipflop, wenn beide Eingänge denselben Pegel haben. Bei J = K = 1 wechselt der Pegel am Ausgang und bei J = K = 0 bleibt er unverändert. Diese Eigenschaft wird für den Synchronzähler verwendet. Im Folgenden wird ein 4-bit-Vorwärtszähler mit den Ausgängen Q$_0$ bis Q$_3$ beschrieben, der die Zahlen von $0000_{2}(=0_{10})$ bis $1111_{2}(=15_{10})$ in natürlicher Reihenfolge zählt.
| Q$_3$ | Q$_2$ | Q$_1$ | Q$_0$ | Binärzahl | Dezimalzahl |
| 0 | 0 | 0 | 0 | 0000 | 0 |
| 0 | 0 | 0 | 1 | 0001 | 1 |
| 0 | 0 | 1 | 0 | 0010 | 2 |
| 0 | 0 | 1 | 1 | 0011 | 3 |
| 0 | 1 | 0 | 0 | 0100 | 4 |
| 0 | 1 | 0 | 1 | 0101 | 5 |
| 0 | 1 | 1 | 0 | 0110 | 6 |
| 0 | 1 | 1 | 1 | 0111 | 7 |
| Q$_3$ | Q$_2$ | Q$_1$ | Q$_0$ | Binärzahl | Dezimalzahl |
| 1 | 0 | 0 | 0 | 1000 | 8 |
| 1 | 0 | 0 | 1 | 1001 | 9 |
| 1 | 0 | 1 | 0 | 1010 | 10 |
| 1 | 0 | 1 | 1 | 1011 | 11 |
| 1 | 1 | 0 | 0 | 1100 | 12 |
| 1 | 1 | 0 | 1 | 1101 | 13 |
| 1 | 1 | 1 | 0 | 1110 | 14 |
| 1 | 1 | 1 | 1 | 1111 | 15 |
Daraus ergibt sich folgende Verschaltung:
* Das Bit Q$_0$ mit der niedrigsten Stellenwertigkeit (2$^0$=1) soll bei jeder steigenden Signalflanke wechseln und wird daher direkt mit dem Takteingang CLK verbunden.
* Das Bit Q$_1$ mit der nächsthöheren Stellenwertigkeit (2$^1$=2) soll nur wechseln, wenn der Ausgang Q$_0$ den Pegel 1 hat (also während des vorigen Takts eine 1 ausgegeben hat). Dies wird realisiert, indem der Ausgang mit den J- und K-Eingängen des zweiten Flipflops verbunden wird.
* Das nächste Bit Q$_2$ mit der nächsthöheren Wertigkeit (2$^2$=4) soll nur wechseln, wenn alle niederwertigeren Bits (Q$_0$ und Q$_1$) den Pegel 1 haben (also während des vorigen Takt die Binärzahl 11 dargestellt haben). Dies wird mit einem Und-Gatter festgestellt.
* Das letzte Bit Q$_3$ mit der höchsten Wertigkeit (2$^3$=8) soll nur wechseln, wenn alle niederwertigeren Bits (Q$_0$, Q$_1$ und Q$_2$) den Pegel 1 haben (also im vorigen Takt die Binärzahl 111 dargestellt haben). Dieses kann mit einem zusätzlichen Und-Gatter realisiert werden, welches das Ergebnis aus dem vorigen Schritt mitverwendet.
Das Beispiel lässt sich auf diese Weise fortsetzen, um beliebig große Zähler zu erzeugen. Wenn, wie in der Erläuterung des letzten Schrittes, vorherige Ergebnisse mit verwendet werden, ist dabei jedoch die Zählgeschwindigkeit massiv eingeschränkt. Um einen korrekten Zustandswechsel des höchstwertigen Bits zu erreichen, muss zum Zeitpunkt der entsprechenden Taktflanke die Information über den Zustandswechsel des niedrigstwertigen Bits von der letzten Taktflanke durch die gesamte Kette von Und-Gattern gewandert sein. Zum Beispiel sorgen die Gatterlaufzeiten der 74HCxx-Serie von Logikbausteinen von typisch 15 ns dafür, dass ein mit nur 10 MHz zählender Synchronzähler der beschriebenen Bauart nicht einmal 8 Bits lang sein kann! – Durch Und-Gatter mit mehreren Eingängen lässt sich die Kettenschaltung aber vermeiden.

## Eigenschaften

In der im letzten Abschnitt beschriebenen Bauart summieren sich Gatterlaufzeiten (schaltzeitbedingte Verzögerungen). Dies kann vermieden werden, indem jede Stufe ihr Eingangssignal mit einem eigenen Und-Gatter erzeugt, das alle weniger signifikanten Bits verknüpft. Zum Beispiel benötigt das JK-Flipflop von Bit 7 ein vorgeschaltetes Und-Gatter, das auf sieben Eingängen die Bits Q$_0$ bis Q$_6$ erfasst. In einer solchen Bauweise hat der Synchronzähler gegenüber dem Asynchronzähler den Vorteil, dass sich Gatterlaufzeiten nicht summieren und so höhere Taktraten, bzw. bei gleicher Taktrate größere Zähler möglich sind. Der Preis ist eine deutlich höhere Komplexität, die jedoch in FPGA oder dediziert integrierten ICs problemlos realisierbar ist.

## Varianten
### Rückwärtszähler

Ein synchroner binärer Rückwärtszähler entsteht, indem in der oben gezeigten Schaltung statt der Q-Ausgänge die Q-Ausgänge verwendet werden. Mit jedem Takt zählt der Rückwärtszähler einen Schritt zurück. Wenn der untere Grenzwert 0 erreicht ist, springt der Rückwärtszähler beim nächsten Schritt wieder auf den Höchstwert.
Eine synchrone Rückwärtszählung in Dezimalzahlen ist ebenfalls möglich. Die gezeigte Schaltung für eine Dezimalziffer lässt sich beliebig kaskadieren. Der BCD-Code wird an den normalen Q-Ausgängen abgegriffen. Zur Zählerfreigabe wird der Eingang E an logisch 1 gelegt; bei den Folgeschaltungen wird E mit A der Vorstufe verbunden. Das zu zählende Signal wird an T gelegt und über alle Stufen durchverbunden. Nach dem Ausgangssignal 0000$_2$=0$_{10}$ führt die nächste fallende Flanke an T auf den Wert 1001$_2$=9$_{10}$, und ein Übertragszählschritt wird ausgeführt.

### Mit D-Flipflop

Die nebenstehende Schaltung zeigt einen Vorwärtszähler mit D-Flipflops. Sobald alle niederwertiger bewerteten Flipflops auf 1 geschaltet haben (Erkennung durch die Und-Gatter), wird der Eingang des nächsten Flipflops invertiert (durch Rückkopplung des eigenen Zustandes und eine XOR-Verknüpfung mit dem Ergebnis des Und-Gatters). Auch dieses Schema lässt sich ohne Einfluss auf die maximale Zählgeschwindigkeit beliebig fortsetzen, um größere Zähler zu realisieren.
Um aus der gezeigten Logikschaltung einen Rückwärtszähler zu machen, werden die inversen Flipflop-Ausgänge (Q$_x$) für den Zählerstand verwendet. Die restliche kombinatorische Logik zur Ansteuerung der jeweils nachfolgenden Flipflops bleibt unverändert. Auch bei diesem Zähler ist Q$_0$ das niederwertigste Bit (LSB).

### Reversibler Zähler

Beispielsweise bei der Positionsmessung mittels Inkrementalgeber sind, wenn beide Bewegungsrichtungen zulässig sind, Zähler erforderlich, die vorwärts und auch rückwärts zählen können. Eine Richtungserkennung muss ein zusätzliches Steuersignal an den Zähler liefern. Schaltungen hierzu werden in der Literatur beschrieben. Diese Zähler sind immer Synchronzähler.