FC2カウンター FPGAの部屋 reVISION, xfOpenCV

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

FPGAの部屋

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

ZYBOでのxfOpenCVライブラリの使用1

FPGAボードを持っていないreVISION をやっていても面白くないので、ZYBOのxfOpenCV をやってみることにした。

参考にするのは、”ザイリンクス OpenCV ユーザーガイド UG1233 (v2017.2) 2017 年 9 月 22 日”の 10 ページの”カスタム プラットフォームでの xfOpenCV ライブラリの使用”だ。

ユーザーズ・ガイドの通りにやってみる。

SDx を立ち上げて、WorkSpace を設定した。

SDx のFile メニューからNew −> Xilinx SDx Project を選択した。

New Project ダイアログが表示された。Project name に accumulate_xfOCV と入力した。
xfOpenCV_1_171101.png

Choose Hardware Platform で、 zybo を選択した。
xfOpenCV_2_171101.png

Choose Software Platform and Target CPU はそのままとした。
xfOpenCV_3_171101.png

Templates では、Empty Application を選択した。Finish ボタンをクリックした。
xfOpenCV_4_171101.png

accumulate_xfOCV プロジェクトが開かれました。
Active build configuration をRelease に変更した。
xfOpenCV_5_171101.png

Project Explorer で accumulate_xfOCV を右クリックして、右クリックメニューから C/C++ Build Settings を選択する。
Properties for accumulate_xfOCV ダイアログが開いた。
SDS++ Compiler のDirectories をクリックした。
xfOpenCV_6_171101.png

xfopencv/include を include Paths に入れたが<OpenCV_location>\include フォルダーがどこを指すのかがわからない?
How to link OpenCV library with SDSoC”によると /opt/Xilinx/SDK/2016.4/data/embeddedsw/ThirdParty/ ということだったので、”/opt/Xilinx/SDK/2017.2/data/embeddedsw/ThirdParty/opencv/aarch32/include”を追加した。

Apply をクリックした。

SDS++ Linker のLibraries をクリックした。
Libraries(-l) にライブラリを追加した。
Libraries search path (-L) に”/opt/Xilinx/SDK/2017.2/data/embeddedsw/ThirdParty/opencv/aarch32/lib”を追加した。
xfOpenCV_7_171101.png

Apply をクリックして、OK ボタンをクリックしてダイアロを閉じた。

accumulate_xfOCV プロジェクトを展開して、src フォルダを右クリックし、右クリックメニューから Import を選択する。
File System を選択した。
xfOpenCV_8_171101.png

Browse... ボタンをクリックした。
xfOpenCV_9_171101.png

xfopencv/accumulate を選択して、OKボタンをクリックした。
xfOpenCV_10_171101.png

.h と .cpp フォイルにチェックを付けて、Finish ボタンをクリックした。
xfOpenCV_11_171101.png

これでプロジェクトが完成した。トンカチ・アイコンをクリックしてビルド開始。
xfOpenCV_12_171101.png

エラー発生。
xfOpenCV_13_171101.png

エラー内容を示す。

/opt/Xilinx/SDx/2017.2/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld: -llzma が見つかりません
/opt/Xilinx/SDx/2017.2/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld: -ltiff が見つかりません
/opt/Xilinx/SDx/2017.2/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld: -lpng16 が見つかりません
/opt/Xilinx/SDx/2017.2/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld: -lz が見つかりません
/opt/Xilinx/SDx/2017.2/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld: -ljpeg が見つかりません
/opt/Xilinx/SDx/2017.2/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld: -lwebp が見つかりません


ライブラリが無いと言われている。lzma などのライブラリがどこにあるか探ってみたところ、”/home/masaaki/zcu102_rv_ss/sw/sysroot/usr/lib”にあるようだった。

Project Explorer で accumulate_xfOCV を右クリックして、右クリックメニューから C/C++ Build Settings を選択する。
Properties for accumulate_xfOCV ダイアログが開いた。
SDS++ Linker のLibraries をクリックした。
Libraries search path (-L) に”/home/masaaki/zcu102_rv_ss/sw/sysroot/usr/lib”を追加した。
xfOpenCV_14_171102.png

これでトンカチ・アイコンをクリックして、もう一度ビルドした。
やはりエラー発生。
xfOpenCV_15_171102.png

エラー内容を示す。

