Я новичок в 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 июня 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 имеет несинтезируемый тип vector> (возможная (-ые) причина (-ы): указатель на указатель или глобальный указатель). projethls: solution1 7 июня 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 июня 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: функция ‘оператор new (беззнаковый длинный long)’ не имеет тела функции. projethls: solution1 7 июня 2017 11:53:27
@E [SYNCHK-11] фильтр / фильтр / фильтр_passhautbutter.cpp: 16: Аргумент ‘y’ функции ‘filterre_passhautbutter’ (фильтр / фильтр / фильтр_passhautbutter.cpp: 12) имеет несинтезируемый тип (возможная причина (причины): структурная переменная) не может быть разложен из-за неподдерживаемого преобразования типа или операции копирования памяти). projethls: solution1 7 июня 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;
}
Ответ прост: вы не можете преобразовать любой случайный фрагмент кода C / C ++ в (V) HDL. По крайней мере: Xilinx HLS не может. Код должен быть написан определенным образом, с использованием совместимых типов данных и т. Д.
Чего ты хочешь достичь? Является ли ваш нынешний подход (C ++ — to-HDL) лучшим подходом? (Знаете ли вы, что в Xilinx есть мастер создания фильтров? Т.е. FIR Compiler)
Если вы действительно хотите использовать HLS, вы должны начать с простого. Используйте учебное пособие, которое вы можете найти в Интернете.
Других решений пока нет …