16 位数组如何需要 5 位地址(Xilinx Vivado HLS)?

How 16 bit array needs 5 bit address (Xilinx Vivado HLS)?

我是 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
}

综合后,我得到了类似

的报告

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

请帮忙。

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

当你合成一个函数时,你也会创建一些寄存器来存储变量。这意味着您作为输入输入的地址是您同时写入 d_o 或 d_in.

的数据之一

在您的例子中,N=32,您有 32 个不同的变量(在输入和输出中)。要处理 32 个不同的变量,您需要 32 个不同的位组合(指向特定的一个,没有歧义)。对于 5 位,您有 2^5=32 种不同的地址组合:寻址所有数据的最小位数。 例如,如果您有 32

地址位数与数据大小无关(即可以是int、float、char、short、double、任意精度等)