描述
默认情况下,阵列变量作为 RAM 来实现。
- 顶层函数阵列参数作为 RAM 接口端口来实现。
- 一般阵列作为 RAM 来实现以便进行读写访问。
- 包含在子函数内的阵列或者基于循环的 DATAFLOW 优化都作为 RAM 乒乓缓冲器通道来实现。
如果按顺序来使用或生成阵列中的数据,那么使用串流数据更有效,其中使用 FIFO 代替 RAM。将顶层函数实参指定为 INTERFACE mode=ap_fifo 时,该阵列会作为串流来实现。如需了解更多信息,请参阅
Vitis 高层次综合用户指南(UG1399) 的“Vivado IP 流程接口”章节。
语法
syn.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 实现。
syn.directive.stream=func A type=fifo
func 函数中名为 loop_1 的循环中的阵列 B 设置为作为 FIFO(深度为 12)来进行串流。在此情况下,请将编译指示置于 loop_1 内。
syn.directive.stream=depth=12 type=fifo func/loop_1 B
阵列 C 的串流以 PIPO 方式来实现。
syn.directive.stream=type=pipo func C