2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1500円ZYNQ基板でFPGAプログラミング大全Xilinx編(第2版)の実習 11-1 パターン描画回路 / 11-2 ビットブロック描画回路

Last updated at Posted at 2021-04-06

はじめに

1500円 ZYNQ 基板(EBAZ4205)で、
FPGAプログラミング大全Xilinx編(第2版)の第11章
11-1「パターン描画回路」
11-2「ビットブロック描画回路」
について、高位合成と IP のエクスポートまで実習したいと思います。

スクショの枚数がとても多くなってしまったため、
11-2 後半の「動作確認」は、次の投稿に分割します。

全て Vitis HLS 上での作業になるため、この記事に EBAZ4205 は出てきません。
EBAZ4205 で高位合成を利用するための作業ということで、1500円ZYNQ基板シリーズの記事となっておりますw
33.png

プロジェクトの概要

C++ で記述されたパターン描画回路、ビットブロック描画回路を高位合成(C++ → RTL へ変換)し、それぞれ IP としてエクスポートします。

作成した 2 つの IP を、第9章で作成したグラフィック表示回路と合体して、回路を完成させます。
PS のプログラムで描画を行い、HDMI から画面出力します。

この記事では、プロジェクトの前半、IP パッケージのエクスポートまでを実習します。

パターン描画回路の高位合成と IP 作成

大全のサポートファイルから、
\XilinxFPGA_SE\Zybo_Z7-10\dai11sho\patblt_ip
フォルダをデスクトップにコピーします。

p.493 表11-1 に従ってすすめます。

Vitis HLS を起動して、Create Project を選択します。
Project name: patblt
Locaton: \Desktop\patblt_ip
として Next します。
1.png

Add/remove C-based source files (design specification) では patblt.cpp を登録し、Top Function を patblt として Next。
2.png

Add/remove C-based testbench files (design test) では、patblt_tb.cpp を登録して Next。
3.png

Solution Configuration では、Part Selection に xc7z010clg400-1 を選択し、それ以外はデフォルトのまま Finish。
4.png

Vitis HLS が起動します。
シミュレーションは省略して、高位合成の作業を進めます。

ディレクティブの追加

p.496 リスト11-3 パターン描画回路のディレクティブ(directives.tcl) に沿って設定していきます。

左ペインで Source の下にある patblt.cpp をダブルクリックします。
ソースファイルと、その右のペインに Directive のタブが出てきます。
6.png

1. patblt

Directive タブの下にある patblt を選択して右クリックし、Insert Directive... を選択(※)。
Vitis HLS Directive Editor が開きます。
※patblt をダブルクリックしても同じです
7.png

Directive のプルダウンメニューから、Interface を選択。
8.png

Options の mode (optional) のプルダウンメニューから s_axilite を選択。
それ以外はデフォルトのままとして、OK を押す。
9.png

2. dstout

次は patblt の下にある dstout を選択して右クリックし、Insert Directive... を選択。
10.png

Directive のプルダウンメニューから、INTERFACE を選択。
mode (optional) のプルダウンメニューから m_axi を選択。
offset (optional) のプルダウンメニューから slave を選択。
depth (required) に 307200 を入力。
max_write_burst_length (optional) に 16 を入力。
max_write_outstanding (optional) に 16 を入力。
それ以外はデフォルトのままとして、OK を押す。
11.png

3. xpos, ypos, width, height, color

以下同様にして、
xpos, ypos, width, height, color すべてに INTERFACE, mode=s_axilte を設定します。
11_.png

4. height_loop

こんどは、Directive タブの下にある height_loop の設定で、
Directive プルダウンメニューから LOOP_TRIPCOUNT を選択。
avg (optional) に 240 を入力。
max (optional) に 480 を入力。
min (optional) に 1 を入力。
それ以外はデフォルトのままとして、OK を押す。
12.png

5. with_loop

同様に、with_loop の設定で、
avg (optional) に 320 を入力。
max (optional) に 640 を入力。
min (optional) に 1 を入力。
それ以外はデフォルトのままとして、OK を押す。
13.png

6. patblt (name)

最後に、patblt の設定で、
Directive のプルダウンメニューから、TOP を選択。
top module name (optional) に patblt を入力。
それ以外はデフォルトのままとして、OK を押す。
14.png

ディレクティブの確認

これでディレクティブの追加は完了です。
15.png

directives.tcl を確認してみると、このようになりました。
記載順は違いますが、大全の p.496 リスト11-3 と同内容になっています。
16.png

合成

Run C Synthesis のボタンを押して、合成に入ります。
5.png

合成結果は、このようになりました。
BRA_18K:2, DSP:0, FF:1092, LUT:1392 で大全と同じです。
17.png

IP のエクスポート

Export RTL ボタンを押して、IP を出力します。
18.png

Export の設定は、デフォルトのままで OK を押します。
19.png

これで、ひとつめの IP が完成しました。

ビットブロック描画回路の高位合成と IP 作成

上と同じ手順で進めます。

