使用阵列作为顶层函数的实参时,Vitis HLS 采用下列任一假定:
- 存储器位于偏外,并且 Vitis HLS 会在接口上综合 M_AXI 端口,以便访问该存储器,这是 Vitis 内核流程的默认行为。
- 存储器为标准块 RAM,时延为 1。这是 Vivado IP 流程的默认行为。提供地址后经过 1 个时钟周期后,数据即处于就绪状态。
要配置 Vitis HLS 创建这些端口的方式,请执行以下操作:
- 使用 INTERFACE 编译指示或指令将接口指定为 M_AXI、BRAM 或 FIFO 接口。
- 使用 INTERFACE 编译指示或指令的
storage_type
选项,将 RAM 指定为单端口或双端口 RAM。 - 使用 INTERFACE 编译指示或指令的
latency
选项,指定 RAM 时延。 - 使用阵列最优化指令 ARRAY_PARTITION 或 ARRAY_RESHAPE 重新配置阵列结构,从而重新配置 I/O 端口的数量。
提示: 由于通过存储器(RAM 或 FIFO)端口限制对数据的访问,接口上的阵列可能造成性能瓶颈。通常,您可使用最优化指令来克服这些瓶颈。
在可综合的代码中使用阵列时,必须调整阵列大小。例如,如果 阵列接口 中的声明
d_i[4]
更改为 d_i[]
,那么 Vitis HLS 会发出消息称无法综合此设计:@E [SYNCHK-61] array_RAM.c:52: unsupported memory access on variable 'd_i' which is (or contains) an array with unknown size at compile time.