DE69032076T2 - Einrichtung für Datenkodierung und Vorwärts-Fehlerkorrektur für eine niedrige Offset-Gleichspannung und eine kurze Lauflänge - Google Patents

Einrichtung für Datenkodierung und Vorwärts-Fehlerkorrektur für eine niedrige Offset-Gleichspannung und eine kurze Lauflänge

Info

Publication number
DE69032076T2
DE69032076T2 DE69032076T DE69032076T DE69032076T2 DE 69032076 T2 DE69032076 T2 DE 69032076T2 DE 69032076 T DE69032076 T DE 69032076T DE 69032076 T DE69032076 T DE 69032076T DE 69032076 T2 DE69032076 T2 DE 69032076T2
Authority
DE
Germany
Prior art keywords
bit
data
fec
bits
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69032076T
Other languages
English (en)
Other versions
DE69032076D1 (de
Inventor
Alan J Kirby
Donald H Mcmahon
Bruce A Schofield
Kent Springer
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Digital Equipment Corp
Original Assignee
Digital Equipment Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Digital Equipment Corp filed Critical Digital Equipment Corp
Publication of DE69032076D1 publication Critical patent/DE69032076D1/de
Application granted granted Critical
Publication of DE69032076T2 publication Critical patent/DE69032076T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0041Arrangements at the transmitter end
    • H04L1/0042Encoding specially adapted to other signal generation operation, e.g. in order to reduce transmit distortions, jitter, or to improve signal shape
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L25/00Baseband systems
    • H04L25/38Synchronous or start-stop systems, e.g. for Baudot code
    • H04L25/40Transmitting circuits; Receiving circuits
    • H04L25/49Transmitting circuits; Receiving circuits using code conversion at the transmitter; using predistortion; using insertion of idle bits for obtaining a desired frequency spectrum; using three or more amplitude levels ; Baseband coding techniques specific to data transmission systems
    • H04L25/4906Transmitting circuits; Receiving circuits using code conversion at the transmitter; using predistortion; using insertion of idle bits for obtaining a desired frequency spectrum; using three or more amplitude levels ; Baseband coding techniques specific to data transmission systems using binary codes
    • H04L25/4908Transmitting circuits; Receiving circuits using code conversion at the transmitter; using predistortion; using insertion of idle bits for obtaining a desired frequency spectrum; using three or more amplitude levels ; Baseband coding techniques specific to data transmission systems using binary codes using mBnB codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Spectroscopy & Molecular Physics (AREA)
  • Dc Digital Transmission (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)
  • Facsimile Image Signal Circuits (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

    GEBIET DER ERFINDUNG
  • Die Erfindung bezieht sich auf Digitalkommunikationssysteme, und insbesondere auf verbesserte Codierungstechniken, die den genauen Empfang übertragener Digitalsignale erleichtern.
  • HINTERGRUND DER ERFINDUNG
  • Digitalkommunikationssignale, die über einen Kommunikationskanal wie z. B. ein Koaxialkabel oder eine Glasfaserverbindung übertragen werden sollen, werden typischerweise codiert, um den genauen Empfang am Ziel trotz einer möglichen Störung der Signale während der Übertragung aufgrund von Geräuschen im Kommunikationskanal zu erleichtem. In Abhängigkeit von der Anwendung wird entweder eine Datencodierung für verbesserte Codeeigenschaften oder eine Fehlerschutzcodierung verwendet.
  • Die Datencodierung verwendet die Übersetzung oder Umsetzung des Bitstroms der Informations- oder Datensignale in "Codewörter", die typischerweise durch eine begrenzte Maximallauflänge, einen begrenzten kumulativen Gleichstrom-Offset (DC-Offset) und andere Signalmerkmale charakterisiert sind, die den Empfang erleichtern.
  • Genauer umfaßt die Datencodierung das Umsetzen eines N- Bit-Datenworts (oder N-Bit-Blocks) in ein M-Bit-Codewort (oder M-Bit-Block), wobei M größer ist als N. Der vom Codierungsschema bewirkte "Überhang" beträgt M - N, was als Prozentsatz 100 (M - N)/N % ausgedrückt werden kann. Die Effizienz eines Codierungsschemas beträgt N/M.
  • Das Codierungsschema fügt zusätzliche "Überhang"-Bits zu den Daten hinzu, bevor diese gesendet werden, um das Bitmuster der Daten in ein Bitmuster zu übersetzen, das bei Vorhandensein von Geräuschen im Kommunikationspfad zuverlässiger empfangen werden kann. Das codierte Signal kann z. B. eine begrenzte Lauflänge, einen begrenzten kumulativen Gleichspannungs-Offset, oder beides aufweisen.
  • Ein Codierungsschema, das ein N-Bit-Datenwort in ein M- Bit-Codewort umsetzt, wird häufig als Nb/Mb-Codierungsschema bezeichnet. Zum Beispiel setzt ein 8b/10b-Codierungsschema 8-Bit-Datenwörter in 10-Bit-Codewörter um. Ein solches Schema besitzt zwei Bits oder 25 % Überhang, und weist eine Effizienz von 80 % auf.
  • Einige Codierungsschemen erlauben zwei Typen von Codewörtern zu codieren - Datenwörter und Befehlswörter. Dies beruht auf der Tatsache, daß das Nb/Mb-Codierungsschema als eine 1:1-Abbildung eines Satzes von 2N möglichen Datenwörtern auf eine Teilmenge von nur 2N unterschiedlichen Codewörtern aus 2M möglichen Codewörtern aufgefaßt werden kann. Hierbei bleiben 2M - 2N Codewörter übrig, die nicht genutzt werden. Bei einigen Codierungen jedoch hat der kleine Anteil der 2M - 2N Codewörter die gleichen wünschenswerten Übertragungseigenschaften (z. B. Lauflänge und kumulativer Gleichspannungs-offset) wie die 2N Codewörter, die Daten darstellen. Dieser kleine Anteil kann verwendet werden, um eine weitere Klasse von Codewörtern darzustellen, die als Befehlswörter bezeichnet werden. Für ein Codierungsschema ist es erwünscht, daß es die Codierung eine erhebliche Anzahl von Befehlswörtern erlaubt, die die gleichen wünschenswerten Übertragungseigenschaften aufweisen wie die codierten Datenwörter.
  • Die Begrenzung der maximalen Lauflänge in den Datencodewörtern kann nützlich sein, z. B. bei der Taktwiedergewinnung, die während der Decodierung am Ziel durchgeführt wird. Die maximale Lauflänge ist die maximale Anzahl aufeinanderfolgender Bits mit dem gleichen Wert, d. h. entweder logisch 1 oder logisch 0. Das Begrenzen der maximalen Lauflänge, so daß die Länge der Bitketten mit dem gleichen Wert reduziert wird, ist wichtig, um die genaue Taktwiedergewinnung am Ziel zu erleichtern, da Taktwiedergewinnungsschaltungen auf Übergängen zwischen den Datenwerten logisch 1 und logisch 0 beruhen, um die zugrundeliegende Taktfrequenz der Daten zu erfassen. Taktwiedergewinnungsschaltungen verlieren im allgemeinen die Synchronisation, wenn zu viele Bitintervalle ohne einen Übergang in den Daten verstreichen. Es ist daher erwünscht, ein Codierungsschema auszuwählen, das eine niedrige maximale Lauflänge aufweist.
  • Der kumulative Gleichspannungs-offset (DC-Offset), auch als kumulatives Gleichspannungs-Ungleichgewicht oder als digitale Summenvariation bezeichnet, wird häufig als Anzahl der Bitwerte ausgedrückt, die geändert werden müssen, um die Bitsequenz ausgeglichen zu halten. Wenn z. B. ein Bit vorliegt, das eine logische 1 aufweisen müßte, um die Sequenz ausgeglichen zu halten, dieses Bit jedoch einen Wert von logisch 0 aufweist, dann ist der kumulative Gleichspannungs-Offset gleich ein Bit. Alternativ kann der kumulative Gleichspannungs-offset als eine einzelne Zahl gegeben sein, die durch Zuweisung eines Gewichts von -1 für jedes Logisch-0-Bit und eines Gewichts von +1 für jedes Logisch-1-Bit zugewiesen wird, woraufhin diese Gewichte für die Bits im seriellen Datenstrom addiert werden. Auf diese Weise ausgedrückt ergeben die beiden zusätzlichen Logisch-0-Bits in der Sequenz des obigen Beispiels einen kumulativen Gleichspannungs-Offset von -2. Eine Bitsequenz mit einem kumulativen Gleichspannungs-offset von 0 wird als "ausgeglichen" bezeichnet, wobei eine Sequenz mit einem kumulativen Gleichspannungs-offset von 1 oder mehr Bits als "unausgeglichen" bezeichnet wird.
  • Ein zu einem Ziel gesendeter Bitstrorn umfaßt eine Sequenz der Werte logisch 0 und logisch 1. Eine Empfängerschaltung am Ziel empfängt typischerweise die zwei Logikwerte als entgegengesetzt polarisierte Spannungen, wobei die Signalspannung in der Empfängerschaltung eine Fast- Gleichspannung-Komponente (d. h. Niederfrequenzkomponen te) proportional zum kumulativen Gleichspannungs-Offset im Bitstrorn aufweist. Da Ernpf ängerschaltungen nur begrenzte Gleichspannungsschwingungen ohne Überlastung annehmen können, ist es erwünscht, einen Code zu verwenden, der den kumulativen Gleichspannungs-Offset der codierten Daten beschränkt, um eine Ernpfängerüberlastung zu vermeiden.
  • Ferner ist erwünscht, ein Codierungsscherna zu verwenden, das eine periodische Gleichspannungs-Ausgeglichenheit 20 erreicht, welche als ein kumulativer Gleichspannungs- Offset von genau 0 am Ende jeder Gruppe von K Bits definiert ist, wobei K eine feste Anzahl von Bits ist. (Zum Beispiel kann K das einfache oder das zweifache der Länge M des codierten Wortes oder Blocks sein). Wenn ein Codierungsschema eine periodische Gleichspannungs-Ausgeglichenheit aufweist, besitzt dessen Bitstrom beschränkte Spektralkomponenten unterhalb einer vorgegebenen Frequenz proportional zu 1/K, wodurch einer Empfängerschaltung ermöglicht wird, einen Hochpaßfilter zu verwenden, um alle Spektralkomponenten unterhalb dieser Frequenz auszublenden und somit den Empfängergeräuschabstand zu verbessern.
  • Es wurden mehrere Datencodes vorgeschlagen und in unterschiedlichem Grad in der Digitalkommunikation verwendet. Zum Beispiel werden bekannte Manchester-Codes leicht implementiert, die eine maximale Lauflänge von zwei und eine Gleichspannungs-Ausgeglichenheit über eine Periode von zwei Bits aufweisen. Allerdings wird ihr Codierungsüberhang von 100% typischerweise als zu groß betrachtet. Ein weiterer bekannter Code, der Sperry-4b/5b-Code, weist eine maximale Lauflänge von 4 und lediglich einen Codierungsüberhang von 25% auf, jedoch kann er einen kumulativen Gleichspannungs-Offset aufweisen, der ohne zeitliche Begrenzung anwächst.
  • Ein weiterer bekannter Code ist der IBM-8b/lob-Code, der beschrieben ist in einem Artikel mit dem Titel "A DC- balanced, Partitioned-Block, 8b-10b Transmission Code", der erschienen ist in IBM J. Res. Develop., Bd. 27, Nr. 5, September 1983. Der IBM-8b/10b-Code wird in 3b/4b- und 5b/6b-Untercodierungen zerlegt. Er besitzt eine maximale Lauflänge von 5, ist sehr einfach in Hardware zu implementieren und besitzt ebenfalls einen Codierungsüberhang von 25% und beschränkt den kumulativen Gleichspannungs-Offset innerhalb des Bitstrorns auf ±3, während der kumulative Gleichspannungs-offset am Ende jedes 10- Bit-Codewortes auf ii beschränkt ist. Für viele Anwendungen ist ungünstig, daß der IBM-8b/10b-Code zu wenige Befehlswörter zuläßt und daß dessen maximale Lauflänge von 5 unerwünscht hoch ist. Außerdem kann sein kumulativer Gleichspannungs-Offset, der lediglich begrenzt und nicht periodisch ausgeglichen ist, Schwierigkeiten in der Empfängerfilterung hervorrufen.
  • Wie oben erwähnt, wird die Codierung alternativ verwendet, um Fehlererfassungs- und Fehlerkorrekturmechanismen für gesendete Signale zur Verfügung zu stellen. Die Fehlerkorrekturcodierung wird gewöhnlich mit ihren Anfangsbuchstaben abgekürzt, "ECC" = Error Correction Coding. Ein gewöhnlicher Ansatz zum Erfassen und Korrigieren von Fehlern in einem empfangenen Kommunikationssignal unter Verwendung einer ECC ist die Vorwärtsfehlerkontrolle, bekannt durch das Akronym "FEC" Forward Error Control. Bei der Vorwärtsfehlerkontrolle enthält jedes gesendete Wort, jeder Block oder Rahmen zusätzliche Bits an Informationen (manchmal "ECC"-, "Redundanz"-, "Schutz"- oder "Prüf"-Symbole genannt). Unter Verwendung dieser Symbole kann ein Empfänger Fehler detektieren (und in einigen FEC-Schemen die Position der Fehler lokalisieren), die im Bitstrorn des empfangenen Signals vorhanden sind. Wenn die Positionen der fehlerhaften Bits identifiziert sind, wird einfach durch Invertieren der identifizierten fehlerhaften Bits eine Korrektur erreicht, indem z. B. eine logische 1 in eine logische 0 geändert wird, oder umgekehrt. Auf diese Weise wird eine genaue Replika des gesendeten Signals erhalten, ohne daß eine Neuübertragung erforderlich ist.
  • Bevorzugte Formen der Fehlerschutzcodierung erzeugen Redundanzsymbole unter Verwendung eines FEC-Codes, der sowohl linear als auch systematisch ist. In einem linearen Code ergibt eine beliebige Summe zweier beliebiger codierten Werte einen weiteren codierten Wert. In einem systematischen Code enthält jedes Codewort einen Abschnitt, der mit den uncodierten Daten identisch ist; somit wird der resultierende FEC-Codeblock gebildet, indem die uncodierten Daten mit den durch den FEC-Code erzeugten Redundanzsymbolen verknüpft werden.
  • Ein Beispiel eines solchen FEC-Codes ist ein Hsiao-Code, der eine Hamming-Distanz (d. h. eine minimale Anzahl von Bitpositionen, in denen sich zwei beliebige gültige Codeblöcke unterscheiden) von 4. Mit dieser Hamming- Distanz kann dieser FEC-Code in der gesendeten Bitsequenz Einzelfehler korrigieren und Doppelfehler erfassen. Ein solcher Code erfordert 8 FEC-Redundanzbits, um insgesamt 64 bis 127 Bits im Dateneingang zu schützen, 7 Bits, um 32 bis 65 Bits zu schützen, 6 Bits um 16 bis 31 Bits zu schützen oder 5 Bits, um 8 bis 15 Bits zu schützen.
  • Bestehende FEC-Codierungsschemen sind im allgemeinen nur auf das Fehlererfassungs/Korrektur-Problern gerichtet und versuchen nicht, wie oben beschrieben die Übertragungseigenschaften der Daten zu verbessern (z. B. die Lauflänge und den kumulativen Gleichspannungs-offset). Es besteht Bedarf an einem verbesserten Codierungsschema, das gleichzeitig eine Fehlererfassung oder Korrektur sowie verbesserte Lauflängen- und Kumulativ-Gleichspannungs- Offset-Eigenschaften bietet.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die Erfindung bezieht sich auf einen Codierer, wie er im Anspruch 1 definiert ist.
  • Gemäß einem ersten Aspekt der Erfindung werden Eingangswerte für verbesserte Signaleigenschaften (z. B. begrenzte maximale Lauflänge und begrenzter kumulativer Gleichspannungs-Offset) datencodiert, so daß "Datencodewörter" gebildet werden, woraufhin mehrere der Datencodewörter, die gemeinsam als ein Block bezeichnet werden, fehlerschutzcodiert werden, vorzugsweise unter Verwendung eines herkömmlichen linearen und systematischen Vorwärtsfehlerkontroll-("FEC")-Codes, um einen FEC- Codeblock zu erhalten. Ein FEC-Codeblock wird vorzugsweise gebildet durch Erzeugen einer Anzahl von Prüfbits oder FEC-Bits gleich der Anzahl der Datencodewörter im Block, und anschließendes Verknüpfen eines FEC-Bits und seines binären Komplements mit jedem Datencodewort, so daß ein FEC-Bit und dessen Komplement zwischen den jeweils aufeinanderfolgenden Codewörtern eingefügt wird.
  • Ein Vorteil dieser Erfindung besteht darin, daß sie eine Fehlererfassung/Korrektur, eine begrenzte Lauflänge und einen begrenzten kumulativen Gleichspannungs-Offset gleichzeitig erreichen kann. Da jedes FEC-Bit mit seinem Komplement gepaart wird, bewirken die FEC-Bits an sich keinen kumulativen Gleichspannungs-Offset, so daß der resultierende FEC-Codeblock den gleichen beschränkten kumulativen Gleichspannungs-offset aufweist wie die Datencodewörter. Es wird vorzugsweise ein Datencodierungsscherna verwendet, wie durch einen weiteren Aspekt der vorliegenden Erfindung definiert, das einen kumulativen Gleichspannungs-offset am Ende jedes Codewortes von oder 1 Bit erreicht, wobei der FEC-codierte Block gemäß der vorliegenden Erfindung ebenfalls einen kumulativen Gleichspannungs-Offset von 0 oder nicht mehr als 1 Bit aufweist.
  • Ferner trägt die Plazierung eines FEC-Bits und seines Komplements zwischen jeweils aufeinanderfolgenden Codewörtern dazu bei, eine beschränkte Lauflänge im Bitstrom zu erreichen, in dem verhindert wird, daß ein beliebiger Lauf aufeinanderfolgender Bits mit dem gleichen Wert das Ende eines Codeworts in den Anfang des folgenden Codeworts hinein überschreitet. Wenn z. B. ein Codierungsschema so ausgelegt ist, das es einen Lauf von mehr als drei aufeinanderfolgenden Bits innerhalb eines Codewortes verhindert, ist es immer noch möglich, daß ein Codewort mit drei Logisch-1-Bits endet und das folgende Codewort mit drei Logisch-1-Bits beginnt, wodurch ein kombinierter Lauf von sechs aufeinanderfolgenden Logisch-1-Bits erzeugt wird. Die vorliegende Erfindung überwindet dieses Problem, indem ein Paar von komplementären Bits zwischen die zwei Codewörter eingefügt wird, wodurch sich eine Lauflänge von lediglich 4 statt 6 ergibt.
  • Diese Erfindung kann noch vorteilhafter in Kombination mit einem 10-Bit- oder 20-Bit-Datencodierungsscherna gemäß einem weiteren Aspekt der vorliegenden Erfindung verwendet werden, das die Lauflänge auf 3 Bits beschränkt, wenn der Lauf das erste oder letzte Bit des Codeworts enthält, und die Lauflänge innerhalb eines Codeworts auf 4 Bits beschränkt. Wenn das neuartige FEC-Codierungsschema mit dem neuartigen 10-Bit-Code oder dem neuartigen 20-Bit- Code kombiniert wird, besitzt der resultierende FECcodierte Blockcode eine maximale Lauflänge von 4 und einen maximalen kumulativen Gleichspannungs-Offset von 1 Bit.
  • In einer bevorzugten Ausführungsform kann z. B. ein 96- Bit-FEC-Codeblock aus acht 10-Bit-Datencodewörtern (gebildet von einem 8b/10b-Datencodierer), acht FEC-Bits und acht Bits der Komplemente der FEC-Bits gebildet werden. Die acht FEC-Bits werden aus den 80 Datenbits (acht 10-Bit-Codewörter) unter Verwendung eines herkömmlichen FEC-Algorithmus wie z. B. des obenerwähnten Hsiao- FEC-Schemas abgeleitet. Diese werden so angeordnet, daß zwischen jedem Paar von Datencodewörtern und dem letzten Datencodewort folgend ein FEC-Komplement-Paar angeordnet ist, d. h. ein Bit des FEC-Symbols und sein 1-Bit-Komplement. Die acht FEC-Bits können den gesamten 96-Bit-Block schützen. Somit beträgt bei diesem Codierungsschema der Überhang, der der Fehlerschutzcodierung zugeordnet ist, 25% (das gleiche wie beim 8b/10b-Datencodierungsüberhang). Ein weiterer Vorteil des 96-Bit-Block-Codierungsschemas besteht darin, daß es mehrere 8-Bit- oder 16-Bit- Datencodewörter aufnehmen kann und mit der vorhandenen 8- bit-orientierten Hardware und den Programmen kompatibel ist.
  • In einer weiteren bevorzugten Ausführungsform wird jeder 16-Bit-Eingangsdatenwert in ein 20-Bit-Datenwortcodepaar codiert, das aus einem 9-Bit-Codewort und einem 11-Bit- Codewort besteht. Das bevorzugte 16b/20b-Codierungsschema beschränkt die Lauflänge auf 4 und erreicht eine Gleichspannungs-Ausgeglichenheit am Ende jedes 20-Bit-Codewortpaares. (Die bevorzugte Hardwareimplementierung umfaßt einen Vorcodierer und entsprechende 8b/9b- und 10b/11b- Untercodierer, die zusammen die 16b/20b-Codierung durchführen.) Anschließend wird aus einem 80-Bit-Block, der aus vier 20-Bit-Codewortpaaren besteht, ein 8-Bit-FEC erzeugt. Ein FEC-Bit und sein binäres Komplement werden (als Vorspann oder als Nachspann) jedem 9-Bit- und jedem 11-Bit-Datencodewort hinzugefügt, wodurch ein 96-Bit-FEC- Block entsteht.
  • Beim Durchführen der Datencodierung, die zum Erzeugen der 9-, 10- oder 11-Bit-Datencodewörter in den obenbeschnebenen FEC-Versionen verwendet wird, werden 3/4/3-Maximumlauflängencodewörter aus einer im Speicher gehaltenen Tabelle ausgewählt oder unter Verwendung von Logikvor richtungen erzeugt. Solche Codewörter besitzen Lauflängen von nicht mehr als drei für jeden Lauf oder jede Sequenz von Bits, die entweder das erste Bit ("beginnende Lauflänge") oder das letzte Bit ("endende Lauflänge") der Codewörter enthält, sowie eine Lauflänge von nicht mehr als vier für jede Zwischensequenz, d. h. für jeden Lauf, der weder das erste noch das letzte Bit enthält.
  • Durch Auswählen solcher 3/4/3-Codewörter und durch Plazieren der FEC-Komplement-Paare gegenüberliegend zwischen den Datencodewörtern werden die Zwischencodelauflängen und selbstverständlich die Intra-Codewort-Maximallauflängen auf 4 begrenzt. Der Grund für die Zwischencodewortbeschränkung ist, daß eine endende Lauflänge von 3 plus dem folgenden einzelnen FEC-Bit (wenn dieses den gleichen Logikwert wie die endenden Bits der Codewörter aufweist) eine maximale Kette gleichwertiger Bits von 4 erzeugen, ebenso wie eine beginnende Laufkette von 3 und das vorangehende invertierte FEC-Bit. Wenn die FEC-Komplement- Paare nicht zwischen den Datencodewörtern angeordnet wären, wäre die Zwischencodewort-Lauflänge gleich 3 + 3 = 6. Somit werden durch Verwendung dazwischenhegender FEC-Paare kürzere Maximallauflängen für den Bitstrom des Digitalsignals erhalten.
  • Ferner wird durch die geeignete Auswahl und Verknüpfung von Datencodewörtern der kumulative Gleichspannungs- Offset des Laufstroms minimiert. Zum Beispiel wird bei einer 8b/lob-Codierung jeder Eingangswert in ein Datencodewort codiert, das entweder einen kumulativen Gleichspannungs-Offset von 0 (d. h. ein ausgeglichenes Codewort) oder von 1 (d. h. ein unausgeglichenes Codewort) aufweist. Wenn anschließend ein weiterer Eingangswert in das nächste unausgeglichene Codewort codiert wird, wird dessen Unausgeglichenheit so gewählt, daß die Unausgeglichenheit des vorangehenden unausgeglichenen Codewortes aufgehoben wird. Mit anderen Worten, die Datencodewörter werden so gewählt, daß sie ausgeglichen sind oder nach Möglichkeit mit einem zugeordneten Codewort mit dem entgegengesetzten kumulativen Gleichspannungs-Offset gepaart werden. Folglich ist der FEC-Codeblock immer dann ausgeglichen, wenn er eine gerade Anzahl unausgeglichener Datencodewörter enthält, und besitzt den minimal möglichen kumulativen Gleichspannungs-Offset von 1 Bit, wenn er eine ungerade Anzahl unausgeglichener Datencodewörter enthält. Daher ist der kumulative Gleichspannungs-Offset am Ende eines beliebigen Codewortes nicht größer als 1 Bit.
  • Analog hierzu weist bei der obenbeschriebenen 16b/20b- Codierung jedes Paar von 9-Bit- und 11-Bit-Segmenten von den Codierern entgegengesetzte kumulative Gleichspannungs-Offsets auf, die einander aufheben. Somit ist der FEC-Block, der mehrere Paare dieser Segmente enthält, bezüglich der Gleichspannung ausgeglichen.
  • Gemäß einem weiteren Aspekt der Erfindung werden die komplementären FEC-Bit-Paare am Empfänger verwendet, um einen geeigneten Rahmen des FEC-Code-Blocks vor der Decodierung zu erhalten.
  • Eine Rahmenschaltung untersucht die Bits des empfangenen Signals und identifiziert Blockgrenzen durch Erfassen von Fehlern in den FEC-Komplement-Paaren und in den Datencodewörtern und verschiebt die Rahmengrenze, bis die Fehler minimiert sind. Anschließend wird zum Decodieren des FEC-Code-Blocks eine erste FEC-Decodierung für den gesamten FEC-Codeblock durchgeführt, um die FEC-Bits, deren Komplemente und die Datencodewörter wiederzugewinnen, woraufhin die erfaßten Fehler in den Datencodewörtern korrigiert werden, woraufhin schließlich die Datendecodierung durchgeführt wird, um die zugrundeliegenden Informationen wieder zugewinnen.
  • Es ist klar, daß die obenbeschriebene Technik zum Erzeugen von Datencodewörtern mit einem beschränkten kumulativen Gleichspannungs-Offset in Anwendungen verwendet werden kann, die keine Fehlerschutzcodierung verwenden. Zum Beispiel kann ein 2/4/2-Code in Verbindung mit dieser Technik verwendet werden, um eine maximale Laufl2nge von 4 sowie einen beschränkten kumulativen Gleichspannungs- Offset im Bitstrom eines Digitalsignals zu erhalten.
  • Alternativ können zwischen den Codewörtern Pseudokomplement-Paare plaziert werden.
  • Die Erfindung umfaßt die obenerwähnten verschiedenen neuartigen Codierungstechniken, sowie andere, die in den im folgenden beschriebenen Ausführungsformen beispielhaft erläutert werden, wobei der Umfang der Erfindung in den beigefügten Ansprüchen angegeben ist.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Für ein vollständigeres Verständnis der Eigenschaften und der Aufgaben der Erfindung wird auf die folgende genaue Beschreibung beispielhafter Ausführungsform in Verbindung mit den beigefügten Zeichnungen Bezug genommen, in welchen:
  • Fig. 1 ein Blockschaltbild einer Codierungsschaltung ist, die einen 16b/20b-Datencodierer und einen FEC-Codierer gemäß einer ersten Ausführungsform der Erfindung enthält;
  • Fig. 2 eine Tabelle ist, die die Anzahl der Codewörter zeigt, die verschiedenen Maximallauflängenkriterien entsprechen;
  • Fig. 3A ein Blockschaltbild eines einzelnen direkten 8b/10b-Datencodierer gemäß einer zweiten Ausführungsform der Erfindung ist;
  • Fig. 38 eine Wahrheitstabelle für den Unausgeglichen- Detektor der Fig. 3A ist;
  • Fig. 3C ein Blockschaltbild eines einzelnen direkten 8b/10b-Datencodierers gemäß einer weiteren Ausführungsform der Erfindung ist;
  • Fig. 3D eine Nachschlagtabelle für den Codierer der Fig. 3C ist;
  • Fig. 4 ein Blockschaltbild einer Schaltung zum gleichzeitigen Codieren mehrerer Codewörter auf Oktettbasis gemäß einer dritten Ausführungsforrn der Erfindung ist;
  • Fig. 4A eine Auswahl-Unausgeglichen-Nachschlagtabelle für den Speicher der Fig. 4 ist;
  • Fig. 5 ein Blockschaltbild einer 16-Bit-Wort-orientierten 16b/20b-Codierungsschaltung&sub1; die 8b/9b- und 10b/11b- Untercodierer verwendet, gemäß einer vierten Ausführungsform der Erfindung ist;
  • Fig. 5A eine Übersetzungstabelle für den Vorcodierer der Fig. 5 ist;
  • Fig. 6 eine 16b/20b-Codierungsschaltung für Codewörter auf Oktettbasis, die 8b/9b- und 10b/11b-Untercodierer verwendet, gemäß einer fünften Ausführungsform der Erfindung ist;
  • Fig. 6A eine Übersetzungstabelle für den Vorcodierer der Fig. 6 ist;
  • Fig. 7 ein Blockschaltbild eines Kommunikationssystems ist, das die Codierungsschaltung der Fig. 6 verwendet; und
  • Fig. 8 ein Blockschaltbild der Rahmen- und Datenwiedergewinnungsschaltung der Fig. 7 ist.
  • BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORM a. Daten- und FEC-Codierungsschaltung
  • Die Fig. 1 zeigt eine Schaltung sowohl zur Datencodierung als auch zur FEC-Codierung von 32-Bit-Datensignalen in einen 96-Bit-FEC-Codeblock. Die Datensignale enthalten jeweils zwei 16-Bit-Segmente DATA0, DATA1, wobei jedes Segment z. B. Daten oder Befehlsinformationen darstellt und einem von zwei 2-Bit-CMD-Signalen CMD0, CMD1 zugeordnet ist. Jedes CMD-Signal besitzt einen Wert, der angibt, ob das zugehörige Segrnent Befehlsinformationen enthält, d. h. ob es ein Befehlssignal ist, oder ob es Dateninformationen enthält, d. h. ob es ein Datensignal ist.
  • Jedes Segrnent DATA0, DATA1 wird gemeinsam mit seinem zugehörigen CMD-Signal an einen 16b/20b-Datencodierer 14a, 14b angelegt. Die Datencodierer 14a, 14b übersetzen die Segmente DATA0, DATA1 in entsprechende 20-Bit-Datencodewörter, die anschließend in einem entsprechenden Register 16a, 16b gespeichert werden. Die zwei 20-Bit- Datencodewörter, die in den Registern 16a, 16b gespeichert sind, werden anschließend einem 1:2-Demultiplexer 18 zugeführt, der diese mit zwei weiteren 20-Bit-Daten- codewörtern verknüpft, die vorher oder anschließend von den Datencodierern 14a, 14b erzeugt werden.
  • Die vier 20-Bit-Datencodewörter werden anschließend als ein 80-Bit-Block an ein Register 20 angelegt. Jedes Datencodewort im 80-Bit-Block ist vorzugsweise seinerseits bezüglich der Gleichspannung ausgeglichen. Wenn der 80-Bit-Block Datencodewörter enthält, die bezüglich der Gleichspannung nicht ausgeglichen sind, dann haben seine Datencodewörter verschobene Ungleichgewichte bis zum möglichen Ausmaß, so daß der gesamte 80-Bit-Block einen minimalen kumulativen Gleichspannungs-Offset aufweist bezüglich der Gleichspannung ausgeglichen ist. Die Technik, um dies zu erreichen, wird im folgenden beschrieben.
  • Die 80-Bits der Datencodewörter werden anschließend sowohl an einen FEC-Symbolgenerator 22 als auch an ein Register 24 angelegt. Der FEC-Symbolgenerator 22 erzeugt aus den Datencodewörtern ein 8-Bit-FEC-Syrnbol, d. h. ein ECC-Syrnbol, das für die Vorwärtsfehlerkontrolle verwendet wird. Diese FEC-Bits werden sowohl an einen 8-Bit-Invertierer 26 als auch direkt an das Register 24 angelegt. Der Invertierer 26 invertiert die Bitwerte des FEC-Symbols, wodurch invertierte oder komplementäre FEC-Bits erzeugt werden, die dem Register 24 zugeführt werden.
  • Das Register 24 verknüpft die Datencodewörter, die FEC- Bits und die invertierten FEC-Bits in abwechselnder Weise. Genauer folgt jedem der acht 20-Bit-Datenwörter eines der acht FEC-Bits und dessen komplementäres Bit.
  • Mit anderen Worten, die Komplernent-FEC-Paare werden innerhalb des FEC-Codeblocks der codierten Daten verteilt. Dies beschränkt nicht nur effektiv die Zwischencodewort-Lauflängen, sondern die Komplement-FEC-Paare werden auch bezüglich der Gleichspannung ausgeglichen, weshalb der kumulative Gleichspannungs-Offset des 80-Bit- Blocks unverändert bleibt.
  • Der 96-Bit-FEC-Codeblock wird an einen 6:1-Multiplexer 26 angelegt, um einen 16-Bit-Datenausgang zu erzeugen, der anschließend im Register 28 gespeichert wird und für eine serielle 16-Bit-Übertragung bereitsteht.
  • Während die Codierungsschaltung 10 die 16-Bit-Dateneingänge unter Verwendung zweier paralleler 16b/20b-Datencodierer 14a, 14b verarbeitet, können vier parallele 8b/10b-Codierer verwendet werden, statt die Schaltung 10 geeignet anzupassen, wie für Fachleute offensichtlich ist. Im folgenden werden verschiedene Ausführungsformen für die 16b/20b- und 8b/10b-Codierung beschrieben.
  • Eine bevorzugte Ausführungsform des jeweiligen Datencodierers 14a, 14b verwendet die Vorcodierung und die 8b/9b- und 10b/11-Untercodierung. Dies führt zu 9-Bit- und 11-Bit-Datencodewörtern. Die 9b/lob-Partitionierung der 20b-Unterblockstruktur erleichtert die Codierung und Decodierung und erlaubt das Beschränken sowohl der maximalen Lauflänge als auch des kumulativen Gleichspannungs-0ff sets. Durch geeignete Wahl der Datencodewörter wird das Gleichspannungs-Ungleichgewicht in jedem 9-Bit- und in jedem 11-Bit-Segment auf einen Wert von logisch 1 oder logisch 0 beschränkt, was das minimal mögliche Ungleichgewicht für Segmente mit ungeradzahliger Länge ist. wenn die 9-Bit- und 11-Bit-Segmente entgegengesetzte Ungleichgewichte besitzen, kann die zusammengesetzte 20-Bit- Sequenz ausgeglichen gestaltet werden. Ferner beschränkt die Verwendung der Teilmenge der 9-Bit- und 11-Bit-Datencodewörter, die einen 3/4/3-Maximumlauflängenkriterium wie im folgenden erläutert entsprechen, die maximale Lauflänge auf 4.
  • Bei diesem Typ der Datencodierung werden beim Erzeugen der FEC-Codeblöcke vorzugsweise einzelne FEC-Bits und invertierte FEC-Bits in Paaren zwischen den 9-Bit- und 11-Bit-Segmenten plaziert, um die maximale Lauflänge zu reduzieren.
  • Der FEC-Codeblock enthält somit insgesamt 16 FEC-Bits und 80 Bits an codierten Daten in Form von vier 20-Bit-Unterblockabschnitten. Jeder Unterblock ist bezüglich der Gleichspannung ausgeglichen. Die modular ausgeglichene 168/208-Unterblockcodierung vereinfacht den Chipentwurf und ermöglicht die Verwendung von 8/5-, 16/14-, 32/30- sowie 64/62-Daten/Befehls-Bitlängenwörtern.
  • Mit anderen Worten, der Codeblock besteht aus vier strukturell ähnlichen Unterblöcken von jeweils 24 Bits. Jeder 24-Bit-Unterblock enthält 20 Bits an codierten Daten, die weiter in 9-Bit- und 11-Bit-Segmente unterteilt sind. Zwischen den jeweiligen Segmenten befindet sich ein Bit des FEC und dessen Umkehrung. Am Ende des 11-Bit-Segments befindet sich ein zusätzliches FEC-Bit und das invertierte FEC-Bit. Da jeder 24-Bit-Unterblock zwei FEC-Bits enthält und vier Unterblöcke vorhanden sind, enthält der gesamte Block acht FEC-Bits. Die Blockstruktur ergibt sich daher wie folgt:
  • BLOCK = [24-Bit-Unterblock] [24-Bit-Unterblock] + (24-Bit-Unterblock) [24-Bit-Unterblock]
  • UNTERBLOCK = [9 Bits codierte Daten] [FEC-Bit] [inverses FEC-Bit] + [11 Bits codierte Daten] [FEC-Bit] [inverses FEC-Bit]
  • (Das "+"-Syrnbol im vorangehenden Schaubild stellt eine Verknüpfung dar, d. h. die auf zwei aufeinanderfolgenden Zeilen der Seite dargestellten Daten sind in Wirklichkeit ein kontinuierlicher Bitstrom.)
  • Der FEC-Symbolgenerator 22 verwendet vorzugsweise eine Hamming-Abstand-4-Hsiao-Blockcodierungsprozedur, die Einzelfehler korrigiert und Doppelfehler erfaßt. Um zu verfügbaren Multiplexern und Demultiplexern und anderen allgemein verwendeten Schnittstellen kompatibel zu sein, ist die Codelänge ein Vielfaches von 8. Mit 8 Bits an Vorwärtsfehlerkontrollsymbolen ist es möglich, Blöcke (die FEC-Bits enthalten) zu schützen, die 64 bis 127 Bits enthalten. Die Datencodewortlänge von 80 Bits (d. h. 4 codierte 20-Bit-Wörter oder 8 10-Bit-Wörter) ist vorteilhaft, da sie den FEC-Überhang reduziert und die Verbindungseffizienz verbessert.
  • Die Erfindung bietet somit Vorwärtsfehlerkorrekturfähigkeiten und gute Signaleigenschaften (d. h. kurze Maximallauflängen und eine minimale kumulative Gleichspannungs- Unausgeglichenheit oder eine periodische Ausgeglichenheit) zur Verwendung mit z. B. Glasfaserübertragungsmedien. Der dem Datencodiererabschnitt zugeordnete Überhang von 25 % und der dem FEC-Codiererabschnitt zugeordnete Überhang von 25 % werden unter Verwendung einer Blockcodierungsprozedur erreicht, die in der Implementierung sowohl einfach als auch praktisch ist.
  • b. Einführung der Lauflänge
  • Die maximale Signallauflänge des Bitstroms kann durch die Maxirnallauflängeneigenschaften der einzelnen codierten Wörter, die der Bitstrom enthält, festgelegt werden. Die Lauflängeneigenschaften der codierten Wörter können anhand der Ausdrücke beginnende Lauflinge, mittlere maximale Lauflänge und Endlauflänge analysiert werden. Ein Code, der so beschränkt ist, daß er eine Lauflänge von nicht mehr als i am Beginn, eine Lauflänge von nicht mehr als j in der Mitte und eine Lauflänge von nicht mehr als k am Ende aufweist, kann als i/j/k-Maximallauflängencodierung bezeichnet werden, wobei "i", "j" und "k" ganze Zahlen sind. Zum Beispiel erzeugen kontinuierliche Sequenzen von 2/5/3-Codes einen seriellen Bitstrom, der eine maximale Lauflänge von i + k = j = 2 + 3 = 5 aufweist. In ähnlicher Weise erzeugt eine kontinuierliche Sequenz von 3/4/3-Codewörtern einen seriellen Bitstrom, der eine maximale Lauflänge von i + k = 6 aufweist, da "j" für 3/4/3-Codewörter kleiner ist als i + k. Eine Sequenz von 3/4/3-Codewörtern, die durch eine Serie von Bits getrennt sind, die so gewählt sind, daß sie eine beginnende und eine endende Lauflänge von "c" aufweisen ("c" ist eine positive ganze Zahl), ergibt jedoch eine maximale Lauflänge für den Bitstrom, die dem Maximum von "c + i", "j " oder "k + c" entspricht, was für 3/4/3- Codewörter gleich c + i = k + c ist. Wenn 3/4/3-Codewörter durch ein komplementäres Paar von Bits getrennt sind (z. B. durch FEC-Bits "1"/"0" oder "0"/"1"), ist c = 1 und die maximale Lauflänge des resultierenden Bitstroms gleich 1 + i = k + 1 = 4.
  • Die Anzahl der Codes, die den gegebenen Beginn/Mitte/Ende-Lauflängenkriterien entsprechen, kann durch Auflisten aller Codewörter der erforderlichen Anzahl von Bits und durch Löschen der Codewörter, die die Lauflängenkriterien verletzen, ermittelt werden. Eine solche Prozedur kann von einem Cornputerprozessor schnell ausgeführt werden. Für eine zukünftige Bezugnahme ist die Tabelle der Fig. 2 eine vom Computer erzeugte Liste der Anzahl der Codes, die verschiedene Lauflängenkriterien erfüllen.
  • c. 8b/10b-Datencodierung mit FEC-Komplementärdaar-Separatoren
  • Wie oben erwähnt worden ist, kann die Datencodierung vorteilhaft unter Verwendung der 8b/lob-Codierung durchgeführt werden. Gemäß der Erfindung beschränkt ein neuartiger direkter 8b/10b-Codierungsansatz unter Verwendung von komplementären FEC-Bitpaaren die Lauflängen am jeweiligen Ende von 10b-Codewörtern und ermöglicht, daß 28 Datencodes und 2&sup7; Befehlscodes erzeugt werden. Dieser Code weist eine maximale Lauflänge von 4, einen maximalen kumulativen Gleichspannungs-Offset von 4 1-Bits oder 0- Bits innerhalb eines Codewortes sowie einen maximalen kumulativen Gleichspannungs-Offset (DC-Offset) am Ende jedes Codeworts von einem einzigen Bit auf.
  • Mit diesem 8b/10b-Code ist es nicht möglich, konsistent eine periodische Codeausgeglichenheit zu erhalten (d. h. eine Ausgeglichenheit am Ende jedes Codeworts); es gibt nur 228 ausgeglichene 10-Bit-Codewörter, die das 3/4/3- Lauflängenkritenum erfüllen, was nicht genug ist, um ein separates ausgeglichenes 10-Bit-Codewort für jedes der 256 möglichen uncodierten 8-Bit-Datenwörter zuzuweisen.
  • Das beste was erreicht werden kann, ist die Beschränkung des kumulativen Gleichspannungs-Offsets am Ende jedes Codeworts auf ein einzelnes Bit "1" oder "0". Gemäß der vorliegenden Erfindung wird dies erreicht durch Abbilden möglichst vieler (bis zu 228) der 8-Bit-Datenwörter auf ausgeglichene 10-Bit-Codewörter und Abbilden aller übrigen 8-Bit-Datenwörter auf eines von zwei alternativen 10- Bit-Codewörtern, die zueinander bitweise komplementär sind und ein Ungleichgewicht von nur einem Bit aufweisen. Immer dann, wenn ein 8-Bit-Datenwort codiert werden soll, das auf eines der unausgeglichenen 10-Bit-Codewörter abgebildet wird, wählt der Codierer für das Datenwort dasjenige der zwei alternativen Codewörter aus, das die kumulative Ausgeglichenheit wiederherstellt.
  • Mit anderen Worten, wenn die kumulative Unausgeglichenheit einen Überschuß an "Einsen" enthält, wird das nichste unausgeglichene Codewort so gewählt, daß es eine Unausgeglichenheit mit dem entgegengesetzten Vorzeichen aufweist, d. h. einen Überschuß an "Nullen". Dies wird erreicht durch Auswihlen eines zweiten unausgeglichenen Codeworts, dessen Unausgeglichenheit derjenigen des ersten Codeworts entgegengesetzt ist. Durch diese Auswahl der unausgeglichenen Codewörter zum Ausgleichen des Ungleichgewichts des zuletzt unausgeglichenen Codeworts ist der kumulative Netto-Gleichspannungs-Offset am Ende eines beliebigen Blocks von Codewörtern (und somit am Ende einer vollständigen Nachricht) nicht größer als ein einzelnes Bit "1" oder "0". Obwohl nicht sichergestellt ist, daß der Bitstrom periodisch ausgeglichen ist, ist daher der kumulative Gleichspannungs-Offset auf wohldefinierte Grenzen beschränkt.
  • Die Anzahl der verfügbaren Codewörter, die die obenerwähnten Kriterien für die Lauflänge und den kumulativen Gleichspannungs-Offset erfüllen, können berechnet werden.
  • Die Gesamtzahl der ausgeglichenen 10-Bit-Wörter ist die Kombination aus zehn Elementen, die fünffach zusammengefaßt werden, oder 10!/(5!5!) = 252. Es ist daher möglich, 28 = 256 Datenwerte mit ausgeglichenen 10-Bit-Codewörtern darzustellen. Wie in der Tabelle der Fig. 2 gezeigt, gibt es außerdem nur 228 ausgeglichene 3/4/3-Codes; 3/4/3- Codes werden bevorzugt, da sie mit komplementären FEC- Bitpaaren verwendet werden können, um Bitströme mit einer maximalen Lauflänge von 4 zu erzeugen. Wie in Fig. 2 gezeigt, gibt es jedoch zusätzliche Codewörter, die eine Unausgeglichenheit eines einzelnen "1-Bits" aufweisen (d. h. 6 "Einsen" und 4 "Nullen"), von denen 165 das 3/4/3-Kriterium erfüllen. In ähnlicher Weise gibt es eine gleiche Anzahl von Codes, die ein überschüssiges "0-Bit" besitzen. Daher können 228 Eingangswerte mit ausgeglichenen Codewörtern dargestellt werden, wobei eine zusätzliche Anzahl von (bis zu 165) Eingangswerten durch eines von zwei unausgeglichenen 10-Bit-Codewörtern dargestellt werden können, wobei jedes der Codewörter zum anderen bitweise komplementär ist. Mit diesem Ansatz gibt des insgesamt 228 + 165 = 393 3/4/3-Codes, die zur Verfügung stehen. Von diesen 393 10-Bit-Codewörtern werden 256 benötigt, um die 8-Bit-Datenwörter zu codieren, so daß die übrigen 137 10-Bit-Codewörter zur Verfügung stehen, um bis 137 verschiedene Befehlswörter zu codieren (d. h. mehr als genug, um die 128 möglichen 7-Bit-Befehlswörter zu codieren). Mit diesem Codierungsschema kann somit ein 10-Bit-Codewort ein 8-Bit-Datenwort oder ein 7-Bit-Befehlswort darstellen. Die Verwendung der 3/4/3-Codes, die durch komplementäre FEC-Bitpaare getrennt sind, garantiert eine maximale Lauflänge von 4.
  • d. Beisdielhafte Ausführungsform eines einzelnen direkten 8b/10b-Datencodierers.
  • Die Fig. 3A zeigt einen einzelnen direkten 8b/10b-Datencodierer 40. Der Codierer 40 enthält einen Ungleichgewichtsdetektor 42, eine Kipp-Flip-Flop-Schaltung 44 sowie einen Speicher 46. Der Codierer 40 unterscheidet die 8- Bit-Eingangsworten, deren zugehörige 10-Bit-Codewörter ausgeglichen sind, von denjenigen, deren Codes unausgeglichen sind. Für die letzteren Eingangswerte, die auf komplementäre Paare von unausgeglichenen Codewörtern abgebildet worden sind, wählt er ein unausgeglichenes Codewort aus, das die Historie des vorangehenden Laufs berücksichtigt und einen Codestrorn erzeugt, der das minimale Ungleichgewicht aufweist. Immer wenn ein Codewort mehr logische Einsen als logische Nullen enthält, ist somit das nächste unausgeglichene Codewort, das vom Codierer 40 ausgewählt wird, von entgegengesetzter Unausgeglichenheit, d. h. es enthält mehr logische Nullen als logische Einsen.
  • Der Ungleichgewichtsdetektor 42 prüft, ob der Code ausgeglichen ist; d. h. er erkennt, ob ein Codewort unausgeglichen ist. Wenn ein Codewort unausgeglichen ist, erzeugt der Ungleichgewichtsdetektor 42 ein Ungleichgewichtssignal, dessen Wert eine logische 1 ist. Wenn das Codewort ausgeglichen ist, ist der Ungleichgewichts- Signalwert gleich logisch 0.
  • Der Ungleichgewichtsdetektor 42 besitzt ein UND-Gatter 50, an das drei höchstwertige Bits (MSB's) des Eingangssignals als separate Eingänge A5-A7 angelegt werden. (Die niedrigstwertigen Bits (LSB's), mit AO-A6 bezeichnet, werden im Ungleichgewichtsdetektor 42 aus den folgenden Gründen nicht verwendet.) Der Ausgang des UND-Gatters 50 wird als ein erster Eingang an ein ODER-Gatter 52 angelegt, wobei der andere Eingang ein CMD-Signal ist, das anzeigt, ob das Eingangssignal Befehlsinformationen enthält. Der Ausgang des ODER-Gatters 52 ist das Ungleichgewichts signal.
  • Die Operation des Ungleichgewichtsdetektors kann mit Bezugnahme auf die entsprechende Wahrheitstabelle, die in Fig. 3 gezeigt ist, verstanden werden. Zum Verständnis der Tabelle sei jedoch folgendes erwähnt: Aus Fig. 2 wird deutlich, daß es 228 ausgeglichene 10b-Codewörter gibt, (d. h. 10b-Codewörter mit fünflogischen Einsen), die auch eine maximale Lauflänge von 3/4/3 aufweisen, sowie 165 10b-Codewörter mit Unausgeglichenheiten von 1 (d. h. Codewörter mit vier oder sechs logischen Einsen, und maximalen Lauflängen von 3/4/3. Das Umsetzen dieser Anzahlen der Codewörter ins Binärsystem ergibt:
  • 228 (dec) = 11100100 (bin)
  • 165 (dec) = 10100101 (bin)
  • Diese Zahlen können abgerundet werden, wodurch sich 224 (dec) = 11100000 (bin) ausgeglichene Codewörter und 160 (dec) = 10100000 (bin) unausgeglichene Codewörter ergeben, die zur Verfügung stehen und das aufgestellte Maximallauflängenkriteriurn 3/4/3 erfüllen. Somit können Eingangsdatensignalwerte kleiner als 224 (11100000&sub2;) durch ausgeglichene Codewörter dargestellt werden, während die Eingangsdatenwerte von 224 bis 255 durch unausgeglichene Codewörter dargestellt werden können und die eingegebenen Befehle von 256 bis 383 (insgesamt 128) durch unausgeglichene Codewörter dargestellt werden können. Mit diesem Schema ist das Kriterium zum Erkennen eines unausgeglichenen Codeworts, daß die drei höchstwertigen Bits (A5, A6, A7) Einsen sind.
  • Mit dieser Hintergrundinformation kann die Tabelle der Fig. 3 nun leicht verstanden werden. In der Tabelle bezeichnet "1" eine logische 1, "0" eine logische 0 und "x" entweder eine logische 1 oder eine logische 0. Durch Verwenden nur dieser drei höchstwertigen Bits des Dateneingangssignals und des Befehlssignals wird die Ungleichgewichtsdetektorschaltung 42 vereinfacht.
  • Wie gezeigt, ist der Ausgang des UND-Gatters 50 eine logische 0, wenn seine drei Eingangsleitungen A7-A5 nicht alle "1" sind, was Eingangssignalwerte unterhalb 224 anzeigt, die ausgeglichenen Codewörtern entsprechen. Der Ausgang des UND-Gatters so ist immer dann eine logische 1, wenn alle seine Eingangsleitungen auf "1" gesetzt sind, was Eingangssignalwerte gleich oder oberhalb 224 anzeigt, die unausgeglichenen Codewörtern zugeordnet sind. Das ODER-Gatter 52 erzeugt ein Ungleichgewichtssignal mit einem Wert von logisch 1, wenn der Ausgang des UND-Gatters 50 eine logische 1 ist oder wenn das CMD Signal gesetzt ist, d. h. einen Wert von logisch 1 aufweist, was in jedem Fall ein unausgeglichenes Codewort anzeigt. Andererseits erzeugt das ODER-Gatter 52 ein Ungleichgewichtssignal mit einem Wert Von logisch 0, wenn irgendeines der Eingangssignalbits eine logische 0 ist, was anzeigt, daß die Eingangssignalwerte kleiner als 224 sind, wobei das CMD-Signal nicht gesetzt ist. Diese Bedingung entspricht den ausgeglichenen Codewörtern.
  • Die Kipp-Flip-Flop-Schaltung 44 dient zum Bewahren des vorhandenen Zustands des Ungleichgewichtssignals, bis der nächste unausgeglichene Code erzeugt wird, wobei ein Exklusiv-ODER-Gatter 44a und eine Speichervorrichtung wie z. B. ein D-Typ-Flip-Flop oder ein Register 44b verwendet werden, um das letzte Ungleichgewichtssignal zu speichern. Jedesmal dann, wenn das nächste zu sendende Codewort unausgeglichen ist, bewahrt das Flip-Flop seinen Zustand. Der Ausgang der Kipp-Flip-Flop-Schaltung 44 wird an den Speicher 46 angelegt, um das geeignete Codegleichgewicht für den nächsten unausgeglichenen Code auszuwählen.
  • Der Speicher 46 wird vorzugsweise als Nur-Lese-Speicher ("ROM") oder als programmierte Logikmatrix ("PLA") implementiert und führt eine 10b/10b-Codierung unter Verwendung einer gespeicherten Nachschlagtabelle von Codewörtern durch. Die Nachschlagtabelle erzeugt ein 10-Bit- Codewort für jeden 10-Bit-Eingang. Der 10-Bit-Eingang besteht aus einem Einzelbit-Ungleichgewichtsausgang der Kipp-Flip-Flop-Schaltung 44 sowie dem Befehlssignal CMD und den Datenbits A7-A0, die an den Speicher 46 angelegt werden, nachdem sie (in einer Verzögerungsvorrichtung 47 wie z. B. einer Registerbank) verzögert worden sind, um im selben Taktzyklus anzukommen wie der entsprechende Ausgang der Schaltung 44. Der Speicher 46 implementiert das Codewortzuweisungsschema, das oben dargestellt worden ist, wobei für diejenigen Dateneingänge, die durch zwei Komplementäre unausgeglichene Codewörter dargestellt werden, zwischen zwei Codewörtern entsprechend dem Ungleichgewichtsausgang der Kipp-Flip-Flop-Schaltung 46 ausgewählt wird, so daß ein vorangehendes Ungleichgewicht eines vorher codierten Eingangs ausgeglichen wird. Die Codewortzuweisungen, die dies bewerkstelligen müssen, verwenden den Ausgang der Kipp-Flip-Flop-Schaltung 44, um auf der Grundlage der Unausgeglichenheit der letzten Eingabe zu ermitteln, welche Unausgeglichenheit das Codewort ausweisen soll.
  • Die Fig. 3C zeigt einen alternativen Typ von Codierer. Der Codierer-ROM 46c kann im allgemeinen das gleiche sein wie der ROM 46 der Fig. 3b, mit der Ausnahme, daß jede Stelle zusätzlich ein elftes Bit enthält, nämlich das Ungleichgewichtssignal, um anzuzeigen, ob die anderen 10 Bits ein ausgeglichenes Codewort bilden. Dieses Bit wird in eine Kipp-Flip-Flop-Schaltung 47 eingegeben, die zur Schaltung 44 der Fig. 3A identisch ist, um einen ähnlichen Eingang für den Decodierer-ROM 46c zu erzeugen.
  • Die Fig. 3D zeigt die im Decodierer-ROM 46c gespeicherte Nachschlagtabelle. Die ersten drei Spalten in der Tabelle stellen die Eingänge in den ROM 46c dar (d. h. ROM-Adressen), während die vierte Spalte das ausgegebene elfte Bit oder das Ungleichgewichtssignal darstellt und die fünfte Spalte den 10-Bit-Codewortausgang darstellt.
  • Die Nachschlagtabelle führt das Ungleichgewichtssignal einer Kipp-Flip-Flop-Schaltung 44a zu, die anschließend dieses an den Speicher 46a anlegt, wie in Verbindung mit Fig. 3A beschrieben worden ist.
  • e. Mehrfache Datencodierungsschaltung auf Oktettbasis
  • 15 Die Fig. 4 zeigt einen Komposit-Codierer 60 zur gleichzeitigen Blockcodierung mehrerer (z. B. 4) Wörter auf Oktettbasis. Die Schaltung 60 enthält vier parallele Ungleichgewichtsdetektoren 62a-62d, vier 10b/10b-Komponentencodierer 66a-66d, die jeweils in Fig. 3A allgemein gezeigt sind, sowie einen Speicher 74.
  • Das Erreichen der minimalen Unausgeglichenheit, wenn vier Wörter auf Oktettbasis gleichzeitig verarbeitet werden sollen, stellt eine Komplikation dar, die bei der Nicht- Block-Codierung nicht berücksichtigt ist. Genauer zeigt jedes 10-Bit-Eingangswort für jeden Komponentencodierer 66a-66d im Komposit-Codierer 60, das entweder Daten oder Befehlsinformationen enthält, an, ob das Ausgangscodewort unausgeglichen ist, wie oben in Verbindung mit Fig. 3A beschrieben worden ist, wobei jedoch die geeignete Wahl zum Minirnieren des Ungleichgewichts im Block von der Leistung aller Komponentencodierer abhängt, weshalb die Komponentencodierer voneinander abhängig sind und auf extern zugeführte Informationen zurückgreifen müssen (extern für die jeweilige eigene Schaltung des Komponentencodierers), um die Unausgeglichenheit des resultierenden Laufstroms zu minirnieren.
  • Ein Weg zum Erzeugen dieser externen Informationen besteht darin, ein Vorwärtsspeisesignal in Serie von einem Komponentencodierer zu einem weiteren und vom letzten Komponentencodierer zurück zum ersten weiterzuleiten, um die Auswahl der nachfolgenden Codewörter zu beeinflussen und einen minimalen kumulativen Gleichspannungs-Offset zu erhalten. Ungünstigerweise kann dieser Ansatz in einigen Anwendungen nicht verwendet werden, da die für das Vorwärtsspeisesignal erforderliche Zeitspanne zum Weiterleiten von Codierer zu Codierer im allgemeinen zu lang ist, um in einem einzigen Taktzyklus bewerkstelligt zu werden.
  • Ein schneller und somit bevorzugter Lösungsansatz ist in Fig. 4 gezeigt, in der ein Auswahlungleichgewichtssignalgenerator verwendet wird, der vier Ungleichgewichtsdetektoren 62a-62d, einen Nur-Lese-Speicher 74 und einen Zwischenspeicher 76 umfaßt. Die Detektoren 62a-62d speisen ihre jeweiligen Ungleichgewichtssignale U1-U4 als Adreßsignale in den Speicher 74 ein, der auch ein Voraus- Ungleichgewichts-Signal als Teil seiner Adreßeingabe empfängt. Der Speicher 74 kann ein einzelner ROM oder eine PLA mit fünf Eingängen und fünf Ausgängen sein. Der Speicher 74 speichert eine Auswahl-Ungleichgewichts- Nachschlagtabelle. Der Ausgang dieser Nachschlagtabelle wird als ein Auswahl-Ungleichgewichts-Signal über vier Signalleitungen S1-S4 den Komposit-Codierern 66a-66d zugeführt. Das Auswahl-Ungleichgewichts-Signal zeigt den entsprechenden Gleichspannungs-Unausgeglichenheitszustand des Codeworts an, der von jedem der vier Komposit-Codierer 66a-66d gewählt werden soll. Ein Nächstes-Ungleichgewicht-Ausgangsbit des Speichers 74 wird dem Zwischenspeicher 76 zugeführt, dessen Ausgang ein Vor-Ungleichgewicht-Signal ist, das das Ungleichgewicht anzeigt, das verwendet werden soll, um das nächste Auswahl-Ungleichgewichts-Signal zu erzeugen. Der Zwischenspeicher 76 hält das Nächstes-Ungleichgewicht-Signal und führt dieses anschließend dem Speicher 74 in dem Taktzyklus zu, in dem der nächste Satz von vier Ungleichgewichtssignalen U1-U4 von den Ungleichgewichtsdetektoren 42a-42d zugeführt wird. Somit ist das Nächstes-Ungleichgewicht-Signal ein Rückkopplungssignal, das zurückgeführt wird, um eine Historie der vorherigen Unausgeglichenheit zu erzeugen.
  • Die Zwischenspeicher 78 der Schaltungseingangsleitungen wirken als Puffer zum Empfangen der Eingänge CMD und A7- A0 und stellen diese im gleichen Taktzyklus sowohl den Ungleichgewichtsdetektoren 62a-62d als auch den Codierern 66a-66d zu Verfügung. Die Zwischenspeicher 76, 78 werden vorzugsweise gleichzeitig getaktet.
  • Die im Speicher 74 gespeicherte Auswahl-Ungleichgewichts- Tabelle ist in Fig. 4A gezeigt, in der ein Vor-Ungleichgewicht von "0" anzeigt, daß der vorherige kumulative Gleichspannungs-Offset -1 beträgt (d. h. sechs "Nullen" und vier "Einsen"), und ein Vor-Ungleichgewicht von "1" anzeigt, daß der vorherige kumulative Gleichspannungs- Offset +1 beträgt (d. h. sechs "Einsen" und vier "Nullen").
  • In ähnlicher Weise zeigt ein Nächstes-Ungleichgewicht- Signal von "1" an, das der nächste kumulative Gleichspannungs-Offset +1 beträgt (d. h. sechs "Einsen" und vier "Nullen"), während ein Nächstes-Ungleichgewicht von "0" anzeigt, daß das nächste unausgeglichene Codewort einen kumulativen Gleichspannungs-Offset von -1 aufweisen sollte (d. h. sechs "Nullen" und vier "Einsen").
  • Als Antwort auf ihre Eingabesignale, die anzeigen, welche Codewörter unausgeglichen sind, wählt die Gleichgewicht- Zu-Auswahl-Tabelle den unausgeglichenen Zustand, der von den Codierern 66a-66d verwendet werden soll. Eine 0 in einer der Eingangsspalten (U1-U4) der Auswahl-Ungleichgewicht-Tabelle zeigt an, daß das ausgewählte Codewort ausgeglichen ist, während eine "1" anzeigt, daß es unausgeglichen ist. Die Auswahl-Ungleichgewicht-Tabellenausgänge, d. h. die Auswahl-Ungleichgewichts-Signale, sind "0", wenn das ausgewählte Codewort mehr "Nullen" als "Einsen" aufweisen soll, und "1", wenn das ausgewählte Codewort mehr "Einsen" als "Nullen" enthalten soll. Die Auswahl-Ungleichgewicht-Tabelle zeigt Auswahl-Ungleichgewichts-Signalwerte von "X (entweder "1" oder "0") für ausgeglichene Eingänge, da in diesem Fall die Codierer 16a-16b vorzugsweise unabhängig von den Ungleichgewichts Auswahlleitungen ein Codewort ausgeben.
  • Immer dann, wenn das Vor-Ungleichgewicht-Signal einen Wert von "1" aufweist, sind alle Ausgangsbits S1-S4 aus der Nachschlagtabelle die binären Komplemente ihrer Werte bei einem Vor-Ungleichgewicht-Signal mit einem Wert "0". Wie in Fig. 4A dargestellt, wird die Größe der Auswahl- Ungleichgewicht-Tabelle halbiert, um auf der Seite Platz zu sparen, wobei beide Werte für die komplementären Einträge durch einen Schrägstrich getrennt dargestellt sind. Der linke Wert wird für Vor-Ungleichgewicht = "0" verwendet, während der rechte Wert für Vor-Ungleichgewicht = "1" verwendet wird. (Ein alternativer Weg zum Implementieren ist die Verwendung einer Bank paralleler Exklusiv-ODER-Gatter am Ausgang des Speichers 74, wobei jedes der Ausgangssignale S1-S4 der Nachschlagtabelle als erster Eingang einem anderen Exklusiv-ODER-Gatter zugeführt wird und das Vor-Ungleichgewicht-Signal vom Zwischenspeicher 76 als gemeinsamer zweiter Eingang allen Exklusiv-ODER-Gattern zugeführt wird.)
  • f. 16b/20b-Codierung unter Verwendung von 8b/9b- und 10b/11b-Untercodierung
  • Ein 8b/10b-Code erfordert die Verwendung bestimmter unausgeglichener Codewörter. Durch Verdoppeln der Codewortgröße auf 20 Bits kann jedoch ein Code erhalten werden, bei dem alle Codewörter ausgeglichen sind, selbst wenn die Größe des Eingangswortes ebenfalls auf 16 Bits vergrößert wird.
  • Um dies zu erreichen, müssen 10 Bits des 20-Bit-Blocks den gleichen Logikwert aufweisen. Es gibt daher C(20/10) = 20!/10! 10! = 184.756 unterschiedliche ausgeglichene Codewörter mit einer Länge von 20 Bits. Es können daher mehr als 2¹&sup6; = 65.536 Eingangswerte durch den verfügbaren Vorrat an ausgeglichenen 20-Bit-Codewörtern dargestellt werden. (Andererseits führt ein 16b/19b- Code zu einigen unausgeglichenen Codewörtern, während ein 16b/18b-Code zu wenige Codewörtern beliebigen Typs ergibt.) Eine 16b/20b-Datencodierungsprozedur bietet ferner den Vorteil, daß sie ähnlich dem 8b/10b-Code Eingangswerte verwendet, die Vielfache von 8 sind und daher kompatibel zu Hardware und Programmen auf Oktettbasis sind.
  • Um die 16b/20b-Codierung unter Verwendung eines ROM oder einer PLA auf CMOS-Chips bei Verwendung der derzeitigen Technologie durchzuführen, wird die 16b/20b-Codierungsprozedur vorzugsweise in zwei oder mehr Teilcodierungsprozeduren mit nahezu gleicher Größe unterteilt, um die Chipfläche zu minimieren.
  • Das Aufteilen der 16b/20b-Codierung in zwei 8b/10b-Codierungen führt zu nur C(10/5) = 252 ausgeglichenen Codewörtern, d. h. nicht genug, um die 2&sup8; = 256 Eingangswerte für jeden 8-Bit-Eingangswert darzustellen. Wenn unausgeglichene 10-Bit-Codewörter verwendet werden, um den verfügbaren Vorrat zu ergänzen, können andererseits genügend Codewörter erhalten werden, wobei jedoch dann selbstverständlich ein Gleichspannungsungleichgewicht eingeführt wird.
  • Wenn jedoch die 16b/20b-Codierung in zwei ungleiche Abschnitte - 8b/9b- und 10b/11b-Untercodierungen - unterteilt wird, dann gibt es genügend verfügbare ausgeglichene 20-Bit-Komposit-Codewörter. Da weder das 9-Bit- noch das 11-Bit-Codewort ausgeglichen sein können - Codewörter mit ungeradzahliger Länge können nicht ausgeglichen sein - können die 9-Bit- und 11-Bit-Codewörter beide auf eine minimale Unausgeglichenheit und auf entgegengesetzte Unausgeglichenheit beschränkt werden, so daß dann, wenn die Codewörter verknüpft werden, der resultierende Block ausgeglichen ist.
  • In einem 9-Bit-Code gibt es insgesamt C(9/4) = 126 Codewörter mit einem überschüssigen Bit "1" und 126 mit einem überschüssigen Bit "0". Diese 252 Codewörter werden getrennt verwendet; d. h. ein 9-Bit-Codewort und sein Komplement werden in diesem Schema verwendet, um unterschiedliche Eingangswerte darzustellen; sie werden nicht als alternative Möglichkeiten der Darstellung des gleichen Eingangswerts verwendet. In einem 11-Bit-Code gibt es insgesamt C(11/5) = 462 Codewörter mit einem einzigen überschüssigen Bit "1" und die gleiche Anzahl von Codewörtern mit einem einzigen überschüssigen Bit "0". Anders als die 9-Bit-Codewörter müssen jedoch die komplementären 11-Bit-Codewörter als alternative Darstellung des gleichen Eingangs verwendet werden; wenn eines der verfügbaren 252 9b-Codewörter verwendet wird, muß die Unausgeglichenheit des 11-Bit-Codeworts komplementär sein zur Unausgeglichenheit des 9-Bit-Codeworts, um eine Gesamtausgeglichenheit für den vollständigen 20-Bit-Block zu erhalten. Es gibt daher 252 462 = 116.424 Codewörter, mehr als genug, um 216 Werte darzustellen.
  • Ungünstigerweise bewirkt die Verwendung aller 116.424 Codewörter eine sehr lockere Grenze für die maximale Lauflänge des codierten Bitstroms. Zum Beispiel würde die Verwendung von 000011111 und 11111000000, wenn sie verknüpft werden, um den 20-Bit-Block zu bilden, zu einer maximalen Lauflänge von 10 führen. Die Verwendung der Vorwärtsfehlerkorrekturcodebits ermöglicht jedoch, die maximale Lauflinge zu beschränken - unter Verwendung von 96-Bit-Blöcken, die jeweils durch 8 FEC-Bits und 8 komplementäre FEC-Bits geschützt sind, wobei komplementäre FEC-Bit-Paare zwischen den jeweils vier 9b- und 11b- Untersegmenten plaziert sind. In diesem Fall beträgt die maximale Lauflänge unter Verwendung der obigen Wörter 7.
  • Wie aus der Tabelle der Fig. 2 deutlich wird, gibt es insgesamt 391 11-Bit-Codewörter und 113 9-Bit-Codewörter mit einem einzigen überschüssigen Bit "0", die das 3/4/3- Maximumlauflängenkritenum erfüllen. Ferner gibt es 113 solcher 9-Bit-Codewörter mit einem einzigen überschüssigen Bit "1". Wenn dieser beschränkte Satz von Codewörtern mit komplementären FEC-Paaren zwischen allen 9-Bit- und 11-Bit-Codewörtern verwendet wird, kann eine maximale Lauflänge von 4 erreicht werden. Es gibt 391 2 113 = 88.366 solcher ausgeglichener 20-Bit- Codewörter mit 4 Bit Lauflänge, die Daten darstellen, mehr als genug, um 2¹&sup6; = 65.536 Eingangswerte darzustellen, so daß 22.830 Codewörter für andere Zwecke zur Verfügung stehen.
  • Von diesen 22.830 zusätzlichen Codewörtern können z. B. 2¹&sup4; = 16.384 für Codewörter verwendet werden, die Befehlsinformationen darstellen, d. h. "Befehlscodewörter". Befehlscodewörter werden vorzugsweise als solche identifiziert durch Setzen einer "Befehls"-Leitung, die eine Eingangs- oder Ausgangsleitung ist, die von den 16 Dateneingangs- oder Ausgangsleitungen getrennt ist. Mit anderen Worten, das Setzen der Befehlsleitung gibt an, daß das Codewort Befehlsinforrnationen darstellt, während die anderen 16 Leitungen den bestimmten Befehl spezifizieren. Da jedoch der Codewortvorrat nicht 2¹&sup6; Befehlswerte erlaubt, sind die zwei höchstwertigen Bits nicht verfügbar, wenn die Befehlsleitung aktiv ist. In diesem Fall verbleiben 214 = 16.384 Werte zur Darstellung von Befehlscodes. Dies läßt trotzdem 6.446 (> 4.096 = 2¹²) Codewörter zur Darstellung eines zusätzlichen Datentyps oder einer Kategorie übrig, die als "Leerlauf"-Codewörter bezeichnet werden. Es ist erwünscht, daß die 16b/20b- Codewörter nicht nur 2¹&sup6; Datenwörter und 2¹&sup4; Befehlswörter, sondern auch die dritte Kategorie von 2¹² Leerlaufwörtern darstellen können.
  • Die Leerlauf-Codewörter können für verschiedene Zwecke verwendet werden. Zum Beispiel können Sie über eine Verbindung zu Initialisierungszwecken gesendet werden oder sie können gesendet werden, wenn am Eingang der Verbindung keine Daten verfügbar sind, um die gewünschte Maximallaufstromeigenschaften aufrechtzuerhalten (Leerlaufverbindung). Die verfügbaren 2¹² 12-Bit-Codewörter (die in dieser Ausführungsforrn als Leerlaufwörter verwendet werden) verbessern ferner die Fähigkeit des 16b/20b-Codes, Daten und Befehle wie im folgenden beschrieben auf Oktett-Basis darzustellen.
  • Obwohl es 88.366 ausgeglichene 20-Bit-Datencodewörter gibt, die eine maximale Lauflänge von 4 bieten, ist es nicht günstig, einen solchen Code in 8b/9b- und 10b/11b- Codierern zu implementieren, ohne den Vorrat verfügbarer konformer Codewörter zu überschreiten. Genauer, wenn die Codierereingangsleitungen einfach die Leitungen sind, die die 16-Bit-Eingabe führen, besteht keine Beschränkung für die Eingangswerte. Dementsprechend würde die Anzahl (2&sup8; = 256) der möglichen Eingangswörter für einen 8b/9b- Codierer die Anzahl 226 der konformen 9-Bit-Codewörter überschreiten und die Anzahl (2¹&sup0; = 1024) der möglichen Eingangswörter für einen 10b/11b-Codierer die Anzahl (391) der konformen Paare von 11-Bit-Codewörtern überschreiten. Es ist daher eine logische Übersetzung erforderlich.
  • Obwohl diese logische Übersetzung mittels "wahlfreier Logik" von UND- oder ODER-Gattern verwirklicht werden kann, ist eine ROM- oder PLA-Nachschlagtabelle eine bevorzugte Implementierung. Der ROM oder die PLA, die die notwendige Übersetzung im Datencodierungsprozeß durchführen, wird "Vorcodierer"-Logik oder einfach "Vorcodierer" genannt.
  • Der Vorcodierer erzeugt vorzugsweise eine Anzahl von Vorcodierercodewörtern, die dann, wenn sie als Eingänge an die 8b/9b- und 10b/11b-Codierer angelegt werden, die Codevorratsschranken der 8b/9b- und 10b/11b-Codierer nicht überschreiten, und ermöglicht noch die Verwendung eines hohen Anteils des Vorrats der Codierer. Ferner ist die Anzahl der Datenleitungen, die durch den Vorcodierer geführt werden, vorzugsweise ein kleiner Anteil der insgesamt 16 Eingangsdatenleitungen. Wenn diese durch eine Befehlsleitung und eine Leerlaufleitung ergänzt werden, würde die Gesamtzahl von Leitungen ansonsten die Chipf läche des Vorcodierer-ROM oder der PLA zu groß machen. Im Gegensatz hierzu bewirkt die Minimierung der Datenleitungen, die vorn Vorcodierer übersetzt werden, einen Verlust in der Anzahl der Werte, die an die 9b- und 11b-Codierer gesendet werden können.
  • Wie oben gezeigt, gibt es 226 9-Bit-Werte und 391 11-Bit- Werte, die ausgeglichene 20-Bit-Codes mit einer maximalen Lauflänge von 4 zur Verfügung stellen. Das Ausdrücken dieser Werte im Binärsystem ergibt:
  • 226 (dec) = 11100010 (bin)
  • 391 (dec) = 110000111 (bin).
  • Es ist offensichtlich, daß dann, wenn keine Werte gleich oder größer als 11100000 = 112 zum 8b/9b-Codierer gesendet werden und keine Werte gleich oder größer als 110000000 = 384 zum 10b/11b-Codierer gesendet werden, die Eingänge nicht die Fähigkeit des jeweiligen Codierers "überfordern", Codewörter zu erzeugen. Dies bewirkt, daß keine Eingabe in den 8b/9b-Codierer alle drei höchstwer-10b/11b-Codierer beide höchstwertigen Bits gesetzt haben sollte.
  • g. 16-Bit-Wort-orientierter 16b/20b-Codierer unter Verwendung von 8b/9b- und 10b/11b-Untercodierern
  • Ein 16-Bit-Wort-orientierter Komposit-16b/20b-Codierer 80 ist in Fig. 5 gezeigt. Der Codierer 80 enthält einen Vorcodierer 82, einen 8b/9b-Komponentencodierer 84 und einen 10b/11b-Komponentencodierer 86. Für konzeptionelle Zwecke zeigt die Zeichnung ferner einen Invertierer 88. Die Eingänge des Codierers 80 umfassen 16 Bits an Daten D15-D0 (wobei D15 das höchstwertige Bit ist), einen Befehlsleitungseingang CMD und einen Leerlaufleitungseingang IDLE. Die Dateneingangsleitungen D11-D5 umgehen den Vorcodierer 82 und sind direkt mit den Eingängen A7-A1 des 10b/11b-Codierers 86 verbunden. Die Datenleitungen D4-D1 umgehen ebenfalls den Vorcodierer 82 und sind mit den Eingängen B4-B1 des 8b/9b-Codierers 84 verbunden. Die Eingangsleitung D0 ist mit dem B0-Eingang des 8b/9b- Codierers 84 verbunden und bestimmt das Ungleichgewicht des Codiererausgangs. Der Invertierer 88 ist enthalten, um anzuzeigen, daß das Ungleichgewicht seines Codiererausgangs demjenigen des 8b/9b-Codiererausgangs entgegengesetzt ist, obwohl selbstverständlich ein Invertierer nicht notwendig ist, um dieses Ergebnis zu erreichen, da die Nachschlagtabelle des 10b/11b-Codierers 86 so beschaffen sein kann, daß sie dieses Ergebnis direkt liefert.
  • Der Codierer 84 erzeugt einen Ausgang mit einem Überschuß einer einzigen "0", wenn die Leitung D0 nicht gesetzt ist, während der Codierer 86 einen Ausgang mit einem Überschuß einer einzigen "1" erzeugt. Die Ausgänge der beiden Codierer entsprechen dann, wenn die Leitung D0 gesetzt ist, den Komplernenten ihre Ausgänge, wenn diese nicht gesetzt ist. Die Nachschlagtabellen der Codierer 84, 86 antworten auf das Signal auf der Leitung DO um das gewünschte Codewort zu erzeugen. Alternativ können selbstverständlich komplementäre Daten unter Verwendung einer linearen Matrix von Exklusiv-ODER-Schaltungen erzeugt werden.
  • Die in den Codierern 84 bzw. 86 gespeicherten 9-Bit- und 11-Bit-Codewörter werden vorzugsweise aus einer computererzeugten Liste von Codewörtern mit einem kumulativen Gleichspannungs-Offset von einem Bit und einer maximalen Lauflänge von 3/4/3 ausgewählt. Wie vorher unter Abschnitt (b) mit dem Titel "Einführung der Lauflänge" beschrieben worden ist, kann diese Liste durch Programmieren eines Computers erzeugt werden, der alle möglichen 9-Bit- und 11-Bit-Codewörter durchsucht und jedes Wort prüft, um zu erfassen, welche Wörter sowohl das 1-Bit- Kumulativ-Gleichspannungs-Offset-Kriterium als auch das 3/4/3-Maximumlauflängenkriterium erfüllen. Die 9-Bit- und 11-Bit-Wörter, die beide Kriterien erfüllen, werden als Codewortwerte in den Codierer-ROMS 84 bzw. 86 gespeichert.
  • Die vom Vorcodierer 82 durchgeführte Übersetzung wird von der Tabelle der Fig. SA dargestellt. Wie aus der rechten Seite der Tabelle deutlich wird, sind A9 und A8 niemals beide gleichzeitig "1", wobei niemals alle drei Bits B8, B7, B6 gleichzeitig "1" sind. Die Verwendung von Eingangswerten für die 8b/9b- und 10b/11b-Codierer, die den Vorrat der konformen Codes überschreiten würden, wird somit vermieden. Es ist zu beachten, daß die Werte für D14 und D15 für Befehle und Leerlauf als X gegeben sind, wobei zusätzlich D12 und D13 für Leerlauf als X gegeben sind. Die ROM- und PLA-Ausgänge sind gleich, unabhängig von den Werten dieser Leitungen in den gezeigten Situationen. Ferner ist zu beachten, daß aufgrund der Leitungen, die den Vorcodierer 82 umgehen, insgesamt 216 Datenwörter, 2¹&sup4; Befehlswörter und 2¹² Leerlaufwörter codiert werden können.
  • h. 16b/20b-Codierer für Daten auf Oktettbasis
  • Bei der obenbeschriebenen 16b/20b-Codierung war der Eingang für den Codierer 80 ein 16-Bit-Wort, das entweder Daten-oder Befehlsinformationen oder keines von beiden enthielt. Die 16b/20b-Codierung kann ferner oktettorien tierte Eingangswerte aufnehmen; d. h. zwei 8-Bit-Wörter. Jedes 8-Bit-Eingangswort kann entweder 8-Bit-Daten- oder 5-Bit-Befehlsinformationen darstellen. Somit kann der 16- Bit-Eingangswert eine Daten-Daten-Sequenz (d. h. jedes Oktett enthält Daten), eine Befehls-Befehls-Sequenz (d. h. jedes Oktett enthält Befehlsinforrnationen), eine Daten-Befehls-Sequenz (d. h. das erste Oktett enthält Daten, während das zweite Oktett Befehlsinformationen enthält) oder eine Befehls-Daten-Sequenz sein (d. h. das erste Oktett enthält Befehlsinformationen, während das zweite Oktett Daten enthält).
  • Zusätzlich zu den 16 Datenleitungen gibt es zwei zusätzliche Befehlsleitungen, die gemeinsam die Inhalte der anderen 16 anzeigen, d. h. ob sie Daten-Daten, Befehl- Daten und dergleichen aufweisen. In Daten-Daten-Sequenzen führen alle 16 Leitungen Daten, so daß es 216 mögliche Eingangswörter gibt, von denen jedes einem separaten Code zugewiesen werden muß.
  • Das System bietet nur 32 (= 2&sup5;) unterschiedliche mögliche Befehle; die drei höchstwertigen Bits eines Oktetts, das einen Befehl in einer Daten-Befehls-Sequenz enthält, werden als Nullen erwartet, während alle 8 Bits des Datenoktetts verwendet werden. Für eine Daten-Befehls- Sequenz müssen somit 2&sup5; 2&sup8; = 2¹³ unterschiedliche mögliche Eingangswörter Codewörtern zugewiesen werden, wobei weitere 2¹³ den Befehl-Daten-Sequenzen zugewiesen werden müssen, insgesamt 2¹&sup4; Codewörter für Daten-Befehlund Befehl-Daten-Sequenzen zusammen. Weitere 2&sup5; 2&sup5; = 2¹&sup0; Codewörter sind für die zulässigen Befehl- Befehl-Sequenzen erforderlich.
  • Statt eine zusätzliche Logik einzuführen, um zwei Oktett- Eingangswörter in ein 16-Bit-Eingangswort für die Verarbeitung in der Codierungsschaltung der Fig. 5 umzusetzen, gibt es einen einfacheren Ansatz, nämlich das Erzeugen einer geeigneten Vorcodiererübersetzungnachschlagstabelle zum Bewerkstelligen der gewünschten Aufgabe.
  • In Fig. 6 ist eine 16b/20b-Codierungsschaltung 90 gezeigt, die diesen Ansatz verwendet, um zwei Eingangswerte auf Oktettbasis zu codieren. In Fig. 6 werden die zwei 8- Bit-Eingänge durch Datenleitungen A1-A8 bzw. B0-B7 dargestellt. Eine 1-Bit-Befehls/Daten-Leitung A-CMD zeigt an, ob das 8-Bit-Eingangswort A1-A8 ein Befehlswort oder ein Datenwort darstellt. Eine weitere 1-Bit-Leitung B-CMD zeigt das gleiche für das Eingangswort B0-B7 an. Ein Vorcodierer 92 empfängt Befehlssignale A-CMD, B-CMD und die Eingangswerte wie z. B. Daten- oder Befehlsinformationen A8-A6, B7-B5. Die Ausgänge A9'-A6' vom Vorcodierer 92 werden an einen 10b/11b-Codierer 94 angelegt, der ferner die Eingangswerte A5-A1 empfängt. Der 10b/11b- Codierer 94 ist identisch zum Codierer 86 der Fig. 5. Andere Eingänge B7'-B5' des Vorcodierers 92 werden einem 8b/9b-Codierer 96 zugeführt, der ferner die Signale B4-B1 und das Gleichgewicht-Signal B0 empfängt. Der 8b/9b- Codierer 96 ist identisch zum Codierer 84 der Fig. 5. Das Gleichgewicht-Signal B0 wird vom Invertierer 98 inver tiert und als ein weiterer Eingang A0 dem Codierer 94 zugeführt.
  • Die Fig. 6A zeigt die vom Vorcodierer 92 implementierte Wahrheitstabelle, wobei die erste Gruppe von Spalten Eingangsleitungen darstellt (z. B. ROM-Adreßleitungen) und die zweite Gruppe von Spalten (bezeichnet mit "einfachen" Apostrophen) Ausgangsleitungen darstellt (z. B. die im ROM gespeicherten Werte). Um die gedruckte Darstellung der Wahrheitstabelle in Fig. 6A zu verkürzen, werden die ersten 64 Zeilen der Wahrheitstabelle durch eine einzelne Zeile in der Zeichnung dargestellt. In der Tabelle bezeichnet "X" ein Signal, dessen Wert den Ausgang nicht beeinflußt. Die D's zeigen an, daß die entsprechenden Einträge entweder "0" oder "1" sein können. Anders als bei den X zeigen die D's auf der Eingangsseite an, daß verschiedene Werte dieser Eingangssignale zu verschiedenen Werten der Ausgangssignale führen, die durch die D's dargestellt werden.
  • Wenn CA = CB = 0 gilt, stellen beide Eingangswörter A1-A8 und B0-B7 Datenwörter statt Befehlswörter dar. In diesem Fall führt der Vorcodierer 92 eine 1:1-Abbildung zwischen den sechs Vorcodiererdateneingängen (A8-A6, B7-B5) und den sieben Vorcodiererdatenausgängen (B7'-B5', A9'-A6') durch. Jede 1:1-Abbildung kann verwendet werden, solange die Abbildung nicht die zwei erforderlichen Einschränkungen verletzt, um einen Überlauf des 8b/9b-Codierers und des 10b/11b-Codierers zu verhindern. Die zwei Einschränkungen sind, daß wenigstens eine der drei Leitungen B7'- B5' den Wert logisch 0 annehmen muß und wenigstens eine der beiden Leitungen A8' und A9' den Wert logisch annehmen muß. In der Tabelle der Fig. 6A sind die Eingangsdaten für die zwei Oktette in Ausdrücken der 10b/11b-Codierer-Eingänge A9-A0 und der 8b/9b-Codierereingänge B7-B0 ausgedrückt. Die externen Daten werden an die acht Leitungen A1-A8 und die acht Leitungen B0-B7 angelegt. Die Eingänge B0-B4 umgehen den Vorcodierer und führen direkt in den 8b/9b-Codierer. B0 bestimmt den Ungleichgewichtszustand des 8b/9b-Codiererausgangs und wird invertiert und zum Eingang A0 des 10b/11b-Codierers gesendet, so daß die Ausgeglichenheit seines Ausgangs komplementär zu derjenigen des 8b/9b-Codiererausgangs erzwungen wird. Die Leitungen A1-A5 umgehen ebenfalls den Vorcodierer und führen direkt in den 10b/11b-Codierer. Die Leitungen A6-A8 und B5-B7 sowie die Befehlsleitungen A-CMD und B-CMD führen in den Vorcodierer (acht Eingangsleitungen), wobei die sieben Ausgangsleitungen A9'-A6', B7'-B5-' den Vorcodierer verlassen.
  • i. Vorwärtsfehlerkorrekturcodierung
  • Der Typ des verwendeten Vorwärtsfehlerkorrekturcodes kann z. B. ein Einzelfehlerkorrektur-Doppelfehlererfassungs- Code und genauer ein Hamming-Abstand-4-Code sein, wie z. B. abgeleitet von Hsiao (vgl. das Buch "Fehlerkontrollcodierung", von Shu Lin & Daniel j. Costello Jr., PRENTICE-HALL 1983, S. 498-502). Solche Codes sind insofern linear, als die Summe zweier beliebiger codierter Werte einen weiteren codierten Wert ergibt. Sie sind ferner insofern systematisch, als der codierte Datenabschnitt gegenüber den uncodierten Daten unverändert ist. Es werden daher im wesentlichen FEC-Bits den Datencodewörtern so zugefügt, daß die Kombination der FEC-Bits und der Datencodewörter eine Distanz-4-Codierung ergibt. Die FEC-Bits können erzeugt werden durch Multiplizieren eines 1xB-Matrixdatenworts mit einer BxP-FEC Matrix, um eine 1xP-FEC-Symbolmatrix zu bilden, wobei "B" die Gesamtzahl der Bits des Datencodeworts im Block darstellt und "P" die Anzahl der FEC-Bits darstellt. Die Gesamtzahl der Bits im Block beträgt L = B + P.
  • Im vorliegenden Fall wird ein 80-Bit-Block (d. h. vier 20-Bit-Datencodewörter) durch acht FEC-Bits geschützt. Somit ist B = 80 und P = 8. Um die 80 Zeilen der FEC- Matrix zu erzeugen, werden 8-Bit-Vektorsequenzen verwendet, die jeweils eine ungerade Anzahl von "1"-Bits enthalten, wobei diese ungerade Anzahl wenigstens 3 beträgt. Da es nur 8!3!5! = 56 Vektorsequenzen mit drei "1"-Bits gibt und 80 Bits zu schützen sind, muß ferner eine bestimmte Anzahl des Komplementtyps der 8-Bit-Vektorsequenzen, die fünf "1"-Werte enthalten, verwendet werden. Da ferner 56 Komplementsequenzen vorhanden sind, führt dies zu insgesamt 112 Werten (es gibt ferner einen zusätzlichen Satz von 8 Vektorsequenzen, die sieben "1"-Werte enthalten, die nicht verwendet werden müssen), wobei nur 80 Bits zu schützen sind, so daß die Wahl, welche 80 der 112 Vektoren verwendet werden, willkürlich ist. Die Minimierung der Anzahl der "1"-Bits in den Vektoren kann die Anzahl der aktiven Gatter minimieren, die zur Codierung und Decodierung erforderlich sind.
  • Ein bevorzugtes Verfahren zum Erzeugen der FEC-Bits besteht darin, zyklisch unabhängige Codesequenzen zu verwenden (d. h. Sequenzen, die nicht durch Rotieren der Sequenzelemente in einander übergeführt werden können). Ausgedrückt durch Sequenzen, die drei "1"-Bits enthalten, können die folgenden sieben zyklisch unabhängigen Variationen leicht aufgezählt werden:
  • [00000111], [00001011], [00010011], [00100011], [01000011], [00010101], [00100101]
  • Das Sortieren all dieser Sequenzen durch alle acht möglichen zyklischen Variationen erzeugt insgesamt 56 FEC- Codes. Ferner können die Komplementsequenzen, die fünf "Einsen" enthalten, erzeugt werden durch Invertieren aller Bits der Codes, die für den Fall von drei "Einsen" erhalten worden sind.
  • 1. Beispielhaftes Kommunikationssystem
  • Die Fig. 7 zeigt ein Kommunikationssystem 100 gemäß der Erfindung. Das System 100 ist eine Punkt-Zu-Punkt-Glasfaserdatenverbindung. Die dargestellten Komponenten des Systems 100 können z. B. unter Verwendung zweier CMOS- Chips verwirklicht werden, die die Datencodierung, Decodierung und Rahmung bewerkstelligen.
  • Das System 100 enthält einen Senderabschnitt 100a und einen Empfängerabschnitt 100b. Im Senderabschnitt looa werden die Eingangsdaten von einem Codierer 102 als 32- Bit-Parallelstrom angenommen, wo sie codiert werden und Vorwärtsfehlerkorrekturbits hinzugefügt werden, um in der obenbeschriebenen Weise ein ECC-Codewort zu bilden. Der Codierer 102 wird vorzugsweise wie in Fig. 1 gezeigt implementiert. Im Codierer 102 werden die Daten ferner zu einem 16-Bit-Parallelwort geschachtelt und anschließend an einen 16:1-Multiplexer ("MUX") 104 weitergeleitet, gefolgt von einem Lasersender 106. Die in ein serielles Format umgesetzten Daten sind der Eingang eines Lasersenders 106, der die Verbindung oder den Kanal 108 treibt.
  • Im Empfängerabschnitt 100b wird das über die Verbindung 108 empfangene Lichtsignal in ein elektrisches Signal zurückverwandelt und durch den optischen Empfänger/Wandler 110 verstärkt und anschließend einem Taktwiedergewinnungsmodul 112 zugeführt. Der Takt und die zeitlich neu geordneten Daten werden vom Modul 112 wiedergewonnen und einem herkömmlichen 1:16-Demultiplexer 114 zugeführt. Der Demultiplexer 114 erzeugt 16-Bit-Sequenzen des elektrischen Signals für eine Rahmen- und Datenwiedergewinnungsschaltung 120. Die Rahmen- und Datenwiedergewinnungsschaltung 120 führt eine weitere Entschachtelung, eine Rahmung zum Ermitteln der Grenzen der 96-Bit- FEC-Codeblöcke sowie eine Fehlerkorrektur und eine Datendecodierung durch, um einen wiedergewonnenen Datenstrom zu erhalten. Der wiedergewonnene Datenstrom liegt in Form einen 32-Bit-Parallelstroms vor und enthält 32 Bits an Daten und 2 Bits an CMD, ähnlich der Form der obenbeschriebenen Quellendaten, die in den Senderabschnitt 100a eingegeben werden.
  • Während der Codierung und Decodierung wird von entsprechenden Mikroprozessoren 122, 124 über Register im Codierer 102 und Decodierer 120 auf die Steuer- und Zustandsinformationen zugegriffen.
  • k. Rahmung des FEC-Codeblocks und Datendecodierung
  • Wenn der Empfänger 100b anfangs Kommunikationssignale empfängt, fehlen dem ankommenden Datenstrom jegliche Grenzen, die den Beginn und das Ende eines FEC-Codeblocks identifizieren würden. Folglich muß die Rahmungs- und Decodierungsschaltung 120 diese Grenzen identifizieren, d. h. den Rahmen des FEC-Codeblocks, so daß sie die Fehlerkorrektur und die Datendecodierung durchführen kann. Dies findet typischerweise während der Initialisierung des Empfängers 100b statt, vor dem Empfang der wirklichen Daten.
  • Die Fig. 8 zeigt die Rahmungs- und Decodierungsschaltung 120. Die 16-Bit-Sequenzen von 1:16-Demultiplexer 114 werden einzeln an das Register 200 angelegt. Das Register 200 führt anschließend seine Inhalte, die 16-Bit-Sequenz, einem 1:6-Demultiplexer 202 zu, der einen 96-Bit-Ausgang erzeugt. Diese 96-Bit-Sequenz wird einem Register 204 zugeführt. Das Register 204 führt seine 96-Bit-Inhalte der Rahmungsschaltung 205 zu, die einen Syndromgenerator 206, eine FEC-Prüfung 208 und einen Fehlerzähler 210 enthält. Die Rahmungsschaltung 205 behandelt jede 96-Bit- Sequenz so, als ob sie ein FEC-Codeblock wäre, und berechnet die Anzahl der Fehler, die in diesem Block enthalten sind, was durch die Bits dieser Sequenz angezeigt wird, die die Bitpositionen des FEC-Symbols belegen.
  • Genauer werden die 80 Bits der 96-Bit-Sequenz, die Datencodewörten enthalten, und die 8 Bits, die FEC-Bits enthalten, wenn die Sequenz geeignet gerahmt ist, an den Syndromgenerator 206 angelegt. Der Syndromgenerator 206 detektiert Fehler in diesen 88 Bits und erzeugt ein 8- Bit-Fehlersignal, das nur "Nullen" enthält, wenn kein Fehler detektiert worden ist, und eine ungerade Anzahl von "Einsen" enthält, wenn der Syndromgenerator 206 einen Einzelbitfehler detektiert, und eine gerade Anzahl von "Einsen" enthält, wenn der Syndromgenerator 206 einen Doppelbitfehler detektiert. Solche Syndromgeneratoren sind als kommerzielle Bauteile auf einem einzigen integrierten Schaltungschip leicht erhältlich.
  • Zum gleichen Zeitpunkt, zu dem der Syndromgenerator 206 einen 88-Bit-Block der 96-Bit-Sequenz empfängt, führt das Register 204 die 16 Bits aus dieser gleichen 96-Bit- Sequenz, die den 8 FEC-Bits und ihren acht Bit-Komplemeten entsprechen, der FEC-Prüfung 208 zu. Die FEC-Prüfung 208 vergleicht die empfangenen Bits und prüft, ob jedes FEC-Bit mit seinem Komplement gepaart ist. Wenn irgendwelche komplementären Paare nicht vorhanden sind, gibt die FEC-Prüfung 208 einen FEC-Fehler aus.
  • Die Fehlerzählerschaltung 210 empfängt das 8-Bit-Fehlersignal vorn Syndromgenerator 206 und das FEC-Fehlersignal von der FEC-Prüfung 208. Für jeden Fehler, der vom Syndromgenerator 206 angezeigt wird, d. h. für jeden Einzelbitfehler oder Doppelbitfehler, erhöht die Fehlerzählerschaltung 210 einen Zähler. Wenn für einen beliebigen 96- Bit-Block weder der Syndromgenerator 206 noch die FEC- Prüfung 208 einen Fehler detektieren, wird der Zähler auf zurückgesetzt.
  • Wenn der Zähler eine vorgegebene Schwelle wie z. B. acht Fehler erreicht, führt die Fehlerzählerschaltung 210 ein Signal BIT-SLIP dem SLIP- oder SKIP-Eingang des 1:16- Demultiplexers 114 zu. Dieses Signal veranlaßt den Demultiplexer 114, um ein Bit des ankommenden seriellen Datenstroms zu verschieben, wie oben erwähnt worden ist, um die Ausrichtung des Rahmens der 96-Bit-Sequenz, die vom Register 204 erzeugt wird, um 1 Bit zu ändern.
  • (Demultiplexer mit dieser "SLIP"- oder "SKIP"-Funktion sind im Handel leicht erhältlich.) Diese neue 96-Bit- Sequenz wird anschließend erneut von der Rahrnungsschaltung 205 untersucht.
  • Dieser Vorgang wird fortgesetzt, bis eine vorgegebene Anzahl von 96-Bit-Sequenzen (z. B. 10) als fehlerfrei befunden worden ist. Zu diesem Zeitpunkt ist der Empfänger 100b geeignet initialisiert und die Fehlerkorrektur und die Datendecodierung können sichergestellt werden.
  • Eine herkömmliche Hsiao-Fehlerkorrekturschaltung 212 korrigiert beliebige erfaßte Fehler in den Datencodewörtern des nicht gerahmten 96-Bit-FEC-Codeblocks und führt die Datencodewörter einem Register 218 zu, das dieses anschließend einem 2:1-Multiplexer 220 zuführt. Der 2:1- Multiplexer 220 führt ein erstes Paar von Datencodewörtern, d. h. die ersten 40 Bits, einem Datendecodierer 222 zu. Der Datendecodierer 222 decodiert die Datencodewörter, die er empfangen hat, um die darin enthaltenen Daten- und Befehlsinforrnationen wiederzugewinnen. Der Ausgang des Datendecodierers 222 ist im Register 224 in Form von 32-Bit-Datenausgangs- und 2-Bit-CMD-Ausgangs- Werten gespeichert. Anschließend führt der 2: 1-Multiplexer 220 die restlichen zwei Datencodewörter, d. h. die letzten 40 Bits, dem Decodierer 222 zu, der daraus wiederum ein 32-Bit-Datenausgangssignal und ein 2-Bit-CMD- Ausgangssignal erzeugt.
  • Eine beispielhafte Ausführungsform des Decodierers 222 wird im folgenden beschrieben. Dieser Decodierer decodiert Datencodewörter, die z. B. vom Codierer erzeugt worden sind. Der Datendecodierer 222 besitzt zwei identische parallele Decodierungszweige, jeden zum Decodieren eines der Codewörter. Innerhalb jedes Zweiges werden die Bits des empfangenen Datencodeworts zu den 11b/10b- und 9b/8b-Decodierern gesendet. Anschließend werden die drei höchstwertigen Bits vom 9b/8b-Decodierer und die zwei höchstwertigen Bits vom 11b/10b-Decodierer zu einem Nachdecodierer gesendet, der eine Operation durchführt, die zu derjenigen des Vorcodierers 42 der Fig. 5 invers ist; d. h., das Nachschlagen in der Tabelle der Fig. 5A (die im Vorcodierer sowie im Vorcodierer 42 enthalten ist) rückt von links nach rechts vor, wie in der Zeich nung gezeigt. Der Ausgang der Decodiererschaltung umfaßt dann insgesamt 18 Leitungen, die den Eingang der Codierungsschaltung 40 der Fig. 5 wiederherstellen können.
  • Es besteht jedoch wenigstens ein Unterschied zwischen der Decodierungsschaltung und der Codierungsschaltung 40 - es gibt im Ausgang der Decodierungsschaltung keine gültigen Wörter, die den beiden Befehls- und Leerlaufleitungssätzen entsprechen. Im Ausgang der Decodierungsschaltung wird das Vorhandensein von "Einsen" auf beiden Befehls und Leerlaufleitungen vorzugsweise verwendet, um den Empfang eines ungültigen Codes anzuzeigen.
  • Unter Verwendung des Systems 100 werden die Eigenschaften des codierten seriellen Datenstroms für die Übertragung über die Glasfaserverbindung 108 optimiert. Germäß den verschiedenen Aspekten der Erfindung wird die maximale Lauflänge kurz gehalten, um die Taktwiedergewinnung zu unterstützen und die Niederfrequenzenergie zu minimieren, wobei die Gleichstrom-Ausgeglichenheit eine zuverlässige Codewiedergewinnung unter Verwendung eines hochverstärkenden, wechselstrorngekoppelten Empfängers ermöglicht. Die maximale Lauflänge beträgt vorzugsweise 4, d. h. nicht mehr als 4 aufeinanderfolgende logische Einsen oder logische Nullen können im seriellen Datenstrom erscheinen,wenn dieser fehlerfrei ist. Der kumulative Gleich spannungs-Offset ist vorzugsweise auf +4 oder -4 innerhalb jedes Codeworts und auf 0 am Ende jedes 24-Bit- Unterblocks beschränkt. Für diese Werte ist die Gesamteffizienz der Verbindung 108 des Systems 100 gleich 2/3.
  • 1. Andere Datencodierungstechniken
  • Die hier beschriebenen Codierungstechniken verwenden alle eine Doppelcodierung, d. h. eine erste Datencodierung, vorzugsweise unter Verwendung eines 3/4/3-Codes, sowie die anschließende FEC-Codierung der Blöcke (z. B. 96-Bit- Blöcke), die mehrere (z. B. 4) Datencodewörter enthalten. Durch Verteilen der FEC-Bits zwischen den Datencodewörtern wird für den resultierenden Bitstrom des Kommunikationssignals eine maximale Lauflänge von 4 erreicht.
  • Viele der neuartigen Techniken der Fehlerschutzcodierung können vorteilhaft mit anderen Datencodierungsansätzen verwendet werden, als denjenigen, die in Verbindung mit den beispielhaften Ausführungsformen der Erfindung beschrieben worden sind. Zum Beispiel kann das Verteilen der komplementären Bits oder die Verwendung von 96-Bit- FEC-Blöcken mit dem obenerwähnten IBM-8b/10b-Code verwendet werden. Ferner können die hier beschriebenen Fehlerschutzcodierungstechniken selbst dann verwendet werden, wenn keine Datencodierung verwendet wird, d. h. wenn nur eine Schutzcodierung einer uncodierten Bitsequenz gewünscht ist. Andererseits können Anwendungen, in denen nur eine Datencodierung gewünscht ist, auch viele Vorteile der vorliegenden Erfindung erhalten. Um eine relativ kurze Lauflänge aufrechtzuerhalten, wird jedoch vorzugsweise ein 2/4/2-Code, ein 1/4/3-Code oder 3/4/1- Code anstelle des obenbeschriebenen 3/4/3-Codes verwendet, obwohl die Wahl des Codes von den Anforderungen der Anwendung abhängt. Trotz der Verwendung unterschiedlicher Codes können die in den Fig. 3, 4 und 5 dargestellten Codiererschaltungen für Daten angepaßt werden, die Eingangswerte in Codewörter mit beschränktem kumulativen Gleichspannungs-Offset codieren.
  • Das Ungleichgewichtskriterium für die Ungleichgewicht- Detektorschaltung 42 der Fig. 3 würde z. B. entsprechend mit Bezug auf den verwendeten Code geändert. Für die 2/4/2-10-Bit-Codewörter würde z. B. das Kriterium wie folgt lauten: Eingangswerte von 0 bis 123 werden als unausgeglichene Datencodewörter dargestellt, Eingangswerte von 124 bis 255 werden als ausgeglichene Datencodes dargestellt und Werte, die von 256 bis 303 laufen, werden als ausgeglichene Befehlscodewörter dargestellt (insgesamt 48 Befehlscodew-Lrter). Mit anderen Worten, für den 2/4/2-Code ist das Kriterium für unausgeglichene Codewörter, die Daten darstellen, ein Eingangswert kleiner als 124, oder ausgedrückt in Binärdarstellung, ein Eingangswert von Daten, bei dem nicht alle fünf höchstwertigen Bits Werte von logisch 1 aufweisen.
  • Die vorangehende Beschreibung wurde auf eine spezifische Ausführungsform der Erfindung beschränkt. Es ist jedoch klar, daß Variationen und Abwandlungen der Erfindung vorgenommen werden können, wobei einige oder alle der Vorteile der Erfindung erreicht werden. Es ist daher die Aufgabe der beigefügten Ansprüche, alle solche Variationen und Abwandlungen abzudecken, die in den wahren Umfang der Erfindung fallen. Diese Beschreibung soll im erläuternden und nicht im einschränkenden Sinn aufgefaßt werden.

Claims (17)

1. Codierer (10), mit:
A) einer Sequenzcodierungseinrichtung (14) zum Codieren jeder von mehreren Bitsequenzen eines digitalen Signals in mehrere erste Codewörter, wobei jedes erste Codewort eine maximale Lauflänge unterhalb einer im voraus gewählten Grenze und eine kumulative Gleichstromkompensation (DC-Offset) unterhalb einer im voraus gewählten Grenze besitzt;
wobei der Codierer gekennzeichnet ist durch
B) eine Schutzcodierungseinrichtung (20, 22), die mit der Sequenzcodierungseinrichtung gekoppelt ist, um hiervon die ersten Codewörter zu empfangen und um aus den ersten Codewörtern mehrere Fehlerschutzsymbole zu erzeugen;
C) eine Komplementbildungseinrichtung (26), die mit der Schutzcodiereinrichtung gekoppelt ist, um die Binärkomplemente der Fehlerschutzsymbole zu bilden;
D) eine Blockbildungseinrichtung, die mit der Sequenzcodierungseinrichtung, der Schutzcodierungseinrichtung und der Komplementbildungseinrichtung gekoppelt ist, um einen Block zu bilden, der die mehreren ersten Codewörter, die mehreren Fehlerschutzsymbole und die Komplemente der Fehlerschutzsymbole enthält.
2. Codierer nach Anspruch 1, bei dem jedes der ersten Codewörter gleichstromkompensiert (DC-balanced) ist.
3. Codierer nach Anspruch 1, bei dem die Blockbildungseinrichtung (24) ferner eine Einrichtung zum Bilden mehrerer Komplementpaare enthält, wobei jedes Komplementpaar eines der Fehlerschutzsymbole und dessen Komplement enthält, wobei die Blockbildungseinrichtung wenigstens eines der Paare zwischen einem ersten und einem zweiten der mehreren ersten Codewörter innerhalb des Blocks anordnet
4. Codierer nach Anspruch 3, bei dem jeder Block 96 Bits enthält.
5. Codierer nach Anspruch 4, bei dem jeder Block vier erste 20-Bit-Codewörter, acht Bits von Fehlerschutzsymbolen und acht Bits des Komplements der Fehlerschutzsymbole enthält.
6. Codierer nach Anspruch 5, bei dem die ersten Codewörter jeweils maximale Lauflängen von 3/4/3 besitzen und der Block eine maximale Lauflänge von 4 besitzt.
7. Codierer nach Anspruch 6, bei dem jede Sequenz 16 Bits enthält und die Sequenzcodierungseinrichtung (14) jede Sequenz in eines der ersten 20-Bit-Codewörter codiert.
8. Codierer nach Anspruch 7, bei dem die Sequenzcodierungseinrichtung (14) jede 16-Bit-Sequenz in ein zweites 10-Bit-Codewort und in ein drittes 10-Bit-Codewort codiert, die zusammen das erste Codewort der Sequenz enthalten.
Codierer nach Anspruch 8, bei dem die Blockbildungseinrichtung (24) jeden Block aus vier der zweiten Codewörter und aus vier der dritten Codewörter bildet und zwischen jedes der zweiten und dritten Codewörter und an einem der Enden des Blocks ein Komplementpaar anordnet.
10. Codierer nach Anspruch 9, bei dem die Sequenzcodierungseinrichtung (14) jede 16-Bit-Sequenz in ein zweites 9-Bit-Codewort und in ein drittes 11-Bit-Codewort codiert, die zusammen das erste Codewort der Sequenz enthalten.
11. Codierer nach Anspruch 10, bei dem die Blockbildungseinrichtung (24) jeden Block aus vier der zweiten Codewörter und aus vier der dritten Codewörter bildet und zwischen jedes der zweiten und dritten Codewörter und an einem der Enden des Blocks ein Komplementpaar anordnet.
12. Codierer nach Anspruch 1, bei dem die Sequenzen jeweils n Bits besitzen und m Bits getrennt von den verbleibenden n - m Bits codiert werden, so daß die n - m Bits in zweite Codewörter codiert werden, die entweder Null-Ungleichgewichte oder Ungleichgewichte besitzen, die zu jenen der dritten Codewörter, in die die n Bits codiert werden, komplementär sind, wobei die zweiten und dritten Codewörter zusammen das erste Codewort bilden.
13. Codierer nach Anspruch 12, bei dem die zweiten und dritten Codewörter höchstens Ungleichgewichte von +1 bzw. -1 besitzen.
14. Codierer nach Anspruch 1, bei dem nicht kompensierte erste Codewörter ferner in Codewörter codiert werden, die ein ausgewähltes Ungleichgewicht besitzen, um das Ungleichgewicht eines vorher codierten ersten Codeworts zu kompensieren.
15. Codierer nach Anspruch 1, bei dem die Sequenzen, die Befehle sind, in kompensierte Codewörter codiert werden.
16. Codierer nach Anspruch 3, bei dem die ersten Codewörter andere mittlere Lauflängen als die Anfangsund Endlauflängen besitzen.
17. Codierer nach Anspruch 16, bei dem die Lauflänge des Endes des vorherigen Codeworts und des Anfangs des nächsten Codeworts durch das zwischen den Codewörtern angeordnete Komplementpaar begrenzt ist und die Lauflänge die mittlere Lauflänge nicht überschreitet.
DE69032076T 1989-07-17 1990-07-09 Einrichtung für Datenkodierung und Vorwärts-Fehlerkorrektur für eine niedrige Offset-Gleichspannung und eine kurze Lauflänge Expired - Fee Related DE69032076T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US38104589A 1989-07-17 1989-07-17
US38175989A 1989-07-18 1989-07-18

