はじめに
1500円 ZYNQ 基板(EBAZ4205)を使い、前回までの投稿と組み合わせて、
FPGAプログラミング大全Xilinx編(第2版)の
11-1「パターン描画回路」
11-2「ビットブロック描画回路」
の動作確認を行います。
プロジェクトの概要
前回の投稿
11-1 パターン描画回路 / 11-2 ビットブロック描画回路
で、高位合成を使って描画回路の IP を 2 つ作成しました。
これを、前々回の投稿 グラフィック表示回路 に組み込んで、回路を完成させます。
この回路を使って、PS のプログラムで描画を行い、HDMI から画面出力します。
EBAZ4205 からの HDMI 出力には、
1500円ZYNQ基板でFPGAプログラミング大全Xilinx編(第2版)の実習 2-3 HDMIでパターン表示
で作成した HDMI 出力ケーブルを使用します。
プロジェクトの準備
前々回に作成したプロジェクト display に、patblt と bitblt を合体させます。
グラフィック表示回路 display の Vivado プロジェクトを、デスクトップに用意しておきます。
\Desktop\display : グラフィック表示回路のプロジェクトのフォルダ
\Desktop\COMMON : 回路で使用される HDMI/VGA 出力回路の IP
前回作成した IP のフォルダも、デスクトップに用意しておきます。
\Desktop\patblt_ip : パターン描画回路の IP
\Desktop\bitblt_ip : ビットブロック描画回路の IP
Vitis HLS 2020.1 のバグ対策
Vitis で作成・出力した IP には、Makefile に問題があるとのことですので、その対応を行います。
p.478 の囲み記事「API の Makefile にバグ?」
を参照して、2つの IP のフォルダに含まれている Makefile に、テキストエディタで変更を行います。
それぞれ、
\Desktop???blt_ip\patblt\solution1\impl\ip\drivers???blt_v1_0\src
にある Makefile について、18行目の
OUTS = *.o
を、
OUTS = $(addsuffix .o, $(basename $(wildcard *.c)))
に変更します。
2 つの IP の Makefile を変更したら、次に移ります。
display プロジェクトへの合体
まず、Vivado で display プロジェクトを開きます。
各 IP の IP カタログへの登録
PROJECT MANAGER の下の Settings をクリック。
IP - Repository を開いて、追加の 2 つの IP を登録します。
(bitblt_ip, patblt_ip)
IP が 4 つとも黒字で正しく登録できていれば、OK を押して閉じます。
流用デザインに IP を追加
Sources ペインの design_1_i をダブルクリックして、Diagram を開きます
Add IP (+ ボタン) から、Bitblt と Patblt を配置します。
Run Connection Automation をクリックして、bitblt_0 と patblt_0 にチェックして、OK を押します。
axi バスが自動接続され、ダイアグラムが完成します。
Regenerate Layout すると、こうなりました。
Validate Design して、問題なければ完成です。
コンパイルとエクスポート
Generate Bitstream でコンパイルします。
問題なくコンパイルが完了したら、Include bitstream でエクスポートします。
File → Export → Export Hardware → Platform type = Fixed で Next → Include bitstream で Next →
XSA file name: display_pat_bit
Export to: \desktop\display_pat_bit.vitis
で Next → Finish
display.xsa が作成され、エクスポートが完了しました。
この回路のリソース使用率はこのぐらいでした。
動作確認
Tools - Launch Vitis IDE で、Vitis を起動します。
Create Platform Project で、プラットフォームプロジェクトを作成します。
Project name: display_pat_bit
Location: \Desktop\display_pat_bit.vitis
Create from hardware specification (XSA) で Next したら、display_pat_bit.xsa を指定すると、プロットフォームプロジェクトが作成されます。
作成されたプラットフォームプロジェクトは、例によって Out-of-date ですので、Build Project して解消します。
次にアプリケーションプロジェクトを作成します。
File - New - Application Project... でウィザードを開いたら、
Applicaion Project name は disp_pat_bit_test とし、Empty Application で作成します。
アプリケーションプロジェクトの src フォルダに、大全のサポートファイルのフォルダ
\Zybo_Z7-10\dai11sho\display_pat_bit\VITIS
から、pat_bit_test.c を登録します。
前々回のグラフィック表示回路、グラフィック表示回路-1.テストプログラムの変更
で説明した通り、フレームバッファのアドレスの変更が必要です。
L24, L25 にアドレス指定がありますので、
#define VRAM 0x10000000 /* page 0 */
#define TEX 0x1012c000 /* page 1 */
を、
#define VRAM 0x08000000 /* page 0 */
#define TEX 0x0812c000 /* page 1 */
に変更しておきます。
プログラムの実行(disp_test.c)
・アプリケーションプロジェクトを Build Project します。
・Debug Configurations を作成して、デバッグを開始します。
・disp_test.c のブレークポイント指定3箇所にブレークポイントを設定してから、Resume ボタンを押していきます。
(disp_test.c の行番号表示の左横の網部分をダブルクリックすると、ブレークポイントが設定できます)
resumuボタンを押してスタートさせたあと、
2番目のブレークポイントでの表示。(パターン描画)
3番目のブレークポイントでの表示。(演算つきビットブロック描画)
無事、動作させることができました。
フェードインアウト&ワイプの実行(fade_wipe.c)
プラットフォームプロジェクトをそのまま使用して、もう一つアプリケーションプロジェクトを作成します。
File - New - Application Project... でウィザードを開いたら、
Applicaion Project name は fade_wipe とし、Empty Application で作成します。
作成したアプリケーションプロジェクトの src フォルダに fade_wipe.c を登録します。
L51 に、フレームバッファのアドレスがあります。
return 0x10000000 + XSIZEYSIZE4*page;
を、
return 0x08000000 + XSIZEYSIZE4*page;
に変更します。
p.434 コラム I の通り、プラットフォームプロジェクトの BSP を変更します。
FAT ファイルシステムの設定ができたら、プラットフォームプロジェクトを再ビルドします。
FAT フォーマットした microSD カードに、
\Zybo_Z7-10\dai11sho\display_pat_bit\VITIS
から、2 つの raw ファイルをコピーします。
FPGA_boards.raw
funamori.raw
できた MicroSD カードを、EBAZ4205 のソケットに挿しておきます。
すべての準備ができたら、
Debug Configurations を作成して、デバッグを開始します。
ブレークポイントの設定はありません。
microSD からファイルを読み込んで、フェードイン・アウトと、ワイプが繰り返し動作する映像が HDMI 出力から出てきます。
動作している様子は、下記のようになります。
まとめ
FPGAプログラミング大全Xilinx編(第2版)の課題11-1
「パターン描画回路」
と、課題11-2
「ビットブロック描画回路」
を EBAZ4205 で実習することができました。