Предупреждения о синтезе C++ HLS

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

ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ: [SYNCHK 200-43] pcd_triangulation/pcd_triangulation.cpp:156: использование или назначение нестатического указателя 'current.0.i.reg2mem' (этот указатель может относиться к другой памяти локации).

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

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

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

Код на С++. Итак, это код, который выдает предупреждения выше:

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;

        ...
    }
}

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


person Marios    schedule 08.11.2016    source источник
comment
Не могли бы вы добавить контекст к вашему вопросу? Как бы то ни было, на ваш вопрос нельзя ответить.   -  person dashdashzako    schedule 08.11.2016
comment
Можете ли вы также немного упорядочить свой код, пожалуйста?   -  person Stacked    schedule 08.11.2016
comment
Извините, я не могу загрузить весь свой код, он слишком большой. Я постараюсь найти кого-то, кто имел дело с теми же проблемами, чтобы помочь мне. Я новичок здесь, и я не знаю, как организовать свой вопрос.   -  person Marios    schedule 08.11.2016
comment
Добавить точку с запятой после объявления класса triangle   -  person smac89    schedule 11.11.2016


Ответы (2)


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

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

person brainsandwich    schedule 08.11.2016

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

person Leos313    schedule 18.11.2016