代码之家  ›  专栏  ›  技术社区  ›  Main

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

  •  2
  • Main  · 技术社区  · 10 年前

    我是Xilinx HLS的新手。我正在关注教程ug871 vivado高级合成教程.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 回复  |  直到 8 年前
        1
  •  0
  •   dieli    10 年前

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

        2
  •  0
  •   Leos313    8 年前

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

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

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