Auftritt: Leitungscodierung
Der Faktor zehn zwischen Transfer- und Datenrate kommt daher, dass die Bits nicht so über den Link geschickt werden, wie sie aus dem Serialisierer kommen. Sie werden, bevor sie den Chip als elektrisches Signal verlassen, codiert.
Bis zur Version 2.x nutzte PCIe eine 8b/10b-Codierung, ebenso wie beispielsweise HDMI oder SATA. Hierbei ersetzt der Sender jeden 8-Bit-Wert durch ein 10-Bit-Codewort, welches nach festen Regeln erzeugt wird. So kann der Empfänger die ursprünglichen Daten wiederherstellen.
Aber was soll diese Verschwendung? Kurz gesagt ist das Ziel, im ausgehenden Bitstrom möglichst gleichmäßig Einsen und Nullen vorkommen zu lassen. Hierfür gibt es vier Gründe, die wir uns im Folgenden ansehen.
Richtig spannend wird es später noch bei PCIe 3.0 - hier wurde nämlich die Datenrate verdoppelt, die Transferrate jedoch nicht.
Sender und Empfänger im Gleichtakt
Kommen wir zum ersten arkanen Ritual: der Sender-Empfänger-Synchronisation. Über sie vermittelt der Sender telepathisch dem Empfänger seinen Sendetakt.
Weniger dramatisch ausgedrückt: Moderne serielle Schnittstellen schieben über die Signalleitungen nicht ausschließlich Daten hin und her. Anhand des Datensignals synchronisiert der Empfänger zusätzlich das Taktsignal für seinen Deserialisierer. Das ist erforderlich, damit das Datensignal zum richtigen Zeitpunkt ausgewertet werden kann. Andernfalls misslingt die Rekonstruktion der gesendeten Werte.
Bei einer Transferrate von mehreren Gigabit pro Sekunde liegt jedes Bit nur wenige Hundert Pikosekunden an. Stabil ist der entsprechende Spannungswert sogar noch kürzer, da das ankommende Signal keine perfekte Rechteckform hat.
Der Grund hierfür ist, dass die Signalleitung neben dem resistiven (Widerstand) auch einen kapazitiven (Kondensator) und induktiven (Spule) Anteil hat. Der kapazitive und induktive Anteil bilden - bei Signalraten im Gigahertzbereich - ein analoges Filter. Dieses dämpft die Schwingungsanteile eines Rechtecksignals unterschiedlich stark.
Hierdurch ist die sogenannte Flankensteilheit begrenzt, also die Rate der Spannungsänderung. Hinzu kommt gegebenenfalls die gegenseitige Beeinflussung nebeneinanderliegender Leiter. Das sogenannte Überschwingen hingegen ist bei differentiellen Verbindungen mit gutem Impedanzabgleich ein kleines Problem.
Im Ergebnis ist das Datensignal eher ein Trapez als ein Rechteck. Ob Sender und Übertragungskanal gut zusammenspielen, wird anhand des sogenannten Eye diagram überprüft. Es überlagert viele Signalwechsel und sollte in der Mitte einen großen Bereich haben, in den sich kein Signal verirrt.
Idealerweise wertet der Empfänger das Signal in der Mitte des "Auges" aus. Ist er zu früh oder zu spät dran, erhält er falsche Daten. Am einfachsten wäre es natürlich, hätten Sender und Empfänger dasselbe Taktsignal.
Leider spielt hier die Physik nicht mit. Oft ist nicht einmal ein gemeinsamer Referenztakt möglich, so dass Sender und Empfänger jeweils eigene Oszillatoren zur Taktgewinnung nutzen. Deren Frequenz weicht fertigungsbedingt immer leicht voneinander ab und schwankt auch zeitlich.
Selbst mit Referenztakt wie bei PCIe ist eine Synchronisation erforderlich. PCIe verwendet ein 100-MHz-Referenzsignal, aus dem der Bittakt von mehreren GHz erzeugt wird. Die hierzu verwendeten Schaltkreise, sogenannte Taktgeneratoren (clock synthesizers), unterliegen natürlich ebenfalls Fertigungstoleranzen. So kann es sein, dass der Empfänger den Referenztakt mit 49,997 multiplizieren muss, um den Takt zu erhalten, den der Sender für 5 GHz hält.
Um seinen Bittakt mit dem des Senders synchron zu halten, muss der Empfänger regelmäßig abgleichen, ob diese übereinstimmen. Wie aber das tun, ohne den Sendertakt zu kennen?
Taktabweichungen korrigieren
Möglich wird dieser Abgleich über die Auswertung der Länge des Zeitraums zwischen einem Wechsel des eingehenden Signals, der als Flanke bezeichnet wird, und dem Auswertezeitpunkt des Empfängers. Ist der Zeitraum seit dem letzten Abgleich kürzer geworden, läuft der Sendertakt schneller - der Empfänger muss also seinen Takt erhöhen. Ist hingegen der Zeitraum zwischen Flanke und Auswertezeitpunkt länger geworden, läuft der Empfängertakt zu schnell und muss reduziert werden.
Wichtig ist also, dass eine Taktabweichung korrigiert wird, bevor der Auswertezeitpunkt des Empfängers den zulässigen Bereich des eingehenden Signals verlässt. Aufgrund der begrenzten Anstiegs- und Fallrate des Signals sowie Schwingungen bei Signalwechseln kann seine Auswertung nämlich erst gewisse Zeit nach dem Wechsel zuverlässig erfolgen. Abgeschlossen muss sie natürlich sein, bevor der Sender das nächste Signal beginnt.
Anhand der Stabilität von Sender- und Empfängertakt kann der maximal zulässige Abstand zwischen zwei Signalflanken (sprich Bitwechseln) berechnet werden. Dies ist eine statistische Bewertung, da die Taktstabilität eine Zufallsvariable ist. Durch die Codierung ergibt sich die maximale Zeitdauer zwischen zwei Signalflanken. Der Empfängertakt muss ausreichend stabil sein, um den Auswertungszeitpunkt währenddessen innerhalb des gültigen Bereichs des Eingangssignals zu halten.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed
Serielle Schnittstellen: Wie funktioniert PCI Express? | Gleichstromfreiheit - in der Ruhe liegt die Kraft |
Seh ich genauso. ich fand den Matapher nicht wirklich hilfreich und irgendwie fehl am Platz.
Jetzt kommt mit der nächsten Gen mal mehr als drei Pegel, ja wahnsinn! Ja ich weiss...
Ich auch. Der war sehr unterhaltsam und lehrreich. Perfekt.
Danke für die Korrektur. Dass elektrische Signale analog sind, ist aus der Sicht ja...