Falsche Daten wurden eingetaktet, wenn direkte Daisy Chains von 594/595-Schieberegistern verwendet wurden

Ich war etwas überrascht, diese Frage und ihre Antwort zu finden .

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Beim Verketten mehrerer HC595- oder HC594-Schieberegister mit gemeinsamem SCLK (Serial Input Clock) und RCLK (Output Register Clock) kann es tatsächlich zu einer Timing-Verletzung kommen, die dazu führt, dass falsche Daten in SDI der 'späteren' Chips (SR 2 auf der rechten Seite des Schaltplans)?

Die Antwort im obigen Link impliziert, dass beim Empfang einer SCLK-Flanke SDI-Daten abgetastet werden könnten, nachdem die SDO-Daten aus dem vorherigen Register aktualisiert wurden. Ich habe nie darauf geachtet, weil ich dachte, dass die Ausbreitungsverzögerung dies konstruktionsbedingt unmöglich machen würde. Mein Verständnis war, dass der CLK immer zuerst ankommen würde und die SDO-Aktualisierung durch die Ausbreitungsverzögerung von CLK zu SDO innerhalb des vorhergehenden Chips in der Kette verzögert würde.

Beispiele:

Generische 74HC- Teile scheinen zu bestätigen, dass die minimal erforderliche SDI-Haltezeit normalerweise < 3 ns beträgt, während die minimale CLK-zu-SDO-Ausbreitungsverzögerung mindestens 12 ns beträgt.

Die schnellere LVC- Serie ist da nicht ganz so eindeutig ( Beispiel von Nexperia ): Die minimale Laufzeitverzögerung beträgt nur 1,5 ns, die typische Haltezeitanforderung liegt aber bei etwa 0,1 ns, wobei der absolute Worst-Case-Wert gleich dem angegeben wird CLK-zu-SDO-Ausbreitungsverzögerungswerte. Das deutet für mich darauf hin, dass selbst der LVC so ausgelegt ist, dass SDO den CLK in einer Daisy-Chain niemals überholen kann.

Habe ich Unachtsamkeit/Glück gehabt? Wenn ja, unter welchen Bedingungen können diese Verletzungen auftreten und wie können sie behoben werden, vorausgesetzt, ich möchte immer noch einen hohen SCLK von ~ 20 MHz verwenden?

Ein weiterer Faktor, der für ein korrektes Timing spricht: Haltezeit und Verzögerungen beziehen sich auf 1,5 V (Tabelle 8), aber Schaltpegel liegen darunter / darüber, dh später.
Ich habe nicht überprüft, was Sie für verdächtig halten, aber es klingt einfach nicht angenehm. Wahrscheinlich sehen Sie das Artefakt der SCLK- und RCLK-Korrelation. Was ist der Versatz zwischen SCLK & RCLK?
@jay, bitte lies die Frage und insbesondere den Link noch einmal. Ich behaupte nichts, alle Schaltungen, in denen ich verkettete 595er verwendet habe, haben einwandfrei funktioniert. Die Antwort im Link behauptet, dass falsche Daten in SDI ein häufiges Problem aufgrund von Timing-Problemen zwischen SDO/SDI und SCLK sind. RCLK spielt für die Frage keine Rolle, es wird nur der Vollständigkeit halber gezeichnet
tobalt Ich habe Ihr und Tis 74HC595-Datenblatt gelesen, und diese "diese Frage". @WoutervanOoijen sollte die Möglichkeit haben, es zurückzuziehen, bevor wir alle verwirrt werden. Seine Aussage entbehrt jeglicher Grundlage: „Der Daisy-Chain-Ausgang ändert sich mit der gleichen Taktflanke wie der Eingang der nächsten Chip-Samples.“ Das Datenblatt sagt nur das Gegenteil

Antworten (1)

die minimale Ausbreitungsverzögerung beträgt nur 1,5 ns, aber die typische Haltezeitanforderung liegt bei etwa 0,1 ns, wobei der absolut ungünstigste Wert gegeben ist, der derselbe ist wie die CLK-zu-SDO-Ausbreitungsverzögerungswerte. Dies legt für mich nahe, dass sogar der LVC so ausgelegt ist, dass SDO den CLK in einer Daisy-Chain niemals überholen kann.

Nun ja, es ist für die Verwendung in Daisy Chain konzipiert, aber es gibt nicht viel Spielraum!

IMO ist es wichtig, das Layout mit diesen Chips, insbesondere den LVC-Chips, nicht zu vermasseln. Das ist definitiv nicht die Art von Chips für Prototypen mit fliegenden Drähten überall ...

Sie könnten die Uhr "gegenläufig" zu den Daten laufen lassen, sodass der letzte Chip in der Daisy-Chain des Schieberegisters zuerst seine Taktflanke erhält. Dann hätte es etwas mehr Haltezeit, wenn sich der Takt zum vorherigen Chip ausbreitet, der seinen Ausgang aktualisiert, und der sich in die andere Richtung zum nächsten Chip zurück ausbreitet. Diese Anordnung würde also die Laufzeiten der Takt- und Datenspuren zwischen den Chips zum Zeitspielraum hinzufügen, was sie zu einem Vorteil statt zu einem Problem macht.