\XilinxFPGA_SE\Zybo_Z7-10\dai11sho\bitblt_ip
フォルダをデスクトップにコピーします。

パターン描画回路と同様に、プロジェクトを作成してディレクティブを追加していきます。

Vitis HLS を起動して、Create Project を選択します。
Project name: bitblt
Locaton: \Desktop\bitblt_ip
として Next します。

Add/remove C-based source files (design specification) では bitblt.cpp を登録し、Top Function を bitblt として Next。

Add/remove C-based testbench files (design test) では、bitblt_tb.cpp を登録して Next。

Solution Configuration では、Part Selection に xc7z010clg400-1 を選択し、それ以外はデフォルトのまま Finish。

Vitis HLS が起動します。
Directive タブの各項目について、p.508 リスト11-8 の記載順に、ディレクティブを追加してゆきます。

ディレクティブの追加

1. bitblt

bitblt の設定で、Directive プルダウンメニューから TOP を選択。
top module name (optiolnal) に bitblt を追加して、OK を押す。
20.png

再度、bitblt の Insert Directive... を開き、今度は Directive プルダウンメニューから INTERFACE を選択。
mode (optional) のプルダウンメニューから s_axilite を選択。
それ以外はデフォルトのままとして、OK を押す。
21.png

2. dstout

次は bitblt の下の dstout の設定で、
Directive のプルダウンメニューから、INTERFACE を選択。
mode (optional) のプルダウンメニューから m_axi を選択。
offset (optional) のプルダウンメニューから slave を選択。
bundle (optional) に dst を入力。
depth (required) に 307200 を入力。
max_write_burst_length (optional) に 32 を入力。
max_write_outstanding (optional) に 16 を入力。
それ以外はデフォルトのままとして、OK を押す。
22.png

3. dstin

次は bitblt の下の dstin の設定で、
Directive のプルダウンメニューから、INTERFACE を選択。
mode (optional) のプルダウンメニューから m_axi を選択。
offset (optional) のプルダウンメニューから slave を選択。
bundle (optional) に dst を入力。
depth (required) に 307200 を入力。
max_write_burst_length (optional) に 32 を入力。
max_write_outstanding (optional) に 16 を入力。
それ以外はデフォルトのままとして、OK を押す。
23.png

4. srcin

次は bitblt の下の srcin の設定で、
Directive のプルダウンメニューから、INTERFACE を選択。
mode (optional) のプルダウンメニューから m_axi を選択。
offset (optional) のプルダウンメニューから slave を選択。
bundle (optional) に src を入力。
depth (required) に 307200 を入力。
max_read_burst_length (optional) に 32 を入力。
max_read_outstanding (optional) に 16 を入力。
それ以外はデフォルトのままとして、OK を押す。
24.png

5. width, height, aplha

以下同様にして、bitblt の下の
width, height, alpha に INTERFACE, mode=s_axilte を設定します。
25.png

6. height_loop

こんどは、Directive タブの下にある height_loop の設定で、
Directive プルダウンメニューから DATAFLOW を選択。
それ以外はデフォルトのままとして、OK を押す。
26.png

再度、height_loop の設定で、
Directive プルダウンメニューから LOOP_TRIPCOUNT を選択。
avg (optional) に 240 を入力。
max (optional) に 480 を入力。
min (optional) に 1 を入力。
それ以外はデフォルトのままとして、OK を押す。
27.png

7. dstin_loop

次に、dstin_loop の設定で、
Directive プルダウンメニューから PIPELINE を選択。
それ以外はデフォルトのままとして、OK を押す。
28.png

再度、dstin_loop の設定で、
Directive プルダウンメニューから LOOP_TRIPCOUNT を選択。
avg (optional) に 320 を入力。
max (optional) に 640 を入力。
min (optional) に 1 を入力。
それ以外はデフォルトのままとして、OK を押す。
29.png

8. src_loop, dstout_loop

src_loop, dstout_loop も、dstin_loop と同じく DATAFLOW と LOOP_TRIPCOUNT のディレクティブ追加を行い、OK を押す。

ディレクティブの確認

これでディレクティブの追加は完了です。
30.png

directives.tcl を確認してみると、このようになりました。
記載順は違いますが、大全の p.508 リスト11-8 と同内容になっています。
31.png

合成

Run C Synthesis のボタンを押して、合成に入ります。

合成結果は、このようになりました。
全て、p.509 図11-7 と同じ結果が得られています。
32.png

IP のエクスポート

Export RTL ボタンを押して、IP を出力します。
2つめの IP も完成しました。

まとめ

FPGAプログラミング大全Xilinx編(第2版)の第11章
11-1「パターン描画回路」
11-2「ビットブロック描画回路」
について、高位合成と IP のエクスポートまで実習することができました。

動作確認は、次の記事で投稿します。

ディレクティブ追加の前まではソフトウェア開発ですが、そこから先はハードウェア開発要素が増えていきます。

ソフト開発者の手元で C++ コードができたら、ハード開発者と連携して検討しながら、ディレクティブを詰めていくような開発手法が良いのはないでしょうか。

2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?