| PCIローカルバス | |
| 作成年 | 1992年6月22日[ 1 ] (1992年6月22日) |
|---|---|
| 作成者 | インテル |
| 取って代わる | ISA、EISA、MCA、VLB |
| 代替 | グラフィックス用AGP (1997年)、 PCI Express(2004年) |
| ビット幅 | 32または64 |
| スピード | 半二重: [ 2 ] 133 MB /秒 (33 MHzで32ビット – 標準構成) 266 MB/秒 (66 MHzで32ビット) 266 MB/秒 (33 MHzで64ビット) 533 MB/秒 (66 MHzで64ビット) |
| スタイル | 平行 |
| ホットプラグインターフェース | オプション |
| Webサイト | www.pcisig.com /ホーム |
周辺機器相互接続(PCI)[ 3 ]は、コンピュータのハードウェアデバイスを接続するためのローカルコンピュータバスであり、 PCIローカルバス規格の一部です。PCIバスはプロセッサバスにある機能をサポートしていますが、特定のプロセッサのネイティブバスに依存しない標準化されたフォーマットです。PCIバスに接続されたデバイスは、バスマスターには自分のバスに直接接続されているように見え、プロセッサのアドレス空間内のアドレスが割り当てられます。[ 4 ]これは単一のバスクロックに同期したパラレルバスです。接続されたデバイスは、マザーボードに装着された集積回路(PCI仕様ではプレーナデバイスと呼ばれる)の形か、スロットに装着された拡張カードの形をとることができます。PCIローカルバスは、最初にIBM PC互換機に実装され、バス構成として、いくつかの低速な業界標準アーキテクチャ(ISA)スロットと1つの高速VESAローカルバス(VLB)スロットの組み合わせに取って代わりました。その後、他の種類のコンピュータにも採用されました。 PCで使用される一般的なPCIカードには、ネットワークカード、サウンドカード、モデム、ユニバーサルシリアルバス(USB)やシリアルなどの追加ポート、TVチューナーカード、ハードディスクドライブホストアダプタなどがあります。PCIビデオカードは、帯域幅の需要増加がPCIの能力を超えるまで、ISAカードやVLBカードに取って代わりました。その後、ビデオカードのインターフェースとしてPCIのスーパーセットであるAccelerated Graphics Port(AGP)が好まれるようになり、その後PCI Expressに取って代わられました。[ 5 ]
市販のデスクトップコンピュータに搭載されたPCIの最初のバージョンは、32ビットバスで、33 MHzのバスクロックとPCI 1.0 規格では64 ビット版も提供されていたが、 5 V信号方式をサポートしていなかった。 [ 6 ]これらには、カードに位置決め用のノッチが 1 つある。PCI 規格バージョン 2.0 では 3.3 V スロットが導入され、5 V カードが誤って挿入されるのを防ぐため、反転した物理コネクタで物理的に区別されていた。どちらの電圧でも動作可能なユニバーサル カードには、ノッチが 2 つある。PCI 規格バージョン 2.1 では、オプションで 66 MHz 動作が導入された。PCI のサーバー指向の派生型である PCI 拡張 ( PCI-X ) は、PCI-X 1.0 では最大 133 MHz、PCI-X 2.0 では最大 533 MHz の周波数で動作した。Mini PCIと呼ばれるラップトップ カード用の内部コネクタは、PCI 仕様バージョン 2.2 で導入された。PCI バスは、外部ラップトップ コネクタ規格であるCardBusにも採用された。[ 7 ]最初のPCI仕様はインテルによって開発されましたが、その後の標準規格の開発はPCI Special Interest Group(PCI-SIG )の責任となりました。[ 8 ]
PCI と PCI-X は、シリアルでレーンベースのアーキテクチャを採用した最近の後継PCI Expressと技術的に区別するために、パラレル PCIまたは従来の PCI [ 9 ]と呼ばれることもあります。 [ 10 ] [ 11 ]デスクトップコンピュータ市場での PCI の全盛期は、およそ 1995 年から 2005 年でした。[ 10 ] PCI と PCI-X はほとんどの用途で廃止されており、2013 年以降、他の多くの最新のマザーボードからはほとんど姿を消していますが、下位互換性と比較的低い製造コストのために、2020 年の時点でも一部の最新のデスクトップではまだ一般的です。パラレル PCI のもう 1 つの一般的な最新の用途は産業用 PCで、ここで使用されている多くの特殊な拡張カードは、一部の ISA カードと同様に、PCI Express に移行しませんでした。以前は PCI 拡張カードで利用可能だった多くの種類のデバイスが、現在ではマザーボードに統合されているか、USB バージョンや PCI Express バージョンで利用できるようになっています。