Lässt man den Takt jedoch "gegenläufig" zu den Daten laufen, muss natürlich die Laufzeit in beiden Spuren unter einem Taktzyklus (mit Spielraum) liegen, damit jeder Chip das richtige Bit ohne Timing-Verletzung bei seinem Takt bekommt Eingang sieht eine Kante.

Beachten Sie, dass dies nichts mit der Frequenz zu tun hat, da in diesem Fall Setup/Hold-Verletzungen in der Nähe der Taktflanke auftreten, wenn sich Takt und Daten über ihre jeweiligen Pfade ausbreiten. Die Taktfrequenz bestimmt nur, wie oft es pro Sekunde passiert, aber nicht, ob die Verletzung auftritt oder nicht. Die Frequenz würde eine Rolle spielen, wenn sie so hoch wäre, dass die Summe aus Rüst- und Haltezeiten plus Zubehör nicht in einen Zeitraum passen würde.

Es gibt auch das Problem der Signalintegrität auf der Uhr, da sie viele Takteingänge speisen wird: Wenn sie mit langen Stubs geroutet oder nicht abgeschlossen wird, kann es zu Klingeln, doppeltem Takten oder unordentlichen Kanten kommen. Ich möchte, dass die Taktflanke sauber und schnell ist, ohne in der Totzone zu verweilen, damit Unterschiede in der Schwellenspannung zwischen den Chips nicht zu mehr Zeitunsicherheit führen.

Wenn es den Ausgang an einer Flanke des Takts ändern und den Eingang an der anderen Flanke abtasten würde, hätte es einen Zeitspielraum von einem halben Zyklus, wodurch es selbst mit dem schlechtesten möglichen Layout funktionieren würde. Das würde aber auch die maximale Taktrate halbieren und den Chip weniger brauchbar machen.

Ich verstehe, also läuft es darauf hinaus, das Layout nicht zu vermasseln (dem ich immer vierfache Aufmerksamkeit schenke). Wenn ich einen langen und kurvenreichen SCLK-Trace zwischen den Chips laufen lasse, könnte der SCLK tatsächlich zu lange dauern :) Meine Anmerkung zu den 20 MHz war, weil ich offensichtlich R oder C zu SDO hinzufügen könnte, um die SDOs zu verlangsamen und zu garantieren, dass sie es tun würden später umschalten, aber das würde natürlich das Timing-Budget bei schnellen SCLK-Raten auffressen.
@tobalt R/C wäre auch mein Vorschlag. Zwischen der Taktperiode von 50 ns und der möglichen Verletzung der Haltezeit von 0,x ns liegt immer noch ein Faktor von 100.
Tatsächlich würde ein Widerstand am Datenausgang wahrscheinlich ausreichen, um das Signal nur ein wenig zu verzögern, indem die Anstiegsgeschwindigkeit reduziert wird, ohne zusätzlichen Strom zu verbrauchen. Diese Chips werden in so ziemlich jedem existierenden Matrix-LED-Panel verwendet, und das funktioniert gut ...
Die Kappe auf der Datenleitung kann den Zweck erfüllen, während von 20 MHz Taktgeschwindigkeit gesprochen wird, durch den Nebeneffekt, nicht als die tatsächliche Auflösung. Es tötet jedoch den Rauschabstand, während die Taktgeschwindigkeit nicht die Betriebsgeschwindigkeit der Schaltung darstellt, während etwas mit der Signalintegrität zu tun hat. Ich wäre überrascht, wenn irgendein Unternehmen 74HC-Geräte mit solch unpraktischen Timing-Spezifikationen herstellen würde.
@jay Ich denke, was ich aus dieser Frage und Bobs Antwort nehme, ist, dass es mir weiterhin egal sein kann, ob ich sorgfältig layoute und besonders, wenn ich bei HC bleibe. In der Tat könnte LVC etwas knifflig werden, aber es wird für meine Anwendungen nicht benötigt. Wenn ich etwas wirklich Schnelles wie 100 MHz brauche, das LVC erfordert, sehe ich wiederum nicht viel Spielraum für RC-Elemente auf SDO. Stattdessen würde ich mich in diesem Fall darauf verlassen, dass diese Chips für Daisy-Chaining ausgelegt sind, sodass sie bei richtiger Anordnung funktionieren sollten.
@tobalt, ich stimme zu! Ich bin froh zu sehen, dass es geregelt wird, während wir Woutervan Ooijen ein Zimmer für seine Pause geben können. :)
LED-Matrix-Displays sind als Ladenschilder weit verbreitet und laufen höchstwahrscheinlich alle auf einem Haufen HC595 ...