Guten Morgen Forum,
ich habe ein Verständnisproblem zum Thema Schieberegister. Angenommen
ich habe ein Schieberegister. Dieses besitzt einen Daten Eingang und
einen Daten Ausgang, dazu kommt noch ein Clock Eingang, dann würde man
mehrere dieser Schieberegister ja wie folgt zusammen schalten. Register
1 mit seinem Dateneingang an den µController. Register 2 mit dem Daten
Eingang an den Datenausgang des ersten Registers. Register 3 mit seinem
Daten Eingang an den Daten Ausgang des zweiten Registers und so weiter
und so fort. Das Clock Signal wird jedoch nicht durch den
Schieberegister Baustein geleitet, sondern alle Register erhalten den
gleichen Takt. Werden also parallel mit diesem Verbunden.
Nun sollte es aber einen Delay zwischen dem Moment, wo der Clock
schaltet und dem Moment, wo am Daten Ausgang die Daten verfügbar werden,
geben. Demnach würde jedes Schieberegister ein Delay in die Daten
einfügen und wenn man zu viele Register hintereinander schaltet dürfte
doch irgendwann das Timing zwischen Daten und Clock verletzt werden,
oder täusche ich mich da?
Müsste man dann nicht zu jedem Schieberegister noch einen weiteren
Baustein spendieren, der das Clock Signal entsprechend dieser Eingang /
Ausgang Verzögerung der Daten ebenfalls verzögert?
Danke für die Erleuchtung,
Tom
Tom schrieb:> Nun sollte es aber einen Delay zwischen dem Moment, wo der Clock> schaltet und dem Moment, wo am Daten Ausgang die Daten verfügbar werden,> geben.
Guck dir mal anhand eines konkreten Schieberegisters das Timing an,
insbesondere mit welcher Clock-Flanke die Daten vom Eingang übernommen
werden und wann die Daten am Ausgang gültig werden.
Tom schrieb:> Guten Morgen Forum,>> ich habe ein Verständnisproblem zum Thema Schieberegister. Angenommen> ich habe ein Schieberegister. Dieses besitzt einen Daten Eingang und> einen Daten Ausgang, dazu kommt noch ein Clock Eingang, dann würde man> mehrere dieser Schieberegister ja wie folgt zusammen schalten.
Spar dir die Lyrik und zeichne einen Schaltplan, siehe Netiquette.
> Nun sollte es aber einen Delay zwischen dem Moment, wo der Clock> schaltet und dem Moment, wo am Daten Ausgang die Daten verfügbar werden,> geben.
Sicher, das ist immer so.
> Demnach würde jedes Schieberegister ein Delay in die Daten> einfügen und wenn man zu viele Register hintereinander schaltet dürfte> doch irgendwann das Timing zwischen Daten und Clock verletzt werden,> oder täusche ich mich da?
Du täuscht dich, denn es ist ja keine Verzögerung (neudeutsch delay),
welche sich über mehrere Stufen summiert sondern nur bis zu nächsten
Stufe des Schieberegisters läuft. Dort ist wieder ein Eingang eines
FlipFlops, der erst bei der nächsten Taktflanke die neuen Daten
übernimmt.
> Müsste man dann nicht zu jedem Schieberegister noch einen weiteren> Baustein spendieren, der das Clock Signal entsprechend dieser Eingang /> Ausgang Verzögerung der Daten ebenfalls verzögert?
Da das so ziemlich alle Schaltungen dieser Welt NICHT tun, ist doch wohl
eher deine Theorie falsch ;-)
Tom schrieb:> Müsste man dann nicht zu jedem Schieberegister noch einen weiteren> Baustein spendieren, der das Clock Signal entsprechend dieser Eingang /> Ausgang Verzögerung der Daten ebenfalls verzögert?
Siehe Datenblatt: solange die Zeit zwischen Daten und Clock abzüglich
der Verzögerung über der Setup Time bleibt, ist alles OK.
Nun, das Datenblatt zeigt das Timing, das fuer ein korrektes
Funktionieren erforderlich ist. Welche Setup und Holdzeiten einzuhalten
sind. Die Gedanken des Posters gehen in die richtige Richtung. Und bei
sehr schnellen Schieberegistern muss man sich diesbezueglich
tatsaechlich Muehe geben.
Bis dorthin .. einfach die passende Logikfamilie waehlen, die schnell
genug ist.
Ende der Fahnenstange ist dann bei MC100EP446 fuer parallel to serial
und MC100EP445 fuer serial to parallel. Beide fuer bis GHz.
Schneller geht dann nur noch mit SERDES, aber dort nimme man dann
fertige Loesungen, zB 32Bit parallel zu 6GBit Serial oder so.
Gut, dann mit Bild.
Die Daten werden mit der fallenden Clock Flanke am Ausgang des
Schieberegisters gültig. Mit der steigenden Flanke werden sie ins
Register übernommen. Td ist das Delay zwischen fallender Flanke und dem
gültigen Anliegen der Daten am Ausgang. Ergo ist Clock für alle
Schieberegister gleich, müssten sich diese Td aufaddieren, bis man bei
genügend Bausteinen eine Timingverletzung hat. Allerdings ist ja nicht
der Zeitpunkt wann die Daten anliegen der Bezugszeitpunkt, sonder der
Moment wo die Flanke fällt. Nach dieser Denkweise fügt zwar jeder
Baustein das Td zwischen Clock und Ausgang ein, aber das ist bei allen
Bausteinen gleich und addiert sich nicht, da die Daten durch die
steigende Flanke des Clock um Td früher übernommen werden.
Tom schrieb:> Gut, dann mit Bild.>> Die Daten werden mit der fallenden Clock Flanke am Ausgang des> Schieberegisters gültig.
Nicht zwingend. Das was du beschreibst ist ein SPI-Modus.
> Mit der steigenden Flanke werden sie ins> Register übernommen. Td ist das Delay zwischen fallender Flanke und dem> gültigen Anliegen der Daten am Ausgang. Ergo ist Clock für alle> Schieberegister gleich, müssten sich diese Td aufaddieren, bis man bei> genügend Bausteinen eine Timingverletzung hat.
Nö. Ich sagte nicht umsonst, zeichne einen SCHALTPLAN! Dann würdest du
sehen, daß nun die allererste Stufe des ersten Schieberegisters dieses
Timing sieht.
> Allerdings ist ja nicht> der Zeitpunkt wann die Daten anliegen der Bezugszeitpunkt, sonder der> Moment wo die Flanke fällt. Nach dieser Denkweise fügt zwar jeder> Baustein das Td zwischen Clock und Ausgang ein, aber das ist bei allen> Bausteinen gleich und addiert sich nicht, da die Daten durch die> steigende Flanke des Clock um Td früher übernommen werden.
Naja, fast richtig. Genauer. In den einzelnen Stufen des
Schieberegisters startet das Timing immer neu, es gibt ein zeitliches
Auffrischen, neudeutsch retiming der Daten. Damit kann man tausenden
FlipFlops in Reihe schalten, ohne daß diese Kette langsamer wird.
Lediglich der Takt muss mit elativ geringer Verzögerung und auch geinger
Toleranz (Verschiebung, nedeutsch skew) an die vielen FlipFlops geführt
werden. Siehe Taktung FPGA/CPLD.