FC2カウンター FPGAの部屋 PCIモジュール2
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

PCIモジュール2

PCIモジュール1でPCIのコンフィギュレーションを説明したが、今度はPCIターゲットアクセスについて書こうと思う。
PCIターゲットアクセスはパソコンのCPUからボード上のメモリを読み書きする時のアクセスだ。つまり自分から行動を起こすのではなく従属的に来た命令に応答するアクセスなのだ。
PCIモジュール1で説明した様にパソコンが電源ONしたときの初期化でPCIカードの機能ブロックごとにユニークな物理アドレスが割り振られている。パソコンのCPUがその物理アドレスにアクセスするとPCIターゲットアクセスが発生する。
例えば、PCIモジュール1のSDRAMメモリに書き込む時にはパソコンのCPUは物理アドレス0xF8000000に書き込むアクセスをチップセットに出す。チップセットはアドレスがPCIボードを指すことを認識するとPCIマスタアクセスを発生させる。そのPCIマスタアクセスは、PCIボードの立場から見るとPCIターゲットアクセスになるわけだ。
データ書き込みアクセスの手順はまずはマスタ(パソコンのCPU)が/REQをアサートする。アービタが/GNTをアサートするとマスタはバスを使えるので、/FRAMEと/IRDYが両方デアサートされるのを待って(バスが空くのを待って)、/FRAMEをアサートしながらアドレスを出力する。マスタは/FRAMEをアサートした後にデータの準備が出来たら/IRDYをアサートする。ターゲット(PCIボード)は/FRAMEがアサートされるときのアドレスを確認して、自分のアドレスだったら/DEVSELをアサートする。その後データを受け取る準備が出来たら/TRDYをアサートする。
/IRDYと/TRDYの両方がアサートされたときがデータが書き込まれたタイミングである。
シングル転送の場合は、/FRAMEは1クロック後にデアサートされる。データが書き込まれたら/IRDYと/TRDYの両方ともデアサートされてPCIターゲットアクセスが終了する。
私の作ったPCIターゲットモジュールはシングル転送のみ対応している。PCIターゲットアクセスのメインステートマシンを下に示す。
PCI_traget_access_060106.png

始めはidleから始まる。frame_bが0(アサート)されるとDecode_checkに遷移して、自分のアドレスがアクセスされているかを調べる。自分のアドレスでない時はbus_busyに遷移してPCIアクセスが終わるのを待つ。自分のアドレス(mydev='1')だったらリードからライトかを判断し、ライトの場合で次段のFIFOがいっぱいの時(tgt_write_busy='1')はtgt_discon_retryに遷移しリトライする。FIFOが空いている時はwrite_dataに遷移しデータをライトする。その後、turn_aroundに遷移してバスを放した後でidleに遷移してアクセス終了となる。
実際にPCIターゲットアクセス時のタイミングチャートを下に示す。
PCI_traget_access_2_060106.png

sregがステートマシンのステート。ladnodeがPCIバスのADに当たる。ADはアドレスとデータがマルチプレックスしているバスで、/FRAMEアサートされているときはアドレス、/IRDYがアサートされているときはデータが出力(リードの時は入力)される。64bit,66MHzPCIなのでADは64ビットである。
  1. 2006年01月07日 06:34 |
  2. PCI
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/119-eb51d142
この記事にトラックバックする(FC2ブログユーザー)