8b10b-Code
Der 8b10b-Code (auch 8b/10b-Code) ist ein 1983 von Albert Widmer und Peter Franaszek entwickelter Leitungscode in der Telekommunikationstechnik. Es werden 8 Informations-Bit durch 10 Leitungs-Bit kodiert. Es ist ein vollständiger Gleichspannungsausgleich gewährleistet und eine einfache Taktrückgewinnung aus dem Datensignal möglich. Die Signalrate erhöht sich um 25 Prozent. Andere, deutlich effizienterere 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.
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 Länge gleicher Bit
Die maximale Länge gleicher Bit (maximum run length) wird durch entsprechende Auswahl der Codewörter bei reiner Datenübertragung auf fünf beschränkt, d. h. spätestens nach fünf Takten wechselt der Pegel. Dies ermöglicht eine einfache Taktrückgewinnung aus dem Datensignal.
Disparity
Der 8b10b-Encoder verarbeitet neben den Daten auch noch die Disparity. Damit wird dem Encoder mitgeteilt, ob er ein Codewort mit positiver oder negativer Disparity erzeugen soll und welche Disparity ein nachfolgendes Codewort haben soll. Hat ein Codewort negative Disparity, muss das folgende Codewort mit positiver Disparity erzeugt werden. Hat das Codewort neutrale Disparity, wird die Disparity-Information des vorherigen Codewortes an das nachfolgende Codewort weitergeleitet. Damit wird sichergestellt, dass im gesamten Datenstrom jederzeit maximal eine 1 oder eine 0 zu viel ist und sich somit über ausreichend viele Codeworte Gleichspannungsfreiheit einstellt. Folglich gibt es für jedes Eingangswort zwei mögliche Codeworte. Welches von beiden verwendet wird, hängt vom jeweiligen Vorgänger ab.
K-Wörter
Neben den zweimal 256 möglichen Datenwörtern gibt es noch zweimal zwölf Codewörter, welche ebenso wie die Datenwörter maximal fünf gleiche aufeinanderfolgende Bit und insgesamt maximal sechs Einsen bzw. sechs Nullen enthalten. Diese Codeworte nennt man K-Wörter, welche für Steuerungsfunktionen in übergeordneten Protokollschichten verwendet werden können. 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 1024 möglichen Kombinationen, welche sich mit 10 Bit darstellen lassen, nicht alle gültige Codewörter sind, ergibt sich die Möglichkeit, einige Bitübertragungsfehler zu erkennen. Allerdings können durch einzelne Bitfehler auch andere gültige Codewörter entstehen, womit eine zuverlässige Erkennung oder gar Korrektur von Übertragungsfehlern unmöglich ist. Daher wird meist zusätzlich eine Prüfsumme zusammen mit den Daten übertragen, um Bitübertragungsfehler mit höherer Zuverlässigkeit zu erkennen.
Anwendungen
Der 8b10b-Code findet u. a. in folgenden Standards Verwendung:
- PCI-Express (nur 1.x und 2.x; 3.x verwendet 128b/130b)
- Serial ATA
- 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
- DVI und HDMI (TMDS)
- CPRI[2]
- OBSAI[3]
- USB 3.0 (USB bis 2.0 verwendet NRZI, USB 3.1 128b/132b)[4][5]
- Ethernet mit -X-PCS-Code, insbesondere für Gigabit Ethernet
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.