PCIの開発は、 1990年頃にIntel Architecture Labs(IAL、またはArchitecture Development Lab)で開始されました。IALのエンジニアを中心とするチームがアーキテクチャを定義し、同社のデスクトップPCシステムおよびコアロジック製品部門のチームと連携して、概念実証用のチップセットとプラットフォーム(Saturn)を開発しました。
PCIは直ちにサーバーで利用され、サーバー拡張バスの選択肢としてマイクロチャネルアーキテクチャ(MCA)と拡張業界標準アーキテクチャ(EISA)を置き換えた。主流のPCでは、PCIはVLBを置き換えるのに時間がかかり、1994年後半の第2世代Pentium PCでようやく市場に浸透した。1996年まで、VLBはほぼ消滅し、メーカーはIntel 80486(486)コンピューターにさえPCIを採用した。[ 12 ] EISAは2000年までPCIと並行して使用され続けた。Apple Computerは1995年半ばにプロ向けのPower Macintoshコンピューター(NuBusを置き換え)に、1996年半ばにコンシューマー向けのPerforma製品ライン(LC Processor Direct Slot(PDS)を置き換え)にPCIを採用した。
サーバー市場以外では、プレーンPCIの64ビットバージョンは実際にはまれでしたが[ 13 ] 、たとえばすべての(iMac以降の)G3およびG4 Power Macintoshコンピューターで使用されていました。[ 14 ]
PCIの後継規格では、66MHz 3.3V規格や133MHz PCI-X規格など、新機能や性能向上が追加され、 PCIシグナリングの 他のフォームファクタへの適応も図られました。PCI-X 1.0bとPCI-X 2.0はどちらも一部のPCI規格と下位互換性があります。これらの規格はサーバーハードウェアで使用されましたが、一般消費者向けPCハードウェアはほぼ全て32ビット、33MHz、5Vのままでした。
PCI-SIGは 2004年頃にシリアルPCI Expressを導入しました。それ以来、マザーボードメーカーは新しい規格を採用するため、PCIスロットを徐々に減らしたり、ゼロにしたりしてきました。ブリッジアダプターを使用すると、PCI Expressマザーボードで従来のPCIカードを使用できます。
| スペック | 年 | 変更の概要[ 16 ] |
|---|---|---|
| PCI 1.0 | 1992 | オリジナル号 |
| PCI 2.0 | 1993 | 内蔵コネクタとアドインカードの仕様 |
| PCI 2.1 | 1995 | 説明を組み込み、66 MHz の章を追加しました |
| PCI 2.2 | 1998 | ECNを組み込み、読みやすさを向上 |
| PCI 2.3 | 2002 | ECN、エラッタを組み込み、5ボルトのみのキー付きアドインカードを削除しました |
| PCI 3.0 | 2004 | 5.0ボルトキーシステムボードコネクタのサポートを削除しました |
PCIは、 x86プロセッサファミリ向けに、それぞれ64ビットと32ビットのメモリアドレス空間とメモリマップドI/Oポートアドレス空間を個別に提供します。これらのアドレス空間のアドレスはソフトウェアによって割り当てられます。PCIコンフィギュレーション空間と呼ばれる3つ目のアドレス空間は固定アドレス指定方式を採用しており、ソフトウェアは各デバイスに必要なメモリ量とI/Oアドレス空間を決定できます。各デバイスは、コンフィギュレーション空間レジスタを介して 最大6つのメモリ空間または入出力(I/O)ポート空間を要求できます。
一般的なシステムでは、ファームウェア(またはオペレーティングシステム)は起動時に(PCIコンフィグレーションスペースを介して)すべてのPCIバスに問い合わせを行い、存在するデバイスと各デバイスに必要なシステムリソース(メモリ空間、I/O空間、割り込みラインなど)を特定します。そして、それらのリソースを割り当て、各デバイスに割り当て内容を通知します。
PCI 構成スペースには、少量のデバイス タイプ情報も含まれており、オペレーティング システムがデバイス ドライバーを選択したり、少なくともシステム構成についてユーザーと対話したりするのに役立ちます。
デバイスには、x86またはPA-RISCプロセッサ用の実行コード、Open Firmwareドライバ、またはオプションROMを含むオンボードの読み取り専用メモリ(ROM)が搭載されている場合があります。これらは通常、システム起動時、つまりオペレーティングシステムによってデバイスドライバがロードされる前のデバイスに必要です。
さらに、PCIバスマスタリングデバイスがPCIバスを公平に共有するためのメカニズムとして、PCIレイテンシタイマーが存在します。ここで言う「公平」とは、デバイスが利用可能なPCIバス帯域幅の大部分を占有し、他のデバイスが必要な処理を実行できない状況に陥らないことを意味します。ただし、これはPCI Expressには適用されません。
この仕組みは、バスマスターモードで動作可能な各PCIデバイスが、レイテンシタイマーと呼ばれるタイマーを実装する必要があるというものです。このタイマーは、デバイスがPCIバスを保持できる時間を制限します。このタイマーは、デバイスがバスの所有権を獲得した時点で開始され、PCIクロックの速度でカウントダウンします。カウンターがゼロに達すると、デバイスはバスを解放する必要があります。バスの所有権を待機している他のデバイスがいない場合、デバイスはバスを再び取得して、さらにデータを転送することができます。[ 17 ]
デバイスは、割り込み要求(IRQ) ラインを共有できるようにプロトコルに従う必要があります。PCI バスには、INTA# から INTD# までの 4 つの割り込みラインがあり、これらはすべて各デバイスで使用できます。APIC 対応の x86 システムでは、最大 8 台の PCI デバイスが同じ IRQ ライン (INTINA# から INTINH#) を共有します。割り込みラインは、他の PCI バス ラインのように並列に配線されていません。割り込みラインの位置はスロット間で回転するため、あるデバイスに INTA# ラインとして表示されるものは、次のデバイスでは INTB# ライン、さらにその次のデバイスでは INTC# ラインとして表示されます。単一機能デバイスは通常、割り込み信号に INTA# を使用するため、デバイスの負荷は 4 つの利用可能な割り込みライン間でかなり均等に分散されます。これにより、割り込みの共有に関する一般的な問題が軽減されます。
PCIホストブリッジを介したPCI割り込みラインからシステム割り込みラインへのマッピングは、実装に依存します。プラットフォーム固有のファームウェアまたはオペレーティングシステムコードは、このマッピングを認識し、各デバイスの設定空間の「割り込みライン」フィールドを設定して、どのIRQに接続されているかを示します。
PCI割り込みラインはレベルトリガーです。これは、共有割り込みラインを処理する際の優位性と堅牢性を確保するため、エッジトリガーではなくレベルトリガーが選択されました。エッジトリガー割り込みは見逃されやすいためです。
PCI仕様のその後の改訂では、メッセージシグナル割り込みのサポートが追加されました。このシステムでは、デバイスは専用ラインをアサートするのではなく、メモリ書き込みを実行することでサービスの必要性を通知します。これにより、割り込みラインの不足という問題が軽減されます。割り込みベクターが共有されている場合でも、レベルトリガー割り込みのような共有の問題は発生しません。また、メモリ書き込みがデバイスとホスト間で予期せず変更されることがないため、ルーティングの問題も解決されます。さらに、メッセージシグナルは帯域内であるため、ポスト書き込みや帯域外割り込みラインで発生する可能性のある同期の問題もいくつか解決されます。
PCI Expressには物理的な割り込みラインが全く存在せず、メッセージシグナルによる割り込みのみを使用します。

これらの仕様は、通常の PC で使用される最も一般的なバージョンの PCI を表しています。
PCI 仕様では、3.3 V 信号、64 ビットバス幅、および 66 MHz クロックのオプションも提供されていますが、これらはサーバー マザーボード上の PCI-X サポート以外では一般的に使用されません。
PCIバスアービタは、PCIバス上の複数のマスター間のバス調停を行います。PCIバス上には、任意の数のバスマスターとバス要求が存在できます。各バスマスターには、1組の要求信号と許可信号が割り当てられます。

