我是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位)?
请帮忙。
答案 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
位的地址编号是数据大小的INDIPENDENT(即它们可以是int,float,char,short,double,任意精度等等)