当我尝试使用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的经验,这是一个最佳的起点。你应该重写你的函数,也许看看这个文档