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;
}
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? –
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