Synchronzähler entwerfen: Wertetabelle, DNF und KNF, KV-Diagramm und JK-Flipflops
https://bildung.social/@oerinformatik/
https://oer-informatik.de/synchronzaehler
Synchronzähler, Schaltwerksentwurf, Zustandsfolgetabelle, disjunktive Normalform, konjunktive Normalform, KV-Diagramm, Don’t Care, JK-Master-Slave-Flipflop, charakteristische Gleichung, Koeffizientenvergleich, BCD-Zähler, Signallaufzeit
tl/dr; (ca. 32 min Lesezeit): Ein Asynchronzähler zeigt beim Übergang von 7 auf 8 kurz die Falschwerte 6, 4 und 0. Synchronzähler vermeiden das, weil alle Flipflops am selben Takt hängen, brauchen aber eine passende Ansteuerlogik. Dieser Artikel zeigt Schritt für Schritt den Entwurf: Zustandsfolgetabelle, Funktionsgleichungen als DNF und KNF, Vereinfachen mit Schaltalgebra und KV-Diagramm, charakteristische Gleichungen der Flipflops, Koeffizientenvergleich für J und K, die fertige Schaltung und zum Schluss ein BCD-Zähler mit Don’t-Care-Feldern [AI-Assisted]. (Zuletzt geändert am 13.11.2026)
Schon fit in diesem Thema? Nutze die Kann-Liste und die Leitfragen unter dem Artikel als Checkliste, ob Du die relevanten Kompetenzen bereits hast.
Dieser Artikel baut auf der Kann-Liste der Artikel Logische Verknüpfungen, Flipflops und Zähler, Frequenzteiler und Schieberegister auf.
Als Digitaltechnik-Grundlagen kann ich nach Durcharbeiten des Artikels…
… an einem Impulsdiagramm erklären, warum ein Asynchronzähler beim Zählen kurzzeitig falsche Zählerstände ausgibt, und diese Zwischenwerte bestimmen.
… für einen Zähler die Zustandsfolgetabelle mit den Zuständen vor und nach der Taktflanke aufstellen.
… aus einer Wertetabelle die disjunktive und die konjunktive Normalform aufstellen und begründen, welche der beiden kürzer ist.
… Funktionsgleichungen mit den Regeln der Schaltalgebra vereinfachen.
… KV-Diagramme für zwei, drei und vier Variablen aufstellen, Blöcke nach den Vereinfachungsregeln bilden (auch über die Ränder hinweg) und die minimale Funktionsgleichung ablesen.
… die charakteristischen Gleichungen von RS-, D-, T- und JK-Flipflop nennen.
Darüber hinaus kann ich als Digitaltechnik-Expertenwissen…
… per Koeffizientenvergleich aus den Folgezustandsgleichungen die Ansteuergleichungen für J und K bestimmen und den Synchronzähler verdrahten.
… nicht benutzte Zustände als Don’t-Care-Felder nutzen, einen BCD-Zähler entwerfen und prüfen, ob er aus nicht benutzten Zuständen in den Zählzyklus zurückfindet.
… die höchste Taktfrequenz eines Synchronzählers aus Laufzeit, Gatterlaufzeit und Vorbereitungszeit abschätzen.
Ein Zähler steuert eine Anzeige mit zwei 7-Segment-Stellen, ein zweiter Baustein vergleicht den Zählerstand mit einem Sollwert und schaltet bei Gleichheit ein Ventil. Meistens funktioniert das, aber hin und wieder schaltet das Ventil zu früh. Schuld ist kein Wackelkontakt, sondern der Aufbau des Zählers: Beim Asynchronzähler schalten die Flipflops nacheinander, und in den wenigen Nanosekunden dazwischen stehen an den Ausgängen Zahlen, die nie gezählt wurden.
Abhilfe schafft der Synchronzähler, bei dem alle Flipflops mit derselben Taktflanke schalten. Wie man ihn verdrahtet, ist allerdings nicht offensichtlich. In diesem Artikel entwirfst Du ihn Schritt für Schritt: von der Wertetabelle über Funktionsgleichungen und KV-Diagramme bis zur fertigen Schaltung aus JK-Master-Slave-Flipflops. Das Verfahren funktioniert für jede Zählfolge, zum Schluss auch für einen BCD-Zähler.
Die Übungsaufgaben zu diesem Artikel findest Du unter Übungsaufgaben zum Entwurf von Synchronzählern. Vorausgesetzt werden die Grundverknüpfungen und die Rechenregeln der Schaltalgebra aus Logische Verknüpfungen, das JK-Flipflop aus Flipflops sowie Asynchron- und Synchronzähler aus Zähler, Frequenzteiler und Schieberegister.
Schritt 1: Das Problem des Asynchronzählers
Beim 4-Bit-Asynchronzähler bekommt nur das erste Flipflop den Zähltakt. Jedes weitere Flipflop wird vom Ausgang des vorherigen getaktet und kippt erst, wenn dieses umgeschaltet hat. Jedes Flipflop braucht dafür seine Signallaufzeit t_\mathrm{pd} (propagation delay), typisch einige Nanosekunden.
Besonders deutlich wird das beim Übergang von 7 (0111) auf 8 (1000), weil sich dabei alle vier Bits ändern. Nimm an, jedes Flipflop braucht 10 ns:
Nach 10 ns fällt Q_0: Der Zähler steht auf
0110= 6.Nach 20 ns fällt Q_1 (getaktet von Q_0):
0100= 4.Nach 30 ns fällt Q_2:
0000= 0.Nach 40 ns steigt Q_3:
1000= 8, endlich der richtige Wert.
Eine 7-Segment-Anzeige hinter einem BCD-Decoder zeigt also für einige Nanosekunden 7, 6, 4, 0, 8. Das Auge bemerkt das nicht. Eine nachgeschaltete Logik aber schon: Ein Vergleicher, der auf den Stand 4 wartet, liefert kurz einen Nadelimpuls (Spike oder Glitch), und ein Speicher, der genau in diesem Moment übernimmt, hält einen falschen Wert fest. Je mehr Stufen der Zähler hat, desto länger dauert die Phase mit Falschwerten: Bei n Stufen ist der Zählerstand erst nach n \cdot t_\mathrm{pd} gültig.
Die Idee: Alle Flipflops hängen am selben Takt und schalten gleichzeitig. Dann ändern sich alle Bits nach derselben Laufzeit, und es gibt keine Zwischenstände mehr. Wir verwenden dafür JK-Master-Slave-Flipflops (JK-MS), die bei J = K = 1 kippen und bei J = K = 0 ihren Zustand halten.
Das Problem: Jetzt bekommt jedes Flipflop bei jeder Taktflanke einen Takt. Ob es kippen soll oder nicht, muss eine Logik an den Eingängen J und K entscheiden. Wie diese Logik aussieht, weißt Du noch nicht. Genau das erarbeiten wir in den nächsten Schritten.
Schritt 2: Die Zustandsfolgetabelle
Ein Zähler ist ein Schaltwerk: Sein nächster Zustand hängt vom aktuellen Zustand ab. Deshalb beginnt der Entwurf mit einer Tabelle, die für jeden Zustand vor der Taktflanke den Zustand nach der Taktflanke angibt, der Zustandsfolgetabelle.
Die Ausgänge vor der Flanke heißen Q_3, Q_2, Q_1, Q_0, die Ausgänge nach der Flanke Q_3^+, Q_2^+, Q_1^+, Q_0^+. (Im Artikel Flipflops steht dafür Q_n und Q_{n+1}; hier ist der Index schon für die Bitnummer vergeben.) Der Dualzähler zählt von 0 bis 15 und beginnt dann wieder bei 0:
| Stand | Q_3 | Q_2 | Q_1 | Q_0 | Q_3^+ | Q_2^+ | Q_1^+ | Q_0^+ | Folgestand |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 2 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 3 |
| 3 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 4 |
| 4 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 5 |
| 5 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 6 |
| 6 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 7 |
| 7 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 8 |
| 8 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 9 |
| 9 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 10 |
| 10 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 11 |
| 11 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 12 |
| 12 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 13 |
| 13 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 14 |
| 14 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 15 |
| 15 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
Lies die Tabelle als vier Wertetabellen mit denselben vier Eingängen Q_3 \ldots Q_0 und je einem Ausgang Q_i^+. Für jeden dieser Ausgänge suchen wir eine Funktionsgleichung. Wie daraus die Ansteuerung von J und K wird, klären wir in Schritt 6.
Ein Muster fällt schon jetzt auf: Q_0^+ ist immer das Gegenteil von Q_0, und Q_1 ändert sich genau dann, wenn vorher Q_0 = 1 war.
Schritt 3: Funktionsgleichungen über DNF und KNF
Minterme und die disjunktive Normalform (DNF)
Jede Wertetabelle lässt sich ohne Nachdenken in eine Gleichung übersetzen. Dazu brauchst Du zwei Begriffe:
Ein Minterm ist eine UND-Verknüpfung, in der jede Eingangsvariable genau einmal vorkommt, und zwar unverändert, wenn sie in der betrachteten Zeile 1 ist, und negiert, wenn sie 0 ist. Ein Minterm ist genau in einer Zeile der Wertetabelle 1.
Die disjunktive Normalform (DNF) ist die ODER-Verknüpfung (Disjunktion) aller Minterme der Zeilen, in denen der Ausgang 1 ist.
Das Rezept:
Markiere alle Zeilen mit Ausgang 1.
Bilde für jede dieser Zeilen den Minterm.
Verknüpfe alle Minterme mit ODER.
Zur Schreibweise: Wie in der Mathematik lassen wir das UND-Zeichen weg, Q_1\overline{Q_0} bedeutet Q_1 \wedge \overline{Q_0}.
Beispiel Q_1^+: In der Zustandsfolgetabelle ist Q_1^+ = 1 in den Zeilen 1, 2, 5, 6, 9, 10, 13 und 14. Zeile 1 (0001) liefert den Minterm \overline{Q_3}\,\overline{Q_2}\,\overline{Q_1}\,Q_0, Zeile 2 (0010) liefert \overline{Q_3}\,\overline{Q_2}\,Q_1\overline{Q_0} und so weiter:
\begin{aligned} Q_1^+ = \; & \overline{Q_3}\,\overline{Q_2}\,\overline{Q_1}\,Q_0 \vee \overline{Q_3}\,\overline{Q_2}\,Q_1\overline{Q_0} \vee \overline{Q_3}\,Q_2\overline{Q_1}\,Q_0 \vee \overline{Q_3}\,Q_2Q_1\overline{Q_0} \\ \vee \; & Q_3\overline{Q_2}\,\overline{Q_1}\,Q_0 \vee Q_3\overline{Q_2}\,Q_1\overline{Q_0} \vee Q_3Q_2\overline{Q_1}\,Q_0 \vee Q_3Q_2Q_1\overline{Q_0} \end{aligned}
Diese Gleichung ist richtig, aber unhandlich: acht UND-Glieder mit je vier Eingängen und ein ODER-Glied mit acht Eingängen. Sie muss vereinfacht werden.
Maxterme und die konjunktive Normalform (KNF)
Der zweite Weg geht von den Nullen aus:
Ein Maxterm ist eine ODER-Verknüpfung, in der jede Eingangsvariable genau einmal vorkommt, und zwar negiert, wenn sie in der Zeile 1 ist, und unverändert, wenn sie 0 ist. Ein Maxterm ist genau in einer Zeile 0.
Die konjunktive Normalform (KNF) ist die UND-Verknüpfung (Konjunktion) aller Maxterme der Zeilen, in denen der Ausgang 0 ist.
Für Q_1^+ sind das die Zeilen 0, 3, 4, 7, 8, 11, 12 und 15. Zeile 0 (0000) liefert (Q_3 \vee Q_2 \vee Q_1 \vee Q_0), Zeile 3 (0011) liefert (Q_3 \vee Q_2 \vee \overline{Q_1} \vee \overline{Q_0}):
Q_1^+ = (Q_3 \vee Q_2 \vee Q_1 \vee Q_0)(Q_3 \vee Q_2 \vee \overline{Q_1} \vee \overline{Q_0})(Q_3 \vee \overline{Q_2} \vee Q_1 \vee Q_0) \cdots (\overline{Q_3} \vee \overline{Q_2} \vee \overline{Q_1} \vee \overline{Q_0})
Warum das funktioniert: Jeder Maxterm wird nur in „seiner“ Zeile 0, sonst ist er 1. Die UND-Verknüpfung ist deshalb genau in den Nullzeilen 0.
Welche Form wählen? Die DNF hat so viele Terme, wie es Einsen gibt, die KNF so viele, wie es Nullen gibt. Hat eine Tabelle wenige Einsen, ist die DNF kürzer, bei wenigen Nullen die KNF. Bei Q_1^+ halten sich beide die Waage (acht zu acht). Die DNF entspricht einer Schaltung aus UND-Gliedern mit nachgeschaltetem ODER-Glied, die KNF ODER-Gliedern mit nachgeschaltetem UND-Glied.
Kurze Wiederholung: Regeln zum Vereinfachen
Die Rechenregeln der Schaltalgebra stehen ausführlich in Logische Verknüpfungen. Für die Normalformen sind vor allem diese wichtig:
| Regel | UND-Form | ODER-Form |
|---|---|---|
| Ausklammern | XY \vee X\overline{Y} = X(Y \vee \overline{Y}) | (X \vee Y)(X \vee \overline{Y}) = X \vee Y\overline{Y} |
| Ergänzung | Y \vee \overline{Y} = 1 | Y\overline{Y} = 0 |
| Zusammenfassen (aus beiden) | XY \vee X\overline{Y} = X | (X \vee Y)(X \vee \overline{Y}) = X |
| Absorption | X \vee XY = X | X(X \vee Y) = X |
| Hilfsregel | X \vee \overline{X}Y = X \vee Y | X(\overline{X} \vee Y) = XY |
| De Morgan | \overline{XY} = \overline{X} \vee \overline{Y} | \overline{X \vee Y} = \overline{X}\,\overline{Y} |
| Idempotenz | X \vee X = X | XX = X |
Der Kern jeder Vereinfachung ist die Regel Zusammenfassen: Zwei Terme, die sich nur in einer Variablen unterscheiden (einmal unverändert, einmal negiert), verschmelzen zu einem Term ohne diese Variable. Mit Idempotenz darfst Du einen Term auch doppelt verwenden, um ihn mit zwei verschiedenen Partnern zusammenzufassen.
Q_1^+ vereinfachen
In der DNF von Q_1^+ unterscheiden sich der erste, dritte, fünfte und siebte Term nur in Q_3 und Q_2. Zusammengefasst bleibt \overline{Q_1}\,Q_0. Ebenso werden die übrigen vier Terme zu Q_1\overline{Q_0}:
\begin{aligned} Q_1^+ &= \overline{Q_1}\,Q_0\,(\overline{Q_3}\,\overline{Q_2} \vee \overline{Q_3}\,Q_2 \vee Q_3\overline{Q_2} \vee Q_3Q_2) \vee Q_1\overline{Q_0}\,(\overline{Q_3}\,\overline{Q_2} \vee \overline{Q_3}\,Q_2 \vee Q_3\overline{Q_2} \vee Q_3Q_2) && \text{ausklammern} \\ &= \overline{Q_1}\,Q_0 \cdot 1 \vee Q_1\overline{Q_0} \cdot 1 && \text{alle vier Kombinationen ergeben 1} \\ &= \overline{Q_1}\,Q_0 \vee Q_1\overline{Q_0} = Q_1 \oplus Q_0 \end{aligned}
Das ist ein Exklusiv-ODER: Q_1 wechselt, wenn Q_0 = 1 ist. Die KNF führt zum selben Ergebnis, nur in der anderen Form: Q_1^+ = (Q_1 \vee Q_0)(\overline{Q_1} \vee \overline{Q_0}).
Q_2^+ vereinfachen
Q_2^+ ist 1 in den Zeilen 3, 4, 5, 6 und 11, 12, 13, 14. Die Zeilen mit Q_3 = 0 und Q_3 = 1 bilden jeweils Paare, die sich nur in Q_3 unterscheiden. Nach dem ersten Zusammenfassen bleiben vier Terme mit drei Variablen:
\begin{aligned} Q_2^+ &= \overline{Q_2}\,Q_1Q_0 \vee Q_2\overline{Q_1}\,\overline{Q_0} \vee Q_2\overline{Q_1}\,Q_0 \vee Q_2Q_1\overline{Q_0} && Q_3 \text{ entfällt} \\ &= \overline{Q_2}\,Q_1Q_0 \vee Q_2\overline{Q_1} \vee Q_2Q_1\overline{Q_0} && \text{2. und 3. Term zusammenfassen} \\ &= \overline{Q_2}\,Q_1Q_0 \vee Q_2(\overline{Q_1} \vee Q_1\overline{Q_0}) && Q_2 \text{ ausklammern} \\ &= \overline{Q_2}\,Q_1Q_0 \vee Q_2(\overline{Q_1} \vee \overline{Q_0}) && \text{Hilfsregel} \\ &= Q_2\overline{Q_1} \vee Q_2\overline{Q_0} \vee \overline{Q_2}\,Q_1Q_0 \end{aligned}
Das klappt, verlangt aber schon Übersicht: Welche Terme passen zusammen, und in welcher Reihenfolge fasst man sie zusammen?
Q_3^+: Hier wird es mühsam
Q_3^+ ist 1 in den Zeilen 7 bis 14. Das sind wieder acht Minterme, aber diesmal hängen sie an allen vier Variablen: Sieben Terme haben Q_3 = 1 (alle außer 1111), einer hat Q_3 = 0. Um sie algebraisch zusammenzufassen, musst Du Terme mehrfach verwenden und mehrere Wege ausprobieren, bis kein Zusammenfassen mehr möglich ist. Dabei passieren leicht Fehler, und ob das Ergebnis wirklich minimal ist, siehst Du der Gleichung nicht an.
Was fehlt, ist ein Werkzeug, mit dem man auf einen Blick sieht, welche Terme sich nur in einer Variablen unterscheiden. Genau das leistet das KV-Diagramm.
Schritt 4: Die KV-Tafel
Die Idee
Das KV-Diagramm (Karnaugh-Veitch-Diagramm, auch KV-Tafel) ordnet die Zeilen einer Wertetabelle als Felder eines Rechtecks an. Edward W. Veitch stellte 1952 eine solche Tafel vor, Maurice Karnaugh verfeinerte sie 1953. Der Trick liegt in der Anordnung: Benachbarte Felder unterscheiden sich in genau einer Variablen. Zwei benachbarte Einsen lassen sich also immer mit der Regel „Zusammenfassen“ verschmelzen, und das sieht man sofort.
Damit das klappt, sind die Spalten- und Zeilenköpfe nicht in Dualreihenfolge (00, 01, 10, 11), sondern in Gray-Reihenfolge angeordnet: 00, 01, 11, 10. Beim Gray-Code ändert sich von einem Wert zum nächsten nur ein Bit (siehe Zahlensysteme und Codes), und zwar auch vom letzten zum ersten. Deshalb sind auch die Ränder benachbart: Die linke Spalte grenzt an die rechte, die obere Zeile an die untere.
Aufbau für zwei, drei und vier Variablen
Eine Funktion mit n Variablen hat 2^n Zeilen in der Wertetabelle und damit 2^n Felder im KV-Diagramm:
Zwei Variablen: 2 × 2 Felder, eine Variable an den Zeilen, eine an den Spalten.
Drei Variablen: 2 × 4 Felder, die Spalten tragen zwei Variablen in Gray-Reihenfolge.
Vier Variablen: 4 × 4 Felder, Zeilen und Spalten tragen je zwei Variablen in Gray-Reihenfolge.
Die kleine Zahl in jedem Feld ist die Feldnummer: der Dezimalwert der Eingangskombination, also die Zeilennummer der Wertetabelle. Wegen der Gray-Reihenfolge stehen die Nummern nicht der Reihe nach, sondern als 0, 1, 3, 2 in der ersten Zeile und 4, 5, 7, 6 in der zweiten; die dritte Zeile (11) beginnt mit 12, die vierte (10) mit 8. Wer diese Nummern einträgt, kann die Einsen aus der Wertetabelle sicher übertragen.
Unterschiedliche Schreibweisen
In Fachbüchern und Aufgaben begegnen Dir KV-Tafeln in mehreren Formen. Lass Dich davon nicht verunsichern, das Verfahren bleibt dasselbe:
Bitmuster im Kopf (Karnaugh-Schreibweise): Über den Spalten und vor den Zeilen stehen die Werte der Variablen, die Diagonale in der Ecke nennt die Variablen. Vorteil: Jedes Feld lässt sich direkt der Wertetabelle zuordnen.
Randbalken (Veitch-Schreibweise): Ein Balken am Rand markiert den Bereich, in dem eine Variable 1 ist; außerhalb des Balkens ist sie 0. Manchmal steht dort zusätzlich die negierte Variable. Vorteil: Ein Block, der genau unter einem Balken liegt, enthält die Variable unverändert; das liest man schnell ab.
Andere Reihenfolge der Variablen: Manche legen die höherwertigen Variablen an die Spalten statt an die Zeilen oder beginnen mit A statt mit D. Die Felder stehen dann an anderen Stellen. Das Ergebnis ist trotzdem dasselbe, solange Du beim Eintragen und beim Ablesen dieselbe Zuordnung verwendest. Deshalb lohnt es sich, die Feldnummern einzutragen.
In diesem Artikel stehen die höherwertigen Variablen an den Zeilen, die niederwertigen an den Spalten, Bitmuster im Kopf.
Vereinfachungsregeln
So liest Du aus einer ausgefüllten KV-Tafel die einfachste ODER-Verknüpfung von UND-Termen ab:
Nur Einsen zusammenfassen (später kommen die Don’t-Care-Felder X hinzu, siehe Schritt 8).
Ein Block ist ein Rechteck aus 1, 2, 4, 8 oder 16 Feldern, also einer Zweierpotenz. Drei oder sechs Felder sind kein Block, L-Formen und Diagonalen auch nicht.
Blöcke so groß wie möglich wählen: Je größer der Block, desto kürzer der Term.
So wenige Blöcke wie möglich, aber jede 1 muss in mindestens einem Block liegen. Blöcke dürfen sich überlappen (Idempotenz: eine 1 darf mehrfach verwendet werden).
Die Ränder sind benachbart: links mit rechts, oben mit unten. Auch die vier Ecken bilden einen Block.
Ablesen: Eine Variable, die im ganzen Block 1 ist, steht unverändert im Term; ist sie im ganzen Block 0, steht sie negiert; wechselt sie innerhalb des Blocks, entfällt sie. Ein Block aus 2^k Feldern liefert bei n Variablen einen Term mit n - k Variablen.
Alle Terme mit ODER verknüpfen.
Wer die KNF minimieren will, fasst nach denselben Regeln die Nullen zusammen und liest ODER-Terme ab, diesmal umgekehrt: Eine Variable, die im Block 1 ist, steht negiert im ODER-Term, eine Variable mit 0 unverändert. Die ODER-Terme werden mit UND verknüpft.
Über den Rand hinaus: die Tafel kopieren
Blöcke über die Ränder sind am Anfang schwer zu erkennen. Eine Hilfe: Stell Dir die Tafel nach oben, unten, links und rechts kopiert vor, wie Fliesen an einer Wand. Ein Block, der über den Rand reicht, wird in diesem erweiterten Bild ein ganz normales Rechteck.
Das Beispiel zeigt die Funktion Y mit den Einsen in den Feldern 0, 2, 3, 4, 6, 8, 10 und 11. Die Originaltafel steht umrahmt in der Mitte, rundherum die grauen Kopien:
Blau (\overline{D}\,\overline{A}): Die Spalten 00 und 10 sind über den linken Rand benachbart. Zusammen mit den Zeilen 00 und 01 entsteht ein Viererblock, in dem D = 0 und A = 0 ist.
Orange (\overline{C}\,\overline{A}): Die vier Ecken (Felder 0, 2, 8, 10) liegen in der erweiterten Tafel als 2 × 2-Quadrat zusammen. In allen vier Feldern ist C = 0 und A = 0.
Grün (\overline{C}\,B): Die Zeilen 00 und 10 sind über den oberen Rand benachbart, zusammen mit den Spalten 11 und 10 entsteht ein Viererblock mit C = 0 und B = 1.
Y = \overline{D}\,\overline{A} \vee \overline{C}\,\overline{A} \vee \overline{C}\,B
Aus acht Mintermen mit je vier Variablen sind drei Terme mit je zwei Variablen geworden. Mit etwas Übung brauchst Du die Kopien nicht mehr zu zeichnen. In der normalen Tafel kennzeichnet man Blöcke über den Rand als zum Rand hin offene Umrandungen, so wie in den folgenden Schritten.
Schritt 5: Die vier KV-Tafeln des Dualzählers
Jetzt übertragen wir die vier Spalten Q_3^+ bis Q_0^+ der Zustandsfolgetabelle in vier KV-Tafeln mit den Variablen Q_3Q_2 an den Zeilen und Q_1Q_0 an den Spalten. Die Feldnummer ist der Zählerstand vor der Flanke; im Feld steht das jeweilige Bit des Folgestands.
Q_0^+: Alle Einsen liegen in den Spalten Q_1Q_0 = 00 und 10. Über den Rand bilden sie einen Achterblock, in dem nur Q_0 = 0 konstant ist: Q_0^+ = \overline{Q_0}.
Q_1^+: zwei senkrechte Viererblöcke in den Spalten 01 und 10: Q_1^+ = Q_1\overline{Q_0} \vee \overline{Q_1}\,Q_0, dasselbe Ergebnis wie in Schritt 3.
Q_2^+: Ein Viererblock über den linken und rechten Rand (Q_2\overline{Q_0}), ein Viererblock links (Q_2\overline{Q_1}) und ein Zweierblock über den oberen und unteren Rand (\overline{Q_2}\,Q_1Q_0). Auch hier stimmt das Ergebnis mit der Rechnung aus Schritt 3 überein, aber der Weg ist viel kürzer.
Q_3^+: Drei Viererblöcke im unteren Bereich (Q_3\overline{Q_0}, Q_3\overline{Q_1}, Q_3\overline{Q_2}), die sich überlappen, und eine einzelne 1 im Feld 7, die keinen Nachbarn hat (\overline{Q_3}\,Q_2Q_1Q_0).
Damit sind alle vier Folgezustände vereinfacht:
\begin{aligned} Q_0^+ &= \overline{Q_0} \\ Q_1^+ &= Q_1\overline{Q_0} \vee \overline{Q_1}\,Q_0 \\ Q_2^+ &= Q_2\overline{Q_0} \vee Q_2\overline{Q_1} \vee \overline{Q_2}\,Q_1Q_0 \\ Q_3^+ &= Q_3\overline{Q_0} \vee Q_3\overline{Q_1} \vee Q_3\overline{Q_2} \vee \overline{Q_3}\,Q_2Q_1Q_0 \end{aligned}
Schritt 6: Von der Gleichung zum Flipflop
Das JK-Master-Slave-Flipflop
Die Gleichungen beschreiben, welcher Zustand nach der Taktflanke an den Ausgängen stehen soll. Gebaut wird der Zähler aber nicht aus Gattern allein, sondern aus Flipflops, deren Eingänge J und K beschaltet werden müssen. Dazu ein kurzer Blick auf das verwendete Flipflop:
Ein JK-Master-Slave-Flipflop besteht aus zwei hintereinandergeschalteten Speichern. Solange der Takt C = 1 ist, übernimmt der Master die Information von J und K, der Slave und damit der Ausgang Q bleiben unverändert. Mit der fallenden Taktflanke wird der Master gesperrt und der Slave übernimmt dessen Zustand an den Ausgang. Weil sich der Ausgang erst ändert, wenn die Eingänge schon gesperrt sind, können alle Flipflops eines Zählers die alten Ausgangswerte lesen und gleichzeitig umschalten, ohne sich gegenseitig zu stören.
Im Schaltzeichen nach DIN EN 60617-12 erkennst Du das Master-Slave-Prinzip am Zeichen für den verzögerten Ausgang (ein kleiner Winkel innen am Ausgang Q); der Takteingang C1 hat kein Dreieck, weil er nicht flankengesteuert ist. Beim klassischen JK-Master-Slave-Flipflop dürfen sich J und K während C = 1 nicht ändern, weil der Master sonst einen Zwischenzustand einfängt. Heute verwendet man oft taktflankengesteuerte JK-Flipflops wie in Flipflops. Für den Entwurf ist das egal: Beide haben dieselbe Wertetabelle und damit dieselbe Gleichung.
Charakteristische Gleichungen
Jede Flipflop-Art lässt sich durch eine Gleichung beschreiben, die den Folgezustand Q^+ aus den Eingängen und dem aktuellen Zustand Q berechnet, die charakteristische Gleichung. Sie folgt direkt aus der Wertetabelle des Flipflops (z. B. per DNF und KV-Tafel mit drei Variablen):
| Flipflop | Verhalten | charakteristische Gleichung |
|---|---|---|
| RS | setzen mit S, rücksetzen mit R, S = R = 1 unzulässig | Q^+ = S \vee \overline{R}\,Q (Bedingung SR = 0) |
| D | übernimmt D | Q^+ = D |
| T | kippt bei T = 1, hält bei T = 0 | Q^+ = T\overline{Q} \vee \overline{T}\,Q = T \oplus Q |
| JK | setzen mit J, rücksetzen mit K, kippen bei J = K = 1 | Q^+ = J\overline{Q} \vee \overline{K}\,Q |
Die JK-Gleichung liest sich so: Ist das Flipflop zurzeit 0 (\overline{Q}), entscheidet J, ob es auf 1 geht. Ist es zurzeit 1 (Q), bleibt es 1, solange K = 0 ist.
Koeffizientenvergleich
Jetzt kommt die entscheidende Idee: Wir bringen jede Folgezustandsgleichung aus Schritt 5 in dieselbe Form wie die charakteristische Gleichung des JK-Flipflops,
Q_i^+ = (\ldots)\cdot\overline{Q_i} \vee (\ldots)\cdot Q_i,
und vergleichen dann die Klammern, so wie man in der Mathematik die Koeffizienten zweier Polynome vergleicht. Was vor \overline{Q_i} steht, ist J_i; was vor Q_i steht, ist \overline{K_i}.
Flipflop 0:
Q_0^+ = \overline{Q_0} = 1 \cdot \overline{Q_0} \vee 0 \cdot Q_0 \quad\Rightarrow\quad J_0 = 1, \quad \overline{K_0} = 0 \;\Rightarrow\; K_0 = 1
Flipflop 1:
Q_1^+ = Q_0 \cdot \overline{Q_1} \vee \overline{Q_0} \cdot Q_1 \quad\Rightarrow\quad J_1 = Q_0, \quad \overline{K_1} = \overline{Q_0} \;\Rightarrow\; K_1 = Q_0
Flipflop 2: Die beiden Terme mit Q_2 werden ausgeklammert, danach hilft De Morgan:
Q_2^+ = Q_1Q_0 \cdot \overline{Q_2} \vee (\overline{Q_1} \vee \overline{Q_0}) \cdot Q_2 \quad\Rightarrow\quad J_2 = Q_1Q_0, \quad \overline{K_2} = \overline{Q_1} \vee \overline{Q_0} = \overline{Q_1Q_0} \;\Rightarrow\; K_2 = Q_1Q_0
Flipflop 3: genauso, mit drei Variablen:
Q_3^+ = Q_2Q_1Q_0 \cdot \overline{Q_3} \vee (\overline{Q_2} \vee \overline{Q_1} \vee \overline{Q_0}) \cdot Q_3 \quad\Rightarrow\quad J_3 = K_3 = Q_2Q_1Q_0
Ergebnis: Jedes Flipflop bekommt J = K, es arbeitet also als T-Flipflop. Es kippt genau dann, wenn alle niederwertigeren Stellen 1 sind, so wie beim schriftlichen Addieren der Übertrag weitergereicht wird.
Zwei Hinweise für andere Zähler:
Kommt in einem Term der Folgezustandsgleichung weder Q_i noch \overline{Q_i} vor, gehört er in beide Klammern. Du ergänzt ihn mit (\overline{Q_i} \vee Q_i) = 1 und multiplizierst aus. Ein Beispiel dafür folgt beim BCD-Zähler.
Mit D-Flipflops entfällt der Koeffizientenvergleich, weil D_i = Q_i^+ gilt. Dafür ist die Logik vor den Eingängen meist aufwendiger, beim Dualzähler etwa D_1 = Q_1 \oplus Q_0. Mit T-Flipflops gilt T_i = Q_i \oplus Q_i^+, beim Dualzähler T_i = UND aller niederwertigeren Stellen.
Schritt 7: Der verdrahtete Synchronzähler
Aus den Ansteuergleichungen ergibt sich die Schaltung:
J_0 = K_0 = 1 \qquad J_1 = K_1 = Q_0 \qquad J_2 = K_2 = Q_0Q_1 \qquad J_3 = K_3 = Q_0Q_1Q_2
Alle vier Takteingänge hängen am gemeinsamen Takt C, das macht den Zähler synchron.
An jedem Flipflop sind J und K miteinander verbunden.
-K5 bildet Q_0Q_1 für die dritte Stufe, -K6 bildet Q_0Q_1Q_2 für die vierte. Weil jedes UND-Glied seine Eingänge direkt von den Flipflops holt, spricht man von parallelem Übertrag. Man könnte -K6 auch aus dem Ausgang von -K5 und Q_2 bilden (serieller Übertrag): Das spart Eingänge, verlängert aber den Signalweg um eine Gatterlaufzeit.
Im Impulsdiagramm siehst Du den Unterschied zu Schritt 1: Alle vier Ausgänge schalten nach derselben Laufzeit, die Anzeige springt direkt von 7 auf 8.
Wie schnell darf der Takt sein?
Auch der Synchronzähler braucht Zeit, aber sie wächst nicht mehr mit der Stufenzahl. Nach einer Taktflanke müssen drei Dinge passieren, bevor die nächste Flanke kommen darf:
Die Flipflop-Ausgänge stellen sich ein: Laufzeit t_\mathrm{pd,FF}.
Die UND-Glieder bilden daraus die neuen Werte für J und K: Gatterlaufzeit t_\mathrm{pd,G} (beim seriellen Übertrag mehrere).
J und K müssen vor der nächsten Flanke eine Mindestzeit stabil anliegen: Vorbereitungszeit t_\mathrm{su} (setup time).
T_\mathrm{min} = t_\mathrm{pd,FF} + t_\mathrm{pd,G} + t_\mathrm{su} \qquad f_\mathrm{max} = \frac{1}{T_\mathrm{min}}
Beispiel mit angenommenen Werten t_\mathrm{pd,FF} = 15\ \mathrm{ns}, t_\mathrm{pd,G} = 10\ \mathrm{ns} und t_\mathrm{su} = 20\ \mathrm{ns}: T_\mathrm{min} = 45\ \mathrm{ns}, also f_\mathrm{max} = 1 / 45\ \mathrm{ns} \approx 22\ \mathrm{MHz}. Dazu kommt die Grenze aus dem Datenblatt des Flipflops selbst (f_\mathrm{max} bzw. Mindestdauer von High- und Low-Phase des Takts); es gilt der kleinere Wert. In der Praxis rechnest Du mit den Höchstwerten (max.) aus dem Datenblatt, nicht mit den typischen Werten.
Schritt 8: Der BCD-Zähler und die Don’t-Care-Felder
Pseudotetraden als Joker
Für eine Dezimalanzeige soll der Zähler nur von 0 bis 9 zählen und dann wieder bei 0 beginnen: ein BCD-Zähler (Dekadenzähler). Die Zustandsfolgetabelle hat zehn gültige Zeilen. Die Kombinationen 10 bis 15 heißen Pseudotetraden; sie kommen im Zählzyklus nicht vor.
| Stand | Q_3 | Q_2 | Q_1 | Q_0 | Q_3^+ | Q_2^+ | Q_1^+ | Q_0^+ | Folgestand |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 2 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 3 |
| 3 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 4 |
| 4 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 5 |
| 5 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 6 |
| 6 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 7 |
| 7 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 8 |
| 8 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 9 |
| 9 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 10 bis 15 | X | X | X | X | beliebig |
Was nach einer Pseudotetrade passieren soll, ist zunächst egal. Deshalb stehen dort keine festen Werte, sondern ein X (Don’t Care, „ist egal“). In der KV-Tafel ist ein X ein Joker: Du darfst ihn wie eine 1 in einen Block aufnehmen, wenn der Block dadurch größer wird, und ihn sonst wie eine 0 liegen lassen. Ein Block nur aus X-Feldern ist sinnlos, weil er keine 1 abdeckt.
Die X-Felder machen die Gleichungen deutlich kürzer als beim Dualzähler, vor allem bei Q_3^+:
\begin{aligned} Q_0^+ &= \overline{Q_0} \\ Q_1^+ &= Q_1\overline{Q_0} \vee \overline{Q_3}\,\overline{Q_1}\,Q_0 \\ Q_2^+ &= Q_2\overline{Q_0} \vee Q_2\overline{Q_1} \vee \overline{Q_2}\,Q_1Q_0 \\ Q_3^+ &= Q_3\overline{Q_0} \vee Q_2Q_1Q_0 \end{aligned}
Koeffizientenvergleich mit Don’t Care
Für Q_0, Q_1 und Q_2 funktioniert der Vergleich wie in Schritt 6:
Q_0^+ = 1 \cdot \overline{Q_0} \vee 0 \cdot Q_0 \Rightarrow J_0 = K_0 = 1
Q_1^+ = \overline{Q_3}\,Q_0 \cdot \overline{Q_1} \vee \overline{Q_0} \cdot Q_1 \Rightarrow J_1 = \overline{Q_3}\,Q_0, K_1 = Q_0
Q_2^+ wie beim Dualzähler: J_2 = K_2 = Q_1Q_0
Bei Q_3^+ fehlt im Term Q_2Q_1Q_0 die Variable Q_3. Er gehört deshalb in beide Klammern:
Q_3^+ = Q_3\overline{Q_0} \vee Q_2Q_1Q_0(\overline{Q_3} \vee Q_3) = Q_2Q_1Q_0 \cdot \overline{Q_3} \vee (\overline{Q_0} \vee Q_2Q_1Q_0) \cdot Q_3
Damit ist J_3 = Q_2Q_1Q_0 und \overline{K_3} = \overline{Q_0} \vee Q_2Q_1Q_0. Für K_3 zählen aber nur Zustände mit Q_3 = 1, und davon sind nur 8 und 9 gültig. In beiden ist Q_2 = Q_1 = 0, der Term Q_2Q_1Q_0 ist dort also immer 0. Es bleibt \overline{K_3} = \overline{Q_0}, also K_3 = Q_0.
Abkürzung direkt in der KV-Tafel: Für J_i brauchst Du nur die Hälfte der Tafel, in der Q_i = 0 ist; die andere Hälfte gilt für J_i als X. Für K_i fasst Du in der Hälfte mit Q_i = 1 die Nullen zusammen (dort soll das Flipflop zurückgesetzt werden), die andere Hälfte gilt als X. Bei K_3 liegen in der unteren Hälfte (Zeilen 11 und 10) nur eine 0 (Feld 9) und viele X; der Viererblock aus den Spalten Q_1Q_0 = 01 und 11 in dieser Hälfte (Felder 9, 11, 13, 15) ergibt direkt K_3 = Q_0.
Zusammengefasst:
J_0 = K_0 = 1 \qquad J_1 = \overline{Q_3}\,Q_0,\; K_1 = Q_0 \qquad J_2 = K_2 = Q_1Q_0 \qquad J_3 = Q_2Q_1Q_0,\; K_3 = Q_0
Integrierte synchrone Dekadenzähler wie der 74HC160 zählen genau diese Folge; sie bringen zusätzlich Laden, Rücksetzen und einen Übertragsausgang für die nächste Dezimalstelle mit.
Fangzustände prüfen
Die X-Felder haben wir beim Vereinfachen frei belegt. Was passiert, wenn der Zähler nach dem Einschalten oder durch eine Störung doch einmal in einer Pseudotetrade landet? Das musst Du mit den fertigen Ansteuergleichungen nachrechnen. Für den Zustand 10 (1010) etwa gilt J_0 = K_0 = 1 (kippt auf 1), J_1 = \overline{Q_3}\,Q_0 = 0 und K_1 = Q_0 = 0 (hält 1), J_2 = K_2 = 0 (hält 0), J_3 = 0 und K_3 = 0 (hält 1): Folgezustand 1011 = 11.
| Pseudotetrade | Folgezustand | danach |
|---|---|---|
10 (1010) |
11 (1011) |
4, weiter im Zählzyklus |
11 (1011) |
4 (0100) |
Zählzyklus |
12 (1100) |
13 (1101) |
4, weiter im Zählzyklus |
13 (1101) |
4 (0100) |
Zählzyklus |
14 (1110) |
15 (1111) |
0, weiter im Zählzyklus |
15 (1111) |
0 (0000) |
Zählzyklus |
Aus jeder Pseudotetrade findet der Zähler nach höchstens zwei Takten in den Zählzyklus zurück. Ein Zähler mit dieser Eigenschaft heißt selbststartend. Bleibt ein Entwurf dagegen in einer Schleife aus Pseudotetraden hängen (Fangzustand, z. B. 12 → 13 → 12 …), legst Du die betroffenen X-Felder gezielt auf 0 oder 1 fest und vereinfachst neu, oder Du sorgst mit einem Rücksetzimpuls beim Einschalten für einen definierten Startzustand.
Wie geht es weiter?
Das Entwurfsverfahren aus diesem Artikel funktioniert für jede Zustandsfolge: Rückwärtszähler, Zähler mit beliebigem Zählumfang, Zähler im Gray-Code oder Steuerungen mit wenigen Zuständen. Das Rezept bleibt immer gleich:
Zustandsfolgetabelle aufstellen, nicht benutzte Zustände als X kennzeichnen.
Je Flipflop eine KV-Tafel für den Folgezustand zeichnen und vereinfachen.
Folgezustandsgleichung in die Form der charakteristischen Gleichung bringen, Koeffizienten vergleichen.
Schaltung zeichnen, Fangzustände und höchste Taktfrequenz prüfen.
Üben kannst Du das mit den Übungsaufgaben zum Entwurf von Synchronzählern, unter anderem mit einem Gray-Code-Zähler, einem BCD-Zähler im Glixon-Code und Laufzeitberechnungen aus Datenblattauszügen.
Leitfragen
- Welche Falschwerte zeigt ein 4-Bit-Asynchronzähler beim Übergang von 7 auf 8, und warum?
Die Flipflops schalten nacheinander, jeweils um die Laufzeit verzögert: Erst fällt Q0 (Stand 6), dann Q1 (Stand 4), dann Q2 (Stand 0), zuletzt steigt Q3 (Stand 8). Für einige Nanosekunden stehen also 6, 4 und 0 an den Ausgängen. siehe Abschnitt „Schritt 1: Das Problem des Asynchronzählers“
- Was steht in einer Zustandsfolgetabelle?
Für jeden Zustand der Flipflops vor der Taktflanke steht dort der Zustand nach der Taktflanke. Jede Spalte des Folgezustands ist eine eigene Wertetabelle mit den Flipflop-Ausgängen als Eingängen. siehe Abschnitt „Schritt 2: Die Zustandsfolgetabelle“
- Wie stellst Du DNF und KNF auf, und wann ist welche Form kürzer?
Für die DNF bildest Du aus jeder Zeile mit Ausgang 1 einen Minterm (UND-Term mit allen Variablen, bei 0 negiert) und verknüpfst sie mit ODER. Für die KNF bildest Du aus jeder Zeile mit Ausgang 0 einen Maxterm (ODER-Term mit allen Variablen, bei 1 negiert) und verknüpfst sie mit UND. Die DNF ist kürzer, wenn es wenige Einsen gibt, die KNF bei wenigen Nullen. siehe Abschnitt „Schritt 3: Funktionsgleichungen über DNF und KNF“
- Warum stehen die Köpfe einer KV-Tafel in der Reihenfolge 00, 01, 11, 10?
In dieser Gray-Reihenfolge unterscheiden sich benachbarte Felder in genau einer Variablen, auch über die Ränder hinweg. Benachbarte Einsen lassen sich deshalb immer zu einem kürzeren Term zusammenfassen. siehe Abschnitt „Schritt 4: Die KV-Tafel“
- Welche Regeln gelten für Blöcke in einer KV-Tafel?
Blöcke sind Rechtecke aus 1, 2, 4, 8 oder 16 Feldern, enthalten nur Einsen (und X), sollen so groß und so wenige wie möglich sein, dürfen sich überlappen und über die Ränder reichen; die vier Ecken sind benachbart. Variablen, die im Block wechseln, entfallen. siehe Abschnitt „Vereinfachungsregeln“
- Wie lauten die charakteristischen Gleichungen von RS-, D-, T- und JK-Flipflop?
D-Flipflop: Q^+ = D. T-Flipflop: Q^+ = T\overline{Q} \vee \overline{T}\,Q = T \oplus Q. JK-Flipflop: Q^+ = J\overline{Q} \vee \overline{K}\,Q. RS-Flipflop: Q^+ = S \vee \overline{R}\,Q mit SR = 0. siehe Abschnitt „Charakteristische Gleichungen“
- Wie gewinnst Du aus einer Folgezustandsgleichung die Ansteuerung von J und K?
Du bringst die Gleichung in die Form Q_i^+ = (\ldots)\,\overline{Q_i} \vee (\ldots)\,Q_i, Terme ohne Q_i kommen in beide Klammern. Die Klammer vor \overline{Q_i} ist J_i, die Klammer vor Q_i ist \overline{K_i} (Koeffizientenvergleich mit Q^+ = J\overline{Q} \vee \overline{K}\,Q). siehe Abschnitt „Koeffizientenvergleich“
- Was sind Don’t-Care-Felder, und warum musst Du beim BCD-Zähler die Pseudotetraden prüfen?
Don’t-Care-Felder (X) gehören zu Zuständen, die im Zählzyklus nicht vorkommen; Du darfst sie in Blöcke einbeziehen, wenn diese dadurch größer werden. Weil dabei die Folgezustände der Pseudotetraden festgelegt werden, prüfst Du mit den fertigen Gleichungen, ob der Zähler aus jeder Pseudotetrade in den Zählzyklus zurückfindet und nicht in einem Fangzustand hängen bleibt. siehe Abschnitt „Fangzustände prüfen“
Links und weitere Informationen
zum Nachschlagen: Wikipedia: Karnaugh-Veitch-Diagramm
zum Vertiefen mit vielen Beispielen: Wikibooks: Karnaugh-Veitch-Diagramm
Grundlagen der Schaltalgebra: Logische Verknüpfungen: Grundgatter, Wahrheitstabelle, Schaltalgebra und Impulsdiagramm
Flipflops und Zählerarten: Flipflops und Zähler, Frequenzteiler und Schieberegister
Gray-Code und BCD-Code: Zahlensysteme und Codes
Hinweis zur Nachnutzung als Open Educational Resource (OER)
Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Synchronzähler entwerfen: Wertetabelle, DNF und KNF, KV-Diagramm und JK-Flipflops” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/synchronzaehler veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/elektrotechnik/digitaltechnik. Erstellt mit KI-Assistenz; von mir umfassend redaktionell überarbeitet, geprüft und freigegeben. Stand: 13.11.2026.
[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]
