Flip-Flops (H.Fesefeldt (cc) 2000)





Das Basis- Flip-Flop

Im vorliegenden Tutorial wollen wir uns mit den Flip-Flops der digitalen Elektronik beschäftigen. Alle digitalen IC- Familien können in zwei Gruppen unterteilt werden:
1. kombinatorische Schaltungen, bei denen logische Signale zeitunabhängig verknüpft werden. Beispiele sind die AND-, NAND-, OR-, NOR- Gatter.
2. sequentielle Schaltungen, bei denen die logischen Verknüpfungen zeitabhängig sind, d.h. das Signal am Ausgang hängt vom Signal am Ausgang vor der Umschaltung am Eingang ab. Das bekannteste Beispiel hierfür ist der Flip- Flop (Abkürzung: FF).
Der Basis- FF besteht aus zwei kreuzgekoppelten NAND- Gattern mit den statischen Eingängen S und R und den Ausgängen Q und Q. In den Java Applets werden wir den invertierten Zustand Q auch mit ~Q bezeichnen.



Statische Eingänge sind solche, bei denen der logische Zustand der Eingänge das Verhalten der Schaltung bestimmt. Im Gegensatz dazu stehen dynamische Eingänge, bei denen die Zustandsänderung das logische Verhalten bestimmt.

Das Basis- FF kann die folgenden 4 Eingangszustände haben:


In Abbildung a) liegen beide Eingänge an logischen 0- Pegeln. Da die NAND- Verknüpfung am Ausgang den 1- Pegel hat, wenn mindesten 1 Eingang den 0- Pegel hat, bekommen wir eine 1 an beiden Ausgängen. Da der Flip-Flop im allgemeinen gegensätzliche Zustände an den beiden Ausgängen haben sollte, muss dieser Zustand schaltungstechnisch vermieden werden. In Abbilldung b) und c) liegt an einem der Eingänge der 0- Pegel, am anderen der 1- Pegel. Wir sehen, dass jetzt am jeweils anderen Ausgang der 1- und 0- Pegel liegt. Am schwierigsten ist der Fall d), wo beide Eingänge den 1- Pegel führen. Hier kann sich sowohl Q=0 und Q=1 als auch Q=1 und Q=0 einstellen. War der FF vorher schon in einem 1 0 oder 0 1 Ausgangszustand, so wird sich hieran nichts ändern. Die Funktionstabelle ist im folgenden angegeben. Das Basis- FF wird in der Praxis als Speicherzelle benutzt. Mit S (Set) wird ein Bit gesetzt, mit R (Reset) kann es wieder gelöscht werden.

S  R  Q   Q  
0011irregulär
0110
1001
11Q Q keine Änderung


Sie können die Funktionsweise des Basis- FF in unserem ersten Java- Applet nachvollziehen. Das Applet besteht aus zwei Toolbars, links eine Toolbar mit den logischen Bauelementen, die Sie je nach Bedarf in das Hauptfenster ziehen können. Bei den Schaltern unterscheiden wir zwischen dem Toggle, der entweder ausgeschaltet oder eingeschaltet ist. Der PuschOn- Schalter ist grundsätzlich ausgeschaltet, und ist nur bei gedrückter Maustaste eingeschaltet. Umgekehrt ist der PuschOff- Schalter grundsätzlich eingeschaltet und ist nur bei gedrückter Maustaste ausgeschaltet. Sie können Bauelemente aus der Schaltung entfernen, indem Sie diese entweder in die Toolbar zurückziehen, oder aber das Bauelement anklicken und dann mit der Schere in der oberen Toolbar ausschneiden. Man kann auch ganze Bereiche der Schaltung mit der Schere entfernen. Die Verdrahtung erfolgt durch Ziehen mit der Maus von den weissen zu den gelben Kontakten. Von einem Ausgang können mehrere Verbindungen auf andere Eingänge geführt werden, umgekehrt kann ein Eingan nur einmal belegt werden. Ein Klick auf den gelben Kontakt entfernt die Verbindung wieder. Die Schaltung kann als cml- File gespeichert werden. Cml steht für 'Chemical Mark Up Language' und ist ähnlich wie Xml aufgebaut. Die Speicherung eines Files ist in Java natürlich nur möglich, wenn Sie das Programm als Applikation laufen lassen. Ein Applet darf nichts auf Ihre Festplatte schreiben. Spielen Sie mit dem Applet herum und üben Sie die Handhabung des Programms.
Problematisch wird das Basis FF, wenn die Zustandsänderung zur gleichen Zeit von S=0 und R=0 auf S=1 und R=1 springt. Welcher Zustand sich am Ausgang einstellt, hängt dann von Toleranzen der Bauelemente ab. Unser Java- Applet spielt jetzt allerdings verrückt. Es versucht immer wieder den einen oder den anderen Zustand herzustellen und gerät in eine unendliche Schleife. Wenn Sie es ausprobieren wollen, müssen Sie im Applet beide Eingänge auf einen einzigen Schalter legen. Schalten Sie aber rechtzeitig wieder auf S=R=0 zurück, da das Programm sonst mit einem OutOfMemory- Error abstürtzt.

