10.4 Flipflop-Typen

Flipflops sind nicht-getaktete einfache Schaltwerke, die als wiederbeschreibbarer Speicher für ein Bit eingesetzt werden. Man unterscheidet sie in zwei Aspekten:

(1) Nach der Art, wie das Bit gesetzt bzw. gelöscht wird:
R-S-Flipflop, J-K-Flipflop, D-Flipflop

(2) Ob (und wie) ein Eingang als "Takt" verwendet wird:
R-S-Latch, Pegel-Steuerung, Flanken-Steuerung

Man beachte, dass Flipflops immer nicht-getaktete Schaltwerke sind, weil die Rückkopplung nur Verzögerungen enthält. Der "Takt" ist aus Sicht des Flipflops ein Eingang des Schaltwerkes, und zwar jener, der bei Einsatz des Flipflops als Takt-gesteuertes Zeitglied in einem getakteten Schaltwerk der Takt dieses getakteten Schaltwerks ist.

Nachfolgend sind für die wichtigsten Typen jeweils das Zustandsdiagramm und die Flusstafel sowie ein typisches Signalspiel und das Schaltbild einer typischen Realisierung angegeben.

Pegel-gesteuertes R-S-Flipflop

Der einfachste Flipfloptyp ist das R-S-Flipflop (auch S-R-Flipflop oder NOR-Basis-Flipflop). Das folgende Bild zeigt das Moore-Modell inklusive der logischen Verknüpfungen:

drawnorffmoore   % Moore-Modell

Dem Modell entnimmt man die schaltalgebraischen Ausdrücke für die beiden Zustandsbits:

 z1next = Q  = NOR(z2, R)) = ~(z2|R) 
 z2next = Q' = NOR(z1, S)) = ~(z1|S) 

Hieraus ergibt sich die Flusstafel:

Zustand Zustand- Input-Index: 1 2 3 4
Z1,Z2 Index Bitmuster S,R: 00 01 11 10
00 1 Folgezustand 11(3) 01(2) 00(1) 10(4)
01 2 Folgezustand 01(2) 01(2) 00(1) 00(1)
11 3 Folgezustand 00(1) 00(1) 00(1) 00(1)
10 4 Folgezustand 10(4) 00(1) 00(1) 10(4)

Die Zustands-Indices tragen wir in die Matrix utab ein und geben in zcod und xcod die Binärcodierung für die jeweiligen Indices an. In xnam notieren wir noch die üblichen Bezeichnungen für die Eingänge in der Reihenfolge, die wir für die Bits der Codierung vorgesehen haben:

demofsm( ...
         [ 3 2 1 4 ; 2 2 1 1 ; 1 1 1 1 ; 4 1 1 4 ],...  % Übergangstabelle
         {'00';'01';'11';'10'},...                      % Zusatndscodierung
         2,...                                          % Index des Anfangszustands
         1,...                                          % Schaltwertyp: nicht getaktet
         {'00';'01';'11';'10'},...                      % Inputcodierung
         'S,R'...                                       % Bezeichner der Inputs
       )

Ein typisches Signalspiel zeigt:

drawsigsnorff( {ceil(3*rand); ceil(3*rand)} )

Rufen Sie dies mehrfach auf, da der Anfangszustand und die Verzögerungen zufällig gewählt werden.

Das Schaltbild des NOR-Basis-Flipflops ist:

drawnorff        % Schaltbild

Taktpegel-gesteuertes R-S-Flipflop

Aus dem Schaltbild

drawprsff    % Schaltbild

entnimmt man die schaltalgebraischen Ausdrücke für die beiden Zustandsbits:

 z1next = Q  = NOR(z2, AND(R, C)) = ~(z2|(R&C)) 
 z2next = Q' = NOR(z1, AND(S, C)) = ~(z1|(S&C)) 

Hieraus ergibt sich die Flusstafel:

Zustand Zustand- Input-Index: 1 2 3 4 5 6 7 8
Z1,Z2 Index Bitmuster S,R,C:000 001 010 011 100 101 110 111
00 1 Folgezustand 11(3) 11(3) 11(3) 01(2) 11(3) 10(4) 11(3) 00(1)
01 2 Folgezustand 01(2) 01(2) 01(2) 01(2) 01(2) 00(1) 01(2) 00(1)
11 3 Folgezustand 00(1) 00(1) 00(1) 00(1) 00(1) 00(1) 00(1) 00(1)
10 4 Folgezustand 10(4) 10(4) 10(4) 00(1) 10(4) 10(4) 10(4) 00(1)

