配置数据流存储器通道 - 2023.2 简体中文

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

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

Vitis HLS 会根据用户选择,将任务之间的通道作为 PIPO 或 FIFO 缓冲器来加以实现:

  • 对于标量,Vitis HLS 会自动推断 FIFO 作为通道类型。
  • 如果生产者或使用者的参数为阵列,那么用户可以基于以下考量来选择将通道作为 PIPO 还是 FIFO 来实现:
    • 如果始终顺序访问数据,那么用户可以选择将此存储器通道作为 PIPO/FIFO 来实现。选择 PIPO 的优势在于,PIPO 从不发生死锁,但需要耗用更多存储器。选择 FIFO 的优势在于,所需存储器较少,但如果 FIFO 大小不正确,则存在发生死锁的风险。
    • 如果按任意顺序访问数据,那么存储器通道必须作为 PIPO 来实现(默认大小是原始阵列的两倍)。

      提示: PIPO 可确保通道始终具有保存在一次迭代内生成的所有样本(不出现丢失)所需的容量。

指定 FIFO 通道大小会覆盖该工具计算所得的默认值,以尝试对吞吐量进行最优化。如果设计中的任何函数生成或使用的样本都可大于指定的 FIFO 大小,那么 FIFO 可能变为空(或满)。在此情况下,设计将停止操作,因为它无法读取(或写入)。这可能导致死锁停滞状态。

提示: 如果造成死锁状态,那么仅当执行 C/RTL 协同仿真时或者在完整的系统中使用此块时,您才会看到此状态。

设置 FIFO 的深度时,AMD 建议将初始深度设置为传输的数据值的最大数量(例如,任务间传递的阵列的大小)、确认设计能够成功通过 C/RTL 协同仿真,然后减小 FIFO 大小并确认 C/RTL 协同仿真仍可成功完成且不会出现任何问题。如果 RTL 协同仿真失败,那么 FIFO 大小可能太小,而无法阻止出现停滞或死锁状况。Vitis HLS GUI 现在支持自动判定要使用的适当 FIFO 大小。此外,运行 RTL 协同仿真后,Vitis HLS IDE 可显示一长段时间内每个 FIFO/PIPO 缓冲器的大小的直方图。这有助于判定每个缓冲器的最佳深度。