一般的なPCIカードには、信号電圧に応じて1つまたは2つのキーノッチがあります。3.3ボルトを必要とするカードには、ピン位置12と13にカードバックプレートから56.21mmのノッチがあり、5ボルトを必要とするカードには、ピン位置50と51にカードバックプレートから104.41mmのノッチがあります。これにより、カードは対応する電圧のスロットにのみ装着できます。どちらの電圧にも対応する「ユニバーサルカード」には、両方のキーノッチがあります。
PCIコネクタは、エッジコネクタの各面に62個のコンタクトを持つように定義されていますが、そのうち2個または4個はキーノッチに置き換えられているため、カードには各面に60個または58個のコンタクトがあります。サイドAは「はんだ面」、サイドBは「コンポーネント面」を指します。カードをコネクタを下に向けて持つと、サイドAを見るとバックプレートが右側に、サイドBを見るとバックプレートが左側になります。マザーボードコネクタを見下ろしたB面とA面のピン配置は次のとおりです(ピンA1とB1がバックプレートに最も近い)。[ 16 ] [ 18 ] [ 19 ]
| ピン | サイドB | A面 | コメント | ||
|---|---|---|---|---|---|
| 1 | −12V | TRST# | JTAGポートピン(オプション) | ||
| 2 | TCK | +12V | |||
| 3 | 地面 | TMS | |||
| 4 | TDO | TDI | |||
| 5 | +5V | +5V | |||
| 6 | +5V | インタ# | 割り込みピン(オープンドレイン) | ||
| 7 | INTB# | INTC# | |||
| 8 | 国際化番号 | +5V | |||
| 9 | PRSNT1# | 予約済み | 7.5 W または 25 W の電力が必要であることを示すために引き下げられる | ||
| 10 | 予約済み | IOPWR | +5 Vまたは+3.3 V | ||
| 11 | PRSNT2# | 予約済み | 7.5 W または 15 W の電力が必要であることを示すために低くなります | ||
| 12 | 地面 | 地面 | 3.3 V対応カード用のキーノッチ | ||
| 13 | 地面 | 地面 | |||
| 14 | 予約済み | 3.3 V補助電源 | スタンバイ電源(オプション) | ||
| 15 | 地面 | RST# | バスリセット | ||
| 16 | クロック | IOPWR | 33/66 MHzクロック | ||
| 17 | 地面 | GNT# | マザーボードからカードへのバス許可 | ||
| 18 | リクエスト番号 | 地面 | カードからマザーボードへのバス要求 | ||
| 19 | IOPWR | PME# | 電源管理イベント(オプション)3.3V、オープンドレイン、アクティブロー。[ 20 ] | ||
| 20 | 西暦[31] | 西暦[30] | アドレス/データバス(上半分) | ||
| 21 | 西暦[29] | +3.3V | |||
| 22 | 地面 | 西暦[28] | |||
| 23 | 西暦[27] | 西暦[26] | |||
| 24 | 西暦[25] | 地面 | |||
| 25 | +3.3V | 西暦[24] | |||
| 26 | C/BE[3]# | イドセル | |||
| 27 | 西暦[23] | +3.3V | |||
| 28 | 地面 | 西暦[22] | |||
| 29 | 西暦[21] | 西暦[20] | |||
| 30 | 西暦[19] | 地面 | |||
| 31 | +3.3V | 西暦[18] | |||
| 32 | 西暦[17] | 西暦[16] | |||
| 33 | C/BE[2]# | +3.3V | |||
| 34 | 地面 | フレーム# | バス乗り換え中 | ||
| 35 | IRDY# | 地面 | イニシエーター準備完了 | ||
| 36 | +3.3V | TRDY# | ターゲット準備完了 | ||
| 37 | 開発番号 | 地面 | ターゲットが選択されました | ||
| 38 | PCIXCAP | 地面 | 停止# | PCI-X対応; ターゲットが停止を要求 | |
| 39 | ロック# | +3.3V | ロックされたトランザクション | ||
| 40 | PERR# | SMBCLK | SDONE | パリティ エラー。SMBusクロックまたはスヌープが完了しました (廃止) | |
| 41 | +3.3V | SMBDAT | SBO# | SMBus データまたはスヌープ バックオフ (廃止) | |
| 42 | SERR# | 地面 | システムエラー | ||
| 43 | +3.3V | パー | AD[31:00]とC/BE[3:0]の偶数パリティ# | ||
| 44 | C/BE[1]# | 西暦[15] | アドレス/データバス(上位半分) | ||
| 45 | 西暦[14] | +3.3V | |||
| 46 | 地面 | 西暦[13] | |||
| 47 | 西暦[12] | 西暦[11] | |||
| 48 | 西暦[10] | 地面 | |||
| 49 | M66EN | 地面 | 西暦[09] | ||
| 50 | 地面 | 地面 | 5枚のV対応カード用のキーノッチ | ||
| 51 | 地面 | 地面 | |||
| 52 | 西暦[08] | C/BE[0]# | アドレス/データバス(下半分) | ||
| 53 | 西暦[07] | +3.3V | |||
| 54 | +3.3V | 西暦[06] | |||
| 55 | 西暦[05] | 西暦[04] | |||
| 56 | 西暦[03] | 地面 | |||
| 57 | 地面 | 西暦[02] | |||
| 58 | 西暦[01] | 西暦[00] | |||
| 59 | IOPWR | IOPWR | |||
| 60 | ACK64# | 要求64# | 64 ビット拡張の場合。32 ビット デバイスの場合は接続しません。 | ||
| 61 | +5V | +5V | |||
| 62 | +5V | +5V | |||
64 ビット PCI では、各側に 32 個の追加コンタクトが追加され、AD[63:32]、C/BE[7:4]#、PAR64 パリティ信号、および多数の電源ピンとグランド ピンが提供されます。
| アースピン | ゼロボルト基準 |
|---|---|
| 電源ピン | PCIカードに電源を供給します |
| 出力ピン | PCIカードで駆動し、マザーボードで受信 |
| イニシエーター出力 | マスター/イニシエータによって駆動され、ターゲットによって受信される |
| I/O信号 | 操作に応じてイニシエーターまたはターゲットによって駆動される可能性がある |
| 目標出力 | ターゲットによって駆動され、イニシエーター/マスターによって受信される |
| 入力 | マザーボードで駆動し、PCIカードで受信 |
| 開いた排水口 | 低く引かれ、複数のカードによって感知される可能性がある |
| 予約済み | 現在使用されていないため、接続しないでください |
ほとんどの回線は各スロットに並列に接続されます。例外は以下のとおりです。
注:


ほとんどの32ビットPCIカードは64ビットPCI-Xスロットでも正常に動作しますが、バスクロックレートは最も低速なカードのクロック周波数に制限されます。これはPCIの共有バストポロジに固有の制限です。例えば、PCI 2.3準拠の66MHz周辺機器を133MHz対応のPCI-Xバスに取り付けると、バスバックプレーン全体の周波数は66MHzに制限されます。この制限を回避するため、多くのマザーボードは2つ以上のPCI/PCI-Xバスを搭載しており、1つのバスは高速PCI-X周辺機器用、もう1つのバスは汎用周辺機器用となっています。
多くの64ビットPCI-Xカードは、短い32ビットコネクタに挿入すると32ビットモードで動作するように設計されており、パフォーマンスが多少低下します。[ 22 ] [ 23 ]一例として、Adaptec 29160 64ビットSCSIインターフェースカードが挙げられます。[ 24 ]ただし、一部の64ビットPCI-Xカードは標準の32ビットPCIスロットでは動作しません。[ 25 ]
64ビットPCI-Xカードを32ビットスロットに装着すると、カードエッジコネクタの64ビット部分が未接続となり、はみ出した状態になります。そのため、マザーボード上のコンポーネントがカードエッジコネクタのはみ出した部分を機械的に遮るような配置になっていないことが必要です。
PCI ブラケットの高さ:
PCIカードの長さ(標準ブラケット&3.3 V): [ 28 ]
PCIカードの長さ(ロープロファイルブラケット&3.3 V): [ 29 ]




