8b/10b符号化方式について
8b/10bは、シリアル通信において広く利用される
伝送路符号の一つです。この方式は、
IBMやソニーの共同開発を基にしており、ANSI INCITS 230により規定されています。名前の由来は、
8ビットのデータを10ビットのデータに変換して転送するプロセスにあります。また10b/8bと呼ばれることもあります。
特徴
シリアル通信には、データとそれを同期させるための
クロック信号が必要です。8b/10b方式の特長は、このデータと
クロック情報を同じ配線で同時に送信できることです。これは、データの中に
クロックを埋め込むことで実現されます。ただし、データを送信する際に、LowやHighの状態が長時間続くと
クロックを適切に抽出できなくなる恐れがあります。
そのため、8b/10bでは、どのようなデータであってもLow/Highの状態が4
クロックを超えないように変換を行います。この結果、帯域の20%がロスすることになりますが、データと
クロックを同時に配信できるメリットがあります。データの割合が8/10になることを意味しています。
用例
この8b/10b方式は、シリアル転送技術として多くの通信規格で採用されています。具体的には、ギガビットイーサネット(1000BASE-X)、
ファイバーチャネル(1GFC〜8GFC)、IEEE 1394b(FireWire 800)、
PCI Express 2.0、Serial ATA、USB 3.0などで使われています。
同一のシンボルを長時間送信し続けると、基板上で
ノイズが発生する可能性があります。
PCI Expressではこの問題に対処するために、
8ビットデータに疑似乱数を使ったスクランブル処理を加えた後に8b/10b変換を行う手法が採用されています。これにより、伝送路が常にランダムなビットパターンを保持し、周期変動による影響を軽減しています。
さらに、高速通信においては、同様のスクランブル処理を用いる方式が多く採用されます。例えば、
10ギガビット・イーサネット(10GBASE-R)や
ファイバーチャネル(10GFC・16GFC)では、64b/66b方式、
PCI Express 3.0やUSB 3.1 Gen2では128b/130b方式が利用されています。
変換方式
8b/10b方式では、
8ビットの元データを上位3ビットと下位5ビットに分け、それぞれに1ビットを追加して、最終的に下位6ビットと上位4ビットに変換します。この変換には一定の法則がないため、完全なテーブルを使った方法で行われます。元データの範囲は0x00から0xFFまでで、256種類のシンボル(例:D.00.0, D.01.0, ..., D.31.6, D.31.7)で表現されます。
シンボルには正負二種類が存在しますが、大半は0と1の個数が異なり、反転した組み合わせになっています。この0と1の個数の差を「ランニングディスパリティ(RD)」といい、次に送るシンボルの選択に影響を与えます。もし直前のRDが正であれば次は負のシンボルを、逆に直前のRDが負であれば次は正のシンボルが送信されます。これが継続的に行われることで、受信データにRD極性の違反がある場合、前にエラーがあったと察知することができます。
このシンボルの総称は「Dコード」と呼ばれますが、制御用にKコードと呼ばれる12種類のシンボルも存在します。
このように、8b/10b方式はシリアル通信において効率的で信号安定性をもたらす重要な技術であり、現代の多くのデジタル通信システムにおいて重要な役割を果たしています。