当我尝试使用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;
...
}
}
有人可以帮我解决这些问题吗?
答案 0 :(得分:1)
我对vivado一无所知,但声称不支持&#34;指针比较&#34;。 你正在比较指针。
所以它不受支持。所以你不能做指针比较:/
答案 1 :(得分:0)
当您使用Vivado HLS时,您必须记住一些重要的事情:您正在硬件中翻译C或C ++代码。这是什么意思?好吧,不可能在内部分配内存,合成功能必须有一些PHISICAL端口(用于输入,输出和控制)和其他许多重要问题。在这个特别的争论中,指针是一个端口的地址,只要一旦创建了比特流,HW将保持不变,它就永远不会改变。总结答案:如果要使用晶体管连接来合成C或C ++代码,则必须以特定方式重写代码。如果您有编写VHDL或Verilog的经验,那么这是一个最佳起点。您可以重写您的函数,或者查看this document。