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

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

FPGAの部屋

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

Vitis_Libraries/vision/L3/examples/colordetect/をやってみた2

Vitis_Libraries/vision/L3/examples/colordetect/をやってみた1”の続き。

Vitis_Libraries/vision/L3/examples/colordetect/をやってみるということで、xclbin をビルドして、sd_card ディレクトリを作成させた。今回は、Vivado HLS プロジェクトと Vivado プロジェクトを見ていこう。

最初に Vivado HLS 2019.2 のプロジェクトから見ていこう。
Vivado HLS のプロジェクトは Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/color_detect/color_detect/color_detect に入っている。
Vitis_Vision_58_200331.png

C コードの合成レポートを示す。
Vitis_Vision_57_200330.png

Latency の max が 8330244 クロックだった。これは 4k 画像を処理したときだと思うので、3840 ピクセル x 2160 行 = 8294400 ピクセルの処理を行ったときなので、約 1.00 クロック / ピクセルとなり、優秀な結果だと思う。

Latency の Detail -> Instance を見ると、Latency の max は 4k 画像の総ピクセル数くらいの値になっているが、総合したクロック数が同じような値なのは、各関数がDATAFLOW 指示子により並列に実行されているからだ。

次に Vivado 2019.2 のプロジェクトを見ていこう。
Vivado プロジェクトは Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/vivado/vpl/prj ディレクトリにある。
Vitis_Vision_59_200331.png

ブロックデザインを示す。
Vitis_Vision_52_200330.png

m_axi_gmem0 から m_axi_gmem4 までの 5 つの AXI4 インターフェースの Master ポートがあるが、これは、xf_colordetect_accel.cpp で 5 つの AXI4 Master インターフェースが定義されているからだ。
xf_colordetect_accel.cpp の関数定義と入出力ポートの指示子の部分を引用する。

