FC2カウンター FPGAの部屋 Vitis HLS 2021.2 で Vitis Vision Library を使用する8(AXI4-Stream 入出力の xf_resize 編 1)
fc2ブログ

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

FPGAの部屋

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

Vitis HLS 2021.2 で Vitis Vision Library を使用する8(AXI4-Stream 入出力の xf_resize 編 1)

Vitis HLS 2021.2 で Vitis Vision Library を使用する7(AXI4-Stream 入出力の xf_median_blur 編 3)”の続き。

前回、Vitis HLS 2021.2 で Vitis Vision Library を使用して、メディアン・フィルタ IP を実装することができた。今回は、Vitis HLS 2021.2 で Vitis Vision Library を使用して、resize IP を実装することにしたのだが、C コードの合成をしようとしたら、どうやっても file not found が消えなかった。

Vitis_Libraries/vision/L1/examples/resize/ を参照して、とりあえず合成できるかどうか?を確かめるために、xf_resize_axis.h と xf_resize_axis.cpp のソースコードを作成した。 テストベンチ・ファイルは作ったのだが、完成はしていない。

xf_resize_axis.h を貼っておく。

// xf_resize_axis.h
// 2022/01/30 by marsee
// Vitis_Libraries/vision/L1/examples/resize/を参照している
// https://github.com/Xilinx/Vitis_Libraries/tree/master/vision/L1/examples/resize
// Vitis_Libraries/vision/L1/examples/resize/build/xf_config_params.h を引用

#ifndef _XF_RESIZE_AXIS_
#define _XF_RESIZE_AXIS_

#include "hls_stream.h"
#include "ap_int.h"
#include "common/xf_common.hpp"
#include "ap_axi_sdata.h"
#include "common/xf_infra.hpp"
#include "common/xf_axi_io.hpp"

#include "imgproc/xf_resize.hpp"

#define RGB  1
#define GRAY 0

#define NPxPC XF_NPPC1

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

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

/* Interpolation type*/
#define INTERPOLATION 1
// 0 - Nearest Neighbor Interpolation
// 1 - Bilinear Interpolation
// 2 - AREA Interpolation

/* Input image Dimensions */
#define WIDTH 1920  // Maximum Input image width
#define HEIGHT 1080 // Maximum Input image height

/* Output image Dimensions */
#define NEWWIDTH 1920  // Maximum output image width
#define NEWHEIGHT 1080 // Maximum output image height

#endif


xf_resize_axis.cpp を貼っておく。

// xf_resize_axis.cpp
// 2022/01/30 by marsee
// Vitis_Libraries/vision/L1/examples/resize/を参照している
// https://github.com/Xilinx/Vitis_Libraries/tree/master/vision/L1/examples/resize

#include "xf_resize_axis.h"

void resize_accel_axis(AXI_STREAM& _src, AXI_STREAM& _dst,
        int32_t in_height, int32_t in_width, int32_t out_height, int32_t out_width){
#pragma HLS INTERFACE mode=s_axilite port=out_width
#pragma HLS INTERFACE mode=s_axilite port=out_height
#pragma HLS INTERFACE mode=s_axilite port=in_width
#pragma HLS INTERFACE mode=s_axilite port=in_height
#pragma HLS INTERFACE mode=s_axilite port=return
#pragma HLS INTERFACE mode=axis register_mode=both port=_src register
#pragma HLS INTERFACE mode=axis register_mode=both port=_dst register

    xf::cv::Mat<TYPE, HEIGHT, WIDTH, NPxPC> img_in(in_height, in_width);
    xf::cv::Mat<TYPE, NEWHEIGHT, NEWWIDTH, NPxPC> img_out(out_height, out_width);

#pragma HLS DATAFLOW

    xf::cv::AXIvideo2xfMat(_src, img_in);

    xf::cv::xf_resize_axis <INTERPOLATION, TYPE, HEIGHT, WIDTH,
        NEWHEIGHT, NEWWIDTH, NPxPC, MAXDOWNSCALE> (img_in, img_out);

    xf::cv::xfMat2AXIvideo(img_out, _dst);
}


Vitis HLS 2021.2 で xf_resize_axis プロジェクトを作成した。
Vitis_Vision2_132_220131.png

Vitis HLS 2021.2 の Project メニューから Project Settings... を選択して、設定を行う。
Project Settings (xf_resize_axis) ダイアログが開く。
Project Settings (xf_resize_axis) ダイアログの左のウインドウで Synthesis をクリックしxf_resize_axis.cpp の CFLAGS を設定する。(設定方法は、Edit CFLAGS... ボタンをクリックする)

-I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -std=c++0x

を設定した。
Vitis_Vision2_133_220131.png

Run C Synthesis を実行した。
エラーが出てしまった。

ERROR: [HLS 207-812] 'common/xf_common.hpp' file not found (xf_resize_axis/xf_resize_axis.h:11:10) xf_resize_axis:solution1 Jan 31, 2022, 4:17:00 AM


