Hallo zusammen,
ich möchte ein D-Flipflop selbst mit PMOS und NMOS umsetzen.
Siehe LT-Spice Schaltung und zugehöriger Screenshot im Anhang.
Auf Gatterebene habe ich die "vereinfachte Schaltung" von dieser Seite
genommen:
http://www.iris.uni-stuttgart.de/lehre/eggenberger/eti/19_Flipflops/Ds-FF.htm
Die Schaltung funktioniert auch perfekt für ein pegelgesteuertes
D-Latch, nun möchte ich jedoch statt Pegelsteuerung eine
Flankensteuerung nutzen. Dafür habe ich folgenden Flankenerkenner
eingebaut:
1
CLK: Clock
2
CLK': Flanke
3
CLK' = and(inv(CLK), CLK)
bzw. einen Inverter, ein NAND und noch einen Inverter auf CMOS-Ebene.
Das Problem: Die Spannung CLK' erreicht höchstens 20mV (siehe CLK_.PNG
im Anhang). Das liegt wohl daran, dass der erste Inverter zu schnell
schaltet, bevor das NAND-Gatter die Ausgangsspannung regulieren kann.
Ich möchte gerne realitätsnah bleiben, deswegen fallen
LTSpice-"Funktionen" wie delay weg.
Im Internet habe ich des Öfteren Kondensatoren und Widerstände in dem
Zusammenhang gesehen, z. B.:
http://www.electro-tech-online.com/threads/need-advice-on-a-rising-and-falling-edge-sensor-circuit.92431/#post-733214.
An sich ist das jedoch eine andere Schaltung, da CLK im letzten NAND nur
einmal auftaucht (?).
Wie genau muss ich die bei meiner Schaltung verbauen?
Danke im Voraus :)
Max A. schrieb:> Die Schaltung funktioniert auch perfekt für ein pegelgesteuertes> D-Latch, nun möchte ich jedoch statt Pegelsteuerung eine> Flankensteuerung nutzen. Dafür habe ich folgenden Flankenerkenner> eingebaut:
Servus Max,
sowas macht man in der Realität wohl eher nicht durch Gatter-Laufzeiten,
sondern durch Hintereinanderschaltung von zwei Pegelgesteuerten Latches.
Für ein Positiv-Flankengetriggertes D-FF wird D bei CLK=low in das erste
Latch übernommen (das zweite Lätch ist bei CLK=Low verriegelt), wechselt
CLK dann von low nach high, verriegelt das ersten Latch und das zweite
übernimmt die Daten vom ersten Latch.
Hallo Thomas,
Danke für die Antwort!
Ich bin ehrlich gesagt erstaunt, dass man in der Realität für jedes
flankengesteuerte Flipflop ein Master-Slave-Flipflop nimmt. Ist das
nicht ein hoher Platzverbrauch?
Im Internet habe ich noch weiter recherchiert, man findet leider oft nur
Gatterschaltnetze und nicht die darunter liegende Implementierung.
Auch bin ich auf einen Flankenerkenner mit 4 Invertern und einem
Hochpass gestoßen: http://www.falstad.com/circuit/e-leadingedge.html.
Leider habe ich auch den nicht in LT Spice zum "Laufen" bringen können -
als Ausgang erhalte ich maximal 4.4µV, viel weniger als mein VDD.
Glücklicherweise habe ich dann jedoch noch diese Seite gefunden:
http://www.vlsitechnology.org/
Deren D-Flipflop in ihrer Standardzellenbibliothek nutzt laut
Beschreibung auch das Master-Slave-Prinzip:
http://www.vlsitechnology.org/html/cells/vsclib013/dfnt1.html
Nun, ich bin auch kein Halbleiter-Experte - kann sein, daß die
Halbleiter-Bäcker das auch noch anders hinkriegen, als über 2 D-Latches.
So viel mehr Transistoren, als ein Nand mit vorgeschaltetem Delay-Gate
ist das ja auch nicht. Wenn man dann wegen der Verzögerung auch noch
Kapazität integrieren muss, ist es wahrscheinlich noch größer, als ein
paar zusätzliche Transistoren.
Ich habe es grade mal hingebastelt - im Anhang ist meine Lösung mit dem
ersten Latch aus 4 NOR-Gates, damit es ohne zusätzlichen Inverter bei
Gate=Low transparent ist. Die kleine, parasitäre Kapazität (C1) scheint
dem Simulator das Rechnen deutlich zu erleichtern.
Vielen Dank, Thomas!
Um mir das selbst zu erklären und vielleicht für die Nachwelt, folgende
Erläuterung zu deiner Schaltung (korrigiert mich bitte, falls ich
Fehlinformationen verbreite):
Du hast also ein RS-Latch aus 4 NORs vor dem eigentlichen D-Latch
eingefügt.
Die zwei ersten NORs vor dem RS-Latch sorgen dafür, dass wenn Clock=1
ist, (R, S)=(0, 0) erzwingt wird, also der aktuelle Wert für den Eingang
des D-Latches gehalten wird. D.h. keine Änderung von Data wird
irgendetwas verändern, solange Clock=1 ist.
Nur wenn Clock=0 ist, wird in das RS-Latch genau (R, S)=(!Data, Data)
gespeist, sodass jegliche Änderung von Data 1:1 für den Eingang des
D-Latches übernommen wird.
Wenn nun Clock=1 ist, übernimmt das D-Latch den Wert des Eingangs; da
sich dieser Wert nur zum Pegel Clock=1 verändert haben kann, bildet die
ganze Schaltung effektiv ein D-Flipflop.
Hallo Max,
ja, ist schon richtig. Ob man nun ein Latch aus NANDs oder NORs aufbaut,
ist im Prinzip egal - ein NOR ist ja im im Grunde das gleiche wie ein
NAND, nur mit inverser Logik.
Bei der zweiten Schaltung werden die beiden Latches durch jeweils einen
2:1 Multiplexer gebildet, mit Clock am Select-Eingang. Die Benutzung der
Transmission-Gates als (Um-)Schalter spart Transistoren gegenüber
"klassischer" boolscher Logik.