void color_detect(ap_uint<PTR_IN_WIDTH>* img_in,
                  unsigned char* low_thresh,
                  unsigned char* high_thresh,
                  unsigned char* process_shape,
                  ap_uint<PTR_OUT_WIDTH>* img_out,
                  int rows,
                  int cols) {
// clang-format off
    #pragma HLS INTERFACE m_axi      port=img_in        offset=slave  bundle=gmem0
   
    #pragma HLS INTERFACE m_axi      port=low_thresh    offset=slave  bundle=gmem1
    #pragma HLS INTERFACE s_axilite  port=low_thresh          bundle=control
    #pragma HLS INTERFACE m_axi      port=high_thresh   offset=slave  bundle=gmem2
    #pragma HLS INTERFACE s_axilite  port=high_thresh          bundle=control
 #pragma HLS INTERFACE s_axilite  port=rows          bundle=control
 #pragma HLS INTERFACE s_axilite  port=cols          bundle=control
    #pragma HLS INTERFACE m_axi      port=process_shape offset=slave  bundle=gmem3
    #pragma HLS INTERFACE s_axilite  port=process_shape         bundle=control
    #pragma HLS INTERFACE m_axi      port=img_out       offset=slave  bundle=gmem4
  
    #pragma HLS INTERFACE s_axilite  port=return              bundle=control


low_thresh, high_thresh, process_shape の 3 つのポートは AXI4 Master と AXI4 Lite Slave の双方に指定されている。こんなことができるのか。。。

前にやった Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp の関数定義と入出力ポートの指示子の部分を引用する。

void resize_accel(ap_uint<INPUT_PTR_WIDTH>* img_inp,
                  ap_uint<OUTPUT_PTR_WIDTH>* img_out,
                  int rows_in,
                  int cols_in,
                  int rows_out,
                  int cols_out) {
// clang-format off
    #pragma HLS INTERFACE m_axi     port=img_inp  offset=slave bundle=gmem1
    #pragma HLS INTERFACE m_axi     port=img_out  offset=slave bundle=gmem2
    #pragma HLS INTERFACE s_axilite port=rows_in              bundle=control
    #pragma HLS INTERFACE s_axilite port=cols_in              bundle=control
    #pragma HLS INTERFACE s_axilite port=rows_out              bundle=control
    #pragma HLS INTERFACE s_axilite port=cols_out              bundle=control
    #pragma HLS INTERFACE s_axilite port=return                bundle=control


Vivado HLS の color_detect の impl/ip/drivers/src/xcolor_detect_color_detect.h を見ると、通常の m_axi 指示子の slave オプション付きと同じようだ。つまり、s_axilite 指示子は要らないんじゃないだろうか?

// control
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/COH)
//        bit 1  - ap_done (Read/COR)
//        bit 2  - ap_idle (Read)
//        bit 3  - ap_ready (Read)
//        bit 7  - auto_restart (Read/Write)
//        others - reserved
// 0x04 : Global Interrupt Enable Register
//        bit 0  - Global Interrupt Enable (Read/Write)
//        others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x10 : Data signal of img_in_V
//        bit 31~0 - img_in_V[31:0] (Read/Write)
// 0x14 : Data signal of img_in_V
//        bit 31~0 - img_in_V[63:32] (Read/Write)
// 0x18 : reserved
// 0x1c : Data signal of low_thresh
//        bit 31~0 - low_thresh[31:0] (Read/Write)
// 0x20 : Data signal of low_thresh
//        bit 31~0 - low_thresh[63:32] (Read/Write)
// 0x24 : reserved
// 0x28 : Data signal of high_thresh
//        bit 31~0 - high_thresh[31:0] (Read/Write)
// 0x2c : Data signal of high_thresh
//        bit 31~0 - high_thresh[63:32] (Read/Write)
// 0x30 : reserved
// 0x34 : Data signal of process_shape
//        bit 31~0 - process_shape[31:0] (Read/Write)
// 0x38 : Data signal of process_shape
//        bit 31~0 - process_shape[63:32] (Read/Write)
// 0x3c : reserved
// 0x40 : Data signal of img_out_V
//        bit 31~0 - img_out_V[31:0] (Read/Write)
// 0x44 : Data signal of img_out_V
//        bit 31~0 - img_out_V[63:32] (Read/Write)
// 0x48 : reserved
// 0x4c : Data signal of rows
//        bit 31~0 - rows[31:0] (Read/Write)
// 0x50 : reserved
// 0x54 : Data signal of cols
//        bit 31~0 - cols[31:0] (Read/Write)
// 0x58 : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


という訳で、color detect の Vivado プロジェクトの Address Editor を示す。
Vitis_Vision_53_200330.png

Vivado のインプリメンテーション結果を示す。
Vitis_Vision_54_200330.png
Vitis_Vision_55_200330.png

リソース使用量のテーブルも示す。
Vitis_Vision_56_200330.png
  1. 2020年03月31日 05:02 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis_Libraries/vision/L3/examples/colordetect/をやってみた1

Vitis Vision ライブラリの resize をやってみた。CUI ではうまく行ったが Vitis GUI では、うまく行かなかった。
今回は、Vitis_Libraries/vision/L3/examples/colordetect/をやってみる。

これは、VITIS VISION LIBRARY USER GUIDEColor Detection によると、Vitisビジョンライブラリの4つのハードウェア関数を使用してるそうだ。

xf::cv::BGR2HSV
xf::cv::colorthresholding
xf::cv::erode
xf::cv::dilate


resize を CUI でやっているので、環境は整っている。どのように環境を設定したのか?をおさらいしてみよう。

1. Vitis のインストール・ディレクトリの settings64.sh を実行
source /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/settings64.sh

2. XRT の setenv.sh を実行
source /opt/xilinx/xrt/setup.sh

3. DEVICE 環境変数にプラットフォームの xpfm ファイルへのパスを設定する
export DEVICE=/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm

4. SYSROOT にプラットフォームの sysroot へのパスを設定する。
export SYSROOT=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux


それでは、Vitis_Libraries/vision/L3/examples/colordetect/build ディレクトリに cd して、 xclbin を make する
make host xclbin TARGET=hw BOARD=Zynq ARCH=aarch64
を実行した。
Vitis_Vision_44_200330.png

全ログを示す。

masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build$ make host xclbin TARGET=hw BOARD=Zynq ARCH=aarch64
-e ----
Compiling object xf_colordetect_tb...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2
aarch64-linux-gnu-g++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2/xf_colordetect_tb.o -c /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_tb.cpp -D XDEVICE=ultra96v2_min2 -DVIVADO_HLS_SIM -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2  -g --sysroot=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux -D__ZYNQ -std=c++14 -fPIC -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect -I/opt/xilinx/xrt/include -Wall -Wno-unknown-pragmas -Wno-unused-label -pthread  -idirafter /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2019.2/include 
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_headers.hpp:30,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_tb.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_sw_utils.hpp: 関数 ‘void xf::cv::analyzeDiff(cv::Mat&, int, float&)’ 内:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_sw_utils.hpp:150:23: 警告: 変数 ‘v_tmp1’ が設定されましたが使用されていません [-Wunused-but-set-variable]
                 float v_tmp1;
                       ^~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_tb.cpp: 関数 ‘int main(int, char**)’ 内:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_tb.cpp:146:14: 警告: unused variable ‘fileBufSize’ [-Wunused-variable]
     unsigned fileBufSize;
              ^~~~~~~~~~~
-e ----
Compiling object xf_colordetect_accel...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2
aarch64-linux-gnu-g++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2/xf_colordetect_accel.o -c /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_accel.cpp -D XDEVICE=ultra96v2_min2 -DVIVADO_HLS_SIM -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2  -g --sysroot=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux -D__ZYNQ -std=c++14 -fPIC -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect -I/opt/xilinx/xrt/include -Wall -Wno-unknown-pragmas -Wno-unused-label -pthread  -idirafter /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2019.2/include 
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_config.h:23,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp: In instantiation of ‘void xf::cv::accel_utils::hlsStrm2xfMat(hls::stream<ap_uint<_AP_W2> >&, xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&, int) [with int PTR_WIDTH = 32; int MAT_T = 9; int ROWS = 2160; int COLS = 3840; int NPC = 1; int TRIPCOUNT = 8294400]’:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:312:9:   required from ‘void xf::cv::accel_utils::Array2xfMat(ap_uint<_AP_W2>*, xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&) [with int PTR_WIDTH = 32; int MAT_T = 9; int ROWS = 2160; int COLS = 3840; int NPC = 1]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:508:5:   required from ‘void xf::cv::Array2xfMat(ap_uint<_AP_W2>*, xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&) [with int PTR_WIDTH = 32; int MAT_T = 9; int ROWS = 2160; int COLS = 3840; int NPC = 1]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_accel.cpp:86:85:   required from here
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:270:17: 警告: unused variable ‘valid_bits_update’ [-Wunused-variable]
             int valid_bits_update;
                 ^~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:271:17: 警告: unused variable ‘valid_bits_tmp’ [-Wunused-variable]
             int valid_bits_tmp = valid_bits - K_size;
                 ^~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:247:13: 警告: unused variable ‘strm_cnt_disply’ [-Wunused-variable]
         int strm_cnt_disply = 0;
             ^~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:293:13: 警告: unused variable ‘stop’ [-Wunused-variable]
         int stop = 0;
             ^~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp: In instantiation of ‘void xf::cv::accel_utils::xfMat2hlsStrm(xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&, hls::stream<ap_uint<_AP_W2> >&, int) [with int PTR_WIDTH = 8; int MAT_T = 0; int ROWS = 2160; int COLS = 3840; int NPC = 1; int TRIPCOUNT = 8294400]’:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:452:9:   required from ‘void xf::cv::accel_utils::xfMat2Array(xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&, ap_uint<_AP_W2>*) [with int PTR_WIDTH = 8; int MAT_T = 0; int ROWS = 2160; int COLS = 3840; int NPC = 1]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:502:5:   required from ‘void xf::cv::xfMat2Array(xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&, ap_uint<_AP_W2>*) [with int PTR_WIDTH = 8; int MAT_T = 0; int ROWS = 2160; int COLS = 3840; int NPC = 1]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_accel.cpp:106:89:   required from here
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:365:13: 警告: unused variable ‘ddr_write_cycles’ [-Wunused-variable]
         int ddr_write_cycles = (((out_size_bits) + (PTR_WIDTH)-1) / (PTR_WIDTH));
             ^~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:366:13: 警告: unused variable ‘ddr_write_cnt’ [-Wunused-variable]
         int ddr_write_cnt = 0;
             ^~~~~~~~~~~~~
-e ----
Compiling extra object /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2/xcl2.o...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2
aarch64-linux-gnu-g++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2/xcl2.o -c /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2/xcl2.cpp -D XDEVICE=ultra96v2_min2 -DVIVADO_HLS_SIM -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2  -g --sysroot=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux -D__ZYNQ -std=c++14 -fPIC -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect -I/opt/xilinx/xrt/include -Wall -Wno-unknown-pragmas -Wno-unused-label -pthread  -idirafter /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2019.2/include -I /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2
-e ----
Compiling host colordetect.exe...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/bin_ultra96v2_min2
aarch64-linux-gnu-g++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/bin_ultra96v2_min2/colordetect.exe /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2/xf_colordetect_tb.o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2/xf_colordetect_accel.o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/obj_ultra96v2_min2/xcl2.o -D XDEVICE=ultra96v2_min2 -DVIVADO_HLS_SIM -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2  -g --sysroot=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux -D__ZYNQ -std=c++14 -fPIC -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect -I/opt/xilinx/xrt/include -Wall -Wno-unknown-pragmas -Wno-unused-label -pthread  -idirafter /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2019.2/include -L/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux/usr/lib -Wl,-rpath-link=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux/usr/lib/ -L/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux/opt/xilinx/xrt/lib -lopencv_imgcodecs -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_features2d -lopencv_flann -pthread -L/opt/xilinx/xrt/lib -lxilinxopencl 
-e ----
Compiling kernel color_detect...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xo_ultra96v2_min2_hw
v++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xo_ultra96v2_min2_hw/color_detect.xo --kernel color_detect --compile /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/xf_colordetect_accel.cpp \
 -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB --clock.defaultFreqHz 300000000 -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect --target hw --platform /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw --save-temps --debug --kernel_frequency 300 --report_level 2 --xp vivado_prop:run.impl_1.strategy=Performance_Explore 
WARNING: [v++ 60-1600] The option 'xp' was used directly on the command line, where its usage is deprecated. To ensure input line works for supported operating systems or shells, v++ supports specification for some options in a configuration file. As an alternative, please use options 'advanced.*', 'vivado.*' in a configuration file. Use one or more configuration files along with section headers to define key-value pairs for the advanced properties or parameters. Specify a configuration file using '--config'.
INFO: [v++ 82-185] Check out the auto-generated 'sample_compile.ini' configuration file. The file shows how to migrate from deprecated command line --xp switches to configuration file directives.
Option Map File Used: '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/data/vitis/vpp/optMap.xml'

****** v++ v2019.2 (64-bit)
  **** SW Build 2700185 on Thu Oct 24 18:45:48 MDT 2019
    ** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.

INFO: [v++ 60-1306] Additional information associated with this v++ compile can be found at:
 Reports: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/reports/color_detect
 Log files: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/logs/color_detect
Running Dispatch Server on port:33953
INFO: [v++ 60-1548] Creating build summary session with primary output /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xo_ultra96v2_min2_hw/color_detect.xo.compile_summary, at Sun Mar 29 22:00:15 2020
INFO: [v++ 60-1316] Initiating connection to rulecheck server, at Sun Mar 29 22:00:15 2020
Running Rule Check Server on port:41639
INFO: [v++ 60-1315] Creating rulecheck session with output '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/reports/color_detect/v++_compile_color_detect_guidance.html', at Sun Mar 29 22:00:16 2020
INFO: [v++ 60-895]   Target platform: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm
INFO: [v++ 60-1578]   This platform contains Xilinx Shell Archive '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/hw/ultra96v2_min2.xsa'
INFO: [v++ 60-585] Compiling for hardware target
INFO: [v++ 60-423]   Target device: ultra96v2_min2
INFO: [v++ 60-242] Creating kernel: 'color_detect'
INFO: [v++ 60-1616] Creating a HLS clock using kernel_frequency option: 300 MHz

===>The following messages were generated while  performing high-level synthesis for kernel: color_detect Log file: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/color_detect/color_detect/vivado_hls.log :
INFO: [v++ 204-61] Option 'relax_ii_for_timing' is enabled, will increase II to preserve clock frequency constraints.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 3.
INFO: [v++ 204-61] Pipelining loop 'L1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 4.
INFO: [v++ 204-61] Pipelining function 'read'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 1.
INFO: [v++ 204-61] Pipelining function 'write'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 1.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 16.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
WARNING: [v++ 204-69] Unable to schedule bus request on port 'low_thresh' (/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_colorthresholding.hpp:144) due to limited memory ports. Please consider using a memory core with more ports or partitioning the array.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 3, Depth = 11.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 3.
INFO: [v++ 204-61] Pipelining function 'xfExtractPixels<1, 1, 0>'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 1.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 1.
INFO: [v++ 204-61] Pipelining loop 'Loop 2'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 3.
INFO: [v++ 204-61] Pipelining loop 'Col_Loop'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 11.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 1.
INFO: [v++ 204-61] Pipelining loop 'Loop 2'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 3.
INFO: [v++ 204-61] Pipelining loop 'Col_Loop'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 11.
INFO: [v++ 204-61] Pipelining loop 'L1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 3.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 3.
INFO: [v++ 200-789] **** Estimated Fmax: 300.03 MHz
INFO: [v++ 60-594] Finished kernel compilation
INFO: [v++ 60-244] Generating system estimate report...
INFO: [v++ 60-1092] Generated system estimate report: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/reports/color_detect/system_estimate_color_detect.xtxt
Add Instance Array2xfMat_32_9_2160_3840_1_1 Array2xfMat_32_9_2160_3840_1_1_U0 808
Add Instance Array2xfMat_32_9_2160_3840_1_s grp_Array2xfMat_32_9_2160_3840_1_s_fu_142 142
Add Instance hlsStrm2xfMat_32_9_2160_3840_1_8294400_s hlsStrm2xfMat_32_9_2160_3840_1_8294400_U0 136
Add Instance Array2hlsStrm_32_2160_3840_1_3_8_6220800_s Array2hlsStrm_32_2160_3840_1_3_8_6220800_U0 145
Add Instance xfMat2Array_8_0_2160_3840_1_s xfMat2Array_8_0_2160_3840_1_U0 820
Add Instance xfMat2Array_8_0_2160_3840_1_1 grp_xfMat2Array_8_0_2160_3840_1_1_fu_96 96
Add Instance xfMat2hlsStrm_8_0_2160_3840_1_8294400_62 xfMat2hlsStrm_8_0_2160_3840_1_8294400_62_U0 156
Add Instance hlsStrm2Array_8_2160_3840_1_1_8_8294400_s hlsStrm2Array_8_2160_3840_1_1_8_8294400_U0 172
Add Instance colorthresholding_9_0_3_2160_3840_1_s colorthresholding_9_0_3_2160_3840_1_U0 830
Add Instance colorthresholding_9_0_3_2160_3840_1_Loop_1_proc colorthresholding_9_0_3_2160_3840_1_Loop_1_proc_U0 202
Add Instance xFInRange_9_0_2160_3840_15_0_1_9_1_3_s xFInRange_9_0_2160_3840_15_0_1_9_1_3_U0 212
Add Instance colorthresholding_9_0_3_2160_3840_1_entry14 colorthresholding_9_0_3_2160_3840_1_entry14_U0 240
Add Instance colorthresholding_9_0_3_2160_3840_1_entry253 colorthresholding_9_0_3_2160_3840_1_entry253_U0 250
Add Instance colorthresholding_Block_colorthresholding_9_0_3_2160_3840_1_exit_proc colorthresholding_Block_colorthresholding_9_0_3_2160_3840_1_exit_proc_U0 260
Add Instance bgr2hsv_9_2160_3840_1_s bgr2hsv_9_2160_3840_1_U0 844
Add Instance bgr2hsv_9_2160_3840_1_Loop_1_proc bgr2hsv_9_2160_3840_1_Loop_1_proc_U0 106
Add Instance write_r call_ln160_write_r_fu_246 246
Add Instance read_r in_pix_V_read_r_fu_253 253
Add Instance bgr2hsv_9_2160_3840_1_Block_codeRepl8_proc233 bgr2hsv_9_2160_3840_1_Block_codeRepl8_proc233_U0 122
Add Instance erode_0_0_2160_3840_0_3_3_1_1_176 erode_0_0_2160_3840_0_3_3_1_1_176_U0 858
Add Instance xferode_2160_3840_1_0_1_0_3841_3_3_s grp_xferode_2160_3840_1_0_1_0_3841_3_3_s_fu_80 80
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_xfExtractPixels_1_1_0_s_fu_448 448
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_1_xfExtractPixels_1_1_0_s_fu_453 453
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_2_xfExtractPixels_1_1_0_s_fu_458 458
Add Instance dilate_0_0_2160_3840_0_3_3_1_1_177 dilate_0_0_2160_3840_0_3_3_1_1_177_U0 866
Add Instance xfdilate_2160_3840_1_0_1_0_3841_3_3_s grp_xfdilate_2160_3840_1_0_1_0_3841_3_3_s_fu_80 80
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_xfExtractPixels_1_1_0_s_fu_448 448
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_3_xfExtractPixels_1_1_0_s_fu_453 453
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_4_xfExtractPixels_1_1_0_s_fu_458 458
Add Instance dilate_0_0_2160_3840_0_3_3_1_1_s dilate_0_0_2160_3840_0_3_3_1_1_U0 874
Add Instance xfdilate_2160_3840_1_0_1_0_3841_3_3_s grp_xfdilate_2160_3840_1_0_1_0_3841_3_3_s_fu_80 80
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_xfExtractPixels_1_1_0_s_fu_448 448
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_3_xfExtractPixels_1_1_0_s_fu_453 453
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_4_xfExtractPixels_1_1_0_s_fu_458 458
Add Instance erode_0_0_2160_3840_0_3_3_1_1_s erode_0_0_2160_3840_0_3_3_1_1_U0 882
Add Instance xferode_2160_3840_1_0_1_0_3841_3_3_s grp_xferode_2160_3840_1_0_1_0_3841_3_3_s_fu_80 80
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_xfExtractPixels_1_1_0_s_fu_448 448
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_1_xfExtractPixels_1_1_0_s_fu_453 453
Add Instance xfExtractPixels_1_1_0_s src_buf_temp_copy_extract_0_V_2_xfExtractPixels_1_1_0_s_fu_458 458
Add Instance Block_Mat_exit717_proc83 Block_Mat_exit717_proc83_U0 890
INFO: [v++ 60-586] Created /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xo_ultra96v2_min2_hw/color_detect.xo
INFO: [v++ 60-791] Total elapsed time: 0h 1m 8s
-e ----
Compiling xclbin...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xclbin_ultra96v2_min2_hw
v++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xclbin_ultra96v2_min2_hw/krnl_colordetect.xclbin --link /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xo_ultra96v2_min2_hw/color_detect.xo \
 -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB --clock.defaultFreqHz 300000000 -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect --target hw --platform /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw --save-temps --debug --kernel_frequency 300 --report_level 2 --optimize 2 --jobs 8 --xp "vivado_param:project.writeIntermediateCheckpoints=1" \
 --xp vivado_prop:run.impl_1.strategy=Performance_Explore  \
 
WARNING: [v++ 60-1600] The option 'xp' was used directly on the command line, where its usage is deprecated. To ensure input line works for supported operating systems or shells, v++ supports specification for some options in a configuration file. As an alternative, please use options 'advanced.*', 'vivado.*' in a configuration file. Use one or more configuration files along with section headers to define key-value pairs for the advanced properties or parameters. Specify a configuration file using '--config'.
INFO: [v++ 82-185] Check out the auto-generated 'sample_link.ini' configuration file. The file shows how to migrate from deprecated command line --xp switches to configuration file directives.
Option Map File Used: '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/data/vitis/vpp/optMap.xml'

****** v++ v2019.2 (64-bit)
  **** SW Build 2700185 on Thu Oct 24 18:45:48 MDT 2019
    ** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.

INFO: [v++ 60-1306] Additional information associated with this v++ link can be found at:
 Reports: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/reports/link
 Log files: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/logs/link
Running Dispatch Server on port:35961
INFO: [v++ 60-1548] Creating build summary session with primary output /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xclbin_ultra96v2_min2_hw/krnl_colordetect.xclbin.link_summary, at Sun Mar 29 22:01:26 2020
INFO: [v++ 60-1316] Initiating connection to rulecheck server, at Sun Mar 29 22:01:26 2020
Running Rule Check Server on port:35127
INFO: [v++ 60-1315] Creating rulecheck session with output '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/reports/link/v++_link_krnl_colordetect_guidance.html', at Sun Mar 29 22:01:27 2020
INFO: [v++ 60-895]   Target platform: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm
INFO: [v++ 60-1578]   This platform contains Xilinx Shell Archive '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/hw/ultra96v2_min2.xsa'
INFO: [v++ 60-629] Linking for hardware target
INFO: [v++ 60-423]   Target device: ultra96v2_min2
INFO: [v++ 60-1332] Run 'run_link' status: Not started
INFO: [v++ 60-1443] [22:01:27] Run run_link: Step system_link: Started
INFO: [v++ 60-1453] Command Line: system_link --xo /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xo_ultra96v2_min2_hw/color_detect.xo -keep --config /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/syslinkConfig.ini --xpfm /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --target hw --output_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/run_link
INFO: [SYSTEM_LINK 82-76] Reading emulation BD and HPFM information
INFO: [SYSTEM_LINK 60-1316] Initiating connection to rulecheck server, at Sun Mar 29 22:01:28 2020
INFO: [SYSTEM_LINK 82-70] Extracting xo v3 file /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xo_ultra96v2_min2_hw/color_detect.xo
INFO: [KernelCheck 83-118] 'color_detect' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'img_in' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'low_thresh' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'high_thresh' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'process_shape' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'img_out' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'rows' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'cols' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [SYSTEM_LINK 82-53] Creating IP database /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml
INFO: [SYSTEM_LINK 82-38] [22:01:28] build_xd_ip_db started: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/bin/build_xd_ip_db -ip_search 0  -sds-pf /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/ultra96v2_min2.hpfm -clkid 0 -ip /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/iprepo/xilinx_com_hls_color_detect_1_0,color_detect -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml
INFO: [SYSTEM_LINK 82-37] [22:01:32] build_xd_ip_db finished successfully
Time (s): cpu = 00:00:03 ; elapsed = 00:00:03 . Memory (MB): peak = 296.441 ; gain = 0.000 ; free physical = 11778 ; free virtual = 39256
INFO: [SYSTEM_LINK 82-51] Create system connectivity graph
INFO: [SYSTEM_LINK 82-102] Applying explicit connections to the system connectivity graph: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/cfgraph/cfgen_cfgraph.xml
INFO: [SYSTEM_LINK 82-38] [22:01:32] cfgen started: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/bin/cfgen  -clock.defaultFreqHz 300000000 -dmclkid 0 -r /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/cfgraph/cfgen_cfgraph.xml
INFO: [CFGEN 83-0] Kernel Specs: 
INFO: [CFGEN 83-0]   kernel: color_detect, num: 1  {color_detect_1}
INFO: [CFGEN 83-2226] Inferring mapping for argument color_detect_1.img_in to HP
INFO: [CFGEN 83-2226] Inferring mapping for argument color_detect_1.low_thresh to HP
INFO: [CFGEN 83-2226] Inferring mapping for argument color_detect_1.high_thresh to HP
INFO: [CFGEN 83-2226] Inferring mapping for argument color_detect_1.process_shape to HP
INFO: [CFGEN 83-2226] Inferring mapping for argument color_detect_1.img_out to HP
INFO: [SYSTEM_LINK 82-37] [22:01:32] cfgen finished successfully
Time (s): cpu = 00:00:00.27 ; elapsed = 00:00:00.34 . Memory (MB): peak = 296.441 ; gain = 0.000 ; free physical = 11779 ; free virtual = 39258
INFO: [SYSTEM_LINK 82-52] Create top-level block diagram
INFO: [SYSTEM_LINK 82-38] [22:01:32] cf2bd started: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/bin/cf2bd  --linux --trace_buffer 1024 --input_file /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/cfgraph/cfgen_cfgraph.xml --ip_db /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml --cf_name dr --working_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.xsd --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link --output_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int
INFO: [CF2BD 82-31] Launching cf2xd: cf2xd -linux -trace-buffer 1024 -i /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/cfgraph/cfgen_cfgraph.xml -r /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml -o dr.xml
INFO: [CF2BD 82-28] cf2xd finished successfully
INFO: [CF2BD 82-31] Launching cf_xsd: cf_xsd -disable-address-gen -dn dr -dp /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.xsd
                                                                                
rlwrap: warning: your $TERM is 'xterm-256color' but rlwrap couldn't find it in the terminfo database. Expect some problems.: Inappropriate ioctl for device
INFO: [CF2BD 82-28] cf_xsd finished successfully
INFO: [SYSTEM_LINK 82-37] [22:01:34] cf2bd finished successfully
Time (s): cpu = 00:00:02 ; elapsed = 00:00:02 . Memory (MB): peak = 296.441 ; gain = 0.000 ; free physical = 11776 ; free virtual = 39258
INFO: [v++ 60-1441] [22:01:34] Run run_link: Step system_link: Completed
Time (s): cpu = 00:00:06 ; elapsed = 00:00:06 . Memory (MB): peak = 679.691 ; gain = 0.000 ; free physical = 11794 ; free virtual = 39277
INFO: [v++ 60-1443] [22:01:34] Run run_link: Step cf2sw: Started
INFO: [v++ 60-1453] Command Line: cf2sw -sdsl /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/sdsl.dat -rtd /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/cf2sw.rtd -xclbin /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/xclbin_orig.xml -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/xclbin_orig.1.xml
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/run_link
INFO: [v++ 60-1441] [22:01:34] Run run_link: Step cf2sw: Completed
Time (s): cpu = 00:00:00.52 ; elapsed = 00:00:00.57 . Memory (MB): peak = 679.691 ; gain = 0.000 ; free physical = 11793 ; free virtual = 39276
INFO: [v++ 60-1443] [22:01:34] Run run_link: Step rtd2_system_diagram: Started
INFO: [v++ 60-1453] Command Line: rtd2SystemDiagram --rtdJsonFileName /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/cf2sw.rtd --diagramJsonFileName /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/systemDiagramModel.json --platformFilePath /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --generatedByName v++ --generatedByVersion 2019.2 --generatedByChangeList 2700185 --generatedByTimeStamp Thu Oct 24 18:45:48 MDT 2019 --generatedByOptions /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/bin/unwrapped/lnx64.o/v++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xclbin_ultra96v2_min2_hw/krnl_colordetect.xclbin --link /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xo_ultra96v2_min2_hw/color_detect.xo -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB --clock.defaultFreqHz 300000000 -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect --target hw --platform /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw --save-temps --debug --kernel_frequency 300 --report_level 2 --optimize 2 --jobs 8 --xp vivado_param:project.writeIntermediateCheckpoints=1 --xp vivado_prop:run.impl_1.strategy=Performance_Explore  --generatedByXclbinName krnl_colordetect --kernelInfoDataFileName /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/kernel_info.dat
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/run_link
WARNING: [v++ 82-164] Unable to populate user region instance path.  The platform file does not contain a hardwarePlatform.devices..core.instPath entry.
INFO: [v++ 60-839] Read in kernel information from file '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/kernel_info.dat'.
WARNING: [v++ 82-157] Unable to populate kernel available resources BRAM entry.
WARNING: [v++ 82-158] Unable to populate kernel available resources DSP entry.
WARNING: [v++ 82-163] Unable to populate user region available resources.  The platform file deos not contain a hardwarePlatform.devices..core.availableResources entry
INFO: [v++ 60-1441] [22:01:36] Run run_link: Step rtd2_system_diagram: Completed
Time (s): cpu = 00:00:02 ; elapsed = 00:00:02 . Memory (MB): peak = 679.691 ; gain = 0.000 ; free physical = 11794 ; free virtual = 39277
INFO: [v++ 60-1443] [22:01:36] Run run_link: Step vpl: Started
INFO: [v++ 60-1453] Command Line: vpl -t hw -f /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm -g -j 8 --kernel_frequency 300 -s --output_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int --log_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/logs/link --report_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/reports/link --config /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/vplConfig.ini -k /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/kernel_info.dat --webtalk_flag Vitis --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link --no-info --tlog_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/.tlog/v++_link_krnl_colordetect --iprepo /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/xo/ip_repo/xilinx_com_hls_color_detect_1_0 --messageDb /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/run_link/vpl.pb /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/dr.bd.tcl
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/run_link

****** vpl v2019.2 (64-bit)
  **** SW Build 2700185 on Thu Oct 24 18:45:48 MDT 2019
    ** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.

INFO: [VPL 60-839] Read in kernel information from file '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/kernel_info.dat'.
INFO: [VPL 60-423]   Target device: ultra96v2_min2
INFO: [VPL 60-1032] Extracting hardware platform to /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/vivado/vpl/.local/hw_platform
[22:01:48] Run vpl: Step create_project: Started
Creating Vivado project.
[22:01:56] Run vpl: Step create_project: Completed
[22:01:56] Run vpl: Step create_bd: Started
[22:02:06] Run vpl: Step create_bd: Completed
[22:02:06] Run vpl: Step update_bd: Started
[22:02:07] Run vpl: Step update_bd: Completed
[22:02:07] Run vpl: Step generate_target: Started
[22:02:41] Run vpl: Step generate_target: Completed
[22:02:41] Run vpl: Step config_hw_runs: Started
[22:02:44] Run vpl: Step config_hw_runs: Completed
[22:02:44] Run vpl: Step synth: Started
[22:03:46] Block-level synthesis in progress, 0 of 19 jobs complete, 8 jobs running.
[22:04:16] Block-level synthesis in progress, 0 of 19 jobs complete, 8 jobs running.
[22:04:47] Block-level synthesis in progress, 0 of 19 jobs complete, 8 jobs running.
[22:05:17] Block-level synthesis in progress, 0 of 19 jobs complete, 8 jobs running.
[22:05:47] Block-level synthesis in progress, 0 of 19 jobs complete, 8 jobs running.
[22:06:18] Block-level synthesis in progress, 0 of 19 jobs complete, 8 jobs running.
[22:06:48] Block-level synthesis in progress, 0 of 19 jobs complete, 8 jobs running.
[22:07:19] Block-level synthesis in progress, 1 of 19 jobs complete, 7 jobs running.
[22:07:49] Block-level synthesis in progress, 2 of 19 jobs complete, 6 jobs running.
[22:08:19] Block-level synthesis in progress, 5 of 19 jobs complete, 5 jobs running.
[22:08:50] Block-level synthesis in progress, 9 of 19 jobs complete, 2 jobs running.
[22:09:20] Block-level synthesis in progress, 11 of 19 jobs complete, 4 jobs running.
[22:09:50] Block-level synthesis in progress, 11 of 19 jobs complete, 4 jobs running.
[22:10:21] Block-level synthesis in progress, 15 of 19 jobs complete, 4 jobs running.
[22:10:51] Block-level synthesis in progress, 15 of 19 jobs complete, 4 jobs running.
[22:11:21] Block-level synthesis in progress, 17 of 19 jobs complete, 2 jobs running.
[22:11:51] Block-level synthesis in progress, 17 of 19 jobs complete, 2 jobs running.
[22:12:21] Block-level synthesis in progress, 18 of 19 jobs complete, 1 job running.
[22:12:52] Top-level synthesis in progress.
[22:13:22] Top-level synthesis in progress.
[22:13:52] Top-level synthesis in progress.
[22:14:22] Top-level synthesis in progress.
[22:14:27] Run vpl: Step synth: Completed
[22:14:27] Run vpl: Step impl: Started
[22:16:28] Finished 2nd of 6 tasks (FPGA linking synthesized kernels to platform). Elapsed time: 00h 14m 50s 

[22:16:28] Starting logic optimization..
[22:16:58] Phase 1 Retarget
[22:16:58] Phase 2 Constant propagation
[22:16:58] Phase 3 Sweep
[22:16:58] Phase 4 BUFG optimization
[22:16:58] Phase 5 Shift Register Optimization
[22:16:58] Phase 6 Post Processing Netlist
[22:17:28] Finished 3rd of 6 tasks (FPGA logic optimization). Elapsed time: 00h 01m 00s 

[22:17:28] Starting logic placement..
[22:17:58] Phase 1 Placer Initialization
[22:17:58] Phase 1.1 Placer Initialization Netlist Sorting
[22:17:58] Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device
[22:17:58] Phase 1.3 Build Placer Netlist Model
[22:17:58] Phase 1.4 Constrain Clocks/Macros
[22:17:58] Phase 2 Global Placement
[22:17:58] Phase 2.1 Floorplanning
[22:17:58] Phase 2.2 Global Placement Core
[22:18:29] Phase 2.2.1 Physical Synthesis In Placer
[22:18:29] Phase 3 Detail Placement
[22:18:29] Phase 3.1 Commit Multi Column Macros
[22:18:29] Phase 3.2 Commit Most Macros & LUTRAMs
[22:18:29] Phase 3.3 Area Swap Optimization
[22:18:29] Phase 3.4 Pipeline Register Optimization
[22:18:29] Phase 3.5 IO Cut Optimizer
[22:18:29] Phase 3.6 Fast Optimization
[22:18:29] Phase 3.7 Small Shape DP
[22:18:29] Phase 3.7.1 Small Shape Clustering
[22:18:59] Phase 3.7.2 Flow Legalize Slice Clusters
[22:18:59] Phase 3.7.3 Slice Area Swap
[22:18:59] Phase 3.7.4 Commit Slice Clusters
[22:18:59] Phase 3.8 Re-assign LUT pins
[22:18:59] Phase 3.9 Pipeline Register Optimization
[22:18:59] Phase 4 Post Placement Optimization and Clean-Up
[22:18:59] Phase 4.1 Post Commit Optimization
[22:18:59] Phase 4.1.1 Post Placement Optimization
[22:18:59] Phase 4.1.1.1 BUFG Insertion
[22:18:59] Phase 4.2 Post Placement Cleanup
[22:18:59] Phase 4.3 Placer Reporting
[22:18:59] Phase 4.4 Final Placement Cleanup
[22:19:29] Finished 4th of 6 tasks (FPGA logic placement). Elapsed time: 00h 02m 00s 

[22:19:29] Starting logic routing..
[22:19:29] Phase 1 Build RT Design
[22:19:59] Phase 2 Router Initialization
[22:19:59] Phase 2.1 Create Timer
[22:19:59] Phase 2.2 Fix Topology Constraints
[22:19:59] Phase 2.3 Pre Route Cleanup
[22:19:59] Phase 2.4 Global Clock Net Routing
[22:19:59] Phase 2.5 Update Timing
[22:19:59] Phase 2.6 Update Timing for Bus Skew
[22:19:59] Phase 2.6.1 Update Timing
[22:20:30] Phase 3 Initial Routing
[22:20:30] Phase 4 Rip-up And Reroute
[22:20:30] Phase 4.1 Global Iteration 0
[22:22:00] Phase 4.2 Global Iteration 1
[22:22:00] Phase 5 Delay and Skew Optimization
[22:22:00] Phase 5.1 Delay CleanUp
[22:22:00] Phase 5.1.1 Update Timing
[22:22:00] Phase 5.2 Clock Skew Optimization
[22:22:00] Phase 6 Post Hold Fix
[22:22:00] Phase 6.1 Hold Fix Iter
[22:22:00] Phase 6.1.1 Update Timing
[22:22:00] Phase 7 Route finalize
[22:22:00] Phase 8 Verifying routed nets
[22:22:00] Phase 9 Depositing Routes
[22:22:00] Phase 10 Route finalize
[22:22:00] Phase 11 Post Router Timing
[22:22:00] Finished 5th of 6 tasks (FPGA routing). Elapsed time: 00h 02m 31s 

[22:22:00] Starting bitstream generation..
[22:23:01] Creating bitmap...
[22:23:01] Writing bitstream ./ultra96v2_min2_wrapper.bit...
[22:23:01] Finished 6th of 6 tasks (FPGA bitstream generation). Elapsed time: 00h 01m 00s 
[22:23:07] Run vpl: Step impl: Completed
[22:23:07] Run vpl: FINISHED. Run Status: impl Complete!
INFO: [v++ 60-1441] [22:23:07] Run run_link: Step vpl: Completed
Time (s): cpu = 00:00:08 ; elapsed = 00:21:31 . Memory (MB): peak = 679.691 ; gain = 0.000 ; free physical = 14934 ; free virtual = 40171
INFO: [v++ 60-1443] [22:23:07] Run run_link: Step rtdgen: Started
INFO: [v++ 60-1453] Command Line: rtdgen
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/run_link
INFO: [v++ 60-1453] Command Line: cf2sw -a /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/address_map.xml -sdsl /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/sdsl.dat -xclbin /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/xclbin_orig.xml -rtd /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect.rtd -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect.xml
INFO: [v++ 60-1618] Launching 
INFO: [v++ 60-1441] [22:23:09] Run run_link: Step rtdgen: Completed
Time (s): cpu = 00:00:02 ; elapsed = 00:00:02 . Memory (MB): peak = 679.691 ; gain = 0.000 ; free physical = 14948 ; free virtual = 40186
INFO: [v++ 60-1443] [22:23:09] Run run_link: Step xclbinutil: Started
INFO: [v++ 60-1453] Command Line: xclbinutil --add-section BITSTREAM:RAW:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/system.bit --force --key-value SYS:mode:flat --add-section :JSON:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect.rtd --add-section CLOCK_FREQ_TOPOLOGY:JSON:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect_xml.rtd --add-section BUILD_METADATA:JSON:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect_build.rtd --add-section EMBEDDED_METADATA:RAW:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect.xml --add-section SYSTEM_METADATA:RAW:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/systemDiagramModelSlrBaseAddress.json --key-value SYS:PlatformVBNV:vendor_Ultra96V2_ultra96v2_min2_1_0 --output /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect.xclbin
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/run_link
XRT Build Version: 2.3.1301
       Build Date: 2019-10-24 20:05:16
          Hash ID: 192e706aea53163a04c574f9b3fe9ed76b6ca471
Creating a default 'in-memory' xclbin image.

Section: 'BITSTREAM'(0) was successfully added.
Size   : 5568794 bytes
Format : RAW
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/system.bit'

Section: 'MEM_TOPOLOGY'(6) was successfully added.
Format : JSON
File   : 'mem_topology'

Section: 'IP_LAYOUT'(8) was successfully added.
Format : JSON
File   : 'ip_layout'

Section: 'CONNECTIVITY'(7) was successfully added.
Format : JSON
File   : 'connectivity'
WARNING: Skipping CLOCK_FREQ_TOPOLOGY section for count size is zero.
WARNING: Section 'CLOCK_FREQ_TOPOLOGY' content is empty.  No data in the given JSON file.

Section: 'CLOCK_FREQ_TOPOLOGY'(11) was empty.  No action taken.
Format : JSON
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect_xml.rtd'

Section: 'BUILD_METADATA'(14) was successfully added.
Size   : 3853 bytes
Format : JSON
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect_build.rtd'

Section: 'EMBEDDED_METADATA'(2) was successfully added.
Size   : 16590 bytes
Format : RAW
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect.xml'

Section: 'SYSTEM_METADATA'(22) was successfully added.
Size   : 11880 bytes
Format : RAW
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/systemDiagramModelSlrBaseAddress.json'
Successfully wrote (5608798 bytes) to the output file: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect.xclbin
Leaving xclbinutil.
INFO: [v++ 60-1441] [22:23:09] Run run_link: Step xclbinutil: Completed
Time (s): cpu = 00:00:00 ; elapsed = 00:00:00.27 . Memory (MB): peak = 679.691 ; gain = 0.000 ; free physical = 14940 ; free virtual = 40186
INFO: [v++ 60-1443] [22:23:09] Run run_link: Step xclbinutilinfo: Started
INFO: [v++ 60-1453] Command Line: xclbinutil --quiet --info /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect.xclbin.info --input /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/int/krnl_colordetect.xclbin
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/link/run_link
INFO: [v++ 60-1441] [22:23:10] Run run_link: Step xclbinutilinfo: Completed
Time (s): cpu = 00:00:00.03 ; elapsed = 00:00:00.05 . Memory (MB): peak = 679.691 ; gain = 0.000 ; free physical = 14940 ; free virtual = 40186
INFO: [v++ 60-244] Generating system estimate report...
INFO: [v++ 60-1092] Generated system estimate report: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/reports/link/system_estimate_krnl_colordetect.xtxt
INFO: [v++ 60-907] Packaging to directory: '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xclbin_ultra96v2_min2_hw/sd_card'
INFO: [v++ 60-586] Created /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/xclbin_ultra96v2_min2_hw/krnl_colordetect.xclbin
INFO: [v++ 60-1307] Run completed. Additional information can be found in:
 Guidance: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/reports/link/v++_link_krnl_colordetect_guidance.html
 Timing Report: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/reports/link/imp/ultra96v2_min2_wrapper_timing_summary_routed.rpt
 Vivado Log: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/logs/link/vivado.log
 Steps Log File: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build/_x_ultra96v2_min2_hw/logs/link/link.steps.log

INFO: [v++ 60-791] Total elapsed time: 0h 21m 46s
masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L3/examples/colordetect/build$ 


現在のVitis_Libraries/vision/L3/examples/colordetect/build ディレクトリの様子を示す。コマンド起動する前は Makefile だけだった。
Vitis_Vision_45_200330.png 

次に、sd_card ディレクトリを make する。
make run TARGET=hw BOARD=Zynq ARCH=aarch64
Vitis_Vision_46_200330.png

するとやはりエラーだった。
エラーを解消するには、下の Makefile のハイライトされた部分を削除すれば良い。Makefile の一部を引用する。
Vitis_Vision_47_200330.png

この部分を削除して、もう一度 make run TARGET=hw BOARD=Zynq ARCH=aarch64 を実行したところ、今度はエラーが発生しなかった。
Vitis_Vision_48_200330.png

Vitis_Libraries/vision/L3/examples/colordetect/build ディレクトリの内容を示す。
Vitis_Vision_50_200330.png

sd_card ディレクトリを表示してみよう。 Vitis_Libraries/vision/L3/examples/colordetect/build/sd_card ディレクトリの様子を示す。
Vitis_Vision_49_200330.png

xclbin_ultra96v2_min2_hw ディレクトリの下には、 krnl_colordetect.xclbin が入っている。

BOOT.BIN の在り処は、 Vitis_Libraries/vision/L3/examples/colordetect/build/xclbin_ultra96v2_min2_hw/sd_card だった。
Vitis_Vision_51_200330.png
  1. 2020年03月30日 04:44 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis Vision ライブラリの resize サンプルを Vitis GUI でやってみるが失敗

Vitis Vision ライブラリの resize サンプルをやってみる4”を CUI じゃなくて Vitis GUI でやってみたいということで、Vitis GUI でやってみたがコンパイル、リンクに失敗した。

Vitis 2019.2 で作成したアプリケーション・プロジェクトの resize を示す。プラットフォームは ultra96v2_min2 を使用している。
Vitis_Vision_36_200329.png

エラー内容はこんな感じだ。1 個、”エラー: ‘ACCESS_READ’ was not declared in this scope”があるが、後は再定義されていますというエラーだった。
Vitis_Vision_43_200329.png

Assistant ウインドウの resize_system -> resize を右クリックして右クリックメニューから settings.. を選択した時の V++ compiler options を示す。
Vitis_Vision_37_200329.png

-I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB


Explorer ウインドウの resize_system -> resize を右クリックして、右クリックメニューから Properties を選択した。
GCC Host Compiler の include に include patthを追加した。

/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2


Vitis_Vision_38_200329.png

GCC Host Linker の Libraries に項目を追加した。その様子を示す。
Vitis_Vision_39_200329.png

エラーはソフトウェアの部分で出ていて、Vivado HLS や Vivado のプロジェクトはできている。
ブロックデザインを示す。
Vitis_Vision_40_200329.png

Address Editer 画面を示す。
Vitis_Vision_41_200329.png

インプリメンテーションのサーマリを示す。
Vitis_Vision_42_200329.png
  1. 2020年03月29日 05:59 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 用 Vitis アクセラレーション・プラットフォーム ultra96v2_min2 の公開

いつも使っていて、ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(ビルド編)”にも使ってもらっているファイルを生成するために使用した Ultra96-V2 用 Vitis アクセラレーション・プラットフォーム ultra96v2_min2 をダウンロード公開します。

ultra96v2_min2 は作り方と検証の仕方は以下のブログで紹介しました。
Ultra96-V2 の Vitis アクセラレーション・プラットフォームの作り方1(ハードウェア・コンポーネント編)
Ultra96-V2 の Vitis アクセラレーション・プラットフォームの作り方2(ソフトウェア・コンポーネント編)
Ultra96-V2 の Vitis アクセラレーション・プラットフォームの作り方3(Vitis プラットフォーム作成)
Ultra96-V2 の Vitis アクセラレーション・プラットフォームの作り方4(Vitis アプリケーション・プロジェクトの作成)

プラットフォームの ultra96v2_min2.zip と PetaLinux 2019.2 で生成した RootFS aarch64-xilinx-linux_ultra96v2_min2.zip をここからダウンロードしてください。
なおこれらのファイルは無保証です。自分の責任でお試しください。


これらのファイルの使い方は”Ultra96-V2 用 Vitis アクセラレーション・プラットフォームのサンプルを公開”をご覧ください。名前は多少違いますが、同様に使えます。
  1. 2020年03月28日 04:18 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Vitis Vision ライブラリの resize サンプルをやってみる4

Vitis Vision ライブラリの resize サンプルをやってみる3”の続き。

L2/examples/resize を Ultra96-V2 で動作させてみように従って、resize をビルドしたところ、sd_card ディレクトリの生成でエラーが出たが、大体一式ビルドできた。前回は、ビルドしたファイルを使用して、Ultra96-V2 の実機で動作を確認できた。動作を確認できたのだが、リサイズ後の画像が残っていないので、寂しい。それに、元画像も 4k とは言いながら HD 解像度だったので、元画像を 4k にして、リサイズ後の画像も保存してみることにした。

まずは、 xf_resize_tb.cpp にリサイズ後の画像を保存するコードを追加した。
HLS での画像出力を resize_hls.jpg ファイルとして、OpenCV での画像出力を resize_ocv.jpg ファイルとして出力する。

    // image write by marsee
    imwrite("resize_hls.jpg", result_hls);
    imwrite("resize_ocv.jpg", result_ocv);


上のコードを追加した。
Vitis_Vision_27_200325.png

これで、 make run TARGET=hw BOARD=Zynq ARCH=aarch64 をもう一度行ったのだが、なかなか sd_card ディレクトリのファイルをうまく更新してくれなかった。
例えば、 resize.exe は resize/build/bin_ultra96v2_min2 に最新のビルドがあるので、各ディレクトリを探しながら build/sd_card ディレクトリに集めた。
そして 4k.jpg も Pinta ツールを使用して、 3840 x 2160 ピクセルに変換した。
Vitis_Vision_33_200326.jpg

resize/build/sd_card ディレクトリを示す。
Vitis_Vision_29_200326.png

Vitis Vision ライブラリの resize サンプルをやってみる3”でやったのと同様に手順を実行した。

まずは、ホスト・パソコンから scp で BOOT.BIN をUltra96-V2 の MicroSD カードの第 1 パーティションに SFTP した。これは、変更したのがホスト・アプリケーションだけなので、必要ないとは思う。念の為。
sudo su
scp BOOT.BIN 192.168.3.23:/run/media/mmcblk0p1

gtk_term から reboot した。

gtk_term でログインして、 /home/root/sd_card を削除した。
rm -r sd_card

Vitis_Libraries/vision/L2/examples/resize/build に cd して、ホスト・パソコンから scp で sd_card ディレクトリを Ultra96-V2 の /home/root に SFTP した。
scp -r sd_card 192.168.3.23:/home/root

Ultra96-V2 のPetaLinux 上で zocl ドライバを起動した。
insmod /lib/modules/4.19.0-xilinx-v2019.2/extra/zocl.ko

cd sd_card してから、init.sh を起動した。
init.sh の内容を示す。

export XCL_BINDIR=xclbin_ultra96v2_min2_hw
./resize.exe 4k.jpg


XRT へのパスを通し、init.sh を実行形式にしてから init.sh を起動した。
export XILINX_XRT=/usr
chmod +x init.sh
./init.sh

すると、resize が動作した。 xf_resize_tb.cpp の表示メッセージを示す。

28.3221ms
Minimum error in intensity = 0.000000
Maximum error in intensity = 0.000000
Percentage of pixels above error threshold = 0.000000


やはり、実行時間が長くなっている。HD の場合は、 7.64396ms だった。約 3.71 倍になっている。
Vitis_Vision_30_200326.png

ログを示す。

root@ultra96v2_min2:~/sd_card# insmod /lib/modules/4.19.0-xilinx-v2019.2/extra/zocl.ko
[  309.146969] zocl: loading out-of-tree module taints kernel.
[  309.156249] [drm] Probing for xlnx,zocl
[  309.160236] [drm] FPGA programming device pcap founded.
[  309.165464] [drm] PR Isolation addr 0x0
[  309.166249] [drm] Initialized zocl 2018.2.1 20180313 for a0000000.zyxclmm_drm on minor 1
root@ultra96v2_min2:~/sd_card# export XILINX_XRT=/usr
root@ultra96v2_min2:~/sd_card# ./init.sh
INFO: Running OpenCL section.
[  357.220695] [drm] Pid 2205 opened device
[  357.224654] [drm] Pid 2205 closed device
[  357.239953] [drm] Pid 2205 opened device
Found Platform
Platform Name: Xilinx
INFO: Device found - edge
XCLBIN File Name: krnl_resize
INFO: Importing xclbin_ultra96v2_min2_hw/krnl_resize.xclbin
Loading: 'xclbin_ultra96v2_min2_hw/krnl_resize.xclbin'
[  357.536445] [drm] Finding IP_LAYOUT section header
[  357.536457] [drm] Section IP_LAYOUT details:
[  357.541271] [drm]   offset = 0x54fcf8
[  357.545537] [drm]   size = 0x58
[  357.549488] [drm] Finding DEBUG_IP_LAYOUT section header
[  357.552630] [drm] AXLF section DEBUG_IP_LAYOUT header not found
[  357.557936] [drm] Finding CONNECTIVITY section header
[  357.563850] [drm] Section CONNECTIVITY details:
[  357.568893] [drm]   offset = 0x54fd50
[  357.573415] [drm]   size = 0x1c
[  357.577229] [drm] Finding MEM_TOPOLOGY section header
[  357.580362] [drm] Section MEM_TOPOLOGY details:
[  357.585406] [drm]   offset = 0x54fc00
[  357.589924] [drm]   size = 0xf8
[  357.596160] [drm] No ERT scheduler on MPSoC, using KDS
[  357.604807] [drm] Fail to install CU 0 interrupt handler: -22. Fall back to polling mode.
[  357.612983] [drm] scheduler config ert(0)
[  357.612994] [drm]   cus(1)
[  357.616997] [drm]   slots(16)
[  357.619691] [drm]   num_cu_masks(1)
[  357.622650] [drm]   cu_shift(16)
[  357.626130] [drm]   cu_base(0xa0000000)
28.3221ms
Minimum error in intensity = 0.000000
Maximum error in intensity = 0.000000
Percentage of pixels above error threshold = 0.000000
[  357.629350] [drm]   polling(1)
[  358.251098] [drm] Pid 2205 closed device
root@ultra96v2_min2:~/sd_card


出力された input.png, resize_hls.jpg, resize_ocv.jpg をホスト・パソコンに引き上げた。
scp 192.168.3.23:/home/root/sd_card/input.png .
scp 192.168.3.23:/home/root/sd_card/resize_ocv.jpg .
scp 192.168.3.23:/home/root/sd_card/resize_hls.jpg .

Vitis_Vision_31_200326.png

Vitis_Vision_32_200326.png

resize_hls.jpg, resize_ocv.jpg を示す。うまく HD に変換されているようだ。
Vitis_Vision_34_200326.jpg

Vitis_Vision_35_200326.jpg
  1. 2020年03月27日 05:21 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis Vision ライブラリの resize サンプルをやってみる3

Vitis Vision ライブラリの resize サンプルをやってみる2”の続き。

L2/examples/resize を Ultra96-V2 で動作させてみように従って、resize をビルドしたところ、sd_card ディレクトリの生成でエラーが出たが、大体一式ビルドできた。前回は、Vivado HLS の合成結果とVivado のブロックデザインとインプリメンテーションの結果をみた。今回は、Ultra96-V2の実機で動作させたところ、実機で動作した。

Vitis Vision ライブラリの resize サンプルをやってみる1”でのビルドは、最後エラーで終了していた。これは、resize/build にある Makefile の 447 行目がエラーを出していたので、先に進まなかったので、そこをコメントアウトした。
それからもう一度、make run した。
make run TARGET=hw BOARD=Zynq ARCH=aarch64
Vitis_Vision_20_200324.png

Vitis_Vision_21_200324.png

Vitis_Libraries/vision/L2/examples/resize/build/xclbin_ultra96v2_min2_hw/sd_card に BOOT.BIN があるので、そのディレクトリに cd した。
ホスト・パソコンから scp で BOOT.BIN をUltra96-V2 の MicroSD カードの第 1 パーティションに SFTP した。
sudo su
scp BOOT.BIN 192.168.3.23:/run/media/mmcblk0p1

Vitis_Vision_22_200325.png

gtk_term から reboot した。
Vitis_Vision_23_200325.png

Vitis_Libraries/vision/L2/examples/resize/build に cd して、ホスト・パソコンから scp で sd_card ディレクトリを Ultra96-V2 の /home/root に SFTP した。
scp -r sd_card 192.168.3.23:/home/root

PetaLinux が起動したら、root でログインした。

Ultra96-V2 のPetaLinux 上で zocl ドライバを起動した。
insmod /lib/modules/4.19.0-xilinx-v2019.2/extra/zocl.ko

cd sd_card してから、init.sh を起動した。
init.sh の内容を示す。

export XCL_BINDIR=xclbin_ultra96v2_min2_hw
./resize.exe 4k.jpg


XRT へのパスを通し、init.sh を実行形式にしてから init.sh を起動した。
export XILINX_XRT=/usr
chmod +x init.sh
./init.sh

すると、resize が動作した。 xf_resize_tb.cpp の表示メッセージを示す。

7.64396ms
Minimum error in intensity = 0.000000
Maximum error in intensity = 0.000000
Percentage of pixels above error threshold = 0.000000


Vitis_Vision_24_200325.png

すべての表示メッセージを示す。

root@ultra96v2_min2:~/sd_card# ./init.sh
INFO: Running OpenCL section.
[  241.129790] [drm] Pid 2209 opened device
[  241.133756] [drm] Pid 2209 closed device
[  241.137937] [drm] Pid 2209 opened device
Found Platform
Platform Name: Xilinx
INFO: Device found - edge
XCLBIN File Name: krnl_resize
INFO: Importing xclbin_ultra96v2_min2_hw/krnl_resize.xclbin
Loading: 'xclbin_ultra96v2_min2_hw/krnl_resize.xclbin'
[  241.431732] [drm] Finding IP_LAYOUT section header
[  241.431745] [drm] Section IP_LAYOUT details:
[  241.436574] [drm]   offset = 0x54fcf8
[  241.440844] [drm]   size = 0x58
[  241.444504] [drm] Finding DEBUG_IP_LAYOUT section header
[  241.447633] [drm] AXLF section DEBUG_IP_LAYOUT header not found
[  241.452937] [drm] Finding CONNECTIVITY section header
[  241.458853] [drm] Section CONNECTIVITY details:
[  241.463897] [drm]   offset = 0x54fd50
[  241.468418] [drm]   size = 0x1c
[  241.472080] [drm] Finding MEM_TOPOLOGY section header
[  241.475209] [drm] Section MEM_TOPOLOGY details:
[  241.480250] [drm]   offset = 0x54fc00
[  241.484771] [drm]   size = 0xf8
[  241.490974] [drm] No ERT scheduler on MPSoC, using KDS
[  241.499685] [drm] Fail to install CU 0 interrupt handler: -22. Fall back to polling mode.
[  241.507859] [drm] scheduler config ert(0)
[  241.507862] [drm]   cus(1)
[  241.511862] [drm]   slots(16)
[  241.514555] [drm]   num_cu_masks(1)
[  241.517513] [drm]   cu_shift(16)
[  241.520992] [drm]   cu_base(0xa0000000)
7.64396ms
Minimum error in intensity = 0.000000
Maximum error in intensity = 0.000000
Percentage of pixels above error threshold = 0.000000
[  241.524213] [drm]   polling(1)
[  241.831235] [drm] Pid 2209 closed device
root@ultra96v2_min2:~/sd_card# 


/home/root/sd_card ディレクトリに生成されていたのは、input_png だけだった。リサイズ後のファイルは無いのか?と xf_resize_tb.cpp を見ると、リサイズ後のファイルは生成されていなかった。
Vitis_Vision_25_200325.png

input.png を scp でホスト・パソコンに持ってきた。
sudo su
scp 192.168.3.23:/home/root/sd_card/input.png .

Vitis_Vision_26_200325.png

input.png を見ると、1920 x 1080 ピクセルつまり、HD 解像度の白黒画像だった。
Vitis_Vision_28_200326.jpg

sd_card ディレクトリの 4k.jpg 元画像も、1920 x 1080 ピクセルつまり、HD 解像度のカラー画像だった。4k 画層ではなかったのか?なぜ?
  1. 2020年03月26日 04:52 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

ISE 14.7 を Windows 10 で動かす方法

ISE 14.7 を Windows 10 で動かす方法です。

Windows8以降のOSでISE WebPACKを動かす”さんを参考に、libPortability.dll を修正します。未修正では、Save などのダイアログを出すとISE が落ちます。

もう1つ、ISim が動作しない場合があります。その場合は”[備忘録]Windows8でi-simが動かない件”さんを参考にして、collect2.exe をリネームしましょう。

これで、Windows 10 でも ISE 14.7 が動くと思います。

Xilinx 社の AR も貼っておきます。
AR# 62380 ISE インストール - Windows 8.1 または Windows 10 マシンに ISE 10.1 または 14.7 をインストールして実行する方法
  1. 2020年03月24日 13:49 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:2

Vitis Vision ライブラリの resize サンプルをやってみる2

Vitis Vision ライブラリの resize サンプルをやってみる1”の続き。

L2/examples/resize を Ultra96-V2 で動作させてみように従って、resize をビルドしたところ、sd_card ディレクトリの生成でエラーが出たが、大体一式ビルドできた。今回は、Vivado HLS の合成結果とVivado のブロックデザインとインプリメンテーションの結果を見ていこう。

まずは、Vivado HLS 2019.2 の合成結果を見てみよう。
Vivado HLS のプロジェクトは、Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/resize_accel/resize_accel/resize_accel ディレクトリにある。下の図はこのディレクトリの内容を示すが、1度 VIvado HLS の GUI を立ち上げているので、ファイルが増えている。
Vitis_Vision_17_200324.png

C コードの合成結果を示す。
動作周波数のターゲットは、300 MHz だったようだ。合成できている。
Vitis_Vision_14_200323.png

Latency -> Detail -> Instance の中で、resize_2_0_2160_3840_1080_1920_1_2_U0 をクリックした。
そうやって、下に降りていって、 xFReize AreaDownScale_2160_3840_1_0_1_1_1080_1920_3840_1920_s が一番下らしい?
Latency -> Detail -> Loop が表示されていて、LOOP_ROW_LOOP_COL の Initiation Interval の achieved が 1 クロックになっているのが分かる。つまりループを 1 クロックで処理できるので、性能が良いということが分かる。
Vitis_Vision_15_200323.png

Vivado HLS では見たいものが見えたので、今度はVivado プロジェクトの情報を見ていこう。
Vivado のプロジェクトは、Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/vivado/vpl/prj にある。
Vitis_Vision_18_200324.png

Vivado を起動して、上のディレクトリを指定してプロジェクトを開いた。
ブロックデザインを見てみよう。
Vitis_Vision_12_200323.png

resize_accel_1 の 画像入力用の AXI4 Master が m_axi_gmem1 で、画像出力用の AXI4 Master が m_axi_gmem2 のようだ。後は、良く分からない出力がたくさん出ている。

なお、動作周波数は意外なことに 100 MHz だった。
すみません。これはプラットフォームで決定されていたのでした。勘違いです。100 MHz を PLL で 200 MHz にアップしているので、200 MHz 動作でした。orz
Vitis_Vision_19_200324.png

Vivado HLS では、 300 MHz 動作で合成されていたのだが???

Vivado でのインプリメンテーション後のサマリを示す。
Vitis_Vision_13_200323.png

LUT が 14 % でVivado HLS のリソース使用量予想の 26 % からは大幅に減っているな。。。
Vivado でのリソース使用量の表を示す。
Vitis_Vision_16_200323.png
  1. 2020年03月24日 04:35 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis Vision ライブラリの resize サンプルをやってみる1

Vitis Vision ライブラリの勉強2”で学んだ L2/examples/resize を Ultra96-V2 で動作させてみように従って、resize をビルドしてみた。

ビルドの方法を示す。
Commands to run
1. Vitis のインストール・ディレクトリの settings64.sh を実行
source /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/settings64.sh

2. XRT の setenv.sh を実行
source /opt/xilinx/xrt/setup.sh

3. DEVICE 環境変数にプラットフォームの xpfm ファイルへのパスを設定する
export DEVICE=/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm

**For embedded devices:**
4. SYSROOT にプラットフォームの sysroot へのパスを設定する。
export SYSROOT=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux

5. xclbin を make する
make host xclbin TARGET=hw BOARD=Zynq ARCH=aarch64

6. sd_card ディレクトリを make する
make run TARGET=hw BOARD=Zynq ARCH=aarch64

これを実行した。
まずは、/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build に cd するのだが、間違って/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/ に cd してしまった。make host xclbin する際に間違いに気づいたので、cd build で build ディレクトリに移動した。
まずは、make host xclbin するところまでを実行した。
Vitis_Vision_4_200323.png
Vitis_Vision_5_200323.png
Vitis_Vision_6_200323.png

make host xclbin TARGET=hw BOARD=Zynq ARCH=aarch64 実行時のログを示す。

masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build$ make host xclbin TARGET=hw BOARD=Zynq ARCH=aarch64
-e ----
Compiling object xf_resize_tb...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2
aarch64-linux-gnu-g++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2/xf_resize_tb.o -c /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_tb.cpp -D XDEVICE=ultra96v2_min2 -DVIVADO_HLS_SIM -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2 -g --sysroot=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux -D__ZYNQ -std=c++14 -fPIC -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize -I/opt/xilinx/xrt/include -Wall -Wno-unknown-pragmas -Wno-unused-label -pthread  -idirafter /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2019.2/include 
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_headers.hpp:30,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_tb.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_sw_utils.hpp: 関数 ‘void xf::cv::analyzeDiff(cv::Mat&, int, float&)’ 内:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_sw_utils.hpp:150:23: 警告: 変数 ‘v_tmp1’ が設定されましたが使用されていません [-Wunused-but-set-variable]
                 float v_tmp1;
                       ^~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:23,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:28,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_tb.cpp:18:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h: 関数 ‘short unsigned int xf::cv::Inverse8(unsigned char, int, char*)’ 内:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3135:18: 警告: unused variable ‘index’ [-Wunused-variable]
     unsigned int index;
                  ^~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h: 関数 ‘void xf::cv::findInverse24(ap_int<24>&, int&, int&, unsigned int&, int*, int*)’ 内:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3174:13: 警告: unused variable ‘N1’ [-Wunused-variable]
     int M1, N1, leftover_bits = 0;
             ^~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h: 関数 ‘long unsigned int xf::cv::DivideYByX24(ap_int24_t, ap_int24_t, int, int, int*, int*)’ 内:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3213:17: 警告: unused variable ‘N2’ [-Wunused-variable]
     int N1 = 0, N2 = 0;
                 ^~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:29,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_tb.cpp:18:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp: 大域スコープ:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:33:13: 警告: ‘void CoreProcessUpArea(uchar_t, uchar_t, uchar_t, uchar_t, uint32_t, uint32_t, uchar_t*)’ defined but not used [-Wunused-function]
 static void CoreProcessUpArea(
             ^~~~~~~~~~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:23,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:28,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_tb.cpp:18:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3437:12: 警告: ‘int xf::cv::Sqrt(unsigned int)’ defined but not used [-Wunused-function]
 static int Sqrt(unsigned int D) {
            ^~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3357:14: 警告: ‘short int xf::cv::Atan2LookupFP24(ap_int24_t, ap_int24_t, int, int, int, int)’ defined but not used [-Wunused-function]
 static short Atan2LookupFP24(ap_int24_t xs, ap_int24_t ys, int M1, int N1, int M2, int N2) {
              ^~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3292:14: 警告: ‘short int xf::cv::Atan2LUT8(short int, short int, int, int, int, int)’ defined but not used [-Wunused-function]
 static short Atan2LUT8(short xs, short ys, int M1, int N1, int M2, int N2) {
              ^~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3228:14: 警告: ‘short int xf::cv::Atan2LookupFP(short int, short int, int, int, int, int)’ defined but not used [-Wunused-function]
 static short Atan2LookupFP(short xs, short ys, int M1, int N1, int M2, int N2) {
              ^~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:2924:21: 警告: ‘unsigned int xf::cv::Inverse32(short unsigned int, int, char*)’ defined but not used [-Wunused-function]
 static unsigned int Inverse32(unsigned short x, int M, char* N) {
                     ^~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:2780:23: 警告: ‘xf::cv::cos_fix_lut’ defined but not used [-Wunused-variable]
 static unsigned short cos_fix_lut[1572] = {
                       ^~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:2679:23: 警告: ‘xf::cv::sin_fix_lut’ defined but not used [-Wunused-variable]
 static unsigned short sin_fix_lut[1572] = {
                       ^~~~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:27,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_tb.cpp:18:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:156:17: 警告: ‘uint64_t xfUDivResize(uint64_t, short unsigned int)’ defined but not used [-Wunused-function]
 static uint64_t xfUDivResize(uint64_t in_n, unsigned short in_d) {
                 ^~~~~~~~~~~~
-e ----
Compiling object xf_resize_accel...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2
aarch64-linux-gnu-g++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2/xf_resize_accel.o -c /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp -D XDEVICE=ultra96v2_min2 -DVIVADO_HLS_SIM -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2 -g --sysroot=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux -D__ZYNQ -std=c++14 -fPIC -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize -I/opt/xilinx/xrt/include -Wall -Wno-unknown-pragmas -Wno-unused-label -pthread  -idirafter /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2019.2/include 
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:23,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:28,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h: 関数 ‘short unsigned int xf::cv::Inverse8(unsigned char, int, char*)’ 内:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3135:18: 警告: unused variable ‘index’ [-Wunused-variable]
     unsigned int index;
                  ^~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h: 関数 ‘void xf::cv::findInverse24(ap_int<24>&, int&, int&, unsigned int&, int*, int*)’ 内:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3174:13: 警告: unused variable ‘N1’ [-Wunused-variable]
     int M1, N1, leftover_bits = 0;
             ^~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h: 関数 ‘long unsigned int xf::cv::DivideYByX24(ap_int24_t, ap_int24_t, int, int, int*, int*)’ 内:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3213:17: 警告: unused variable ‘N2’ [-Wunused-variable]
     int N1 = 0, N2 = 0;
                 ^~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:29,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp: In instantiation of ‘void xFResizeAreaUpScale(xf::cv::Mat<DEPTH, SRC_ROWS, SRC_COLS, NPC>&, xf::cv::Mat<DEPTH, DST_ROWS, DST_COLS, NPC>&) [with int SRC_ROWS = 2160; int SRC_COLS = 3840; int PLANES = 1; int DEPTH = 0; int NPC = 1; int WORDWIDTH = 1; int DST_ROWS = 1080; int DST_COLS = 1920; int SRC_TC = 3840; int DST_TC = 1920]’:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:53:116:   required from ‘void xf::cv::resize(xf::cv::Mat<TYPE, SRC_ROWS, SRC_COLS, NPC>&, xf::cv::Mat<TYPE, DST_ROWS, DST_COLS, NPC>&) [with int INTERPOLATION_TYPE = 2; int TYPE = 0; int SRC_ROWS = 2160; int SRC_COLS = 3840; int DST_ROWS = 1080; int DST_COLS = 1920; int NPC = 1; int MAX_DOWN_SCALE = 2]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:51:113:   required from here
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:203:20: 警告: unused variable ‘imgOutput_ncpr’ [-Wunused-variable]
     unsigned short imgOutput_ncpr = (out_width + (NPC - 1)) >> XF_BITSHIFT(NPC);
                    ^~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:205:13: 警告: 変数 ‘idx’ が設定されましたが使用されていません [-Wunused-but-set-variable]
     uchar_t idx = 0, repcount = 0, datacount = 0;
             ^~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:205:22: 警告: unused variable ‘repcount’ [-Wunused-variable]
     uchar_t idx = 0, repcount = 0, datacount = 0;
                      ^~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:205:36: 警告: unused variable ‘datacount’ [-Wunused-variable]
     uchar_t idx = 0, repcount = 0, datacount = 0;
                                    ^~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:208:14: 警告: unused variable ‘read_line’ [-Wunused-variable]
     short x, read_line, block_ind, block_start, bufferIndex;
              ^~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:209:11: 警告: unused variable ‘prev_y’ [-Wunused-variable]
     short prev_y = -1, j = 0, i = 0, k, ii = 0, Yoffset, offset_temp, prev_offset_temp = 0;
           ^~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:209:41: 警告: 変数 ‘ii’ が設定されましたが使用されていません [-Wunused-but-set-variable]
     short prev_y = -1, j = 0, i = 0, k, ii = 0, Yoffset, offset_temp, prev_offset_temp = 0;
                                         ^~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:209:71: 警告: 変数 ‘prev_offset_temp’ が設定されましたが使用されていません [-Wunused-but-set-variable]
   short prev_y = -1, j = 0, i = 0, k, ii = 0, Yoffset, offset_temp, prev_offset_temp = 0;
                                                                     ^~~~~~~~~~~~~~~~

/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_up_area.hpp:311:9: 警告: unused variable ‘test’ [-Wunused-variable]
     int test = (int)lbuf_in0[0].range(7, 0);
         ^~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:28,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp: In instantiation of ‘void xFResizeAreaDownScale(xf::cv::Mat<DEPTH, SRC_ROWS, SRC_COLS, NPC>&, xf::cv::Mat<DEPTH, DST_ROWS, DST_COLS, NPC>&) [with int SRC_ROWS = 2160; int SRC_COLS = 3840; int PLANES = 1; int DEPTH = 0; int NPC = 1; int WORDWIDTH = 1; int DST_ROWS = 1080; int DST_COLS = 1920; int SRC_TC = 3840; int DST_TC = 1920]’:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:57:118:   required from ‘void xf::cv::resize(xf::cv::Mat<TYPE, SRC_ROWS, SRC_COLS, NPC>&, xf::cv::Mat<TYPE, DST_ROWS, DST_COLS, NPC>&) [with int INTERPOLATION_TYPE = 2; int TYPE = 0; int SRC_ROWS = 2160; int SRC_COLS = 3840; int DST_ROWS = 1080; int DST_COLS = 1920; int NPC = 1; int MAX_DOWN_SCALE = 2]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:51:113:   required from here
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:828:17: 警告: unused variable ‘t1’ [-Wunused-variable]
             int t1 = Yindex_output.range(15, 0);
                 ^~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:829:17: 警告: unused variable ‘t2’ [-Wunused-variable]
             int t2 = Y_1PixelWeight;
                 ^~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:830:17: 警告: unused variable ‘t3’ [-Wunused-variable]
             int t3 = Yindex_output;
                 ^~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:593:10: 警告: 変数 ‘inflag_TA_prev’ が設定されましたが使用されていません [-Wunused-but-set-variable]
     bool inflag_TA_prev[NUM_INPB];
          ^~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:624:10: 警告: unused variable ‘Yaxis_overlap_nextrow_en’ [-Wunused-variable]
     bool Yaxis_overlap_nextrow_en = 0;
          ^~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:625:10: 警告: 変数 ‘Yaxis_overlap_prevrow_en’ が設定されましたが使用されていません [-Wunused-but-set-variable]
     bool Yaxis_overlap_prevrow_en = 0;
          ^~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:677:10: 警告: 変数 ‘prev_output_row_index_for_pingpong_bit0’ が設定されましたが使用されていません [-Wunused-but-set-variable]
     bool prev_output_row_index_for_pingpong_bit0 = 0;
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:683:9: 警告: unused variable ‘display_write_rowID’ [-Wunused-variable]
     int display_write_rowID = 0;
         ^~~~~~~~~~~~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:27,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp: In instantiation of ‘void resizeNNBilinear(xf::cv::Mat<T, ROWS, COLS, NPC>&, xf::cv::Mat<SRC_TYPE, OUTHEIGHT, OUTWIDTH, NPPC>&) [with int SRC_TYPE = 0; int INHEIGHT = 2160; int INWIDTH = 3840; int NPPC = 1; int OUTHEIGHT = 1080; int OUTWIDTH = 1920; int INTERPOLATION_TYPE = 2; int MAX_DOWN_SCALE = 2]’:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:63:112:   required from ‘void xf::cv::resize(xf::cv::Mat<TYPE, SRC_ROWS, SRC_COLS, NPC>&, xf::cv::Mat<TYPE, DST_ROWS, DST_COLS, NPC>&) [with int INTERPOLATION_TYPE = 2; int TYPE = 0; int SRC_ROWS = 2160; int SRC_COLS = 3840; int DST_ROWS = 1080; int DST_COLS = 1920; int NPC = 1; int MAX_DOWN_SCALE = 2]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:51:113:   required from here
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:287:15: 警告: unused variable ‘PRE_INDEX_WIDTH’ [-Wunused-variable]
     const int PRE_INDEX_WIDTH = 10;
               ^~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:288:15: 警告: unused variable ‘PRE_INDEX_INT’ [-Wunused-variable]
     const int PRE_INDEX_INT = 17;
               ^~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:355:15: 警告: unused variable ‘LOOPCOUNTROW’ [-Wunused-variable]
     const int LOOPCOUNTROW = (INHEIGHT > OUTHEIGHT) ? INHEIGHT : OUTHEIGHT;
               ^~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:356:15: 警告: unused variable ‘LOOPCOUNTCOL’ [-Wunused-variable]
     const int LOOPCOUNTCOL = (INWIDTH > OUTWIDTH) ? INWIDTH : OUTWIDTH;
               ^~~~~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:22,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp: In instantiation of ‘void xf::cv::accel_utils::hlsStrm2xfMat(hls::stream<ap_uint<_AP_W2> >&, xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&, int) [with int PTR_WIDTH = 128; int MAT_T = 0; int ROWS = 2160; int COLS = 3840; int NPC = 1; int TRIPCOUNT = 8294400]’:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:312:9:   required from ‘void xf::cv::accel_utils::Array2xfMat(ap_uint<_AP_W2>*, xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&) [with int PTR_WIDTH = 128; int MAT_T = 0; int ROWS = 2160; int COLS = 3840; int NPC = 1]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:508:5:   required from ‘void xf::cv::Array2xfMat(ap_uint<_AP_W2>*, xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&) [with int PTR_WIDTH = 128; int MAT_T = 0; int ROWS = 2160; int COLS = 3840; int NPC = 1]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:50:85:   required from here
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:270:17: 警告: unused variable ‘valid_bits_update’ [-Wunused-variable]
             int valid_bits_update;
                 ^~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:271:17: 警告: unused variable ‘valid_bits_tmp’ [-Wunused-variable]
             int valid_bits_tmp = valid_bits - K_size;
                 ^~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:247:13: 警告: unused variable ‘strm_cnt_disply’ [-Wunused-variable]
         int strm_cnt_disply = 0;
             ^~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:293:13: 警告: unused variable ‘stop’ [-Wunused-variable]
         int stop = 0;
             ^~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:28,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp: In instantiation of ‘void flag_index_generator(ap_uint<32>, ap_uint<32>, ap_uint<32>, ap_uint<16>, int, ap_uint<32>*, ap_uint<32>*, ap_uint<16>*, bool (*)[NUM_INPB], ap_uint<16>*, ap_uint<17> (*)[NUM_INPB], bool*, ap_uint<17>*, bool*, bool*, bool, ap_uint<32>, ap_uint<32>, ap_uint<16>, short unsigned int, short unsigned int, short unsigned int, ap_uint<16>*) [with int NUM_INPB = 1; int LOG2_PB = 0; int NUM_PB = 1; int NPC = 1]’:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:744:63:   required from ‘void xFResizeAreaDownScale(xf::cv::Mat<DEPTH, SRC_ROWS, SRC_COLS, NPC>&, xf::cv::Mat<DEPTH, DST_ROWS, DST_COLS, NPC>&) [with int SRC_ROWS = 2160; int SRC_COLS = 3840; int PLANES = 1; int DEPTH = 0; int NPC = 1; int WORDWIDTH = 1; int DST_ROWS = 1080; int DST_COLS = 1920; int SRC_TC = 3840; int DST_TC = 1920]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:57:118:   required from ‘void xf::cv::resize(xf::cv::Mat<TYPE, SRC_ROWS, SRC_COLS, NPC>&, xf::cv::Mat<TYPE, DST_ROWS, DST_COLS, NPC>&) [with int INTERPOLATION_TYPE = 2; int TYPE = 0; int SRC_ROWS = 2160; int SRC_COLS = 3840; int DST_ROWS = 1080; int DST_COLS = 1920; int NPC = 1; int MAX_DOWN_SCALE = 2]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:51:113:   required from here
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:183:10: 警告: unused variable ‘if_test’ [-Wunused-variable]
     bool if_test = t1 && (t2 || t3);
          ^~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:184:9: 警告: unused variable ‘current_Yidx_int’ [-Wunused-variable]
     int current_Yidx_int = Yindex_output_tmp.range(31, 16);
         ^~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:185:9: 警告: unused variable ‘next_Yidx_int’ [-Wunused-variable]
     int next_Yidx_int = Yindex_output_prev_tmp.range(31, 16);
         ^~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:187:10: 警告: unused variable ‘scale1_en’ [-Wunused-variable]
     bool scale1_en = X_1PixelWeight[16] == 1;
          ^~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:188:10: 警告: unused variable ‘write_en_pixel_in_same_row’ [-Wunused-variable]
     bool write_en_pixel_in_same_row = (ouput_index_write_counter <= output_buffer_index_next);
          ^~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:189:10: 警告: unused variable ‘overlap_en_next_row’ [-Wunused-variable]
     bool overlap_en_next_row = (overlap_with_next_row > 0x41);
          ^~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:190:10: 警告: unused variable ‘overlap_en_prev_row’ [-Wunused-variable]
     bool overlap_en_prev_row = (overlap_with_prev_row > 0x41);
          ^~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:191:10: 警告: unused variable ‘output_row_en’ [-Wunused-variable]
     bool output_row_en =
          ^~~~~~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:27,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp: In instantiation of ‘void computeInterpolation(int, int, int, int, ap_ufixed<T_SCALE_WIDTH, T_SCALE_INT>, ap_fixed<T_COMP_INDEX_WIDTH, T_COMP_INDEX_INT>*, ap_ufixed<T_SCALE_WIDTH, T_SCALE_INT>, ap_uint<TD>*, ap_uint<TD>&, ap_uint<TD>&, ap_ufixed<T_WEIGHT_WIDTH, T_WEIGHT_INT>*, ap_ufixed<T_WEIGHT_WIDTH, T_WEIGHT_INT>&, ap_fixed<T_COMP_INDEX_WIDTH, T_COMP_INDEX_INT>, ap_fixed<T_COMP_INDEX_WIDTH, T_COMP_INDEX_INT>) [with int INTERPOLATION_TYPE = 2; int T_COMP_INDEX_WIDTH = 42; int T_COMP_INDEX_INT = 20; int T_INDEX_INT = 17; int T_SCALE_WIDTH = 48; int T_SCALE_INT = 16; int T_WEIGHT_WIDTH = 48; int T_WEIGHT_INT = 16; int NPPC = 1]’:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:397:76:   required from ‘void resizeNNBilinear(xf::cv::Mat<T, ROWS, COLS, NPC>&, xf::cv::Mat<SRC_TYPE, OUTHEIGHT, OUTWIDTH, NPPC>&) [with int SRC_TYPE = 0; int INHEIGHT = 2160; int INWIDTH = 3840; int NPPC = 1; int OUTHEIGHT = 1080; int OUTWIDTH = 1920; int INTERPOLATION_TYPE = 2; int MAX_DOWN_SCALE = 2]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:63:112:   required from ‘void xf::cv::resize(xf::cv::Mat<TYPE, SRC_ROWS, SRC_COLS, NPC>&, xf::cv::Mat<TYPE, DST_ROWS, DST_COLS, NPC>&) [with int INTERPOLATION_TYPE = 2; int TYPE = 0; int SRC_ROWS = 2160; int SRC_COLS = 3840; int DST_ROWS = 1080; int DST_COLS = 1920; int NPC = 1; int MAX_DOWN_SCALE = 2]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:51:113:   required from here
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:222:15: 警告: unused variable ‘WEIGHT_WIDTH’ [-Wunused-variable]
     const int WEIGHT_WIDTH = T_WEIGHT_WIDTH;
               ^~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:223:15: 警告: unused variable ‘WEIGHT_INT’ [-Wunused-variable]
     const int WEIGHT_INT = T_WEIGHT_INT;
               ^~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:224:15: 警告: unused variable ‘SCALE_WIDTH’ [-Wunused-variable]
     const int SCALE_WIDTH = T_SCALE_WIDTH;
               ^~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_nn_bilinear.hpp:225:15: 警告: unused variable ‘SCALE_INT’ [-Wunused-variable]
     const int SCALE_INT = T_SCALE_INT;
               ^~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:22,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp: In instantiation of ‘void xf::cv::accel_utils::xfMat2hlsStrm(xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&, hls::stream<ap_uint<_AP_W2> >&, int) [with int PTR_WIDTH = 128; int MAT_T = 0; int ROWS = 1080; int COLS = 1920; int NPC = 1; int TRIPCOUNT = 2073600]’:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:452:9:   required from ‘void xf::cv::accel_utils::xfMat2Array(xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&, ap_uint<_AP_W2>*) [with int PTR_WIDTH = 128; int MAT_T = 0; int ROWS = 1080; int COLS = 1920; int NPC = 1]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:502:5:   required from ‘void xf::cv::xfMat2Array(xf::cv::Mat<MAT_T, ROWS, COLS, NPC>&, ap_uint<_AP_W2>*) [with int PTR_WIDTH = 128; int MAT_T = 0; int ROWS = 1080; int COLS = 1920; int NPC = 1]’
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:52:93:   required from here
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:365:13: 警告: unused variable ‘ddr_write_cycles’ [-Wunused-variable]
         int ddr_write_cycles = (((out_size_bits) + (PTR_WIDTH)-1) / (PTR_WIDTH));
             ^~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/common/xf_utility.hpp:366:13: 警告: unused variable ‘ddr_write_cnt’ [-Wunused-variable]
         int ddr_write_cnt = 0;
             ^~~~~~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_down_area.hpp:23,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize_headers.h:28,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/imgproc/xf_resize.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_config.h:24,
                 from /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp:17:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h: 大域スコープ:
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3437:12: 警告: ‘int xf::cv::Sqrt(unsigned int)’ defined but not used [-Wunused-function]
 static int Sqrt(unsigned int D) {
            ^~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3357:14: 警告: ‘short int xf::cv::Atan2LookupFP24(ap_int24_t, ap_int24_t, int, int, int, int)’ defined but not used [-Wunused-function]
 static short Atan2LookupFP24(ap_int24_t xs, ap_int24_t ys, int M1, int N1, int M2, int N2) {
              ^~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3292:14: 警告: ‘short int xf::cv::Atan2LUT8(short int, short int, int, int, int, int)’ defined but not used [-Wunused-function]
 static short Atan2LUT8(short xs, short ys, int M1, int N1, int M2, int N2) {
              ^~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:3228:14: 警告: ‘short int xf::cv::Atan2LookupFP(short int, short int, int, int, int, int)’ defined but not used [-Wunused-function]
 static short Atan2LookupFP(short xs, short ys, int M1, int N1, int M2, int N2) {
              ^~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:2924:21: 警告: ‘unsigned int xf::cv::Inverse32(short unsigned int, int, char*)’ defined but not used [-Wunused-function]
 static unsigned int Inverse32(unsigned short x, int M, char* N) {
                     ^~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:2780:23: 警告: ‘xf::cv::cos_fix_lut’ defined but not used [-Wunused-variable]
 static unsigned short cos_fix_lut[1572] = {
                       ^~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include/core/xf_math.h:2679:23: 警告: ‘xf::cv::sin_fix_lut’ defined but not used [-Wunused-variable]
 static unsigned short sin_fix_lut[1572] = {
                       ^~~~~~~~~~~
-e ----
Compiling extra object /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2/xcl2.o...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2
aarch64-linux-gnu-g++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2/xcl2.o -c /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2/xcl2.cpp -D XDEVICE=ultra96v2_min2 -DVIVADO_HLS_SIM -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2 -g --sysroot=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux -D__ZYNQ -std=c++14 -fPIC -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize -I/opt/xilinx/xrt/include -Wall -Wno-unknown-pragmas -Wno-unused-label -pthread  -idirafter /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2019.2/include -I /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2
-e ----
Compiling host resize.exe...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/bin_ultra96v2_min2
aarch64-linux-gnu-g++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/bin_ultra96v2_min2/resize.exe /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2/xf_resize_tb.o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2/xf_resize_accel.o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/obj_ultra96v2_min2/xcl2.o -D XDEVICE=ultra96v2_min2 -DVIVADO_HLS_SIM -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/ext/xcl2 -g --sysroot=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux -D__ZYNQ -std=c++14 -fPIC -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize -I/opt/xilinx/xrt/include -Wall -Wno-unknown-pragmas -Wno-unused-label -pthread  -idirafter /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2019.2/include -L/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux/usr/lib -Wl,-rpath-link=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux/usr/lib/ -L/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux/opt/xilinx/xrt/lib -lopencv_imgcodecs -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_features2d -lopencv_flann -pthread -L/opt/xilinx/xrt/lib -lxilinxopencl 
-e ----
Compiling kernel resize_accel...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xo_ultra96v2_min2_hw
v++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xo_ultra96v2_min2_hw/resize_accel.xo --kernel resize_accel --compile /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp \
 -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB --clock.defaultFreqHz 300000000 -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize --target hw --platform /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw --save-temps --debug --kernel_frequency 300 --report_level 2 --xp vivado_prop:run.impl_1.strategy=Performance_Explore 
WARNING: [v++ 60-1600] The option 'xp' was used directly on the command line, where its usage is deprecated. To ensure input line works for supported operating systems or shells, v++ supports specification for some options in a configuration file. As an alternative, please use options 'advanced.*', 'vivado.*' in a configuration file. Use one or more configuration files along with section headers to define key-value pairs for the advanced properties or parameters. Specify a configuration file using '--config'.
INFO: [v++ 82-185] Check out the auto-generated 'sample_compile.ini' configuration file. The file shows how to migrate from deprecated command line --xp switches to configuration file directives.
Option Map File Used: '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/data/vitis/vpp/optMap.xml'

****** v++ v2019.2 (64-bit)
  **** SW Build 2700185 on Thu Oct 24 18:45:48 MDT 2019
    ** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.

INFO: [v++ 60-1306] Additional information associated with this v++ compile can be found at:
 Reports: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/reports/resize_accel
 Log files: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/logs/resize_accel
Running Dispatch Server on port:42683
INFO: [v++ 60-1548] Creating build summary session with primary output /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xo_ultra96v2_min2_hw/resize_accel.xo.compile_summary, at Mon Mar 23 04:24:39 2020
INFO: [v++ 60-1316] Initiating connection to rulecheck server, at Mon Mar 23 04:24:39 2020
Running Rule Check Server on port:36325
INFO: [v++ 60-1315] Creating rulecheck session with output '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/reports/resize_accel/v++_compile_resize_accel_guidance.html', at Mon Mar 23 04:24:40 2020
INFO: [v++ 60-895]   Target platform: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm
INFO: [v++ 60-1578]   This platform contains Xilinx Shell Archive '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/hw/ultra96v2_min2.xsa'
INFO: [v++ 60-585] Compiling for hardware target
INFO: [v++ 60-423]   Target device: ultra96v2_min2
INFO: [v++ 60-242] Creating kernel: 'resize_accel'
INFO: [v++ 60-1616] Creating a HLS clock using kernel_frequency option: 300 MHz

===>The following messages were generated while  performing high-level synthesis for kernel: resize_accel Log file: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/resize_accel/resize_accel/vivado_hls.log :
INFO: [v++ 204-61] Option 'relax_ii_for_timing' is enabled, will increase II to preserve clock frequency constraints.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 3.
INFO: [v++ 204-61] Pipelining loop 'L1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 4.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 1.
INFO: [v++ 204-61] Pipelining loop 'LOOP_ROW_LOOP_COL'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 13.
INFO: [v++ 204-61] Pipelining loop 'L1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 3.
INFO: [v++ 204-61] Pipelining loop 'Loop 1'.
INFO: [v++ 204-61] Pipelining result : Target II = 1, Final II = 1, Depth = 3.
INFO: [v++ 200-789] **** Estimated Fmax: 411.02 MHz
INFO: [v++ 60-594] Finished kernel compilation
INFO: [v++ 60-244] Generating system estimate report...
INFO: [v++ 60-1092] Generated system estimate report: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/reports/resize_accel/system_estimate_resize_accel.xtxt
Add Instance resize_2_0_2160_3840_1080_1920_1_2_s resize_2_0_2160_3840_1080_1920_1_2_U0 392
Add Instance xFResizeAreaDownScale_2160_3840_1_0_1_1_1080_1920_3840_1920_s grp_xFResizeAreaDownScale_2160_3840_1_0_1_1_1080_1920_3840_1920_s_fu_158 158
Add Instance xfMat2Array_128_0_1080_1920_1_s xfMat2Array_128_0_1080_1920_1_U0 404
Add Instance xfMat2Array_128_0_1080_1920_1_1 grp_xfMat2Array_128_0_1080_1920_1_1_fu_102 102
Add Instance xfMat2hlsStrm_128_0_1080_1920_1_2073600_13 xfMat2hlsStrm_128_0_1080_1920_1_2073600_13_U0 156
Add Instance hlsStrm2Array_128_1080_1920_1_1_8_129600_s hlsStrm2Array_128_1080_1920_1_1_8_129600_U0 172
Add Instance Array2xfMat_128_0_2160_3840_1_1 Array2xfMat_128_0_2160_3840_1_1_U0 414
Add Instance Array2xfMat_128_0_2160_3840_1_s grp_Array2xfMat_128_0_2160_3840_1_s_fu_144 144
Add Instance hlsStrm2xfMat_128_0_2160_3840_1_8294400_s hlsStrm2xfMat_128_0_2160_3840_1_8294400_U0 136
Add Instance Array2hlsStrm_128_2160_3840_1_1_8_518400_s Array2hlsStrm_128_2160_3840_1_1_8_518400_U0 145
Add Instance Block_Mat_exit7_proc35 Block_Mat_exit7_proc35_U0 426
INFO: [v++ 60-586] Created /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xo_ultra96v2_min2_hw/resize_accel.xo
INFO: [v++ 60-791] Total elapsed time: 0h 1m 25s
-e ----
Compiling xclbin...
mkdir -p /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xclbin_ultra96v2_min2_hw
v++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xclbin_ultra96v2_min2_hw/krnl_resize.xclbin --link /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xo_ultra96v2_min2_hw/resize_accel.xo \
 -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB --clock.defaultFreqHz 300000000 -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize --target hw --platform /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw --save-temps --debug --kernel_frequency 300 --report_level 2 --optimize 2 --jobs 8 --xp "vivado_param:project.writeIntermediateCheckpoints=1" \
 --xp vivado_prop:run.impl_1.strategy=Performance_Explore  \
 
WARNING: [v++ 60-1600] The option 'xp' was used directly on the command line, where its usage is deprecated. To ensure input line works for supported operating systems or shells, v++ supports specification for some options in a configuration file. As an alternative, please use options 'advanced.*', 'vivado.*' in a configuration file. Use one or more configuration files along with section headers to define key-value pairs for the advanced properties or parameters. Specify a configuration file using '--config'.
INFO: [v++ 82-185] Check out the auto-generated 'sample_link.ini' configuration file. The file shows how to migrate from deprecated command line --xp switches to configuration file directives.
Option Map File Used: '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/data/vitis/vpp/optMap.xml'

****** v++ v2019.2 (64-bit)
  **** SW Build 2700185 on Thu Oct 24 18:45:48 MDT 2019
    ** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.

INFO: [v++ 60-1306] Additional information associated with this v++ link can be found at:
 Reports: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/reports/link
 Log files: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/logs/link
Running Dispatch Server on port:42053
INFO: [v++ 60-1548] Creating build summary session with primary output /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xclbin_ultra96v2_min2_hw/krnl_resize.xclbin.link_summary, at Mon Mar 23 04:26:06 2020
INFO: [v++ 60-1316] Initiating connection to rulecheck server, at Mon Mar 23 04:26:06 2020
Running Rule Check Server on port:46567
INFO: [v++ 60-1315] Creating rulecheck session with output '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/reports/link/v++_link_krnl_resize_guidance.html', at Mon Mar 23 04:26:07 2020
INFO: [v++ 60-895]   Target platform: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm
INFO: [v++ 60-1578]   This platform contains Xilinx Shell Archive '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/hw/ultra96v2_min2.xsa'
INFO: [v++ 60-629] Linking for hardware target
INFO: [v++ 60-423]   Target device: ultra96v2_min2
INFO: [v++ 60-1332] Run 'run_link' status: Not started
INFO: [v++ 60-1443] [04:26:07] Run run_link: Step system_link: Started
INFO: [v++ 60-1453] Command Line: system_link --xo /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xo_ultra96v2_min2_hw/resize_accel.xo -keep --config /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/syslinkConfig.ini --xpfm /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --target hw --output_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/run_link
INFO: [SYSTEM_LINK 82-76] Reading emulation BD and HPFM information
INFO: [SYSTEM_LINK 60-1316] Initiating connection to rulecheck server, at Mon Mar 23 04:26:08 2020
INFO: [SYSTEM_LINK 82-70] Extracting xo v3 file /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xo_ultra96v2_min2_hw/resize_accel.xo
INFO: [KernelCheck 83-118] 'resize_accel' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'img_inp' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'img_out' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'rows_in' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'cols_in' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'rows_out' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [KernelCheck 83-118] 'cols_out' kernel.xml and component.xml caseness discrepency is being corrected, S_AXI_CONTROL is being replaced by s_axi_control
INFO: [SYSTEM_LINK 82-53] Creating IP database /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml
INFO: [SYSTEM_LINK 82-38] [04:26:08] build_xd_ip_db started: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/bin/build_xd_ip_db -ip_search 0  -sds-pf /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/ultra96v2_min2.hpfm -clkid 0 -ip /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/iprepo/xilinx_com_hls_resize_accel_1_0,resize_accel -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml
INFO: [SYSTEM_LINK 82-37] [04:26:12] build_xd_ip_db finished successfully
Time (s): cpu = 00:00:03 ; elapsed = 00:00:03 . Memory (MB): peak = 296.441 ; gain = 0.000 ; free physical = 24667 ; free virtual = 44405
INFO: [SYSTEM_LINK 82-51] Create system connectivity graph
INFO: [SYSTEM_LINK 82-102] Applying explicit connections to the system connectivity graph: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/cfgraph/cfgen_cfgraph.xml
INFO: [SYSTEM_LINK 82-38] [04:26:12] cfgen started: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/bin/cfgen  -clock.defaultFreqHz 300000000 -dmclkid 0 -r /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/cfgraph/cfgen_cfgraph.xml
INFO: [CFGEN 83-0] Kernel Specs: 
INFO: [CFGEN 83-0]   kernel: resize_accel, num: 1  {resize_accel_1}
INFO: [CFGEN 83-2226] Inferring mapping for argument resize_accel_1.img_inp to HP
INFO: [CFGEN 83-2226] Inferring mapping for argument resize_accel_1.img_out to HP
INFO: [SYSTEM_LINK 82-37] [04:26:12] cfgen finished successfully
Time (s): cpu = 00:00:00.26 ; elapsed = 00:00:00.31 . Memory (MB): peak = 296.441 ; gain = 0.000 ; free physical = 24666 ; free virtual = 44406
INFO: [SYSTEM_LINK 82-52] Create top-level block diagram
INFO: [SYSTEM_LINK 82-38] [04:26:12] cf2bd started: /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/bin/cf2bd  --linux --trace_buffer 1024 --input_file /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/cfgraph/cfgen_cfgraph.xml --ip_db /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml --cf_name dr --working_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.xsd --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link --output_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int
INFO: [CF2BD 82-31] Launching cf2xd: cf2xd -linux -trace-buffer 1024 -i /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/cfgraph/cfgen_cfgraph.xml -r /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.cdb/xd_ip_db.xml -o dr.xml
INFO: [CF2BD 82-28] cf2xd finished successfully
INFO: [CF2BD 82-31] Launching cf_xsd: cf_xsd -disable-address-gen -dn dr -dp /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/sys_link/_sysl/.xsd
                                                                                
rlwrap: warning: your $TERM is 'xterm-256color' but rlwrap couldn't find it in the terminfo database. Expect some problems.: Inappropriate ioctl for device
INFO: [CF2BD 82-28] cf_xsd finished successfully
INFO: [SYSTEM_LINK 82-37] [04:26:14] cf2bd finished successfully
Time (s): cpu = 00:00:02 ; elapsed = 00:00:02 . Memory (MB): peak = 296.441 ; gain = 0.000 ; free physical = 24658 ; free virtual = 44403
INFO: [v++ 60-1441] [04:26:14] Run run_link: Step system_link: Completed
Time (s): cpu = 00:00:06 ; elapsed = 00:00:07 . Memory (MB): peak = 678.754 ; gain = 0.000 ; free physical = 24677 ; free virtual = 44422
INFO: [v++ 60-1443] [04:26:14] Run run_link: Step cf2sw: Started
INFO: [v++ 60-1453] Command Line: cf2sw -sdsl /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/sdsl.dat -rtd /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/cf2sw.rtd -xclbin /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/xclbin_orig.xml -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/xclbin_orig.1.xml
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/run_link
INFO: [v++ 60-1441] [04:26:14] Run run_link: Step cf2sw: Completed
Time (s): cpu = 00:00:00.43 ; elapsed = 00:00:00.53 . Memory (MB): peak = 678.754 ; gain = 0.000 ; free physical = 24675 ; free virtual = 44421
INFO: [v++ 60-1443] [04:26:14] Run run_link: Step rtd2_system_diagram: Started
INFO: [v++ 60-1453] Command Line: rtd2SystemDiagram --rtdJsonFileName /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/cf2sw.rtd --diagramJsonFileName /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/systemDiagramModel.json --platformFilePath /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --generatedByName v++ --generatedByVersion 2019.2 --generatedByChangeList 2700185 --generatedByTimeStamp Thu Oct 24 18:45:48 MDT 2019 --generatedByOptions /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/bin/unwrapped/lnx64.o/v++ -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xclbin_ultra96v2_min2_hw/krnl_resize.xclbin --link /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xo_ultra96v2_min2_hw/resize_accel.xo -I. -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L1/include -D__SDSVHLS__ -DHLS_NO_XIL_FPO_LIB --clock.defaultFreqHz 300000000 -I/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize --target hw --platform /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw --save-temps --debug --kernel_frequency 300 --report_level 2 --optimize 2 --jobs 8 --xp vivado_param:project.writeIntermediateCheckpoints=1 --xp vivado_prop:run.impl_1.strategy=Performance_Explore  --generatedByXclbinName krnl_resize --kernelInfoDataFileName /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/kernel_info.dat
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/run_link
WARNING: [v++ 82-164] Unable to populate user region instance path.  The platform file does not contain a hardwarePlatform.devices..core.instPath entry.
INFO: [v++ 60-839] Read in kernel information from file '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/kernel_info.dat'.
WARNING: [v++ 82-157] Unable to populate kernel available resources BRAM entry.
WARNING: [v++ 82-158] Unable to populate kernel available resources DSP entry.
WARNING: [v++ 82-163] Unable to populate user region available resources.  The platform file deos not contain a hardwarePlatform.devices..core.availableResources entry
INFO: [v++ 60-1441] [04:26:16] Run run_link: Step rtd2_system_diagram: Completed
Time (s): cpu = 00:00:02 ; elapsed = 00:00:02 . Memory (MB): peak = 678.754 ; gain = 0.000 ; free physical = 24673 ; free virtual = 44420
INFO: [v++ 60-1443] [04:26:16] Run run_link: Step vpl: Started
INFO: [v++ 60-1453] Command Line: vpl -t hw -f /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm -g -j 8 --kernel_frequency 300 -s --output_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int --log_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/logs/link --report_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/reports/link --config /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/vplConfig.ini -k /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/kernel_info.dat --webtalk_flag Vitis --temp_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link --no-info --tlog_dir /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/.tlog/v++_link_krnl_resize --iprepo /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/xo/ip_repo/xilinx_com_hls_resize_accel_1_0 --messageDb /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/run_link/vpl.pb /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/dr.bd.tcl
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/run_link

****** vpl v2019.2 (64-bit)
  **** SW Build 2700185 on Thu Oct 24 18:45:48 MDT 2019
    ** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.

INFO: [VPL 60-839] Read in kernel information from file '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/kernel_info.dat'.
INFO: [VPL 60-423]   Target device: ultra96v2_min2
INFO: [VPL 60-1032] Extracting hardware platform to /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/vivado/vpl/.local/hw_platform
[04:26:28] Run vpl: Step create_project: Started
Creating Vivado project.
[04:26:37] Run vpl: Step create_project: Completed
[04:26:37] Run vpl: Step create_bd: Started
[04:26:51] Run vpl: Step create_bd: Completed
[04:26:51] Run vpl: Step update_bd: Started
[04:26:52] Run vpl: Step update_bd: Completed
[04:26:52] Run vpl: Step generate_target: Started
[04:27:34] Run vpl: Step generate_target: Completed
[04:27:34] Run vpl: Step config_hw_runs: Started
[04:27:36] Run vpl: Step config_hw_runs: Completed
[04:27:36] Run vpl: Step synth: Started
[04:28:38] Block-level synthesis in progress, 0 of 13 jobs complete, 8 jobs running.
[04:29:08] Block-level synthesis in progress, 0 of 13 jobs complete, 8 jobs running.
[04:29:39] Block-level synthesis in progress, 0 of 13 jobs complete, 8 jobs running.
[04:30:09] Block-level synthesis in progress, 0 of 13 jobs complete, 8 jobs running.
[04:30:39] Block-level synthesis in progress, 0 of 13 jobs complete, 8 jobs running.
[04:31:10] Block-level synthesis in progress, 0 of 13 jobs complete, 8 jobs running.
[04:31:40] Block-level synthesis in progress, 0 of 13 jobs complete, 8 jobs running.
[04:32:11] Block-level synthesis in progress, 2 of 13 jobs complete, 6 jobs running.
[04:32:41] Block-level synthesis in progress, 3 of 13 jobs complete, 5 jobs running.
[04:33:11] Block-level synthesis in progress, 5 of 13 jobs complete, 5 jobs running.
[04:33:41] Block-level synthesis in progress, 7 of 13 jobs complete, 5 jobs running.
[04:34:12] Block-level synthesis in progress, 7 of 13 jobs complete, 5 jobs running.
[04:34:42] Block-level synthesis in progress, 9 of 13 jobs complete, 3 jobs running.
[04:35:12] Block-level synthesis in progress, 11 of 13 jobs complete, 2 jobs running.
[04:35:42] Block-level synthesis in progress, 11 of 13 jobs complete, 2 jobs running.
[04:36:12] Block-level synthesis in progress, 12 of 13 jobs complete, 1 job running.
[04:36:42] Block-level synthesis in progress, 13 of 13 jobs complete, 0 jobs running.
[04:37:13] Top-level synthesis in progress.
[04:37:43] Top-level synthesis in progress.
[04:38:13] Top-level synthesis in progress.
[04:38:32] Run vpl: Step synth: Completed
[04:38:32] Run vpl: Step impl: Started
[04:40:33] Finished 2nd of 6 tasks (FPGA linking synthesized kernels to platform). Elapsed time: 00h 14m 15s 

[04:40:33] Starting logic optimization..
[04:40:33] Phase 1 Retarget
[04:40:33] Phase 2 Constant propagation
[04:40:33] Phase 3 Sweep
[04:41:04] Phase 4 BUFG optimization
[04:41:04] Phase 5 Shift Register Optimization
[04:41:04] Phase 6 Post Processing Netlist
[04:41:34] Finished 3rd of 6 tasks (FPGA logic optimization). Elapsed time: 00h 01m 00s 

[04:41:34] Starting logic placement..
[04:41:34] Phase 1 Placer Initialization
[04:41:34] Phase 1.1 Placer Initialization Netlist Sorting
[04:41:34] Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device
[04:41:34] Phase 1.3 Build Placer Netlist Model
[04:41:34] Phase 1.4 Constrain Clocks/Macros
[04:41:34] Phase 2 Global Placement
[04:41:34] Phase 2.1 Floorplanning
[04:41:34] Phase 2.2 Global Placement Core
[04:42:04] Phase 2.2.1 Physical Synthesis In Placer
[04:42:04] Phase 3 Detail Placement
[04:42:04] Phase 3.1 Commit Multi Column Macros
[04:42:04] Phase 3.2 Commit Most Macros & LUTRAMs
[04:42:04] Phase 3.3 Area Swap Optimization
[04:42:04] Phase 3.4 Pipeline Register Optimization
[04:42:04] Phase 3.5 Small Shape DP
[04:42:04] Phase 3.5.1 Small Shape Clustering
[04:42:04] Phase 3.5.2 Flow Legalize Slice Clusters
[04:42:04] Phase 3.5.3 Slice Area Swap
[04:42:04] Phase 3.5.4 Commit Slice Clusters
[04:42:04] Phase 3.6 Re-assign LUT pins
[04:42:04] Phase 3.7 Pipeline Register Optimization
[04:42:04] Phase 4 Post Placement Optimization and Clean-Up
[04:42:04] Phase 4.1 Post Commit Optimization
[04:42:04] Phase 4.1.1 Post Placement Optimization
[04:42:04] Phase 4.1.1.1 BUFG Insertion
[04:42:04] Phase 4.2 Post Placement Cleanup
[04:42:34] Phase 4.3 Placer Reporting
[04:42:34] Phase 4.4 Final Placement Cleanup
[04:42:34] Finished 4th of 6 tasks (FPGA logic placement). Elapsed time: 00h 01m 00s 

[04:42:34] Starting logic routing..
[04:42:34] Phase 1 Build RT Design
[04:43:04] Phase 2 Router Initialization
[04:43:04] Phase 2.1 Create Timer
[04:43:04] Phase 2.2 Fix Topology Constraints
[04:43:04] Phase 2.3 Pre Route Cleanup
[04:43:04] Phase 2.4 Global Clock Net Routing
[04:43:04] Phase 2.5 Update Timing
[04:43:35] Phase 2.6 Update Timing for Bus Skew
[04:43:35] Phase 2.6.1 Update Timing
[04:43:35] Phase 3 Initial Routing
[04:43:35] Phase 4 Rip-up And Reroute
[04:43:35] Phase 4.1 Global Iteration 0
[04:44:35] Phase 4.2 Global Iteration 1
[04:44:35] Phase 5 Delay and Skew Optimization
[04:44:35] Phase 5.1 Delay CleanUp
[04:44:35] Phase 5.1.1 Update Timing
[04:44:35] Phase 5.2 Clock Skew Optimization
[04:44:35] Phase 6 Post Hold Fix
[04:44:35] Phase 6.1 Hold Fix Iter
[04:44:35] Phase 6.1.1 Update Timing
[04:44:35] Phase 7 Route finalize
[04:44:35] Phase 8 Verifying routed nets
[04:44:35] Phase 9 Depositing Routes
[04:44:35] Phase 10 Route finalize
[04:44:35] Phase 11 Post Router Timing
[04:44:35] Finished 5th of 6 tasks (FPGA routing). Elapsed time: 00h 02m 00s 

[04:44:35] Starting bitstream generation..
[04:45:29] Run vpl: Step impl: Completed
[04:45:29] Creating bitmap...
[04:45:29] Writing bitstream ./ultra96v2_min2_wrapper.bit...
[04:45:29] Finished 6th of 6 tasks (FPGA bitstream generation). Elapsed time: 00h 00m 53s 
[04:45:29] Run vpl: FINISHED. Run Status: impl Complete!
INFO: [v++ 60-1441] [04:45:29] Run run_link: Step vpl: Completed
Time (s): cpu = 00:00:07 ; elapsed = 00:19:13 . Memory (MB): peak = 678.754 ; gain = 0.000 ; free physical = 22851 ; free virtual = 43448
INFO: [v++ 60-1443] [04:45:29] Run run_link: Step rtdgen: Started
INFO: [v++ 60-1453] Command Line: rtdgen
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/run_link
INFO: [v++ 60-1453] Command Line: cf2sw -a /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/address_map.xml -sdsl /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/sdsl.dat -xclbin /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/xclbin_orig.xml -rtd /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize.rtd -o /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize.xml
INFO: [v++ 60-1618] Launching 
INFO: [v++ 60-1441] [04:45:31] Run run_link: Step rtdgen: Completed
Time (s): cpu = 00:00:02 ; elapsed = 00:00:02 . Memory (MB): peak = 678.754 ; gain = 0.000 ; free physical = 22851 ; free virtual = 43448
INFO: [v++ 60-1443] [04:45:31] Run run_link: Step xclbinutil: Started
INFO: [v++ 60-1453] Command Line: xclbinutil --add-section BITSTREAM:RAW:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/system.bit --force --key-value SYS:mode:flat --add-section :JSON:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize.rtd --add-section CLOCK_FREQ_TOPOLOGY:JSON:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize_xml.rtd --add-section BUILD_METADATA:JSON:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize_build.rtd --add-section EMBEDDED_METADATA:RAW:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize.xml --add-section SYSTEM_METADATA:RAW:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/systemDiagramModelSlrBaseAddress.json --key-value SYS:PlatformVBNV:vendor_Ultra96V2_ultra96v2_min2_1_0 --output /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize.xclbin
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/run_link
XRT Build Version: 2.3.1301
       Build Date: 2019-10-24 20:05:16
          Hash ID: 192e706aea53163a04c574f9b3fe9ed76b6ca471
Creating a default 'in-memory' xclbin image.

Section: 'BITSTREAM'(0) was successfully added.
Size   : 5568794 bytes
Format : RAW
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/system.bit'

Section: 'MEM_TOPOLOGY'(6) was successfully added.
Format : JSON
File   : 'mem_topology'

Section: 'IP_LAYOUT'(8) was successfully added.
Format : JSON
File   : 'ip_layout'

Section: 'CONNECTIVITY'(7) was successfully added.
Format : JSON
File   : 'connectivity'
WARNING: Skipping CLOCK_FREQ_TOPOLOGY section for count size is zero.
WARNING: Section 'CLOCK_FREQ_TOPOLOGY' content is empty.  No data in the given JSON file.

Section: 'CLOCK_FREQ_TOPOLOGY'(11) was empty.  No action taken.
Format : JSON
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize_xml.rtd'

Section: 'BUILD_METADATA'(14) was successfully added.
Size   : 3296 bytes
Format : JSON
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize_build.rtd'

Section: 'EMBEDDED_METADATA'(2) was successfully added.
Size   : 7720 bytes
Format : RAW
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize.xml'

Section: 'SYSTEM_METADATA'(22) was successfully added.
Size   : 7900 bytes
Format : RAW
File   : '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/systemDiagramModelSlrBaseAddress.json'
Successfully wrote (5594604 bytes) to the output file: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize.xclbin
Leaving xclbinutil.
INFO: [v++ 60-1441] [04:45:31] Run run_link: Step xclbinutil: Completed
Time (s): cpu = 00:00:00 ; elapsed = 00:00:00.10 . Memory (MB): peak = 678.754 ; gain = 0.000 ; free physical = 22843 ; free virtual = 43449
INFO: [v++ 60-1443] [04:45:31] Run run_link: Step xclbinutilinfo: Started
INFO: [v++ 60-1453] Command Line: xclbinutil --quiet --info /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize.xclbin.info --input /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/int/krnl_resize.xclbin
INFO: [v++ 60-1454] Run Directory: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/link/run_link
INFO: [v++ 60-1441] [04:45:31] Run run_link: Step xclbinutilinfo: Completed
Time (s): cpu = 00:00:00.05 ; elapsed = 00:00:00.06 . Memory (MB): peak = 678.754 ; gain = 0.000 ; free physical = 22843 ; free virtual = 43449
INFO: [v++ 60-244] Generating system estimate report...
INFO: [v++ 60-1092] Generated system estimate report: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/reports/link/system_estimate_krnl_resize.xtxt
INFO: [v++ 60-907] Packaging to directory: '/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xclbin_ultra96v2_min2_hw/sd_card'
INFO: [v++ 60-586] Created /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/xclbin_ultra96v2_min2_hw/krnl_resize.xclbin
INFO: [v++ 60-1307] Run completed. Additional information can be found in:
 Guidance: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/reports/link/v++_link_krnl_resize_guidance.html
 Timing Report: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/reports/link/imp/ultra96v2_min2_wrapper_timing_summary_routed.rpt
 Vivado Log: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/logs/link/vivado.log
 Steps Log File: /media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build/_x_ultra96v2_min2_hw/logs/link/link.steps.log

INFO: [v++ 60-791] Total elapsed time: 0h 19m 28s
masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Vitis_Libraries/vision/L2/examples/resize/build$ 



make host xclbin TARGET=hw BOARD=Zynq ARCH=aarch64 実行後の build ディレクトリの様子を示す。
Vitis_Vision_7_200323.png

make run TARGET=hw BOARD=Zynq ARCH=aarch64 で sd_card ディレクトリを作成しよう。
Vitis_Vision_8_200323.png

実行したところ、エラーになった。
Vitis_Vision_9_200323.png

resize/build/ ディレクトリに sd_card ディレクトリができていた。
Vitis_Vision_10_200323.png

sd_card ディレクトリには 4k.jpg, generic.readme, resize.exe と xclbin_ultra96v2_min2_hw ディレクトリが生成された。
xclbin_ultra96v2_min2_hw ディレクトリの下には、krnl_resize.xclbin が生成された。
Vitis_Vision_11_200323.png
  1. 2020年03月23日 06:18 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis Vision ライブラリの勉強2

Vitis Vision ライブラリの勉強1”の続き。

花粉症で体がだるく、目の調子もおかしいので、なかなか気力が湧かないが何とかブログ書いている。

さて、前回は、Vitis Vision ライブラリを”Vitis Vision Library User Guide”で勉強するということで、ホスト・アプリケーションとカーネルのソースコードを解説してみた。今回は、Vitis のライブラリを git clone して、Vision ライブラリについて見て行こう。

まずは、Vitis ライブラリを git clone する。
git clone https://github.com/Xilinx/Vitis_Libraries.git
Vitis_Vision_1_200322.png

Vitis_Libraries/vision ディレクトリには、L1, L2, L3 とかのディレクトリが作られている。
Vitis_Vision_2_200322.png

L1 は HLS フローということで、今まで、本ブログでやってきた xfOpenCV と同じ実装だった。

L2 は Vitis フローということで、”Vitis Vision ライブラリの勉強1”の”Vitis Vision Kernel on Vitis”で書いたVitis の実装だ。

L3 はVitis Vision ライブラリの機能をつなぎ合わせてパイプラインとして実装したアプリケーションだ。
これは、”Vitis Vision Library User Guide”の”Design Examples Using Vitis Vision Library”に詳細が書いてあるが、”Iterative Pyramidal Dense Optical Flow”のそれらしいディレクトリが見えない?後の、

Corner Tracking Using Optical Flow
Color Detection
Difference of Gaussian Filter
Stereo Vision Pipeline
X + ML Pipeline


はディレクトリがあるようだ。
Vitis_Vision_3_200322.png

最初は L2/examples/resize を Ultra96-V2 で動作させてみよう。
L2 の ReadME.md によると以下の設定を行う。
Commands to run
1. Vitis のインストール・ディレクトリの settings64.sh を実行
source /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/settings64.sh

2. XRT の setenv.sh を実行
source /opt/xilinx/xrt/setup.sh

3. DEVICE 環境変数にプラットフォームの xpfm ファイルへのパスを設定する
export DEVICE=/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2019.2/platforms/ultra96v2_min2/ultra96v2_min2.xpfm

**For embedded devices:**
4. SYSROOT にプラットフォームの sysroot へのパスを設定する。
export SYSROOT=/media/masaaki/Ubuntu_Disk/tools/Xilinx/PetaLinux/PetaL_Proj/2019.2/ultra96v2_min2/images/linux/ultra96v2_min2_pkg/pfm/sysroots/aarch64-xilinx-linux

5. xclbin を make する
make host xclbin TARGET=hw BOARD=Zynq ARCH=aarch64

6. sd_card ディレクトリを make する
make run TARGET=hw BOARD=Zynq ARCH=aarch64
  1. 2020年03月22日 09:35 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

映画「Fukushima 50」を見てきました

昨日奥さんと映画「Fukushima 50」を見てきました。
9年前を思い出しました。ちょうど上の娘が大学入学の年で、大学の入学金を払った日に地震が起きました。原発事故で仙台に送り出すかどうか?、とても迷ったのを覚えています。

生コンポンプ車で水を送ったエピソードが無いのが意外でした。”生コンポンプ車で150トン注水、福島第1原発
  1. 2020年03月21日 05:17 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Vitis Vision ライブラリの勉強1

Vitis Vision ライブラリについて勉強してみたいと思う。

資料としては、”Vitis Vision Library User Guide”がある。

Github には、”Xilinx/Vitis_Libraries”がある。

Vitis Vision Library User Guide”を勉強していこう。つまり、適当にGoogle 翻訳して引用する。

Basic Features
・関数は xfOpenCV と一緒で、Mat インターフェースのテンプレートなんだけど、Mat は xf::cv::Mat 形式だそうだ。

・すべての関数は xf::cv namespace で定義される。
 つまり、resize() 使う時は、

xf::cv::resize<INTERPOLATION, TYPE, HEIGHT, WIDTH, NEWHEIGHT, NEWWIDTH, NPC_T, MAXDOWNSCALE>(in_mat, out_mat);

という感じになるということ。(Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cppから引用)

・xf::cv::Mat 形式については、xf::Mat Image Container Class を見てほしいそうだ。これは、 xf::Mat の解説なんだけど、 xf::cv::Mat も同じで良いのかな?

Vitis Vision Kernel on Vitis
Vitis Vision カーネルの使い方なんだけど、使い方は xfOpenCV を踏襲しているようだ。同じ感じ。
、”Vitis Vision Library User Guide”では、cv::imread() で

画像を cv::Mat 形式で読み込んで、cv::Mat 形式の画像を xf::cv::Mat 形式に変換する…

とか書いてあるが、実際に”Vitis_Libraries/vision/L2/examples/resize/”で使用されているカーネルとホスト・アプリケーションのやり取り方法を書いておく。

ホスト・アプリケーションの動作Vitis_Libraries/vision/L2/examples/resize/xf_resize_tb.cpp
1. cv::imread() で画像を cv::Mat 形式で読み込む。
2. xcl::get_xil_devices() でデバイスを取得する
3. Context, command queue を作成する
4. カーネルのバイナリをロードする
5. カーネルを生成する(cl::Kernel)
6. 画像入力、画像出力用のバッファを確保する(cl::Buffer)
7. カーネルの引数を設定する(krnl.setArg)
8. 画像入力用バッファに画像のデータを入力する(q.enqueueWriteBuffer)
9. カーネルを実行させる(q.enqueueTask)
10. カーネルの出力画像をホストメモリにコピーする(q.enqueueReadBuffer)
11. 終了(q.finish)

カーネルの動作Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp
1. xf::cv::Array2xfMat でホストからの配列データを xf::cv::Mat 形式に変換する
2. xf::cv::resize で画像をリサイズする
3. xf::cv::xfMat2Array でリサイズした結果の xf::cv::Mat 形式画像をホストに渡す配列データに変換する

Array2xfMatxfMat2Array
  1. 2020年03月21日 05:08 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す4

Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す3”の続き。

前回は、krnl_dma_read.xo と krnl_lap_filter_dmaw.xo ファイルがそろったので、Vitis アクセラレーション・アプリケーション・プロジェクトの streaming_lap_filter5 を作成し、ビルドが成功した。今回は、ビルドしたファイルを使用して、Ultra96-V2 の実機で動作を確認してみよう。

Vitis で生成されたBOOT.BIN をUltra96-V2 の MicroSD カードの第 1 パーティションに転送する。
Ultra96-V2 の PetaLinux を起動する。
/home/masaaki/Vitis_Work/2019.2/streaming_lap_filter5/Hardware/sd_card ディレクトリに移動し、 sudo su で root になって scp コマンドで SFTP する。
scp BOOT.BIN 192.168.3.23:/run/media/mmcblk0p1
RTL_kernel_36_200319.png

Ultra96-V2 の PetaLinux に ID: root , Pass: root でログインして、 reboot コマンドで再起動する。
PetaLinux が起動したら、 Ultra96-V2 のPetaLinux 上で zocl ドライバを起動した。
insmod /lib/modules/4.19.0-xilinx-v2019.2/extra/zocl.ko
RTL_kernel_37_200319.png

Vitis の Assistant ウインドウの streaming_lap_filter5_system の streaming_lap_filter5 -> Hardware を右クリックし、右クリックメニューから Run -> Run Configurations... を選択して、 streaming_lap_filter5 の Run Configuration を作成した。
RTL_kernel_38_200319.png

Run Configuration ダイアログで Run ボタンをクリックすると動作を確認することができた。
RTL_kernel_39_200319.png

実行時間は 2.787 ms だった。
後、 2 回実行した。
RTL_kernel_40_200319.png

RTL_kernel_41_200319.png

実行時間は 2.461 ms と 2.588 ms だった。平均実行時間は 2.612 ms だった。
C++ カーネルの場合の結果は、”Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す9(streaming_lap_filter3 プロジェクト2)”に書いてあるが、平均実行時間は 1.649 ms だったので、だいぶ遅い。
そこで、”Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す10(streaming_lap_filter3 のプロファイル)”の設定を解除して、もう一度、streaming_lap_filter3 を実行してみることにした。

Vitis の Assistant ウインドウの streaming_lap_filter3_system の streaming_lap_filter3 -> Hardware を右クリックし、右クリックメニューから Run -> Run Configurations... を選択して、 streaming_lap_filter3 の Run Configuration を立ち上げて、Run した。
RTL_kernel_42_200319.png

結果を示す。
RTL_kernel_43_200319.png

実行時間は 2.658 ms だった。

後、2 回実行した。
RTL_kernel_44_200319.png

RTL_kernel_45_200319.png

実行時間は 2.658 ms と 2.393 ms だった。平均実行時間は 2.570 ms だった。これだと RTL カーネルの streaming_lap_filter5 とほぼ同一だ。
なぜ、実行時間が伸びてしまったのだろか?
  1. 2020年03月19日 05:36 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す3

Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す2”の続き。

RTL カーネルでストリーミング接続がうまく行くのか?を確かめるために、krnl_lap_filter_dmaw.cpp を Vivado HLS 2019.2 で RTL カーネルにすることにした。前回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行って、krnl_lap_filter_dmaw.xo ファイルを出力した。これで krnl_lap_filter_dmaw の RTL カーネル作成は終了した。

krnl_dma_read は、

Vivado HLS 2019.2 で krnl_dma_read を作成する1(ソースコードの表示)
Vivado HLS 2019.2 で krnl_dma_read を作成する2(IP 化)

で、dma_read.xo ファイルを作ってある。

krnl_dma_read.xo と krnl_lap_filter_dmaw.xo ファイルがそろったので、Vitis アクセラレーション・アプリケーション・プロジェクトの streaming_lap_filter5 を作成した。
RTL_kernel_29_200317.png

すでに、Explorer ウインドウの streaming_lap_filter5_system -> streaming_lap_filter5 -> src には、 Import Sources... を使用して bmp_header.h, krnl_streaming_lap_host3.cpp, dma_read.xo, krnl_lap_filter_dmaw.xo, krnl_streaming_dmar_lap_dmaw.ini ファイルを入れてある。

Assistant ウインドウの streaming_lap_filter5_system -> streaming_lap_filter5 を右クリックして右クリックメニューから settings... を選択した。
Project Settings ダイアログが開く。
V++ linker options: に

--config ../src/krnl_stream_dmar_lap_dmaw.ini

を入力した。
RTL_kernel_30_200317.png

krnl_stream_dmar_lap_dmaw.ini の内容を示す。ストリーミング接続情報が書いてある。

[connectivity]
stream_connect=dma_read_1.outs:krnl_lap_filter_dmaw_1.ins


これで準備が整ったので、Assistant ウインドウの streaming_lap_filter5_system -> streaming_lap_filter5 -> Hardware を右クリックして、右クリックメニューから Build を選択して、ビルドを開始した。
RTL_kernel_31_200317.png

1 度目はエラーだったが、2 回目のビルドで緑チェックマークがついた。
RTL_kernel_32_200317.png

streaming_lap_filter5/Hardware/sd_card ディレクトリの様子を示す。
RTL_kernel_33_200318.png

streaming_lap_filter5 の Vivado プロジェクトのブロックデザインを示す。
dma_read_1 の outs ストリーミング出力と krnl_lap_filter_dmaw_1 の ins が接続されているのが分かる。
RTL_kernel_34_200318.png

Address Editor 画面を示す。
RTL_kernel_35_200318.png
  1. 2020年03月18日 04:58 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す2

Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す1”の続き。

RTL カーネルでストリーミング接続がうまく行くのか?を確かめるために、krnl_lap_filter_dmaw.cpp を Vivado HLS 2019.2 で RTL カーネルにすることにした。前回は、ソースコードを貼って、Vivado HLS 2019.2 のプロジェクトを作成した。今回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行う。

C シミュレーションからやってみよう。
RTL_kernel_20_200317.png

solution1/csim/build ディレクトリを見ると、lap.bmp が生成されている。
RTL_kernel_21_200317.png

C コードの合成を行った。
RTL_kernel_22_200317.png

Latency も問題無さそうだ。リソース使用量は多いが、やはり、ほとんど dma_write で消費されている。サイズを固定すればリソース使用量が減るのは確認済みだ。

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

C/RTL 協調シミュレーションの波形を見てみよう。全体波形から。
RTL_kernel_24_200317.png

拡大してみよう。
RTL_kernel_25_200317.png

WVALID が 1 の間の幅 320 ns はクロックが 5 ns とすると 64 クロック分となる。つまり画像の 1 行のピクセル数と一致する。WVALID が 0 に落ちている間は、 20 ns つまり、 4 クロック分となる。

次に、Export RTL を行うが、その前に”extern "C" { }”を元に戻した。
RTL_kernel_26_200317.png

Export RTL を行った。
RTL_kernel_27_200317.png

問題無さそうだ。

krnl_lap_filter_dmaw.xo が生成されていた。
RTL_kernel_28_200317.png
  1. 2020年03月17日 04:30 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す1

Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す9(streaming_lap_filter3 プロジェクト2)”でカーネルのストリーミング接続の動作を確かめたところ、カーネルが 2 個だったら動作した。それだったら、RTL カーネルではストリーミング接続できるのか?ということで、krnl_lap_filter_dmaw.cpp と krnl_dma_read.cpp をそれぞれ Vivado HLS 2019.2 で RTL カーネルにしてVitis 2019.2 でストリーミング接続してみよう。

前に貼ってあったと思うが、 krnl_lap_filter_dmaw.cpp を示す。なお、”extern "C" { }”はコメントアウトしてある。

// krnl_lap_filter_dmaw.cpp
// 2020/02/08 by marsee

#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include <stdint.h>

// RGBからYへの変換
// RGBのフォーマットは、{8'd0, R(8bits), G(8bits), B(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y =  0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
int32_t conv_rgb2y(int32_t rgb){
    int32_t r, g, b, y_f;
    int32_t y;

    b = rgb & 0xff;
    g = (rgb>>8) & 0xff;
    r = (rgb>>16) & 0xff;

    y_f = 77*r + 150*g + 29*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に256倍した
    y = y_f >> 8; // 256で割る

    return(y);
}

// ラプラシアンフィルタ
// x0y0 x1y0 x2y0 -1 -1 -1
// x0y1 x1y1 x2y1 -1  8 -1
// x0y2 x1y2 x2y2 -1 -1 -1
int32_t laplacian_fil(int32_t x0y0, int32_t x1y0, int32_t x2y0, int32_t x0y1,
        int32_t x1y1, int32_t x2y1, int32_t x0y2, int32_t x1y2, int32_t x2y2)
{
    int32_t y;

    y = -x0y0 -x1y0 -x2y0 -x0y1 +8*x1y1 -x2y1 -x0y2 -x1y2 -x2y2;
    if (y<0)
        y = -y;
    else if (y>255)
        y = 255;
    return(y);
}

void krnl_lap_filter(hls::stream<ap_axiu<32,0,0,0> >& ins, hls::stream<ap_axiu<32,0,0,0> >& outs,
        int32_t x_size, int32_t y_size){

    ap_axiu<32,0,0,0> pix;
    ap_axiu<32,0,0,0> lap;

    int32_t line_buf[2][1920]; // supported HD resolution
#pragma HLS array_partition variable=line_buf block factor=2 dim=1
#pragma HLS resource variable=line_buf core=RAM_2P

    int32_t pix_mat[3][3];
#pragma HLS array_partition variable=pix_mat complete

    int32_t lap_fil_val;

    LOOP_X : for (int y=0; y<y_size; y++){
#pragma HLS LOOP_TRIPCOUNT min=48 max=600
        LOOP_Y : for (int x=0; x<x_size; x++){
#pragma HLS LOOP_TRIPCOUNT min=64 max=800
#pragma HLS PIPELINE II=1
            ins >> pix; // AXI4-Stream からの入力

            Loop4 : for (int k=0; k<3; k++){
                Loop5 : for (int m=0; m<2; m++){
#pragma HLS UNROLL
                    pix_mat[k][m] = pix_mat[k][m+1];
                }
            }
            pix_mat[0][2] = line_buf[0][x];
            pix_mat[1][2] = line_buf[1][x];

            int32_t y_val = conv_rgb2y(pix.data);
            pix_mat[2][2] = y_val;

            line_buf[0][x] = line_buf[1][x];    // 行の入れ替え
            line_buf[1][x] = y_val;

            lap_fil_val = laplacian_fil(    pix_mat[0][0], pix_mat[0][1], pix_mat[0][2],
                                            pix_mat[1][0], pix_mat[1][1], pix_mat[1][2],
                                            pix_mat[2][0], pix_mat[2][1], pix_mat[2][2]);
            lap.data = (lap_fil_val<<16)+(lap_fil_val<<8)+lap_fil_val; // RGB同じ値を入れる

            if (x<2 || y<2) // 最初の2行とその他の行の最初の2列は無効データなので0とする
                lap.data = 0;

            if (x==(x_size-1) && y==(y_size-1)) // フレームの最後で TLAST をアサートする
                lap.last = 1;
            else
                lap.last = 0;

            outs << lap;    // ストリームへ出力
        }
    }

    LOOP_WAIT_LAST: while(pix.last == 0) { // last が 1 になるまで待つ
#pragma HLS PIPELINE II=1
#pragma HLS LOOP_TRIPCOUNT min=1 max=1 avg=1
        ins >> pix;
    };
}

void dma_write(hls::stream<ap_axiu<32,0,0,0> >& ins, volatile int32_t *outm,
        int32_t x_size, int32_t y_size){

    ap_axiu<32,0,0,0> pix;

    LOOP_DWY: for(int y=0; y<y_size; y++){
#pragma HLS LOOP_TRIPCOUNT min=48 max=600
        LOOP_DWX: for(int x=0; x<x_size; x++){
#pragma HLS LOOP_TRIPCOUNT min=64 max=800
#pragma HLS PIPELINE II=1
            ins >> pix;
            outm[x_size*y+x] = pix.data;
        }
    }
}

//extern "C" {
void krnl_lap_filter_dmaw(hls::stream<ap_axiu<32,0,0,0> >& ins, volatile int32_t *outm,
        int32_t x_size, int32_t y_size){
#pragma HLS DATAFLOW
#pragma HLS INTERFACE m_axi depth=3072 port=outm offset=slave bundle=gmem
#pragma HLS INTERFACE axis register both port=ins
#pragma HLS INTERFACE s_axilite port=y_size bundle=control
#pragma HLS INTERFACE s_axilite port=x_size bundle=control
#pragma HLS INTERFACE s_axilite port=return bundle=control

    hls::stream<ap_axiu<32,0,0,0> > lap_stream;

    krnl_lap_filter(ins, lap_stream, x_size, y_size);
    dma_write(lap_stream, outm, x_size, y_size);
}
//}


krnl_lap_filter_dmaw_tb.cpp を示す。

// krnl_lap_filter_dmaw_tb.cpp
// 2020/02/08 by marsee

#include "hls_opencv.h"
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>

void krnl_lap_filter_dmaw(hls::stream<ap_axiu<32,0,0,0> >& ins, volatile int32_t *outm,
        int32_t x_size, int32_t y_size);

void krnl_lap_filter_soft(hls::stream<ap_axiu<32,0,0,0> >& ins, hls::stream<ap_axiu<32,0,0,0> >& outs,
        int32_t x_size, int32_t y_size);

const char INPUT_BMP_FILE[] = "test.bmp";
const char OUTPUT_BMP_FILE[] = "lap.bmp";

int main(){
    hls::stream<ap_axiu<32,0,0,0> > ins;
    hls::stream<ap_axiu<32,0,0,0> > ins_soft;
    hls::stream<ap_axiu<32,0,0,0> > outs_soft;

    ap_axiu<32,0,0,0> pix;
    ap_axiu<32,0,0,0> vals_soft;

   // BMPファイルをMat に読み込む
    cv::Mat img = cv::imread(INPUT_BMP_FILE);

    // ピクセルを入れる領域の確保
    std::vector<int32_t> rd_bmp(sizeof(int32_t)*img.cols*img.rows);
    std::vector<int32_t> hw_lap(sizeof(int32_t)*(img.cols)*(img.rows));
    std::vector<int32_t> sw_lap(sizeof(int32_t)*(img.cols)*(img.rows));

    // rd_bmp にBMPのピクセルを代入
    cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
    for (int y=0; y<img.rows; y++){
        for (int x=0; x<img.cols; x++){
            cv::Vec3b pixel;
            pixel = dst_vec3b(y,x);
            rd_bmp[y*img.cols+x] = (pixel[0] & 0xff) | ((pixel[1] & 0xff)<<8) | ((pixel[2] & 0xff)<<16);
            // blue - pixel[0]; green - pixel[1]; red - pixel[2];
        }
    }

    // ins に入力データを用意する
    for(int j=0; j < img.rows; j++){
        for(int i=0; i < img.cols; i++){
            pix.data = (ap_int<32>)rd_bmp[(j*img.cols)+i];

            if ((i==img.cols-1) && (j==img.rows-1)) // フレームの最後で last をアサートする
                pix.last = 1;
            else
                pix.last = 0;

            ins << pix;
            ins_soft << pix;
        }
    }

    krnl_lap_filter_dmaw(ins, hw_lap.data(), img.cols, img.rows);   // ハードウェアのソーベルフィルタ
    krnl_lap_filter_soft(ins_soft, outs_soft,img.cols, img.rows);   // ソフトウェアのソーベルフィルタ

    // ハードウェアとソフトウェアのソーベルフィルタの値のチェック
    for (int y=0; y<img.rows; y++){
        for (int x=0; x<img.cols; x++){
            ap_int<32> val = hw_lap[y*img.cols+x];
            outs_soft >> vals_soft;
            ap_int<32> val_soft = vals_soft.data;
            if (val != val_soft){
                printf("ERROR HW and SW results mismatch x = %ld, y = %ld, HW = %x, SW = %x\n",
                        x, y, val, val_soft);
                return(1);
            }
        }
    }
    printf("Success HW and SW results match\n");

    const int lap_rows = img.rows;
    const int lap_cols = img.cols;
    cv::Mat wbmpf(lap_rows, lap_cols, CV_8UC3);
    // wbmpf にラプラシアンフィルタ処理後の画像を入力
    cv::Mat_<cv::Vec3b> lap_vec3b = cv::Mat_<cv::Vec3b>(wbmpf);
    for (int y=0; y<wbmpf.rows; y++){
        for (int x=0; x<wbmpf.cols; x++){
            cv::Vec3b pixel;
            pixel = lap_vec3b(y,x);
            int32_t rgb = hw_lap[y*wbmpf.cols+x];
            pixel[0] = (rgb & 0xff); // blue
            pixel[1] = (rgb & 0xff00) >> 8; // green
            pixel[2] = (rgb & 0xff0000) >> 16; // red
            lap_vec3b(y,x) = pixel;
        }
    }

    // ハードウェアのソーベルフィルタの結果を bmp ファイルへ出力する
    cv::imwrite(OUTPUT_BMP_FILE, wbmpf);

    return(0);
}

// RGBからYへの変換
// RGBのフォーマットは、{8'd0, R(8bits), G(8bits), B(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y =  0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
int32_t conv_rgb2y_soft(int32_t rgb){
    int32_t r, g, b, y_f;
    int32_t y;

    b = rgb & 0xff;
    g = (rgb>>8) & 0xff;
    r = (rgb>>16) & 0xff;

    y_f = 77*r + 150*g + 29*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に256倍した
    y = y_f >> 8; // 256で割る

    return(y);
}

// ラプラシアンフィルタ
// x0y0 x1y0 x2y0 -1 -1 -1
// x0y1 x1y1 x2y1 -1  8 -1
// x0y2 x1y2 x2y2 -1 -1 -1
int32_t laplacian_fil_soft(int32_t x0y0, int32_t x1y0, int32_t x2y0, int32_t x0y1,
        int32_t x1y1, int32_t x2y1, int32_t x0y2, int32_t x1y2, int32_t x2y2)
{
    int32_t y;

    y = -x0y0 -x1y0 -x2y0 -x0y1 +8*x1y1 -x2y1 -x0y2 -x1y2 -x2y2;
    if (y<0)
        y = -y;
    else if (y>255)
        y = 255;
    return(y);
}

void krnl_lap_filter_soft(hls::stream<ap_axiu<32,0,0,0> >& ins, hls::stream<ap_axiu<32,0,0,0> >& outs,
        int32_t x_size, int32_t y_size){
    ap_axiu<32,0,0,0> pix;
    ap_axiu<32,0,0,0> lap;

    int32_t line_buf[2][1920]; // supported HD resolution

    int32_t pix_mat[3][3];
    int32_t lap_fil_val;

    LOOP_X : for (int y=0; y<y_size; y++){
        LOOP_Y : for (int x=0; x<x_size; x++){
            ins >> pix; // AXI4-Stream からの入力

            Loop4 : for (int k=0; k<3; k++){
                Loop5 : for (int m=0; m<2; m++){
                    pix_mat[k][m] = pix_mat[k][m+1];
                }
            }
            pix_mat[0][2] = line_buf[0][x];
            pix_mat[1][2] = line_buf[1][x];

            int32_t y_val = conv_rgb2y_soft(pix.data);
            pix_mat[2][2] = y_val;

            line_buf[0][x] = line_buf[1][x];    // 行の入れ替え
            line_buf[1][x] = y_val;

            lap_fil_val = laplacian_fil_soft(   pix_mat[0][0], pix_mat[0][1], pix_mat[0][2],
                                                pix_mat[1][0], pix_mat[1][1], pix_mat[1][2],
                                                pix_mat[2][0], pix_mat[2][1], pix_mat[2][2]);
            lap.data = (lap_fil_val<<16)+(lap_fil_val<<8)+lap_fil_val; // RGB同じ値を入れる

            if (x<2 || y<2) // 最初の2行とその他の行の最初の2列は無効データなので0とする
                lap.data = 0;

            if (x==(x_size-1) && y==(y_size-1)) // フレームの最後で TLAST をアサートする
                lap.last = 1;
            else
                lap.last = 0;

            outs << lap;    // ストリームへ出力
        }
    }

    LOOP_WAIT_LAST: while(pix.last == 0) { // last が 1 になるまで待つ
        ins >> pix;
    };
}


Vivado HLS 2019.2 の krnl_lap_filter_dmaw プロジェクトを作成した。
RTL_kernel_18_200316.png

solution メニューのSolution Settings... を選択して、Synthesis の設定項目で、Vitis Bottom Up Flow にチェックを入れてある。
RTL_kernel_19_200316.png
  1. 2020年03月16日 20:50 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

FPGAの部屋のまとめサイトの更新(2020年3月15日)

FPGAの部屋のまとめサイトを更新しました。 2020 年 3 月 15 日までの記事を更新しました。
  1. 2020年03月15日 04:31 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 で xfOpenCV のAXI4-Stream 版 medianblur をやってみる3

Vivado HLS 2019.2 で xfOpenCV のAXI4-Stream 版 medianblur をやってみる2”の続き。

前回は、カラー画像出力と白黒画像出力の C シミュレーションを行って、成功した。今回は、カラー画像出力と白黒画像出力それぞれにおいて、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行う。

まずは前回の続きで、C コードの合成を行った。左側が白黒画像出力、右側がカラー画像出力だ。
xfOpenCV_101_200312.pngxfOpenCV_106_200312.png

2 つ共、Latency は同じ max 値で 2094021 クロックだった。最大解像度は 1920 x 1080 = 2073600 ピクセルなので、 2094021 クロック / 2073600 ピクセル ≒ 1.010 クロック / ピクセルだった。性能は問題ない。
リソース使用量は当然ながらカラー画像出力の方が多い。BRAM_18K の使用量も白黒画像出力が 3 個、カラー画像出力が 9 個だった。

C/RTL 協調シミュレーションを行った。結果を示す。上がが白黒画像出力、下がカラー画像出力だ。
xfOpenCV_102_200312.png
xfOpenCV_107_200312.png

どちらも Latency は 366956 クロックだった。使用画像は 800 x 450 ピクセルなので、合計 360000 ピクセル、よって 366956 クロック / 2073600 ピクセル ≒ 1.019 クロック / ピクセルだった。

C/RTL 協調シミュレーションの全体波形を示す。上がが白黒画像出力、下がカラー画像出力だ。
xfOpenCV_103_200312.png
xfOpenCV_108_200312.png

ほとんど同じだが、TDATA が 8 ビットと 32 ビットの違いがある。

C/RTL 協調シミュレーションの波形を拡大してみよう。上がが白黒画像出力、下がカラー画像出力だ。
xfOpenCV_104_200312.png
xfOpenCV_109_200312.png

こちらも同じだ。

最後に、Export RTL を示す。左側が白黒画像出力、右側がカラー画像出力だ。
xfOpenCV_105_200312.pngxfOpenCV_110_200312.png

この結果がそっくり同じということはどういうことだろうか?
C コードの合成の結果は違っていたのに?何かバグっているとしか思えない。
  1. 2020年03月13日 03:59 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 で xfOpenCV のAXI4-Stream 版 medianblur をやってみる2

Vivado HLS 2019.2 で xfOpenCV のAXI4-Stream 版 medianblur をやってみる1”の続き。

前回は、新たに作り直したAXI4-Steram 版の medianblur のソースコードを貼った。今回は、カラー画像出力と白黒画像出力の C シミュレーションを行った。

まずは、”Vivado HLS 2019.2 で xfOpenCV のAXI4-Stream 版 medianblur をやってみる1”のソースコードそのままのカラー画像出力の場合を示す。こちらは、xf::Mat の画像のタイプが XF_8UC3 で AXI4-Stream のデータ幅が 32 ビットとなっている。(hls::stream<ap_axiu<32,1,1,1> >)
C シミュレーションを行った。結果を示す。
xfOpenCV_91_200310.png

medianblur/solution1/csim/build ディレクトリを示す。
xfOpenCV_92_200311.png

これが元画像の im0.jpg で、xfopencv/examples/medianblur/data/im0.jpg を、Pinta ツールのサイズ変換で 800 x 450 ピクセルに縮小して、ノイズを加えた画像である。
xfOpenCV_93_200311.jpg

これを、ハードウェアでメディアンフィルタをかけた画像を示す。(今回は、C シミュレーションだが)
xfOpenCV_94_200311.jpg

ノイズが低減されている。

次に、OpenCV の cv::medianBlur() を使ってメディアンフィルタをかけた画像を示す。
xfOpenCV_95_200311.jpg

こちらも同じようにノイズが低減されている。

次に、白黒画像出力に設定変更して C シミュレーションを行った。define の RGB を 0 にして、GRAY を 1 にした。
xfOpenCV_96_200311.png

こちらは、xf::Mat の画像のタイプが XF_8UC1 で AXI4-Stream のデータ幅が 8 ビットとなっている。(hls::stream<ap_axiu<8,1,1,1> >)

C シミュレーションを行った。結果を示す。
xfOpenCV_97_200311.png

medianblur/solution1/csim/build ディレクトリを示す。
xfOpenCV_98_200311.png

ハードウェアでメディアンフィルタをかけた画像を示す。(今回は、C シミュレーションだが)
xfOpenCV_99_200311.jpg

OpenCV の cv::medianBlur() を使ってメディアンフィルタをかけた画像を示す。
xfOpenCV_100_200311.jpg

うまく行って良かった。
  1. 2020年03月12日 04:33 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 で xfOpenCV のAXI4-Stream 版 medianblur をやってみる1

Vivado HLS 2019.2 で xfOpenCV の medianblur をやってみる1”で動いていた AXI4-Stream 版 medianblur が動かなくなったと書いたが、これは、画像の大きさを指定するところで、height と width を取り違えていたからだった。4k2k 画像から HD 画像に変更しようとして、height と width を間違ってしまっていたのだった。orz

新たに作り直したAXI4-Steram 版の medianblur を紹介する。だいぶ自分の書き方になってきたのだが、xf_headers.h は Xilinx 社のソースコードをそのまま使用している。
なお、白黒画像とカラー画像を define で切り替えるようにしてある。

最初に xf_median_blur.h を貼っておく。

// xf_median_blur.h
// 2020/03/09 by marsee
// xfopencv/examples/medianblur/xf_median_blur_config.h のコードを引用している
// https://github.com/Xilinx/xfopencv/blob/master/examples/medianblur/xf_median_blur_config.h
// xfopencv/examples/medianblur/xf_config_params.h のコードを引用している
// https://github.com/Xilinx/xfopencv/blob/master/examples/medianblur/xf_config_params.h

#ifndef __XF_MEDIAN_BLUR_H__
#define __XF_MEDIAN_BLUR_H__

#include "hls_stream.h"
#include "ap_int.h"
#include "common/xf_common.h"
#include "imgproc/xf_median_blur.hpp"
#include "common/xf_axi_sdata.h"

#define NO  1  // Normal Operation
#define RO  0  // Resource Optimized

#define RGB 1
#define GRAY 0

/* Filter window size*/
#define WINDOW_SIZE 3

/*  set the height and weight  */
#define WIDTH  1920
#define HEIGHT 1080

#if NO
#define NPxPC XF_NPPC1
#else
#define NPxPC XF_NPPC8
#endif

#if GRAY
#define TYPE XF_8UC1
#define CHANNELS 1
#define STREAMW 8
#else
#define TYPE XF_8UC3
#define CHANNELS 3
#define STREAMW 32
#endif

typedef hls::stream<ap_axiu<STREAMW,1,1,1> > AXI_STREAM;

#endif


xf_median_blur.cpp を貼っておく。
(2020/03/12:修正) img_height と img_width を AXI4-Lite Slave に変更した。

// xf_median_blur.cpp
// 2020/03/08 by marsee

// xfopencv/HLS_Use_Model/Standalone_HLS_AXI_Example/xf_ip_accel_app.cpp のコードを引用している
// https://github.com/Xilinx/xfopencv/blob/master/HLS_Use_Model/Standalone_HLS_AXI_Example/xf_ip_accel_app.cpp
// xfopencv/examples/medianblur/xf_median_blur_accel.cpp のコードを引用している
// https://github.com/Xilinx/xfopencv/blob/master/examples/medianblur/xf_median_blur_accel.cpp

#include "xf_median_blur.h"
#include "common/xf_infra.h"

void median_blur_accel(xf::Mat<TYPE, HEIGHT, WIDTH, NPxPC> &_src, xf::Mat<TYPE, HEIGHT, WIDTH, NPxPC> &_dst)
{
    xf::medianBlur <WINDOW_SIZE, XF_BORDER_REPLICATE, TYPE, HEIGHT, WIDTH,  NPxPC> (_src, _dst);
}

void xf_median_blur(AXI_STREAM& _src, AXI_STREAM& _dst, int img_height, int img_width){
#pragma HLS INTERFACE s_axilite port=img_width
#pragma HLS INTERFACE s_axilite port=img_height
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE axis register both  port=_src
#pragma HLS INTERFACE axis register both  port=_dst

     xf::Mat<TYPE, HEIGHT, WIDTH, NPxPC> img_in(img_height, img_width);
     xf::Mat<TYPE, HEIGHT, WIDTH, NPxPC> img_out(img_height, img_width);

#pragma HLS stream variable=img_in.data dim=1 depth=16
#pragma HLS stream variable=img_out.data dim=1 depth=16
#pragma HLS dataflow

    xf::AXIvideo2xfMat(_src, img_in);

    median_blur_accel(img_in, img_out);

    xf::xfMat2AXIvideo(img_out, _dst);
}


最後にテストベンチの xf_median_blur_tb.cpp を貼っておく。

// xf_median_blur_config_tb.cpp
// 2020/03/08 by marsee

// xfopencv/HLS_Use_Model/Standalone_HLS_AXI_Example/xf_dilation_tb.cpp のコードを引用している
// https://github.com/Xilinx/xfopencv/blob/master/HLS_Use_Model/Standalone_HLS_AXI_Example/xf_dilation_tb.cpp
// xfopencv/examples/medianblur/xf_median_blur_tb.cpp のコードを引用している
// https://github.com/Xilinx/xfopencv/blob/master/examples/medianblur/xf_median_blur_tb.cpp

#include "xf_headers.h"
#include "xf_median_blur.h"
#include "common/xf_infra.h"
#include "common/xf_axi.h"

void xf_median_blur(AXI_STREAM& _src, AXI_STREAM& _dst, int img_height, int img_width);

int main(int argc, char** argv)
{

    if(argc != 2)
    {
        fprintf(stderr,"Invalid Number of Arguments!\nUsage:\n");
        fprintf(stderr,"<Executable Name> <input image path> \n");
        return -1;
    }

    cv::Mat out_img,ocv_ref;
    cv::Mat in_img,in_img1,diff;

    // reading in the color image
#if GRAY
    in_img = cv::imread(argv[1], 0);
#else
    in_img = cv::imread(argv[1], 1);
#endif
    if (in_img.data == NULL)
    {
        fprintf(stderr,"Cannot open image at %s\n", argv[1]);
        return 0;
    }
    // create memory for output images
    /*  reading the gray/color image  */
#if GRAY
    ocv_ref.create(in_img.rows,in_img.cols,CV_8UC1);
    out_img.create(in_img.rows,in_img.cols,CV_8UC1);
    diff.create(in_img.rows,in_img.cols,CV_8UC1);
    in_img1.create(in_img.rows,in_img.cols,CV_8UC1);

#else
    ocv_ref.create(in_img.rows,in_img.cols,CV_8UC3);
    out_img.create(in_img.rows,in_img.cols,CV_8UC3);
    diff.create(in_img.rows,in_img.cols,CV_8UC3);
    in_img1.create(in_img.rows,in_img.cols,CV_8UC3);
#endif
    int img_height = in_img.rows;
    int img_width = in_img.cols;

    /////////////////   Opencv  Reference  ////////////////////////
    cv::medianBlur(in_img,ocv_ref,WINDOW_SIZE);
    cv::imwrite("out_ocv.jpg", ocv_ref);

    AXI_STREAM _src,_dst;

    cvMat2AXIvideoxf<NPxPC>(in_img, _src);
    xf_median_blur(_src, _dst, img_height, img_width);
    AXIvideo2cvMatxf<NPxPC>(_dst, in_img1);

    cv::imwrite("hls.jpg", in_img1);
    //////////////////  Compute Absolute Difference ////////////////////

    cv::absdiff(ocv_ref, in_img1, diff);

    float err_per;
    xf::analyzeDiff(diff,0,err_per);
    cv::imwrite("diff_img.jpg",diff);

    in_img.~Mat();
    out_img.~Mat();
    ocv_ref.~Mat();
    in_img.~Mat();
    in_img1.~Mat();
    diff.~Mat();

    if(err_per > 0.0f)
    {
        return 1;
    }

    return 0;
}


Vivado HLS 2019.2 で medianblur プロジェクトを作成した。
xfOpenCV_90_200310.png

Vivado HLS 2019.2 の Project メニューから Project Settings... を選択すると、Project Settings (medianblur) ダイアログが開く。
Project Settings (medianblur) ダイアログで、Simulation をクリックして、xf_median_blur_tb.cpp の CFLAGS に

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

を設定した。
また、Input Arguments に

im0.jpg

を設定した。

同様に、Project Settings (medianblur) ダイアログで、Synthesis をクリックして、 xf_median_blur.cpp の CFLAGS に

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

を設定した。

最後に Solution メニューの Solution Settings... を選択して、Solution Settings (solution1) ダイアログが表示される。 Cosimulation をクリックして、Input Arguments に

im0.jpg

を設定した。

im0.jpg は”Vivado HLS 2019.2 で xfOpenCV の medianblur をやってみる1”と同じもので、ノイズを加えてあるカラー画像となっている。これは、xfopencv/examples/medianblur/data/im0.jpg を、Pinta ツールのサイズ変換で 800 x 450 ピクセルに縮小して、ノイズを加えた画像である。
  1. 2020年03月11日 04:23 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 で xfOpenCV の medianblur をやってみる2

Vivado HLS 2019.2 で xfOpenCV の medianblur をやってみる1”の続き。

前回は、medianblur の Mat 画像版というか、xfOpenCV の medianblur サンプルそのままをやってみようということで、C シミュレーションを行って、ノイズ除去することができた。今回は、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行う。

C コードの合成を行った。
xfOpenCV_86_200310.png

Latency の max は 8339545 クロックだった。画像の大きさは、3840 x 2160 ピクセルの 4k 画像なので、8294400 ピクセルとなる。8339545 クロック / 8294400 ピクセル ≒ 1.005 クロック / ピクセルだったので、性能的には問題ない。

Instance をクリックして Loop の値を表示できるところまで遡って見た。
xfOpenCV_87_200310.png

次に C/RTL 協調シミュレーションを行ったところエラーになった。
xfOpenCV_88_200310.png

エラーメッセージを貼っておく。

ERROR: System recieved a signal named SIGSEGV and the program has to stop immediately!
This signal was generated when a program tries to read or write outside the memory that is allocated for it, or to write memory that can only be read.
Possible cause of this problem may be: 1) the depth setting of pointer type argument is much larger than it needed; 2)insufficient depth of array argument; 3)null pointer etc.
Current execution stopped during CodeState = DUMP_INPUTS.
You can search CodeState variable name in apatb*.cpp file under ./sim/wrapc dir to locate the position.


ERROR: [COSIM 212-360] Aborting co-simulation: C TB simulation failed.
ERROR: [COSIM 212-320] C TB testing failed, stop generating test vectors. Please check C TB or re-run cosim.
ERROR: [COSIM 212-5] *** C/RTL co-simulation file generation failed. ***
ERROR: [COSIM 212-4] *** C/RTL co-simulation finished: FAIL ***
command 'ap_source' returned error code


Export RTL を行った。
xfOpenCV_89_200310.png

CP achieved post-implementation も 3.775 ns なので、問題無さそうだ。

次には、うまく行った AXI4-Stream 版の medianblur を書いておく。
  1. 2020年03月10日 04:46 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 で xfOpenCV の medianblur をやってみる1

もう1つ xfOpenCV をやってみようということで、日曜日の朝に AXI4-Stream 版の medianblur を作って、C シミュレーション、C コードの合成までできていたはずだったが、日曜日の夕方にカラー画像だったので、白黒画像でやってみようと思ったら AXI4-Stream から Mat 変換で empty だと言われて止まらなくなった。カラー画像対応に戻しても同様に C シミュレーションが動かなくなった。まだ修復できていないので、medianblur の Mat 画像版というか、xfOpenCV の medianblur サンプルそのままをやってみよう。

xfOpenCV の medianblur サンプルそのままなので、ソースコードはそのまま使用しているが、xf_config_param.h は RGB を 1 に、GRAY を 0 に define している。

#define RGB 1
#define GRAY 0


medianblur の Vivado HLS 2019.2 medianblur2 プロジェクトを示す。
xfOpenCV_78_200309.png

Vivado HLS 2019.2 の Project メニューから Project Settings... を選択すると、Project Settings (medianblur2) ダイアログが開く。
Project Settings (medianblur2) ダイアログで、Simulation をクリックして、xf_median_blur_tb.cpp の CFLAGS に

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

を設定する。
Input Arguments に

im0.jpg

を設定した。
xfOpenCV_79_200309.png

同様に、Project Settings (medianblur2) ダイアログで、Synthesis をクリックして、

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

を設定する。
xfOpenCV_80_200309.png

C シミュレーションを行った。
xfOpenCV_81_200309.png

成功だ。

medianblur2/solution1/csim/build ディレクトリを示す。
xfOpenCV_82_200309.png

元画像の im0.jpg を示す。
im0.jpg はノイズを加えてある800 x 450 ピクセルのカラー画像となっている。これは、xfopencv/examples/medianblur/data/im0.jpg をPinta ツールのサイズ変換で 800 x 450 ピクセルに縮小して、ノイズを加えた画像である。
xfOpenCV_83_200309.jpg

メジアンフィルタをハードウェアでかけた hls_out.jpg を示す。ノイズがかなり除去されている。
xfOpenCV_84_200309.jpg

OpenCV でメジアンフィルタをかけた ref_img.jpg を示す。こちらもノイズがかなり除去されている。
xfOpenCV_85_200309.jpg
  1. 2020年03月09日 07:00 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 の HLS Video Library を使用して resize() を実装する4

Vivado HLS 2019.2 の HLS Video Library を使用して resize() を実装する3”の続き。

前回は、HLS Video Library の resize を使用して、800 x 600 ピクセルの画像を 60 x 45 ピクセル、100 x 75 ピクセル、200 x 150 ピクセルに縮小できるかどうか?を C シミュレーションですべてできることを確認した。今回は、60 x 45 ピクセル、200 x 150 ピクセルに縮小した時の C コードの合成、 C/RTL 協調シミュレーション、 Export RTL を行った。

800 x 600 ピクセルの画像を 60 x 45 ピクセルに縮小した場合
C コードの合成を行った。
HLS_Video_Library_32_200306.png

Latency は 503450 クロックだった。これは、 503450 クロック / 480000 ピクセル数 ≒ 1.05 クロック / ピクセルだ。
リソース使用量もそこそこだ。

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

Latency は 498437 クロックで、合成レポートよりも小さくなっている。

C/RTL 協調シミュレーションの全体波形を示す。
HLS_Video_Library_34_200307.png

outs_TVALID が櫛形になっているのが分かる。

もう少し拡大してみた。
HLS_Video_Library_35_200307.png

outs_TVALID の櫛形の部分が細かいデータ転送が集まっていることが分かる。この塊が画像の 1 行に相当する。

outs_TVALID のデータ転送部分を拡大してみた。
HLS_Video_Library_36_200307.png

やはり、outs_TVALID が櫛形になっているのが分かる。これは、60 / 800 ピクセルで 1 / 13.3333 であるはずだ。

Export RTL の結果を示す。
HLS_Video_Library_37_200307.png

CP achieved post-implementation が 4.085 ns で問題ない。

800 x 600 ピクセルの画像を 200 x 150 ピクセルに縮小した場合
C コードの合成を行った。左が200 x 150 ピクセルに縮小した場合のレポートで、右が 60 x 45 ピクセルに縮小した場合のレポートだ。
HLS_Video_Library_38_200307.pngHLS_Video_Library_32_200306.png

200 x 150 ピクセルに縮小した場合の方が FF と LUT の使用量が僅かに増えている。
Latency は同じだった。

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

Latency は 502637 クロックで、 60 x 45 ピクセルのときよりも多い。

C/RTL 協調シミュレーションの波形を示す。
HLS_Video_Library_40_200307.png

1 / 13.33333 から 1 / 4 の縮小率になったので、 outs_TVALID の櫛形の間隔が狭い。

拡大してみよう。
HLS_Video_Library_41_200307.png

やはり、outs_TVALID の櫛形の部分が細かいデータ転送が集まっていることが分かる。

outs_TVALID のデータ転送部分を拡大してみた。
HLS_Video_Library_42_200307.png

データ転送は 4 クロックに 1 回であることが分かる。

Export RTL を行った。
HLS_Video_Library_43_200307.png

Export RTL の結果は、 60 x 45 ピクセルに縮小した場合と全く同じだ。。。興味深い。

800 x 600 ピクセルの画像を 200 x 150 ピクセルに縮小した場合で、C コードの合成結果を HLS Video Library と xfOpenCV とで比較してみよう。左が HLS Video Library で、右が xfOpenCV での結果だ。
HLS_Video_Library_38_200307.pngxfOpenCV_73_200302.png

Latency は HLS Video Library が 503450 クロックで、 xfOpenCV が 487696 クロックだった。
リソース使用量の差を表にする。
HLS_Video_Library_44_200307.png

xfOpenCV の方が BRAM_18K を除くと HLS Video Library よりもリソース使用量は少ない。

xfOpenCV と HLS Video Library は適材適所で良いかもしれない。
  1. 2020年03月07日 05:14 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 の HLS Video Library を使用して resize() を実装する3

Vivado HLS 2019.2 の HLS Video Library を使用して resize() を実装する2”の続き。

前回は、カラー画像の resize をカラー画像から白黒画像への resize に変更した。今回は、いろいろな縮小率で画像が縮小できるか?を C シミュレーションで検証する。

800 x 600 ピクセルの画像を 60 x 45 ピクセルの画像に変換する設定を行った時の C シミュレーションの結果を示す。
HLS_Video_Library_18_200306.png

resize_gray/solution1/csim/build ディレクトリの内容を示す。
問題なく画像が縮小できているようだ。
HLS_Video_Library_19_200306.png

test_straight0.bmp を示す。これが、HLS Video Library で縮小した画像だ。
HLS_Video_Library_20_200306.png

test_straight0_cv.bmp を示す。こっちは OpenCV で縮小した画像だ。
HLS_Video_Library_21_200306.png

同じに見える。

次に、800 x 600 ピクセルの画像を 100 x 75 ピクセルの画像に変換する設定を行った場合の C シミュレーションを行った。
HLS_Video_Library_22_200306.png

C シミュレーションは問題なく終了した。
resize_gray/solution1/csim/build ディレクトリの内容を示す。
問題なく画像が縮小できているようだ。
HLS_Video_Library_23_200306.png

test_straight0.bmp を示す。これが、HLS Video Library で縮小した画像だ。
HLS_Video_Library_24_200306.png

800 x 600 ピクセルの画像を 200 x 150 ピクセルの画像に変換する設定を行った場合の C シミュレーションを行った。
HLS_Video_Library_25_200306.png

C シミュレーションは問題なく終了した。
resize_gray/solution1/csim/build ディレクトリの内容を示す。
問題なく画像が縮小できているようだ。
HLS_Video_Library_26_200306.png

test_straight0.bmp を示す。これが、HLS Video Library で縮小した画像だ。
HLS_Video_Library_27_200306.png

最後に、800 x 600 ピクセルの画像を 40 x 30 ピクセルの画像に変換する設定を行った場合の C シミュレーションを行った。
HLS_Video_Library_28_200306.png

C シミュレーションは問題なく終了した。
resize_gray/solution1/csim/build ディレクトリの内容を示す。
問題なく画像が縮小できているようだ。流石に小さい。
HLS_Video_Library_29_200306.png

test_straight0.bmp を示す。これが、HLS Video Library で縮小した画像だ。
HLS_Video_Library_30_200306.png

あまりにも小さいので、拡大した。
HLS_Video_Library_31_200306.png

基本的な要素は保たれているようだ。白線も見える。

このように、HLS Video Library の resize は xfOpenCV の resize よりも画像を縮小する範囲が広いが、bilinear interpolation のみとなっている。
800 x 600 ピクセルの画像を 60 x 45 ピクセルの画像に変換するという私の要件では、HLS Video Library の resize が一択となる。
  1. 2020年03月06日 05:20 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 の HLS Video Library を使用して resize() を実装する2

Vivado HLS 2019.2 の HLS Video Library を使用して resize() を実装する1”の続きと言うか修正版。

前回、カラーの画像をカラーで縮小する HLS Video Library の resize のソースコードを貼ったが、”Vivado HLS 2019.2 で xfOpenCV を使用する6(resize 1)”でも、カラーの画像を白黒画像に縮小する resize だったので、今回は、同様に、カラーの画像を白黒画像に縮小する resize のソースコードを貼る。
以前書いたブログの”Vivado HLS で画像のサイズを縮小して白黒変換(resize_gray)”のソースコードそのものなのだが、いろいろな解像度でうまく行くか?を確かめるために、多少変更した。

resize_gray.h を示す。

// resize.h
// 2020/03/04 by marsee

#ifndef __RESIZE_GRAY_H__
#define __RESIZE_GRAY_H__

#include "ap_axi_sdata.h"
#include "hls_video.h"

#define ORG_HEIGHT   600
#define ORG_WIDTH    800

typedef hls::stream<ap_axiu<32,1,1,1> > AXI_STREAM;
typedef hls::Mat<ORG_HEIGHT, ORG_WIDTH, HLS_8UC3> RGB_IMAGE;
typedef hls::Mat<ORG_HEIGHT, ORG_WIDTH, HLS_8UC1> GRAY_IMAGE;

#define RESIZE_HEIGHT 45
#define RESIZE_WIDTH 60

#endif


resize_gray.cpp を示す。

// resize_gray.cpp
// 2017/08/31 by marsee
// 2020/03/04 : Changed source code.
//

#include "resize_gray.h"

int resize_gray(AXI_STREAM& ins, AXI_STREAM& outs){
#pragma HLS INTERFACE axis register both port=outs
#pragma HLS INTERFACE axis register both port=ins
#pragma HLS DATAFLOW
#pragma HLS INTERFACE s_axilite port=return

    RGB_IMAGE org_img(ORG_HEIGHT, ORG_WIDTH);
    GRAY_IMAGE org_img_g(ORG_HEIGHT, ORG_WIDTH);
    GRAY_IMAGE resize_img_g(RESIZE_HEIGHT, RESIZE_WIDTH);
    RGB_IMAGE resize_img(RESIZE_HEIGHT, RESIZE_WIDTH);

    hls::AXIvideo2Mat(ins, org_img);
    hls::CvtColor<HLS_BGR2GRAY>(org_img, org_img_g);
    hls::Resize(org_img_g, resize_img_g);
    hls::CvtColor<HLS_GRAY2BGR>(resize_img_g, resize_img);
    hls::Mat2AXIvideo(resize_img, outs);

    return(0);
}


resize_gray_tb.cpp を示す。

// resize_gray_tb.cpp
// 2017/08/31 by marsee
// 2020/03/04 : Changed source code.
//

#include <iostream>
#include "hls_opencv.h"
#include "resize_gray.h"

using namespace cv;

#define INPUT_IMAGE        "straight0.bmp"
#define OUTPUT_IMAGE    "test_straight0.bmp"
#define OUTPUT_IMAGE_CV    "test_straight0_cv.bmp"

void resize_gray(AXI_STREAM& ins, AXI_STREAM& outs);
void opencv_resize_gray(Mat& src, Mat& dst);

int main (int argc, char** argv) {
    // OpenCV で 画像を読み込む
    Mat src = imread(INPUT_IMAGE);
    AXI_STREAM src_axi, dst_axi;

    // Mat フォーマットから AXI4 Stream へ変換
    cvMat2AXIvideo(src, src_axi);

    // resize_gray() 関数をコール
    resize_gray(src_axi, dst_axi);

    // AXI4 Stream から Mat フォーマットへ変換
    // dst は宣言時にサイズとカラー・フォーマットを定義する必要がある
    Mat dst(RESIZE_HEIGHT, RESIZE_WIDTH, CV_8UC3);
    AXIvideo2cvMat(dst_axi, dst);

    // Mat フォーマットからファイルに書き込み
    imwrite(OUTPUT_IMAGE, dst);

    // opencv_resize_gray() をコール
    Mat dst_cv(RESIZE_HEIGHT, RESIZE_WIDTH, CV_8UC3);
    opencv_resize_gray(src, dst_cv);
    imwrite(OUTPUT_IMAGE_CV, dst_cv);

    // dst と dst_cv が同じ画像かどうか?比較する
    for (int y=0; y<RESIZE_HEIGHT; y++){
        Vec3b* dst_ptr = dst.ptr<Vec3b>(y);
        Vec3b* dst_cv_ptr = dst_cv.ptr<Vec3b>(y);
        for (int x=0; x<RESIZE_WIDTH; x++){
            Vec3b dst_bgr = dst_ptr[x];
            Vec3b dst_cv_bgr = dst_cv_ptr[x];

            // bgr のどれかが間違っていたらエラー
            if (std::pow(dst_bgr[0]-dst_cv_bgr[0], 2.0) > 1 || std::pow(dst_bgr[1]-dst_cv_bgr[1], 2.0) > 1
                    || std::pow(dst_bgr[2]-dst_cv_bgr[2], 2.0) > 1){
                printf("x = %d, y = %d,  Error dst=%d,%d,%d dst_cv=%d,%d,%d\n", x, y,
                        dst_bgr[0], dst_bgr[1], dst_bgr[0], dst_cv_bgr[0], dst_cv_bgr[1], dst_cv_bgr[2]);
                //return 1;
            }
        }
    }
    printf("Test with 0 errors.\n");

    return 0;
}

void opencv_resize_gray(Mat& src, Mat& dst){
    Mat gray(src.rows, src.cols, CV_8UC1);
    Mat img0g(RESIZE_HEIGHT, RESIZE_WIDTH, CV_8UC1);

    cvtColor(src, gray, CV_BGR2GRAY);
    resize(gray, img0g, img0g.size(), 0, 0, INTER_LINEAR);
    cvtColor(img0g, dst, CV_GRAY2BGR);
}


Vivado HLS 2019.2 の resize_gray プロジェクトを示す。
HLS_Video_Library_17_200305.png
  1. 2020年03月05日 04:59 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS で C シミュレーションが通らずに C コードの合成で ERROR: [HLS 200-101] 'add_files': が出る場合の対処

新しく VIvado HLS 2019.2 のプロジェクトを作って C シミュレーションや C コードの合成を行ったのだが、ソースコードは間違っていないはずなのにどうしてもエラーになってしまう。環境を捨ててしまって、実際のエラーを貼れないのが残念だ。

その時の C コードの合成のエラーは、”ERROR: [HLS 200-101] 'add_files': Too many positional arguments specified.”というエラーだった。
このエラーをググってみると、”AR# 71759 HLS ベースのビデオ IP を使用すると、「ERROR: [HLS 200-101] 'add_files': Too many positional arguments specified.」”というエラー メッセージが表示される”がヒットした。
アンサー・レコードによると、

このエラーは、プロジェクト パスに予期しない文字 (空白、英語以外の標準文字、バックスラッシュなど) があると発生することがあります。
プロジェクト パス名を変更して予期しない文字を使用しないようにすると、この問題を解決できます。

とのことだった。
ディレクトリパスには日本語使ってない。
後は、ファイル名しか無いが、日本語が入っていない。全く英語とアンダースコア以外使ってないように見える。
resize_gray.cpp, resize_grey.h, resize_gray_tb.cpp の 3 つのファイルだ。なお、これは正常のファイルだが、ダメなファイルも同様に見えていた。
HLS_Video_Library_16_200305.png

ファイルを消して、もう一度新規作成で作り直したところ、 C シミュレーションや C コードの合成が成功した。何か不正な文字コードが入ってしまったようだ。
  1. 2020年03月05日 04:39 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 の HLS Video Library を使用して resize() を実装する1

Vivado HLS 2019.2 で xfOpenCV を使用する8(resize 3)”で xfOpenCV を使用して、Vivado HLS 2019.2 で画像のサイズ変換を実装した。今回は、HLS Video Library を使用して、Vivado HLS 2019.2 で画像のサイズ変換を実装する。

Vivado HLS で画像のサイズを縮小して白黒変換(resize_gray)”を参考にするが、白黒変換は無しで、画像サイズを変換してカラーのままとする。

Vivado HLS 2019.2 で resize プロジェクトを生成した。
HLS_Video_Library_15_200304.png

resize.h を貼っておく。

// resize.h
// 2020/03/04 by marsee

#ifndef __resize_gray_H__
#define __resize_gray_H__

#include "ap_axi_sdata.h"
#include "hls_video.h"

#define ORG_HEIGHT   600
#define ORG_WIDTH    800

typedef hls::stream<ap_axiu<32,1,1,1> > AXI_STREAM;
typedef hls::Mat<ORG_HEIGHT, ORG_WIDTH, HLS_8UC3> RGB_IMAGE;
typedef hls::Mat<ORG_HEIGHT, ORG_WIDTH, HLS_8UC1> GRAY_IMAGE;

#define RESIZE_HEIGHT 45
#define RESIZE_WIDTH 60

#endif


resize.cpp を貼っておく。

// resize.cpp
// 2020/03/04 by marsee

#include "resize.h"

int resize(AXI_STREAM& ins, AXI_STREAM& outs){
#pragma HLS INTERFACE axis register both port=outs
#pragma HLS INTERFACE axis register both port=ins
#pragma HLS DATAFLOW
#pragma HLS INTERFACE s_axilite port=return

    RGB_IMAGE org_img(ORG_HEIGHT, ORG_WIDTH);
    RGB_IMAGE resize_img(RESIZE_HEIGHT, RESIZE_WIDTH);

    hls::AXIvideo2Mat(ins, org_img);

    hls::Resize(org_img, resize_img);

    hls::Mat2AXIvideo(resize_img, outs);

    return(0);
}


resize_tb.cpp を貼っておく。

// resize_tb.cpp
// 2020/03/04 by marsee

#include <iostream>
#include "hls_opencv.h"
#include "resize.h"

using namespace cv;

#define INPUT_IMAGE        "straight0.bmp"
#define OUTPUT_IMAGE    "test_straight0.bmp"
#define OUTPUT_IMAGE_CV    "test_straight0_cv.bmp"

void resize(AXI_STREAM& ins, AXI_STREAM& outs);
void opencv_resize(Mat& src, Mat& dst);

int main (int argc, char** argv) {
    // OpenCV で 画像を読み込む
    Mat src = imread(INPUT_IMAGE);
    AXI_STREAM src_axi, dst_axi;

    // Mat フォーマットから AXI4 Stream へ変換
    cvMat2AXIvideo(src, src_axi);

    // resize() 関数をコール
    resize(src_axi, dst_axi);

    // AXI4 Stream から Mat フォーマットへ変換
    // dst は宣言時にサイズとカラー・フォーマットを定義する必要がある
    Mat dst(RESIZE_HEIGHT, RESIZE_WIDTH, CV_8UC3);
    AXIvideo2cvMat(dst_axi, dst);

    // Mat フォーマットからファイルに書き込み
    imwrite(OUTPUT_IMAGE, dst);

    // opencv_resize_gray() をコール
    Mat dst_cv(RESIZE_HEIGHT, RESIZE_WIDTH, CV_8UC3);
    opencv_resize(src, dst_cv);
    imwrite(OUTPUT_IMAGE_CV, dst_cv);

    // dst と dst_cv が同じ画像かどうか?比較する
    for (int y=0; y<RESIZE_HEIGHT; y++){
        Vec3b* dst_ptr = dst.ptr<Vec3b>(y);
        Vec3b* dst_cv_ptr = dst_cv.ptr<Vec3b>(y);
        for (int x=0; x<RESIZE_WIDTH; x++){
            Vec3b dst_bgr = dst_ptr[x];
            Vec3b dst_cv_bgr = dst_cv_ptr[x];

            // bgr のどれかが間違っていたらエラー
            if (std::pow(dst_bgr[0]-dst_cv_bgr[0], 2.0) > 1 || std::pow(dst_bgr[1]-dst_cv_bgr[1], 2.0) > 1
                    || std::pow(dst_bgr[2]-dst_cv_bgr[2], 2.0) > 1){
                printf("x = %d, y = %d,  Error dst=%d,%d,%d dst_cv=%d,%d,%d\n", x, y,
                        dst_bgr[0], dst_bgr[1], dst_bgr[0], dst_cv_bgr[0], dst_cv_bgr[1], dst_cv_bgr[2]);
                //return 1;
            }
        }
    }
    printf("Test with 0 errors.\n");

    return 0;
}

void opencv_resize(Mat& src, Mat& dst){
    Mat img0(RESIZE_HEIGHT, RESIZE_WIDTH, CV_8UC3);

    resize(src, img0, img0.size(), 0, 0, INTER_LINEAR);

    img0.copyTo(dst);
}


  1. 2020年03月04日 04:45 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2019.2 で xfOpenCV を使用する8(resize 3)

Vivado HLS 2019.2 で xfOpenCV を使用する7(resize 2)”の続き。

前回は、resize の C シミュレーションを行った。 800 x 600 ピクセルの画像を 60 x 45 ピクセルに変換した時は、本当に画像が薄くなってしまった。80 x 60 ピクセルの画像に変換した時も 60 x 45 ピクセルよりは濃くなったが、やはり薄かった。ユーザーズガイドを見たところ、縮小は 1/4 までだったので、200 x 150 ピクセルの画像に変更したところ、正常に縮小することができた。
今回は、200 x 150 ピクセルに縮小する場合の C コードの合成、C/RTL 協調シミュレーション、Export RTL を行う。

C コードの合成を行った。
xfOpenCV_73_200302.png

Latcncy の max は 487696 クロックだった。総ピクセル数は 480000 ピクセルなので、487696 / 480000 ≒ 1.02 クロック/ピクセルだった。性能は十分だ。
リソース使用量も BRAM_18K が 3 個、 LUT が 5 % 程度で、それほど消費していない。これは制限の範囲だったら使えそうだ。

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

Latency は 485494 クロックだった。良さそうだ。

C/RTL 協調シミュレーションの波形を示す。全体波形から。
xfOpenCV_75_200302.png

p_dst_TAVLID は画像を縮小しているので、櫛形になっている。

拡大波形を示す。
xfOpenCV_76_200302.png

p_src_TREADY がほとんど 1 なので、スループットは取れているようだ。

Export RTL を行った。
xfOpenCV_77_200302.png

リソース使用量もそこそこだし、CP achieved post-implementation が 4.332 ns で良さそうだ。
  1. 2020年03月03日 05:04 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

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

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

前回は、resize をやってみようということで、 xfOpenCV の examples/resize を使用しているが、sobel_filter と同様に、AXI4-Stream 入出力に変更するために xf_resize.cpp を追加した。そのソースコードを貼って、Vivado 2019.2 のプロジェクトを生成した。
今回は、resize の C シミュレーションを行う。

C シミュレーションを行った。
xfOpenCV_58_200301.png

resize/solution1/csim/build ディレクトリを示す。
xfOpenCV_59_200301.png

hls_out.png がほとんど真っ暗だった。

hls_out.png を表示した。
xfOpenCV_60_200301.png

何とか薄っすらと見える。
xfOpenCV_60_200301.png

OpenCV の結果の resize_ocv.png を見ると、正常に縮小されている。
xfOpenCV_61_200301.png

xf_config_param.h の INTERPOLATION を 1 に変更してみよう。1 は、Bilinear Interpolation だ。今までの INTERPOLATION は 2 で、 AREA Interpolation だった。
xfOpenCV_62_200301.png

結果の hls_out.png が完全におかしい。
xfOpenCV_63_200301.png

hls_out.png を表示した。
xfOpenCV_64_200301.png

xf_config_param.h の INTERPOLATION を 0 に変更してみよう。 0 は Nearest Neighbor Interpolation だ。
xfOpenCV_65_200301.png

1 と同様に、hls_out.png が完全におかしい。
xfOpenCV_66_200301.png

resize 後のサイズを上げてみる。
60 x 45 ピクセルから 80 x 60 ピクセルに変更した。 1/10 倍だ。 INTERPOLATION は 2 に戻した。
xfOpenCV_67_200301.png

resize/solution1/csim/build ディレクトリを示す。
xfOpenCV_68_200301.png

hls_out.png の画像が濃くなってきた。
xfOpenCV_69_200301.png

ザイリンクス OpenCV ユーザ ー ガイド UG1233 (v2019.1) 2019 年 6 月 5 日”の 230 ページの”解像度変換/リサイズ (resize)”を見ると、画像の縮小方向は 1/4 以上がサポート範囲だそうだ。 引用する。

解像度変換/リサイズ (resize)
解像度変換は、元の画像のサイズをターゲットの画像サイズに変換するのに使用される方法です。リサイズ関数には、最近傍補間、バイリニア補間、エリア補間など、さまざまな補間方法を使用できます。補間タイプは、API にテンプレート パラメーターとして渡すことができます。指定可能な補間タイプは次のとおりです。
• XF_INTERPOLATION_NN: 最近傍補間
• XF_INTERPOLATION_BILINEAR: バイリニア補間
• XF_INTERPOLATION_AREA: エリア補間
注記: ダウンスケールには 0.25 以上、アップスケールには 8 以下のスケール係数がサポートされます。


ということで、 1/4 でやってみよう。つまり、200 x 150 ピクセルだ。
xfOpenCV_70_200301.png

resize/solution1/csim/build ディレクトリを示す。縮小されているようだ。
xfOpenCV_71_200301.png

hls_out.png を表示した。
xfOpenCV_72_200301.png

200 x 150 ピクセルでは、 1 の Bilinear Interpolation でも、 0 の Nearest Neighbor Interpolation でも、うまく縮小できている。
しかし、HLS Video Library でできたていたサイズがうまくできないので、800 x 600 ピクセルの画像を 60 x 45 ピクセルの画像に変換するという用途には使えない。
ただ、 INTERPOLATION が増えていて、Bilinear Interpolation 以外も OK になったのが良かった。

これからは、HLS Video Library との比較のために、同じ縮小方式の Bilinear Interpolation でやっていこう。
  1. 2020年03月02日 05:26 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

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

Vivado HLS 2019.2 で xfOpenCV を使用する5(sobel filter 3)”の続き。

前回は、sobel_filter をやってみたが、今回は、resize をやってみよう。 xfOpenCV の examples/resize を使用しているが、sobel_filter と同様に、AXI4-Stream 入出力に変更するために xf_resize.cpp を追加してある。
xfOpenCV_52_200301.png

xf_resize.cpp を示す。

// xf_resize.cpp
// 2020/02/20 by marsee

// xfopencv/HLS_Use_Model/Standalone_HLS_AXI_Example/xf_ip_accel_app.cpp のコードを引用している
// https://github.com/Xilinx/xfopencv/blob/master/HLS_Use_Model/Standalone_HLS_AXI_Example/xf_ip_accel_app.cpp

#include "xf_resize_config.h"
#include "common/xf_infra.h"

void resize_accel(xf::Mat<TYPE, HEIGHT, WIDTH, NPC1> &_src, xf::Mat<TYPE, NEWHEIGHT, NEWWIDTH, NPC1> &_dst);

void xf_resize(hls::stream< ap_axiu<8,1,1,1> >& _src,hls::stream< ap_axiu<8,1,1,1> >& _dst){
#pragma HLS INTERFACE axis register both  port=_src
#pragma HLS INTERFACE axis register both  port=_dst

     xf::Mat<TYPE, HEIGHT, WIDTH, NPC1> img_in(HEIGHT,WIDTH);
     xf::Mat<TYPE, NEWHEIGHT, NEWWIDTH, NPC1> img_out(NEWHEIGHT,NEWWIDTH);

#pragma HLS stream variable=img_in.data dim=1 depth=16
#pragma HLS stream variable=img_out.data dim=1 depth=16
#pragma HLS dataflow

    xf::AXIvideo2xfMat(_src, img_in);

    resize_accel(img_in, img_out);

    xf::xfMat2AXIvideo(img_out, _dst);
}


どのサイズに resize するか?だが、”Vivado HLS で画像のサイズを縮小して白黒変換(resize_gray)”でやったように 800 x 600 ピクセルの画像を 60 x 45 ピクセルに変更してみよう。
画像サイズを指定するのは、xf_config_param.h なので、編集する。
xfOpenCV_53_200301.png

Vivado HLS 2019.2 で resize プロジェクトを作成した。
Ultra96 用の xczu3eg-sbva484-1-e をPart に設定した。Clock Period は 5 ns とした。
xfOpenCV_54_200301.png

xfOpenCV を実行する際の設定を行った。
Project メニューから Project Settings... を選択して、Project Settings (resize) を表示させた。
Simulation をクリックした。
xf_resize_tb.cpp の CFLAGS に -D__SDSVHLS__ -I../../xfopencv/include --std=c++0x を入力した。
Input Arguments に straight0.bmp を入力した。
xfOpenCV_55_200301.png

Synthesis をクリックした。
xf_resize.cpp と xf_resize_accel.cpp の CFLAGS に -D__SDSVHLS__ -I../../xfopencv/include --std=c++0x を入力した。
Top Function に xf_resize を入力した。
xfOpenCV_56_200301.png

Solution メニューから Solution Settings... を選択した。
Solution Settings (solution1) ダイアログが表示された。
Cosimulation をクリックした。
Input Arguments に straight0.bmp を入力した。
xfOpenCV_57_200301.png
  1. 2020年03月01日 05:48 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0