電気通信において、8b/10bは、8 ビットのワードを10 ビットのシンボルにマッピングしてDC バランスと境界付きディスパリティを実現し、同時に適切なクロック回復を可能にするのに十分な状態変化を提供するラインコードです。これは、少なくとも20 ビットの文字列における 1 と 0 のカウントの差が2 以下であり、連続する 1 または 0 が 5 つ以下であることを意味します。これにより、信号を伝送するために必要なチャネルの低帯域幅制限に対する要求を軽減できます。[ 1 ]
8b/10b コードは、さまざまなパフォーマンス パラメータに焦点を当てて、さまざまな方法で実装できます。1 つの実装は、K. Odaka によってDATデジタル オーディオ レコーダー用に設計されました。[ 2 ] Kees Schouhamer Immink は、DCCオーディオ レコーダー用に 8b/10b コードを設計しました。[ 3 ] IBM の実装は、1983 年にAl WidmerとPeter Franaszekによって説明されました。[ 4 ] [ 5 ]
スキーム名が示すように、8ビットのデータは、シンボルまたは文字と呼ばれる 10 ビットのエンティティとして送信されます。データの下位 5 ビットは 6 ビットのグループ (5b/6b 部分) にエンコードされ、上位 3 ビットは 4 ビットのグループ (3b/4b 部分) にエンコードされます。これらのコード グループが連結されて、ワイヤ上で送信される 10 ビットのシンボルが形成されます。データシンボルは、x が 0 ~ 31、y が 0 ~ 7 の範囲である Dxy と呼ばれることがよくあります。8b/10b エンコーディングを使用する規格では、データ シンボルの代わりに送信できる最大 12 個の特殊シンボル(または制御文字) も定義されています。これらは、フレームの開始、フレームの終了、リンク アイドル、スキップ、および同様のリンク レベルの状態を示すためによく使用されます。10 ビット シンボルのアライメントを定義するには、少なくとも 1 つ (たとえば「コンマ」シンボル) を使用する必要があります。これらはKxyと呼ばれ、Dxyシンボルとは異なる符号化方式を採用している。
8b/10b エンコーディングでは 8 ビットワードをエンコードするために 10 ビットシンボルを使用するため、連続する 5 ビットの等間隔のランレングス制限を確保し、ゼロとイチのカウントの差が 2 以下になるように、可能な 1024 (10 ビット、2 10 ) 個のシンボルの一部を除外することができます。256 個の可能な 8 ビットワードの一部は、2 つの異なる方法でエンコードできます。これらの代替エンコーディングを使用することで、この方式はシリアルデータストリームで長期的な DC バランスを実現できます。これにより、イーサネットのトランス結合非シールドツイストペアや自動利得制御を使用する光受信機など、ハイパス特性を持つチャネルを介してデータストリームを送信できます。
以下の表では、各入力バイト(で表されるHGF EDCBA)について、A は最下位ビット(LSB)、H は最上位ビット(MSB)を表します。出力には、 iとjという 2 ビットが追加されます。ビットは LSB から MSB の順に、a、b、c、d、e、i、f、g、h、jの順で送信されます。つまり、5b/6b コードの後に 3b/4b コードが続きます。これにより、コンマ記号内の特殊なビット列の一意性が保証されます。
ストリームに送信されるゼロビットとイチビットの数に対する残留効果は、実行時不均衡(RD)として維持され、スルーの影響は後続シンボルのエンコーディングの選択によってバランスが取られます。
5b/6b コードはペアディスパリティ コードであり、3b/4b コードも同様です。各 6 ビットまたは 4 ビットのコード ワードは、ゼロとイチの数が等しい (ディスパリティがゼロ) か、または、ゼロがイチより 2 つ多い形式 (それぞれ 4 つのゼロと 2 つのイチ、または 3 つのゼロと 1 つのイチ) と、ゼロが 2 つ少ない形式の 2 つで構成されます。ディスパリティがゼロでない (イチの数からゼロの数を引いた値、つまり -2 または +2) 6 ビットまたは 4 ビットのコードを使用する場合、正または負のディスパリティ エンコーディングの選択は、実行中のディスパリティをトグルする方でなければなりません。言い換えれば、ゼロでないディスパリティ コードが交互に使用されます。
8b/10b符号化はDCフリーであり、送信される1と0の長期的な比率が正確に50%であることを意味します。これを実現するために、送信される1の数と送信される0の数の差は常に±2に制限され、各シンボルの末尾では+1または-1になります。この差はランニングディスパリティ(RD)として知られています。
この方式では、+1 と −1 の走行差に対して 2 つの状態しか必要としません。開始値は −1 です。[ 6 ]
1 とゼロの数が異なる 5b/6b および 3b/4b コードごとに、送信に使用できるビット パターンが 2 つあります。1 つは「1」ビットが 2 つ多いもの、もう 1 つはすべてのビットが反転され、したがってゼロが 2 つ多いものです。信号の現在の実行ディスパリティに応じて、エンコード エンジンは、指定されたデータに対して送信する 2 つの可能な 6 ビットまたは 4 ビット シーケンスのいずれかを選択します。明らかに、6 ビットまたは 4 ビット コードに 1 とゼロの数が等しい場合、サブ ブロック D.07 (00111) および Dx3 (011) を除いてディスパリティは変更されないため、選択する必要はありません。どちらの場合もディスパリティは変更されませんが、D.07 に遭遇したときに RD が正の場合は 000111 が使用され、負の場合は 111000 が使用されます。同様に、Dx3 が検出された際に RD が正の場合は 0011 が使用され、負の場合は 1100 が使用されます。これは以下の表に正確に反映されていますが、1 と 0 の数が等しく、それぞれ 2 つのエンコードが可能なサブブロックはこれら 2 つだけであるため、改めて言及する価値があります。
† Kx7の5b/6bコードにも使用される
‡ K.28.y の 5b/6b コード専用
† Dx7 の場合、先行する 5b/6b コードと組み合わせたときに 5 つ連続する 0 または 1 を避けるため、プライマリ (DxP7) またはオルタネート (DxA7) のエンコーディングを選択する必要があります。同期の問題のため、正確に 5 つの同一ビットのシーケンスがコンマ記号で使用されます。DxA7は、
x = 23、x = 27、x = 29、およびx = 30の場合 、制御シンボル Kx7 に使用される 3b/4b コード部分は、DxA7 の場合と同じです。他の DxA7 コードを使用すると、コンマシーケンスのずれが発生する可能性があるため、使用できません。
‡ K.28.1、K.28.5、およびK.28.7のみが、5つの0または1のビット列を含むコンマシンボルを生成します。シンボルの形式は11 0000 0 1xxまたは00 1111 1 0xxです。
8b/10b 内の制御シンボルは、有効なビット列 (1 または 0 が 6 つ以下) である 10b シンボルですが、対応する 8b データ バイトはありません。これらは低レベルの制御機能に使用されます。たとえば、ファイバー チャネルでは、K28.5 は、ループ アービトレーション、フィル ワード、リンク リセットなどの機能を実行する 4 バイト シーケンス (「オーダー セット」と呼ばれます) の先頭で使用されます。
5b/6bテーブルと3b/4bテーブルの結果、以下の12個の制御シンボルを送信することが許可されます。
† 制御シンボルの中で、K.28.1、K.28.5、およびK.28.7は「コンマシンボル」です。コンマシンボルは同期(ビットストリーム内の8b/10bコードのアライメントの検出)に使用されます。K.28.7を使用しない場合、固有のコンマシーケンス00 11111 0または11 00000 1が、通常のコードの任意の組み合わせ内の任意のビット位置に誤って出現することはありません。
‡ 実際の符号化で K.28.7 が許容される場合、† で提案されているよりも複雑な同期パターンの定義を使用する必要があります。これは、K.28.7 と他の複数のコードを組み合わせると、2 つのコードが重なり合う、位置ずれした偽のコンマ記号が形成されるためです。複数の K.28.7 コードのシーケンスは、位置ずれしたコンマ記号が検出できなくなるため、いかなる場合でも許容されません。
K.28.7は、データストリームにおける単一ビットエラーの結果として発生する可能性がない唯一のコンマ記号である。
前述のIBM特許が失効した後、この方式はさらに普及し、いくつかの通信技術においてDCフリーの回線符号として採用された。
8b/10b符号化が応用されている分野には、以下のようなものがある。
FC-0 規格では、ファイバー チャネル システムで使用するエンコーディング スキーム (8b/10b または 64b/66b) が定義されています[ 8 ] –高速バージョンでは、帯域幅効率を最適化するために通常 64b/66b が使用されます (帯域幅のオーバーヘッドは 8b/10b では 20% であるのに対し、64b/66b システムでは約 3% (~ 2/66) であるため)。したがって、4GFC および 8GFC バリアントでは 8b/10b エンコーディングが使用され、10GFC および 16GFC バリアントでは 64b/66b が使用されます。[ 9 ]ファイバー チャネルFC1データ リンク レイヤーは、信号の 8b/10b エンコーディングとデコーディングを実装する責任を負います。
ファイバーチャネル8b/10b符号化方式は、他の電気通信システムでも使用されています。データは、入力された8ビット値ごとに2つの可能な10ビット出力値のいずれかを生成するアルゴリズムを使用して拡張されます。各8ビット入力値は、奇数ディスパリティの10ビット出力値、または偶数ディスパリティの10ビット出力値のいずれかにマッピングされます。このマッピングは通常、並列入力データがファイバーチャネルリンクを介して送信されるシリアル出力ストリームに変換されるときに行われます。奇数/偶数の選択は、1と0の間の長期的なゼロディスパリティが維持されるように行われます。これはしばしば「DCバランシング」と呼ばれます。
8ビットから10ビットへの変換方式では、使用可能な1024個の出力値のうち512個しか使用されません。残りの512個の未使用出力値のほとんどは、1が多すぎる(または0が多すぎる)ため、使用できません。それでも、少なくとも12個の特殊な非データ文字を格納できる十分な数の10ビットの奇数+偶数符号化ペアが残ります。
256個のデータ値を表すコードはデータ(D)コードと呼ばれ、12個の特殊な非データ文字を表すコードは制御(K)コードと呼ばれます。
すべてのコードは、3つの8進数値で表すことができます。これは、「Dxx.x」または「Kxx.x」という命名規則に従って行われます。(なお、前のセクションの表では、Dxx.xまたはKxx.xには8進数ではなく10進数値が使用されています。)
例:
これらのビットは、ペアになっている方法で10進数に変換されます。
入力データ
C3 (16進数) = 11000011 = 110 00011 = 00011 110 = 3 6
E 8B/10B = D03.6
8b/10b エンコーディング方式は、デジタルオーディオストレージアプリケーションで広く使用されています。
8b/10bは符号化方式であり、特定のコードではないことに注意してください。多くのアプリケーションで同じコードが使用されていますが、互換性のない実装も存在します。例えば、 8ビットを10ビットに拡張するTransition Minimized Differential Signaling(TMIN)は、全く異なる方法で拡張を行います。
10 ギガビット イーサネットの10GBASE-R物理媒体依存(PMD) インターフェイス用に導入された64b/66b エンコーディングは、8b/10b エンコーディングよりもオーバーヘッドが少なく、エンコードされたデータ 64 ビット (8 ビットではなく) あたり 2 ビットのオーバーヘッドがあります。この方式は、設計が 8b/10b エンコーディングとはかなり異なり、DC バランス、短いラン長、遷移密度を明示的に保証しません (これらの機能は、スクランブリングによって統計的に実現されます)。64b/66b エンコーディングは、それぞれPCI Express 3.0およびUSB 3.1用の 128b/130b および 128b/132b エンコーディング バリアントに拡張され、各規格の以前のリビジョンで 8b/10b エンコーディングに取って代わりました。[ 10 ]
バランス
または
DC フリー
コードと呼ばれることが多いこれらのコードは長い歴史を持ち、その応用は録音実務に限定されるものではありません。