← Zurück zum BlogSequentielle Logik

SR- vs. JK-Flipflops: Die Grundlagen der sequentiellen Logik

Das JK-Flipflop ersetzt die verbotene Eingangskombination des SR-Latches durch den Toggle-Betrieb bei J = K = 1. Vergleichen Sie beide Schaltungen, leiten Sie Anregungstabellen her und bauen Sie daraus Zähler auf.

DennyDenny
10 Min. Lesezeit
Chalkboard feature illustration for “SR- vs. JK-Flipflops: Die Grundlagen der sequentiellen Logik”

Kurz gesagt: Das SR-Latch ist das einfachste Speicherelement, besitzt jedoch einen verbotenen Zustand, wenn beide Eingänge 1 sind. Das JK-Flipflop löst dies, indem es J=K=1 als Umschalten neu definiert, interne Rückkopplung verwendet (S=J⋅Q‾S = J\cdot\overline{Q}, R=K⋅QR = K\cdot Q) und mit einem Master-Slave-Takt Race-Around-Oszillation verhindert.

Kombinatorische Schaltungen – Addierer, Multiplexer – erzeugen Ausgänge allein aus aktuellen Eingängen. Sequentielle Logik fügt Speicher hinzu: Ein Flipflop hält seinen Zustand über Taktzyklen hinweg. Dieser Leitfaden vergleicht die beiden grundlegenden sequentiellen Komponenten – das SR-Latch und das JK-Flipflop – und zeigt, wie das JK-Design den kritischen Fehler des SR beseitigt.

Kombinatorische vs. sequentielle Logik

Kombinatorische Schaltungen wie Addierer und Multiplexer erzeugen Ausgänge, die nach der Signallaufzeit von ihren aktuellen Eingangswerten bestimmt werden. Physische Eingänge müssen immer auf gültige Pegel getrieben werden; „kein Eingang“ ist keine besondere Operation und ein schwebender Eingang ist elektrisch undefiniert.

Sequentielle Schaltungen fügen eine entscheidende Eigenschaft hinzu: Zustand. Ihre Ausgänge hängen nicht nur von den aktuellen Eingängen ab, sondern auch von deren Vorgeschichte – sie haben Speicher. Ein Flipflop kann im Zustand Q=0 oder Q=1 sein und hält diesen Zustand, bis ihm ausdrücklich mitgeteilt wird, ihn zu ändern. Das macht Berechnung möglich: Ohne Zustand gäbe es keine Register, keine Zähler, keine Programmzähler und keine CPUs.

Das SR-Latch: Wo Speicher beginnt

Das SR-Latch (Set-Reset-Latch) ist das einfachste Speicherelement und wird aus zwei kreuzgekoppelten NOR- (oder NAND-)Gattern aufgebaut. Es hat zwei Eingänge – S (Set) und R (Reset) – und zwei komplementäre Ausgänge: Q und Q‾\overline{Q}.

NOR-basiertes SR-Latch mit kreuzgekoppelten Gattern und Wahrheitstabelle

Wahrheitstabelle des SR-Latches

SRQ (nächster)Aktion
00Q (unverändert)Halten (Speicher)
010Reset (Löschen)
101Set (1 speichern)
11?UNGÜLTIG (verboten)

Charakteristische Gleichung des SR-Latches

Das Verhalten wird formal beschrieben durch:

Qnext=S+R‾⋅Q(constraint: S⋅R=0)Q_{next} = S + \overline{R} \cdot Q \quad \text{(constraint: } S \cdot R = 0\text{)}

Die Bedingung S⋅R=0S \cdot R = 0 ist die grundlegende Schwäche des SR-Latches: Die Gleichung gilt nur, wenn S und R nicht beide „1“ sind. Wird diese Bedingung verletzt, entsteht der verbotene Zustand – beide Ausgänge gehen auf „0“, und der Endzustand beim Loslassen ist eine nichtdeterministische Rennbedingung.

Demonstrationsvorlage für das SR-Latch

Warum der verbotene Zustand gefährlich ist

