ということが分かった。24 ビット 〜 16 ビットが赤
15 ビット 〜 8 ビットが緑
7 ビット 〜 0 ビットが青
を入力した。これは、Vitis HLS 2020.2 は OpenCV へのリンクが無いので、自分でインストールした OpenCV 3.4.9 の include へのパスを追加した。-D__SDSVHLS__ -I/home/masaaki/xfopencv/include --std=c++0x -I/usr/local/include
を入力した。-L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc
を設定した。im0.jpg
を設定した。-D__SDSVHLS__ -I/home/masaaki/xfopencv/include --std=c++0x
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 ../../../../../../../../../home/masaaki/xfopencv/include/common/xf_axi_io.h:33:0,
from ../../../../../../../../../home/masaaki/xfopencv/include/common/xf_infra.h:43,
from ../../../xf_median_blur_tb.cpp:11:
/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_tb.cpp:12:0:
../../../../../../../../../home/masaaki/xfopencv/include/common/xf_axi.h: In instantiation of ‘void cvMat2AXIvideoxf(cv::Mat&, hls::stream<ap_axiu<W, 1, 1, 1> >&) [with int NPC = 1; int W = 32]’:
../../../xf_median_blur_tb.cpp:63:38: required from here
../../../../../../../../../home/masaaki/xfopencv/include/common/xf_axi.h:144:18: エラー: conversion from ‘cv::Mat’ to non-scalar type ‘IplImage {aka _IplImage}’ requested
IplImage img = cv_mat;
^~~~~~
../../../../../../../../../home/masaaki/xfopencv/include/common/xf_axi.h: In instantiation of ‘void AXIvideo2cvMatxf(hls::stream<ap_axiu<W, 1, 1, 1> >&, cv::Mat&) [with int NPC = 1; int W = 32]’:
../../../xf_median_blur_tb.cpp:65:39: required from here
../../../../../../../../../home/masaaki/xfopencv/include/common/xf_axi.h:259:17: エラー: 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 ***************
// 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/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_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;
}
を設定した。-D__SDSVHLS__ -I/home/masaaki/xfopencv/include --std=c++0x
を設定した。im0.jpg
を設定した。-D__SDSVHLS__ -I/home/masaaki/xfopencv/include --std=c++0x
を設定した。im0.jpg
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
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | - |