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

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

FPGAの部屋

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

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

Vivado HLS 2019.2 で xfOpenCV を使ってみることにした。どのくらい使えるのだろうか?
前回、Vivado HLS 2018.3 でも同様に dilation をやっている。
Vivado HLS で xfOpenCV を使用する1
Vivado HLS で xfOpenCV を使用する2(Vivado HLS 2018.3 のGUI を使用する)

ザイリンクス OpenCV ユーザ ー ガイド UG1233 (v2019.1) 2019 年 6 月 5 日”の 46 ページの”第4章 HLS の使用”によると以下の制限があるそうです。引用します。

Vivado HLS 2019.1 で使用モデルが正しく機能するようにするため、次の変更を加える必要があります。
1. 適切なコンパイル時間オプションの使用: HLS で xfOpenCV 関数を使用する際、コンパイル時に -D__SDSVHLS__
および -std=c++0x オプションを使用する必要があります。
2. インターフェイス レベル引数へのインターフェイス プラグマの指定: 最上位インターフェイス引数を (1 つ以上の
読み出し/書き込みアクセスを持つ) ポインターとして含む関数には、m_axi インターフェイス プラグマを指定す
る必要があります。次に例を示します。
void lut_accel(xf::Mat<TYPE, HEIGHT, WIDTH, NPC1> &imgInput,
xf::Mat<TYPE, HEIGHT, WIDTH, NPC1> &imgOutput, unsigned char *lut_ptr)
{
#pragma HLS INTERFACE m_axi depth=256 port=lut_ptr offset=direct bundle=lut_ptr
 xf::LUT< TYPE, HEIGHT, WIDTH, NPC1> (imgInput,imgOutput,lut_ptr);
}


早速、xfOpenCV を git clone した。
git clone https://github.com/Xilinx/xfopencv.git
xfOpenCV_1_200219.png

今回は、xfopencv/HLS_Use_Model/Standalone_HLS_AXI_Example をやってみよう。
xfOpenCV_2_200220.png

これをなぜやるかと言うと、AXI4-Stream 入力、出力になっているからである。実際の回路で使用する時に沿った入出力になっているからだ。ソースコードトップの xf_ip_accel_app.cpp を引用する。
xfOpenCV_3_200220.png

dilation_accel() を挟んで、xf::AXIvideo2xfMat() と xf::xfMat2AXIvideo() が使用されている。

それでは、この Standalone_HLS_AXI_Example ディレクトリを Vivado_HLS/xfOpenCV ディレクトリの下にコピーした。
xfOpenCV_4_200220.png

そして、 script.tcl を起動する前に、インクルード・ディレクトリを変更した。ディレクトリをコピーしてあるので、相対パスではなく絶対パスに変更した。
元の script.tcl を示す。
xfOpenCV_5_200220.png

変更後の script.tcl を示す。
xfOpenCV_6_200220.png

-cflags "-D__SDSVHLS__ -I../../include --std=c++0x"

-cflags "-D__SDSVHLS__ -I/home/masaaki/xfopencv/include --std=c++0x"

に変更した。

script.tcl を実行した。
vivado_hls -f script.tcl
xfOpenCV_7_200220.png

Vivado HLS の GUI を立ち上げて、いま作成した dillation_project を読み込んだ。
xfOpenCV_8_200220.png

持っていないFPGA が指定されていた。
Ultra96-V2 の ZYNQ UltraScale+ MPSoC に変更しよう。
Solution メニューから Solution Settings... を選択した。
Solution Settings (solution1) で Synthesis を選択して、Part Selection を xczu3eg-sbva481-1-e に変更した。
xfOpenCV_9_200220.png

これで FPGA が置き換わったが、C シミュレーションは変更なしなはずなので、見ていこう。
csim のレポートを見た。成功している。
xfOpenCV_10_200220.png

dillation_project/solution1/csim/build ディレクトリを見た。
xfOpenCV_11_200220.png

元画像の tsetcase55.jpg を示す。
xfOpenCV_12_200220.jpg

ハードウェアで Dilation 処理しているはずの hls.jpg を示す。
なお、Dilation は膨張という意味で、白部分を拡張する機能らしい。”モルフォロジー変換”参照。
xfOpenCV_13_200220.jpg

白黒になっている以外の違いが良く分からない?
多少、白い点々が大きくなっているか?
  1. 2020年02月20日 04:57 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0