AXI Master IP コアの作製
AXI4 プロトコルの勉強1
XilinxのEDKはAXI4バスを使用することが出来る。今回はカスタム AXI
Master IP コアの作成を目指そうと思う。AXI4 Masterコアを作成できるようにAXIプロトコルについて学んで行くつもりだ。
AXI4
プロトコルの勉強2(読み出しバースト例)
、読み出しバースト例ついて勉強する。最初は、オーバーラップしない読み出しバースト例だ。次
に読み出しバーストがオーバーラップする例を示す。
AXI4
プロトコルの勉強3(書きこみバースト例)
今度は、AXI4の書きこみバースト例だ。オーバーラップしていない書き込みバースト例とオー
バーラップ書き込み例を示した。
AXI4バスの
マスタIPのテスト1(構想編)
XilinxのXPS上にAXI4バスのマスタIPを作ることにした。実装の手順を考えた。
ar37425
のAXI4 Masterサンプルを試す1(AXI_Master IPの登録、接続)
ar37425
\axi_master_v1_00_a\hdl\verilog\axi_master.vはサンプルコードが入っているので、これを使用してAXI4
マスタIPのサンプルの動作を確かめて見ることにした。今回はサンプルのAXI4マスタIPをXPSでADDして設定を行った。
ar37425
のAXI4 Masterサンプルを試す2(インプリメント)
インプリメントを行った。成功。
ar37425
のAXI4 Masterサンプルを試す3(SDK)
ar37425
のAXI4 Masterサンプルを試す4(シミュレーション)
なかなかシミュレーションのコンパイルが通らなかったが、他のアプリを落としたら、シミュレー
ションのコンパイルが通った。
ar37425
のAXI4 Masterサンプルを試す5(シミュレーション2)
AXI4 Masterサンプルのシミュレーションのさわりを紹介
ar37425
のAXI4 Masterサンプルを試す6(シミュレーション3)
Xilinx社のAXIバス回路のサンプルの動作を詳しく見ていこうと思う。AXI4
Burst Write と AXI4 Burst Read のシミュレーション結果を詳しく解説。
AXI4マスタ
IPの作製(仕様の策定)
AXI4マスタ
IPの作製2(単体シミュレーション)
キャラクタ・ディスプレイ・コントローラAXI4スレーブIPを駆動するAXI4マスタIPが
一応できたので、シミュレーションしてみた。
AXI4マスタ
IPの作製3(インプリメント)
単体シミュレーションを行なって大丈夫そうだったので、XPSでAXI4マスタIPをAddし
て、ISEでインプリメントしてみた。
AXI4マスタ
IPのパラメータ
”AXI4マスタIPの作製3(インプリメント)”で、CDCTEST AXI Master
をAdd
IPしてAXI4マスタIPとしてシステムに入れたが、その際にパラメータはデフォルトとした。ダイアログにどのようなパラメータがあるかを見ていきたい。
AXI4スレー
ブ・バス・ファンクション・モデル(BFM)の作製1
今
回はAXI4マスタIPを作る際に、対応するAXI4スレーブIPが出来ていたので、それで良いが、AXI4スレーブIPが無かった時に使える、なるべく
汎用のAXI4スレーブのBFMを作ることにした。全部の場合は網羅できないので、AXI4スレーブIPのタイプはRAMタイプとして、AXI4バスのト
ランザクションをシミュレーションできることを目的とする。つまり、バーストのタイプは INCR のみの対応となる。
AXI4スレー
ブ・バス・ファンクション・モデル(BFM)の作製2
ここでは、AXI4マスタIPを自作して、それを単体テストするために、AXI4スレーブIP
の代わりのBFMモデルを作成している。(axi_master_BFM.vhd)
AXI4スレー
ブ・バス・ファンクション・モデル(BFM)の作製3
axi_master_BFM.vhd
を貼っておく。Writeデータ転送時にランダムなWaitを発生できるようにしてある
(WRITE_RANDOM_WAIT=1)。Readデータ転送時はWaitしない設定 (READ_RANDOM_WAIT=0) にしてある。
AXI4スレー
ブ・バス・ファンクション・モデル(BFM)の作製4
前回ブログにVHDLコードを貼ったaxi_master_BFM.vhd
のRAMをbit_vector のarray にしてもstd_logic_vector のarray
と僅かな差しかないとのご指摘をツイッターで受けたのでやってみました。
AXI4バスで
DVI表示回路を作る(仕様の検討)
最
終的に作りたいのはAtlysボードのステレオカメラのどちらか、もしくは両方からカメラ画像をDDR2
SDRAMにWriteして、カメラデータをDVI表示回路で表示するシステムだ。しかし、CMOSカメラ(アプティナ社のMT9D112)は使用するの
が難しいので、DVI表示回路はしっかり動作するものを使いたい。カメラ制御用のI2C回路は私の作ったのはWriteだけだったが、MT9D112を制
御するためにはReadも必要ということがあって、DVI表示回路を先に作ることにした。
DVI
表示回路を先に作っても、表示するものがないとDDR2
SDRAMの初期値のパターンを表示しているだけとなり、表示させても正しのかどうかわからない。そこで、キャラクタ・ディスプレイ・コントローラのキャ
ラクタROMをAXI4 Lite Slave として実装し、MicroBlaze
を使用してソフトウェアでキャラクタROMを読んでビデオメモリ上にキャラクタのラスタデータを書いていこうと思う。
AXI4バスに
接続するビットマップ・ディスプレイ・コントローラの作製1(仕様)
Atlysボードを使用して、AXI4バスに接続するビットマップ・ディスプレイ・コントロー
ラ (BDC) を作製しようと思う。BDCはDDR2 SDRAMから画像のピクセルデータを適宜読んできて、HDMI端子にDVI信号を出力する回路だ。
AXI4バスに
接続するビットマップ・ディスプレイ・コントローラの作製2(コード製作)
Verilog ソースを作成した。
AXI4バスに
接続するビットマップ・ディスプレイ・コントローラの作製3(単体シミュレーション)
今
回はテストベンチとBFMを用意してbitmap_disp_cntrler_axi_master.v
単体でシミュレーションを行った。テストベンチ bitmap_disp_cntrler_axi_master_tb.v とAXI
Master用のBFMである axi_master_BFM.vhd のソースコードを貼った。
AXI4バスに
接続するビットマップ・ディスプレイ・コントローラの作製4(MCBインプリメント1)
AXI4バスに
接続するビットマップ・ディスプレイ・コントローラの作製5(MCBインプリメント2)
MCBインプリメントの続き。
AXI4バスに
接続するビットマップ・ディスプレイ・コントローラの作製6(MCBインプリメント3)
ま
だ、DDR2 SDRAMコントローラ(MCB)
しか実装していないが、これでインプリメントして動作を確認して見ることにした。それに制約ファイルでMCBの入出力ピンをしていないけれども、どの
MCBを使うか決まったところで入出力ピンは決まっているはずなので、それを確かめるためでもある。WriteはできてもReadは出来ていなかった。(と
思ったが、実はどっちもだめだった)
AXI4バスに
接続するビットマップ・ディスプレイ・コントローラの作製7(MCBインプリメント4)
MCBを別のAXI4 Interconnect に移動することにした。その場合は、AXI
to AXI Connector を間に介してAXI4 Interconnect 同士を接続する。やはりMicroBlazeからアクセス出来ない。
ビットマップ・
ディスプレイ・コントローラの作製8(デバック1)
今
回は、どうしてMicroBlazeからDDR2
SDRAMがRead/Writeできないのか?探ってみることにした。具体的には、ChipScope AXI Monitor
を追加して、AXIバスの動作をチェックすることにした。AWVALIDが1になったままになっている。AWREADYが1にならないようだ。MCBが応
答してない。
ビットマップ・
ディスプレイ・コントローラの作製9(BitMapDCの接続1)
今
回は、64ビットバーストReadを試して見られるので、ビットマップ・ディスプレイ・コントローラ(BitMapDC)
を追加してみることにした。元々はビットマップ・ディスプレイ・コントローラの作製なので、本当はこれがメインなのだが、MCBがMicroBlazeか
らアクセス出来ないため延び延びになってしまった。XPSでユーザーIPとして認識させる準備。
ビットマップ・
ディスプレイ・コントローラの作製10(BitMapDCの接続2)
今回はXPSでbitmap_disp_cntrler_axi_master
をユーザーIPとしてXPSのシステムに追加した。
ビットマップ・
ディスプレイ・コントローラの作製11(BitMapDCの接続3)
今回は、XPS上でbitmap_disp_cntrler_axi_master
の配線をつないだ。
ビットマップ・
ディスプレイ・コントローラの作製12(BitMapDCのインプリメント1)
PlanAheadに戻ってインプリメントを行った。
ビットマップ・
ディスプレイ・コントローラの作製13(実機で動作1)
インプリメント後、Atlysボードの電源をONして、iMPACTでコンフィギュレーション
してみた。HDMIコネクタを液晶ディスプレイに接続したところ、No Signal になってしまった。
ビットマップ・
ディスプレイ・コントローラの作製14(デバック1)
前
回、ビットマップ・ディスプレイ・コントローラが動作しなかったので、ChipScopeでデバックをすることにしたが、すでに
chipscope_axi_monitor_0 が入っていたので、このIPとchipscpe_icon_0
を削除してから、新たにPlanAheadでChipScope を入れた。前回のChipScopeの設定が残ってしまった。ChipScope
の設定の解除方法。
ビットマップ・
ディスプレイ・コントローラの作製15(デバック2)
前回デバックは出来るようになった。ChipScopeで見るとMCBへのアクセスが出来てい
ないようだがまだ良くわからない。今回はaxi2axi_connector_0 を削除してみることにした。
MCBの初期化終了信号が1になっていないことに気がついた。
ビットマップ・
ディスプレイ・コントローラの作製16(全体シミュレーション)
今回はXPS全体でシミュレーションを行うことにした。テストベンチ
(tb_system_stub.v) を貼りつけた。シミュレーションは正常に動作しているようだ。
ビットマップ・
ディスプレイ・コントローラの作製17(動き出した)
MCB
にキャリブレーションが終了せずに(cal_doneが0) だいぶ苦労してしまった。今までの自分でaxi_s6_ddrx IP (DDR2
SDRAM Controller)
を入れて作ったXPSプロジェクト入りのPlanAheadプロジェクトを使ってきたが、どうもaxi_s6_ddrx IP
が動かない。そこで違うプロジェクトで確かめてみることにした。それは、”
Atlys
ボードでXPSプロジェクトを試す1(XPSのプロジェクト作成、インプリメント)”で作成してあったXPSプロジェクト入りのISEプロジェク
トをISE14.2に変換し、ビットマップ・ディスプレイ・コントローラを入れて使用することにした。
ディスプレイに表示を出すことが出来たが、まだおかしい。
ビットマップ・
ディスプレイ・コントローラの作製18(動作した?)
前回は画面が流れていたので、回路がおかしかった。bitmap_disp_engine.v
を修正して画面が流れないようになった。(VGAです)AXI4バスの占有率を確かめた。また、画面サイズごとのバス占有率を計算した。
ビットマップ・
ディスプレイ・コントローラの作製19(HDLソースの公開)
動作したので、HDLソースを貼り付けた。
ビットマップ・
ディスプレイ・コントローラの作製20(DDR2をMicroBlazeと接続)
XPSのaxi2axi_connector
IPを使って、MicroBlazeとaxi_s6_ddrx_0(MCB)を接続して、MicroBlazeからDDR2
SDRAMのデータをRead/Writeしてみた。うまく行きました。
ビットマップ・
ディスプレイ・コントローラの作製21(画面にキャラクタを描画)
キャラクタROMのAXI4 Lite
IPからキャラクタのビットマップをMicroBlazeで読みだして、MicroBlazeでDDR2
SDRAMのビデオ・フレームバッファに書き込んで、キャラクタを表示することが出来た。
AXI4 Write
Transaction のステートマシン
今まで、AXI4 Write Transaction のステートマシンは、Address
ChannelとResponse Channelを一緒にしたステートマシンと Data Channel
用のステートマシンに分けていた。しかし、Write Response Channel はステートマシンにしておく必要も無く、BREADY をいつも
1 にしておいて、BVALID が来た時にエラーだったらエラー表示をすれば良いと思った。