SynthesijerでAXIたたいてみたよ,なサンプルです
DSForum2014やESS2014で紹介させていただいた,InreviumのZynqボードTD-7Z-020-EMCを使って,HDMIディスプレイにサインカーブの出力をしてみたサンプルです.サインカーブを描くというのがやりたいことではなくて,”AXI-HP経由でDDRメモリにアクセスするモジュール”を”Synthesijerを使ってJavaで書いた”というのをご覧いただければ,と思っています.
生成したVHDLを含むVivadoプロジェクトのアーカイブをhttp://www.wasa-labo.com/zynq_test_20141023.zipにまとめています.
簡単にデモの内容説明
サインカーブを描いているメインのソースコードはRGBTest.javaです.実際の描画は,点を打つpsetと四角を描くfill_rectというメソッドを実装したTestFrame.javaが担当しています.
その下では,SimpleAXIMemIface32RTLTestのread/writeメソッド,さらに,その下でAXIリード/ライトを行うモジュールSimpleAXIMemIface32RTLでメモリアクセスを行っています.SimpleAXIMemIface32RTLは残念ながらJavaでは書いていなくて,Synthesijerの下位ライブラリを使ってHDLを組み立てることで記述しています.
ユーザアプリを書く人(このケースではTestFrame以上のレイヤのコードを書く人)は,AXIを意識することなく,SimpleAXIMemIface32RTLTestのリード/ライトメソッドを使ってメモリアクセスができます.
ちなみに,HDMI信号(HSYNCやVSYNCとデータ)を作るモジュールは,SyncGenerator.scalaで記述しています.これは,Synthesijerの下位ライブラリを簡単に組み立てられるScalaによるDSL(Synthesijer.scalaと読んでいます)を使って記述しているコードです.