8b/10bエンコーディング

8ビットワードを10ビットシンボルにマッピングするラインコード

ファイバーチャネル
レイヤー4. プロトコルマッピング
LUNマスキング
レイヤー3. 共通サービス
レイヤー2. ネットワーク
ファイバーチャネルファブリック
ファイバーチャネルゾーニング
登録状態変更通知
レイヤー1. データリンク
8b/10bエンコーディング
レイヤー0. 物理

電気通信分野において8b /10bは、8ビットワードを10ビットシンボルマッピングすることでDCバランスと境界付きディスパリティを実現し、同時に十分な状態変化を提供して合理的なクロックリカバリを可能にする伝送路符号である。これは、少なくとも20ビットの文字列における1と0のカウント差が2以下であり、連続する1または0の数が5つ以下であることを意味する。これにより、信号転送に必要なチャネルの帯域幅の下限に対する要求が低減される。[1]

8b/10bコードは、様々な性能パラメータに焦点を当てて様々な方法で実装できます。例えば、K. OdakaがDATデジタルオーディオレコーダー用に設計した実装があります。[2] Kees Schouhamer ImminkはDCCオーディオレコーダー用に8b/10bコードを設計しました[3] IBMの実装は、1983年にAl WidmerPeter Franaszekによって説明されました[4] [5]

IBMの実装

方式名が示すように、8ビットのデータは、シンボルまたは文字と呼ばれる10ビットのエンティティとして送信されます。データの下位5ビットは6ビットのグループ(5b/6b部分)にエンコードされ、上位3ビットは4ビットのグループ(3b/4b部分)にエンコードされます。これらのコードグループは連結され、10ビットのシンボルを形成し、回線上で送信されます。データシンボルは、多くの場合Dxyと呼ばれます。ここで、xは0~31、yは0~7の範囲です。8b/10bエンコードを使用する規格では、データシンボルの代わりに送信できる最大12個の特殊シンボル(または制御文字)も定義されています。これらは、フレームの開始、フレームの終了、リンクアイドル、スキップ、および同様のリンクレベルの状態を示すためによく使用されます。10ビットシンボルの配置を定義するには、少なくとも1つの特殊シンボル(つまり「カンマ」シンボル)を使用する必要があります。これらは Kxy と呼ばれ、Dxy シンボルとは異なるエンコードを持っています。