Publications (2)

Publication Number Publication Date
DE69032076D1 DE69032076D1 (de) 1998-04-09
DE69032076T2 true DE69032076T2 (de) 1998-10-08

Family

ID=27009214

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69032076T Expired - Fee Related DE69032076T2 (de) 1989-07-17 1990-07-09 Einrichtung für Datenkodierung und Vorwärts-Fehlerkorrektur für eine niedrige Offset-Gleichspannung und eine kurze Lauflänge

Country Status (9)

Country Link
EP (1) EP0414368B1 (de)
JP (1) JPH03171826A (de)
KR (1) KR910003957A (de)
CN (1) CN1020364C (de)
AT (1) ATE163823T1 (de)
AU (2) AU618680B2 (de)
CA (1) CA2021072A1 (de)
DE (1) DE69032076T2 (de)
IE (1) IE902591A1 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE470371B (sv) * 1992-06-23 1994-01-31 Ericsson Telefon Ab L M Sätt och anordning vid digital signalöverföring att hos en mottagare estimera överförda symboler
GB9312124D0 (en) * 1993-06-11 1993-07-28 Inmos Ltd Encoding digital data
GB9312136D0 (en) * 1993-06-11 1993-07-28 Inmos Ltd Transmission of messages
DE4331178A1 (de) * 1993-09-14 1995-03-16 Hoechst Schering Agrevo Gmbh Substituierte Pyridine und Pyrimidine, Verfahren zu ihrer Herstellung und ihre Verwendung als Schädlingsbekämpfungsmittel und Fungizide
EP0749211B1 (de) * 1995-06-12 2003-05-02 Siemens Aktiengesellschaft Verfahren und Codiereinrichtung zur gesicherten Übertragung von Daten mittels Mehrkomponenten-Codierung
JP5233165B2 (ja) * 2007-05-24 2013-07-10 富士ゼロックス株式会社 データ伝送装置
US7777652B2 (en) * 2008-10-29 2010-08-17 Silicon Image, Inc. Coding system for memory systems employing high-speed serial links
TWI489814B (zh) * 2011-10-07 2015-06-21 Au Optronics Corp 編碼方法、編碼裝置、解碼方法、解碼裝置、資料傳送裝置及資料接收裝置
US9369237B2 (en) * 2013-08-08 2016-06-14 Qualcomm Incorporated Run-length detection and correction
CN105938728B (zh) * 2015-03-04 2020-08-11 爱思开海力士有限公司 用于近似平衡码的编码器和解码器设计
GB2540202A (en) * 2015-07-10 2017-01-11 Canon Kk Enhanced line encoding
CN111966627B (zh) * 2020-08-13 2023-06-30 北京中航通用科技有限公司 用于串行总线的8b/9b编解码方法
CN115622661A (zh) * 2021-07-14 2023-01-17 大唐移动通信设备有限公司 一种信号传输方法及装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1540617A (en) * 1924-01-15 1925-06-02 Wayne L Haines Clutch
JPS5619506A (en) * 1979-07-23 1981-02-24 Sony Corp Code converting method
JPS5632851A (en) * 1979-08-24 1981-04-02 Matsushita Electric Ind Co Ltd Coding and decoding system for binary information
JPS5665555A (en) * 1979-10-31 1981-06-03 Matsushita Electric Ind Co Ltd Modulation system with binary information
US4346474A (en) * 1980-07-03 1982-08-24 International Business Machines Corporation Even-odd parity checking for synchronous data transmission
US4486739A (en) * 1982-06-30 1984-12-04 International Business Machines Corporation Byte oriented DC balanced (0,4) 8B/10B partitioned block transmission code
US4569050A (en) * 1983-01-14 1986-02-04 Honeywell Inc. Data communication system with fixed weight error correction and detection code
JPS60107922A (ja) * 1983-11-16 1985-06-13 Fujitsu Ltd 符号誤り検出回路
JPH0721942B2 (ja) * 1984-10-11 1995-03-08 ソニー株式会社 チヤンネル符号化方法
JPS6229729A (ja) * 1985-07-31 1987-02-07 プロイズボドストベンノエ オビエデイネニエ “トウルボモトルニ ザボド”イメニ カ−.イエ−.ボロシロバ 軸流ガスタ−ビン
JPS6264131A (ja) * 1985-09-13 1987-03-23 Nec Corp エラ−検出回路
NL8601603A (nl) * 1986-06-20 1988-01-18 Philips Nv Kanaalcoderingsinrichting.
FR2606239A1 (fr) * 1986-10-30 1988-05-06 Bull Sa Procede et dispositif de transmission de donnees numeriques
DE3786404T2 (de) * 1987-11-27 1994-01-20 Ibm Daten-Richtigkeits-Kontrollmittel.
US5212695A (en) * 1989-04-28 1993-05-18 Canon Kabushiki Kaisha Error check or erro correction code coding device

