2017-06-07 6 views
-2

Ich bin neu in vivado HLS, ich versuche, einen C++ - Code in VHDL konvertieren und ich habe einige Probleme mit der Synthese. Ich hoffe, dass mir jemand helfen kann.Synthese (Top-Level-Funktion Warnungen)

Hier ist eine Auflistung der Fehler:

@E [SYNCHK-42] C: /Xilinx/Vivado_HLS/2013.4/win64/tools/clang/bin .. \ lib \ Klirren \ 3.1/../../../include/c++/4.5.2\bits/stl_construct.h:80: Zeigervergleich wird nicht unterstützt. 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: Variable 'this.assign.3' hat einen unsynthetisierbaren Typ 'vector>' (mögliche Ursache (n): Zeiger auf Zeiger oder global) Zeiger). 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: nicht unterstützte Zeiger-Neuinterpretation vom Typ 'i8 *' zur Eingabe von 'Zeiger'. 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)' hat keinen Funktionskörper. projethls: solution1 7 juin 2017 11.53.27

@E [SYNCHK-11] filtre/filtre/filtre_passhautbutter.cpp: 16: Argument 'y' der Funktion 'filtre_passhautbutter' (filtre/filtre/filtre_passhautbutter.cpp: 12) hat einen unsynthetisierbaren Typ (mögliche Ursache (n): Strukturvariable kann aufgrund nicht unterstützter Typkonvertierung oder Speicherkopieoperation nicht zerlegt werden). projethls: solution1 7 juin 2017 11.53.27

hier ist der Code:

// Funktion

#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; 
} 

// main:

#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; 
} 
+3

Ich denke, die Fehlermeldungen sind offensichtlich: Ihr Code enthält Konstrukte, die nicht vom Synthesizer unterstützt werden. Mit anderen Worten, Sie Code ist zu hochrangig. High-Level-Synthese kann nicht nur Code in Hardware konvertieren; Kompatibler Code muss in einem bestimmten Low-Level-Stil unter Verwendung einer Teilmenge der Sprache geschrieben werden. Haben Sie die Anweisungen für Ihr HLS-Tool gelesen? –

+1

Siehe Vivado Design Hub - [Hochstufensynthese (C-basiert)] (https://www.xilinx.com/support/documentation-navigation/design-hubs/dh0012-vivado-high-level-synthesis-hub.html), die Benutzerhandbücher für den Einführungsblock. Dazu gehören C++. – user1155120

Antwort

1

Die einfache Antwort ist: Sie können kein beliebiges Codefragment von C/C++ in (V) HDL konvertieren. Zumindest: Xilinx HLS kann nicht. Der Code muss auf eine bestimmte Art und Weise geschrieben werden, unter Verwendung kompatibler Datentypen usw.

Was möchten Sie erreichen? Ist Ihr aktueller Ansatz (C++ - zu-HDL) der beste Ansatz? (Wussten Sie, dass Xilinx einen Filterentwurfswizard hat? D. H. FIR Compiler)

Wenn Sie wirklich HLS verwenden möchten, sollten Sie einfach beginnen. Verwenden Sie eine Lernanleitung, die Sie online finden können.

Verwandte Themen