Die Zustands-Indices tragen wir in die Matrix utab ein und geben in zcod und xcod die Binärcodierung für die jeweiligen Indices an. In xnam notieren wir noch die üblichen Bezeichnungen für die Eingänge in der Reihenfolge, die wir für die Bits der Codierung vorgesehen haben:

demofsm(                       ...
         [3 3 3 2 3 4 3 1 ;    ...
          2 2 2 2 2 1 2 1 ;    ...  % Flusstafel
          1 1 1 1 1 1 1 1 ;    ...
          4 4 4 1 4 4 4 1 ],   ...
         {'00';'01';'11';'10'},...  % Zustandscodierung
         2 ,                   ...  % Index des Anfangszustands
         1 ,                   ...  % Schaltwertyp: nicht getaktet
         {'000';'001';'010';'011';'100';'101';'110';'111'},... % Inputcodierung
         'S,R,C'               ...  % Bezeichner der Inputs
        )

Ein typisches Signalspiel zeigt:

drawsigsprs

Rufen Sie dies mehrfach auf, da der Anfangszustand und die Verzögerungen zufällig gewählt werden.

Taktpegel-gesteuertes D-Flipflop

Wie bei den beiden vorangegangenen Flipfloptypen gehen wir aus von einem Schaltbild. Wir nehmen dabei ein anderes als das im vorigen Abschnitt hergeleitete Earle-Latch:

drawtpdff

Dem Schaltbild entnimmt man die schaltalgebraischen Ausdrücke für die beiden im Bild überkreuz laufenden Zustandsbits:

 z1next = Q  = NAND(z2, NAND(C,D))          = ~(z2&~(C&D))      
 z2next = Q' = NAND(z1, NAND(C, NAND(C,D))) = ~(z1&~(C&~(C&D))) 

Hieraus ergibt sich die Flusstafel:

Zustand Zustand- Input-Index: 1 2 3 4
Z1,Z2 Index Bitmuster D,C: 00 01 11 10
00 1 Folgezustand 11(3) 11(3) 11(3) 11(3)
01 2 Folgezustand 01(2) 01(2) 11(3) 01(2)
11 3 Folgezustand 00(1) 01(2) 10(4) 00(1)
10 4 Folgezustand 10(4) 11(3) 10(4) 10(4)

Die Zustands-Indices tragen wir in die Matrix utab ein und geben in zcod und xcod die Binärcodierung für die jeweiligen Indices an. In xnam notieren wir noch die üblichen Bezeichnungen für die Eingänge in der Reihenfolge, die wir für die Bits der Codierung vorgesehen haben:

demofsm(                       ...
         [3 3 3 3; 2 2 3 2; 1 2 4 1; 4 3 4 4],... % Flusstafel
         {'00';'01';'11';'10'},...    % Zustandscodierung
         2 ,                   ...    % Index des Anfangszustands
         1 ,                   ...    % Schaltwertyp: nicht getaktet
         {'00';'01';'11';'10'},...    % Inputcodierung
         'D,C'                 ...    % Bezeichner der Inputs
        )

Wir testen das Flipflop mit dem selben Input wie beim Earle-Latch:

drawsigscmp

Diese Form des D-Latches wird häufig verwendet. Man muss jedoch beachten, dass der Q'-Ausgang einen statischen 1-Hasard aufweist.

Übungsaufgabe: Wodurch wird der Hasard des Q'-Ausgangs verursacht und kann man ihn beseitigen?

Rückflanken-gesteuertes D-Flipflop

Wie bei den beiden vorangegangenen Flipfloptypen gehen wir aus von einem Schaltbild. Wir nehmen dabei ein anderes als das im Abschnitt 10.3 hergeleitete:

drawetdff('-',1)

