0

当我尝试使用 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)结构中使用的函数指针;(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]是指向类 (member)( ) 中的同一类的数组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;

        ...
    }
}

谁能帮我解决这些问题?

4

2 回答 2

0

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

于 2016-11-18T14:12:02.367 回答
0

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

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

于 2016-11-08T15:34:18.520 回答