【问题标题】:C++ HLS Synthesis WarningsC++ HLS 综合警告
【发布时间】: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类声明后加分号

标签: c++ oop pointers http-live-streaming vivado-hls


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      相关资源
      最近更新 更多