FC2カウンター FPGAの部屋 Vitis HLS 2020.2 で Vitis Vision Library を使用する4(medianblur 編)
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vitis HLS 2020.2 で Vitis Vision Library を使用する4(medianblur 編)

Vitis HLS 2020.2 で Vitis Vision Library を使用する3(sobelfilter 編)”の続き。

今まで、Vitis Vision Library の例としてやってきた dilation や sobelfilter は画像ファイルを読み込み時にグレイスケールとして読み込んでいた。今回の medianblur はカラーとして読み込んで、メディアン・フィルタ処理するので、どのようなスループットになるか?楽しみだ。今回は、AXI4 Master のビット幅をデフォルトの 128 ビット幅から 32 ビット幅に減らしてやってみようと思う。

(注) Solution Settings (solution1) の m_axi_addr_64 のチェックを外すのを忘れてしまいました。よって、 AXI4 Master アクセスが 64 ビット幅アクセスをするように実装されています。

Vitis 2020.2 で ZYBO Z7-20 の medianblur プロジェクトを作成した。

Vitis_Libraries/vision/L1/examples/medianblur ディレクトリの 3 つのファイル

xf_median_blur_accel.cpp
xf_median_blur_config.h
xf_median_blur_tb.cpp

を Vitis HLS の medianblur プロジェクトのディレクトリにコピーした。

Vitis_Libraries/vision/L1/examples/medianblur/build ディレクトリの

xf_config_params.h

も Vitis HLS の medianblur プロジェクトのディレクトリにコピーした。

Vitis HLS プロジェクトの Explorer の Source には、 xf_median_blur_accesll.cpp 、 Test Bench には xf_median_blur_tb.cpp を設定した。
Vitis_Vision_Library4Vitis_HLS_32_201230.png

それらの Source , Test Bench に設定する CFLAGS や Linker Flags や Input Arguments は”Vitis Vision Library を使用する時の Vitis HLS 2020.2 の設定方法(dilation 編 1)”に書いたとおりに指定した。画像ファイルも同じ物を使用した。

void median_blur_accel() 関数の引数のテンプレートの設定値は PTR_WIDTH なので、 PTR_WIDTH を 128 から 32 に変更する。
そのためには、 xf_median_blur_config.h の

#define PTR_WIDTH 128

をコメントアウトして、

#define PTR_WIDTH 32

を追加した。
Vitis_Vision_Library4Vitis_HLS_33_201230.png

修正後に C シミュレーションを行った。結果を示す。
Vitis_Vision_Library4Vitis_HLS_34_201230.png

medianblur/solution1/csim/build ディレクトリの hls_out.jpg と ref_img.ipg は同じに見える。良さそうだ。
Vitis_Vision_Library4Vitis_HLS_43_201230.png

C コードの合成を行った。結果を示す。
Vitis_Vision_Library4Vitis_HLS_35_201230.png
Vitis_Vision_Library4Vitis_HLS_36_201230.png

C/RTL 協調シミュレーションを行った。結果を示す。
Vitis_Vision_Library4Vitis_HLS_37_201230.png

Latency は 18220 クロックだった。これを総ピクセル数 128 x 128 = 16384 ピクセルで割ると、
18220 / 16384 ≒ 1.11 クロック/ピクセル
となる。

C/RTL 協調シミュレーションの波形を見てみよう。
まずは、入力(Read)の全体波形から見てみよう。
Vitis_Vision_Library4Vitis_HLS_38_201230.png

拡大してみる。
Vitis_Vision_Library4Vitis_HLS_39_201230.png

RVALID の見えている波形の周期は 210 ns で 1 の幅が 155 ns だった。

今度は出力(Write)の全体波形を見てみよう。
Vitis_Vision_Library4Vitis_HLS_40_201230.png

拡大してみる。
Vitis_Vision_Library4Vitis_HLS_41_201230.png

WVALID の周期 40 ns の内の 1 の間は 30 ns となっていた。

最後に Export RTL の結果を示す。
Vitis_Vision_Library4Vitis_HLS_42_201230.png
  1. 2020年12月30日 16:36 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5104-48376622
この記事にトラックバックする(FC2ブログユーザー)