Vitis_Vision2_134_220131.png

全ログを示す。

Starting C synthesis ...
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/bin/vitis_hls /media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/solution1/csynth.tcl
INFO: Applying HLS Y2K22 patch v1.2 for IP revision
INFO: [HLS 200-10] Running '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/bin/unwrapped/lnx64.o/vitis_hls'
INFO: [HLS 200-10] For user 'masaaki' on host 'masaaki-H110M4-M01' (Linux_x86_64 version 4.15.0-166-generic) on Mon Jan 31 04:16:59 JST 2022
INFO: [HLS 200-10] On os Ubuntu 18.04.6 LTS
INFO: [HLS 200-10] In directory '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2'
WARNING: [HLS 200-40] Environment variable 'C_INCLUDE_PATH' is set to :/usr/local/cuda/include.
Sourcing Tcl script '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/solution1/csynth.tcl'
INFO: [HLS 200-1510] Running: open_project xf_resize_axis 
INFO: [HLS 200-10] Opening project '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis'.
INFO: [HLS 200-1510] Running: set_top resize_accel_axis 
INFO: [HLS 200-1510] Running: add_files xf_resize_axis/xf_resize_axis.cpp -cflags -I../../../../../Xilinx_github/Vitis_Libraries/vision/L1/include -std=c++0x 
INFO: [HLS 200-10] Adding design file 'xf_resize_axis/xf_resize_axis.cpp' to the project
INFO: [HLS 200-1510] Running: add_files -tb xf_resize_axis/xf_resize_axis_tb.cpp -cflags -I../../../Xilinx_github/Vitis_Libraries/vision/L1/include -I../../../../../../usr/local/include -std=c++0x -Wno-unknown-pragmas -csimflags -Wno-unknown-pragmas 
INFO: [HLS 200-10] Adding test bench file 'xf_resize_axis/xf_resize_axis_tb.cpp' to the project
INFO: [HLS 200-1510] Running: open_solution solution1 -flow_target vivado 
INFO: [HLS 200-10] Opening solution '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/solution1'.
INFO: [SYN 201-201] Setting up clock 'default' with a period of 10ns.
INFO: [HLS 200-1611] Setting target device to 'xc7z020-clg400-1'
INFO: [HLS 200-1505] Using flow_target 'vivado'
Resolution: For help on HLS 200-1505 see www.xilinx.com/cgi-bin/docs/rdoc?v=2021.2;t=hls+guidance;d=200-1505.html
INFO: [HLS 200-1510] Running: set_part xc7z020-clg400-1 
INFO: [HLS 200-1510] Running: create_clock -period 10 -name default 
INFO: [HLS 200-1510] Running: csynth_design 
INFO: [HLS 200-111] Finished File checks and directory preparation: CPU user time: 0.02 seconds. CPU system time: 0 seconds. Elapsed time: 0.01 seconds; current allocated memory: 1.125 GB.
INFO: [HLS 200-10] Analyzing design file 'xf_resize_axis/xf_resize_axis.cpp' ... 
ERROR: [HLS 207-812] 'common/xf_common.hpp' file not found (xf_resize_axis/xf_resize_axis.h:11:10)
INFO: [HLS 200-111] Finished Command csynth_design CPU user time: 0.25 seconds. CPU system time: 0.06 seconds. Elapsed time: 0.16 seconds; current allocated memory: 0.000 MB.
command 'ap_source' returned error code
    while executing
"source /media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/solution1/csynth.tcl"
    invoked from within
"hls::main /media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/solution1/csynth.tcl"
    ("uplevel" body line 1)
    invoked from within
"uplevel 1 hls::main {*}$newargs"
    (procedure "hls_proc" line 16)
    invoked from within
"hls_proc [info nameofexecutable] $argv"
INFO: [HLS 200-112] Total CPU user time: 2.47 seconds. Total CPU system time: 0.47 seconds. Total elapsed time: 1.86 seconds; peak allocated memory: 1.125 GB.
Finished C synthesis.


何で 'common/xf_common.hpp' file not found となるのだろう?インクルード・パスは指定してあるのだが。。。
成功した xf_median_blur との違いは何だろう?
xf_median_blur のインクルード・パスは設定した絶対パスで書いてある。xf_resize_axis の方は絶対パスを入力しても相対パスになってしまう。
Vitis_Vision2_135_220131.png

どうしてだろう?

(追記)
そういえば、自分でこの問題をトラブルシュートして、ブログ書いてあったのを忘れていた。orz
Vitis HLS 2021.2 で Vitis Vision Library を使用する2(dilation 編 2)
解決方法は Vitis HLS 2020.2 でプロジェクトを作成してから、そのプロジェクトを Vitis HLS 2021.2 で読み込んで合成する、だった。。。
もう一度、やり直してみよう。
  1. 2022年01月31日 04:45 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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