综合(顶级功能警告)

时间:2017-06-07 10:14:20

标签: c++ vhdl vivado vivado-hls

我是vivado HLS的新手,我试图将c ++代码转换为vhdl并且我有一些综合问题。我希望有人可以帮助我。

以下是错误列表:

  

@E [SYNCHK-42] C:/Xilinx/Vivado_HLS/2013.4/win64/tools/clang/bin .. \ lib \ clang \ 3.1 /../../../ include / c ++ / 4.5。 2 \ bits / stl_construct.h:80:不支持指针比较。 projethls:solution1 7 juin 2017 11:53:27

     

@E [SYNCHK-11] C:/Xilinx/Vivado_HLS/2013.4/win64/tools/clang/bin .. \ lib \ clang \ 3.1 /../../../ include / c ++ / 4.5。 2 \ bits / stl_vector.h:113:变量' this.assign.3'具有不可合成的类型矢量>' (可能的原因:指向指针或全局指针的指针)。 projethls:solution1 7 juin 2017 11:53:27

     

@E [SYNCHK-41] C:/Xilinx/Vivado_HLS/2013.4/win64/tools/clang/bin .. \ lib \ clang \ 3.1 /../../../ include / c ++ / 4.5。 2 \ ext / new_allocator.h:89:不支持的指针重新解释类型' i8 *'输入'指针'。 projethls:solution1 7 juin 2017 11:53:27

     

@E [SYNCHK-71] C:/Xilinx/Vivado_HLS/2013.4/win64/tools/clang/bin .. \ lib \ clang \ 3.1 /../../../ include / c ++ / 4.5。 2 \ ext / new_allocator.h:89:function' operator new(unsigned long long)'没有功能体。 projethls:solution1 7 juin 2017 11:53:27

     

@E [SYNCHK-11] filtre / filtre / filtre_passhautbutter.cpp:16:论证' y'功能' filtre_passhautbutter' (filtre / filtre / filtre_passhautbutter.cpp:12)具有不可合成的类型(可能的原因:由于不支持的类型转换或内存复制操作,结构变量无法分解)。 projethls:solution1 7 juin 2017 11:53:27

这是代码:

//功能

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h> 
#include <vector>

using namespace std;

//Definier la fonction filtre_passhautbutter(x)  qui retouren un matrice de type double

vector <vector <double> > filtre_passhautbutter(vector <vector <double> > x)
{
    int heigth=6;
    int width=1;
    vector <vector <double> > y (heigth,vector<double>(width, 0.0));
    //Definir le vecteur b
    vector <double> b;
    b.push_back(0.9691);
    b.push_back(-2.9072);
    b.push_back(2.9072);
    b.push_back(-0.9691);
    //Definir le vecteur a
    vector <double> a;
    a.push_back(1.0000);
    a.push_back(-2.9372);
    a.push_back(2.8763);
    a.push_back(-0.9391);   

    //Remplir le vecteur y par les valeurs correspondentes
    for (int n=4; n< x.size() ;n++)
    {

        double calcul= (b[0]*x[n-1][0]) + (b[1]*x[n-2][0]) + (b[2]*x[n-3][0]) +(b[3]*x[n-4][0]) - (a[1]*y[n-2][0]) - (a[2]*y[n-3][0]) - (a[3]*y[n-4][0]);
        y[0].push_back(calcul);
    }
    return y;
}

//主:

#include <stdio.h>
#include <math.h> 
#include <vector>


using namespace std;
vector <vector <double> > filtre_passhautbutter(vector <vector <double> > x);

int main()
{
    int heigth=6;
    int width=1;
    vector <vector <double> > x;
    x.push_back(vector<double>(12.5));
    x.push_back(vector<double>(19.5));
    x.push_back(vector<double>(6));
    x.push_back(vector<double>(12));
    x.push_back(vector<double>(14.5));
    x.push_back(vector<double>(15));

    vector <vector <double> > y (heigth,vector<double>(width));
    y =filtre_passhautbutter(x);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

简单的答案是:您无法将任何随机的C / C ++代码片段转换为(V)HDL。至少:Xilinx HLS不能。必须使用兼容的数据类型等以特定方式编写代码。

你想要达到什么目的?您当前的方法(C ++ - to-HDL)是最好的方法吗? (您知道Xilinx有一个滤波器设计向导吗?即FIR编译器)

如果你真的想使用HLS,你应该从简单开始。使用您可以在线找到的学习指南。