Zur Haupt­na­vi­ga­ti­on sprin­gen [Alt]+[0] Zum Sei­ten­in­halt sprin­gen [Alt]+[1]

Spei­che­rung von Bits

Das RS-Flip­flop

An zahl­rei­chen Stel­len in einem Com­pu­ter müs­sen bi­nä­re Daten für die spä­te­re Wei­ter­ver­wen­dung zwi­schen­ge­spei­chert wer­den. Wir wol­len uns als ers­tes mit einer Schal­tung ver­traut ma­chen, die genau 1 Bit zu­ver­läs­sig spei­chern kann. Be­trach­ten wir dazu die fol­gen­de Schal­tung aus zwei NOR-Gat­tern:

RS-Flipflop (eigenes Werk)

RS-Flip­flop

Um Ge­naue­res über die Funk­ti­on die­ser Schal­tung zu er­fah­ren, ist es sinn­voll, zu­nächst die Ein­gän­ge R auf 1 und S auf 0 zu set­zen. Damit ist je­doch noch nicht klar, wel­che Si­gna­le an den Aus­gän­gen Q und P er­schei­nen wer­den, weil hier die Aus­gangs­si­gna­le auf die Ein­gangs­sei­te der Schal­tung rück­ge­kop­pelt wer­den: Um zu be­stim­men, wel­chen Wert P hat, müss­ten wir Q ken­nen; um aber zu be­stim­men, wel­chen Wert Q hat, müss­ten wir P ken­nen. Diese Pro­ble­ma­tik ist ty­pisch für rück­ge­kop­pel­te Sys­te­me. Wir müs­sen also die ver­schie­de­nen Mög­lich­kei­ten durch­pro­bie­ren, ehe wir die erste Zeile einer Wahr­heits­wert-Ta­bel­le für diese Schal­tung hin­schrei­ben kön­nen.

Hier ist zur Er­in­ne­rung noch­mals die Wahr­heits­wert­ta­bel­le der NOR-Ver­knüp­fung:

Wahrheitswerttabelle NOR-Verknüpfung

NOR-Ver­knüp­fung

Pro­bie­ren wir die Fälle „Q = 0“ und „Q = 1“ durch:

  1. Wir neh­men zu­nächst an, dass Q = 0 sei. Dann „sieht“ das un­te­re NOR-Gat­ter die Ein­gangs­si­gna­le S = 0 und Q = 0. Damit er­scheint an sei­nem Aus­gang das Si­gnal P = 1. Das obere NOR-Gat­ter hat also die Ein­gangs­si­gna­le R = 1 und P = 1, was das Aus­gangs­si­gnal Q = 0 zur Folge hat. Das stimmt aber mit un­se­rer ur­sprüng­li­chen An­nah­me über­ein. Also ist der Zu­stand „Q = 0 und P = 1“ sta­bil.
  2. Neh­men wir hin­ge­gen an, dass am An­fang Q = 1 ist, dann hat das un­te­re NOR-Gat­ter die Ein­gangs­si­gna­le S = 0 und Q = 1. Daher pro­du­ziert es am Aus­gang das Si­gnal P = 0. Damit er­hält das obere NOR-Gat­ter die Ein­gangs­si­gna­le R = 1 und P = 0. Dies schal­tet je­doch den Aus­gang Q auf den Wert 0. Wie wir schon unter (a) ge­se­hen haben, führt dies zum sta­bi­len Zu­stand „Q = 0 und P = 1“.

Egal ob an­fangs Q = 0 oder Q = 1 ist, die Schal­tung kippt also stets in den Zu­stand „Q = 0 und P = 1“ und bleibt dann da. Dar­aus kön­nen wir nun die ers­ten Zei­len einer Wahr­heits­wert-Ta­bel­le für un­se­re Schal­tung fol­gern. Die erste Spal­te ent­hält dabei zu­sätz­lich eine Num­me­rie­rung der auf­ein­an­der­fol­gen­den Zu­stän­de, also quasi eine Zeit­leis­te:

t R S Q P
0 0 0 * *
1 1 0 0 1

Wenn wir im nächs­ten Schritt (t = 2) das Ein­gangs­si­gnal R auf 0 zu­rück­schal­ten, dann än­dert sich der Wert von Q da­durch nicht: wegen P = 1 bleibt das obere NOR-Gat­ter im Zu­stand Q = 0, so dass der Zu­stand der Schal­tung ins­ge­samt er­hal­ten bleibt:

t R S Q P
0 0 0 * *
1 1 0 0 1
2 0 0 0 1

Im fol­gen­den Schritt (t = 3) set­zen wir S = 1. Das un­te­re NOR-Gat­ter sieht damit die Eingangs­signale S = 1 und Q = 0, so dass das Aus­gangs­si­gnal auf P = 0 kippt. Damit er­hält das obere NOR-Gat­ter die Ein­gangs­si­gna­le R = 0 und P = 0, was zu Q = 1 führt. Hier­durch wird je­doch das Aus­gangs­si­gnal des un­te­ren NOR-Gat­ters nicht ver­än­dert, so dass der Zu­stand sich sta­bi­li­siert. Wei­ter kann man sich auch hier davon über­zeu­gen, dass der neue Zu­stand (Q = 1 und P = 0) er­hal­ten bleibt, wenn man das Ein­gangs­si­gnal S auf 0 zu­rück­schal­tet (t = 4).

Man er­hält also die fol­gen­de Ta­bel­le:

t R S Q P
0 0 0 * *
1 1 0 0 1
2 0 0 0 1
3 0 1 1 0
4 0 0 1 0

