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 | |
0 | 0 | 1 | 1 | irregulär |
0 | 1 | 1 | 0 | |
1 | 0 | 0 | 1 | |
1 | 1 | Q | 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 |
0 | 0 | | nicht erlaubt |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 1 | | 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 |
0 | 0 | | keine Änderung |
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | Q | Q (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:
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.