FC2カウンター FPGAの部屋 2020年02月21日
FC2ブログ

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

FPGAの部屋

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

Vivado HLS 2019.2 で xfOpenCV を使用する2(dilation 2)

Vivado HLS 2019.2 で xfOpenCV を使用する1(dilation 1)”の続き。

前回は、Vivado HLS 2019.2 で xfOpenCV を使ってみることにしたということで、xfopencv/HLS_Use_Model/Standalone_HLS_AXI_Example のスクリプトを実行して、 dilation_project を作成し、C シミュレーションの結果を表示した。今回は、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行う。

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

Latency の max は 2087198 クロックだった。画像は、1920 x 1080 = 2073600 ピクセルだから、約 1 クロック/ピクセルだった。

次に、dilation_accel の合成結果を見てみよう。
xfOpenCV_15_200220.png

その下の、grp_dilate_fu_82 の合成結果を見る。

xfOpenCV_16_200220.png

C/RTL 協調シミュレーションを行った。
xfOpenCV_17_200220.png

Latency は 4168112 クロックだった。C コードの合成の見積もりの倍のクロックが必要とのレポートが出ている。
どういうこと?ということで波形を見てみよう。
拡大した波形を示す。
xfOpenCV_18_200220.png

_src の TREADY と _dst の TVALID が 1クロック毎に 1 → 0 を繰り返しているので、スループットは 1/2 になっている。
約 2 クロック/ピクセルとなっていしまっている。なぜ C コードの合成のレポートがでは、レイテンシが正確ではないのだろうか?

Export RTL を行った。結果を示す。
xfOpenCV_19_200220.png

(2020/02/29:追記)

C/RTL協調シミュレーションにおいてスループットが1/2となってしまっているのは、xf::Matのメンバであるhls::streamに対して、depth=1と指定されているのが原因のようです。

と教えていただたいので、depth=16 にしてもう一度やってみた。教えていただいた方も depth=16 にされていたようだが、私も 16 にした理由は、LUT を使用した分散RAM の depth が 16 だからである。教えていただいてありがとうございました。

ソースコードの xf_accel_app.cpp の HLS stream プラグマを示す。

#pragma HLS stream variable=imgInput1.data dim=1 depth=16
#pragma HLS stream variable=imgOutput1.data dim=1 depth=16


これで、C シミュレーションは変わらないので、 C コードの合成を行った。以前の結果と並べてみた。左が以前の結果だ。
xfOpenCV_14_200220.pngxfOpenCV_45_200228.png

Latency は同じだが、Utilization Estimates の FIFO の項目が以前に比べて、FF が 4 個、 LUT が 8 個増えている。

C/RTL 協調シミュレーションを行った。
xfOpenCV_46_200228.png

Latency は 2087199 クロックだった。以前は、 4168112 クロックだったので、約半分になった。
1920 ピクセル x 1080 行 = 2073600 ピクセルなので、2087199 / 2073600 ≒ 1.01 クロック / ピクセルとなり、ほとんど 1 クロック / ピクセルだったので、性能は問題なくなった。

C/RTL 協調シミュレーションの波形を示す。拡大してみたところ、 p_dst_TVALID も p_src_TREADY もほとんど 1 だった。
xfOpenCV_47_200228.png

Export RTL を行った。
リソース使用量も少なく、 CP achieved post-implementation が 3.320 ns で大丈夫そうだ。
xfOpenCV_48_200228.png

dilation は使い物になりそうだ。
  1. 2020年02月21日 03:42 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:2