PCIバスの特徴

  1. PCIバスは完全な32ビットのバスです。64ビットの転送もオプションとして使用する ことが可能です。
  2. アドレス空間:32ビット(4Gバイト)のメモリアドレス空間、32ビット(4Gバイト)の I/Oアドレス空間と256バイトのコンフィギュレーションアドレス空間があります。
  3. PCIバスは完全同期バスです。リセットとインタラプトを除いて各信号線はクロック の立上りエッジを基準にして動作します。クロックの周波数は最大33MHzと規定されて います。
  4. 動作電圧:TTLの特性を前提とした5V系とCMOSの特性を前提とした3.3V系があります。 高速動作を実現するためにオープンドレーンをほんとんど使用しません。オープン ドレーンでは信号線が2つ以上のドライバによって駆動されてもドライバ間の衝突が 起こらない反面、'L'レベルから'H'レベルに戻る時間がプルアップ抵抗に依存し、 バスの高速化が実現しにくいので、PCIバスではオープンドレーンを使用するのは SERR#(エラーの発生を知らせる信号線、#は負論理を表す)とインタラプトのみです。 ドライバ間の衝突を避けるため、ドライバ切り替えのための1クロック(Turn around clock)が必要です。
  5. バーストデータ転送が基本です。高速データ転送の意味がでてくるのは多量のデータを 連続に転送する時です。PCIバスはバーストデータ転送を基本とします。1つのバスサイ クル(バスが1つのイニシエータによって占有されてから開放するまでのサイクル)の中で 複数のデータ転送が行なわれます。
  6. アドレスバスとデータバスは同じ信号線を使用します。バスサイクルの中で、アドレス フェーズとデータフェーズを分ける(時分割)ことにより、同じ32本の信号線をアドレス/ データバスとして使用します(これによりPCIバスの信号線数が大幅に削減され、PCIバス の実装のコストダウンに継ります)。
  7. バスコマンド:イニシエータがバスサイクルのアドレスフェーズで4本の信号線C/BE (command/Byte Enable)[3〜0]を駆動することによりこれから実行しようとするコマンド を指定します。以下のようなコマンド類があります。
    メモリリード系(データをターゲットからイニシエータに転送)
    Memory Read(MR),Memory Read Line(MRL),Memory Read Multiple(MRP).
    メモリライト系(データをイニシエータからターゲットに転送)
    Memory Write(MW),Memory Write and Invalidate(MWI)
    I/O 系
    I/O Read と I/O Write
    コンフィギュレーション系
    コンフィギュレーションレジスタにアクセスするためのコマンド。
    Configuration Read と Configuration Write.
    デュアルアドレスコマンド
    64ビットを転送するためのコマンド。
    その他
    Interrupt Acknowledge Cycle, Special Cycle.
  8. パリティチェックとエラー通知:バスの信頼性を高めるため、PCIバスでは32本のアドレ ス/データバスと4本のC/BE線にパリティチェック用のパリティ線PARが付加されます。
  9. コンフィギュウレーションサイクルによる初期化(詳細は後述)。

PCIバスの主な信号線

[注意]使用する記号について
#は負論理を表します。
bus は信号線がbus 接続であることを示します。
point to point は信号線が point to point 接続であることを示します。

/home2/students/nguyen/tex/pict/pcibus/signal.xfig を参照
  1. システム信号

    CLK(point to point)
    バス上の信号がこのクロックに同期して動作します。
    RST#(bus)
    源源投入時及び、システムのリセット時にアクティブにされます。RST#が アクティブにされるとPCIバス上のすべてのデバイスに対し、コンフィギュレーションサイクルが実行されます。
  2. アドレス/データ・バス

    AD[31〜0](bus)
    アドレスフェーズではアドレスバスとして、データフェーズではデータバスとして使用 されます。データバスとして使用される時は、32本の信号線は8本ずつの4つのバイト・ レーンに分けられます。
    C/BE[3〜0]#(Command/Byte Enable)(bus)
    アドレスフェーズではコマンドバスとして、データフェーズでは Byte Enable (BE[3], BE[2], BE[1], BE[0]はそれぞれAD[31]〜AD[24],AD[23]〜AD[16],AD[15]〜AD[8], AD[7]〜AD[0]のバイト・レーンに対応し、イニシエータは対応するBE線をアクティブに することによってどのバイト・レーンを使用するか指定します)として使われます。
  3. インターフェース制御信号

    FRAME#(bus)
    バスサイクルが実行されている間はイニシエータによってアクティブにドライブさ れます。
    IRDY#(Initiator ReaDY)(bus)
    イニシエータによって駆動され、イニシエータがデータ転送可能な状態にあること を示します。
    TRDY#(Target ReaDY)(bus)
    ターゲットによって駆動され、ターゲットがデータ転送可能な状態にあることを 示します。
    DEVSEL#(DEVice SELect)(bus)
    イニシエータがバスに出力したコマンドとアドレスをデコードし、自分が転送相手 のターゲットに指定されたと判断したデバイスがこの信号をアクティブに駆動します。
    IDSEL#(Initialization Device (?) SELect)(poin to point)
    コンフィギュレーションサイクルで、対象となるターゲットデバイスを指定するために 使われます。
  4. アービトレーション信号

    REQ#(REQuest)(point to point)
    バスを使用したいデバイスがREQ#をアクティブにし、セントラルアービタに対して バス使用権を要求します。
    GNT#(GraNT)(point to point) セントラルアービタがGNT#をアクティブにドライブすることによって、バスの使用許可 をイニシエータに与えます。
  5. エラー通知信号

    PERR#(Parity ERRor)
    データを受け取るデバイスがパリティエラーを発見した時にこの信号をアクティブ にします。
    SERR#(SEvere ERRor)
    バスあるいはシステム全体の致命的なエラーを発見したデバイスによってドライブされます。
  6. インタラプト信号

    INTA#,INTB#,INTC#,INTD#があります。

戻る