接口上的阵列 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

使用阵列作为顶层函数的实参时,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.