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の転送速度を持つ。これは従来のPCIバス(32ビット/33MHz)の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も策定されて、ノートパソコン等に採用される場合がある。
転送速度
- 規格PCI Express 1.1(Gen1(通称、以下同様))(注:規格1.1には先行して1.0と1.0aというバージョンがあった)では、伝送路1レーンあたりの物理レイヤの帯域は片方向2.5Gbpsで双方向では5.0Gbpsであるが、実効データ8ビットを送るのに物理レイヤ上で2ビットの同期制御ビットを加える8b/10bエンコード方式を用いているため、実効データ転送速度は片方向250Mbyte/secで双方向500Mbyte/secになる。ポートは1レーン、2レーン、4レーン、8レーン、12レーン、16レーン、32レーンなどとあり、x1、x2、x4、x8、x12、x16、x32などと表す。伝送路であるレーンを束ねることでポートのデータ転送速度を向上させることができる。16レーンを束ねたPCI-E 1.1 x16の通信ポートであれば、ポートの実効データ転送速度は片方向4Gbytes/sec、双方向では8Gbyte/secになる。
- 規格PCI Express 2.0 (Gen2) では速度をPCI Express 1.1の2倍に引き上げたので、1レーンあたりの物理帯域は片方向5.0Gbpsで実効データ転送速度は片方向500Mbyte/secで双方向1Gbyte/secとなった。
- 規格PCI Express 3.0 (Gen3) (2010年11月18日にPCI-SIGが制定)では当初は1レーンあたりの物理帯域10Gbpsを目標にしていたが、技術的困難が予想されたので8Gbpsに改め、その代わりにエンコード方式を128b/130bに変更して転送効率を向上させた[1](但しPCI Express 3.0ではそれまでの1.1や2.0の機器とも接続互換性があるように規格が作られている)。その結果実効データ転送速度を当初の目標としていたPCI Express 2.0 の約2倍にすることができ、1レーンあたりの実効データ転送速度は片方向1.0Gbyte/secで双方向2.0Gbyte/secとなった。PCI Express 3.0の場合にポートは規格上最大32レーンまで束ねられるので、1ポートの最大の実効データ転送レートは片方向32Gbyte/sec、双方向64Gbyte/secである。エンコードの変更による分かりにくさを回避するため、PCI Express 3.0以降では#物理レイヤの帯域をGbps(ギガビット毎秒)ではなくGT/s(ギガトランスファ毎秒)で表記することが多くなった。
- (現在制定が進行中の)規格PCI Express 4.0 (Gen4) では、さらに1レーンあたりの物理帯域をPCI Express 3.0 (Gen3) の2倍に引き上げて片方向16GT/sとする予定である。
リンク幅 x1 | x2 | x4 | x8 | x12 | x16 | x32 | x64 | |
---|---|---|---|---|---|---|---|---|
通称 Gen1 | 0.5/0.25 | 1.0/0.5 | 2.0/1.0 | 4.0/2.0 | 6.0/3.0 | 8.0/4.0 | 16.0/8.0 | 規格にない |
Gen2 | 1.0/0.5 | 2.0/1.0 | 4.0/2.0 | 8.0/4.0 | 12.0/6.0 | 16.0/8.0 | 32.0/16.0 | 規格にない |
Gen3 | 2.0/1.0 | 4.0/2.0 | 8.0/4.0 | 16.0/8.0 | 24.0/12.0 | 32.0/16.0 | 64.0/32.0 | 規格にない |
Gen4 | 4.0/2.0 | 8.0/4.0 | 16.0/8.0 | 32.0/16.0 | 48.0/24.0 | 64.0/32.0 | 128.0/64.0 | 256.0/128.0 |
リンク幅 x1 | x2 | x4 | x8 | x12 | x16 | x32 | x64 | |
---|---|---|---|---|---|---|---|---|
通称 Gen1 | 5.0/2.5 | 10/5.0 | 20/10 | 40/20 | 60/30 | 80/40 | 160/80 | 規格にない |
Gen2 | 10/5 | 20/10 | 40/20 | 80/40 | 120/60 | 160/80 | 320/160 | 規格にない |
Gen3 | 16/8 | 32/16 | 64/32 | 128/64 | 192/96 | 256/128 | 512/256 | 規格にない |
Gen4 | 32/16 | 64/32 | 128/64 | 256/128 | 384/192 | 512/256 | 1024/512 | 2048/1024 |
開発から普及までの経緯
パラレル・インタフェースの問題点
PCIバスのようなパラレルインタフェースにおいて、データ転送速度を上げる方法には大まかに以下の2通りの方法がある。
- バス幅を広くする(データ線の増加)
- 単位時間あたりの転送回数を増やす(高クロック化)
PCIバスはこれにならい、当初の32ビット/33MHz(133MB/秒)から64ビット/66MHz(533MB/秒)までデータ転送速度が引き上げられた。さらに(同じくパラレル・インタフェースである)PCI-Xバスでは、バスクロックのDDR/QDR化も含め64ビット/1066MHz相当(7.95GB/秒)まで仕様化されている。
しかし、上記2手法の高速化にはおのずと限界がある。バス幅を広くすることはデータ線の増加につながり、それはLSIのピン増加となり直接にコストに跳ね返る。またクロックの高速化は、データとクロックのタイミングを合わせる必要性から、LSIとボードについて非常に高度かつ精密な設計技術と製造技術が要求され、同様にコストに跳ね返る。事実、PCI-Xは非常にシビアな設計が要求され、パーソナルコンピュータ向け製品として商品化するにはコストの問題からも無理があり、パーソナルコンピュータの分野まで普及する事ができなかった。
これまでは、それなりのコストがかかってもそれに見合うだけの性能向上が見込めた。しかし、この頃はある種の壁にさしかかっており、顧客を納得させるに足るパフォーマンスを望めば、それにかかるコストが甚大な物になることが予想された。折りしもインテルはメインメモリインターフェイスのシリアル化を主張したばかりの頃だった。
PCIバスの限界
PCIバス登場当初から一貫してパーソナルコンピュータ市場で広く普及しているPCIバスのモードは32ビット33MHz(=133Mバイト/秒)だった。バスの伝送帯域を消費していたのは主に3Dグラフィックスカードであり、こちらはAGPによって事実上隔離されていたため、PCIバスそのものはまだまだ安泰であった。しかしながら(チップセット内部ないしはブリッジチップにて)PCIバスに接続されるハードディスクのインタフェースとして広く知られるIDEが、サポートする転送速度を次第に引き上げ、2000年には66Mバイト/秒をサポートし、2002年には100Mバイト/秒の転送速度をサポートするに至った。それでもハードディスクそのものの転送速度は単体では追いついていなかったが、この頃を境にパーソナル市場においても自作ユーザを中心にRAIDが流行、さらには高性能なビデオ編集用カードの普及も進み、PCIバスに接続されるギガビットLANである1000BASE-T(1000Mbps=約125Mバイト/秒)も登場、ハイエンドユーザの志向がPCIバスの転送速度上限に到達するのは時間の問題となっていた。
シリアル・インタフェースの台頭
1本の信号線と付随するもう1本の基準線(アース線)でデータ伝送を行うシリアル・インタフェースは古くから存在し、かつてほとんどのPCに搭載されていたRS-232Cが有名である。しかし、パリティビットによる簡易な誤り検出訂正しか物理層に組み込めないことなどから、誤りがより多く発生するであろう高速なデータ転送には使いづらいという事情があり、しばらく表舞台に現れることはなかった。
ところが、IBMがパラレル・データにクロックを埋め込んでシリアル・データ化するという8b/10b技術を開発したことにより、シリアル転送が急速に注目を集めはじめた。さらにイーサネットでこの方式が採用され、普及が広まると8b/10b機能を搭載したSERDESチップのコストも急激に低下し、さらにファイバーチャネルやギガビットイーサネット (GbE) の登場により転送速度も急激に高速化された。
PCI Expressの登場
I/Oインタフェースの転送速度不足解消のために次世代のインタフェースを模索していたインテルは、NGIO (Next Generation I/O) というシリアル・インタフェースの開発を開始した。一方、同時期にヒューレット・パッカードやIBMも、PCIバスに代わるI/OインタフェースとしてFuture I/Oと呼ばれるシリアル・インタフェースを開発していた。
両者は後に統合され、InfiniBandと呼ばれるI/Oインタフェースとなるのだが、InfiniBandには決定的な欠陥があった。あまりにも先進的かつ理想的なI/Oインタフェースを目指したため、ソフトウェアレベルでPCIバスと全く互換性がなかったことである。このため、マイクロソフトなどもサポートに消極的であり、現在ではスーパーコンピュータのノード間接続のような低遅延・高スループットを要求される限られた分野でのみ利用されている。
インテルはこの失敗を教訓とし、3GIO (Third Generation I/O) の開発を開始した。ソフトウェア・レベルでPCIバス完全互換とし、正統なPCIバスの後継者とすべく、PCI Expressと名を変え、PCI-SIGでの仕様化が行われた。
ソフトウェアの対応
PCI Expressは従来のPCIバスが動作できるオペレーティングシステム (OS) であれば特に新しくサポートしなくても動作することは可能である。ただし、動作可能であることと機能をフルに使うことは別の問題であり、Windowsの場合ではVistaから正式にPCI Expressに対応した。
普及
パーソナルコンピュータ向けマザーボードへの実装は比較的早くに行われた。主に搭載されるのはx16とx1である。転送速度が何よりも要求される3Dグラフィックスカードでは特に歓迎され、2005年頃にはAGPからの置き換えがほぼ完了し、2012年現在では3Dグラフィックスカードのシェアの大半を獲得するまでに成長している(一方、かつての主力であったAGP用のグラフィックスカードは、旧来のシステムのグラフィックス機能のみの更新を希望する消費者への、いわば救済措置的に販売される程度のシェアとなっている)。
マザーボード市場においてもAGPスロットを持つ製品はほぼ完全に姿を消した。汎用バスとして見ると2009年現在、従来のPCIスロットを全廃したマザーボードもある。サーバ向けマザーボードでは依然としてPCI(64ビット)またはPCI-Xを実装したものも多い。
ATAカードをはじめとしたインタフェースカード類は比較的早くから PCI Express (x1) に移行しており、ビデオキャプチャ、テレビチューナ、サウンドカードといったマルチメディア関連においても近年発売されるカードは大半がPCI Express である。モデルチェンジを行わず販売を継続しているPCI製品も市場にはまだ残っているが、旧来のシステムのアップグレードパスとしての意味合いが強い。それでも2012年現在のATXマザーボードの拡張スロットはPCI Express x16、x1、PCIの3種類を採用したものが多が、これはPCIの需要よりもチップセット側のPCI Express の総帯域の制限によるものの方が多い。 いわゆるオンボードデバイスにおいては、従来PCIバスを用いて接続していた物を完全にPCI Express接続に置き換えたマザーボードが大半である。 IntelにおいてはP67以降のメインストリーム向けチップセットからPCIのサポートを打ち切っており、別途ブリッジチップを用いてPCI Express 経由で接続している形となる。 2012年後半からPCI Express 3.0(通称 GEN3)の仕様に対応したマザーボードやビデオカードが発売され始めた。
仕様
PCI Expressのデータ転送方式はPCIバスのハンドシェークとは異なり、ネットワークでのパケット送受信で行われる。このため、PCI Expressのアーキテクチャは、レイヤ構造をしている。レイヤ構造は、トランザクション・レイヤ、データリンク・レイヤ、物理レイヤの3層構造となっている。
送信を例に取ると、CPUや他デバイスから発行されたリクエストは、トランザクション・レイヤで上位のソフトウェア層に対してPCIと互換性能ある機能を提供するパケットを付加され、データリンク・レイヤに渡される。データリンク・レイヤーは、接続されている相手側デバイス間との送受信の制御を担っており、パケットにシーケンス番号、CRCをパケットを付加して物理レイヤに渡す。物理レイヤはシリアル転送を受け持つ部分で、Gen1, 2では8b/10b変換、Gen3では128b/130b変換などを行い、SERDESによりパケットがシリアル・データとして送られる。
また、トポロジは、従来のPCIのマルチ・ドロップ型ではなく、ポイント・ツー・ポイント接続である。そのため、ポートを拡張するためにはスイッチが必要になる。
トランザクション・レイヤ
トランザクション・レイヤは主にトランザクション・レイヤ・パケット (Transaction Layer Packet:TLP) の生成と復号を担う。TLPはリードやライトといったコマンドやアドレス、データなどから成る。また、トランザクション・レイヤは接続相手とのフロー制御も行う。PCI Expressのフロー制御はクレジット・ベースで行われ、これは予め自分が受信することの出来るバッファのサイズを相手に通知しておき、バッファに空きが出来るたびにその旨を伝える方式である。送信側は自身が送信したパケットのサイズを積算していき、また送信相手からバッファの空きが伝えられるとその分を減算する。これにより送信相手のバッファ・サイズを超えることなく、パケットの転送が可能となる。
トランザクション・レイヤはまた、パケットを任意のサイズに分割する機能を有する。例えば、PCI Expressの場合、一つのTLPで最大4Kバイトのメモリ・リードを発行することが可能である。しかし実際にメモリから一度に4Kバイトを読むことは出来ない。それはCPUのキャッシュメモリサイズに依存するからである。全てのメモリ・リードはキャッシュ・コヒーレンシ維持のため、CPUに対しキャッシュに最新データの有無を問い合わせる。例えばインテル系の32ビットCPUはキャッシュ・ライン・サイズは64バイトであるため、4Kバイトのメモリ・リードは全て64バイトの64個のメモリ・リードに分割される必要がある。
このように、トランザクション・レイヤは自デバイス内で都合の良いようにパケットを分割する。また、データを返す場合は、もとの要求サイズで返す必要はなく、分割したまま返信することも可能である(但し返す順序は入れ換えられない)。
トランザクション・レイヤは以下の4個のアドレス空間をサポートする。
- Memory 空間
- I/O 空間
- Configuration 空間
- Message 空間
前者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.5GTpsでのデータ転送を行っているが、PCI Express 2.0では5.0GTpsで転送が行われている。さらに、PCI Expressをケーブルで接続するための仕様検討も行われている。
このように、物理レイヤは将来的により高速なメディアに置き換えられていくレイヤであり、このため物理レイヤとデータリンク・レイヤ間のインタフェースは特に規定されておらず各ベンダの実装依存となっている。
物理形状
拡張カードの形状としてロープロファイルPCIに準じた薄いケースに収めることが可能な製品が出てき始めている。しかしこのカードの「規格」としては単にPCI Expressカードとしか表記なく外形は規定されていない。しかしXTバス以来のブラケット形状をPCIが継承しその拡張としてロープロファイルPCIが存在したことに倣い、PCI Expressでも採用された外寸形状と言える。
ピンアサイン
ピン | Bサイド | Aサイド | コメント |
---|---|---|---|
1 | +12V | PRSNT1# | カードが挿入されるとlowにプルダウンされる |
2 | +12V | +12V | |
3 | Reserved | +12V | |
4 | Ground | Ground | |
5 | SMCLK | TCK | SMBusとJTAGのピン |
6 | SMDAT | TDI | |
7 | Ground | TDO | |
8 | +3.3V | TMS | |
9 | TRST# | +3.3V | |
10 | +3.3Vaux | +3.3V | スタンバイ電源 |
11 | WAKE# | PWRGD | リンク再起動、パワーグッド |
ノッチ | |||
12 | Reserved | Ground | |
13 | Ground | REFCLK+ | 基準クロック差動対 |
14 | HSOp (0) | REFCLK- | レーン0送信データ, + and − |
15 | HSOn (0) | Ground | |
16 | Ground | HSIp (0) | レーン0受信データ, + and − |
17 | PRSNT2# | HSIn (0) | |
18 | Ground | Ground | |
19 | HSOp (1) | Reserved | レーン1送信データ, + and − |
20 | HSOn (1) | Ground | |
21 | Ground | HSIp (1) | レーン1受信データ, + and − |
22 | Ground | HSIn (1) | |
23 | HSOp (2) | Ground | レーン2送信データ, + and − |
24 | HSOn (2) | Ground | |
25 | Ground | HSIp (2) | レーン2受信データ, + and − |
26 | Ground | HSIn (2) | |
27 | HSOp (3) | Ground | レーン3送信データ, + and − |
28 | HSOn (3) | Ground | |
29 | Ground | HSIp (3) | レーン3受信データ, + and − |
30 | Ground | HSIn (3) | |
31 | PRSNT2# | Ground | |
32 | Ground | Reserved |
x1のスロットは18番ピンまでで終わり、x8やx16はこれをさらに伸ばしたものになる。
グランドピン | 0V基準 |
---|---|
電源ピン | PCIeカードに電力を供給する |
出力ピン | カードからマザーボードへの信号 |
入力ピン | マザーボードからカードへの信号 |
オープンドレイン | 複数のカードによってプルダウンされ、かつ(または)感知される |
センスピン | マザーボードによってプルアップされ、カードによってプルダウンされる |
予約 | 現在使用されておらず、接続してはならない |
電力供給
スロット形状 | x1 | x4/x8 | x16 |
---|---|---|---|
フルハイト | 10W/25W(High Power) | 25W | 25W/75W(グラフィックカード) |
ロープロファイル | 10W | 25W | 25W |
スロットからの最大供給電力を超えるカードについては、下記のとおりATX12V Ver2.xの補助電源プラグ経由で超過分を供給する。
- 6ピン1本:最大75W(スロットからの供給と併せて最大150W)[3]
- 6ピン2本:最大150W(スロットからの供給と併せて最大225W)[4]
- 6ピン1本、8ピン1本:最大225W(スロットからの供給と併せて最大300W)[5]
欠点
相互接続性の問題
PCIバスでは、32ビットバスのデバイス/スロットと64ビットバスのデバイス/スロットの全ての組み合わせにおいて動作する事が保証されていた。しかしPCI Expressでは、例えばx16仕様のカードをx8仕様のスロットに差し込む事が物理的にできない[6]。
マザーボードによっては、x1/x4/x8コネクタのエッジに初めから切り欠きが設けられていてx16仕様のカードを挿入可能な製品もあるが(「エッジフリー」と呼ばれる)、カードの端子の物理的保護や上記の他の問題に関してはそのまま残ると思われる(例:Intel DX58S0)。
この問題に対する解決策の一つとしてアップルコンピュータのMac ProやIntel 3シリーズ以降及びAMD 7シリーズのマルチGPU対応チップセット搭載マザーボードが採用した実装があげられる(後述の利点を参照)。
利点
PCI Expressの利点の一つとしてレーン数のフレキシビリティが挙げられる。即ち、カードエッジコネクタがx16形状でもx1モードで(規格上は)動作可能であり、またスロット形状がx16用だからといってx16配線である必要は無く、上記の相互接続の問題はあれ、上位の(すなわち長い)スロットに下位の(すなわち短い)カードエッジコネクタを挿す事は容易である。さらにはBIOS上もしくはOS上からチップセットのサポートレーン数を上限にユーザーが任意に振り分け出来るように設計することも可能である。
例:合計レーン数の上限を26としx16用の物理スロットが4つあったらば、それに対し
- x8 x1 x1 x16(余り0)
- x4 x4 x1 x16(余り1)
- x8 x1 x8 x8(余り1)
- x4 x4 x8 x8(余り2)
などといった複数の振り分け方を選択できるようにすることも可能である。尚、余剰レーンが出てもそれが未使用になること以上の不利益は無い。また、x16モードで動作するはずのスロットにx1専用カードを挿しても問題なく動作するようになっている。
つまり、スロットコネクタの規格(具体的には物理寸法)は、単にそのスロットに割り振ることが可能な(規格上の)レーン数上限を示すのみである。このことから、マザーボード設計者は使用するチップセットのサポートレーン数の範囲内で、自由にスロット本数とそれらスロットに与えるレーン数を設計することが可能である。
脚注
関連項目
外部リンク
テンプレート:コンピュータバス- 元の位置に戻る ↑ PCI-SIG、PCI Express base specification 3.0完成をアナウンス
- 元の位置に戻る ↑ PCI Express Card Electromechanical Specification 1.1
- 元の位置に戻る ↑ PCI Express x16 Graphics 150W-ATX Specification Revision 1.0(2004年10月25日)
- 元の位置に戻る ↑ PCI Express 225/300 Watt High Power CEM Spec 1.0(2008年3月27日)
- 元の位置に戻る ↑ PCI Express 225/300 Watt High Power CEM Spec 1.0(2008年3月27日)
- 元の位置に戻る ↑ 端子レイアウト的には、x16仕様のカードをx8スロットに差し込んで使用可能だが、規格上物理層は実装依存のため、動作保証外である(カード側でサポートされていれば8xとして動作する)。エッジ・コネクタの物理的切断・コネクタの一部を削り取るという乱暴な手段を講じなければならない。