![]() |
DigitaltechnikProf. Jürgen Plate |
Die Speicherelemente werden in der Digitaltechnik durch Baugruppen realisiert, die zwei stabile Ausgangszustände kennen → bistabile Kippstufen → Flipflops. Sie sollen ihren Ausgangszustand von "1" auf "0" oder von "0" auf "1" nur dann ändern, wenn eine bestimmte Eingangs-Signalkombination auftritt. Diese Information bleibt erhalten, bis sie durch eine bestimmte andere Eingangskombination wieder umgeschaltet wird. Das Flipflop ist also ein digitaler Speicher, dessen beide stabilen Zustände von außen einstellbar sind. Flipflops eignen sich zum Schalten, Zählen, Speichern und Teilen von Frequenzen. Es gibt unterschiedliche Arten von Flipflops, die alle aus einen Basisflipflop und einen Schaltnetz zur Ansteuerung bestehen. Wiederholende Zusammenfassung:
Nachdem die Rückkopplungssignale einen stabilen Wert angenommen haben und sich die Eingänge nicht ändern, werden auch die Ausgänge einen stabilen Wert annehmen:
Prinzipiell unterscheidet man zwischen synchronen und asynchronen Schaltwerken:
Synchrone Schaltwerke werden dann nochmals unterteilt (wird im folgenden Semester behandelt);, der Einfachheit halber soll hier aber nur ein bestimmter Typ betrachtet werden, der sogenannte Moore-Automat, bei dem
Dabei gilt:
Bei der Beschreibung von Schaltwerken muss der momentane Zustand, von dem die Werte der Ausgangsvariablen abhängen, mit eingehen. Weiterhin muss der jeweilige Folgezustand ersichtlich sein.
Ein einfaches Beispiel für ein Schaltwerk ist ein Gerät mit einer Fernbedienung mittels Ein/Aus-Taste:
Eingangsvariable: Ein/Aus-Taste T
Zustände: Gerät eingeschaltet, Gerät ausgeschaltet
Ausgangsvariable: Stromversorgung S
Die Funktion dieser Schaltung kann man mit einer Tabelle festlegen:
Die Aussage der Tabelle kann man mit einem Graphen (Zustandsfolgediagramm, Bubble-Diagramm) anschaulicher darstellen:
Wenn man die beiden Zustände "Gerät ausgeschaltet" und "Gerät eingeschaltet" des obigen Beispielse durch die (willkürlich gewählten) Werte 0 bzw. 1 einer Zustandsvariablen Q ersetzt, kann man die "Zustandsfolgetabelle" erstellen, aus der man die Ausgangs- und übergangsfunktion entnehmen kann:
T = 0 bzw. T = 1 entspricht hierbei "Taste nicht gedrückt" bzw. "Taste gedrückt",
S = 0 bzw. S = 1 entspricht "Stromversorgung aus" bzw. "Stromversorgung ein".
Der Graph sieht dann in vereinfachter Form wie folgt aus, wobei Graph und Tabelle ineinander übergeführt werden können, sie sind also gleichwertig.
Durch Anwenden des Theorems von de Morgan können statt des ODER- und des UND-Gatters zwei NOR-Gatter verwendet werden. Durch Umzeichen und Umbenennen erhält man die typische Darstellung eines Setz-/Rücksetz-Flipflops (SR-FF):
Das RS-Flipflop (Rücksetz-/Setz-FF, synonym zu SR-FF) bildet das einfachste Basis-Flipflop. Für das SR-FF werden die Eingänge mit "S" (Setzen) und "R" (Rücksetzen) sowie der Ausgang mit "Q" bezeichnet. Es gilt dann:
S | R | Q | Schaltzeichen |
---|---|---|---|
0 | 0 | Speichern | ![]() |
1 | 0 | 1, Setzen | |
0 | 1 | 0, Rücksetzen | |
1 | 1 | Verboten |
Funktionsgleichung, "charakteristische Gleichung": Qt+1 = S ∨ (Qt ∧ ¬R)
Nach dem gleichen Schema kann man auch mit NAND-Gattern ein RS-FF aufbauen, das gegenüber dem RS-FF mit NOR-Gattern invertierte Eingangssignale aufweist. Auch hier zeigt sich wieder die Dualität.
S | R | Q | ![]() |
---|---|---|---|
1 | 1 | Speichern | |
0 | 1 | 1, Setzen | |
1 | 0 | 0, Rücksetzen | |
0 | 0 | Verboten |
Probleme des RS-FF sind:
Das SR-FF eingnet sich u.a. vorzüglich zur Entprellung von Kontakten. Schalter oder Taster "prellen", d. h. der Schalter schließt nicht auf einmal, sondern durch mechanische Bewegungen der Konstruktion öffnet und schliesst der Schalter mehrmal in kurzen Abständen. Im Bild ist dies die mit "Eingang" bezeichnete Kurve. Gewünscht ist das darunter gezeichnete Verhalten.
Dazu wird ein NAND-FF eingesetzt (active Low). Ein Umschalt-Taster legt jeweils einen der Eingänge auf "0" und erzeugt damit eine Reihe von Setz- oder Rücksetzimpulse. Das Kontaktprellen des Taster hat eine Reihe von Setz- bzw. Rücksetzimpulse zur Folge. Am Ausgang des FF erscheint der gewünschte saubere Impuls.
Beispiel: Motorsteuerung
Durch zwei Taster (T1 und T2) soll ein Motor auf Rechtslauf bzw.
Linkslauf geschaltet werden. Ein dritter Taster (T3) dient zum
Anhalten des Motors. Um Schäden am Getriebe zu vermeiden, soll
eine digitale Verknüpfung verhindern, dass von Rechts- uns Linkslauf
umgeschaltet werden soll, während der Motor läuft. Es gilt also:
Setzeingang rechts = T1 * !Ql Setzeingang links = T2 * !Qr
Das Basisflipflop übernimmt eine anliegende Eingangsinformation sofort und speichert sie, d.h. sie wirkt sich unmittelbar aus. Solche Flipflops bezeichnet man als "nicht taktgesteuerte Flipflops. Zu den nicht taktgesteuerten Flipflops gehört auch das bereits ausführlich behandelte RS-Flipflop.
Die Realisierung erfolgt durch UND-Verknüpfung der Eingänge R und S mit dem Takteingang:
C | S | R | Q | Schaltzeichen |
---|---|---|---|---|
0 | 0 | 0 | Q-1 (speichern) | ![]() |
0 | 0 | 1 | Q-1 (speichern) | |
0 | 1 | 0 | Q-1 (speichern) | |
0 | 1 | 1 | Q-1 (speichern) | |
1 | 0 | 0 | Q-1 (speichern) | |
1 | 0 | 1 | 0 (Rücksetzen) | |
1 | 1 | 0 | 1 (Setzen) | |
1 | 1 | 1 | Verboten! |
Durch einen zusätzlichen Takt-Eingang wird dem FF die Arbeits- und Ruhezeit zugeteilt. Dadurch übernimmt das FF als Speicherelement die Information nur zu einem bestimmten Zeitpunkt, wobei diese dann bis zur nächsten änderung an den Ausgängen stabil anliegt. Der Takt bestimmt auch, wann die an den Eingängen anliegende Information das FF beeinflußt.
Das D-FF kann als taktzustandsgesteuerte Sonderform des RS-FF aufgefaßt werden, bei der der "Verbotene" Zustand nicht mehr auftreten kann. Der R-Eingang hat immer den invertierten Wert des S-Eingangs. Der verbotene bzw. nicht definierte Zustand S = R = 1 des RS-Flip-Flops wird damit verhindert.
Der Zustand "Speichern" (S = R = 0) kann nun natürlich auch nicht mehr auftreten, der Takteingang bestimmt nun alleine, wann die Information am D-Eingang übernommen wird. Die Wahrheitstabelle verkürzt sich für die Bedingungen: S = D und R = ~D zu:
1D | C1 | Q | Q-1 | Schaltzeichen |
---|---|---|---|---|
0 | 0 | Q | Q-1 | ![]() |
1 | 0 | Q | Q-1 | |
0 | 1 | 0 | 1 | |
1 | 1 | 1 | 0 |
Die charakteristische Gleichung lautet: Q+1 = D ∧ Q ∨ D = D
Das Zustandsdiagramm für die Taktzustandssteuerung ist entspechende einfach:
Das D-FF ermöglicht z. B. Verzögerungen um eine Taktperiode. Durch "Parallelschalten" mehrerer D-FFs mit gemeinsamer Taktleitung kann man einen Speicher für Binärworte beliebiger Wortbreite realisieren, einen solchen Speicher nennt man dann Register (siehe später).
Der Unterschied zwischen taktzustands- und taktflankengesteuerten Flipflops wird in der englischsprachigen Literatur durch die Begriffe latch und flipflop zum Ausdruck gebracht. Bisher ist nur die erste Gruppe behandelt worden. Komponenten mit Taktflankensteuerung haben trotz ihrer offenbaren ähnlichkeit ein sehr differenziertes Verhalten. Deshalb soll der Unterschied an einem vergleichenden Beispiel erläutert werden, bevor nach dem nun folgenden JK-Flipflop auf die Taktflankensteuerung genauer eingegangen wird:
Wie man deutlich sieht, folgt das Ausgangssignal bei der Zustandssteuerung dem Eingangsignal, solange der Takteingang auf "1" liegt. Bei der Flankensteuerung wird dagegen der Eingangswert zu einem genau definierten Zeitpunkt übernommen.
Die logischen Eingänge dieses neuen Flipflop-Typs ersetzen die Eingänge R und S und werden als "J" und "K" bezeichnet (von engl. "J" = jump, "K" = kill). Das Flipflop wird demzufolge JK-Flipflop genannt. Es ist ein Universal-Flipflop und kombiniert die Eigenschaften des RS-Flipflops mit denen des T-Flipflops. Die beiden Eingänge "J" und "K" werden auch als Vorbereitungseingänge bezeichnet, weil durch deren Beschaltung das Verhalten des Flipflops bestimmt wird. Es kann durch die Erweiterung eines taktfrankengesteuerten RS-Flipflops mit zwei UND-Gattern erzeugt werden.
Im Normalfall verhält sich das JK-Flipflop wie ein RS-Flipflop, d. h. 1-Pegel am Eingang J bedeutet Setzen, 1-Pegel an K bedeutet Zurücksetzen und J und K auf 0-Pegel bedeutet Speichern. Setz man J und K auf "1", führt dies zum Kippen in den anderen stabilen Zustand. Schaltet man also den J- und den K-Eingang eines JK-Flipflops auf 1-Pegel, so verhält es sich wie ein T-Flipflop.
J | K | Qn+1 | Schaltzeichen |
---|---|---|---|
0 | 0 | Qn | ![]() |
1 | 0 | 1 | |
0 | 1 | 0 | |
1 | 1 | ¬Qn |
Die charakteristische Gleichung lautet dann: Q+1 = (¬K ∧ Q) ∨ (J ∧ ¬Q)
Die Zustandsübergänge zeigt die folgende Grafik:
In der praktischen Anwendung ist insbesondere das Wechseln des Ausgangswertes
von Bedeutung. Neben der Funktionstabelle ist gerade in Verbindung mit dieser
Betriebsart die sogenannte übergangstabelle des JK-Flipflops sehr nützlich:
Q → Q+1 | J | K | Funktion | Term (*) | Abkürzung |
0 → 0 | 0 | X | not jump | J ∧ ¬Q | (K) |
0 → 1 | 1 | X | jump | J ∧ ¬Q | J(K) |
1 → 0 | X | 1 | kill | ¬K ∧ Q | K(J) |
1 → 1 | X | 0 | not kill | ¬K ∧ Q | (J) |
(*) für den übergang verantwortlicher Term aus der Funktionsgleichung.
Da mit der neuen Funktion "Wechsel" (toggle) ein einmaliges Umschalten der FF-Ausgangswerte verbunden ist, führt der Einsatz einer Taktpegelsteuerung zu Problemen. Die obige Wahrheitstafel des JK-Flipflops geht von einem Verknüpfungsnetz aus, bei dem die Signaleingänge während einer Taktperiode stabil bleiben. In der hier gegebenen Schaltung ändern sich aber die Eingangssignale, falls die Ausgangssignale sich ändern.
Wenn beispielsweise J = K = "1" und Q = "0" sind, wird beim Anlegen des Taktimpulses Q = "1". Diese Signaländerung tritt nach Verstreichen der hardwarebedingten Verzögerungszeit t ein. Die neue Situation lautet nun J = K = "1" und Q = "1". Ist der Takteingang weiterhin "1", wiederholt sich der Vorgang; es findet ein ständiger Wechsel zwischen den beiden genannten Zuständen statt → das Ausgangssignal Q oszilliert zwischen "0" und "1":
Dieser Vorgang wird auch als "race-around" bezeichnet. Er kann nur dadurch vermieden werden, wenns statt der Taktzustandssteuerung eine Steuerung mit Taktflanken vorgenommen wird (die kurz im Vergleich zur FF-Durchlaufzeit t sind).
Durch die folgende Schaltung wird aus einem 0-1-Wechsel ein kurzer Nadelimpuls erzeugt, der nur die Dauer einer Gatterlaufzeit (ca. 10 Nanosekunden) hat (oberes Bild). Wenn statt des UND-Gatters ein EXOR-Gatter verwendet wird, bekommt man sogar beim 0-1- und beim 1-0-Übergang einen Nadelimpuls.
Der Takt ist nun kein statischer Pegel mehr, sondern eine dynamische Flanke. Die Info liegt dafür etwas "verzögert" am Ausgang an. Die Realisierung erfolgt durch Sperren der Eingänge nach Veränderung des Ausgangs. Es gibt flankengesteuerte RS- und D-Flipflops, das in der Praxis häufigste flankengesteuerte FF ist jedoch das JK-FF.
Die dynamischen Zustandsänderungen lassen sich weiter in eine Reaktion bei ansteigender Flanke oder abfallender Flanke untergliedern. Bei Flip-Flops die auf eine Zustandsänderung bei steigender Flanke reagieren, wird das Eingangssignal wie folgt am Baustein angezeichnet:
Das (ein)flankengesteuerte RS-Flipflop übernimmt die Eingangsdaten je nach Typ bei der positiven oder negativen Flanke des Taktsignals. In der internen Verschaltung des Bausteins erreicht man die Flankentriggerung im allgemeinen dadurch, dass die Eingänge nach dem Wirken gesperrt werden.
Für die folgenden Betrachtungen ist ein Blick auf einen Taktimpuls nötig. Er setzt sich zusammen aus einer steigenden (positiven) Flanke, einer Zeit in der ein 1-Pegel angenommen wird und einer fallenden (negativen) Flanke:
Bis auf den abgeänderten Takteingang entspricht das einflankengesteuerte RS-Flipflop direkt dem taktzustandsgesteuerten RS-Flipflop. Reagiert der Baustein auf die negative Taktflanke, ist im Schaltzeichen vor dem Takteingang eine Negation eingezeichnet.
Das von der Funktion her bereits bekannte D-Flipflop übernimmt bei Flankensteuerung das Datenbit bei einer Flanke des Taktsignals. Bis auf den abgeänderten Takteingang entspricht es dem taktzustandsgesteuerten D-Flipflop. Oft wird ein Flipflop benötigt, das bei jedem Impuls in den anderen stabilen Zustand kippt, also ein Frequenzteiler durch 2 (Toggle-Flipflop). Dies läßt sich realisieren, indem man bei einem flankengesteuerten D-Flipflop den Ausgang Q auf den D-Eingang zurückkoppelt. So wird bei jeder Taktflanke das Inverse des vorherigen Zustands eingespeichert.
Das Zeitdiagramm zeigt, dass nun das gewünschte Verhalten vorliegt: die Umschaltung erfolgt nur bei steigender Flanke und somit zu einem definierten Zeitpunkt. Je nach den Werten von J und K wird das Flipflop gesetzt, rückgesetzt oder getoggelt.
Das flankengetriggerte T-Flipflop läßt sich recht einfach aus dem JK-Flipflop ableiten. Es müssen nur die Anschlüsse J und K auf "1" gesetzt werden.
Auf ähnliche Weise kann auch ein flankengetriggertes E-Flipflop realisiert werden.
Beispiel: Änderungsdetektor
Der folgende synchrone Änderungsdetektor mit flankengetriggerten D-Flipflops
liefert einen taktsynchronen Ausgangsimpuls, wenn sich der Eingang ändert.
Das Verhalten der Schaltung wird durch das Impulsdiagramm verdeutlicht.
Beispiel: Logikprüfstift
Dieser Prüfstift zeigt nicht nur 1- und 0-Pegel an, wie sie bei
statischen Schaltnetzen vorkommen, sondern auch Impulse (z. B. auf der
Taktleitung).
Die "0"- und "1"-Anzeige ist wohl jedem klar. Je nach Eingangspegel leichtet einer der beiden LEDs. Für die Anzeige von Impulsen ist das D-Flipflop als Toggle-Flipflop geschaltet (Rückführung von ¬Q auf D) und wechselt seinen Ausgangszustand bei jedem Signalwechsel am Eingang.
Bei einem statischen Eingangssignal leuchtet somit eine der oberen beiden LEDs ("0" oder "1") und eine der beiden unteren LEDs (egal welche). Bei einem Rechtecksignal am Eingang toggelt das D-Flipflop ständig und beide gelben LEDs leuchten etwa halbhell. Natürlich leuchten auch die rote und grüne LED. An deren Helligkeit kann man sogar grob auf das Tastverhältnis schließen.
| ![]() |
Die Funktionsweise dieses Flipflops kann in vier Phasen aufgeteilt werden:
Die zeitliche Steuerung kann auch bei MS-Flipflops auf zwei Arten erfolgen:
Das zweiflankengesteuerte JK-Flipflop, auch "Master-Slave-JK-Flipflop" genannt, ist die gebräuchlichste Form der zweiflankengesteuerten Flipflops. Der "Master" ist ein RS-Flipflop, der "Slave" ein RS-Flipflop, da die Ausgänge des Masters ja sowieso nie gleichzeitig H-Pegel führen können. Der Unterschied zum einflankengesteuerten JK-Flipflop liegt darin, dass mit der steigenden Taktflanke die Eingangsinformation in den Master übernommen wird und das Ausgangssignal erst nach der negativen Taktflanke erscheint. Das folgende Bild zeigt das Schaltsymbol und schematisch die Realisierung:
Aus dem Impulsdiagramm wird deutlich, dass die änderung am Ausgang um den Taktflankenwechsel verzögert geschieht. Die Verzögerung beträgt eine Impulsbreite des Taktes, da das Ausgabe JK-FF (Slave) mit der invertierten Flanke des Eingabe Flip-Flops (Master) angesteuert wird. Am Beispiel eines flankengetriggerten JK-MS-Flipflops soll das Impulsdiagramm Aufschluß über die Funktion geben. Bei gekennzeichnet-negiertem Takt wird also mit der positiven Taktflanke in den Master eingelesen und mit der negativen Taktflanke ausgegeben:
Neben den dynamischen Eingängen (R, S, J, K usw.) haben Flipflops häufig weitere Eingänge, darunter:
| ![]() |
Beispiel: Realisierung von T- und JK-Flipflop mit D-Flipflop
Die jeweilige Funktion ergibt sich, indem man dem D-Eingang ein Schaltnetz
vorordnet, das der übertragungsfunktion des gewünschten Flipflop-Typs
entspricht.
Aufstellen des Zustandsdiagramms und Wahl der Zustandscodierung
Da es vier Zustände gibt, erfolgt die Codierung als 2-bit Vektor (z1, z0)
→ 2 Flipflops nötig. Die Codierung der Zustände sei, willkürlich gewählt,
die Folgende:
Anzeige | Q1 Q2 | ![]() | |
---|---|---|---|
rot | → | 0 0 | |
rot/gelb | → | 0 1 | |
gelb | → | 1 0 | |
grün | → | 1 1 |
Als Flipflops werden JK-Flipflops verwendet. Nun erfolgt die Übertragen des Graphen in eine Zustandsfolgetabelle:
Zustand | Q1 | Q0 | R | GE | GR | Q1+ | Q0+ | J1 | K1 | J0 | K0 |
---|---|---|---|---|---|---|---|---|---|---|---|
rot | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | X | 1 | X |
rot/gelb | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | X | X | 0 |
gelb | 1 | 0 | 0 | 1 | 0 | 0 | 0 | X | 1 | 0 | X |
grün | 1 | 1 | 0 | 0 | 1 | 1 | 0 | X | 0 | X | 1 |
Die Felder mit "X" beruhen auf der Tatsache, dass es zwei Möglichkeiten gibt, das gewünschte Ergebnis zu erreichen. So kann z. B. der Wechsel von 0 → 1 durch J = 1 und K = 0 (set) ebenso erreicht werden wie durch J = 1 und K = 1 (toggle), was bedeutet, dass K = 0 oder K = 1 sein darf → X. Diese Fälle wurden weiter oben in einer Übergangstabelle zusammengefasst, die hier nochmals verkürzt wiedergegeben wird:
Q | Q+ | J | K |
---|---|---|---|
0 | 0 | 0 | X |
0 | 1 | 1 | X |
1 | 0 | X | 1 |
1 | 1 | X | 0 |
Zurück zur Lösung der Ampel-Aufgabe. Nun müssen die Anregungsfunktionen für die vorgesehenen JK-Flipflops ermittelt werden. Es gibt insgesamt vier Anregungsfunktionen für J1, K1, J0 und K0; die Abhängigkeiten von Q1 und Q0 können der Tabelle entnommen werden. Das Minimieren der Ausgangs- und Anregungsfunktionen fällt hier leicht, die Werte sind einfach aus der Tabelle abzulesen:
J1 = ¬Q1 ∧ Q0
K1 = Q1 ∧ ¬Q0
J0 = ¬Q1 ∧ ¬Q0 = ¬(Q1 ∨ Q0)
K0 = Q1 ∧ Q0
R = J0 ∨ J1
GE = J1 ∨ K1
GR = K0
Zeichnen des Logikdiagramms:
Anmerkung: Wie man sieht, wird fast immer eine UND-Verknüpfung an den Eingängen J und K benötigt. Handelsübliche JK-Flipflops haben daher oft schon UND-Gatter integriert, so dass bei diesen Bausteinen tatsächlich oft nur eine Verdrahtung notwendig ist.
Einen kleinen Schönheitsfehler hat die Schaltung aber noch: Alle Ampelphasen sind gleich lang → Verbesserung der Schaltung notwendig. Unkonventioneller Ansatz: Der Pegel von GE sorgt für die Umschaltung des Taktgenerators auf eine höhere Taktfrequenz, z. B. von 0,01 Hz auf 0,3 Hz.
Ihrer Funktion entsprechend können Register unterschieden werden:
Dateneingang | Datenausgang | Funktion | Beispiel (8 Bit) |
---|---|---|---|
seriell | seriell | SISO | ![]() |
Anwendung: FIFO-Speicher (first-in-first-out), Multiplikation bzw. Division mit dem Faktor 2 | |||
seriell | parallel | SIPO | ![]() |
Anwendung: Umwandlung serielles Datenformat in paralleles Datenformat | |||
parallel | seriell | PISO | ![]() |
Anwendung: Umwandlung paralleles Datenformat in serielles Datenformat | |||
parallel | parallel | PIPO | ![]() |
Anwendung: Register zum reinen Zwischenspeichern, z. B. Akkumulator | |||
Beispiel für ein Register: IC 7495A, 4-Bit-Universalregister
Das Universalregister 7495A kann Daten von den 4 Eingängen A, B, C, D parallel übernehmen und
im Register vorhandene Daten nach rechts verschieben; hierbei wird der Wert, der am seriellen
Eingang (SI, Serial Input) anliegt, nachgezogen.
Die jeweilige Betriebsart wird durch ein Mode-Control-Signal (Mode, MC) festgelegt:
Zeitdiagramm:
T1 = minimale Zeitspanne zwischen stabilem Mode-Control-Signal und negativer Taktflanke von Clk1/Clk2.
Das Impulsdiagramm und die Wahrheitstabelle eines solchen Schieberegisters sehen beispielsweise folgendermaßen aus:
Takt | DA | QA | QB | QC | QD |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 | 0 |
3 | 0 | 0 | 1 | 0 | 0 |
4 | 0 | 0 | 0 | 1 | 0 |
5 | 0 | 0 | 0 | 0 | 1 |
6 | 0 | 0 | 0 | 0 | 0 |
Solche Register nennt man Schieberegister. Zur Realisierung von Schieberegistern können im Prinzip alle behandelten Flipflop-Arten eingesetzt werden. Häufig zur Anwendung kommen insbesondere die D- und JK-Flipflops (pegel- oder flankengesteuert). Vollständige Schieberegister benötigen, wie das oben gezeigte Universalregister, weitere Steuereingänge:
s1 | s0 | Funktion |
---|---|---|
ohne Funktion | ||
paralleles Laden | ||
Rechtsschieben | ||
Linksschieben |
Alle diese Möglichkeiten sind beispielsweise im Schieberegister-Baustein 74LS194 realisiert:
Für die Grafik und die folgende Wahrheitstabelle gelten folgende Bedingungen:
Die Wiedergabe der komplexen Innenschaltung ist normalerweise nicht nötig, um die Arbeitsweise zu verstehen und das Schieberegister anwenden zu können. Deshalb haben komplexe Bausteine auch wieder ein (Block-)Schaltzeichen - nicht nur das gezeigte Schieberegister, sondern auch andere Register, Zähler usw. Oben im Schaltzeichen befindet sich ein Steuerblock und darunter der eigentliche Registerblock.
Durch Rückführung des letzten Flipflop-Ausgangs auf den Eingang des ersten Flipflops kann ein Ring-Schieberegister erzeugt werden in dem die eingestellten Zustände geschoben werden. Der Zustand des letzten Flipflops würde dann das erste Flipflop erneut setzen.
Beispiel: Ein Schieberegister kann auch als Impulsfolgegenerator für Pseudo-Zufallszahlen eingesetzt werden. Durch eine geeignete Rückkopplung über ein oder mehrere EXOR-Gatter erzeugt das Scheiberegister eine scheinbar zufällige Folge von "0" und "1" am Ausgang (Pseudo-Zufallsfolge). Nach spätestens 2n - 1 Takten erscheint jedoch die gleiche Bitfolge wieder. Die Wahl der Rückkopplung erfolgt so, dass die Pseudo-Zufallsfolge möglichst lang ist. Man kann solch ein Schieberegister u. a. nutzen um über einen nachgeschalteten Digital-Analog-Wandler ein Rauschsignal für Messzwecke zu erzeugen - oder auch einen digitalen "Glühwürmchensimulator".
Es ergeben sich folgende Funktionen:
Mit der vorgestellten RALU lassen sich Addition, Subtraktion und bitweise Logikfunktionen durchführen. Die in einem Schritt durchgeführte Operation wird vollständig durch das Steuerwort (S0 ... Sn) bestimmt (siehe auch Kapitel 6). In den folgenden Beispielen wird nur ein Bit des Steuerwortes, S0, verwendet, das den Operanden invertiert, wenn es auf 1 gesetzt ist.
Beispiel: Addition zweier Operanden: Z = X + Y
1. X → RE; 0 + <RE> = <RE> → ACC S0 C0 GA GB DT 0 0 0 1 0 2. Y → RE; <ACC> + <RE> → RA S0 C0 GA GB DT 0 0 1 1 1Beispiel: Subtraktion zweier Operanden: Z = X - Y (für Zweierkomplement wird C0 gesetzt)
1. X → RE; 0 + <RE> = <RE> → ACC S0 C0 GA GB DT 0 0 0 1 0 2. Y → RE; <ACC> - <RE> → RA S0 C0 GA GB DT 1 1 1 1 1
Ergänzungen zur Register-ALU
Der Inhalt des Statusregisters wirkt auf die Ablaufsteuerung bei der Befehlsbearbeitung eines Computers ein.
Zu Beginn dieses Kapitels über Schaltwerke wurde schon unterschieden in
Eine sequentielle Schaltung, die beim Einlesen von Eingagspulsen eine festgelegte Folge von Zuständen durchläuft, nennt man Zähler. Die Eingangssignale können sowohl Taktimpulse als auch Signalimpulse sein. Man unterscheidet Zähler nach der funktionalen Arbeitsweise in asynchrone und synchrone Zähler. Der asynchrone Zähler wird beispielswesie die die zu beliebigen Zeiten auftretenden 0-1-übergänge aufsummieren. Der synchrone Zähler wird dagegen die Anzahl der Pulse eines regelmäßigen Taktsignals aufsummieren. Bezüglich der Kodierung kann man Zähler unterteilen in:
Zähler-Schaltungen lassen sich besonders gut mit Zustandsgraphen beschreiben, der jeweilige Zählerstand eignet sich bestens als Zustandsnummer. Das folgende Bild zeigt den Zustandsgraphen eines Modulo-Zehn-Zählers (BCD-Zähler). Die Knoten enthalten die Zählerzustände, und die Kanten geben die möglichen Zustandsübergänge an.
Takt | Q1 | Q2 | Q3 | Takt | Q1 | Q2 | Q3 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 4 | 1 | 0 | 0 |
1 | 0 | 0 | 1 | 5 | 1 | 0 | 1 |
2 | 0 | 1 | 0 | 6 | 1 | 1 | 0 |
3 | 0 | 1 | 1 | 7 | 1 | 1 | 1 |
Genauer: Taktimpuls 0 zeigt den Anfangszustand, der Rest der Tabelle den Zustand der Ausgänge nach dem jeweiligen Taktimpuls. Im unteren Teil des Bildes ist der Signalverlauf des Binärzählers gezeigt.
Der vorgestellte Zähler ist ein asynchroner serieller Zähler. Der vom Eingangstakt ausgelöste Zustandswechsel am ersten Flipflop pflanzt sich von Flipflop zu Flipflop fort (ripple counter). Das Zählen beruht hier auf dem Prinzip der Frequenzteilung. Ein zusätzlicher Reset-Eingang kann den Zähler jederzeit in den Anfangszustand versetzen, was bei Schaltwerken generell wünschenswert ist.
Der Nachteil des asynchronen Zählers liegt darin, dass bei Verwendung realer Bauteile in jedem Flipflop Laufzeitverzögerungen entstehen, die sich von Stufe zu Stufe summieren. Das hat zur Folge, dass beim Zustandswechsel nicht alle Flipflop-Ausgänge exakt zum selben Zeitpunkt umschalten. Es entstehen so für sehr kurze Zeit "illegale" Ausgangskombinationen, die gegebenenfalls Störungen im Gesamtsystem hervorrufen können. Solche Störimpulse mit einer Dauer von einigen 10 ns lassen sich auch nicht ganz leicht messtechnisch erfassen. Trotzdem eigen sich asynchrone Zähler vorzüglich als Frequenzteiler und ähnliche Aufgaben. Um beispielsweise aus der Netzfrequenz von 50 Hz einen Sekundentakt für eine Digitaluhr zu gewinnen, kann man einen asynchronen Mod-50-Zähler verwenden.
Um Zählerschaltungen zu realisieren werden oftmals JK-Flip-Flops eingesetzt, da diese durch die besondere Beschaltung der Eingänge (J = K = "1") und vorgegebenem Takt beginnen zu toggeln. Das folgende Beispiel verwendet einen 4-Bit-Zähler, um ihn zu einem BCD-Zähler bzw. einen Teiler durch 10 auszubauen. Die Ausgangskombination Q3 = 1, Q2 = 0, Q1 = 1 und Q0 = 0 setzt den Zähler zurück. Auch hier entsteht für einige 10 ns eine "10" am Ausgang, bevor die "0" als korrekter Nachfolger der "9" erscheint. Wenn aber z. B. nur der ¬Q4-Ausgang als Takt verwendet wird, gibt es keine Probleme. Auch bei einer Digitaluhr wäre die Anzeige der "10" viel zu kurz, um wahrgenommen zu werden.
Asynchrone BCD-Zähler sind als handelsübliche Bausteine fertig erhältlich. Mit sechs von solchen Zählern, wobei zwei davon als Modulo-6-Zähler und einer als Modulo-2-Zähler geschaltet sind kann man dann eine Digitaluhr bauen. Bei der machen dann auch kleine "Glitches" im Nanosekundenbereich nichts aus:
Beim Modulo-8-Zähler im Bild weiter oben ist jeweils der invertierende Ausgang eines Flipflops mit dem Takteingang des folgenden verbunden. Wenn man stattdessen den Q-Ausgang jeweils mit der Folgestufe verbindet, wird rückwärts gezählt. Schaltet man nun zwischen die einzelnen Flipflops einen Multiplexer, kann die Zählrichtig umgeschaltet werden - je nachdem welcher Ausgang einer Stufe mit dem folgenden Takteingang verbunden wird.
Aufstellen der KV-Diagramme
Für jedes Ausgangssignal Q+ wird nun ein KV-Diagramm erstellt und daraus die
minimale Form ermittelt. Diese Gleichung wird dann mit der charakteristischen Gleichung
des jeweiligen Flipflop-Typs verglichen. Bei diesem Vergleich ergibt sich nun das Signal
für die Flipflop-Eingänge.
Gleichung für QA+:
Aus dem KV-Diagramm ergibt sich QA+ = ¬QA.
Diese Gleichung wird nun mit der charakteristischen Gleichung für ein JK-Flipflop
verglichen:
Q+ = (J ∧ ¬Q) ∨ (¬K ∧ Q)
QA+ = ¬QA
Auf den ersten Blick haben beide Gleichungen nichts gemeinsam. Es stellt sich die Frage, wie man von ¬QA auf (J ∧ ¬QA) kommt. Zieht man die Theoreme zu Rate kann man ¬QA erweitern zu (1 ∧ ¬QA). Hieraus folgt, dass J = 1 sein muss!
In der charakteristischen Gleichung haben wir auch noch den zweiten, ODER-verknüpften Term (¬K ∧ Q), der in der Gleichung für QA+ überhaupt nicht auftaucht. Demzufolge muss dieser Term gleich 0 sein (Theorem: X ∨ 0 = X). Dieser Term wird aber genau dann 0, wenn ¬K gleich 0 ist (Theorem: 0 ∧ X = 0). Hieraus folgt, dass K = ¬0 = 1 sein muss. Mit diesem Erkenntnissen bekommen wir eine Gleichung, die der charakteristischen Gleichung für ein JK-Flipflop entspricht und die Werte für JA und KA:
QA+ = (1 ∧ ¬QA) ∨ (0 ∧ QA)
JA = KA = 1
Gleichung für QB+:
Auf die gleiche Art und Weise wie oben nehmen wir uns den nächsten Kandidaten vor:
Aus dem KV-Diagramm ergibt sich QB+. Auch diese Gleichung wird
mit der charakteristischen Gleichung für ein JK-Flipflop verglichen:
Q+ = (J ∧ ¬Q) ∨ (¬K ∧ Q)
QB+ = (QA ∧ ¬QB)
∨ (¬QA ∧ QB)
Durch den Vergleich erkennt man nun sofort die Lösung J = QA und ¬K = ¬QA, woraus folgt, dass K = QA sein muss. Es gilt also:
QB+ = (QA∧ ¬QB)
∨ (¬QA ∧ QB)
JB = KB = QA
Gleichung für QC+:
Aus dem KV-Diagramm lässt sich nun die komplexeste der drei Gleichung ablesen: QC+ = (QA ∧ QB ∧ ¬QC) ∨ (¬QA ∧ QC) ∨ (¬QB ∧ QC). Mit Hilfe der Schaltalgebra lassen sich die letzten beiden Terme per Distributivgesetz zusammenfassen (QC ausklammern): (¬QA ∧ QC) ∨ (¬QB ∧ QC) = (¬QA ∨ ¬QB) ∧ QC. Und der erste Term bekommt nur noch eine Klammer, was insgesamt folgenden Ausdruck ergibt, der auch wieder mit der charakteristischen Gleichung für ein JK-Flipflop verglichen wird:
QC+ = [(QA ∧ QB) ∧ ¬QC]
∨ [(¬QA ∨ ¬QB) ∧ QC]
Q+ = (J ∧ ¬Q) ∨ (¬K ∧ Q)
Daraus ersieht man, dass J = (QA ∧ QB) und ¬K = (¬QA ∨ ¬QB) sein muss → K = ¬(¬QA ∨ ¬QB = QA ∧ QB (nach dem Theorem von DeMorgan). Damit erhalten wir das Endergebnis:
QC+ = [(QA ∧ QB) ∧ ¬QC]
∨ [(¬QA ∨ ¬QB) ∧ QC]
JC = KC = QA ∧ QB
Erstellen der Blockschaltung
Für den Schaltungsaufbau fassen wir nochmal zusammen:
JA = KA =1
JB = KB = QA
JC = KC = QA ∧ QB
Das führt dann zur folgenden Schaltung eines Modulo-8-Synchronzählers:
QA+: D | = ¬QA | = 1 ⊕ QA |
QB+: D | = (QA ∧ ¬QB) ∨ (¬QA ∧ QB) | = QA ⊕ QB |
QC+: D | = [(QA ∧ QB) ∧ ¬QC]
∨ [(¬QA ∨ ¬QB) ∧ QC] = [(QA ∧ QB) ∧ ¬QC] ∨ [¬(QA ∧ QB) ∧ QC] | = (QA ∧ QB) ⊕ QC |
Die Gleichungen, insbesondere die Umformung in einen Ausdruck mit Exklusiv-Oder zeigt eine Gesetzmäßigkeit. Wenn man den Zusammenhang zwischen J und K auf der einen Seite und D auf der anderen Seite nochmals zusammenfaßt, ergibt sich:
Flipflop | J = K | D |
---|---|---|
QA+ | 1 | 1 ⊕ QA |
QB+ | A | QA ⊕ QB |
QC+ | QA ∧ QB | (QA ∧ QB) ⊕ QC |
Die Ähnlichkeit zwischen den JK-Flipflops und den D-Flipflops ist unverkennbar. Bei letzteren kommt
immer eine Exklusiv-Oder-Verknüpfung mit dem Ausgang des jeweiligen Flipflops hinzu.
Es ergibt sich dann folgende Schaltung eines Modulo-8-Synchronzählers mit D-Flipflops:
Aufgabe: Würde sich bei der Erweiterung auf einen 4-Bit-Zähler für das hinzukommende Flipflop die Anregungsfunktion (QA ∧ QB ∧ QC) ⊕ QD ergeben?
Zusammenfassung:
Aufstellen der Wahrheitstabelle
Ausgehend vom 8-4-2-1-Code wird die Wahrheitstabelle für einen Zähler
in diesem Code aufgestellt. Darin sind D, C, B und A die Ausgänge der vier
benötigten Flipflops vor dem Eintreffen eines Taktimpulses und D*, C*, B* und
A* dieselben Ausgänge nach dem Taktimpuls.
Dezimal | D | C | B | A | D* | C* | B* | A* | |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | |
1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | |
2 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | |
3 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | |
4 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | |
5 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | |
6 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | |
7 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | |
8 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | |
9 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
Für die Werte von K und J werden in diesem Beispiel die schon bekannten Abkürzungen verwendet (hier etwas verkürzt):
J | K | Qt+1 | Abk. | J | K | Qt+1 | Abk. |
---|---|---|---|---|---|---|---|
1 | X | 1 | J(K) | 0 | X | Qt | (K) |
X | 1 | 0 | K(J) | X | 0 | Qt | (J) |
Entwickeln der KV-Diagramme
Für jeden der vier Flipflop-Ausgänge D*, C*, B* und A* (nach dem Takt) wird
jetzt ein KV-Diagramm erstellt. Eingangsvariable sind dabei die Flipflop-Ausgänge
D, C, B und A vor dem Takt. Das folgende Bild zeigt diese vier Diagramme.
Im KV-Diagramm für die Ausgangsgröße D* korrespondiert die erste Zeile der Wahrheitstabelle für die Dezimalziffer 0 mit dem Feld, das in der linken Spalte und in der ersten Zeile liegt. Für dieses Feld ist D = 0, C = 0, B = 0 und A = 0. Nach der Wahrheitstabelle muss hier D* auf 0 gehalten werden. Dafür wird die definierte Abkürzung (K) verwendet. Ebenso wird mit den weiteren Zeilen der Wahrheitstabelle für die Dezimalziffern 1 bis 6 verfahren. Die Zeile der Wahrheitstabelle für die Dezimalziffer 7 korrespondiert mit dem Feld in der zweiten Zeile und der dritten Spalte von links im KV-Diagramm. Für dieses Feld ist D = 0, C = 1, B = 1 und A = 1. Hier soll also am Ausgang D* High-Pegel hergestellt werden. Wir tragen daher in dieses Feld die Abkürzung J (K) ein.
Bei der Dezimalziffer 8 muss Ausgang D* auf 1 gehalten werden. In das zugehörige Feld des KV-Diagramms, das sich links unten befindet, wird (J) eingetragen. Aus der letzten Zeile der Wahrheitstabelle, die für die Dezimalziffer 9 gilt, geht hervor, dass für Ausgang D* 0-Pegel hergestellt werden muss. In das zugehörige Feld des KV-Diagramms, letzte Zeile, zweite Spalte von links, wird K(J) eingetragen. Für sechs der sechzehn Felder des KV-Diagramms gibt es keine zugehörigen Zeilen der Wahrheitstabelle. Das sind die Pseudotetraden. Diese Felder können beliebige Zustände annehmen, und sie werden daher mit X ausgefüllt.
Für die Ausgangsgrößen C*, B* und A* werden auf die gleiche Weise die KV-Diagramme aufgestellt.
Gruppenbildung und Erstellen der Eingangsgleichungen
Wie bei der Berechnung statischer Verknüpfungen , werden auch hier die Felder der
KV-Diagramme zu möglichst großen Gruppen zusammengefaßt. Es gelten
hier dieselben Regeln:
Die Anzahl der zu einer Gruppe zusammengefaßten Felder muss 2k
sein, wobei k eine ganze Zahl > 0 ist, maximal aber gleich der Zahl der
Eingangsvariablen. Alle Felder einer Gruppe müssen benachbart sein.
Benachbart sind Felder, die sich nur in einer Eingangsvariablen unterscheiden, das
heißt, diese befinden sich nebeneinander in derselben Zeile
beziehungsweise untereinander in derselben Spalte.
Anders als bei KV-Diagrammen für statische Verknüpfungen müssen bei der Zählerberechnung mit JK-Flipflops zwei Arten von Gruppen gebildet werden:
JD = C · B · A
Die größtmögliche Gruppe um das mit K(J) bezeichnete Feld besteht aus acht Feldern. Sie ist mit einer durchgezogenen Linie umrahmt. Für diese Gruppe gilt A = 1, und die Eingangsvariablen D, B und C sind redundant. Die Gleichung dieser Gruppe, die die Beschaltung des K-Eingangs festlegt, lautet also
KD = A
In gleicher Weise werden jetzt die weiteren drei KV-Diagramme für die Ausgangsgrößen C*, B* und A* aufgestellt und aus den Gruppen die Eingangsgleichungen ermittelt. Das KV-Diagramm für die Ausgangsgröße A* enthält neben mit X bezeichneten Feldern nur solche mit der Bezeichnung J(K) oder K(J), das heißt, sowohl J als auch K dürfen in allen Feldern des Diagramms High sein. Demnach umfaßt die größtmögliche Gruppe für J und für K das ganze KV-Diagramm. Für diese Gruppe sind alle Eingangsvariablen redundant. Die Funktionsgleichung lautet daher
JA = KA = 1
Dieses Ergebnis hätte man auch schon aus der Wahrheitstabelle ablesen können. Der Flipflop-Ausgang A wechselt mit jedem Taktimpuls seinen Zustand. Das ist aber bei einem JK-Flipflop nur möglich, wenn beide Eingänge J und K 1-Potential haben.
Blockschaltbild
Das folgende Bild zeigt die aus den bisherigen Erkenntnissen resultierende Realisierung.
Da eine Vielzahl von Zählern angeboten wird, ist ein diskreter Aufbau aus Flipflops nur selten nötig. Anders verhält sich das bei synchronen Schaltwerken, die beliebige Ausgangskombinationen liefern sollen.
![]() |
![]() |
![]() |