-
BEREICH DER
ERFINDUNG
-
Die
vorliegende Erfindung betrifft eine Vorrichtung und ein Verfahren
zur Erzeugung von codierten Daten aus uncodierten Daten unter Verwendung eines
Codes mit lokaler Parität
und eines eindeutigen und einzigen Kommas.
-
DER ERFINDUNG
ZUGRUNDE LIEGENDER ALLGEMEINER STAND DER TECHNIK
-
Übertragungscodes
haben hauptsächlich den
Zweck, das Frequenzspektrum eines seriellen Datenstroms so umzusetzen,
dass ohne weiteres eine Taktrückgewinnung
und eine Wechselspannungskopplung möglich sind. Der Code muss auch Sonderzeichen
außerhalb
des Datenalphabets für Funktionen
wie zum Beispiel Zeichensynchronisation, Rahmenbegrenzer und eventuell
für Abbruch-, Rücksetz-,
Leerlauf-, Diagnosefunktionen usw. bereitstellen. Oftmals in Verbindung
mit Signalformung werden Codes auch verwendet, um das Signalspektrum
besser an bestimmte Kanalerfordernisse anzupassen. In den meisten
Fällen
ist eine Verringerung der Bandbreite durch Einschränkungen
sowohl bei den hochfrequenten als auch den niederfrequenten Anteilen
wünschenswert,
um Verzerrungen im Übertragungsmedium,
insbesondere in elektromagnetischen Kabeln, oder im bandbreitenbegrenzten
Empfänger
zu verringern und die Auswirkungen von Eigen- und Fremdrauschen
zu mindern.
-
Ein
weiterer Aspekt von Codes ist ihre Beeinflussung durch Rauschen
und Fehler bei den Leitungsziffern. Die Redundanz in Verbindung
mit Leitungscodes kann ergänzend
zu anderen Fehlererkennungsmechanismen oder zur Überwachung der Qualität des Kanals
mit geringstmöglichem
Schaltungsaufwand verwendet werden.
-
Solche
Codes haben im Allgemeinen das unerwünschte Merkmal, dass sie Fehlerbündel (error bursts)
in den decodierten Daten noch vergrößern, was eine Erkennung durch
zyklische Redundanzprüfung
schwieriger macht. Ein guter Übertragungscode sollte
diese Auswirkungen auf ein Mindestmaß verringern.
-
Bei
Lichtwellenleitern und gebäudeinternen Drahtleitungen
konzentriert sich das Interesse aus vielen Gründen auf die Familie der Zweistufencodes. Bei
Drahtleitungen werden Codes ohne Gleichspannungs- und mit nur geringem
niederfrequenten Anteil bevorzugt, um die Übertragungsleitung von den
Treiber- und Empfängerschaltungen
galvanisch zu trennen, gewöhnlich
durch reaktive Komponenten, und um die Signalverzerrung auf der
Leitung zu verringern. Obgleich diese Faktoren nicht für Lichtwellenleiter
gelten, sind gute niederfrequente Eigenschaften des Codes aus mehreren
Gründen
hilfreich.
-
Während der
Erörterung
von Codierungsfragen für
den ANSI Fibre Channel (Sachs, 1994) durch die Arbeitsgruppe X3T9.3
des technischen Ausschusses zum Thema Schnittstellen auf Einheitenebene
(Technical Committee on Device Level Interfaces) (1992) waren die
wenigsten Teilnehmer der Meinung, dass die physische Verbindung
eine Vorwärtsfehlerkorrektur
(Forward Error Correction (FEC)) vorsehen sollte. Vier verschiedene
Gründe
für diese
Forderung wurden vorgebracht:
- • Die tatsächliche
Fehlerrate sollte unter 10–15, etwa bei 10–17 liegen.
- • Optische
Komponenten mit weniger strengen Leistungsparametern sind kostengünstiger
zu haben, und die Leistungseinbuße kann mit Vorwärtsfehlerkorrektur
(FEC) ausgeglichen werden.
- • Bei
langen Leitungen muss das Vorkommnis von Übertragungswiederholungen aufgrund
der mit einer Übertragungswiederholung
verbundenen langen Verzögerungen
verringert werden.
- • Es
ist möglich,
dass Echtzeitanwendungen bei Übertragungswiederholungen
gegebenenfalls nicht funktionieren.
-
Einige
der vorstehenden Punkte wurden von Grover (1988) erörtert, und
andere Lösungen,
bei denen Polynomcodes verwendet werden, wurden vorgeschlagen.
-
Die
Arbeitsgruppe prüfte
die Entwürfe
eines bestimmten Vorschlags mit Vorwärtsfehlerkorrektur (FEC). Eine
ausführlichere
Beschreibung findet sich nun in der Literatur (Benz u. a., 1991;
McMahon u. a., 1992; Springer 1992). Der Vorschlag enthielt einen 8B/10B-Code
für Tabellensuchoperationen
und einen gekürzten
8-Bit-Hamming-Code,
der bei jedem 8. Informationsbyte auf die codierten Bits angewendet wird.
Die FEC-Bits werden Manchester-codiert. Ein Paar dieser codierten
Bits wird zwischen die mit dem 8B/10B-Code codierten Bytes eingefügt. Die
Datenübertragungsgeschwindigkeit
wird von 0,8 auf 0,667 verringert. Ein einzelner Fehler in 8 Datenbytes
kann immer korrigiert werden.
-
Andere
Lösungsansätze, Fehlerkorrektur
mit lauflängen-
und gleichspannungsbeschränkten
Binärcodes
zu kombinieren, werden von French (1989), Blaum (1991), Blaum u.
a. (1993), Coetzee u. a. (1990) sowie anderen beschrieben. Diese
Studien befassen sich mit den komplexeren Codes für Magnetkanäle, die
im Allgemeinen andere Beschränkungen
als bei Lichtwellenleiter- oder
Metall-Übertragungskanälen erfordern.
-
GB-A-2
232 858 legt ein Verfahren und eine Datencodiervorrichtung zur Codierung
von Daten offen, bei der 8-Bit-Datenbytes als 10-Bit-Codeblöcke codiert
werden, wobei die Codeblöcke
die folgenden Regeln erfüllen:
Jeder Codeblock enthält
entweder 5 Bits eines ersten vorher festgelegten Binärwerts und 5
Bits eines zweiten vorher festgelegten Binärwerts oder 4 Bits des ersten
Binärwerts
und 6 Bits des zweiten Binärwerts.
Kein Codeblock hat mehr als 4 aufeinanderfolgende Bits des ersten
Binärwerts
oder mehr als 4 aufeinanderfolgende Bits des zweiten Binärwerts.
Jeder Codeblock hat mindestens einen Übergang in seinen ersten drei
Bit und mindestens einen Übergang
in seinen letzten drei Bits. Jeder Codeblock enthält mindestens
vier Übergänge, und
jeder Codeblock enthält
mindestens zwei Übergänge in seinen
ersten sechs Bit und mindestens zwei Übergänge in seinen letzten sechs
Bits. Wechselnde ungleiche Codeblöcke, d. h., Codeblöcke, die
4 Bits des ersten Binärwerts
und 6 Bits des zweiten Binärwerts enthalten,
werden invertiert, um insgesamt ein Gleichgewicht zwischen Einsen
und Nullen in den codierten Daten aufrechtzuerhalten. Die 10-Bit-Blöcke 1000011110
und 0111100001 werden als Steuerzeichen verwendet.
-
EP-A-0
097 763 legt ein Verfahren und eine Datencodiervorrichtung zur Erzeugung
eines gleichspannungsfreien, lauflängenbeschränkten 8B/10B-Codes aus einem
uneingeschränkten
Eingangsdatenstrom offen, der eine Vielzahl von 8-Bit-Datenblöcken umfasst.
Der 8-Bit-Block wird in zwei Teilblöcke aufgeteilt, die aus 5 und
3 aufeinanderfolgenden Bits bestehen, wobei jeder Teilblock geprüft wird,
um festzustellen, ob irgendwelche der einzelnen Bits eine Änderung
erforderlich machen. Wenn ja, werden die vorab ermittelten Bits
entsprechend dieser Feststellung geändert, um ein wechselndes Codemuster
zu erzeugen. Die Abweichung (disparity) des aktuellen Ausgabeteilblocks,
der gerade codiert wird, wird festgestellt, und die Abweichung des
letzten Teilblock-Codes, der ungleich Null ist, wird ermittelt.
Ein erstes Codemuster wird als der aktuelle Ausgabeteilblock für bestimmte
der Ausgabeteilblöcke
ausgewählt,
wenn die letzte Abweichung ungleich Null in dem Ausgabecodemuster
eine erste Polarität
aufwies, und das Komplement des ersten Codemusters wird zugeordnet,
wenn die letzte Abweichung ungleich Null die entgegengesetzte Polarität aufwies.
Alle 6B- und 4B-Teilblöcke
einzeln und die ganzen 10-Baud-Zeichen
haben eine Abweichung von 0 oder aber +/–2, d. h., jedes gültige Zeichen
in dem 10B-Alphabet hat entweder 5 Einsen und 5 Nullen oder 6 Einsen
und 4 Nullen oder 4 Einsen und 6 Nullen.
-
Schouhammer,
Immink, Beenker: "Binary Transmission
Codes with Higher Order Spectral Zeroes at Zero Frequency", IEEE Transactions
on Information Theory, Mai 1987, Band IT-33, Nr. 3, Seiten 452 bis
454, stellen ein Verfahren vor, mit dem Binärkanalcodes so gestaltet werden
können,
dass sowohl die Leistungsdichtespektrum-Funktion als auch ihre Derivate
niedriger Ordnung bei einer Frequenz von Null verschwinden.
-
Ferreira,
h. c. u. a.: "Hamming
Distance Preserving Mappings and Trellis Codes with Constrained Binary
Symbols", IEEE Transactions
on Information Theory, September 1989, Band 35, Nr. 5, Seiten 1009,
1100 bis 1103, beschreiben eine Umwandlung eines linearen Faltungscodes
in einen lauflängenbeschränkten oder
ausgewogenen Trelliscode mit demselben oder einem größeren freien
Abstand, wobei die Umwandlung einen Hamming-Abstand einschließt, der die Abbildung der Gruppe
von uneingeschränkten
Binärsymbolen
des Faltungscodes auf eine Gruppe von geeigneten beschränkten Symbolen
beibehält.
-
Bezug
nehmend auf 1 verwendet ein klassisches
Fehlerkorrekturverfahren eine horizontale Parität (HP) und eine vertikale Parität (VP).
Jedes "X" in 1 stellt
ein Datenbit dar. Die Zahlen 0 bis 7 in den Bits der Rohdaten stellen
die acht Stellen eines Acht-Bit-Bytes dar. In der ersten Spalte
stellen B0 bis B(N – 1)
unter der Überschrift "Bytes" die N Bytes eines
Rahmens 50 dar. Für
jede Bitstelle des Rahmens 50 gibt es ein vertikales Paritätsbit, das
der vertikalen Parität
eines jeden der Bytes in dem Rahmen entspricht. Acht vertikale Paritätsbits bilden
das vertikale Paritätsbyte 52.
Für jedes
der Bytes im Rahmen 50 gibt es eine horizontale Parität. Wenn
Daten wie die in 1 gezeigten übertragen werden, werden jedes
Byte und seine zugehörige
horizontale Parität übertragen,
und das Byte 52, das den vertikalen Paritäten für jede einzelne
der Bitstellen entspricht, wird mit dem Rahmen übertragen. Der Empfangsrechner
führt eine
Neuberechnung einer horizontalen Parität für jedes übertragene Byte sowie eine
Neuberechnung einer vertikalen Parität für den übertragenen Rahmen durch. Die
neu berechnete horizontale Parität
wird mit der übertragenen
horizontalen Parität verglichen,
und die neu berechnete vertikale Parität wird mit der übertragenen
vertikalen Parität
verglichen. Wenn es eine Abweichung gibt, beispielsweise bei der
horizontalen Parität 54 für das übertragene Byte
B1 und beispielsweise bei dem vertikalen Paritätsbit 56 für die Bitstelle
5 der vertikalen Parität,
weiß man,
dass das Bit 58, das sich an der Bitstelle 5 des Bytes
B1 befindet, fehlerhaft ist, und der Wert wird in den anderen Binärzustand
geändert,
das heißt,
wenn der Wert "1" ist, wird er in "0" geändert
oder umgekehrt.
-
Die
binären
Rohdaten werden im Allgemeinen nicht übertragen, sondern zuerst in
codierte Daten umgewandelt, deren Bytes eine größere Anzahl von Bits als die
Bytes der Rohdaten haben. Die Codierung wird aus mehreren Gründen durchgeführt, wie
vorstehend kurz beschrieben wurde. Ein Begrenzer ist notwendig,
um Wortgrenzen und Rahmengrenzen festzulegen. Ein Begrenzer ist
auch notwendig, damit der Empfänger
bei der Übertragung
von Daten feststellen kann, wo der Datenrahmen, der gerade gesendet
wird, beginnt. Ein Komma ist eine einzelne Bitfolge, die die Zeichen-
oder Bytegrenzen in einem seriellen Bitstrom angibt. Es ist wünschenswert,
dass man einen Code mit einem Komma hat, das auf ein einziges Zeichen
beschränkt
ist. Ein Kommazeichen dient gewöhnlich
sowohl als Begrenzer als auch als Byte-Synchronisierer. Bei der Übertragung
von Daten ist es auch wünschenswert,
dass die Lauflängen
aus fortlaufenden Einsen oder aus fortlaufenden Nullen bestehen
und klein sind, weil große Lauflängen die
Taktrückgewinnung
aus dem empfangenen Datenstrom schwierig und kostspielig machen.
Codierte Daten werden zur Begrenzung der Lauflänge auf einen geringeren als
einen vorher festgelegten wert verwendet, so dass die relative Zeitsteuerung
von Daten und Taktübergängen des
Empfängers
in häufigen
Intervallen verglichen werden kann. Auch ist es wünschenswert,
dass die codierten Daten gleichspannungsfrei sind. Die digitale
Summenabweichung muss endlich und ihr Wert gering sein. Wenn es
viele aufeinanderfolgende Einsen oder Nullen gibt, nehmen die Ladungspegel
der Schaltungen, die reaktive Komponenten enthalten, zu, was sich
aufgrund von Gleichspannungs- and Niederfrequenzwanderung negativ
auf die Wechselspannungskopplung auswirkt.
-
Da
codierte Bytes eine größere Anzahl
von Bits haben als in dem Byte der Rohdaten enthalten ist, ist es
nicht wünschenswert,
die klassische horizontale und vertikale Parität mit codierten Daten zu verwenden,
da die horizontale Parität
für die
codierten Daten wahrscheinlich mehr als eine Bitstelle in dem codierten
Byte benötigt.
Bei einem Rahmen, der viele Bytes enthält, würden durch die horizontale
Parität
sehr viele zusätzliche
Bits hinzugefügt
werden, was deutliche Auswirkungen auf die Zahl der Bitstellen hätte, die
nützliche
Informationen transportieren.
-
Es
ist eine Aufgabe der vorliegenden Erfindung, einen Code bereitzustellen,
der von sich aus eine Parität
für jedes
Byte enthält,
so dass man nicht extra eine horizontale Parität benötigt, um fehlerhafte Bytes
zu lokalisieren.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Allgemeine
Erscheinungsformen der Erfindung sind ein Verfahren und eine Vorrichtung
zur Codierung eines Rahmens mit N-Bit- Bytes in einen Rahmen mit codierten
M-Bit-Bytes, wobei M > N > 0 ist und der Rahmen
ein Komma zur Byte- und Rahmenabgrenzung enthält, und zur Bereitstellung
eines Codes, der aus einer Gruppe von M-Bit-Bytes besteht, die eine
Teilmenge aller möglichen
M-Bit-Bytes ist; wobei es für
jedes der 2N möglichen N-Bit-Bytes ein entsprechendes
Element in der Gruppe gibt; wobei jedes der Elemente des Codes eine
Folge von Bits ist, so dass, wenn eines der Bits geändert wird,
ein sich daraus ergebendes M-Bit-Byte keines der Elemente des Codes
ist; wobei eines der Elemente des Codes ein Komma ist, das zur Kennzeichnung
der Byte- und der Rahmengrenze verwendet wird, wobei das Komma eine
Folge von Bits hat, deren Binärzustand
von einem ersten und einem zweiten Wert so ausgewählt wird,
dass die Bitfolge des Kommas auf eines der Elemente des Codes beschränkt ist
und nicht über
eine Grenze zwischen einer beliebigen Kombination von anderen Elementen
des Codes hinweg vorkommt; wobei jedem der N-Bit-Bytes in dem Rahmen
das entsprechende Element von dem Code zugeordnet wird, um einen
codierten Rahmen zu bilden, der dem Rahmen entspricht; und wobei
der codierte Rahmen gespeichert wird.
-
Eine
genauere Erscheinungsform der vorliegenden Erfindung sind ein Verfahren
und eine Vorrichtung zur Umwandlung aller 256 8-Bit-Bytes in eine Gruppe von codierten
10-Bit-Bytes, wobei ein ungültig
codiertes Byte erzeugt wird, wenn ein Fehler an einer Bitstelle
eines bestimmten codierten Bytes auftritt, und wobei die Gruppe
der codierten Bytes ein Komma enthält, das auf ein einzelnes Byte
beschränkt
ist, und wobei es die Bitfolge des Kommas nur einmal gibt, das heißt, die
Folge der Bits, die dem Komma entsprechen, ist in keiner Bytefolge
mit einer anderen Ausrichtung auf die Bytegrenzen zu finden, weder
innerhalb der Bytes noch jenseits der Bytegrenzen.
-
In
einer bestimmteren Erscheinungsform der vorliegenden Erfindung wird
die vertikale Parität
verwendet, um die als fehlerhaft bekannte Bitstelle in einem Byte
zu kennzeichnen.
-
In
einer bestimmteren Erscheinungsform der vorliegenden Erfindung wird
der Code auf eine Lauflänge
von weniger als 5 oder gleich 5 beschränkt.
-
In
einer weiteren bestimmteren Erscheinungsform der vorliegenden Erfindung
gibt es keine Lauflängen,
die größer als
5 sind und sich über
eine Grenze zwischen benachbarten Bytes erstrecken.
-
In
einer weiteren bestimmteren Erscheinungsform der vorliegenden Erfindung
gibt es keine Lauflängen
mit einer aufeinanderfolgenden Bitzahl von 5.
-
In
einer weiteren bestimmteren Erscheinungsform der vorliegenden Erfindung
sind ein Bitmuster "11011111" und sein Komplement "00100000" eine Synchronisierfolge
oder ein Komma, die/das in ein 10-Bit-Kommazeichen "0110111110" beziehungsweise
sein Komplement "1001000001" eingebettet sind.
Das Komma enthält
4 Übergänge innerhalb
des Kommas, und eine Folge von Kommazeichen erzeugt 5 Übergänge pro
Kommazeichen.
-
In
einer weiteren bestimmteren Erscheinungsform des Codes gemäß der vorliegenden
Erfindung enthält
der Code 256 Datenzeichen, die der Anzahl der 8-Bit-Datenbytes entsprechen,
und 4 Nichtdatenzeichen.
-
In
einer weiteren bestimmteren Erscheinungsform der vorliegenden Erfindung
kommen die Kommabitfolge und die komplementäre Kommabitfolge in keinem
anderen codierten Byte vor und erstrecken sich auch nicht über eine
Grenze zwischen benachbarten gültigen
codierten Bytes.
-
KURZE BESCHREIBUNG
DER FIGUREN
-
Weitere
Aufgaben, Merkmale und Vorteile der vorliegenden Erfindung werden
nach der Betrachtung der folgenden ausführlichen Beschreibung der Erfindung
sichtbar, wenn diese in Verbindung mit den Figuren gelesen wird,
in denen:
-
1 schematisch
die Verwendung der klassischen horizontalen und vertikalen Parität zur Fehlerkorrektur
zeigt;
-
2 einen 8B/10B-Code mit lokaler Parität und einem
kurzen Komma zeigt;
-
3 ein
Beispiel für
die Zuordnung von Einsen und Nullen zu dem Trellisdiagramm von 2 zeigt, um die Bitfolge der Codezeichen
festzustellen.
-
AUSFÜHRLICHE
BESCHREIBUNG
-
Eine
hier beschriebene Erfindung betrifft ein Verfahren zur Korrektur
eines einzelnen fehlerhaften Bytes in einem Rahmen. Das grundlegende
Prinzip besteht in der Verwendung einer rechteckigen Anordnung von
horizontalen und vertikalen Paritätsbits, wobei die horizontale
Parität
das fehlerhafte Byte lokalisiert und die vertikale Parität zu dessen
Korrektur verwendet wird. Das unverkennbare Merkmal ist, dass die
funktionale Gleichwertigkeit der horizontalen Parität von einem
speziellen 8B/10B-Übertragungscode
mit lokaler Parität
bereitgestellt wird.
-
Bei
einem Code mit lokaler Parität
hat jedes 8-Bit-Byte ein spezielles codiertes 10-Bit-Byte, das ihm
entspricht. Die codierten Bytes sind so ausgelegt, dass das gültige codierte
Byte in ein ungültiges codiertes
Byte umgewandelt würde,
wenn irgendeine der Bitstellen fehlerhaft wäre. Nachstehend wird ein Code
mit lokaler Parität
beschrieben.
-
Eine
Gruppe VPAR aus 8 vertikalen Paritätsbits wird von den uncodierten
Daten abgeleitet, codiert und in das erste Leerwort (Idle word)
gepackt, das auf das Rahmenende (End of Frame) folgt. Nach der Feststellung
eines fehlerhaften Bytes am Empfänger
werden die VPAR-Bits zu dessen Korrektur verwendet.
-
Zunächst wird
das grundlegende rechteckige Fehlerkorrekturschema, das Paritätsbits verwendet, beschrieben.
Anschließend
wird die Verwendung der horizontalen Parität zur Lokalisierung eines Fehlers beschrieben.
Eine verbesserte Version eines 8B/10B-Codes mit einer ihm eigenen
lokalen Parität wird
vorgestellt. Dann werden die Korrektur eines fehlerhaften Bytes
durch vertikale Paritätsbits
sowie die Wiederherstellung von fehlerhaften Steuerzeichen beschrieben.
-
Grundlegendes Korrekturschema
-
Das
gemäß der vorliegenden
Erfindung vorgeschlagene grundlegende Korrekturschema beruht auf
der Anordnung von Daten und Paritätsbits, wie sie in 1 gezeigt
sind, nach einem rechteckigen oder matrixförmigen Schema. Ein Rahmen wird
in kleine Segmente unterteilt, vorzugsweise in Bytes oder Wörter. Eine
Parität
oder ein anderes Mittel der Fehlererkennung wird an jedes der Segmente
angehängt,
und zusammen bilden sie eine Matrixzeile. Aufeinanderfolgende Segmente
werden in die folgenden Zeilen gestellt. Diese erste Gruppe von
Paritätsbits
wird als horizontale Parität
bezeichnet. Auf mehrere dieser Segmente folgt eine vertikale Paritätsgruppe,
wie in der Matrix in 1 angegeben ist. Die vertikale
Parität
besteht aus einem Paritätsbit
für jede
Datenbitspalte. Sie dient zur Feststellung und Korrektur des oder
der fehlerhaften Bits in dem Segment, das von der horizontalen Parität als fehlerhaft gekennzeichnet
wurde.
-
Eine
ganze fehlerhafte Zeile kann korrigiert werden. Aus diesem Grund
wird die vertikale Parität auf
der Grundlage der uncodierten Bits berechnet, da sich eine Fehlerausbreitung
durch die Decodierung, die sich auf ein Segment oder ein Byte beschränkt, nicht
störend
auf die Korrektur auswirkt. Die vertikale Parität hat genügend Bits, um mindestens ein
Segment abzudecken. Um längere
Fehlerbündel
zu korrigieren, können
zwei oder mehr vertikale Paritätszeilen
angefügt
werden; beispielhalber kann eine erste Parität auf der Grundlage von allen
geradzahligen Zeilen und eine zweite Parität auf der Grundlage von allen
ungeradzahligen Zeilen berechnet werden. Es ist dann möglich, Fehlerbündel, die
sich über
ein Paar benachbarter Zeilen erstrecken, oder zwei einzelne kürzere Fehlerbündel zu
korrigieren, wenn eines von ihnen in einer geradzahligen und das
andere in einer ungeradzahligen Zeile vorkommt. Die vertikalen Paritätsbits werden
wie Daten codiert. Wenn in einem vertikalen Paritätsbyte ein
Fehler auftritt, wird es ignoriert und nicht zur Korrektur von möglichen
anderen Fehlern verwendet.
-
Eine
notwendige Annahme ist, dass abgesehen von kurzen Fehlerbündeln, die
Verbindungsfehlerereignisse zufällig
und mit einer so geringen Häufigkeit
auftreten, dass meistens nur ein einziges Fehlerereignis innerhalb
eines Rahmens stattfindet. Wenn diese Annahme nicht zutrifft, muss
die Rahmenlänge
verringert werden, oder eine vertikale Parität muss in den Rahmen in festen
Intervallen eingefügt
werden. Eine andere Annahme ist, dass die meisten Fehler auf eine
einzige Matrixzeile beschränkt
sind. Die hier gezeigten und beschriebenen Systeme und Verfahren
können
so ausgelegt werden, dass Fehler, die über Zeilengrenzen hinausgehen,
zu Lasten einer höheren
Komplexität
behandelt werden. Außerdem
ist es notwendig, dass bei Vorhandensein von Fehlern der Anfang
und das Ende des Rahmens richtig erkannt werden. Eine zyklische Redundanzprüfsumme,
die über
den Rahmen berechnet wird, stellt letzten Endes die Gültigkeit
des korrigierten oder nichtkorrigierten Rahmens fest. Funktionen
zur Übertragungswiederholung
sind vorzugsweise nach wie vor für
den Fall vorhanden, in dem die Fehlerkorrektur fehlschlägt: das
Scheitern der horizontalen Parität,
bestimmte Mehrfachfehler zu erkennen, ein Fehlerbündel, das
länger
als die vertikale Parität
ist, ausgefallene Bytesynchronisation, mehrere Fehlerbündel, falsche
Erkennung des Rahmenanfangs und des Rahmenendes, abgeschnittene
oder fehlende Rahmen usw.
-
Horizontale Parität
-
In
der gemeinhin verwendeten Paritätsmatrix ist
die horizontale Parität
ein ganz bestimmtes Bit für jede
Matrixzeile.
-
In
dem nachstehenden Beispiel wird die horizontale Parität stattdessen
von dem Übertragungscode
allein geliefert. Übertragungscodes
unterliegen mehreren Einschränkungen,
um eine zuverlässige, kostengünstige Übertragung
weiter zu verbessern. Weitere Einschränkungen können in einen Code aufgenommen
werden, so dass eine beliebige ungerade Fehlerzahl in einem Byte
oder Wort ein ungültiges Wort
erzeugt. Eine solche Eigenschaft des Codes wird als "lokale Parität" (Martin, 1985) bezeichnet. Für allgemeine
Anwendungen sind solche Codes weniger wünschenswert, da es die zusätzliche
Einschränkung
notwendig macht, einige Übertragungsparameter
zu verschlechtern und eine komplexere und kostenintensivere Ausführung in
Kauf zu nehmen. Andere 8B/10B-Codes, darunter der Fibre-Channel-Standard-(FBS-)Code,
weisen meistens auch sofort auf ein ungültiges Byte hin, wenn ein Fehler
aufgetreten ist. Eine hohe Fehlerquote erzeugt jedoch nur weiter
unten im Bitstrom, in einiger Entfernung von dem Byte, wo der Fehler
auftrat, eine Abweichungsverletzung (disparity violation), und folglich
kann das Byte, das den/die Fehler enthält, nicht direkt erkannt werden.
Für den
Entwurf eines gleichspannungsfreien Binärcodes mit lokaler Parität stehen
die folgenden Möglichkeiten
zur Verfügung:
- • Es
besteht die Möglichkeit,
Codes zu entwerfen, die ausschließlich aus ausgewogenen Wörtern bestehen,
so dass sich jede ungerade Anzahl von Fehlern in einem solchen Wort
als Unausgewogenheit zeigt. Beispielsweise ist es möglich, 16 Bits
in 20 Bits umzuwandeln, so dass alle 20-Bit-Wörter ausgewogen sind. Ein solcher 16B/20B-Code
ist jedoch schwierig zu realisieren. Auch kann ein einziges falsches
Bit ein Fehlerbündel
von 16 Fehlern in dem Decodierprozess erzeugen, was eine größere Gruppe
von vertikalen Paritätsbits
erforderlich macht. Obgleich die 20-Bit-Wörter immer ausgewogen sind,
ist das niederfrequente Verhalten des Codes nicht besser als beim
aufgeteilten 8B/10B-FCS-Code.
- • Es
gibt 8B/10B-Codes mit lokaler Parität und geringer Abweichung,
so dass eine ungerade Anzahl von Fehlern immer ein ungültiges Codewort erzeugt.
Ein solcher Code wurde von Martin vorgeschlagen (1985). Codes dieser
Art sind im Allgemeinen schwieriger zu realisieren als der aufgeteilte
8B/10B-Code (Widmer, 1983), und sie haben stärkere niederfrequente Spektralanteile,
so dass die Zeitkonstanten von Hochpassfiltern um mehr als 40% erhöht werden
müssen.
Dem von Martin veröffentlichten
Code (1985) fehlt auch ein geeignetes auf ein Byte beschränktes Komma. Ein
Code mit einem guten Komma wird nachstehend beschrieben.
-
Ein 8B/10B-Code mit lokaler
Parität
und einem kurzen Komma (2)
-
Bei
dem hier beschriebenen 8B/10B-Übertragungscode
wurde zugunsten eines höheren
niederfrequenten Anteils auf ein integriertes Paritätsmerkmal
verzichtet. Jedes 10B-Zeichen dieses Codes, das eine ungerade Anzahl
von Bitfehlern aufweist, ist ein ungültiges Zeichen.
-
Der
nachstehende Code gemäß der vorliegenden
Erfindung setzt 8 Quellenbits in 10 codierte Bits in einer für die serielle Übertragung
besser geeigneten Anordnung um. Er verwendet Vektoren aus der Gruppe
der 252 ausgewogenen (Null-Abweichung) 10-Bit-Vektoren und den 120
Komplementärvektorpaaren
mit einer Abweichung von +/–4,
die mit wechselnder Polarität
eingefügt
werden. Somit erzeugt ein einziger Fehler in einem Zeichen eine
Abweichung von 2 oder 6, wobei beides unzulässige Kombinationen sind.
-
Die
Lauflänge
(RL), bei der es sich um die Anzahl aufeinanderfolgender gleicher
Bits handelt, ist auf 5 begrenzt, und fortlaufende definierte Zeichenfolgen
(runs) von 5 sind nicht zulässig.
Das Bitmuster "11011111" und sein Komplement
sind eine Synchronisierfolge oder ein Komma. Es ist in ein Kommazeichen "0110111110" oder dessen Komplement "1001000001" eingebettet. Die
serielle Übertragung
beginnt links. Das Kommazeichen enthält 4 Innenübergänge, und eine Folge von Kommazeichen erzeugt
5 Übergänge je Zeichen.
Neben dem Kommazeichen gibt es noch 4 andere spezielle Nichtdatenzeichen.
-
Alternativ
dazu kann die Bitfolge "11111011" und ihr Komplement
als ein Komma mit passenden Codevektoren gewählt werden. Die nachstehenden Trellisdiagramme
werden dann von rechts nach links und nicht von links nach rechts
gelesen. Das erste Bit eines übertragenen
Codebytes befindet sich dann rechts.
-
Alle
gültigen
codierten Zeichen sind in den Trellisdiagrammen "Trellis für einen 8B/10B-Code mit lokaler
Parität" von 2 dargestellt,
wobei jeder steigende Zweig für
ein Bit "1" und jeder fallende Zweig
für ein
Bit "0" steht. Die Gruppe
3K von 2 beispielsweise, die ein Element
hat, ist in 3 nachgebildet. 3 zeigt
11 Knoten: 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 und 22.
Die steigenden Linien (oder Zweige) 24, 26 und 28 stellen
3 "Einsen" dar. Die folgende
Linie oder der folgende Zweig 30 zwischen den Knoten 8 und 10 entspricht
einer Null. Die steigenden Zweige 32, 34, 36 und 38 entsprechen
4 "Einsen". Die folgenden Zweige 40 und 42 entsprechen
2 Nullen. Deshalb ist das Zeichen der Gruppe 3K 1110111100". Die Zahlen rechts
von jedem Knoten von 2 stehen für die Anzahl
der verschiedenen gültigen
Pfade vom Eingangsknoten zu diesem Knoten. Jeder mögliche Pfad
durch das Trellisdiagramm entspricht einem zulässigen Bitmuster. Die Abweichung
eines Bitblocks (wie beispielsweise eines Bytes oder Zeichens) ist
der algebraische Unterschied zwischen der Anzahl von Einsen minus
der Anzahl von Nullen. Die laufende Abweichung (running disparity
(RD)) an einem bestimmten Punkt in dem seriellen Bitstrom ist die
Summe der Abweichungen der vorhergehenden Blöcke. Die Abweichung eines Bitblocks
ist gleich dem Unterschied zwischen der laufenden Abweichung am
Ende des Blocks und der laufenden Abweichung am Anfang des Blocks. Die
digitale Summenabweichung ist der algebraische Unterschied zwischen
dem Höchstwert
und dem Mindestwert der laufenden Abweichung bei einem Block. An
der Grenze zwischen Bytes ist die laufende Abweichung RD bei dem
vorliegenden Code immer +/–2.
Bei 8B/10B-Codes ohne lokale Parität ist die laufende Abweichung
an Bytegrenzen gewöhnlich +/–1. Bei
dem hier beschriebenen Code beschränken wir die Lauflänge (RL)
am Anfang und am Ende auf zwei, mit der Ausnahme, dass die codierten
Bytes mit 3 Einsen von RD = –2
oder 3 Nullen von RD = +2 beginnen dürfen; codierte Bytes dürfen mit
3 Nullen bei RD = –2
und mit 3 Einsen bei RD = +2 enden. Die Lauflänge über Zeichengrenzen hinweg wird
somit auf 5 beschränkt.
Die Nachbarschaft einer jeden möglichen
Lauflänge
von 5 wird gekürzt,
so dass keine falsch ausgerichteten Kommafolgen auftreten können. In 2 könnten
alle Vektoren, die die einzelnen mit x gekennzeichneten Punkte durchlaufen, ein
falsches Komma oder eine Lauflängenverletzung, einschließlich aufeinanderfolgender
definierter Zeichenfolgen von 5, erzeugen.
-
Der
Code umfasst drei Hauptgruppen von Vektoren in dem codierten Bereich:
- • Die
174 abweichungsunabhängigen
ausgewogenen Vektoren, die in der Gruppe 1 und 1A/B dargestellt
sind, können
ungeachtet der Anfangsabweichung eingegeben werden, wie durch RD
= +/–2
vorne angegeben ist. Weil sie alle ausgewogen sind, ist die Endabweichung
gleich der Anfangsabweichung.
- • Die
27 ausgewogenen Vektoren der Gruppe 2AC, 2D und 2E sind abweichungsabhängig und können nur
eingegeben werden, wenn die laufende Anfangsabweichung –2 beträgt. Bei
einer positiven laufenden Anfangsabweichung wird ihr Komplement
verwendet.
- • Die
59 Vektoren in der Gruppe 3, 3F, 3G, 3H, 3J und 3K sind mit einer
Abweichung von +4 unausgewogen und können nur mit einer negativen
laufenden Anfangsabweichung verwendet werden, wie gezeigt ist, andernfalls
werden ihre Komplemente verwendet. Der in der Gruppe 3F fett dargestellte
Vektor ist das Komma.
-
Die
Hüllkurve
enthält
alle Vektoren, die für die
Codierung von 260 Zeichen für
eine Anfangsabweichung von +2 oder aber –2 benötigt werden. Nicht alle Vektoren
der Hüllkurve
sind tatsächlich
zulässig, sondern
nur diejenigen, die in den getrennten, vorstehend aufgeführten Gruppierungen
gelistet sind, welche alle Einschränkungen angeben. Es gibt einen
Zusammenhang zwischen niederfrequenten Spektralanteilen eines Codes
und den Strecken durch die Trellis-Hüllkurve. Neben der Grobcharakterisierung durch
die maximale digitale Summenabweichung (Digital Sum Variation (DSV))
kann ein normalisierter Offset festgelegt werden, bei dem es sich
um ein Maß für den Bereich
zwischen der Nullabweichungslinie und einer Vektorstrecke handelt.
Je kleiner der maximale Offset ist, desto besser ist das Niederfrequenzverhalten.
Wie an der Hüllkurve
zu sehen ist, beträgt die
maximale DSV dieses Codes 10. Es ist möglich, die DSV auf 8 zu verringern,
dies schließt
jedoch aufeinanderfolgende definierte Zeichenfolgen von 5 ein. In
diesem Zusammenhang ist es von Interesse, dass die obere und die
untere Kontur der Hüllkurve
keine gültigen
Zeichen darstellen. Die einzigen Vektoren durch den höchsten und
den niedrigsten Punkt der Hüllkurve
sind diejenigen der Gruppe A/B. Die äußersten Konturen der Hüllkurve
sind durch die äußerste obere
und untere Kontur der Gruppe 1 oder der Gruppe 1A/B gegeben. Mit
einer Abweichung von +2 beginnend, können wir 1101010100 oder 1101100010 übertragen
und in jedem Fall einen Bereich zwischen der Kontur und der Nullabweichung einschließen, der
33 Bereichseinheiten (Abweichung × Zeit) pro Byte oder einen
Durchschnitt von 3,3 pro Bitintervall beträgt und den wir als den normalisierten Offset
bezeichnen. Die Komplemente derselben Vektoren, die mit einer negativen
Abweichung beginnen, folgen der unteren Kontur. Da der maximale
Offset bei den Vektoren, die die Punkte mit einer laufenden Abweichung
von +/–5
durchlaufen (Punkte A und B der Gruppe 1A/B), nicht größer als
der äußerste,
auf eine DSV von 8 begrenzte Vektor ist, ist der Niederfrequenz-Nachteil
für die
DSV von 10 nicht so gravierend, wie man dies andernfalls bei einer
DSV von 10 ohne diese zusätzliche
Einschränkung
erwarten würde.
Simulationen zeigen, dass bei diesem Code die Niederfrequenzbegrenzung
eines einzelnen RC-Hochpassfilters nicht höher als 0,055% der Bitrate
gesetzt werden darf, wenn der Wert für die Augenschließung bei
weniger als 0,25 dB belassen werden soll. Dies ist um nahezu den
Faktor 2 geringer als beim FCS-Code (US-Patentschrift 4 486 739).
Für die
Variante des Codes mit einer DSV von 8, aber aufeinanderfolgenden
definierten Zeichenfolgen von 5 kann die Niederfrequenzbegrenzung
bei einer gleichen nachteiligen Auswirkung in Form der Augenschließung auf
bis zu 0,063% der Bitrate erhöht
werden. Aus 2 ist auch leicht zu erkennen,
dass die Mindestübergangsdichte
3 pro Zeichen beträgt.
-
Realisierung des 8B/10B-Codes
mit lokaler Parität
-
Eine
Realisierung mit ganzen oder teilweisen Tabellen ist der einfachste,
aber wahrscheinlich der am wenigsten wirtschaftliche Ansatz, wenn
man die Kosten für
den ursprünglichen
Entwicklungsaufwand unberücksichtigt
lässt.
Eine Ausgestaltung mit vertretbarer Komplexität unter Verwendung von ausschließlich kombinatorischer
Logik kann realisiert werden. Auf weit über 200 Vektoren kann verzichtet werden,
wenn man Gestaltungsgrundsätze
anwendet, die ähnlich
denen des FCS-Codes sind: Ändere so
wenig Bits wie möglich, und
teile die Vektoren in Gruppen ein, die von gewöhnlicher Hardware verarbeitet
werden. Bei den letzten 30 oder 40 Vektoren wird es immer schwieriger,
Gemeinsamkeiten zu finden und Gruppen mit mehr als ein paar Vektoren
festzulegen. Es ist dann hauptsächlich
eine Frage des Zeitpunkts, zu dem zu einer einzelnen Vektorumsetzung übergegangen
werden muss, um die Aufgabe abzuschließen. Da im Gegensatz zu Tabellensuchoperationen
jede Realisierung in hohem Maße
von der Zuordnung einzelner Quellenbytes zu einem bestimmten codierten
Vektor abhängt,
halten wir keine Umsetzungstabelle bereit. Im Vergleich zum aufgeteilten
FCS-Code hat jede Realisierung mit kombinatorischer Logik wahrscheinlich
mindestens zwei weitere Logikebenen in dem kritischen Pfad, eine
höhere Anzahl
von Gattern und im Allgemeinen eine höhere Zahl von anschließbaren Eingängen (fan-in).
-
Bewertung
des Codes mit lokaler Parität
-
Anwendungen,
bei denen keine Fehlerkorrektur erforderlich ist, haben den Nachteil,
dass der Codierer und der Decodierer schwieriger zu realisieren
sind. In manchen Fällen
ist gegebenenfalls eine etwas schnellere Technologie notwendig.
Alle Hochpassfilter im seriellen Signalpfad benötigen um den Faktor zwei größere Zeitkonstanten.
Andernfalls kann davon ausgegangen werden, dass die Leistung des
Codes mit der des FCS-Codes vergleichbar ist. Aus aktueller Sicht
ist die Wahl dieses Codes möglicherweise
für die
folgenden Arten von Verbindungen vorteilhaft:
- – Systeme,
die immer und nicht nur optional mit Vorwärtsfehlerkorrektur arbeiten.
- – Systeme,
die in Verbindung mit sehr kurzen Rahmen oder hohen Fehlerraten,
die kurze Fehlerkorrekturblöcke
erzwingen, mit Vorwärtsfehlerkorrektur
arbeiten. Für
solche Fälle
wäre die
Fähigkeit,
mit lediglich 8 vertikalen Paritätsbits
pro Block zu arbeiten, ein Vorteil.
- – Wie
von Martin [1985] vorgeschlagen, könnte ein Code mit lokaler Parität für eine Signalerkennung
mit höchstmöglicher
Wahrscheinlichkeit verwendet werden. Wenn wir beispielsweise von dem
erkannten optimalen Abtastpunkt sowohl bei der Zeit als auch der
Amplitude einen einzigen Schritt in jede Richtung abweichen, könnten wir leicht
5 bis 9 Abtastwerte pro Bit oder bis zu 90 Abtastwerte pro Byte
erreichen. Aus praktischen Gründen
ist es dann wichtig, dass ein fehlerhaftes Byte sofort erkannt wird
und nicht erst am Ende des Rahmens. Ein solches Verfahren zur Verringerung
der Fehlerrate wäre
auch bei Echtzeit- und anderen
verzögerungskritischen
Systemen zu bevorzugen.
-
Vertikale
Parität
zur Fehlerkorrektur
-
Ein
ungerades Paritätsbit
wird für
jede Spalte der codierten oder uncodierten Matrix abgeleitet und in
codierter Form nach dem Ende des Rahmens übertragen. Um eine einfache
Realisierung zu erreichen, wird die Parität aufgrund einer besseren Vereinbarkeit
mit gängigen
Datenformaten, der Breite des Pufferspeichers und dem Verarbeitungsstrom vorzugsweise
von den uncodierten Daten abgeleitet. Üblicherweise wird ein Byte
mit vertikalen Paritätsbits erzeugt,
aber eine größere oder
kleinere Aufteilung ist ebenfalls möglich. Auf der Empfangsseite
kann der Decodierer einen einzelnen Bitfehler auf ein Fehlerbündel von
8 im decodierten Bereich ausweiten. Das Matrixkorrekturschema wird
durch diese Fehlerausbreitung nicht beeinträchtigt.
-
Bei
dem Code mit lokaler Parität
erzeugt ein einzelner Bitübertragungsfehler
immer ein ungültiges Byte.
Nachdem das Ende eines Rahmens empfangen wurde, wird jedes Bit des
ungültigen
Bytes in einer Spalte mit einer Verletzung der vertikalen Parität ergänzt. Wenn
mehr als ein Byte in einem Rahmen ungültig ist, wird kein Korrekturversuch
unternommen.
-
Gehäuftes Auftreten von durch ein
einziges Ereignis hervorgerufenen Fehlern (burst errors)
-
Wenn
eine Verbindung mit einer großen
Zahl von gehäuft
auftretenden Fehlern belastet ist, die sich auf weniger als 10 codierte
Bits erstrecken, möchte
man Fehler korrigieren können,
die sich über beide
Seiten einer Byte-Grenze erstrecken. Zu diesem Zweck werden zwei
vertikale Paritätsbytes
zusätzlich
mitverschickt, wobei das erste auf der Grundlage von allen geradzahligen
Bytes und das zweite auf der Grundlage von allen ungeradzahligen
Bytes berechnet wird.
-
Wiederherstellung
von Sonderzeichen
-
Der
Fall von Sonderzeichen, die fehlerbehaftet sind, bedarf einer gesonderten
Prüfung.
Bei Anwendungen, die eine Vielzahl von Sonderzeichen in nichtvorhersagbaren
Anordnungen verwenden, wird ein zusätzliches vertikales Paritätsbit für das K-Bit verwendet,
das anzeigt, ob ein Byte Daten oder Steuerinformationen darstellt.
Bei der FCS-Anwendung wäre
dieses Bit nur zur Korrektur von Fehlern im Kommazeichen des Rahmenanfang-
und des Rahmenendebegrenzers nützlich,
die jedoch auch mit anderen Mitteln vorgenommen werden kann.
-
Erkennung
des Rahmenanfangs und des Rahmenendes
-
Es
ist sehr wichtig, den Anfang eines Rahmens (Start of Frame (SOF))
und das Ende eines Rahmens (End of Frame (EOF)) richtig zu erkennen, da
sonst das Paritätskorrekturschema
nicht funktioniert. Auf der Sendeseite ist dies aufgrund dessen, dass
keine Fehler vorhanden sind, kein Problem. Unser Ziel besteht darin,
die Rahmengrenzen am Empfänger
richtig zu erkennen, außer
wenn es mindestens zwei Bytes mit Fehlern gibt. Die mit dieser Schrift
ebenfalls eingereichte Anmeldung EP-A-0709979 mit dem Titel "Apparatus and Method for
Error Correction Based on Transmission Code Violations and Parity" beschreibt ausführlich,
wie man die FCS-Rahmenanfang- und -Rahmenendebegrenzer zuverlässig erkennen
kann. Eine ähnliche
Strategie kann bei dem lokalen Paritätscode dieser Anwendung gewählt werden.
Nur ein paar Einzelheiten sind anders, da sich die codierten Wörter einschließlich des
Kommazeichens unterscheiden.
-
Fazit
-
Ein
Code mit lokaler Parität
kann ein fehlerhaftes Byte in einem Rahmen ohne extra Paritätsbits auffinden,
aber ein solcher Code ist schwieriger zu realisieren und erzeugt
größere niederfrequente Spektralanteile.
Dieses Verfahren zum Auffinden von Fehlern macht eine Fehlerkorrektur
mittels einfacher vertikaler Parität möglich, und es ist für Verbindungsarchitekturen
mit kurzen Rahmen gut geeignet. Es kann für Übertragungsprotokolle oberhalb
der Verbindungsebene transparent gemacht werden.
-
Literatur
-
- Martin W. Sachs "High Performance Networks, Technology
and Protocols",
Kapitel II.5, Fibre Channel, Ahmed N. Tantawy, Herausgeber, Kluwer
Academic Publishers, Boston, 1994.
- X3T9 Technical Committee, Fibre Channel, Physical and Signaling
Interface (FC-PH); Rev. 3.0, FC-P/92-001R3.0, American National
Standards Institute, 1430 Broadway, New York, NY 10018, 1992. Erhältlich bei
Global Engineering, 2805 McGaw St., Irvine, CA 92714.
- Wayne D. Grover "Forward
Error Correction in Dispersion-Limited
Lightwave Systems",
IEEE Journal of Lightwave Technology, 6 (5): 643–654, Mai 1988.
- C. Benz, M. Gowan und K. Springer "An Error Correcting Encoder and Decoder
for a 1 Gbit/s Fiber Optic Link",
Proc. IEEE 1991 Custom Integrated Circuits Conference, 7.1.1–7.1.4,
San Diego, Mai 1991.
- D. H. McMahon, A. A. Kirby, B. A. Schofield und K. Springer,
US-Patentschrift
Nr. 5 144 304 "Data
and Forward Error Control Coding Techniques for Digital Signals", 1. September 1992.
- K. Springer "A
Forward Error Correcting Code for Gigabit Fiber Optic Links", Conference on High-Speed Fiber
Networks and Channels (1991), Boston, September 1991, Proc. SPIE – Int. Soc.
Opt. Eng. (USA), Band 1577, 1992, Seiten 246 bis 253.
- C. A. French "Distance
Preserving Run-Length Limited Codes", IEEE Transactions on Magnetics, MAG-25(5):
4093–4095,
September 1989.
- M. Blaum "Combining
ECC with modulation: performance comparisons", IEEE Transactions on Information Theory,
37(3): 945–949,
Mai 1991.
- M. Blaum, S. Litsyn, V. Buskens und C. A. van Tilborg "Error-Correcting Codes
with Bounded Running Digital Sum",
IEEE Transactions on Information Theory, 39(1): 216–227, Januar
1993.
- C. S. Coetzee, H. C. Ferreira und P. G. W. van Rooyen "On the Performance
and Implementation of a Class of Error and Erasure Control (d, k)
Block Codes", IEEE
Transactions on Magnetics, 26(5): 2312–2314, September 1990.
- R. W. Hamming "Coding
and Information Theory",
2nd Ed. Prentice Hall Inc., Englewood Cliffs,
NJ 07632, 1986.
- G. N. N. Martin "A
Rate 8/10 DC Balanced Code with Local Parity", IBM Technical Disclosure Bulletin, 27(9):
5272–5279,
Februar 1985.
- A. X. Widmer und P. A. Franaszek "A DC-Balanced, Partitioned-Block, 8B/10B Transmission
Code", IBM Journal
of Research and Development, Band 27, Nr. 5, Seiten 440 bis 451,
September 1983.