Dem Schaltbild entnimmt man die schaltalgebraischen Ausdrücke für die vier im Bild angegebenen Zustandsbits:

 z1next = NOR(z2, C, NOR(z1, D)       
 z2next = NOR(C, NOR(z2, NOR(z1, D))) 
 z3 = NOR(z2, z4)                 
 z4 = NOR(z1, z3)                 

Hieraus ergibt sich die Flusstafel, die in diesem Fall mithilfe der Funktion binexp2flusstafel automatisch erstellt wird:

 delta = {'~(z2|C|~(z1|D))';'~(C|~(z2|~(z1|D)))';'~(z2|z4)';'~(z1|z3)'};  
 incod = {'D=0; C=0;'; 'D=0; C=1;'; 'D=1; C=1;'; 'D=1; C=0;'};  
 utab  = binexp2flusstafel(delta,incod)                         

Damit ergibt sich das Zustandsdiagramm und die Graphik der Flusstafel:

 zcod = {'0000';'0001';'0010';'0011';'0100';'0101';'0110';'0111'}; 
 zcod = cat(1,zcod,{'1000';'1001';'1010';'1011';'1100';'1101';'1110';'1111'}); 
 xcod = {'00';'01';'11';'10'};                                     
 xnam = 'D,C';                                                     
 demofsm(utab,zcod,2,1,xcod,xnam)                                  

Dies als Parameter eingetragen ergibt:

demofsm(...
   binexp2flusstafel(...
      {'~(z2|C|~(z1|D))';'~(C|~(z2|~(z1|D)))';'~(z2|z4)';'~(z1|z3)'},...
      {'D=0; C=0;'; 'D=0; C=1;'; 'D=1; C=1;'; 'D=1; C=0;'} ...
                    ),...
   {'0000';'0001';'0010';'0011';'0100';'0101';'0110';'0111';...
    '1000';'1001';'1010';'1011';'1100';'1101';'1110';'1111'},...
   2,...
   1,...
   {'00';'01';'11';'10'},...
   'D,C' ...
       )

Hier sollte man einige typische Signalfolgen durchspielen. Der Ausgang Q ist z3, also das dritte Bit der Zustandscodierung.

Wir testen das Flipflop ebenfalls mit vorgegebenen Inputsignalen:

drawsigsetdff

Vorderflanken-gesteuertes D-Flipflop

Durch Vergleich des folgenden Schaltbildes mit dem des rückflankengesteuerten Flipflops erkennt man, dass diese Typen gleich sind bis auf Inversion aller Variablen. Daher sind im Schaltbild NAND- und NOR-Verknüpfungsglieder gegeneinander getauscht:

drawetdff('+')

Zweiflankengesteuertes-Flipflop

Auch für diesen Typ geben wir eine übliche Realisierungsform als Schaltbild an:

draw2etdff

Es sei dem Leser als Übungsaufgabe überlassen, die Rückführungen als Zustandsvariable zu definieren und die schaltalgebraischen Ausdrücke für die Überführungsfunktion zu bestimmen. Wegen der grossen Zahl theoretisch möglicher Zustände (64) ist das automatisch generierte Zustandsdiagramm schon sehr unübersichtlich. Das Zustandsdiagramm lässt sich aber nach dem im Abschnitt 10.3 beschriebenen Verfahren reduzieren auf eines mit nur 6 Zuständen. Es ist nachfolgend dargestellt:

demofsm(...
   [2 1 1 2; 2 1 3 2; 5 3 3 5; 5 4 4 5; 5 6 4 5; 2 6 6 2],...
   {'D';'A';'F';'C';'B';'E'},...
   1,...
   1,...
   {'00';'01';'11';'10'}...
       )

J-K-Flipflop

J-K-Flipflops sind Taktflanken-gesteuerte universelle Flipflops, die man durch die beiden Eingänge J und K wie folgt benutzen kann:

J K Funktion
0 0 keine Reaktion auf das Taktsignal
0 1 Rücksetzen
1 0 Setzen (wie S=1, R=0 beim S-R-Flipflop)
1 1 Wechsel 0 → 1 bzw. 1 → 0

Häufig findet man auch J-K'-Flipflops, bei denen also das K-Signal invertiert eingegeben wird.

J-K-Flipflops kann man auffassen als sehr einfache getaktete Schaltwerke mit einem gewöhnlichen D-Flipflop als Zeitglied. Das folgende Bild zeigt das Modell:

drawjkff

Die Bedeutung der J-K-Flipflops als Standard-Bausteine hat mit der Integration grösserer Systeme auf Mikrochips abgenommen, weil man dort beim Entwurf jeweils die geeigneten Flipflops einsetzt und dadurch Chipfläche einsparen kann.