c++ HLS合成警告



当我尝试使用Vivado HLS合成时,我得到了同一行的错误:

CRITICAL WARNING: [SYNCHK 200-43] pcd_triangulation/pcd_triangulation.cpp:156:使用或赋值a非静态指针current.0。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.triangle.2.28.3……(可能原因:结构变量。由于(1)不支持类型转换而无法分解;(2)内存复制操作;(3) struct中使用的函数指针;(4)不支持指针比较)。

CRITICAL WARNING: [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;
        ...
    }
}
谁能帮我解决这些问题?

我对vivado一无所知,但它声称"不支持指针比较"。你在比较指针。

是不支持的。所以不能做指针比较/

当你使用Vivado HLS时,你必须记住一些重要的事情:你是在硬件中翻译C或c++代码。这是什么意思?嗯,动态分配内存是不可能的,要合成的函数必须有一些物理端口(用于输入、输出和控制)和其他许多重要问题。在这个特定的内容中,指针是一个端口的地址,只要比特流创建后HW保持不变,它就永远不会改变。总结一下答案:如果你想用晶体管连接来合成它,你必须以一种特定的方式重写C或c++代码。如果您有编写VHDL或Verilog的经验,这是一个最佳的起点。你应该重写你的函数,也许看看这个文档

相关内容

  • 没有找到相关文章

最新更新