C++ vivado hls的可合成版本存在问题

C++ vivado hls的可合成版本存在问题,c++,opencv,vivado,vivado-hls,C++,Opencv,Vivado,Vivado Hls,我正在vivado hls中实现一个简单的图像转换过滤器。我已附上以下文件: //headerfile- ct_h.hpp #include <assert.h> #include <stdint.h> #include <hls_stream.h> #include <windows.h> #include <windef.h> #define MAX_IMG_ROWS 1080 #define MAX_IMG_COLS 1920

我正在vivado hls中实现一个简单的图像转换过滤器。我已附上以下文件:

//headerfile- ct_h.hpp
#include <assert.h>
#include <stdint.h>
#include <hls_stream.h>
#include <windows.h>
#include <windef.h>

#define MAX_IMG_ROWS 1080
#define MAX_IMG_COLS 1920
#define MAX_IMG_CHANNELS 3
#define min_pix (float)0.0
#define max_pix (float)255.0
#define TEST_IMG_ROWS 256
#define TEST_IMG_COLS 512
#define TEST_IMG_CHANNELS 512

typedef unsigned char data_t;
void ct_filter(
        int w, int h,
        data_t input_image, data_t output_image,float TsTw_tran[3][3]);
PS:我知道使用流比使用数组更好地进行数据传输,我的目标是使用数组实现一个简单的实现,然后使用不同的pragmas类流对其进行优化


通过删除下面提到的库,提前感谢

//#include <windows.h>
//#include <windef.h>

冲突已解决

对于您标记问题的两种语言,答案可能非常不同。我建议您标记您正在编译的特定语言,如C++,带有不推荐的标题,虽然我不知道C++ +标签删除。您的CTAL过滤器的功能原型不符合它的定义。在头文件中的函数声明原型中,第三个参数是一个奇异的数据输入图像。在实际在.cpp文件中定义函数的定义中,第三个参数是数组数据\u t src[256][512][3]。编译器正确地抱怨这是两种不同的类型,实际上是两种不同的函数。@yano感谢您指出这一点,解决了您没有直接在HDL中设计过滤器架构的任何特殊原因?@eldesgraciado,是的,我的项目要求它使用vivado hls实现。我也知道vivado hls很容易使用,因为它是一种高级语言
//ct_testbench.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include "math.h"
#include <chrono>
#include "ct_h.hpp"
#include <hls_opencv.h>
using namespace cv;
using namespace std;

int main()
{
float TsTw_tran[3][3];
        for (int i = 0; i < TsTw_trans.size(); i++) {
            for (int j = 0; j < TsTw_trans[i].size(); j++) {
                TsTw_tran[i][j] = TsTw_trans[i][j];
            }
        }//caluclated this from previous functions, code is not posted here

    //data_t * const input_img = new data_t[TEST_IMG_ROWS][TEST_IMG_COLS][TEST_IMG_CHANNELS];
    //data_t * const output_img = new data_t[TEST_IMG_ROWS][TEST_IMG_COLS][TEST_IMG_CHANNELS];
    data_t input_img[256][512][3];
    data_t output_img[256][512][3];
    Mat img_rev = imread("C:/Users/20181217/Desktop/images/imgs/output_rev.png");
    Mat final_img(img_rev.rows,img_rev.cols,CV_8UC3);

    Mat ideal = imread("C:/Users/20181217/Desktop/images/imgs/output_fwd_v4.png");
    for (int i = 0; i < TEST_IMG_ROWS; i++)
        {
            for (int j = 0; j < TEST_IMG_COLS; j++)
            {
                input_img[i][j][0] = img_rev.at<Vec3b>(i, j)[2];//R - B
                input_img[i][j][1] = img_rev.at<Vec3b>(i, j)[1];//G - G
                input_img[i][j][2] = img_rev.at<Vec3b>(i, j)[0];//B - R
            }
        }


    ct_filter(TEST_IMG_COLS, TEST_IMG_ROWS, input_img, output_img, TsTw_tran);

    for (int i = 0; i < img_rev.rows; i++)
        {
            for (int j = 0; j < img_rev.cols; j++)
            {
                final_img.at<Vec3b>(i, j)[0] = output_img[i][j][0];//R
                final_img.at<Vec3b>(i, j)[1] = output_img[i][j][1];//G
                final_img.at<Vec3b>(i, j)[2] = output_img[i][j][2];//B

            }
        }
    imwrite("C:/Users/20181217/Desktop/images/imgs/hls_gen_stage3.png",final_img);
return 0
}
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_storeups': 

C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\xmmintrin.h:630
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_movntps'; did you mean '__builtin_ia32_movntss'?: C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\xmmintrin.h:678
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_cvtps2pd': C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\emmintrin.h:380
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_cvtdq2pd'; did you mean '__builtin_ia32_cvtdq2ps'?: C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\emmintrin.h:386
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_storeupd': C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\emmintrin.h:586
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_pavgb128': C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\emmintrin.h:671
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_pavgw128': C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\emmintrin.h:677
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_storedqu': C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\emmintrin.h:1177
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_storelv4si'; did you mean '__builtin_ia32_storelps'?: C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\emmintrin.h:1189
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_movntpd'; did you mean '__builtin_ia32_movntsd'?: C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\emmintrin.h:1195
ERROR: [HLS 214-124] use of undeclared identifier '__builtin_ia32_movntdq'; did you mean '__builtin_ia32_movntq'?: C:\Xilinx\Vivado\2019.2\win64\tools\clang\lib\clang\3.1\include\emmintrin.h:1201
Wrong pragma usage.
//#include <windows.h>
//#include <windef.h>