1 Byte FIFO
Was bringt ein 1Byte Speicher ? Ganze einfach: Er ermöglicht die zeitlich unabhängige Übergabe eines Bytes. Es muss also nicht zum selben Zeitpunkt geschrieben und gelesen werden.
Die
Schaltung besteht nur aus einem 8bit Latch und einen Flankengesteuerten RS Flipflop
das als Busy/Ready Speicher dient. Die üblichen RS Flip Flops werden von
den Pegeln an den RS Eingängen gesteuert und nicht von den Flanken, daher
ist hier ein kleiner TRick notwendig.
Um Daten an das FIFO
zu senden, legt man die Daten auf den Bus und überprüft, dass Busy
auf Low liegt, dass das FIFO also leer ist. Anschließend aktiviert man
WR\ indem man es kurz auf Low legt. Bei der Low-High Flanke von WR\ werden die
Daten ins FIFO übernommen und das Busy Flag IC1A gesetzt. Busy ist von
nun an High, und Ready\ geht auf Low.
Dadurch erkennt der Empfänger dass Daten bereit stehen. Um Daten abzuholen,
legt er RD\ auf Low wodurch der Ausgang aktiviert wird und die Daten am Bus
anstehen. Bei der Low-High Flanke von RD\ wird IC1B zurückgesetzt (da der
D Eingang auf Low liegt) wodurch auch Q Low Pegel annimmt. Dies setzt auch IC1A
zurück und löscht somit das Busy Flag. Der Ausgang Q von IC1A geht
also auf Low, was wiederum IC1B setzt. IC1B hat also nur die Funktion die Flanke
von RD\ auszuwerten.
Das ganze verwende ich z.B. um Schaltungen die für den Betrieb
mit einem FT245 USB Konverter ausgelegt sind an einem uC zu betreiben.
Mit der Schaltung kann man zwei Bus Master uC miteinander verbinden: Beide uC
haben freien Zugriff auf ihren Bus und beeinflussen sich gegenseitig nicht.
Außerdem ist das Schreib und Lesetiming aufgrund des schnellen Latches
nahezu egal.
Wenn die Schaltung in ein Bus System verwendet wird, müssen RD\ und WR\
aus dem Signal von einem Adressdekoder und den RD\ bzw. WR\ Leitungen erzeugt
werden.