Ver­gleicht man in der Ta­bel­le die Zei­len t = 2 und t = 4, dann fällt auf, dass in die­ser Schal­tung die Aus­gangs­si­gna­le Q und P keine Funk­ti­on der Ein­gangs­si­gna­le R und S sind: zu den­sel­ben Ein­gangs­da­ten ge­hö­ren un­ter­schied­li­che Aus­gangs­da­ten! Es muss also noch eine an­de­re Va­ria­ble geben, die den Aus­gangs­zu­stand der Schal­tung mit be­ein­flusst: wenn man sich die Ta­bel­le noch­mals ge­nau­er an­schaut, sieht man, dass in Q stets die In­for­ma­ti­on vor­han­den ist, an wel­chem der bei­den Ein­gän­ge R oder S zu­letzt eine 1 anlag:

  1. Ist Q = 0, dann be­deu­tet dies: die letz­te 1 wurde am R-Ein­gang fest­ge­stellt;
  2. Ist Q = 1, dann be­deu­tet dies: die letz­te 1 wurde am S-Ein­gang fest­ge­stellt.

Mit­hin hat die Schal­tung also ein „Ge­dächt­nis für die letz­te 1“. Eine sol­che Schal­tung nennt man ein RS-Flip­flop.

Das sta­ti­sche D-Flip­flop

Man kann ein RS-Flip­flop zu einem ein­fa­chen Spei­cher für 1 Bit er­wei­tern, wel­ches an einem Da­ten­ein­gang D an­kommt. Die an D an­ste­hen­de In­for­ma­ti­on wird dem ur­sprüng­li­chen S-Ein­gang des Flip­flops zu­ge­lei­tet, die ne­gier­te In­for­ma­ti­on (D) dem ur­sprüng­li­chen R-Ein­gang. Für die Pra­xis ist es aber wich­tig, dass die Über­nah­me der In­for­ma­ti­on in den Spei­cher zu einem wohl­de­fi­nier­ten Zeit­punkt statt­fin­det. Dafür wer­den die bei­den Ein­gän­ge R und S mit einer Tor­steue­rung ver­se­hen.

Diese Schal­tung nennt man ein (sta­ti­sches) D-Flip­flop. Da der ur­sprüng­lich beim RS-Flip­flop noch vor­han­de­ne Aus­gang P stets nur das lo­gi­sche Ge­gen­teil von Q zeigt und somit keine zu­sätz­li­che In­for­ma­ti­on lie­fert, ver­zich­tet man beim D-Flip­flop oft auf die­sen Aus­gang. Der ein­zi­ge Aus­gang ist damit Q. Q ent­hält immer das ge­spei­cher­te Bit, näm­lich den­je­ni­gen lo­gi­schen Wert, der an D da­mals anlag, als C zu­letzt den Wert 1 hatte.

„Spei­chern“ heißt hier also: die D-In­for­ma­ti­on in Q auf­be­wah­ren, auch wenn sie an D längst nicht mehr an­liegt! Die In­for­ma­ti­on in Q bleibt so lange sta­bil, wie C = 0 ist. Erst wenn C wie­der auf 1 wech­selt, wird der dann in D an­lie­gen­de Wert nach Q über­nom­men und über­schreibt damit den zuvor ge­spei­cher­ten Wert.

D-Flipflop (eigenes Werk)

D-Flip­flop

Re­gis­ter

Die kleins­te In­for­ma­ti­ons­men­ge, mit der Pro­gram­mie­rer üb­li­cher­wei­se zu tun haben, ist ein Byte, also ein ge­ord­ne­tes Paket aus 8 Bit. Um nun ein Da­ten­re­gis­ter für z.B. ein sol­ches 8-Bit-Wort zu er­hal­ten, muss man nur 8 D-Flip­flops par­al­lel schal­ten und mit einem ge­mein­sa­men Takt­si­gnal ver­sor­gen. Ein ent­spre­chen­des 8-Bit-Da­ten­re­gis­ter wird dann so dar­ge­stellt:

8-Bit Register (eigenes Werk)

8-Bit Re­gis­ter

Die an den 8 Ein­gän­gen D0 bis D7 an­lie­gen­den Bits wer­den durch ein voll­stän­di­ges Takt­si­gnal am T-Ein­gang (Wech­sel von 0 nach 1 und wie­der zu­rück von 1 nach 0) in die ein­zel­nen Bitspei­cher über­nom­men. Sie ste­hen dann an den Aus­gän­gen Q0 bis Q7 per­ma­nent zur Wei­ter­ver­ar­bei­tung zur Ver­fü­gung, bis durch das nächs­te Si­gnal am T-Ein­gang ein neues Da­ten­wort in die­ses Re­gis­ter ge­schrie­ben wird. Wenn das ge­spei­cher­te Da­ten­wort eine (bi­nä­re) Zahl dar­stellt, dann be­schreibt der Index die Wer­tig­keit der ein­zel­nen Bits: der Index 0 gibt dann stets das nie­der­wer­tigs­te Bit an („LSB“ = least signi­fi­cant bit), der höchs­te Index das höchst­wer­ti­ge Bit („MSB“ = most signi­fi­cant bit). Da wir aber üb­li­cher­wei­se mehr­stel­li­ge Zah­len mit nach links zu­neh­men­der Stel­len­wer­tig­keit schrei­ben, wur­den die Ein­gän­ge hier von rechts nach links an­stei­gend durch­num­me­riert.

8-Bit Register

8-Bit Re­gis­ter

 

 

Hin­ter­grund­in­for­ma­tio­nen: Her­un­ter­la­den [odt][4 MB]

 

Wei­ter zu Ver­knüp­fung bi­nä­rer Da­ten­wor­te