Bei S=R=1 werden beide NOR-Gatter gezwungen, „0“ auszugeben, also Q = Q‾\overline{Q} = 0 – ein logischer Widerspruch. Kehren beide Eingänge gleichzeitig zu „0“ zurück, konkurrieren beide Gatter darum, „1“ auszugeben. Der Gewinner hängt von Unterschieden im Nanosekundenbereich bei Signallaufzeit, Temperatur und Fertigungstoleranzen ab. Das Ergebnis ist unvorhersehbar, und im schlimmsten Fall kann der Ausgang in einen metastabilen Zustand geraten – eine Zwischen­spannung, die weder eine gültige „0“ noch eine gültige „1“ ist.

Das JK-Flipflop: Die vollständige Lösung

Das JK-Flipflop stellt sich dem verbotenen Zustand des SR-Latches direkt. Statt die Bedingung J=K=1J=K=1 undefiniert zu lassen, definiert das JK-Design sie als Toggle neu: Der Ausgang invertiert an jeder Taktflanke. Diese einzelne Neuerung verwandelt ein fehlerhaftes Speicherelement in das vielseitigste Flipflop des Digitalentwurfs.

Master-Slave-JK-Flipflop mit Oszilloskop

Wahrheitstabelle des JK-Flipflops

JKQ (nächster)Aktion
00Q (unverändert)Halten
010Reset
101Set
11Q‾\overline{Q} (invertiert)Toggle

Charakteristische Gleichung des JK-Flipflops

Qnext=(J⋅Q‾)+(K‾⋅Q)Q_{next} = (J \cdot \overline{Q}) + (\overline{K} \cdot Q)

Die Rückkopplung macht Set- und Reset-Anforderungen für einen gegebenen aktuellen Zustand wechselseitig ausschließend: Q‾\overline{Q} sperrt den J-Term und QQ den K-Term. Das beseitigt die verbotene SR-Eingangskombination. Rückkopplung allein verhindert nicht Race-Around in einem pegelempfindlichen JK-Entwurf; Master-Slave- oder flankengesteuertes Timing begrenzt das Bauteil auf einen nach außen sichtbaren Übergang pro Abtastereignis.

JK-Flipflop-Lektion

Die Master-Slave-Architektur

Frühe JK-Entwürfe waren pegelgesteuert und führten die Race-Around-Bedingung ein: War der Taktimpuls lange genug High, konnte der umgeschaltete Ausgang zurückkoppeln und innerhalb desselben Impulses ein weiteres Umschalten verursachen, was zu unkontrollierter Oszillation führte.

Die Lösung ist die Master-Slave-Architektur, die zwei SR-Latches in Reihe verwendet:

  1. Master-Latch: Erfasst den Eingang, während der Takt HIGH ist. Sein Ausgang ist vom Slave isoliert.
  2. Slave-Latch: Erfasst den Ausgang des Masters, wenn der Takt auf LOW wechselt. Dann ändert sich der externe Q-Ausgang tatsächlich.

Da Master und Slave niemals gleichzeitig transparent sind, kann sich der Ausgang pro Taktzyklus nur einmal ändern. Moderne Implementierungen erreichen denselben Effekt effizienter durch Flankentriggerung, doch das Master-Slave-Konzept erklärt, warum das JK-Flipflop einen Takt benötigt und warum es gegen das Race-Around-Problem immun ist.

Die Race-Around-Bedingung: Ein tieferer Blick

Die Race-Around-Bedingung verdient besondere Aufmerksamkeit, weil sie zeigt, warum die Taktstrategie so wichtig ist.

In einem einfachen pegelgesteuerten JK-Latch mit J=K=1 (Toggle-Modus) lautet die Folge:

  1. Der Takt wird HIGH. Der Ausgang schaltet von 0 auf 1.
  2. Der neue Ausgang (Q=1) wird zu den Eingangsgattern zurückgekoppelt.
  3. Der Takt ist weiterhin HIGH. Die Gatterlogik sieht den neuen Zustand und schaltet erneut: Q wechselt von 1 auf 0.
  4. Dieser Zyklus wiederholt sich, solange der Takt HIGH bleibt.

