FC2カウンター FPGAの部屋 Vitis Vision Library で AXI4-Stream 入出力の medianblur を実装する1
fc2ブログ

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

FPGAの部屋

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

Vitis Vision Library で AXI4-Stream 入出力の medianblur を実装する1

Vitis HLS 2020.2 で Vitis Vision Library を使用する4(medianblur 編)”で Vitis Vision Library で medianblur をたぶん実装できたのだが、(たぶんというのはノイジーな画像を入力していないからだ)配列からDMA してフィルタをかけた、つまり、DMA Read ー フィルタ ー DMA Write ということだ。これを AXI4-Stream ー フィルタ ー AXI4-Stream の方式でフィルタしたい。こうした方がメモリ帯域を消費しなくてすむ。

xfOpenCV 版の AXI4-Stream 入出力 medianblur を持ってきて変更する。

xfOpenCV からの変更点としては、 Vitis_Libraries/vision/L1/include/common ディレクトリにあるファイルが .h でなく .hpp になっているということだ。
Vitis_Vision_Library4Vitis_HLS_44_210101.png

common ディレクトリからのインクルード文を .h から .hpp にすべて変更した。
Vitis_Vision_Library4Vitis_HLS_45_210101.png

C シミュレーションを行ったところ、エラーになってしまった。
Vitis_Vision_Library4Vitis_HLS_46_210101.png

INFO: [SIM 2] *************** CSIM start ***************
INFO: [SIM 4] CSIM will launch GCC as the compiler.
   Compiling ../../../xf_median_blur_tb.cpp in debug mode
csim.mk:73: recipe for target 'obj/xf_median_blur_tb.o' failed
In file included from ../../../../../../../Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_structs.hpp:27:0,
                 from ../../../../../../../Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_common.hpp:20,
                 from ../../../../../../../Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_sw_utils.hpp:20,
                 from ../../../xf_headers.h:51,
                 from ../../../xf_median_blur_tb.cpp:9:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2020.2/include/ap_axi_sdata.h:97:40: 警告: variable templates only available with -std=c++14 or -std=gnu++14
 template <typename T> constexpr size_t bitwidth = sizeof(T) * CHAR_BIT;
                                        ^~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2020.2/include/ap_axi_sdata.h:99:38: 警告: variable templates only available with -std=c++14 or -std=gnu++14
 template <size_t W> constexpr size_t bitwidth<ap_int<W>> = W;
                                      ^~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2020.2/include/ap_axi_sdata.h:100:38: 警告: variable templates only available with -std=c++14 or -std=gnu++14
 template <size_t W> constexpr size_t bitwidth<ap_uint<W>> = W;
                                      ^~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2020.2/include/ap_axi_sdata.h:102:18: 警告: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr size_t bitwidth<ap_fixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2020.2/include/ap_axi_sdata.h:104:18: 警告: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr size_t bitwidth<ap_ufixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2020.2/include/ap_axi_sdata.h:107:18: 警告: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr size_t bytewidth = (bitwidth<T> + CHAR_BIT - 1) / CHAR_BIT;
                  ^~~~~~~~~
In file included from ../../../../../../../Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_axi.hpp:23:0,
                 from ../../../xf_median_blur.h:15,
                 from ../../../xf_median_blur_tb.cpp:10:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2020.2/include/utils/x_hls_utils.h:243:40: 警告: ‘hls_preserve’ 属性指示が無視されました [-Wattributes]
 __attribute__((hls_preserve)) T reg(T d)
                                        ^
In file included from ../../../xf_median_blur.h:15:0,
                 from ../../../xf_median_blur_tb.cpp:10:
../../../../../../../Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_axi.hpp: In instantiation of ‘void xf::cv::cvMat2AXIvideoxf(cv::Mat&, hls::stream<hls::axis<ap_uint<W>, 1ul, 1ul, 1ul> >&) [with int NPC = 1; int W = 32]’:
../../../xf_median_blur_tb.cpp:62:41:   required from here
../../../../../../../Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_axi.hpp:124:20: エラー: conversion from ‘cv::Mat’ to non-scalar type ‘IplImage {aka _IplImage}’ requested
     IplImage img = cv_mat;
                    ^~~~~~
../../../../../../../Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_axi.hpp: In instantiation of ‘void xf::cv::AXIvideo2cvMatxf(hls::stream<hls::axis<ap_uint<W>, 1ul, 1ul, 1ul> >&, cv::Mat&) [with int NPC = 1; int W = 32]’:
../../../xf_median_blur_tb.cpp:64:42:   required from here
../../../../../../../Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_axi.hpp:221:20: エラー: conversion from ‘cv::Mat’ to non-scalar type ‘IplImage {aka _IplImage}’ requested
     IplImage img = cv_mat;
                    ^~~~~~
make: *** [obj/xf_median_blur_tb.o] Error 1
ERR: [SIM 100] 'csim_design' failed: compilation error(s).
INFO: [SIM 3] *************** CSIM finish ***************


エラー内容は”conversion from ‘cv::Mat’ to non-scalar type ‘IplImage {aka _IplImage}’”ということだ。

エラー内容を検索すると、”Vitis Library for Video-Stream Core, OpenCV Version?”が見つかった。エラー内容は同じだが、解決策は提示されていない。

Vitis Vision cores AXI4 Stream buggy”も検索できた。Vitis Vision Library で AXI4-Stream はバギーなのかも知れない?が、この例では、テストベンチでも xf::cv::Mat をインスタンスして、xf::cv::xfMat2AXIvideo() で AXI4-Stream に変換している。一度、この通りにやってみようと思う。
  1. 2021年01月01日 07:49 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5107-dea262a0
この記事にトラックバックする(FC2ブログユーザー)