16位阵列如何需要5位地址(Xilinx Vivado HLS)?

时间:2015-02-11 15:56:16

标签: hardware xilinx synthesis digital-design

我是Xilinx HLS的新手。我正在学习教程ug871-vivado-high-level-synthesis-tutorial.pdf(第77页)。

代码是

#define N 32

void array_io (dout_t d_o[N], din_t d_i[N])     
{   
   //..do something
}

合成后,我收到了报告

enter image description here

我很困惑,地址端口的宽度是如何自动调整大小的,与必须访问的地址数相匹配(32位地址为5位)?

请帮忙。

2 个答案:

答案 0 :(得分:0)

从UG871看,数组的大小似乎是0到16个样本,因此您需要32个地址才能访问所有值(参见图69)。我猜数字N在某处限制为小于32(或恰好是16)。这意味着Vivado知道这种限制,并且只生成所需数量的地址位。大多数综合工具会检查大小的限制并优化不必要的代码。

答案 1 :(得分:0)

当你合成一个你创建的函数时,还有一些寄存器来存储变量。这意味着您输入的地址是您在d_o或d_in中同时写入的数据之一。

在你的情况下,当N = 32时,你有 32个不同的变量(在输入和输出中)。要处理32个不同的变量,您需要32个不同的位组合(指向特定的变量,没有歧义)。对于5位,您有2 ^ 5 = 32种不同的地址组合:用于处理所有数据的最小位数。 例如,如果您有32 enter image description here

位的地址编号是数据大小的INDIPENDENT(即它们可以是int,float,char,short,double,任意精度等等)