AXI4 Slave IPの作製

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする1(仕様の検討) 

キャラクタ・ディスプレイ・コントローラの仕様の変更”で作ったキャラクタ・ディスプレイ・コントローラをAXI4スレーブ・デバイスとして、MicroBlaze のシステムに接続しようと思った。つまり、AXI4バスのスレーブ・デバイス用のラッパーを作ろうと思っている。今回は仕様の検討を行った。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする2(Pcoreテンプレート生成)

ar37425のAXI4 Masterサンプルを試す1(AXI_Master IPの登録、接続)”で作成したプロジェクトをコピーして、キャラクタ・ディスプレイ・コントローラのAXI4スレーブ・デバイスを作成することにした。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする3(BFMシミュレーション)

最終的にはXPSのAXI4バスのカスタム・スレーブIPを作るのが目的なのだが、XPS上でのシミュレーションは全体のシミュレーションとなってコストが高い。よって、その前にAXI4バスの接続をするHDLファイルレベルで単体テストを行った。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする4(BFMシミュレーション2)

前回、AXI4バス・マスタBFMのWrite側を作ってテストしたので、今度は、AXI4バス・マスタBFMのRead側を作成してテストした。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする5(BFMシミュレーション3)

”キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする4(BFMシミュレーション2)”のテストベンチ (CDC_axi_slave_tb.v) をテストベンチ部分とAXI4バスBFM 部分に分けた。それを下に示す。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする6(BFMシミュレーション4)

今 回は、バーストWrite, バーストReadの最中にマスタから任意のWaitを入れる機能を実現してみた。どうやったかというと、$unsigned($random)で整数のラ ンダム値を生成して、それを設定値+1で割った余りを使ってWait数を決めることにした。そうすると0からtask に設定した値のまでのWaitがランダムに入るはずだ。これで、マスタ側でWaitしてもAXI4バスのスレーブIPがきちんとデータを出せるかどうかを 検証することができる。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする7(BFMシミュレーション5)

今 度は、OVLの様なチェッカを組み込む。OVLの機能の概略は、”OVL(Open Verification Library)を試してみる7(OVLチェッカの概要)”を参照のこと。今回は、ovl_increment、ovl_handshake、 ovl_never を使用する。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする8(BFMシミュレーション6) 

”キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする7(BFMシミュレーション5)”で、チェッカを実装して、バスのプロトコルをテストすることができた。今回は、任意の回数繰り返して、チェッカにエラーが出ないかどうかを調べる。


以下の8.1から8.4は、AXI4バスで書き込みトランザクションの時に、MasterがAWREADYを待って、WVALIDをアサートしていけないというルールがあったのを忘れていたため、以前の内容を修正しています。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする8.1(BFMシミュレーション7) 

書 き込みトランザクションの時に、MasterがAWREADYを待って、WVALIDをアサートしていけないというルールがあったのを忘れていたので、 AXI Slave IP用のBFMが間違っていたことがわかったので修正する。ちなみにWriteだけ変更している。Readは変更していない。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする8.2(テストベンチのVerilogコード)

今回はテストベンチのVerilogコードを下に貼っておく。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする8.3(AXI Master BFMのVerilogコード) 

今 回はAXI Master BFMを貼っておく。AXI Master BFMと言っても、汎用的に使えるものではなく、トランザクションの並列実行に対応していない。キャラクタ・ディスプレイ・コントローラ AXI Slave IPの簡易的な単体テストとしては十分に使えると思う。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする8.4(OVLチェッカのVerilog コード)

OVL チェッカはOVL(Open Verification Library)を使用して、AXIバスの信号が規格から外れていないか?をチェックするチェッカだ。OVLだけでなく、Verilogコードも書いて チェックしてあるが、まだまだルールが足りないと思っている。現在のOVL_Checker.v を下に貼っておく。


 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする9(インプリメント1)

”キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする8(BFMシミュレーション6)”で、シミュレーションを行なって不具合が出なかったので、今度はインプリメントしてみることにした。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする10(インプリメント2)

前回、XPSにキャラクタ・ディスプレイ・コントローラのAXI4バス・スレーブIP版を入れることができた。今回は設定をしていく。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする11(インプリメント3)

”キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする10(インプリメント2)”でインプリメントすることができたので、今度はソフトウェアを作成して、キャラクタ・ディスプレイ・コントローラをテストする。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする12(現状) 

現状報告。シミュレーションがエラーでコンパイルできずに悩んでいる。色々悩み事があるのだ。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする13(Writeはうまく行った) 

windy さんから、貴重なアドバイスを頂いてキャラクタ・ディスプレイ・コントローラ AXI4バス・スレーブIPにMicroBlazeからアクセスすることができた。MicroBlaze のM_AXI_DCとM_AXI_IC は、キャッシュ直結のインターコネクトで接続方法に工夫が必要。

 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする14(AXI4スレーブIPのソース公開) 

”キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする13(Writeはうまく行った)”で、Write側はうまく行ったと思われるキャラクタ・ディスプレイ・コントローラAXI4バス・スレーブIPのソースをブログに貼っておこうと思う。長いです。

 AXIスレーブIPのパラメータ

” キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする9(インプリメント1)”でXPSからAdd IPでキャラクタ・ディスプレイ・コントローラをAXI4スレーブIPとしてシステムに入れたが、その際にパラメータはデフォルトとした。ダイアログにど のようなパラメータがあるかを見ていきたい。

inserted by FC2 system