Der Ausgang oszilliert mit der durch die Gatter bestimmten Signallaufzeitfrequenz – er wird im Wesentlichen zu einem Ringoszillator. Der Endzustand beim Abfallen des Takts hängt von der exakten Impulsbreite relativ zur Gatterverzögerung ab und ist damit nichtdeterministisch.

Flankengesteuerte JK-Flipflops (wie sie in digisim.io verwendet werden) beseitigen dies vollständig. Das Flipflop tastet J und K nur im Moment der Taktflanke ab. Bis der Ausgang umschaltet und zurückkoppelt, ist das Abtastfenster bereits geschlossen.

Anregungstabellen: Mit Flipflops entwerfen

Beim Entwurf sequentieller Schaltungen, etwa von Zählern oder Zustandsautomaten, leiten Sie aus den gewünschten Zustandsübergängen rückwärts die erforderlichen Eingänge ab. Hierfür sind Anregungstabellen unverzichtbar.

Anregungstabelle des SR-Latches

QQ (aktuell)QnextQ_{next} (gewünscht)SR
000X
0110
1001
11X0

(X = Don’t care)

Anregungstabelle des JK-Flipflops

QQ (aktuell)QnextQ_{next} (gewünscht)JK
000X
011X
10X1
11X0

Beachten Sie die zahlreichen Don’t-Care-Bedingungen in der JK-Anregungstabelle. Jeder Übergang enthält eine Don’t-Care-Bedingung, während die SR-Tabelle weniger Freiheitsgrade bietet und weiterhin S⋅R=0S \cdot R = 0 erfüllen muss. Diese zusätzlichen Don’t-Cares ermöglichen eine weitergehende boolesche Vereinfachung der kombinatorischen Ansteuerlogik und können die erforderliche Gatteranzahl reduzieren.

Umfassender Vergleich

MerkmalSR-LatchJK-Flipflop
EingängeS (Set), R (Reset)J, K, Takt
S=R=1 / J=K=1Ungültig (Rennbedingung)Toggle (wohldefiniert)
TriggerungPegelempfindlich (asynchron)Flankengesteuert (synchron)
Takt erforderlich?Nein (grundlegendes SR-Latch)Ja
Charakteristische GleichungQnext=S+R‾⋅QQ_{next} = S + \overline{R} \cdot QQnext=JQ‾+K‾QQ_{next} = J\overline{Q} + \overline{K}Q
Verbotener ZustandVorhanden (S=R=1)Beseitigt
Don’t-cares in der AnregungstabelleWenigerMehr (bessere Optimierung)
Race-Around-RisikoN/A (kein Takt)Durch Flankentriggerung beseitigt
ImplementierungsgrößeZwei kreuzgekoppelte Gatter für das Kern-LatchImplementierungsabhängig; Master-Slave- und flankengesteuerte Formen benötigen zusätzlichen Speicher und Gating
Primäre AnwendungsfälleHalten von Steuerzustand, Entprellen von SchalternZähler und Lehre zum Entwurf von Zustandsmaschinen
Kann andere Flipflop-Typen bauen?EingeschränktJa (universell)

Flankentriggerung: Die Rolle des Takts

Moderne Flipflops sind flankengesteuert – sie ändern ihren Zustand nur im genauen Moment einer Taktflanke. Das unterscheidet sie grundlegend vom pegelempfindlichen SR-Latch, das jederzeit auf Eingänge reagiert.

Flankengesteuertes D-Flipflop mit Oszilloskop

Flankentriggerung bietet drei entscheidende Garantien:

  1. Definiertes Abtastereignis: Eingänge werden an der angegebenen Flanke erfasst, wenn Setup- und Hold-Bedingungen eingehalten sind.
  2. Zeitliche Filterung: Ein Datenglitch, der das Abtastfenster nicht überlappt, wird nicht erfasst; Taktglitches und Datenänderungen nahe der Flanke bleiben Gefahren.
  3. Komponierbarkeit: Mehrere Flipflops können einen Takt teilen und sich nach ihren jeweiligen Clock-to-Q-Verzögerungen aktualisieren; das ermöglicht koordinierten Mehrbit-Zustand.