Das getaktete RS-Flip-Flop

Das getaktete Flip-Flop ist eine Weiterentwicklung des Basis-FF. Zwei weitere NAND Gatter werden vor die Eingänge geschaltet.

     

Ein Taktsignal, das normalerweise auf 0- Pegel steht, sorgt dafür, dass an den Eingängen des Basis-FF 1- Pegel herrscht und sich daher die Ausgänge nicht ändern. Erst wenn das Takt- Signal auf 1 geschaltet wird, können die S- und R- Signale Einfluss auf die Ausgänge des Flip-Flops nehmen. Mit S=1 und R=0 erhalten wir dann z.B. S'=0 und R'=1 und damit Q=1 und Q=0. Wir untersuchen das Verhalten mit dem oben gezeigten Impulsdiagramm.
Zur Zeit t=0 sind alle Eingänge auf 0- Pegel und daher Q=0 und Q=1. Unser erstes Taktsignal bei t1 ändert daran nichts. Schalten wir jetzt S an, so ändert sich immer noch nichts, da der 0-Pegel von T ein Durchschalten verhindert. Erst wenn der Takt auf logisch 1 gesetzt wird, erhalten wir die erwartete Zustandsänderung an den Ausgängen. Vor dem 4. Takt schalten wir R und S ein, d.h. S = R = 1. Dann gehen auch beide Ausgänge in den Zustand Q = Q = 1. Fällt das Taktsignal allerdings wieder zurück in den Nullzustand, dann ist der Ausgangszustand nicht mehr eindeutig. Er kann Q=0 und Q=1 oder auch Q=1 und Q=0 sein. Der Eingangszustand S=R=1 führt also zu einem nicht definierten Ausgangszustand, wenn während dieser Zeit ein Taktimpuls eintrifft. Daher hat dieses Flip-Flop kaum eine Bedeutung. Verifizieren Sie das obige Impulsdiagramm mit unseren zweiten Java- Applet.

Das statische JK- Flip-Flop

Wir hatten gesehen, dass an den Eingängen des Basis FF nicht gleichzeitig logisch 0 auftreten darf. Da die Ausgänge eines FF's immer gegensätzliche Zustände führen sollen, können die Ausgangssignale auf zusätzliche Eingangs- NAND Gatter geführt werden, sodass immer ein Eingangsgatter logisch 0 führt. Die folgende Abbildung zeigt eine solche Schaltung.

     

Hierbei ist Q auf einen Eingang des oberen NAND Gatters, Q auf einen Eingang des unteren NAND Gatters geführt. Die freien Eingänge werden bei diesem FF mit J und K bezeichnet. Die Wirkungsweise dieser Schaltung zeigen wir wieder an einem Impulsdiagramm:

Zu Beginn sind J=K=0. Dann ist Q=1 und Q=0. Der Taktimpuls hat keinen Einfluss auf den Ausgang. Zwischen dem 1. und 2. Takt wechselt K von 0 auf 1. Beim 0 - 1 Sprung des 2. Taktimpulses sind alle drei Eingänge des unteren NAND Gatters zunächst logisch 1. Damit wird R'=0 und Q=1. Durch die Kreuzkopplung wird Q=0. Die logische 0 von Q gelangt an den unteren Eingang des unteren NAND Gatters und bewirkt wieder eine 1 an R'. Nach Ablauf des Umschaltvorgangs von T geht R' also wieder von 0 auf 1 zurück. Dieser kurze Wechsel des Pegels ist im Applet nicht zu erkennen, es scheint so, dass R' immer logisch 1 ist. Dasselbe Verhalten gilt für S'. Wenn wir jetzt K aus- und J einschalten, kippt der Flip-Flop in die umgekehrte Ausgangslage. Zwischen dem 3. und 4. Takt schalten wir nun auch K=1. Beim Eintreffen des 4. Taktes werden alle drei Eingänge des oberen Gatters logisch 1 und damit S'=0, Q=1 und Q=0. Die logische 0 von Q gelangt sofort an das obere Gatter, die logische 1 von Q an das untere Gatter. Es erfolgt eine Umschaltung von S' von 0 auf 1 und von R' von 1 auf 0. Dieser Vorgang der ständigen Umschaltung setzt sich solange fort, bis der Taktimpuls wieder abgeschaltet ist. Welcher Zustand sich danach einstellt, ist zufällig. Wegen dieser Eigenschaft wird das JK Flip-Flop in der Praxis wenig benutzt. Um nach dem Laden des Programms einen definierten Anfangszustand zu erhalten, haben wir im folgenden Java- Applet die Kreuzkopplung zunächst durch einen Schalter unterbrochen. Bevor Sie das Applet starten, schalten Sie zunächst also die Kreuzkopplung ein. Wenn Sie den oszillierenden Zustand erreicht haben, müssen Sie diesen Schalter sofort wieder schliessen, unser Programm hört sonst nicht mehr mit der Oszillation auf und gerät in einen OutOfMemory Error. Das kann zum Absturz Ihres Rechners führen. Das dreifache NAND Gatter haben wir in diesem Applet durch zwei AND Gatter mit einem folgenden NOT ersetzt.