8b/10bエンコーディングでは、8ビットワードを10ビットシンボルでエンコードするため、1024(10ビット、2 10 個のシンボルの一部を除外することで、連続する5ビットのランレングス制限を保証し、0と1のカウント差が2以下になるようにすることができます。256個の8ビットワードの一部は、2つの異なる方法でエンコードできます。これらの代替エンコーディングを使用することで、シリアルデータストリームにおける長期的なDCバランスを実現できます。これにより、データストリームをハイパス特性を持つチャネル(例えば、イーサネットトランス結合型シールドなしツイストペアや、自動ゲイン制御機能を備えた光受信機など)を介して送信できます。

エンコーディングテーブルとバイトエンコーディング

以下の表では、各入力バイト( と表記HGF EDCBA)について、A は最下位ビット(LSB)、Hは最上位ビット(MSB)を表します。出力にはijの2つの追加ビットが追加されます。これらのビットはLSBからMSBの順に、 a、 b、 c、 d、 e、i、 f、 g、 h、jと続きます。つまり、5b/6bコードの後に​​3b/4bコードが続きます。これにより、カンマ記号内の特殊ビットシーケンスの一意性が保証されます。

送信される 0 ビットと 1 ビットの数に対するストリームへの残余影響はランニング ディスパリティ( RD ) として維持され、スルーの影響は後続のシンボルのエンコードの選択によってバランスが取られます。

5b/6bコードはペア・ディスパリティ・コードであり、3b/4bコードも同様です。6ビットまたは4ビットの各コードワードは、0と1の数が同数(ディスパリティ0)であるか、0が1より2つ多い(それぞれ0が4つ、1が2つ、または0が3つ、1が1つ)か、0が1より2つ少ない、という2つの形式のいずれかになります。6ビットまたは4ビットのコードで、非ゼロ・ディスパリティ(1の数から0の数を引いた値、つまり-2または+2)が使用される場合、正または負のディスパリティ・エンコーディングの選択は、ランニング・ディスパリティを切り替えるものである必要があります。言い換えれば、非ゼロ・ディスパリティ・コードは交互に使用されます。

ランニング格差

8b/10b符号化はDCフリーです。つまり、伝送される1と0の長期的な比率は正確に50%です。これを実現するために、伝送される1の数と0の数の差は常に±2に制限され、各シンボルの末尾では+1または-1になります。この差はランニング・ディスパリティ(RD)と呼ばれます。

この方式では、ランニング・ディスパリティ+1と-1の2つの状態のみを必要とし、-1から始まる。[6]

1と0の数が等しくない5b/6bおよび3b/4bコードには、送信に使用できるビットパターンが2つあります。1つは「1」ビットを2つ多く含み、もう1つはすべてのビットを反転して0を2つ多く含みます。信号の現在のランニング・ディスパリティに応じて、エンコード・エンジンは、与えられたデータに対して、2つの可能な6ビットまたは4ビットのシーケンスのどちらを送信するかを選択します。当然のことながら、6ビットまたは4ビットのコードに1と0の数が等しい場合、サブブロックD.07 (00111) とDx3 (011) を除き、ディスパリティは変わらないため、どちらを選択するかは選択の余地がありません。どちらの場合もディスパリティは変わりませんが、D.07に遭遇した際にRDが正であれば000111が使用され、負であれば111000が使用されます。同様に、Dx3 に遭遇した際に RD が正であれば 0011 が使用され、負であれば 1100 が使用されます。これは以下の表に正確に反映されていますが、1 と 0 の数が等しく、それぞれ 2 つのエンコーディングが可能なサブブロックはこれら 2 つだけであるため、さらに言及する価値があります。

ランニングディスパリティのルール
以前の
RD

コードワードの不一致

選択された格差
次の
RD
−1 0 0 −1
−1 ±2 +2 +1
+1 0 0 +1
+1 ±2 −2 −1

5b/6b コード (abcdei)

入力 RD = −1 RD = +1 入力 RD = −1 RD = +1
コード EDCBA a b c d e i コード EDCBA a b c d e i
D.00 00000 100111 011000 D.16 10000 011011 100100
D.01 00001 011101 100010 D.17 10001 100011
D.02 00010 101101 010010 D.18 10010 010011
D.03 00011 110001 D.19 10011 110010
D.04 00100 110101 001010 D.20 10100 001011
D.05 00101 101001 D.21 10101 101010
D.06 00110 011001 D.22 10110 011010
D.07 00111 111000 000111 D.23 † 10111 111010 000101 K.23.7記号にも使用される
D.08 01000 111001 000110 D.24 11000 110011 001100
D.09 01001 100101 D.25 11001 100110
D.10 01010 010101 D.26 11010 010110
D.11 01011 110100 D.27 † 11011 110110 001001 K.27.7記号にも使用される
D.12 01100 001101 D.28 11100 001110
D.13 01101 101100 D.29 † 11101 101110 010001 K.29.7記号にも使用される
D.14 01110 011100 D.30 † 11110 011110 100001 K.30.7記号にも使用される
D.15 01111 010111 101000 D.31 11111 101011 010100
使用されていない 1111 00 0000 11 K.28 ‡ 11100 00 1111 11 0000 K.28.xシンボル専用

† Kx7の5b/6bコードにも使用される

‡ K.28.yの5b/6bコード専用

3b/4b コード (fghj)

入力 RD = −1 RD = +1 入力 RD = −1 RD = +1
コード HGF f g h j コード HGF f g h j
Dx0 000 1011 0100 Kx0 000 1011 0100
Dx1 001 1001 Kx1 ‡ 001 0 110 1 001
DX2 010 0101 Kx2 010 1010 0101
DX3 011 1100 0011 Kx3 011 1100 0011
DX4 100 1101 0010 Kx4 100 1101 0010
Dx5 101 1010 Kx5 ‡ 101 0 101 1010
Dx6 110 0110 Kx6 110 1001 0110
DxP7 † 111 1110 0001 Kx7 ‡ 111 0 111 1000
DxA7 † 0111 1000

† Dx7の場合、先行する5b/6bコードと組み合わせた際に5つの連続した0または1を回避するため、プライマリ(DxP7)またはオルタネート(DxA7)エンコードを選択する必要があります。同期の
問題を回避するため、コンマシンボルでは5つの同一ビットのシーケンスが使用されます。DxA7
は、

  • RD = −1のとき:x  = 17、18、20の場合、
  • RD = +1 の場合: x  = 11、13、14。

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 個の制御シンボルを送信できます。

制御記号
入力 RD = −1 RD = +1
シンボル 12月 ヘックス HGF EDCBA abcdei fghj abcdei fghj
K.28.0 28 1C 000 11100 001111 0100 110000 1011
K.28.1 † 60 3C 001 11100 00 1111 1 001 11 0000 0 110
K.28.2  92 5C 010 11100 001111 0101 110000 1010
K.28.3  124 7C 011 11100 001111 0011 110000 1100
K.28.4  156 9C 100 11100 001111 0010 110000 1101
K.28.5 † 188 紀元前 101 11100 00 1111 1 010 11 0000 0 101
K.28.6  220 DC 110 11100 001111 0110 110000 1001
K.28.7 ‡ 252 FC 111 11100 00 1111 1 000 11 0000 0 111
K.23.7  247 F7 111 10111 111010 1000 000101 0111
K.27.7  251 フェイスブック 111 11011 110110 1000 001001 0111
K.29.7  253 FD 111 11101 101110 1000 010001 0111
K.30.7  254 FE 111 11110 011110 1000 100001 0111

† 制御シンボルのうち、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 は、データ ストリーム内の単一ビット エラーの結果として発生しない唯一のコンマ シンボルです。

D31.1のエンコード例

ランニングディスパリティの両ケースともD31.1
入力 RD = −1 RD = +1
コード 12月 ヘックス HGF EDCBA abcdei fghj abcdei fghj
D31.1 63 3階 001 11111 101011 1001 010100 1001

8b/10bを使用するテクノロジー

前述の IBM の特許の期限が切れた後、この方式はさらに普及し、いくつかの通信技術の DC フリー回線コードとして選ばれました。

8b/10b エンコーディングが適用される領域は次のとおりです。

ファイバーチャネル(4GFCおよび8GFCバリアントのみ)

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)が多すぎるため、使用できません。それでも、10ビットの奇数+偶数コーディングペアは十分に残っており、少なくとも12個の特殊な非データ文字を格納できます。