Mini PCIは、ノートパソコンや一部のルーターでの使用を目的としてPCIバージョン2.2に追加されました。32ビット、33MHzのバスを使用し、電源接続(3.3Vのみ、5Vは100mAに制限)とバスマスタリング、DMAをサポートしています。Mini PCIカードの標準サイズは、フルサイズのカードの約4分の1です。コネクタを固定するブラケットを備えたデスクトップPCIカードとは異なり、ケースの外側からカードにアクセスすることはできません。そのため、Mini PCIカードで実行できる機能は限られています。
Mini PCIデバイスは、Wi-Fi、ファストイーサネット、Bluetooth、モデム(多くの場合Winmodem)、サウンドカード、暗号化アクセラレータ、SCSI、IDE - ATA、SATAコントローラ、コンビネーションカードなど、数多く開発されました。Mini PCIカードは、Mini PCI-PCIコンバータを使用することで、通常のPCI搭載ハードウェアでも使用できます。Mini PCIは、はるかに幅の狭いPCI Express Miniカードに置き換えられました。
Mini PCIカードの最大消費電力は2Wであるため、このフォームファクターで実装できる機能は制限されます。また、電源管理のためにPCIクロックの開始と停止に使用されるCLKRUN# PCI信号をサポートする必要があります。
カードのフォーム ファクタには、タイプ I、タイプ II、タイプ III の 3 つがあります。各タイプで使用されるカード コネクタは次のとおりです。タイプ I と II は 100 ピンのスタッキング コネクタを使用し、タイプ III は 124 ピンのエッジ コネクタを使用します。つまり、タイプ I と II のコネクタは、SO -DIMMのようにコネクタがカードの端にあるタイプ III のコネクタとは異なります。追加の 24 ピンは、 I/O をシステム コネクタ (オーディオ、AC-Link、LAN、電話回線インターフェイス) 経由で戻すために必要な追加信号を提供します。タイプ II カードには、RJ11 および RJ45 が搭載されたコネクタがあります。これらのカードは、RJ11 ポートと RJ45 ポートを外部アクセス用にマウントできるように、コンピュータまたはドッキング ステーションの端に配置する必要があります。
| タイプ | ホストシステムの外縁にあるカード | コネクタ | サイズ(mm × mm × mm) | コメント |
|---|---|---|---|---|
| IA | いいえ | 100ピンスタッキング | 7.5 × 70 × 45 | 大きいZ寸法(7.5 mm) |
| IB | 5.5 × 70 × 45 | Z寸法が小さい(5.5 mm) | ||
| IIA | はい | 17.44 × × | 大きいZ寸法(17.44 mm) | |
| IIB | 5.5 × 78 × 45 | Z寸法が小さい(5.5 mm) | ||
| IIIA | いいえ | 124ピンカードエッジ | 2.4 × 59.6 × 50.95 | Y寸法が大きい(50.95 mm) |
| IIIB | 2.4 × 59.6 × 44.6 | Y寸法が小さい(44.6 mm) |
Mini PCIは144ピンのMicro PCIとは異なります。[ 30 ]
PCIバストラフィックは、一連のPCIバストランザクションで構成されます。各トランザクションは、アドレスフェーズとそれに続く1つ以上のデータフェーズで構成されます。データフェーズの方向は、イニシエータからターゲット(書き込みトランザクション)またはターゲットからイニシエータ(読み取りトランザクション)のいずれかですが、すべてのデータフェーズは同じ方向である必要があります。どちらの側も、いつでもデータフェーズを一時停止または停止できます。(一般的な例としては、バーストトランザクションをサポートせず、最初のデータフェーズの後に常にトランザクションを停止する低性能のPCIデバイスが挙げられます。)
どのPCIデバイスもトランザクションを開始できます。まず、マザーボード上のPCIバスアービタに許可を要求する必要があります。アービタは、要求元デバイスの1つに許可を与えます。イニシエーターは、32ビットのアドレスと4ビットのコマンドコードをブロードキャストすることでアドレスフェーズを開始し、ターゲットからの応答を待ちます。他のすべてのデバイスはこのアドレスを確認し、数サイクル後にそのうちの1つが応答します。
64ビットアドレッシングは、2段階のアドレスフェーズで行われます。イニシエーターは、下位32アドレスビットと特別な「デュアルアドレスサイクル」コマンドコードをブロードキャストします。64ビットアドレッシングをサポートしていないデバイスは、このコマンドコードに応答できません。次のサイクルでは、イニシエーターは上位32アドレスビットと実際のコマンドコードを送信します。トランザクションは、この時点から同じように動作します。32ビットPCIデバイスとの互換性を確保するため、必要がない場合、つまり上位アドレスビットがすべてゼロの場合、デュアルアドレスサイクルの使用は禁止されています。
PCIバスはデータフェーズごとに32ビットを転送しますが、イニシエータは4つのアクティブローのバイトイネーブル信号を送信し、どの8ビットバイトを重要と見なすかを示します。特に、書き込みはターゲットPCIデバイス内の有効なバイトにのみ影響する必要があります。これらのバイトはメモリ読み取りではほとんど重要ではありませんが、I/O読み取りでは副作用が生じる可能性があります。PCI規格では、有効なバイトがないデータフェーズが明示的に許可されており、その場合、no-opとして動作する必要があります。
PCI には、メモリ、I/O アドレス、構成の 3 つのアドレス空間があります。
メモリ アドレスのサイズは 32 ビット (オプションで 64 ビット) で、キャッシュをサポートし、バースト トランザクションが可能です。
I/Oアドレスは、Intel x86アーキテクチャのI/Oポートアドレス空間との互換性を保つために存在します。PCIバス仕様では、任意のアドレス空間でのバーストトランザクションが許可されていますが、ほとんどのデバイスではメモリアドレスのみをサポートしており、I/Oアドレスはサポートしていません。
最後に、PCIコンフィギュレーション空間は、 PCIデバイスごとに256バイトの特殊なコンフィギュレーションレジスタへのアクセスを提供します。各PCIスロットには、独自のコンフィギュレーション空間アドレス範囲が割り当てられます。これらのレジスタは、トランザクションイニシエーターからの応答対象となるデバイスのメモリおよびI/Oアドレス範囲を設定するために使用されます。コンピューターの電源を初めてオンにすると、すべてのPCIデバイスはそれぞれのコンフィギュレーション空間へのアクセスにのみ応答します。コンピューターのBIOSはデバイスをスキャンし、メモリおよびI/Oアドレス範囲を割り当てます。
どのデバイスからもアドレスが要求されていない場合、トランザクションイニシエータのアドレスフェーズはタイムアウトし、イニシエータは操作を中止します。読み取りの場合、この場合、読み取りデータ値(0xFFFFFFFF)にはすべて1を指定するのが一般的です。そのため、PCIデバイスは重要なステータスレジスタではすべて1の値を使用しないようにするのが一般的です。これにより、このようなエラーはソフトウェアによって容易に検出されます。
4ビットのコマンドコードは16種類あり、そのうち12種類が割り当てられています。固有のデュアルアドレスサイクルを除き、コマンドコードの最下位ビットは、後続のデータフェーズが読み取り(ターゲットからイニシエーターへのデータ送信)か書き込み(イニシエーターからターゲットへのデータ送信)かを示します。PCIターゲットは、アドレスだけでなくコマンドコードも検査する必要があり、サポートされていないコマンドコードを指定するアドレスフェーズには応答しません。
キャッシュ ラインを参照するコマンドは、PCI 構成スペースのキャッシュ ライン サイズ レジスタが適切に設定されているかどうかに依存します。この設定が完了するまでは、これらのコマンドは使用できません。
PCI仕様の公布直後、一部のデバイスによる長時間のトランザクションが、遅い確認応答、長いデータバースト、あるいはそれらの組み合わせによって、他のデバイスでバッファアンダーランまたはバッファオーバーランを引き起こす可能性があることが判明しました。リビジョン2.0で規定された各フェーズのタイミングに関する推奨事項は、リビジョン2.1で必須となりました。[ 32 ] : 3
さらに、リビジョン2.1以降、2つ以上のデータフェーズをバースト送信できるすべてのイニシエーターは、プログラマブルなレイテンシタイマーを実装する必要があります。このタイマーは、トランザクションの開始時(イニシエーターがFRAME#をアサートした時)にクロックサイクルのカウントを開始します。タイマーが満了し、アービターがGNT#を削除した場合、イニシエーターは次の正当な機会にトランザクションを終了しなければなりません。これは通常、次のデータフェーズですが、メモリ書き込みおよび無効化トランザクションはキャッシュラインの最後まで継続する必要があります。
これらのタイミング制約を満たせないデバイスは、ポスト書き込み(メモリ書き込み用)と遅延トランザクション(その他の書き込みおよびすべての読み取り用)を組み合わせて使用する必要があります。遅延トランザクションでは、ターゲットはトランザクション(書き込みデータを含む)を内部的に記録し、最初のデータフェーズを中止(TRDY#ではなくSTOP#をアサート)します。イニシエーターは後で全く同じトランザクションを再試行する必要があります。その間、ターゲットは内部的にトランザクションを実行し、再試行されたトランザクションを待機します。再試行されたトランザクションが検出されると、バッファリングされた結果が配信されます。
デバイスは、1 つの遅延トランザクションを完了すると同時に、他のトランザクションのターゲットになる場合があります。トランザクション タイプ、アドレス、バイト選択、および (書き込みの場合) データ値を記憶し、正しいトランザクションのみを完了する必要があります。
ターゲットが内部的に記録できる遅延トランザクションの数に制限がある場合(単純なターゲットでは1に制限される可能性があります)、それらのトランザクションは記録されずに強制的に再試行されます。これらのトランザクションは、現在の遅延トランザクションが完了した時点で処理されます。2つのイニシエータが同じトランザクションを試行した場合、一方が開始した遅延トランザクションの結果がもう一方に渡される可能性がありますが、これは無害です。
ターゲットは、再試行がバッファリングされた結果の配信に成功した場合、バスがリセットされた場合、または再試行が発生せずに2 15 =32768 クロックサイクル(約1ミリ秒)が経過した場合、遅延トランザクションを破棄します。後者は通常の動作では決して発生しませんが、1つのイニシエーターがリセットされたり故障したりした場合に、バス全体のデッドロックを防ぐことができます。
PCI規格では、複数の独立したPCIバスをバスブリッジで接続することが可能です。バスブリッジは、必要に応じてバス上の操作を別のバスに転送します。PCIではバスブリッジをあまり使用しませんが、PCI Expressシステムでは、 PCI Expressルートポートと呼ばれるPCI-PCIブリッジを多数使用します。各PCI Expressスロットは、ブリッジによって互いに接続され、独立したバスのように見えます。PCIホストブリッジ(x86プラットフォームでは通常ノースブリッジ)は、CPU、メインメモリ、PCIバスを相互接続します。[ 33 ]
一般的に、バスブリッジが一方のバス上で他方のバスに転送する必要があるトランザクションを検出すると、元のトランザクションは転送されたトランザクションが完了するまで結果を待たなければなりません。メモリ書き込みの場合、注目すべき例外が一つあります。この場合、ブリッジは書き込みデータを内部的に記録し(空き容量がある場合)、転送された書き込みが完了する前に、あるいは書き込みが開始される前に、書き込みの完了を通知することがあります。このような「送信済みだがまだ到着していない」書き込みは、郵便のメッセージに例えて「ポスト書き込み」と呼ばれます。これはパフォーマンス向上の大きな可能性を秘めていますが、何が許容されるかを規定するルールはやや複雑です。[ 34 ]
PCI規格では、特定の状況下でバスブリッジが複数のバストランザクションを1つの大きなトランザクションに変換することが許可されています。これにより、PCIバスの効率が向上します。
連続するアドレスへの書き込みトランザクションは、バースト内のアクセス順序が元の書き込み順序と同じである限り、より長いバースト書き込みにまとめることができます。書き込みがほぼ連続している場合は、すべてのバイトイネーブルをオフにした状態で追加のデータフェーズを挿入することが許容されます。
複数のバイトイネーブルをアサートすることで、同一ワード内の複数の異なる部分への書き込みを1つの書き込みにマージすることができます。この場合、特定の順序でバスブリッジに渡された書き込みはマージされ、転送時に同時に発生します。
同じバイトへの複数の書き込みを組み合わせることはできません。例えば、2回目の書き込みのみを実行し、上書きされた最初の書き込みをスキップするなどです。これは、PCI仕様で書き込みに副作用が生じることが許可されているためです。
PCIバスのトランザクションは5つの主な制御信号によって制御されます。そのうち2つはトランザクションのイニシエーターによって駆動され(FRAME#とIRDY#)、3つはターゲットによって駆動されます(DEVSEL#、TRDY#、STOP#)。トランザクションを開始する許可を得るために使用される2つの追加の調停信号(REQ#とGNT#)があります。[ 6 ]これらはすべてアクティブローであり、アクティブまたはアサートされた状態は低電圧であることを意味します。マザーボード上のプルアップ抵抗は、どのデバイスからも駆動されていない場合はハイ(非アクティブまたはデアサート)のままになることを保証しますが、PCIバスは信号レベルを変更するために抵抗に依存しません。すべてのデバイスは、信号の 駆動を停止する前に1サイクルの間信号をハイに駆動します。
PCIバスのすべての信号は、クロックの立ち上がりエッジでサンプリングされます。信号は通常、クロックの立ち下がりエッジで変化するため、各PCIデバイスは、立ち上がりエッジで観測した信号への応答方法を決定するために約半クロックサイクル、そしてその応答を他のデバイスに送信するために約半クロックサイクルの余裕があります。
PCIバスでは、PCIバス信号を駆動するデバイスが変化するたびに、一方のデバイスが信号の駆動を停止してからもう一方のデバイスが駆動を開始するまでの間に、1ターンアラウンドサイクルが経過する必要があります。このサイクルが経過しないと、両方のデバイスが信号を駆動している期間が発生し、バスの動作に支障をきたす可能性があります。
このターンアラウンドサイクルと、制御ラインの駆動を停止する前に1サイクル間ハイレベルにする必要があるという要件を組み合わせると、オーナーが切り替わる際に、各メイン制御ラインが少なくとも2サイクル間ハイレベルに保たれる必要があることを意味します。PCIバスプロトコルは、これが制限となることはほとんどないように設計されています。この要件を満たすために追加の遅延を挿入する必要があるのは、ごく限られた特殊なケース(特に高速なバックツーバックトランザクション)のみです。
PCIバス上のバスマスターとして動作可能なデバイスは、他のデバイスとのトランザクションを開始できます。一度に1つのトランザクションのみが開始されるようにするために、各マスターはまず、マザーボード上のアービタからのバス許可信号(GNT#)を待機する必要があります。各デバイスにはバスを要求する個別のリクエストラインREQ#がありますが、アービタは、現在リクエストがない場合、任意のデバイスにバス許可信号を「パーク」することができます。
アービターはいつでもGNT#を削除することができます。GNT#を失ったデバイスは現在のトランザクションを完了できますが、トランザクション開始前のサイクルでGNT#がアサートされていることを確認しない限り、(FRAME#をアサートして)トランザクションを開始することはできません。
アービタは、他のマスターのトランザクション中を含め、いつでもGNT#を供給できます。トランザクション中は、FRAME#またはIRDY#のいずれか、あるいは両方がアサートされます。両方がデアサートされると、バスはアイドル状態になります。デバイスは、GNT#がアサートされ、バスがアイドル状態であればいつでもトランザクションを開始できます。
PCIバスのトランザクションはアドレスフェーズから始まります。イニシエータ(通常はチップセット)は、GNT#が確立されバスがアイドル状態であることを確認すると、ターゲットアドレスをAD[31:0]ラインに、関連コマンド(メモリ読み取り、I/O書き込みなど)をC/BE[3:0]#ラインに出力し、FRAME#をローレベルにします。
他の各デバイスは、アドレスとコマンドを確認し、ターゲットとしてDEVSEL#をアサートして応答するかどうかを決定します。デバイスは3サイクル以内にDEVSEL#をアサートして応答する必要があります。1サイクルまたは2サイクル以内に応答することを約束するデバイスは、それぞれ「高速DEVSEL」または「中速DEVSEL」と呼ばれます。(実際には、PCIデバイスはすべての信号を半サイクル早く送信し、3サイクル後に受信できるようにする必要があるため、応答時間は2.5サイクルです。)
デバイスは最初のサイクルでアドレスをラッチする必要があります。イニシエータは、DEVSEL#応答を受信する前であっても、次のサイクルでアドレスとコマンドをバスから削除する必要があります。追加の時間は、アドレスとコマンドをキャプチャした後、それらを解釈するためにのみ使用されます。
アドレスフェーズの5サイクル目(または、他のすべてのデバイスのDEVSELが中速以上の場合はそれより早い)では、一部のアドレス範囲に対して包括的な「減算デコード」が許可されます。これは、ISAバスブリッジがその範囲(メモリの場合は24ビット、I/Oの場合は16ビット)内のアドレスに対して一般的に使用されます。
6サイクル目に応答がない場合、イニシエータはFRAME#をデアサートすることでトランザクションを中止することができます。これはマスターアボート終了と呼ばれ、PCIバスブリッジはこの場合、通常、オール1のデータ(0xFFFFFFFF)を返します。そのため、PCIデバイスは一般的に、重要なステータスレジスタでオール1の値を使用しないように設計されており、このようなエラーはソフトウェアで容易に検出できます。
注:
クロック0の立ち上がりエッジで、イニシエーターはFRAME#とIRDY#が両方ともハイ、GNT#がローであることを検出すると、アドレスとコマンドを駆動し、クロック1の立ち上がりエッジに間に合うようにFRAME#をアサートします。ターゲットはアドレスをラッチし、デコードを開始します。ターゲットはクロック2(高速DEVSEL)、3(中速)、または4(低速)に間に合うようにDEVSEL#で応答します。減算型デコードデバイスは、クロック4までに他の応答がないことを確認した場合、クロック5で応答する可能性があります。マスターはクロック5までに応答を確認できない場合、トランザクションを終了し、クロック6でFRAME#を削除します。
TRDY#とSTOP#はアドレスフェーズ中にデアサート(ハイ)されます。イニシエータはデータ転送の準備が整い次第、IRDY#をアサートできます。理論的にはクロック2でアサートされる可能性があります。
64ビットアドレス指定を可能にするために、マスターはアドレスを2つの連続するサイクルで送信します。まず、C/BE[3:0]#に特別な「デュアルサイクルアドレス」コマンドを送信し、下位アドレスビットを送信します。次のサイクルでは、上位アドレスビットと実際のコマンドを送信します。上位アドレスビットが0の場合、デュアルアドレスサイクルは禁止されるため、64ビットアドレス指定をサポートしていないデバイスはデュアルサイクルコマンドに応答できません。
_ 0_ 1_ 2_ 3_ 4_ 5_ 6_ クロック _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ GNT# \___/XXXXXXXXXXXXXXXXXXXXXXXX _______ フレーム# \_______________________ ___ ___ AD[31:0] -------<___X___>--------------- (下位ビット、上位ビット) ___ ___ _______________ C/BE[3:0]# -------<___X___X_______________ (DAC、次に実際のコマンド) ___________________________ 開発番号 \___\___\___\___ 速い 中 遅い _ _ _ _ _ _ _ _ クロック _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6
PCIコンフィグレーション空間へのアクセス用アドレスには、特殊なデコードが使用されます。この場合、下位アドレスラインは目的のPCIコンフィグレーションレジスタのオフセットを指定し、上位アドレスラインは無視されます。代わりに、デバイスがDEVSEL#をアサートする前に、追加のアドレス信号であるIDSEL入力がハイレベルである必要があります。各スロットは異なる上位アドレスラインをIDSELピンに接続し、上位アドレスラインの ワンホットエンコーディングによって選択されます。
アドレスフェーズ(具体的には、DEVSEL#がローになるサイクルから始まる)の後には、1つ以上のデータフェーズのバーストが続きます。いずれの場合も、イニシエータはC/BE[3:0]#ライン上のアクティブローのバイト選択信号を駆動しますが、AD[31:0]上のデータはイニシエータ(書き込みの場合)またはターゲット(読み取りの場合)によって駆動されます。
データフェーズ中、C/BE[3:0]# ラインはアクティブローのバイトイネーブルとして解釈されます。書き込みの場合、アサートされた信号は、ADバス上の4バイトのうち、指定されたアドレスに書き込まれるバイトを示します。読み取りの場合、これらの信号は、イニシエータがどのバイトを読み込むかを示します。読み取りの場合、バイトイネーブル信号を無視して32ビットすべてを返すことは常に有効です。キャッシュ可能なメモリリソースは、常に32ビットの有効ビットを返す必要があります。バイトイネーブルは、読み取りに副作用があるI/O空間アクセスに主に有効です。
4 つの C/BE# ラインすべてがデアサートされたデータ フェーズは、PCI 標準によって明示的に許可されており、進行中のバースト アクセスでアドレスを進める以外、ターゲットに影響を及ぼしてはなりません。
データフェーズは、双方が転送を完了し、次のデータフェーズに進む準備ができるまで続きます。イニシエーターは待機する必要がなくなった時点でIRDY#(イニシエーターレディ)をアサートし、ターゲットはTRDY#(ターゲットレディ)をアサートします。データを提供する側は、レディ信号をアサートする前に、ADバス上でデータを駆動する必要があります。
いずれかのデバイスがレディ信号をアサートすると、データフェーズの終了まで、そのデバイスはアンレディ状態になったり、制御信号を変更したりすることはできません。データ受信側は、IRDY#とTRDY#の両方がアサートされたことを確認するまで、各サイクルでADバスをラッチする必要があります。IRDY#とTRDY#の両方がアサートされたことは、現在のデータフェーズの終了を示し、ラッチされたデータが転送対象のワードであることを示します。
完全なバースト速度を維持するために、データ送信者は、IRDY# と TRDY# の両方がアサートされたことを確認してから、次のワードを AD バスに送るまでの半クロック サイクルを必要とします。
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ クロック _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ _______ ___ ___ ___ AD[31:0] ---<___XXXXXXXXX_______XXXXX___X___X___ (書き込みの場合) ___ ___ _______ ___ ___ AD[31:0] ---<___>~~~<XXXXXXXX___X_______X___X___ (読み取りの場合) ___ _______________ _______ ___ ___ C/BE[3:0]# ---<___X_______________X_______X___X___ (常に有効である必要があります) _______________ | ___ | | | IRDY# x \_______/ x \___________ ___________________ | | | | TRDY# xx ____________________ ___________ | | | | 開発番号 \___________________________ ___ | | | | フレーム# \___________________________________ _ _ _ _ _ |_ _ |_ |_ |_ クロック _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6 7 8 9
これは、上に示したアドレス サイクルの続きです。メディア DEVSEL を使用した単一のアドレス サイクルを想定しているため、ターゲットはクロック 3 に間に合うように応答します。ただし、その時点では、どちらの側もデータ転送の準備ができていません。クロック 4 では、イニシエーターは準備ができていますが、ターゲットはまだ準備ができていません。クロック 5 では、両方の側が準備完了となり、データ転送が行われます (垂直線で示されています)。クロック 6 では、ターゲットは転送の準備ができていますが、イニシエーターはまだ準備ができていません。クロック 7 では、イニシエーターが準備完了となり、データが転送されます。クロック 8 と 9 では、両側ともデータ転送の準備ができていて、データは最大速度 (クロック サイクルあたり 32 ビット) で転送されます。
読み取りの場合、クロック 2 は AD バスの方向転換用に予約されているため、ターゲットは高速 DEVSEL に対応していてもバス上でデータを駆動することはできません。
高速DEVSELをサポートするターゲットは、理論上はアドレスが提示された後のサイクルで読み取りへの応答を開始できます。ただし、このサイクルはADバスのターンアラウンドのために予約されています。そのため、ターゲットはトランザクションの2番目のサイクルではADバスを駆動できない(つまりTRDY#をアサートできない)可能性があります。ほとんどのターゲットはこれほど高速ではないため、この条件を強制するための特別なロジックは必要ありません。
どちらの側も、現在のデータフェーズの終了後にバーストの終了を要求できます。マルチワードバーストをサポートしないシンプルなPCIデバイスは、常にこの要求を即座に行います。バーストをサポートするデバイスであっても、アドレス指定可能なメモリの終端など、サポートできる最大長には制限があります。
イニシエーターは、IRDY#をアサートすると同時にFRAME#をデアサートすることで、任意のデータフェーズをトランザクションの最終フェーズとしてマークできます。ターゲットがTRDY#をアサートした次のサイクルで、最後のデータ転送が完了し、両側がそれぞれのRDY#信号をデアサートし、バスは再びアイドル状態になります。マスターは、IRDY#をアサートする前にFRAME#をデアサートすることはできません。また、IRDY#をアサートした状態でターゲットがTRDY#をアサートするのを待っている間に、FRAME#をデアサートすることもできません。
唯一の小さな例外は、マスターによる中断(マスター終了)です。これは、どのターゲットもDEVSEL#で応答しない場合に発生します。このような場合、TRDY#を待つのは明らかに無意味です。しかし、この場合でも、マスターはFRAME#をディアサートした後、少なくとも1サイクルはIRDY#をアサートする必要があります。(通常、マスターはDEVSEL#を受信する前にIRDY#をアサートするため、IRDY#を1サイクル長くアサートしておく必要があります。)これは、FRAME#ラインでバスターンアラウンドのタイミングルールが遵守されるようにするためです。
ターゲットはSTOP#をアサートすることでイニシエーターにバーストの終了を要求します。イニシエーターは、次の正当なタイミングでFRAME#をデアサートすることでトランザクションを終了します。さらにデータを転送したい場合は、別のトランザクションで転送を続行します。ターゲットがこれを行うには、いくつかの方法があります。
イニシエータがターゲットからの切断要求を認識し、FRAME#をデアサートして応答するまでには、常に少なくとも1サイクルかかります。これには2つのサブケースがあり、どちらも所要時間は同じですが、1つは追加のデータフェーズを必要とします。
ターゲットが切断を要求すると同時にイニシエーターがバーストを終了する場合、追加のバス サイクルは発生しません。
メモリ空間アクセスの場合、バースト内のワードは複数の順序でアクセスされる可能性があります。不要な下位アドレスビットAD[1:0]は、イニシエータが要求した順序を伝えるために使用されます。特定の順序をサポートしないターゲットは、最初のワードの後にバーストを終了させる必要があります。これらの順序の一部は、すべてのPCIデバイスで設定可能なキャッシュラインサイズに依存します。
| A[1] | あ[0] | バースト順序(16バイトのキャッシュライン) |
|---|---|---|
| 0 | 0 | 線形増分 (0x0C、0x10、0x14、0x18、0x1C、...) |
| 0 | 1 | キャッシュライントグル (0x0C、0x08、0x04、0x00、0x1C、0x18、...) |
| 1 | 0 | キャッシュライン ラップ (0x0C、0x00、0x04、0x08、0x1C、0x10、...) |
| 1 | 1 | 予約済み(最初の転送後に切断) |
キャッシュ ライン内の開始オフセットが 0 の場合、これらすべてのモードは同じ順序に縮小されます。
キャッシュライントグルモードとキャッシュラインラップモードは、クリティカルワードファーストのキャッシュラインフェッチ方式の2つの形式です。トグルモードは、指定されたアドレスとインクリメントカウンタのXOR演算を行います。これはIntel 486およびPentiumプロセッサのネイティブ順序です。実装にキャッシュラインサイズを知る必要がないという利点があります。
PCIバージョン2.1ではトグルモードが廃止され、キャッシュラインラップモード[ 32 ]が追加されました。このモードでは、フェッチは線形に進行し、各キャッシュラインの末尾でラップアラウンドします。1つ のキャッシュラインのフェッチが完了すると、フェッチは次のキャッシュラインの開始オフセットにジャンプします。
ほとんどの PCI デバイスは、標準的なキャッシュ ライン サイズの限られた範囲のみをサポートしています。キャッシュ ライン サイズが予期しない値にプログラムされている場合、シングル ワード アクセスが強制されます。
PCI は I/O および設定空間へのバーストアクセスもサポートしていますが、リニアモードのみがサポートされています。(このモードはほとんど使用されず、一部のデバイスではバグが発生する可能性があります。デバイスによってはサポートされていない可能性があり、シングルワードアクセスも適切に強制されません。)
これは、マスターによって終了される、可能な限り最高速度の 4 ワード書き込みバーストです。
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ AD[31:0] ---<___X___X___X___X___>---<___> ___ ___ ___ ___ ___ C/BE[3:0]# ---<___X___X___X___X___>---<___> | | | | ___ IRDY# ^^^^^^^^\______________/ ^^^^^ | | | | ___ TRDY# ^^^^^^^^\_____________/ ^^^^ | | | | ___ 開発番号 ^^^^^^^^\______________/ ^^^^^ ___ | | | ___ フレーム番号 \_______________/ | ^^^^\____ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7
クロック エッジ 1 では、イニシエーターはアドレスとコマンドを駆動し、FRAME# をアサートしてトランザクションを開始します。他の信号はアイドル状態 (^^^ で示されます) で、マザーボードのプルアップ抵抗によってハイにプルアップされています。これがそれらのターンアラウンド サイクルである可能性があります。サイクル 2 では、ターゲットは DEVSEL# と TRDY# の両方をアサートします。イニシエーターも準備完了であるため、データ転送が発生します。これはさらに 3 サイクル繰り返されますが、最後のサイクル (クロック エッジ 5) の前に、マスターは FRAME# をデアサートして、終了であることを示します。クロック エッジ 6 では、AD バスと FRAME# は駆動解除され (ターンアラウンド サイクル)、他の制御ラインが 1 サイクルの間ハイに駆動されます。クロック エッジ 7 では、別のイニシエーターが別のトランザクションを開始できます。これは、他の制御ラインのターンアラウンド サイクルでもあります。
同等の読み取りバーストにはもう 1 サイクルかかります。これは、ターゲットが TRDY# をアサートする前に AD バスが反転するまで 1 サイクル待つ必要があるためです。
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ AD[31:0] ---<___>---<___X___X___X___>---<___> ___ _______ ___ ___ ___ C/BE[3:0]# ---<___X_______X___X___X___>---<___> ___ | | | | ___ IRDY# ^^^^\___________________/ ^^^^^ ___ _____ | | | | ___ TRDY# ^^^^ \_____________/ ^^^^ ___ | | | | ___ 開発番号 ^^^^\___________________/ ^^^^^ ___ | | | ___ フレーム番号 \___________________/ | ^^^^\____ _ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7 8
ターゲットによって終了された高速バーストには、最後に追加のサイクルが存在します。
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ AD[31:0] ---<___>---<___X___X___X___XXXX>---- ___ _______ ___ ___ ___ ___ C/BE[3:0]# ---<___X_______X___X___X___X___>---- | | | | ___ IRDY# ^^^^^^^\_______________________/ _____ | | | | _______ TRDY# ^^^^^^^ \_____________/ ________________ | ___ 停止# ^^^^^^^ | | | \_______/ | | | | ___ 開発番号 ^^^^^^^\_______________________/ ___ | | | | ___ フレーム番号 \_______________________/ ^^^^ _ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7 8
クロック エッジ 6 では、ターゲットは停止することを示します (データあり) が、イニシエーターはすでに IRDY# を低く保持しているため、5 番目のデータ フェーズ (クロック エッジ 7) が発生し、その間はデータは転送されません。
PCI バスはパリティ エラーを検出しますが、操作を再試行してエラーを修正しようとはしません。これは純粋に障害の通知です。このため、パリティ エラーは発生する前に検出する必要はなく、PCI バスは実際には数サイクル後にパリティ エラーを検出します。データ フェーズでは、AD[31:0] ラインを駆動しているデバイスが、それらのラインと C/BE[3:0]# ラインの偶数パリティを計算し、1 サイクル後に PAR ラインに送信します。AD バスのすべてのアクセス ルールとターンアラウンド サイクルは、1 サイクル後に PAR ラインに適用されます。AD バスをリッスンしているデバイスは、受信したパリティをチェックし、その 1 サイクル後に PERR# (パリティ エラー) ラインをアサートします。これにより通常はプロセッサ割り込みが生成され、プロセッサは PCI バスでエラーを検出したデバイスを検索できます。
PERR#ラインは、ターゲットが選択された後、データフェーズでのみ使用されます。アドレスフェーズ(またはスペシャルサイクルのデータフェーズ)でパリティエラーが検出された場合、それを監視するデバイスはSERR#(システムエラー)ラインをアサートします。
一部のバイトが C/BE# 行によってマスクされ、使用されていない場合でも、それらのバイトには定義された値が存在する必要があり、この値を使用してパリティを計算する必要があります。
PCIバス信号を駆動する異なるデバイス間でのターンアラウンドサイクルが必要となるため、一般的にはPCIバストランザクション間にアイドルサイクルが必要です。ただし、状況によっては、このアイドルサイクルをスキップし、ある転送の最終サイクル(IRDY#アサート、FRAME#デアサート)から次の転送の最初のサイクル(FRAME#アサート、IRDY#デアサート)に直接移行することが許可されます。
イニシエーターは、次の場合にのみバックツーバック トランザクションを実行できます。
追加のタイミング制約は、ターゲット制御ライン、特にDEVSEL#のターンアラウンドの必要性から生じる可能性があります。ターゲットは、最終データフェーズの次のサイクル(バックツーバックトランザクションの場合はアドレスフェーズの最初のサイクル)でDEVSEL#をデアサートしてハイレベルにします。アドレスフェーズの2番目のサイクルはDEVSEL#のターンアラウンドのために予約されているため、ターゲットが前のサイクルと異なる場合、3番目のサイクル(中程度のDEVSEL速度)までDEVSEL#をアサートしてはなりません。
この問題が発生しないケースの一つは、イニシエータが何らかの方法で(おそらくアドレスの上位ビットが十分に共有されているため)2回目の転送が前回と同じターゲット宛てであることを知っている場合です。この場合、イニシエータは連続したトランザクションを実行できます。すべてのPCIターゲットはこれをサポートする必要があります。
ターゲットが要件を追跡することも可能です。高速DEVSELを一度も実行しない場合は、要件は容易に満たされます。高速DEVSELを実行する場合は、以下の条件が満たされない限り、中速DEVSELまで待機する必要があります。
この機能を持つターゲットは、PCI 構成レジスタ内の特別なビットによってそれを示します。バス上のすべてのターゲットがこの機能を持っている場合、すべてのイニシエーターはバックツーバック転送を自由に使用できます。
減算型デコード バス ブリッジは、バックツーバック サポートをアドバタイズするために、バックツーバック サイクルが発生した場合にこの追加の遅延を予期する必要があることを認識している必要があります。
PCI仕様リビジョン2.1以降、オプションで64ビットサポートが追加されました。これは、64ビットバス拡張AD[63:32]、C/BE[7:4]#、PAR64、および多数の追加電源ピンとグランドピンを備えた拡張コネクタを介して提供されます。64ビットPCIコネクタは、追加の64ビットセグメントによって32ビットコネクタと区別できます。
64ビットデバイス間のメモリトランザクションでは、データ転送速度を2倍にするために64ビットすべてを使用できます。メモリ以外のトランザクション(構成およびI/O空間アクセスを含む)では、64ビット拡張は使用できません。64ビットバースト中、バーストアドレス指定は32ビット転送と同様に機能しますが、アドレスはデータフェーズごとに2回インクリメントされます。開始アドレスは64ビット境界に揃っている必要があります。つまり、AD2は0である必要があります。中間アドレス(AD2 = 1)に対応するデータは、ADバスの上位半分で伝送されます。
64ビットトランザクションを開始するには、イニシエータはADバス上に開始アドレスをドライブし、FRAME#と同時にREQ64#をアサートします。選択されたターゲットがこのトランザクションで64ビット転送をサポートできる場合、DEVSEL#と同時にACK64#をアサートして応答します。ターゲットは、トランザクションごとに64ビット転送を許可するかどうかを決定できます。
アドレスフェーズ中にREQ64#がアサートされた場合、イニシエーターはバスの上位半分にアドレスの上位32ビットとバスコマンドのコピーを送信します。アドレスが64ビットの場合もデュアルアドレスサイクルが必要ですが、バスの上位半分は両方のアドレスフェーズサイクルでアドレスの上位半分と最終コマンドコードを伝送します。これにより、64ビットターゲットはアドレス全体を認識し、より早く応答を開始できます。
イニシエーターは、ACK64#なしでDEVSEL#がアサートされているのを確認すると、32ビットのデータフェーズを実行します。最初のデータフェーズでバスの上位半分で転送されるはずだったデータは、代わりに2番目のデータフェーズで転送されます。通常、イニシエーターはDEVSEL#を確認する前に64ビットすべてのデータを駆動します。ACK64#がない場合、データバスの上位半分の駆動を停止することがあります。
REQ64# および ACK64# ラインは、最後のデータ フェーズを除いてトランザクション全体にわたってアサートされたままになり、それぞれ FRAME# および DEVSEL# と同時にデアサートされます。
PAR64ラインはPARラインと同様に動作しますが、AD[63:32]とC/BE[7:4]#に偶数パリティを提供します。PAR64は、REQ64#がアサートされている場合にのみアドレスフェーズで有効です。PAR64は、REQ64#とACK64#の両方がアサートされている場合にのみデータフェーズで有効です。
PCIは当初、ライトバックキャッシュコヒーレンスをオプションでサポートしていました。これは、キャッシュ可能なメモリターゲットによるサポートを必要とし、バス上のキャッシュからSDONE(スヌープ完了)とSBO#(スヌープバックオフ)の2つのピンをリッスンしていました。[ 35 ]
これは実際にはほとんど実装されていなかったため、PCI仕様のリビジョン2.2から削除され、[ 16 ] [ 36 ]、リビジョン2.3ではピンがSMBusアクセスに再利用されました。[ 18 ]
キャッシュはDEVSEL#をアサートすることなく、すべてのメモリアクセスを監視します。キャッシュされる可能性のあるアクセスを検知した場合、SDONEをローに駆動します(スヌープは実行されません)。コヒーレンスをサポートするターゲットは、SDONEがハイになるまでデータフェーズの完了(TRDY#のアサート)を回避します。
キャッシュ内のクリーンなデータへの書き込みの場合、キャッシュは自身のコピーを無効化するだけでよく、この設定が確立されるとすぐにSDONEをアサートします。しかし、キャッシュにダーティデータが含まれている場合、キャッシュはアクセスを続行する前にそれを書き戻す必要があります。そのため、SDONEをアサートする際にSBO#をアサートします。これにより、アクティブなターゲットはTRDY#ではなくSTOP#をアサートするように指示され、イニシエータは接続を切断し、後で操作を再試行します。その間に、キャッシュはバスの調停を行い、データをメモリに書き戻します。
キャッシュ コヒーレンスをサポートするターゲットでは、キャッシュ ラインを越える前にバーストを終了する必要もあります。

PCIバスの開発やトラブルシューティングにおいては、ハードウェア信号の検査が非常に重要です。 ロジックアナライザとバスアナライザは、信号を収集、解析、デコードし、ユーザーが使いやすい形で表示するためのツールです。
シリーズは真の64ビットアダプタであり、ネットワークパイプラインを拡張してより高いスループットを実現すると同時に、標準の32ビットPCIスロットとの下位互換性も提供します。
ビット、33MHz PCIスロットとの下位互換性あり。
Adaptec SCSI Card 29160は64ビットPCIカードですが、32ビットPCIスロットでも動作します。32ビットPCIスロットに装着すると、カードは自動的に低速の32ビットモードで動作します。
{{citation}}:|archive-url=形式が正しくありません: タイムスタンプ (ヘルプ)。CS1 メンテナンス: url-status (リンク)