PCI Express
PCI Express（ピーシーアイエクスプレス）は、2002年にPCI-SIGによって策定された、I/Oシリアルインタフェース、拡張バスの一種である。書籍、文書ではPCIeと表記されることも多い。この表記はPCI-SIG自身もウェブサイト上で使用している。PCI-Xはパラレルインタフェースの別規格である。
PCIバス、およびPCI-Xバスの欠点を補うべくインテルが開発を進めていた"3rd. Generation I/O"、3GIO（スリージーアイオー）を基とする。
PCI Express 1.1は、1レーンあたり2.5Gbpsでデータ転送に80パーセントが使用され、送信／受信を分離した全二重方式を採用し、計5Gbpsの転送速度を持つ。これは従来の32ビット/33MHzのPCIバスに比して3倍から4倍に迫り、AGP_2xモードのそれに近い。高度な3D描画処理を行わないビデオカードならばx1モードでも充分な転送速度を確保できる。またレーンを複数束ね、さらに低レイテンシ、高転送速度を可能とするx2、x4、x8、x16、x32も仕様化されている。特にPCI Express x16は、バススロットに用いるコネクタの物理的長さが従来のAGPやPCIに近く、AGPに代わるビデオカードのインタフェースとして利用されている。転送速度は8GB/s（2.5Gbps時、送受信それぞれ4GB/s）で、AGP_8xモード比でおよそ4倍弱となる。
PCI Express x1をベースとした新たなPCカード規格ExpressCardはノートパソコンなどに採用される。ノートパソコンなどで内蔵の無線LANボード用に多く採用されるmini PCI Express端子がはPCI Express (x1) とUSB2.0の信号配線がある。mSATA端子と端子形状は同一だが信号線の互換性はない。
PCIバスなどのパラレルインタフェースでデータ転送速度の向上は、が奏功する。PCIバスはこ初の32ビット/33MHz（133MB/秒）から64ビット/66MHz（533MB/秒）までデータ転送速度が引き上げられた。PCI-Xバスは、バスクロックのDDR/QDR化も含め64ビット/1066MHz相当まで仕様化されている。
上記手法の高速化は限界がある。バス幅の拡大はデータ線の増加、LSIのピン増加、として製造コスト上昇の要因となる。クロックの高速化はデータとクロックタイミングを一致させるため、LSIとボードの設計と製造に高度技術が求められてコストが増加する。PCI-Xは厳密な設計が要求されるため民生品の商品化は価格面で困難で、パーソナルコンピュータのまで普及しなかった。
かつては製造コストに比して性能が上昇したが、高速化の限界を迎えてインテルはメインメモリインターフェイスのシリアル化を提唱した。
PCIバス登場当初から一貫してパーソナルコンピュータ市場で広く普及しているPCIバスのモードは、32ビット33MHzだった。バス伝送帯域は主に3Dグラフィックスカードが消費していたがAGPによって事実上隔離されており、PCIバスは安泰であった。チップセット内部ないしはブリッジチップでPCIバスに接続されるハードディスクのインタフェースのIDEは、サポートする転送速度を次第に引き上げて2000年に66Mバイト/秒、2002年に100Mバイト/秒の転送速度をサポートした。ハードディスクの転送速度は追いついていなかったが、民生品市場でRAIDが流行し、高性能なビデオ編集用カードの普及し、PCIバスに接続されるギガビットLANの1000BASE-Tが発売され、ユーザは転送速度の向上を志向した
1本の信号線と付随して基準線とするアース線でデータ伝送を行うシリアルインタフェースはRS-232Cが知られる。パリティビットによる簡易な誤り検出訂正しか物理層に組み込めず、誤り訂正が増加する高速データ転送に不向きとされていた。
パラレルデータにクロックを埋め込みシリアル・データ化する8b/10b技術をIBMが開発し、シリアル転送が再び着目された。イーサネットで採用されて普及が広まると8b/10b機能を搭載したSERDESチップの価格が低下し、ファイバーチャネルやギガビットイーサネット (GbE) で転送速度も高速化された。
I/Oインタフェースの転送速度不足解消のために次世代インタフェースを模索していたインテルは、シリアルインタフェースであるNGIO ("Next Generation I/O") の開発を開始し、ヒューレット・パッカードやIBMも、PCIバスに代わるI/OインタフェースとしてFuture I/Oと呼ばれるシリアル・インタフェースを開発していた。
両者は後に統合されてInfiniBandとなったがソフトウェアレベルでPCIバスと互換性を有さず、マイクロソフトなどもサポートに消極的で、スーパーコンピュータのノード間接続など低遅延で高スループットな要求分野で利用される。
インテルはこの失敗を教訓として3GIO ("Third Generation I/O") の開発を開始した。ソフトウェア・レベルでPCIバス完全互換とし、正統なPCIバスの後継者とすべくPCI ExpressとしてPCI-SIGでの仕様化が行われた。
PCI Expressは従来のPCIバスが作動するオペレーティングシステム (OS) で新たなサポートなく作動する。WindowsはVistaで正式に対応した。
パーソナルコンピュータ向けマザーボードへの実装は比較的早くに行われた。主に搭載されるのはx16とx1である。転送速度が何よりも要求される3Dグラフィックスカードでは特に歓迎され、2005年頃にAGPからの置き換えがほぼ完了し、2016年現在では3Dグラフィックスカードのシェアの大半を獲得するまでに成長している。かつて主力であったAGP用のグラフィックスカードは、旧来システムのグラフィックス機能のみ更新を希望する消費者に販売されている。
マザーボード市場でAGPスロットを有する製品は、現在は僅少である。汎用バスとしては2016年現在で従来のPCIスロットを全廃したマザーボードもある。サーバ向けマザーボードは依然として64ビットI（6はPCI-Xを実装したものも多い。
ATAカードをはじめとしたインタフェースカード類は比較的早くから PCI Express (x1) に移行しており、ビデオキャプチャ、テレビチューナ、サウンドカードなどマルチメディア関連商品はPCI Expressでが多い。旧来システムのアップグレードパスとしてモデルチェンジを行わず販売を継続しているPCI製品もある。2016年現在でATXマザーボードの拡張スロットはPCI Express x16、x1、PCIの3種類を採用したものが多く、PCIの需要よりチップセット側のPCI Expressの総帯域制限によるものが多い。オンボードデバイスは、従来PCIバスを用いて接続していた物を完全にPCI Express接続に置き換えたマザーボードが大半である。IntelはP67以降のメインストリーム向けチップセットからPCIをサポートしておらず、別途ブリッジチップを用いてPCI Express経由で接続している。2012年後半からPCI Express 3.0仕様に対応したマザーボードやビデオカードが発売された。
データ転送方式はPCIバスのハンドシェークと異なり、ネットワークでパケット送受信される。アーキテクチャはレイヤ構造を有し、トランザクション・レイヤ、データリンク・レイヤ、物理レイヤの3層構造となっている。
送信では、CPUや他デバイスから発行されたリクエストは、トランザクション・レイヤで上位のソフトウェア層に対してPCIと互換性のある機能を提供するパケットを付加され、データリンク・レイヤに渡される。データリンク・レイヤーは、接続されている相手側デバイス間との送受信の制御を担っており、パケットにシーケンス番号、CRCを付加して物理レイヤに渡す。物理レイヤはシリアル転送を受け持つ部分で、Gen1, 2では8b/10b変換、Gen3では128b/130b変換などを行い、SERDESによりパケットがシリアル・データとして送られる。
また、トポロジは、従来のPCIのマルチ・ドロップ型ではなく、ポイント・ツー・ポイント接続である。ポートの拡張はスイッチを必要とする。
トランザクション・レイヤは主にトランザクション・レイヤ・パケット ("Transaction Layer Packet" : TLP) の生成と復号を担う。TLPはリードやライトといったコマンドやアドレス、データなどから構成される。トランザクション・レイヤは接続相手とのフロー制御も行う。PCI Expressのフロー制御はクレジット・ベースで行われ、予め自分が受信することの出来るバッファのサイズを相手に通知し、バッファに空きが出来るたびに伝える方式である。送信側は自身が送信したパケットのサイズを積算し、送信相手からバッファの空きが伝えられるとその分を減算することで、送信相手のバッファ・サイズを超えることなくパケットの転送が可能となる。
トランザクション・レイヤはパケットを任意のサイズに分割する機能を有する。一つのTLPで最大4Kバイトのメモリ・リードを発行することが可能であるが、メモリから4Kバイトを一度で読むことは都合が悪い場合がある。メモリ・リードでキャッシュ・コヒーレンシを維持するシステムの場合、CPUに対しキャッシュに最新データの有無を問い合わせる。インテル系の32ビットCPUはキャッシュ・ライン・サイズは64バイトで、4Kバイトのメモリ・リードは全て64バイトの64個のメモリ・リードに分割される必要がある。トランザクション・レイヤは自デバイス内で、都合良くパケットを分割する。1つのRead requestのデータを返す時に複数のcompletionに分割して返すこともできるが、返すデータの順序は入れ換えられない。
トランザクション・レイヤは以下の4個のアドレス空間をサポートする。
前者3空間はPCIバス互換の空間である。Message空間は、従来サイドバンド信号で通知を行っていたもので、割り込み、電源制御などの通知に使用される。
データリンク・レイヤは、トランザクション・レイヤと物理レイヤの中間に位置し、主にPCI Expressリンクの管理、エラー検出と訂正を担う。
送信側データリンク・レイヤは、トランザクション・レイヤから渡されたTLPをバイナリ値としてデータを保護するためのCRCを算出し、TLPの授受を確認するためのシーケンス・ナンバをTLPに付加して物理レイヤに渡す。受信側はCRCによるデータ化けチェックと、シーケンス・ナンバによるパケット欠落チェックを行う。
受信側でエラーを見つけた場合、送信側に再送を促すためにNAK ("Not Acknowledge") パケットをエラー検出したTLPのシーケンス・ナンバと共に送信側に返す。正常にTLPを受信した場合は、同様にACK ("Acknowledge") パケットを返す。
エラーによるパケットの再送機能もデータリンク・レイヤが受け持っており、NAKを受信した場合そのシーケンス・ナンバから全て送信し直すため、データリンク・レイヤ内に再送バッファが実装される。
データリンク・レイヤは、TLPの送受信の他にもDLLP ("Data Link Layer Packet") と呼ばれるデータリンク・レイヤ同士でのみ情報を交換するパケットも送受信する。ACK、NACKパケットや、フロー制御に使用するバッファ・サイズ通知などもDLLPが使用される。
物理レイヤは入出力バッファの制御回路、シリアル-パラレル/パラレル-シリアル変換回路、PLL、インピーダンス調整回路などで構成される。
PCI Express 1.1の物理メディアは2線、800mV差動で400ps単位でデータのドライブされる。送信、受信専用の信号を必要とする全二重方式で、x1の場合に実際は4本の信号が使用される。
PCI Express 1.1までは2.5GT/sでデータ転送しているが、PCI Express 2.0は5.0GT/sで転送している。PCI Expressをケーブルで接続するための仕様検討も行われている。
物理レイヤは将来的により高速なメディアに置き換えられることから、物理レイヤとデータリンクレイヤ間のインタフェースは特に規定されておらず各ベンダの実装に依存している。
"PCI Express Card Electromechanical Specification"として拡張カードの電気および物理形状が規定され、カードエッジを含むコネクタの仕様も規定される。
ロープロファイルPCI Expressは物理形状がPCI Expressより小さい。
x1のスロットは18番ピンまでで終わり、x8やx16はこれをさらに伸ばしたものになる。スロットからの最大供給電力を超えるカードについては、下記のとおりATX12V Ver2.xの補助電源プラグ経由で超過分を供給する。PCIバスは32ビットバスのデバイス/スロットと64ビットバスのデバイス/スロットの全ての組み合わせで動作が保証されていたが、PCI Expressはx16仕様のカードをx8仕様のスロットに挿入できない。マザーボードにはx1/x4/x8コネクタのエッジに初めから切り欠きが設け、x16仕様カードを挿入可能な「エッジフリー」と称する製品もあるが、カード端子の物理的保護などの問題点は解消されないIntel DX58S0がある。解決事例に、アップルのMac ProやIntel 3シリーズ以降、AMD 7シリーズのマルチGPU対応チップセット搭載マザーボードが採用した実装などがある。後述の利点を参照。
PCI Expressの利点の一つとしてレーン数のフレキシビリティが挙げられる。カードエッジコネクタがx16形状でもx1モードで規格上は動作可能で、上位の長いスロットに下位の短いカードエッジコネクタは挿入可能である。BIOS上もしくはOS上から、チップセットのサポートレーン数を上限としてユーザーが任意に設定する設計も可能である。
合計レーン数の上限を26として４つのx16用物理スロットに対し
と複数の振り分け選択も可能である。余剰レーンの未使用による不利益は無い。x16モードで動作するスロットにx1専用カードを挿入しても問題なく動作する。
スロットコネクタの物理規格は、スロットに割り振り可能な規格上のレーン数上限を示す。マザーボード設計者は、使用するチップセットのサポートレーン数の範囲内で、スロット本数と与えるレーン数の設計が可能である。