Umwandlung zwischen SR und JK

Da das JK-Flipflop als „universell“ gilt, kann es andere Flipflop-Typen nachbilden. Diese Umwandlungen zu verstehen, vertieft das Verständnis beider Komponenten.

SR-zu-JK-Umwandlung: Fügen Sie UND-Gatter hinzu, die Q und Q‾\overline{Q} zurückkoppeln:

  • S=J⋅Q‾S = J \cdot \overline{Q}
  • R=K⋅QR = K \cdot Q

Die Rückkopplung stellt sicher, dass bei J=K=1 nur S oder R aktiv ist, abhängig vom aktuellen Zustand. So entsteht Toggle-Verhalten, während der verbotene SR-Zustand strukturell verhindert wird.

JK-zu-D-Umwandlung: Verbinden Sie D mit J und D‾\overline{D} mit K.

JK-zu-T-Umwandlung: Verbinden Sie J und K zu einem gemeinsamen T-Eingang.

Zähler bauen: Die charakteristische Anwendung des JK-Flipflops

Bei J = K = 1 wechselt das JK-Flipflop an jeder wirksamen Taktflanke seinen Zustand und eignet sich damit als Baustein für Binärzähler. Schalten Sie vier JK-Flipflops so in Reihe, dass der Q-Ausgang jeder Stufe den Takteingang der Folgestufe ansteuert; daraus entsteht ein asynchroner 4-Bit-Zähler (Ripple Counter), der die Zustände 0000 bis 1111 durchläuft.

Ripple-Zähler (asynchron)

In einem Ripple-Zähler treibt der Q-Ausgang jedes Flipflops den Takteingang des nächsten. Der Zählwert „wogt“ durch die Kette, weil jede Stufe die nächste auslöst:

  • FF0 schaltet bei jeder Systemtaktflanke um (Frequenz = f/2f/2).
  • FF1 schaltet bei jedem FF0-Übergang um (Frequenz = f/4f/4).
  • FF2 schaltet bei jedem FF1-Übergang um (Frequenz = f/8f/8).
  • FF3 schaltet bei jedem FF2-Übergang um (Frequenz = f/16f/16).

Die Ausgänge Q3 Q2 Q1 Q0 bilden eine 4-Bit-Binärzahl, die in jedem Taktzyklus um 1 wächst. Der Nachteil ist, dass jede Stufe eine Signallaufzeit hinzufügt, sodass höherwertige Bits später stabil werden als niederwertige. Für einen kurzen Moment nach jeder Taktflanke kann der Zählerausgang einen vorübergehend falschen Wert anzeigen. In Hochgeschwindigkeitsanwendungen kann diese Ripple-Verzögerung problematisch sein; daher werden synchrone Zähler bevorzugt, bei denen alle Flipflops denselben Takt teilen.

Synchroner Zähler

In einem synchronen Zähler teilen alle Flipflops den Systemtakt. Die J- und K-Eingänge jedes Flipflops werden von kombinatorischer Logik aus dem aktuellen Zustand angesteuert. Für einen synchronen 3-Bit-Aufwärtszähler:

  • FF0: J0=K0=1 (schaltet immer um)
  • FF1: J1=K1=Q0 (schaltet nur um, wenn Q0=1)
  • FF2: J2=K2=Q0 ⋅\cdot Q1 (schaltet nur um, wenn sowohl Q0 als auch Q1 1 sind)

Alle Stufen tasten dieselbe Taktflanke ab und beseitigen damit die Takt-durch-Stufe-Ripple-Abhängigkeit. Die Ausgänge haben weiterhin Clock-to-Q-Verzögerung, die kombinatorische Freigabelogik hat Verzögerung, und verschiedene Bits müssen sich physisch nicht genau gleichzeitig ändern.

T-Flipflop-Frequenzteiler

Lektion zum asynchronen Zähler

Vorlage für ein flankengesteuertes D-Flipflop

Entwurfsbeispiel: Die Anregungstabelle verwenden