256個のデータ値を表すコードはデータ(D)コードと呼ばれます。12個の特殊な非データ文字を表すコードは制御(K)コードと呼ばれます。

すべてのコードは、3つの8進数値で記述できます。これは、「Dxx.x」または「Kxx.x」という命名規則に従って行われます。(前のセクションの表では、Dxx.xまたはKxx.xに8進数値ではなく10進数値を使用していることに注意してください。)

例:

入力データビット: ABCDEFGH
データはABC DEFGHに分割されます
データがシャッフルされます: DEFGH ABC

ここで、これらのビットはペアになっている方法で 10 進数に変換されます。

入力データ

C3 (16進数) = 11000011
         = 110 00011
         = 00011 110
         = 3 6

E 8B/10B = D03.6

デジタルオーディオ

8b/10bエンコード方式は、デジタルオーディオストレージアプリケーションで広く使用されています。

オーディオ CDCD-ROMには、異なるが関連した方式が使用されています

代替案

8b/10bは符号化方式であり、特定のコードではないことに注意してください。多くのアプリケーションで同じコードが使用されていますが、互換性のない実装も存在します。例えば、Transition Minimized Differential Signalingは8ビットを10ビットに拡張しますが、その方法は全く異なります。

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]

参考文献

  1. ^ Kees Schouhamer Immink (1997年3月). 「DCフリー・マルチモード符号の性能評価」. IEEE Transactions on Communications . 45 (3): 293– 299. doi :10.1109/26.558690. DCバランス符号、あるいはDCフリー符号と呼ばれるこの符号は長い歴史を持ち、その応用範囲は録音分野に限定されるものではありません。
  2. ^ US 4,456,905、「バイナリデータを符号化する方法および装置」、1984年6月26日公開 
  3. ^ US 4,620,311、「情報伝送方法、その方法で使用する符号化装置、およびその方法で使用する復号化装置」、1986年10月28日公開 
  4. ^ Al X. Widmer, Peter A. Franaszek (1983). 「DCバランス、パーティションブロック、8B/10B伝送コード」. IBM Journal of Research and Development . 27 (5): 440– 451. doi :10.1147/rd.275.0440. 2009年5月30日時点のオリジナルよりアーカイブ。 2005年4月5日閲覧
  5. ^ US 4,486,739、「バイト指向DCバランス(0,4)8B/10B分割ブロック伝送コード」、1984年12月4日公開 
  6. ^ Thatcher, Jonathan (1996年4月1日). 「ギガビット・イーサネット物理に関する考察」IBM . 2008年8月17日閲覧
  7. ^ 「物理層仕様」. Mipi.org . MIPIアライアンス. 2014年4月20日閲覧
  8. ^ ファイバチャネルフレーミングとシグナリング - 3 (FC-FS-3) Rev 1.1 セクション5.2.1および5.3.1 [1]
  9. ^ ファイバーチャネル物理インタフェース5(FC-PI-5)REV 6.10 セクション5.7 [2]
  10. ^ Mahesh Wagh (2011年8月6日). 「PCIe 3.0 エンコーディングとPHY論理」(PDF) . pcisig.com . 2015年6月5日閲覧
  • 「8b/10bエンコーディングの定義」。2014年6月8日時点のオリジナルよりアーカイブ。 2014年9月2日閲覧
「https://en.wikipedia.org/w/index.php?title=8b/10b_encoding&oldid=1296839634」より取得