Das Master-Slave Flip-Flop

Die Schwierigkeiten der vorherigen Flip-Flops werden mit dem Master-Slave Flip Flop überwunden. Die Idee ist hierbei, dass die Zustandsänderung mit der ansteigenden Flanke des Taktimpulses von einem ersten JK Flip-Flop (Master FF) vorbereitet wird und erst mit der abfallenden Flanke des Taktimpulses vom zweiten JK-Flip-Flop (Slave FF) an die Ausgänge gebracht wird. Damit kann der oszillierende Zustand vermieden werden. Wir zeigen die Schaltung in der folgenden Abbildung:

     

Es folgt noch ein ausführliches Impulsdiagramm, welches wir mit unserem Java- Applet aufgezeichnet haben.

Auch in diesem Applet haben wir zunächst die Kreuzschaltungen unterbrochen. Verifizieren Sie das dargestellte Impulsdiagramm.
Die meisten integrierten FFs werden nach dem Master-Slave Prinzip hergestellt. Diese besitzen häufig direkte Setz- und Rücksetz- Eingänge. Diese werden mit P (Preset) und C (Clear) bezeichnet. Das bedeutet, dass ein 0 Signal an P den Ausgang Q auf logisch 1 setzt und ein 0 Signal auf C den Ausgang Q wieder auf logisch 0 setzt. P und C stehen also normalerweise auf logisch 1. Der Zustand P=C=0 ist nicht erlaubt und kann im Applet auch nicht gesetzt werden. Hier noch einmal die Funktionstabellen:

P  C  Q   Q  
00 nicht erlaubt
0110
1001
11 keine Änderung


J und K sind vorbereitende Eingänge und werden erst geschaltet, wenn der Taktimpuls T von 1 nach 0 springt:

J  K  Q   Q  
00 keine Änderung
0101
1010
11QQ (Komplement)


Dieses allgemeine Master-Slave Flip-Flop haben wir ebenfalls in einem Java- Applet programmiert. Die 4-fachen und 3-fachen NAND Gatter wurden wie bisher durch AND Gatter mit nachgeschaltetem NOT realisiert. Das Schaltzeichen dieses Flip- Flops ist in der folgenden Abbildung links gezeigt. Im Applet verwenden wir allerdings das etwas geänderte Zeichen rechts. Den P(reset) Eingang haben wir weggelassen, den Cleareingang mit C bezeichnet und den Takteingang mit T.



In der einfachsten Form werden die Eingänge P=C=1 gesetzt und J=K miteinander verbunden und als gemeinsamer Informationseingang benutzt. In dieser Form spricht man auch vom T- Flip-Flop. Für J=K=1 kippt der Ausgangszustand in die entgegengesetzte Stellung, für J=K=0 erhält man keine Änderung.

Das D Flip-Flop

Als letzte Anwendung zeigen wir ein weiteres häufig verwendetes Flip-Flop. Das einfache D-Flip-Flop ist in der folgenden Abbildung gezeigt:

     

Es ähnelt dem RS- Flip-Flop. Das Impulsdiagramm ist in der obigen Abbildung gezeigt:

Mit unserem Java- Applet können Sie wiederum das Diagramm überprüfen.

Die Funktionstabelle ist bei diesem FF besonders einfach:

D  Q   Q  
001
110


Aus dieser Tabelle sieht man, dass die Ausgangszustände immer eindeutig sind, es treten keine nicht definierten oder irregulären Zustände auf. Der D Flip-Flop ist wieder taktzustandsgesteuert, d.h die Ausgangsstellung hängt ausser von der Information des D- Eingangs auch vom Zustand des Taktsignals ab. Solange das Taktsignal an ist, ändert eine Zustandsänderung bei D auch den Ausgangszustand.
Demgegenüber steht das taktflankengesteuerte D Flip- Flop. Es ist ähnlich wie das Master- Slave Flip-Flop als Zweispeicher FF realisiert. Die Grundschaltung zeigt die folgende Abbildung:

     

Man erkennt hierbei drei Basis FF's, von denen allerdings nur zwei als echte FF's wirken, d.h dass ihre beiden Ausgänge entgegengesetzte logische Zustände haben. Wir untersuchen die Schaltung mit Hilfe des Impulsdiagramms. Die Signale G und H werden nur während der Zeit des Taktpulses 0. Wenn der D-Eingang 1 ist, wird für die Taktzeit G=0 und damit Q=1 und Q=0. Wenn D=0 ist, wird für die Taktzeit H=0 und damit Q=0 und Q=1. Entscheidend für die logischen Zustände bei G und H ist dabei nur der Zustand am D- Eingang, der während der 0-1 Flanke des Taktimpulses anliegt. Eine Änderung des Zustandes am D-Eingang während eines Taktes hat keinen Einfluss auf den Ausgangszustand. Probieren Sie es selbst mit unserem Java- Applet aus. Allerdings müssen Sie dafür den PushOn- Schalter des Taktes durch einen Toggle- Schalter ersetzen.