C ++ HLS综合警告

时间:2016-11-08 13:50:36

标签: c++ oop pointers hls vivado-hls

当我尝试使用Vivado HLS进行sythnise时,我会在同一行中收到此错误:

  

严重警告:[SYNCHK 200-43 ] pcd_triangulation / pcd_triangulation.cpp:156:使用或分配   非静态指针' current.0.i.reg2mem' (这个指针可能指的是   不同的记忆位置)。

     

严重警告:[SYNCHK 200-11] pcd_triangulation / pcd_triangulation.cpp:156:常数'开始'有一个   不可合成的类型' lass.triangle.2.28.31 = type {[3 x   lass.triangle.2.28.3 ...' (可能的原因:指向指针或指针)   全局指针)。

     

严重警告:[SYNCHK 200-11] pcd_triangulation / pcd_triangulation.cpp:156:常数'开始'有一个   不可合成的类型' ^ lass.triangle.2.28.31 = type {[3 x   lass.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])内同一类的数组。< / p>

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;

        ...
    }
}

有人可以帮我解决这些问题吗?

2 个答案:

答案 0 :(得分:1)

我对vivado一无所知,但声称不支持&#34;指针比较&#34;。 你正在比较指针。

所以它不受支持。所以你不能做指针比较:/

答案 1 :(得分:0)

当您使用Vivado HLS时,您必须记住一些重要的事情:您正在硬件中翻译C或C ++代码。这是什么意思?好吧,不可能在内部分配内存,合成功能必须有一些PHISICAL端口(用于输入,输出和控制)和其他许多重要问题。在这个特别的争论中,指针是一个端口的地址,只要一旦创建了比特流,HW将保持不变,它就永远不会改变。总结答案:如果要使用晶体管连接来合成C或C ++代码,则必须以特定方式重写代码。如果您有编写VHDL或Verilog的经验,那么这是一个最佳起点。您可以重写您的函数,或者查看this document