8b/10b
8b/10bはIBMが開発した高速シリアル転送方式である。10b/8bとも。8ビットのデータを10ビットのデータに変換して転送することから、こう呼ばれる。
シリアル・データの転送にはデータと、そのデータを拾うタイミングを作るクロックの存在が欠かせない。8b/10b方式はシリアル・データの中にクロックを埋め込むことで、データとクロックの転送を同じ配線で行うことが特徴である。
生のシリアル・データは、LowやHighの状態が長期間、或いは不定期に渡って続く可能性があるため、そこからクロックを取り出す事が出来ない。8b/10bでは、どのようなデータであっても、Low又はHigh状態の期間が3クロック以下になるように変換を行う。これによって、帯域の20%をロスする代わりに、データとクロックを同じ配線で同時に送受信する事が可能になる。
現在のシリアル転送方式の主流であり、イーサネット、ファイバーチャネル、IEEE 1394、PCI Express 2.0、Serial ATA、USB 3.0などがこの方式を採っている。PCI Express 3.0では128b/130bが採用されている。
変換方式
8ビットのデータを HGF EDCBA の3ビット/5ビットに分け、それぞれに1ビットを付加して abcdei fghjの6ビット/4ビットに変換する。このビット変換に決まった法則はなく、完全なテーブルによる変換で行われ、シンボル Dxx.x と表記される。6ビット側は32個のビットパタンを持ち、4ビット側は8個のビットパタンを持つ。従って00h〜FFhの8ビットデータはD00.0〜D31.7のいずれかのシンボルで表現される。
さらに各シンボルは、+/-の2種類存在し、トータル512個のシンボルが存在する。+/-はランニング・ディスパリティ (RD) と呼ばれ、直前のシンボルのRDが+であれば次は-のシンボルを、逆にRDが-なら次は+のシンボルを送出する。これも1または0を連続させない仕組みの一環である。ただし、"1"の数と"0"の数が同じであれば、RDの極性は継続される。この性質を用いて極性の違反を検出することにより、それ以前の送信データにエラーが含まれていることを検出できる。RDの初期値は-である。したがって最初に送出されるシンボルは"1"または"0"の数が5個のシンボルでRD-を継続するか、"1"が6個含まれるシンボルでRD+に反転させることから始まる。
以下に変換テーブルの一部を示す。
Name | 8bit | currentRD- | currentRD+ |
D00.0 | 00h | 100111 0100 | 011000 1011 |
D01.0 | 01h | 011101 0100 | 100010 1011 |
D02.0 | 02h | 101101 0100 | 010010 1011 |
D03.0 | 03h | 110001 1011 | 110001 0100 |
D04.0 | 04h | 110101 0100 | 001010 1011 |
D05.0 | 05h | 101001 1011 | 101001 0100 |
〜 | |||
D30.7 | FEh | 011110 0001 | 100001 1110 |
D31.7 | FFh | 101011 0001 | 010100 1110 |
これら512個のシンボルはDコードと呼ばれ、文字通りデータを示すが、これ以外にKコードと呼ばれる制御用のシンボルも存在する。
同一のシンボルが長時間連続して送出されると、周期的な電気変動を誘発して、ボード上でノイズの発生源となる場合がある。これを防ぐためにPCI Expressでは、8ビットデータにスクランブリングを掛けてから8b/10b変換を行う方法が採用されている。つまり、シリアル伝送路上には、常にランダムなビットパタンが送出され続けることになる。