Timing in einem Schieberegister

Wie ich mir synchrone digitale Netzwerke vorstelle, funktionieren: Datenleitungen werden bei steigender Taktflanke abgetastet, eine Reihe von Transienten tritt auf, das System beruhigt sich und Datenleitungen werden bei der nächsten steigenden Flanke erneut abgetastet. Ich würde Transienten an fallenden Taktflanken platzieren, damit sowohl die Tsu- als auch die Th-Zeit für die Abtastung klar sind. (Etwas ähnlich dem Verhalten des SPI-Busses.)

Was in einem Datenblatt eines realen Geräts (74595) zu sehen ist: D-Flipflops, die in Reihe geschaltet sind und einen gemeinsamen Takt haben. Am Ausgang des ersten Flipflops folgt eine Transiente auf der Datenleitung auf eine steigende Taktflanke mit Tpd. Das nächste Flipflop benötigt nach der ansteigenden Flanke die Th-Zeit einer stabilen Datenleitung, um korrekt zu arbeiten. Natürlich funktioniert es, weil Tpd>Th, aber es ist nur eine Frage von Nanosekunden.

Mein Problem mit all dem ist, dass es nicht robust ist (vielleicht nicht das beste Wort). Die Visualisierung von Dingen auf einem Logikanalysator ist weniger nützlich, da sich die Datenleitungen praktisch synchron mit der steigenden Flanke des Takts ändern. Zufällige Fehler, die durch Th>Tpd verursacht werden, sind nicht wirklich sichtbar und bleiben unentdeckt. Wenn ich ein weiteres Schieberegister einer anderen Technologie in Reihe schalte, das längere Haltezeiten erfordert, funktioniert die Schaltung nicht, egal wie langsam ich den Takt wähle.

Ist dies die Art und Weise, wie am häufigsten synchrone digitale Schaltungen aufgebaut sind? Nur die Laufzeitverzögerung von Komponenten macht es möglich? Bin ich zu idealistisch? :)

Antworten (3)

Sie haben recht in Ihrem Bauchgefühl, dass es ein potenzielles Problem gibt. Innerhalb eines Chips haben sich die Chipdesigner darum gekümmert. Wenn Sie eine Kette von beispielsweise 74x595 anschließen, können Sie tatsächlich in Schwierigkeiten geraten, insbesondere bei einer langen Kette, einem schwachen Treiber und einer Taktverdrahtung, die am "ersten" Chip (demjenigen, der die Daten empfängt) beginnt. Eine 'Standard'-Lösung besteht darin, die Uhr beginnend mit dem letzten Chip zu füttern.

Eine bessere Lösung ist die Verwendung eines Chips wie dem CD4094, der eine verzögerte Ausgabe hat. Es hat ein zusätzliches Flipflop, das auf der gegenüberliegenden Flanke getaktet wird. Die Verwendung dieses Ausgangs zur Speisung des nect SR eliminiert alle Setup/Hold-Probleme (aber es reduziert die maximale Taktfrequenz).

Ich denke, Sie können den gleichen Effekt erzielen (eine Art Armenimplementierung der verzögerten Ausgabe), indem Sie die geraden 595er mit dem einfachen Takt und die ungeraden 595er mit dem invertierten Takt takten. Aber ich habe das nie wirklich hinbekommen.

