8b/10b
From Wikipedia, the free encyclopedia
特徴
シリアル通信にはデータと、そのデータを拾うタイミングを作るクロックの存在が欠かせない。8b/10b方式はシリアル・データの中にクロックを埋め込むことで、データとクロックの転送を同じ配線で行うことが特徴である。
データとクロックを同時に通信するときに、LowやHighの状態が長期間に渡って続く場合は、そこからクロックを取り出せなくなることがある。8b/10bではどのようなデータであっても、Low/High状態が4クロック以下になるように変換を行う。これによって、帯域の20%をロスする(=データの割合が8/10になる)代わりに、データとクロックを同じ配線で同時に送受信することが可能になる。
用例
シリアル転送方式の多くで採用され、ギガビットイーサネット (1000BASE-X)[3]、ファイバーチャネル (1GFC~8GFC)[4]、IEEE 1394b (FireWire 800)[5]、PCI Express 2.0[6]、Serial ATA[7]、USB 3.0[8]などがこの方式を採っている。
8b/10bで同一のシンボルを長時間連続して送ると、電気変動が周期的になるため基板上でノイズの発生源となる恐れがある。 この対策として、PCI Expressでは8ビットデータに疑似乱数によるスクランブル処理を掛けてから8b/10b変換する方法が採用されており、伝送路が常にランダムなビットパターンで動作し続けることで周期変動を防いでいる。
さらに高速通信になると上記同様にスクランブル処理を用いる方式が多くなり、10ギガビット・イーサネット(10GBASE-R)やファイバーチャネル(10GFC・16GFC)では64b/66bが、PCI Express 3.0やUSB 3.1 Gen2では128b/130bが採用されている。
変換方式
8ビットの元データを HGF EDCBA の上位3ビット/下位5ビットに分け、それぞれ1ビットずつ加えてLSBが最初に来る形でabcdei fghjのように下位6ビット/上位4ビットに変換する。
この変換はシンボル D.xx.x のように表記し、8ビットの元データ 0x00~0xFF は、256種のシンボル D.00.0, D.01.0, ... , D.31.6, D.31.7 で表現される。
以下に変換テーブルの一例としてIBMの実装を示す。このビット変換に決まった法則はなく、完全なテーブルによる変換で行われる。
| シンボル名 | 5ビット値 EDCBA |
6ビット値 abcdei | |
|---|---|---|---|
| 正シンボル | 負シンボル | ||
| D.00 | 00000 | 100111 | 011000 |
| D.01 | 00001 | 011101 | 100010 |
| D.02 | 00010 | 101101 | 010010 |
| D.03 | 00011 | 110001 | |
| D.04 | 00100 | 110101 | 001010 |
| D.05 | 00101 | 101001 | |
| D.06 | 00110 | 011001 | |
| D.07 | 00111 | 111000 | 000111 |
| D.08 | 01000 | 111001 | 000110 |
| D.09 | 01001 | 100101 | |
| D.10 | 01010 | 010101 | |
| D.11 | 01011 | 110100 | |
| D.12 | 01100 | 001101 | |
| D.13 | 01101 | 101100 | |
| D.14 | 01110 | 011100 | |
| D.15 | 01111 | 010111 | 101000 |
| D.16 | 10000 | 011011 | 100100 |
| D.17 | 10001 | 100011 | |
| D.18 | 10010 | 010011 | |
| D.19 | 10011 | 110010 | |
| D.20 | 10100 | 001011 | |
| D.21 | 10101 | 101010 | |
| D.22 | 10110 | 011010 | |
| D.23 | 10111 | 111010 | 000101 |
| D.24 | 11000 | 110011 | 001100 |
| D.25 | 11001 | 100110 | |
| D.26 | 11010 | 010110 | |
| D.27 | 11011 | 110110 | 001001 |
| D.28 | 11100 | 001110 | |
| D.29 | 11101 | 101110 | 010001 |
| D.30 | 11110 | 011110 | 100001 |
| D.31 | 11111 | 101011 | 010100 |
シンボルの中には正負2種類が用意されているものがあるが、多くは0/1の個数が異なっており、それを反転させた組になっている。これまでに送ったシンボルの0/1の個数差をランニングディスパリティ (RD) と呼び、このRDによって正負シンボルどちらを使うかが決まる。
- 直前のRDが正(=
1が多い)なら、次は負シンボルを送る。 - 直前のRDが負(=
0が多い)なら、次は正シンボルを送る。 - 送るシンボルの
1の数と0の数が同じなら、RDの正負は維持する。
RDの初期値は負である[9]。したがって最初に送る10ビットシンボルは、5個ずつの1・0を持つシンボルでRD=負を維持するか、6個の1・4個の0を持つシンボルでRD=正にする、のいずれかで始まる。この性質により、受信データにRD極性の違反があれば、それ以前にエラーがあることを検出できるようになっている。
上記シンボルはデータを表現するもので総称してDコードと呼ばれるが、さらにこれ以外に制御用としてKコードと呼ばれるシンボルが12個ある[10]。
| シンボル名 | 10ビット値 abcdei fghj |
構造 | |
|---|---|---|---|
| 正シンボル | 負シンボル | ||
| K.28.0 | 001111 0100 | 110000 1011 | 下位6ビットはK.28と呼ばれる特殊シンボル001111を用いる。上位4ビットはDコードとほぼ同じだが常に正負反転させる。 例外的に同一ビットが5連続するものがある(下線部)。 |
| K.28.1 | 001111 1001 | 110000 0110 | |
| K.28.2 | 001111 0101 | 110000 1010 | |
| K.28.3 | 001111 0011 | 110000 1100 | |
| K.28.4 | 001111 0010 | 110000 1101 | |
| K.28.5 | 001111 1010 | 110000 0101 | |
| K.28.6 | 001111 0110 | 110000 1001 | |
| K.28.7 | 001111 1000 | 110000 0111 | |
| K.23.7 | 111010 1000 | 000101 0111 | D.23とD.xx.7下段の組合せ |
| K.27.7 | 110110 1000 | 001001 0111 | D.27とD.xx.7下段の組合せ |
| K.29.7 | 101110 1000 | 010001 0111 | D.28とD.xx.7下段の組合せ |
| K.30.7 | 011110 1000 | 100001 0111 | D.30とD.xx.7下段の組合せ |