Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用循环时,HLS-阵列参数接口不同_C++_C_Vivado Hls - Fatal编程技术网

C++ 使用循环时,HLS-阵列参数接口不同

C++ 使用循环时,HLS-阵列参数接口不同,c++,c,vivado-hls,C++,C,Vivado Hls,在Vivado HLS中,我使用指令set\u directive\u interface-mode axis-register-register\u mode两个“FIR”结果具有以下功能: void Func(int A[2], int B[2], int* Result) { int Temp = 0x00; Loop: for(int i = 0x00; i < 0x02; i++) { Temp += A[i] * B[i]; }

在Vivado HLS中,我使用指令
set\u directive\u interface-mode axis-register-register\u mode两个“FIR”结果
具有以下功能:

void Func(int A[2], int B[2], int* Result)
{
    int Temp = 0x00;

    Loop: for(int i = 0x00; i < 0x02; i++)
    {
        Temp += A[i] * B[i];
    }

    *Result = Temp;
}
这将产生以下输出:


那么,为什么第二个函数会产生一个带有两个RAM端口的接口呢?

实际上,您是在手动进行循环展开。等于

void Func(int A[2], int B[2], int* Result)
{
    int Temp = 0x00;

    Loop: for(int i = 0x00; i < 0x02; i++)
    {
#pragma HLS UNROLL
        Temp += A[i] * B[i];
    }

    *Result = Temp;
}
void Func(int A[2],int B[2],int*Result)
{
内部温度=0x00;
循环:for(int i=0x00;i<0x02;i++)
{
#布拉格马HLS展开
温度+=A[i]*B[i];
}
*结果=温度;
}
执行此操作时,您可以同时访问阵列的所有4个元素,因此Vivado HLS会对阵列应用分区,并将它们转换为多个较小的阵列,每个阵列都使用自己的接口实现。这 包括将数组的每个元素划分为自己的标量元素的功能。上 函数接口,这将为阵列中的每个元素生成一个唯一的端口。这就提供了 最大并行访问。这样做可以创建多个元素 同时读取,并改进启动间隔。有关更多信息,请参阅xilinx UG902“阵列接口”一节

void Func(int A[2], int B[2], int* Result)
{
    int Temp = 0x00;

    Loop: for(int i = 0x00; i < 0x02; i++)
    {
#pragma HLS UNROLL
        Temp += A[i] * B[i];
    }

    *Result = Temp;
}