1 PCIバスの基本的概念● アドレスバスとデータバスの構成 図1(a)に一般的なCPUのバスを示します.アドレスバス,データバス,メモリ空間かI/O空間のどちらを選択したかを示す信号,そして読み出しか書き込みかを示す信号などから構成されています.このバスに接続する周辺デバイスは,CPUがアクセスしているのはメモリかI/Oか,そしてそのアドレスはどこかをアドレスデコーダで調べ,自分が選択されていれば,読み出し/書き込み信号の方向にしたがって,データバスの内容を読み書きします. 図1(b)にアドレスバスとデータバスがマルチプレクスされたバスの場合を示します.アドレスバスとデータバスが同一の信号になった代わりに,現在出力されているのがアドレスなのかデータなのかを示す制御線が新たに追加されています.またADバスの値はアドレスからデータに切り替わるので,アドレスデコーダにはアドレスを保持するレジスタを実装する必要があります. ● アドレスデコード回路をプログラマブルに 図1(a)も図1(b)も,アドレスデコーダは固定した回路になっているので,このままではプラグ&プレイは実現できません.そこでアドレスデコーダをプログラマブルにするために,アドレス設定レジスタを用意して,アドレスデコード回路はアドレス保持レジスタとアドレス設定レジスタの内容を比較する回路を構成します. この構成の場合,CPUはデバイスにアクセスする前に,各デバイスのアドレス設定レジスタに適切なアドレスを割り当てておかなければなりません.これをアドレス設定サイクルと呼ぶことにします.またこのときに使う信号は,それぞれのデバイスに専用の信号線が割り当てられている点に注目してください.これにより,まだアドレスが割り当てられていない状態でも,アドレス設定レジスタだけはデバイスごとに独立してアクセスが可能になるのです. そして各デバイスにアドレスを割り当てた後,実際にバスアクセスを行うことができます〔図1(c)〕. この図1(c)には,PCIバスがISAバスなどと異なるさまざまな要素が凝縮されています. ● PCIコンフィグレーションの概念 PCIバスを理解するときに,コンフィグレーション空間というものがよく理解できないという方がいます.たしかに,メモリやI/Oでもない第3の空間といわれても,抽象的でよくわからないでしょう.しかし難しく考える必要はありません.図1(c)でいえばS0やS1を使ってアクセスするレジスタの空間が,コンフィグレーション空間なのです. ● PCIのバスコマンド 図1(c)を見るとわかりますが,S0/S1,MEM/IO,RD/WRの六つの信号線は,同時に複数の信号が“L”レベルになるタイミングはありません.これは情報が冗長になっていることを意味しています.そこでPCIでは,メモリなのかI/Oなのかコンフィグレーション空間なのか,そして読み出しなのか書き込みなのかを,4ビットにエンコードして表しています.これをバスコマンドと呼びます. ● データ転送の概念 データ転送を成立させるためには,まずデータ転送を行いたいデバイス(ここでは仮に親と呼ぶ)が「これからデータ転送をするぞ!」という宣言を出さなければなりません.またこの宣言と同時にアドレスとバスコマンドも出力します.バスにつながっている各デバイスは,このアドレスとバスコマンドをデコードして,転送相手が自分かどうかを確認します.もし自分が選択された場合は「は,はい!そのアドレスは私です!」と手をあげなければなりません(ここではかりに子と呼ぶ). 以降の内容は本誌を参照ください Copyright 2004 井倉 将実 |