首页 > 解决方案 > 将指针数组传递给 Vivado HLS (SDSoC 2018) 中的函数

问题描述

我正在使用 SDSoC 2018.3 Vivado HLS 加速 C++ 函数。这个函数只需要一个指针数组(在 PS 中使用 sds_alloc 分配)。然后,它遍历这个数组,提取其中的每个元素(这是 DDR 内存的地址),并读取位于该地址中的数据。

这是一个演示该想法的简单函数:

float get_data_from_DDR(float *data_addresses_array[10], unsigned int size)

{

    float * address;

    float sum = 0;

    for(unsigned int i = 0; i< 10; i++)

    {

         address = data_addresses_array[i];

         for(unsigned int j = 0; j<size; j++ ) {

            sum += address[j];

        }

    }

   return sum;

}

问题是,如果我将指针数组作为顶级函数的参数传递,SDSoC 会引发错误。

在挖掘了 Vivado 的“ug902”手册后,我发现:

“Vivado HLS 支持指向综合指针的指针,但不支持在顶级接口上使用它们,即作为顶级函数的参数。如果在多个函数中使用指向指针的指针,Vivado HLS 会内联所有使用指向指针的函数。内联多个函数可以增加运行时间。”</p>

我不知道如何解决这个问题。

任何帮助表示赞赏。

标签: c++fpgaxilinxvivadovivado-hls

解决方案


我不确定有没有办法直接克服这个限制,但也许你可以传递一个偏移量数组,然后将这些偏移量用作放置在 DDR 内存中的数组的索引。


推荐阅读