2016-11-08 106 views
0

当尝试使用Vivado HLS到sythnise,我得到这个误差的同一行:C++ HLS合成警告

CRITICAL警告:[SYNCHK 200-43] pcd_triangulation/pcd_triangulation.cpp:156 :使用或分配非静态指针'current.0.i.reg2mem'(该指针可能指 不同的存储器位置)。

CRITICAL警告:[SYNCHK 200-11] pcd_triangulation/pcd_triangulation.cpp:156:常数 '开始' 具有 unsynthesizable类型“lass.triangle.2.28.31 =类型{[3× 小姑娘。三角形2.28.3 ...'(可能的原因:指向指针的指针或全局指针的指针 )。

CRITICAL警告:[SYNCHK 200-11] pcd_triangulation/pcd_triangulation.cpp:156:常数 '开始' 具有 unsynthesizable类型“^ lass.triangle.2.28.31 =类型{[3× 小姑娘(可能的原因:结构变量 不能被分解,因为(1)不支持的类型转换;(2) 存储器复制操作;(3)结构体中使用的函数指针;( 4) 不支持的指针比较)。

CRITICAL警告:[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; 

     ... 
    } 
} 

任何人都可以帮助我解决这些问题吗?

+0

请问您可以为您的问题添加一些上下文吗?事实上,你的问题是无法回答的。 – damienc

+0

你也可以安排你的代码吗? – Stacked

+0

对不起,我无法上传我的所有代码,太大了。我会尽力找到处理同样问题的人来帮助我。我是新来的,我不知道如何安排我的问题。 – Marios

回答

1

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

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

0

当你使用Vivado HLS时,你必须记住一些重要的事情:你正在用硬件翻译C或C++代码。这是什么意思?那么,就不可能分配内存,合成功能必须有一些PHISICAL端口(用于输入,输出和控制)以及其他很多重要的问题。在这个特定的内容中,一个指针是一个端口的地址,只要硬件在创建位流时保持不变,指针就不会改变。为了得出结论:如果你想用晶体管连接来合成,你必须以特定的方式重新编写C或C++代码。如果你有写VHDL或Verilog的经验,这是一个最佳的起点。你应该重写你的功能,看看this document