综述
- 目的:将数组映射为相应的RTL接口(注意:这里的数组都是作为顶层函数的形参 ,后面会讲作为子函数的形参该如何优化)
- 在默认情况下,数组会映射成相应的memory的端口
- 这些端口包括一些控制信号:读写使能、读写地址以及一些数据端口
- 可以在软件中设置到底是单端口还是双端口的RAM
- 一般来说vivado会自动分析,单端口还是双端口才能获得最大的数据率
- 可以通过directive设置到底是使用单端口还是双端口,也可以设置通过FIFO的形式来读写数据,而且可以对数组进行分割,并储存到不同的memory中去(后面会讲到)。
实例分析

默认情况下,使用ap_memory接口协议
输出数组(d_o)
RTL Ports |
说明 |
d_o_address0 |
输出写入地址 |
d_o_ce0 |
片选信号(提供给外部的memory) |
d_o_we0 |
写数据使能信号 |
d_o_d0 |
需要写入的数据(由函数的输出形成的数据) |
输入数组(d_i)
RTL Ports |
说明 |
d_i_address0 |
输入读取地址,从读地址获取数据 |
d_i_ce0 |
片选信号(提供给外部的memory) |
d_i_d0 |
需要读取的数据(来自于外部的memory) |
ap_FIFO
- 数组以FIFO的接口形式体现
RTL Ports |
说明 |
d_o_din |
由函数产生,输入到FIFO中的数据 |
d_o_full_n |
FIFO满标志信号 |
d_o_write |
写数据使能 |
d_i_dout |
由外部memory的数据,传入到FIFO中 |
d_i_empty_n |
FIFO空标志信号 |
d_i_read |
读数据使能 |
需要注意的是FIFO中的数据使按一定顺序储存的,因此要求需要操作的数据有一定的顺序特征