2016-11-08 5 views
0

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

CRITICAL ПРЕДУПРЕЖДЕНИЕ: [SYNCHK 200-43] pcd_triangulation/pcd_triangulation.cpp: 156 : использование или назначение нестатического указателя «current.0.i.reg2mem» (этот указатель может ссылаться на разных мест памяти).

КРИТИЧЕСКОЕ ВНИМАНИЕ: [SYNCHK 200-11] pcd_triangulation/pcd_triangulation.cpp: 156: Константа 'старт' имеет тип unsynthesizable «lass.triangle.2.28.31 = тип {[3 х Lass. triangle.2.28.3 ... '(возможная причина (ы): указатель на указатель или глобальный указатель).

КРИТИЧЕСКОЕ ВНИМАНИЕ: [SYNCHK 200-11] pcd_triangulation/pcd_triangulation.cpp: 156: Константа 'старт' имеет тип unsynthesizable «^ lass.triangle.2.28.31 = тип {[3 х деваха .triangle.2.28.3 ... '(возможная причина (ы): структурная переменная не может быть разложена из-за (1) преобразования неподдерживаемого типа; (2) операция копирования памяти; (3) указатель функции, используемый в struct; 4) сравнение неподдерживаемых указателей).

КРИТИЧЕСКОЕ ВНИМАНИЕ: [SYNCHK 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

Не могли бы вы добавить какой-то контекст на ваш вопрос? Как бы то ни было, на ваш вопрос нельзя ответить. – damienc

+0

Можете ли вы также заказать свой код, пожалуйста? – Stacked

+0

Извините, я не могу загрузить весь мой код, слишком большой.Я постараюсь найти кого-то, кто будет заниматься теми же проблемами, которые помогут мне. Я здесь новый, и я не знаю, как задать свой вопрос. – Marios

ответ

1

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

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

0

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

Смежные вопросы