FC2カウンター FPGAの部屋 2012年08月02日
FC2ブログ

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

FPGAの部屋

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

ビットマップ・ディスプレイ・コントローラの作製8(デバック1)

AXI4バスに接続するビットマップ・ディスプレイ・コントローラの作製7(MCBインプリメント4)”の続き。

今回は、どうしてMicroBlazeからDDR2 SDRAMがRead/Writeできないのか?探ってみることにした。具体的には、ChipScope AXI Monitor を追加して、AXIバスの動作をチェックすることにした。ChipScope AXI Monitor の追加の仕方については、”ChipScope AXI Monitor を試してみた”を参照のこと。ChipScope AXI Monitor の使い方に関しては、このブログに書いてあるので、ここでは詳しく書かない。

・”ChipScope AXI Monitor を試してみた”に従って、ChipScope AXI Monitor IPを追加した。なお、IP追加時の設定については下図を参照。axi_s6_ddrx_0のAXIバスを監視する。前回組み込んだProtocol Checker は組み込まなかった。
BitMapDispCont_60_120801.png

・XPSに戻るとchipscope_axi_monitor_0 が追加されて、MON_AXIは、axi_s6_ddrx_0.S0_AXIに接続されていた。
BitMapDispCont_61_120801.png

・Portsタブをクリックした時のchipscope_axi_monitor_0 の設定。
BitMapDispCont_62_120801.png

・XPSを終了して、PlanAhead14.2にもどって、論理合成、インプリメント、ビットストリームの生成を行った。下の画面は終了後だ。
BitMapDispCont_63_120801.png

・PlanAheadからChipScope Pro を立ち上げた。

・SDKにハードウェアをエクスポートしてSDKを立ちあげた。デバックモードでXMDを使用して、MCBのアドレスにWriteしてみた。Writeはうまくコマンドが終了していたので、最初にみることにした。ChipScope Pro のトリガをAXI_AWVALID に設定して、トリガ待ちに設定し、下のコマンドを入力した。

XMD% mwr 0x20000000 0x12345678


・キャプチャできたAXI4バスの動作を下に示す。
BitMapDispCont_64_120801.png

AXI4バスのパラメータを下に示す。(パラメータの値は、”AXI4バスのパラメータの意味”を参照のこと)

AWLEN -> 00 :転送長は1
AWSIZE -> 2 :1回のデータ転送で4バイト(32ビット)転送
AWBURST -> 1 :INCR  (アドレスをインクリメント)
AWLOCK -> 0 :ノーマル・アクセス
AWCACHE -> 0 :Device Non-bufferable
AWPORT -> 0 :Unprivileged access, Secure access, Data access

AXI_WDATA -> 1234567812345678
AXI_WSTRB -> 0F :AXI_WDATAの下4バイトが有効


・AWVALIDが1にアサートされているが、AWREADYが1にならない。axi_s6_ddrx_0がAWREADYをアサートしていないということになる。次にだいぶ時間が経過してしまったが、もう一度、シングルランで波形をキャプチャしてみた。それが下の図だ。
BitMapDispCont_65_120801.png

・AWVALIDが1になったままになっている。AWREADYが1にならないようだ。ちゃんとaxi_s6_ddrx_0が実装できているんだろうか? FPGA Editor で確かめてみることにした。FPGA Editor を立ちあげ、List1ウインドウで、*axi_s6_ddrx_0* で検索してaxi_s6_ddrx_0を表示させてみた。
BitMapDispCont_66_120801.png

しっかり、実装されていて問題は無いように見えた。やはり、32ビット幅、AXI4 Liteバスから64ビット幅AXI4バスにアクセスしているのがダメなのか?(MicroBlazeはAXI4 Lite Master 32ビットデータバス幅で、そこからReadコマンドを発行して、axi_s6_ddrx_0(MCB) のAXI4 Slave 64ビットデータ幅のデータをReadしようとしている)
AXI4バスのパラメータでも、AWSIZEが2で、4バイト転送になっている。DDR2 SDRAMは16ビットバス幅で、DDR2なのでプリフェッチ4と言うことは、64ビットデータが最小単位になる。ここでのAXI4バスアクセスは4バイト長(AWSIZEから)、つまり32ビットデータなので、DDR2 SDRAMに書き込むとすれば、後の32ビットデータはDMをインアクティブにしてWrite動作はしても書き込まないようにする必要がある。その辺の動作に齟齬があるのかもしれない?もしくは、そういう動作はできないのかも? axi_interconnect にそういう設定がないかどうか?調べてみたい。
  1. 2012年08月02日 04:57 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0