C++ HLS 综合警告
Posted
技术标签:
【中文标题】C++ HLS 综合警告【英文标题】:C++ HLS Synthesis Warnings 【发布时间】:2016-11-08 13:50:35 【问题描述】:当我尝试使用 Vivado HLS 进行合成时,我在同一行收到以下错误:
严重警告:[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]
)。
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;
...
谁能帮我解决这些问题?
【问题讨论】:
能否为您的问题添加一些上下文?事实上,您的问题无法回答。 你能不能也把你的代码整理一下? 对不起,我不能上传我所有的代码,太大了。我会尝试找到处理相同问题的人来帮助我。我是新来的,我不知道如何安排我的问题。triangle
类声明后加分号
【参考方案1】:
我对vivado一无所知,但它声称“不支持指针比较”。 你在比较指针。
所以不支持。所以你不能做指针比较:/
【讨论】:
【参考方案2】:当您使用 Vivado HLS 时,您必须牢记一些重要的事情:您正在翻译硬件中的 C 或 C++ 代码。这是什么意思?好吧,不可能动态地分配内存,要合成的函数必须有一些 PHISICAL 端口(用于输入、输出和控制)和其他许多重要问题。一个指针,在这个特定的内容中,是一个端口的地址,只要在创建比特流后硬件保持不变,就永远不会改变。总结答案:如果你想用晶体管连接合成它,你必须以特定的方式重写 C 或 C++ 代码。如果您有编写 VHDL 或 Verilog 的经验,这是一个最佳起点。你应该重写你的函数,也许看看this document。
【讨论】:
以上是关于C++ HLS 综合警告的主要内容,如果未能解决你的问题,请参考以下文章