首页 > 解决方案 > 通过参数传递 3D 数组,在 C++ 中执行操作并返回

问题描述

我正在尝试传递存储在我的 PYNQ 板直接内存访问中的 3D 数组,执行一个简单的功能并作为输出返回给 DMA。这是我目前拥有的功能:

#include <ap_int.h>

#define BLOCKS 4
#define LENGTH 8


void multiplyArray(volatile ap_uint<32> * input[BLOCKS][LENGTH][LENGTH], volatile ap_uint<32> * output[BLOCKS][LENGTH][LENGTH]){

    #pragma HLS INTERFACE axis PORT = input
    #pragma HLS INTERFACE axis PORT = output

    int x;
    int j;
    int i;

    for(x = 0; x < BLOCKS; x++){

        for(j = 0; j < LENGTH; j++){

            for(i = 0; i < LENGTH; i++){

                output[x][j][i] = input[x][j][i] + 1;
            }

        }

    }

它返回多个错误,包括输入不支持的内存访问,“output[x][j][i] = input[x][j][i] + 1;” 具有读写功能,输入不能设置为轴。对此非常陌生,将不胜感激!

谢谢!

标签: c++arraysembeddedvivado

解决方案


简单来说,这部分volatile ap_uint<32> *需要对应数组项类型。如果数组是 3D 数组类型,ap_uint<32>那么参数应该是ap_uint<32> input[BLOCKS][LENGTH][LENGTH]. 例子:

void multiplyArray (ap_uint<32> input  [BLOCKS][LENGTH][LENGTH], 
                    ap_uint<32> output [BLOCKS][LENGTH][LENGTH]);

推荐阅读