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

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

FPGAの部屋

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

Vitis HLS 2020.2 で Vitis Vision Library を使用する3(sobelfilter 編)

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

前回は、Vitis Vision Library の examples の dilation をやってみたが、出力結果がおかしいようだった。今回は、同じく Vitis Vision Library の examples の sobelfilter をやってみよう。

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

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

xf_sobel_accel.cpp
xf_sobel_config.h
xf_sobel_tb.cpp

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

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

xf_config_params.h

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

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

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

これで、 C シミュレーションを行う設定が終了したので、C シミュレーションを実行した。結果を示す。
成功したようだ。
Vitis_Vision_Library4Vitis_HLS_22_201229.png

sobelfilter/solution1/csim/build ディレクトリの hlsx.jpg と out_ocvx.jpg がそっくりで、 hlsy.jpg と out_ocvy.jpg がそっくりの画像になっているのが分かる。今度は良さそうだ。
Vitis_Vision_Library4Vitis_HLS_23_201229.png

C コードの合成を行った。結果を示す。
Vitis_Vision_Library4Vitis_HLS_24_201229.png
Vitis_Vision_Library4Vitis_HLS_25_201229.png
Vitis_Vision_Library4Vitis_HLS_26_201229.png

やはり、 Array2xfMat() 関数で、配列を xfMat に変換して、 sobel フィルタをかけて、 xfMat2Array() 関数で配列に書き戻している。

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

レイテンシは 17578 クロックで一見良さそうなのだが、データのビット幅が 128 ビット幅で 32 ビットデータを一度に 4 個 DMA できるので、転送としてはまばらになっている。
それを確認するために C/RTL 協調シミュレーション波形を見てみよう。
img_inp の Read Transaction から示す。
Vitis_Vision_Library4Vitis_HLS_29_201229.png

転送を見るとわりとまばらに転送されているのが分かる。これが AXI4-Stream を使用するとどの程度になるのだろうか?

X と Y のソーベル・フィルタ出力も同様にまばらに転送されているのが分かる。
Vitis_Vision_Library4Vitis_HLS_28_201229.png

Vitis_Vision_Library4Vitis_HLS_29_201229.png

これだけまばらでも、データ幅が 128 ビットで 4 ワード幅なので、スループット的には 1 クロックで 1 ピクセル近く転送できている。

最後に Export RTL の結果を示す。
Vitis_Vision_Library4Vitis_HLS_31_201229.png

(追記)
このテスベンチのソーベル・フィルタはグレイスケールで行っているので、ピクセルのデータは 1 バイトの様です。それでDMA のスループットが小さくなっているようです。
  1. 2020年12月29日 17:18 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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