ERROR: [SdsCompiler 83-5019] Exiting sds++ : Error when calling 'arm-linux-gnueabihf-g++ /home/masaaki/workspace/accumulate_xfOCV/Release/src/xf_accumulate_image_accel.o /home/masaaki/workspace/accumulate_xfOCV/Release/src/xf_accumulate_image_tb.o /home/masaaki/workspace/accumulate_xfOCV/Release/_sds/swstubs/portinfo.o -L/opt/Xilinx/SDK/2017.2/data/embeddedsw/ThirdParty/opencv/aarch32/lib -L/home/masaaki/zcu102_rv_ss/sw/sysroot/usr/lib -lopencv_core -lopencv_imgproc -lopencv_imgcodecs -lopencv_features2d -lopencv_calib3d -lopencv_flann -llzma -ltiff -lpng16 -lz -ljpeg -ldl -lrt -lwebp -L /opt/Xilinx/SDx/2017.2/target/aarch32-linux/lib -L/home/masaaki/workspace/accumulate_xfOCV/Release/_sds/swstubs -Wl,--start-group -Wl,--end-group -Wl,--start-group -lpthread -lsds_lib -lxlnk_stub -Wl,--end-group -o /home/masaaki/workspace/accumulate_xfOCV/Release/_sds/swstubs/accumulate_xfOCV.elf'

  1. 2017年11月01日 05:34 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

Xilinx reVISION、xfOpenCV のExampleをやってみた3(of2のVivadoプロジェクト)

Xilinx reVISION、xfOpenCV のExampleをやってみた1(of2)”の続き。

前回は、of2 のVivado HLS のプロジェクトを見ていった。今回は of2 のVivado プロジェクトについて見ていこう。

さて、SDx (SDSoC) のVivado プロジェクトは、workspace/of2/Release/_sds/p0/_vpl/ipi にあるようだ。
revision_xfopencv_32_171025.png

その中のipimpl, ipiprj, zcu102_rv_ss に .xpr ファイルがある。
まずは、ipimpl.xpr を開いてみよう。
revision_xfopencv_33_171025.png

updated_full_design.dcp ファイルがある。
.dcp ファイルは配置配線データを保存するのに物理デザインデータベースを保存しておくファイルだそうだ。(Vivado Design Suite
ユーザー ガイド インプリ メンテーシ ョ ン UG904 (v2012.2) 2012 年 8 月 20 日
の10ページから)
これは関係なさそうなので、次にいこう。

次は、zcu102_rv_ss.xpr を開いてみよう。
revision_xfopencv_34_171025.png

これは通常のボード・ファイルを用いたVivado のプロジェクトのようだ。
ブロック・デザインを開いてみた。
revision_xfopencv_35_171025.png

ここには、Vivado HLS で生成されたIP が無いようだ。
zcu102 用のハードウェア・プラットフォームなのかな?

次に、ipiprj.xpr を開いてみよう。
revision_xfopencv_19_170925.png

通常のボード・ファイルを使用したVivado プロジェクトのようだ。
次にブロック・デザインを開いてみよう。
revision_xfopencv_20_170925.png

Vivado HLS のIP が見えた。
Vivado HLS のIP を拡大してみよう。
revision_xfopencv_21_170925.png

w1_xf_DenseNonPyrLKOpticalFlow_1 と read_optflow_input_1、write_optflow_output_1 が見えた。

Address Editor を貼っておく。
revision_xfopencv_22_170925.png
revision_xfopencv_23_170925.png

このプロジェクトをインプリメントしてみた。結果を示す。
revision_xfopencv_24_170925.png
revision_xfopencv_25_170925.png
  1. 2017年10月25日 05:22 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

Xilinx reVISION、xfOpenCV のExampleをやってみた2(of2)

Xilinx reVISION、xfOpenCV のExampleをやってみた1(of2)”の続き。

久しぶりのreVISION, xfOpenCV だ。今まで他のことに時間を取られてできなかったがやっていきたい。

今回は、reVISION の中で使用されているVivado HLS に焦点を当てていきたい。

SDx の of2 プロジェクトで、左下のReports を見るとVivado HLS のログが表示されている。
それは、read_optflow_input と write_optflow_output のみで、もう1つハードウェア化したはずのDenseNonPyrLKOpticalFlow が無い?
とりあえず、read_optflow_input と write_optflow_output を見てみよう。
Reports の write_optflow_output のHLS Report をクリックするとVivado HLS の合成結果の画面が開く。
revision_xfopencv_26_171024.png

