我是Xilinx的新手。下面是教程ug871-vivado-high-level-synthesis-tutorial.pdf(page 77)。
代码是
#define N 32
void array_io (dout_t d_o[N], din_t d_i[N])
{
//..do something
}在合成之后,我得到了报告

我感到困惑的是,地址端口的宽度如何自动与必须访问的地址数(32个地址的5位)相匹配?
请帮帮忙。
发布于 2015-02-12 10:05:59
从UG871来看,数组的大小似乎是从0到16个样本,因此您需要32个地址来访问所有值(参见图69)。我猜N在某个地方被限制为小于32 (或者正好是16)。这意味着Vivado知道这个限制,并且只生成所需的多个地址位。大多数综合工具检查大小上的约束,并优化不必要的代码。
发布于 2016-07-12 10:56:01
当您合成创建的函数时,也会有一些寄存器来存储变量。这意味着您输入的地址是您正在以d_o或d_in并发写入的数据之一。
在您的例子中,在N=32中,您有32个不同的变量(包括输入和输出)。要插入32个不同的变量,您需要32种不同的位组合(指向一个特定的位,没有歧义)。有了5位,您就有了2^5=32不同的地址组合:,最小位数来处理您所有的数据。例如,如果你有32

位的地址数取决于数据的大小(例如,它们可以是int、float、char、短、双、任意精度等等)。
https://stackoverflow.com/questions/28458713
复制相似问题