Das Takten von abwechselnden 595ern mit entgegengesetzten Taktflanken beschränkt einen auf die Verwendung von 15 Bits für jedes Paar von 595ern (nach jeder Flanke, bei der der zweite 595 getaktet wird, enthält seine erste Stufe dieselben Daten wie die letzte Stufe des vorherigen, was bedeutet, dass die 595er zusammen nur 15 unterschiedliche Bits enthalten).
Sinnvollerweise wird die letzte Stufe mehr oder weniger als verzögerte Stufe in einem 4094 verwendet.
Schön, dass der 4094 so eine verzögerte Stufe hat. Ich frage mich, warum Latches, die an einer Kante abtasten und an der anderen ändern, nicht häufiger vorkommen? Wenn ein Chip intern ansteigende und abfallende Flanken in Impulse umwandeln kann, die ausreichen, um ein transparentes Latch zu betreiben, die jedoch kürzer als die minimal und maximal zulässigen Taktimpulsbreiten sind, wäre die einzige zusätzliche Logik, die gegenüber einem Einzelflankentakt erforderlich ist, in die Clock-Conditioning-Schaltung.
Ich denke, das liegt daran, dass Ihre Annahme nicht zutrifft. Ein Register ist kein Latch mit Taktkonditionierung, es sind zwei transparente Latches, von denen eines vom invertierten Takt angesteuert wird. Ihre Idee würde zwei solcher Register (oder vielleicht drei Latches) erfordern. Ich denke, die Nützlichkeit eines solchen Geräts hat die zusätzlichen Schaltkreise und die schlechtere Höchstgeschwindigkeit nicht ausgeglichen.
Es gibt eine Reihe von Möglichkeiten, wie Register implementiert werden können. Eine Common-Register-Implementierung ist im Wesentlichen ein Master/Slave-Flip-Flop, bei dem der Slave so ausgelegt ist, dass er ungefähr zur gleichen Zeit mit der Weitergabe von Daten beginnt, wenn der Master aufhört, sie weiterzugeben. Viele Vorrichtungen haben jedoch in der Vergangenheit das Latchen gehandhabt, indem transparente Latches zusammen mit zwei nicht überlappenden Taktsignalen verwendet wurden. Typischerweise waren die nicht überlappenden Uhren um 180 Grad phasenverschoben, aber es gibt keinen Grund, warum sie das sein müssten. Dieser Ansatz führte dazu, dass in den Teilen des Geräts, die nicht mit der höchstmöglichen Geschwindigkeit laufen mussten, ...
... die einzigen Timing-Spezifikationen, die man erfüllen musste, waren "ist es schnell genug" und "wird die Kappe lange genug halten". Die einzigen Rennbedingungen irgendwo im Gerät waren in dem kleinen Teil der Schaltung, der die Zweiphasentakte erzeugen musste; überall sonst könnte man jede beliebige Kombination von Transistoren durch "ideale" ersetzen, ohne den Betrieb der Schaltung zu beeinträchtigen.
@supercat: Schaltkreise, die von zwei nicht überlappenden Colocks angetrieben werden, sind zwar einfacher herzustellen (weniger Komponenten verwenden), werden aber AFAIK nicht in den Chips wie dem erwähnten TS verwendet. (Erinnert mich an das Lesen von 8080-Datenblättern und den Versuch, eine Schaltung zu entwerfen, um Taktsignale für diesen Chip zu erzeugen - zu schwierig für einen 16-Jährigen, sie hatten nicht einmal TTL-Pegel! - Hurra, als der Z80 solche Versuche unnötig machte).
Übrigens finde ich es merkwürdig, dass ich keine Schieberegister kenne, die mehr als zwei Taktphasen verwenden, ungeachtet der Tatsache, dass ein Schieberegister, das beispielsweise vier Taktphasen verwendet, nur vier transparente Latches benötigen würde, um jeweils drei Bits zu halten (während eines, das verwendet entweder zwei Taktphasen oder Master/Slave-Latches würden effektiv zwei Latches pro Bit benötigen.

Ja, aber was der Schaltplan nicht zeigt, ist, dass der IC-Designer eine kleine Verzögerung auf der Datenleitung eingebaut hat. In einer normalen Situation würden die Daten einige Logikgatter durchlaufen und "echte Arbeit" leisten, bevor sie abgetastet werden

Es ist völlig vernünftig, dass Daten nicht durch Logikgatter gehen; Wenn dies jedoch die Haltezeit verletzt, müssen Sie explizite Verzögerungen hinzufügen.

Mein Problem mit all dem ist, dass es nicht robust ist (vielleicht nicht das beste Wort). Die Visualisierung von Dingen auf einem Logikanalysator ist weniger nützlich, da sich die Datenleitungen praktisch synchron mit der steigenden Flanke des Takts ändern. Zufällige Fehler, die durch Th>Tpd verursacht werden, sind nicht wirklich sichtbar und bleiben unentdeckt. Wenn ich ein weiteres Schieberegister einer anderen Technologie in Reihe schalte, das längere Haltezeiten erfordert, funktioniert die Schaltung nicht, egal wie langsam ich den Takt wähle.

Sie sprechen zwei Probleme an. Nennen wir die beiden synchronen Schaltungen A und B, wobei A in B einspeist und beide den gleichen Takt teilen

  1. Die Schaltung funktioniert nicht, wenn Gesamt-T pd(A) < T h(B) ist , wobei T pd die kombinatorische Verzögerung der Uhr ist. Ist das wahr? Absolut!Sie sind der Schaltungsdesigner und es liegt in Ihrer letzten Verantwortung sicherzustellen, dass die Schaltung funktioniert. In Wirklichkeit ist es normalerweise kein Grund zur Sorge; Selbst wenn Sie einen Registerausgang direkt in den Eingang eines anderen einspeisen, ist der Designspielraum der Chipspezifikationen hoch. Für einen NXP 74HC595 beispielsweise beträgt die typische Ausbreitungsverzögerung bei einer 4,5-V-Versorgung 19 ns, die erforderliche Haltezeit 3 ​​ns und die typische Haltezeit -2 ns - kein Problem. Für einen TI SN74LV595A bei 5 V beträgt die typische Ausbreitungsverzögerung 4,5 ns, die minimale Ausbreitungsverzögerung 1 ns und die erforderliche Haltezeit 2 ns. Könnte dies ein Problem sein, wenn die Ausbreitungsverzögerung und die Haltezeiten im ungünstigsten Fall sind? Absolut. Könnte es ein Problem sein, wenn Sie einen SN74LV595A in einen NXP74HC595 kaskadieren? Absolut.

  2. „Die Visualisierung von Dingen auf einem Logikanalysator wird weniger nützlich sein, da sich die Datenleitungen praktisch synchron mit der steigenden Taktflanke ändern.“ WAHR. Nehmen Sie einen Tipp von SPI-Bussen und stellen Sie den Logikanalysator so ein, dass er die Daten an der fallenden Taktflanke abtastet. Die Regeln von SPI sind einfach: Sie aktualisieren die Ausgänge an einer Kante und tasten die Eingaben an der anderen ab .