8b/10b変換
シリアル転送で、8ビットのデータを10ビットの符号に変換して送る方式。0と1が偏らないようにして、受信側がタイミング(クロック)を取り出しやすくする。伝送の効率は80%になる。
イマシルちゃんの解説
0と1の信号だけを1本の線で送るとき、「0000000000……」みたいに同じ値がずっと続くと、
受け取る側は「今、何個目の0だっけ?」って、数えるタイミングがわからなくなっちゃうんだ。
8b/10b変換は、8ビットのデータを、0と1がほどよく混ざった10ビットの符号に、対応表で置き換えて送るんだよ。
2ビット多く送るぶん、少しだけ効率は落ちるけど、そのかわりに、確実に読み取れるようになるんだ!
より深い解説
定義
8b/10b変換(8b/10b符号化)は、8ビットのデータを、あらかじめ決められた表に従って10ビットの符号に変換する伝送路符号化の方式である。1983年にIBMの研究者が考案した。10ビットの符号のうち、0と1の数のバランスが取れたものだけを使う。
目的
| 目的 | 内容 |
|---|---|
| クロックの再生 | 同じ値が長く続かない(最大5ビット)ようにして、受信側が信号の変化からタイミングを取り出せるようにする |
| DCバランス | 0と1の数をそろえ、信号の直流成分を偏らせない(ACカップリングの伝送路で信号がゆがまないようにする) |
| 誤りの検出 | 使っていない符号を受信したら、誤りと判断できる |
| 制御符号 | データとは別に、区切りなどを示す特別な符号(Kコード)を送れる |
効率とオーバーヘッド
8ビットのデータを送るのに10ビットを使うため、伝送の効率は8 ÷ 10 = 80% で、20%がオーバーヘッドになる。
例:PCI Express 2.0(5GT/s)の1レーン
5Gbit/s × 8/10 = 4Gbit/s = 500Mバイト/秒
より効率のよい符号化方式
高速化に伴い、オーバーヘッドの小さい方式が使われるようになった。
| 方式 | 効率 | オーバーヘッド | 使われている例 |
|---|---|---|---|
| 8b/10b | 80% | 20% | PCI Express 1.x・2.0、1000BASE-X(光ファイバのギガビットイーサネット)、SATA、USB 3.0(5Gbit/s) |
| 64b/66b | 約97% | 約3% | 10GBASE-R(10ギガビットイーサネット) |
| 128b/130b | 約98.5% | 約1.5% | PCI Express 3.0~5.0 |
| 128b/132b | 約97% | 約3% | USB 3.1以降(10Gbit/s) |
64b/66bや128b/130bは、データを64ビットや128ビットごとに区切り、先頭に2ビットの同期用のヘッダーを付ける方式である。0と1の偏りは、データをスクランブル(決まった規則でかき混ぜる)することで防ぐ。
符号化方式を見分けるポイント
| 規格 | 符号化方式 |
|---|---|
| PCI Express 2.0まで | 8b/10b |
| PCI Express 3.0、4.0、5.0 | 128b/130b |
| PCI Express 6.0 | PAM4による多値伝送と、誤り訂正(FEC)付きのFLIT |
「PCI Express 3.0、4.0、5.0は8b/10b変換を採用している」という説明は誤りである。
ほかの伝送路符号化との関係
| 方式 | 使われている例 | 内容 |
|---|---|---|
| マンチェスタ符号 | 10BASE-T | 1ビットごとに信号を変化させる。効率は50% |
| 4B/5B | 100BASE-TX、100BASE-FX | 4ビットを5ビットに変換する。効率は80% |
| 8b/10b | 1000BASE-X | 8ビットを10ビットに変換する。効率は80% |
| 64b/66b | 10GBASE-R | 64ビットに2ビットのヘッダーを付ける |
イーサネットでも、速度の向上に合わせて、効率のよい符号化方式へ移り変わってきた。