8b10b-Code
Der 8b10b-Code (auch 8b/10b-Code) ist ein 1983 von Albert Xavier Widmer und Peter Franaszek entwickelter Leitungscode in der Telekommunikationstechnik. Es werden 8 Informations-Bit durch 10 Leitungs-Bit kodiert. Es wird ein vollständiger Gleichspannungsausgleich gewährleistet, weiterhin kann der Takt und die Symbolgrenzen einfach rückgewonnen werden. Die Signalrate erhöht sich um 25 Prozent. Ein ähnlich aufgebauter Code ist der 16b18b-Code (auch Albert Xavier Widmer) mit nur 12,5 Prozent Overhead.
Andere, deutlich effizientere Codes sind der 64b66b-Code mit 3 Prozent Overhead, welcher 64 Bit auf 66 Bit abbildet, und der 128b130b-Code mit nur 1,5 Prozent Overhead. Allerdings gewährleisten diese Codes Eigenschaften (wie Gleichspannungsfreiheit, Wiederholrate gleicher Pegel, Symbolgrenzenerkennung) nur noch im statistischen Mittel.
Eigenschaften
Der 8b10b-Code benutzt zur Übertragung eines Oktetts ein 10 Bit langes Codewort. Dabei werden folgende Eigenschaften erfüllt:
Gleichspannungsausgleich
Die Anzahl der Einsen pro Codewort unterscheidet sich maximal um zwei von der Anzahl der Nullen. Dies ergibt drei Typen von Codewörtern:
- 252 neutrale (neutral disparity): gleiche Anzahl von „1“ und „0“, also fünfmal „1“ und fünfmal „0“
- 210 positive (positive disparity): sechsmal „1“ und viermal „0“
- 210 negative (negative disparity): viermal „1“ und sechsmal „0“
In einem Datenstrom treten damit „1“ und „0“ mit gleicher Wahrscheinlichkeit auf. Überträgt man nun eine „1“ als eine positive Spannung +U und eine „0“ als eine negative Spannung −U, so hat das kodierte Signal (bei gegebener Datenrate) eine untere Grenzfrequenz, d. h., über eine längere Bitfolge mittelt sich die Spannung heraus, so dass das Signal keinen Gleichspannungsanteil enthält. Dieser Gleichspannungsausgleich erlaubt zum Beispiel eine kapazitive oder induktive Kopplung von Sender und Empfänger.
Maximale Anzahl gleicher Pegel
Bei reiner Datenübertragung ist durch das Design der Kodierung die Anzahl gleicher Pegel auf der Leitung (maximum run length) auf max. 5 Takte begrenzt, spätestens nach 5 Takten erfolgt ein Pegelwechsel. Drei Steuerworte (die keine Nutzdaten 0...255 darstellen) enthalten absichtlich 6 Takte ohne Pegelwechsel (genannt Kommas) an einer bestimmten Stelle innerhalb der 10 übertragenen Pegel pro Datenwort. Dies ermöglicht eine einfache Rückgewinnung der 8b10b-Symbolgrenzen. Die Taktrückgewinnung selbst stellt durch die häufigen Pegelwechsel sehr geringe Anforderungen.
Disparity
Der 8b10b-Encoder hat als Eingangsgröße neben dem zu kodieren Datenwort (D.00.0 bis D31.7 für Datenwort 0...255, 12 weitere Steuerwort) noch die vorausgegangene Disparity als Eingangsgröße. Daraus berechnen sich die 10 Leitungsbit sowie die folgende Disparity, die für die Kodierung des folgenden Datenworts benutzt wird.
voraus- gegangene Disparity |
Disparity des Codeworts und (folgende Disparity) | ||
---|---|---|---|
−1 | ±0 | +1 | |
−1 | 🛇 |
Nein→ (−1) |
Ja↑ (+1) | Ja
+1 | ↓ (−1) |
Ja→ (+1) |
Ja🛇 | Nein
Es wird dafür gesorgt, dass die Disparity nur die Werte −1 oder +1 annehmen kann.
K-Wörter
Neben 256 möglicher Datenworte können 12 mögliche Steuerworte übertragen werden. Diese Steuerworte nennt man K-Wörter. Sie sind für Steuerungsfunktionen in übergeordneten Protokollschichten notwendig. Drei dieser K-Wörter haben ein Bitmuster, das nicht über Codewortgrenzen hinweg entstehen kann. Das heißt, die letzten Bit eines Codewortes zusammen mit den ersten Bit eines nachfolgenden Codewortes können niemals das Bitmuster eines dieser drei speziellen K-Wörter ergeben. Das nutzt man in seriellen Datenströmen, um den Anfang und das Ende eines Codewortes zu erkennen. Diese drei speziellen K-Wörter nennt man auch Komma-Wörter.
Fehlererkennung
Da von den durch 10 Bits möglichen darstellbaren 1024 Kombinationen nicht alle genutzt werden und außerdem strenge Auswahlregeln zu beachten sind, können einzelne Bitfehler mit einer gewissen Wahrscheinlichkeit (ca. 75 Prozent) detektiert werden. Es können allerdings auch gültige falsche Datenworte entstehen. Für gesicherte Übertragungen sind allerdings zusätzliche Prüfsummen oder eine Vorwärtsfehlerkorrektur erforderlich.
Anwendungen
Der 8b10b-Code findet u. a. in folgenden Übertragungsstandards Verwendung:
- PCI-Express (nur 1.x und 2.x; 3.x verwendet 128b/130b)
- Serial ATA (bis SATA III)
- Serial Attached SCSI (bis SAS-3; ab SAS-4 wird 128b/150b verwendet[1])
- Fibre Channel (bis 8GFC; 10GFC, 16GFC verwenden 64b/66b)
- InfiniBand (bis QDR; FDR10, FDR und neuer verwenden 64b/66b)
- FireWire 800, S1600, S3200 („beta mode“)
- DisplayPort (bis Version 1.4)
- DVI und HDMI (bis Version 2.0) (TMDS)
- CPRI[2]
- OBSAI[3]
- USB 3.1 (USB bis 2.0 verwendet NRZI, USB 3.1 128b/132b)[4][5], Abkehr bei USB 3.2 zu 128b132b-Kodierung
- Ethernet mit -X-PCS-Code, bis 1-Gigabit-Ethernet (keine Verwendung mehr bei allen Nachfolgern)
Die Hoch-Zeit des 8b10b-Codes waren die Jahre 2007 bis 2013. In Neuentwicklungen sind diese den Scambling-Codes (64b66b bis 512b514b) und auch deren Nachfolgern (integrierte Fehlerkorrektur, Mehrpegel-Kodierungen) gewichen.
Siehe auch
Einzelnachweise
- ↑ SAS Protocol Layer - 4 (SPL-4) draft 08b. INCITS, 18. Juli 2016, abgerufen am 21. Juli 2016.
- ↑ http://www.cpri.info/spec.html CPRI Common Public Radio Interface
- ↑ http://www.obsai.com Open Base Station Architecture Initiative, siehe RP Specifications: RP3_Vx.x.pdf (Physical Layer)
- ↑ https://www.heise.de/ct/hotline/USB-2-0-ausgebremst-325842.html
- ↑ USB3.0 Beschreibung auf itwissen.info ( vom 27. Februar 2009 im Internet Archive)
Weblinks
- A. X. Widmer, P. A. Franaszek: A DC-Balanced, Partitioned-Block, 8B/10B Transmission Code. Veröffentlichung im IBM Journal of Research and Development in der IBM Website. Abgerufen am 26. April 2015.
- 8b/10b encoding auf knowledgetransfer.net. Abgerufen am 26. April 2015.