下にSynthesis やPerformance などのタブがあるが、Analysis 画面も確認することができる。
revision_xfopencv_31_171024.png

次に、read_optflow_input を見てみよう。
Reports の read_optflow_input のHLS Report をクリックするとVivado HLS の合成結果の画面が開く。
revision_xfopencv_27_171024.png

これでハードウェア化した2つのIP を見たが、最後のDenseNonPyrLKOpticalFlow はどこに行ったのだろう?
それじゃ、Vivado HLS のディレクトリを見てみよう。
Vivado HLS のディレクトリは、workspace/of2/Release/_sds/vhls にあった。
revision_xfopencv_28_171024.png

DenseNonPyrLKOpticalFlow は少し名前が変わっていて、w1_xf_DenseNonPyrLKOpticalFlow というディレクトリ名になっている。これで SDx のHLS Reports に項目がないのだろうか?

Vivado HLS 2017.2 を起動して確かめてみよう。
revision_xfopencv_29_171024.png

Source には2 つのC++ ソースコードが入っている。
右のDirective ウインドウを見ると# のソースコードに書かれたディレクティブと % のディレクティブ・ファイルで指定されたディレクティブがある。これは、SDx のツールから指定されているディレクティブが % で指定されたディレクティブなのだろうか?
revision_xfopencv_30_171024.png
  1. 2017年10月24日 05:26 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

Xilinx reVISION、xfOpenCV のExampleをやってみた1(of2)

Xilinx 社から機械学習やコンピュータ・ビジョン・ツールの reVision と、OpenCVをハードウェア化する xfOpenCV が出た。これらのExample をやってみることにした。

まずは、”reVISION Getting Started Guide 2017.2”を参考にして、やってみよう。
使用するOSはUbuntu 16.04 で、SDx は 2017.2 を使用した。

このチュートリアルを実行するためには、ZCU102 Evaluation Board が必要なのだが、持っていないので、reVision ツール(SDSoC)でコンパイルするところだけでもやってみよう。reVision は今のバージョンでは、そういう名前のツールがある訳ではなく、SDSoC を
ZCU102 用の reVision のプラットホームで動作させているようだ。

SDx 2017.2 のSDSoC をインストールした。次に、ZCU102 Production Silicon reVISION Package をダウンロードした。
revision_xfopencv_1_170922.png

zcu102_rv_ss をホームディレクトリに展開した。
revision_xfopencv_2_170922.png

SDx を起動するために、それ用の settings64.sh を起動して、、”reVISION Getting Started Guide 2017.2”に従って、SYSROOT 環境変数を指定した。
export SYSROOT=~/zcu102_rv_ss/sw/sysroot/
sdx をタイプして SDx (SDSoC) を起動した。
revision_xfopencv_3_170923.png

SDx の起動メッセージを示す。
revision_xfopencv_4_170923.png

SDx が起動した。Worksapce を指定した。
revision_xfopencv_5_170923.png

SDx の画面が表示された。
revision_xfopencv_6_170923.png

File メニューから New -> Xilinx SDx Project... を選択する。
New Project ダイアログが表示された。
Project name に of2 と入力して、Next > ボタンをクリックした。
revision_xfopencv_7_170923.png

Choose Hardware Platform で、Add Custom platform... ボタンをクリックした。
revision_xfopencv_8_170923.png

ホームディレクトリの下のzcu102_rv_ss ディレクトリを選択する。
revision_xfopencv_9_170923.png

すると、Choose Hardware Platform に zcu102_rv_ss[custom] が表示された。
zcu102_rv_ss[custom] を選択して、Next > ボタンをクリックした。
revision_xfopencv_10_170923.png

Choose Software Platform and Target CPU が表示された。デフォルトのまま、Next > ボタンをクリックした。
revision_xfopencv_11_170923.png

Template でLive IO のDense Optical Flow (2PPC) を選択し、Finish ボタンをクリックした。
revision_xfopencv_12_170923.png

of プロジェクトが表示された。
revision_xfopencv_13_170923.png

右上の方のActive build configuration をRelese に変更した。
revision_xfopencv_14_170923.png

左上のProject Explor の of2 プロジェクトを右クリックし、右クリックメニューからBuild Project を選択して、ビルドを行った。
Build Project ダイアログが表示されて、ビルドが進んだ
revision_xfopencv_15_170923.png

ビルド終了。i5の4プロセッサで1時間23分くらいかかった。
revision_xfopencv_16_170923.png
  1. 2017年09月24日 10:19 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0