set_directive_stream - 2023.2 简体中文

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

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

描述

默认情况下,阵列变量作为 RAM 来实现:

  • 顶层函数阵列参数作为 RAM 接口端口来实现。
  • 一般阵列作为 RAM 来实现以便进行读写访问。
  • 包含在子函数内的阵列或者基于循环的 DATAFLOW 最优化都作为 RAM 乒乓缓冲器通道来实现。

如果按顺序来使用或生成阵列中的数据,那么更有效的通信机制是使用串流数据,其中使用 FIFO 代替 RAM。当顶层函数实参的 INTERFACE 类型被指定为 ap_fifo 时,该阵列会以串流方式自动实现。如需了解更多信息,请参阅 定义接口

重要: 要保留访问,可能需要使用 volatile 限定符来阻止编译器最优化(尤其是死码消除),如 类型限定符 中所述。

语法

set_directive_stream [OPTIONS] <location> <variable>
  • <location> 是包含阵列变量的位置(格式为 function[/label])。
  • <variable> 是要作为 FIFO 来实现的阵列变量。

选项

-depth <integer>
注释: 仅与数据流通道中的阵列串流相关。
默认情况下,RTL 中实现的 FIFO 的深度与 C 语言代码中指定的阵列大小相同。该选项允许您修改 FIFO 的大小。

当在 DATAFLOW 区域内实现阵列时,经常使用 -depth 选项来减小 FIFO 的大小。例如,如果 DATAFLOW 区域中的所有循环和函数均以 II = 1 的速率来处理数据,则无需大型 FIFO,因为在每个时钟周期内都会生产和使用数据。在此情况下,-depth 选项可用于将 FIFO 大小减小为 2 以便大幅减小 RTL 设计的面积。

通过使用 config_dataflow 命令搭配 -depth 选项即可为 DATAFLOW 区域内所有阵列提供该功能。-depth 选项搭配 set_directive_stream 一起使用即可覆盖使用 config_dataflow 指定的默认设置。

-type <arg>
指定机制,可选机制包括 FIFO、PIPO、已同步的共享 (shared) 和未同步的共享 (unsync)。受支持的类型包括:
  • fifo:含指定 depth 的 FIFO 缓冲器
  • pipo:乒乓缓冲器,所含“bank”数量与指定深度相同(默认值为 2)
  • shared:含深度的共享通道,其同步方式与常规乒乓缓冲器类似,但不复制阵列数据。通过将深度设置为足够小的值以充当生产者与使用者之间的同步距离,即可确保一致性
    提示: shared 默认深度值为 1。
  • unsync:除了个别存储器读取和写入外,无任何同步。设计必须自行确保一致性(读取 - 写入和写入 - 写入顺序)

示例

指定 func 函数中要进行串流的 A[10] 阵列,并作为 FIFO 实现。

set_directive_stream func A -type fifo

func 函数中名为 loop_1 的循环中的阵列 B 设置为作为 FIFO(深度为 12)来进行串流。在此情况下,请将编译指示置于 loop_1 内。

set_directive_stream -depth 12 -type fifo func/loop_1 B

阵列 C 的串流以 PIPO 方式来实现。

set_directive_stream -type pipo func C