FC2カウンター FPGAの部屋 2019年05月18日
FC2ブログ

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

FPGAの部屋

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

Vivado HLS で xfOpenCV を使用する1

久しぶりにUG902 見たところ、Vivado HLS 2018.3 では、OpenCV 対応が変更され、xfOpenCV を使用するようになっていた。これはやってみないとということでやってみたいと思う。そして他にもVivado HLS が拡張されているところがあるので、それもいずれやってみたい。

なお、やりかけの”Fixstars Tech Blogの「Ultra96 Linux で MIPI カメラから画像を取得する」をやってみる2”の続きについては、今日、明日の休日にゆっくりやって見る予定だ。

まずは、xfOpenCV を git clone しよう。
git clone https://github.com/Xilinx/xfopencv.git
なのだが、私は以前 git clone してあったので、git pull した。

さて、xfopencv/HLS_Use_Model/ ディレクトリに Standalone_HLS_Example と AXI_Sample ディレクトリと HLS_UseModel_Usage_Doc.pdf がある。
HLS_UseModel_Usage_Doc.pdf には xfOpenCV をVivado HLS で使用する方法が書いてある。HLS_UseModel_Usage_Doc.pdf によると、xfOpenCV を Vivado HLS で使用するには、

1. テストベンチでの xf::Mat オブジェクトには、 static を定義する。
Ex: static xf::MatimgInput(in_img.rows,in_img.cols);

2. コンパイル時に __XFCV_HLS_MODE__, -std=c++0x オプションを使用する。

3. インタフェースレベルの関数の引数にインタフェースのプラグマを指定する。
例えば関数の引数にポインタや参照渡しがあったら、m_axi のインターフェース・プラグマを指定する。ストリームがあったら axis を指定するということでしょう?


Standalone_HLS_Example と AXI_Sample ディレクトリの xf::dilate のサンプルでは、 2. のコンパイルオプションは tcl スクリプトに書いてあります。
Standalone_HLS_Example/script.tcl を引用する。
Copyright (c) 2018, Xilinx, Inc.
All rights reserved.

############################################################
## Copyright (C) 1986-2018 Xilinx, Inc. All Rights Reserved.
############################################################
open_project dilation_project
set_top dilation_accel
add_files ./xf_dilation_accel.cpp -cflags "-D__XFCV_HLS_MODE__ -I../../include --std=c++0x"
add_files -tb ./testcase55.jpg
add_files -tb ./xf_dilation_tb.cpp -cflags "-D__XFCV_HLS_MODE__ -I../../include --std=c++0x"
open_solution "solution1"
set_part {xczu9eg-ffvb1156-2-i} -tool vivado
create_clock -period 10 -name default
#source "./dilation_color/solution1/directives.tcl"
csim_design -argv {testcase55.jpg} -clean -compiler gcc
csynth_design
cosim_design -argv {testcase55.jpg}
#export_design -format ip_catalog


さて、このscript.tcl をVivado HLS 2018.3 で動作させることにしよう。

OpenCV をVivado HLS で使用する場合は、PNGやJPEG用のライブラリをインストールする必要がある。
エラーが出た場合は、
Ubuntu 18.04 上でVivado HLS 2018.2 でOpenCV を使用したとき?のエラー
Ubuntu 16.04 上のVivado HLS 2017.2 でOpenCV を使用したプロジェクトでエラー発生”を参照のこと。
私は、libjpeg.so.62 が無くて、sudo apt-get install libjpeg62-dev を実行した。

まずは、Vivado 2018.3 の実行ファイルにパスを通す。
source /tools/Xilinx/Viavdo/2018.3/settings64.sh

xfopencv/HLS_Use_Model/Standalone_HLS_Example ディレクトリに行く。
cd ~/xfopencv/HLS_Use_Model/Standalone_HLS_Example/

Vivado HLS 2018.3 に tcl スクリプトを実行させる。(Ubuntu 18.04 を使用している)
vivado_hls -f script.tcl
xfOpenCV_Vivado_HLS_1_190518.png

xfopencv/HLS_Use_Model/Standalone_HLS_Example ディレクトリに、dilation_project ディレクトリが生成された。
xfOpenCV_Vivado_HLS_2_190518.png

xfopencv/HLS_Use_Model/Standalone_HLS_Example/dilation_project/solution1/csim/build ディレクトリには、C シミュレーション結果の hls_out.jpg, out_error.jpg, out_ocv.jpg も表示されている。
xfOpenCV_Vivado_HLS_3_190518.png

Vivado HLS のバッチモードから抜けるために exit を入力した。
GUI モードのVivado HLS 2018.3 を起動した。
xfOpenCV_Vivado_HLS_4_190518.png

合成結果を見てみた。
xfOpenCV_Vivado_HLS_5_190518.png

C/RTL 協調シミュレーションをDump all で実行した。
xfOpenCV_Vivado_HLS_6_190518.png

波形を表示した。
xfOpenCV_Vivado_HLS_7_190518.png

波形を拡大した。
xfOpenCV_Vivado_HLS_8_190518.png
  1. 2019年05月18日 05:04 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0