Also Published As

Publication number Publication date
AU618680B2 (en) 1992-01-02
JPH03171826A (ja) 1991-07-25
DE69032076D1 (de) 1998-04-09
CN1020364C (zh) 1993-04-21
ATE163823T1 (de) 1998-03-15
KR910003957A (ko) 1991-02-28
EP0414368A3 (en) 1991-12-11
AU5870890A (en) 1991-01-17
AU1092892A (en) 1992-04-16
IE902591A1 (en) 1991-02-27
CA2021072A1 (en) 1991-01-18
CN1049580A (zh) 1991-02-27
EP0414368A2 (de) 1991-02-27
EP0414368B1 (de) 1998-03-04

Similar Documents

Publication Publication Date Title
DE10134472B4 (de) Sende- und Empfangsschnittstelle und Verfahren zur Datenübertragung
DE19781914C2 (de) System zum Implementieren von lauflängenbegrenzten Codes
DE60124164T2 (de) Kodierung für in Paketen geordnete, serielle Daten
DE60124443T2 (de) 64b/66b-Dekodierung, für in Paketen geordnete, serielle Daten
DE3587328T2 (de) Verfahren zur Informationsübertragung, Kodierungseinrichtung zur Verwendung dieses Verfahrens und Dekodierungseinrichtung zur Verwendung dieses Verfahrens.
DE3689733T2 (de) Gerät zur Übertragung von Datenbitgruppen und Verfahren zur Beurteilung der mit der grössten Wahrscheinlichkeit übertragenen Sequenz.
DE3027329C2 (de)
US5144304A (en) Data and forward error control coding techniques for digital signals
DE69032076T2 (de) Einrichtung für Datenkodierung und Vorwärts-Fehlerkorrektur für eine niedrige Offset-Gleichspannung und eine kurze Lauflänge
DE69733864T2 (de) Vorrichtung und verfahren zur datenübertragung von datenwortblöcken zusammen mit kontrollwörtern
DE69632879T2 (de) Kodeübertragung mit lokaler Parität
DE3219439C2 (de)
DE68925547T2 (de) Vorrichtung und Verfahren zur Zeichenbegrenzungsermittlung in einem seriellen codierten Datenstrom
DE3239607C2 (de)
DE102006023878A1 (de) Codieren und Decodieren von paketierten Daten
DE2801988A1 (de) Arithmetische codierung von symbolfolgen
DE60038333T2 (de) Vier-zu-sechs Kodierungstabelle, Modulation die diese anwendet, aber ohne Vereinigungsbit ,sowie ihre Anwendung für optische Plattenaufzeichnungs- oder Wiedergabesysteme
DE2204766C2 (de) Codeumsetzer für Datenverarbeitungssysteme
DE4121444A1 (de) System und verfahren zur fehlerdetektion und zur reduzierung von simultanem schaltrauschen
DE102007016461A1 (de) Verfahren zum Übertragen DC-balance-kodierter Daten, Verfahren zum Reduzieren von Simultaneous Switching Noise, Datensender, Datenempfänger und Daten-Sender/ Empfänger
DD202084A5 (de) Verfahren zum umkodieren einer folge von datenbits in eine folge von kanalbits, anordnung zum dekodieren der nach diesemverfahren kodierten kanalbits und aufzeichnungstraeger miteiner informationsstruktur
DE2320422A1 (de) Verfahren zur fehlererkennung
DE69733465T2 (de) Umsetzung einer sequenz von m-bit-informationswörtern in ein moduliertes signal
DE3147578C2 (de)
DE69027400T2 (de) Gerät zur digitalen Modulation und Gerät zur digitalen Demodulation

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee