パラレルからシリアルに
PCI ExpressとPCIは信号線の使い方も全く違う(図3[拡大表示])。違いは大きく三つある。
第1は,PCI Expressが1ビットずつ送るシリアル転送であること。PCIは32本の信号線を使って32ビットを同時に送信するパラレル転送だった。
第2は,PCI Expressが信号線を片方向にしか使わないこと。PCI Expressは送信用の信号線と受信用の信号線を別々に用意する。PCIでは信号線を双方向で利用していた。
第3は差動電位方式で信号を送ること(図4[拡大表示] )。この方式は,2本の信号線に逆方向の電圧を与えることでビットを表現する。受信側で両端の電圧の差を調べ,0か1かを判定する。これに対してPCIは,一本の信号線の電圧を変化させ,それとグランド電位との差で0/1を判定していた(シングルエンド方式)。
このようにシリアル転送に転換するのはパラレル転送では高速化がしづらいからだ(図5[拡大表示])。
パラレル転送では,ストローブ信号と呼ぶ信号線の電圧変化にあわせてデータの読み出しを行う。ところが,データを高速に送ろうとすればするほど,すべての信号線のタイミングを合わせるのが難しくなる。信号線の長さや電気特性に不揃いがあるからである。また,複数の線で同時にデータをやり取りするため信号線同士の干渉が起こる。加えて,PCIのようなシングルエンド方式は,信号を流すと,瞬間的に電荷が一方向に集中し,グランドの電圧が変動するグランド・バウンスと呼ぶ現象も起こりやすい。
一方のシリアル転送は同期処理がない。加えて,PCI Expressが採用する差動電位方式は,信号の読み取りにグランド電位を使わないためグランド・バウンスの影響はない。また,1対の信号線には同じようにノイズが載るので,その差分を取ることで近傍回線からの干渉をある程度キャンセルできる。
束ねることで高速化も可能
このほか,PCI Expressでは,複数のシリアル回線を束ねることで高速化できるような設計になっている(図6[拡大表示])。先に述べたようにPCI Expressでは片方向2本の信号線を使い,双方向で4本の回線を使ってデータをやり取りする。この4本の回線の単位をレーンと呼ぶ。PCI Expressでは,2,4,8,12,16,32個のレーンを束ねて通信できる。転送速度はそれぞれ束ねたレーンの倍数になる。束ねた数を使って,PCI Express xn(nレーンを束ねた場合)という風に呼ぶ。
図6の左がPCI Expressのコネクタである。レーン数が多いコネクタにそれより少ないレーンに対応したボードは挿せるが,大きいレーン対応したボードは挿せない。
2004年の時点では,グラフィックス用にx16のスロット,その他のデバイス(イーサネットやIEEE1394ボードなど)用にx1のスロットを用意するとしている。
将来の拡張性を担保
PCI Expressは,将来の拡張を見越した設計上の工夫もある。
まず,クロックアップが念頭に置かれた設計になっている。現在は2.5GHzのクロックでデータをやり取りしているが,今後,5GHz,そして10GHzでやり取りする規格も策定する計画である。これら周波数の違う規格が共存できるのは,前述の通りである。
次に,プロトコルをレイヤー構造にした。電気信号にかかわる物理層と,送られてきた信号をデータとして扱いフロー制御や経路制御を行う部分を完全に切り離した(図7[拡大表示])。
PCIでは物理層と通信用のプロトコルは渾然一体となっていた。このため,プロトコルの拡張のためには新しい信号線を定める必要があった。PCI Expressでは,物理層と通信プロトコルを個別に拡張できる。
最後がコマンド拡張の余地を作ったことである。
PCIのコマンドは,(1)デバイスとデータを読み書きするI/Oリクエスト,(2)メモリーとデータをやり取りするメモリー・リクエスト,(3)デバイスの状態を設定するコンフィギュレーション・リクエスト,の三つである。この三つのコマンドを使って,メモリーとデバイスが通信する。デバイス同士が直接通信することはできない。
PCI Expressではこの三つのメッセージに加えて,メッセージ・リクエストという新しいコマンドを用意した。これにより,デバイス同士で直接,コマンドをやり取りし,通信できる環境を提供する。
ただし,このコマンドが用意されてもPCI Expressのデバイスのそれぞれが直接,PCI Expressリンク上にどのようなデバイスがつながっているかを知ることはできない。このため,コマンドをデバイス同士がやり取りするのに先だって,OSが各デバイスに相手のアドレスを教えるプロセスが必要になるだろう。
現在のところメッセージ・リクエストは,PCIでは特別な信号線を使ってやり取りしていたエラー情報をPCI Expressのリンク上でやり取りする規定だけが定まっており,デバイス同士の通信に関する規定は決まっていない。