oop — C ++ HLS Синтез Предупреждения

Когда я пытаюсь синтезировать с использованием Vivado HLS, я получаю следующие ошибки для той же строки:

КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ: [СИНЧК 200-43] pcd_triangulation / pcd_triangulation.cpp: 156: использование или назначение
нестатический указатель ‘current.0.i.reg2mem’ (этот указатель может относиться к
разные места памяти).

КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ: [СИНЧК 200-11] pcd_triangulation / pcd_triangulation.cpp: 156: постоянное «начало» имеет
несинтезируемый тип ‘lass.triangle.2.28.31 = type {[3 x
lass.triangle.2.28.3 … ‘(возможная (-ые) причина (-ы): указатель на указатель или
глобальный указатель).

КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ: [СИНЧК 200-11] pcd_triangulation / pcd_triangulation.cpp: 156: постоянное «начало» имеет
несинтезируемый тип ‘^ lass.triangle.2.28.31 = type {[3 x
lass.triangle.2.28.3 … ‘(возможная (-ые) причина (-ы): структурная переменная
не может быть разложен из-за (1) неподдерживаемого преобразования типов; (2)
операция копирования в память; (3) указатель на функцию, используемую в структуре; (4)
неподдерживаемое сравнение указателей).

КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ: [СИНЧК 200-42] pcd_triangulation / pcd_triangulation.cpp: 156: сравнение указателей не
поддерживается.

Код находится на C ++. Так что это код, который дает предупреждения выше:

if(start->child[0]==NULL && start->child[1]==NULL && start->child[2]==NULL)

start глобальный указатель на класс (triangle *start) а также child[i] массив указывает на тот же класс внутри класса (член) (triangle *child[3]).

class triangle {
public:
triangle *child[3];
...
}

triangle *start;

inline triangle *mylocate(int p) {
if (start->child[0] == NULL && start->child[1] == NULL &&
start->child[2] == NULL) {
return start;

...
}
}

Может ли кто-нибудь помочь мне решить эти проблемы?

0

Решение

Я ничего не знаю о vivado, но он утверждает, что «сравнение указателей не поддерживается».
Вы сравниваете указатели.

Так что это не поддерживается. Таким образом, вы не можете сделать сравнение указателей: /

1

Другие решения

Когда вы используете Vivado HLS, вы должны помнить о некоторых важных вещах: вы переводите код C или C ++ на аппаратное обеспечение. Что это значит? Что ж, невозможно выделить память динамически, функция для синтеза должна иметь некоторые ФИЗИЧЕСКИЕ порты (для входов, выходов и элементов управления) и многие другие важные вопросы. Указатель, в этом особом контенте, является адресом порта, который никогда не изменится, пока HW останется неизменным после создания потока битов. В заключение ответ: вы должны переписать код C или C ++ определенным образом, если хотите синтезировать его с помощью транзисторных соединений. Если у вас есть опыт написания VHDL или Verilog, это оптимальная отправная точка. Вы должны переписать свою функцию, может быть, глядя на этот документ.

0

По вопросам рекламы [email protected]