AR# 51143

Vivado HLS - Vivado HLS 通过一个弹出式窗口报告了关于“a.exe 已停止工作”的崩溃信息。

描述

Vivado HLS 通过一个弹出式窗口报告了关于“a.exe 已停止工作”的崩溃信息。

解决方案

如果 C 或 C++ 代码在一个函数中具有若干个很大的局部变量,则会将它们放置于协议栈上。这可能会导致内存不足的问题。可以使用一些潜在的解决方案来解决该问题。

  1. 请将变量放在堆中,而不是阵列中。例如,在可能的情况下,将该变量设为静态或全局变量。但是,请注意,该解决方案可能会导致潜在的性能问题。
  2. 请增加协议栈大小。 
  3. 使用动态分配来仿真 C,并使用阵列进行综合。 
    • 实例:
    • #ifndef __SYNTHESIS__
        // 在编译软件时,动态分配大型阵列
        ARRAY_2D_MALLOC(buff_A, unsigned char, 3, MAX_WIDTH);
        // 确保分配成功
        if (!buff_A ) {
            printf("ERROR: 无法在函数中分配行缓冲存储器:sobel_filter()\n");
            exit(-1);
         }
      #else
         // 对于 HLS 而言,必须静态分配用于硬件模块的所有内部存储器
         unsigned char buff_A[3][MAX_WIDTH];
      #endif


通常,在可执行文件中运行 valgrind 等存储检验工具将有助于发现并改正协议栈错误和其它综合错误。





AR# 51143
日期 08/07/2012
状态 Active
Type 解决方案中心
Tools More Less