Um den praktischen Wert von Anregungstabellen zu veranschaulichen, betrachten wir den Entwurf eines einfachen 2-Bit-Zählers, der 0, 1, 2, 3, 0, 1, … mit JK-Flipflops zählt.

Schritt 1: Zustandstabelle. Liste für jede Kombination den aktuellen und den gewünschten nächsten Zustand auf.

Aktuelles Q1Aktuelles Q0Nächstes Q1Nächstes Q0
0001
0110
1011
1100

Schritt 2: Die Anregungstabelle anwenden. Bestimmen Sie für jedes Flipflop die erforderlichen J- und K-Eingänge.

Für FF0 (Q0) lauten die Übergänge 0->1, 1->0, 0->1, 1->0. Laut JK-Anregungstabelle gilt in allen Fällen J0=1, K0=1. Also J0=K0=1 – FF0 schaltet immer um.

Für FF1 (Q1) lauten die Übergänge 0->0, 0->1, 1->1, 1->0. Laut Anregungstabelle gilt J1=0/K1=X, J1=1/K1=X, J1=X/K1=0, J1=X/K1=1. Aus einer Karnaugh-Map folgt J1=Q0 und K1=Q0.

Ergebnis: Ein synchroner 2-Bit-Zähler benötigt J0=K0=1 und J1=K1=Q0. Über die Flipflops selbst und eine einzelne Leitung von Q0 zu den J- und K-Eingängen von FF1 hinaus sind keine zusätzlichen Gatter erforderlich. Die vielen Don’t-cares machen diese Minimierung einfach – ein unmittelbarer Vorteil von JK gegenüber SR.

Zusammenfassung der Anwendungen

AnwendungKomponenteWarum
Entprellen von SchalternSR-LatchEinfach, kein Takt erforderlich, erster Kontakt setzt den Zustand
SRAM-KonzeptKreuzgekoppelte bistabile RückkopplungDichtes SRAM verwendet üblicherweise kreuzgekoppelte Inverter plus Zugriffstransistoren, kein gekapseltes SR-Latch
BinärzählerJK-FlipflopToggle-Modus zählt natürlich
FrequenzteilerJK- oder T-FlipflopJede Stufe teilt den Takt durch 2
Zustandsmaschinen (FSMs)JK-FlipflopDon’t-care-Bedingungen vereinfachen Logik
CPU-RegisterD-FlipflopEinfachste Datenerfassung, kein verbotener Zustand
SchieberegisterD-FlipflopSerielle Datenbewegung zwischen Stufen

Praktische Übungen

Experimentiere mit diesen Schaltungen auf digisim.io:

  1. SR-Latch: Bauen Sie es aus zwei NOR-Gattern auf und prüfen Sie alle vier Eingangskombinationen. Beobachten Sie die verbotene Eingangskombination sorgfältig.
  2. JK-Toggle-Betrieb: Verdrahten Sie J = K = 1 mit einem Taktsignal und beobachten Sie am Oszilloskop, wie Q an jeder wirksamen Flanke umschaltet.
  3. Asynchroner 3-Bit-Zähler: Schalten Sie drei JK-Flipflops im Toggle-Betrieb in Reihe. Verbinden Sie die Q-Ausgänge mit dem Oszilloskop und beobachten Sie das binäre Zählmuster.
  4. SR-zu-JK-Umwandlung: Bauen Sie ein JK-Flipflop aus einem SR-Latch, zwei UND-Gattern und einem Taktsignal auf. Bestätigen Sie, dass J = K = 1 einen definierten Zustandswechsel anstelle der verbotenen Eingangskombination bewirkt.
  5. Übung zur Anregungstabelle: Entwerfen Sie einen Modulo-6-Zähler mit JK-Flipflops. Verwenden Sie die Anregungstabelle, um die J- und K-Eingangslogik für jedes Flipflop herzuleiten.

Lesen Sie Zähler und Zustandsautomaten, um vollständige FSMs aus diesen Grundelementen aufzubauen, oder öffnen Sie die D-Flipflop-Referenz zum synchronen Speicherelement, das üblicherweise in Registern eingesetzt wird.

Machen Sie aus der Idee eine funktionierende Schaltung.