描述
默认情况下,阵列变量作为 RAM 来实现:
- 顶层函数阵列参数作为 RAM 接口端口来实现。
- 一般阵列作为 RAM 来实现以便进行读写访问。
- 包含在子函数内的阵列或者基于循环的 DATAFLOW 优化都作为 RAM 乒乓缓冲器通道来实现。
如果按顺序来使用或生产阵列中存储的数据,那么更有效的通信机制是使用串流数据(根据 STREAM 编译指示所指定的方式),其中使用 FIFO 代替 RAM。
语法
将 C 语言源代码中的编译指示置于所需位置的边界内。
#pragma HLS stream variable=<variable> type=<type> depth=<int>
其中:
-
variable=<variable>
- 指定要作为串流接口实现的阵列的名称。
-
depth=<int>
- 仅与 DATAFLOW 通道中的阵列串流相关。默认情况下,RTL 中实现的 FIFO 的深度与 C 语言代码中指定的阵列大小相同。该选项允许您修改 FIFO 大小以指定不同深度。
在 DATAFLOW 区域内实现阵列时,经常使用
depth
选项来减小 FIFO 的大小。例如,如果 DATAFLOW 区域中的所有循环和函数均以 II = 1 的速率来处理数据,则无需大型 FIFO,因为在每个时钟周期内都会生产和使用数据。在此情况下,depth
选项可用于将 FIFO 大小减小为 1 以便大幅减小 RTL 设计的面积。提示:config_dataflow -depth
命令能够对 DATAFLOW 区域内的所有阵列进行串流。STREAM 编译指示内指定的depth
选项会覆盖指定的<variable>
的config_dataflow -depth
设置。 - type=<arg>
- 指定机制,可选机制包括 FIFO、PIPO、已同步的共享 (
shared
) 和未同步的共享 (unsync
)。受支持的类型包括:-
fifo
:含指定depth
的 FIFO 缓冲器。 -
pipo
:乒乓缓冲器,所含“bank”数量与指定深度相同(默认值为 2) -
shared
:含深度的共享通道,其同步方式与常规乒乓缓冲器类似,但不复制阵列数据。通过将深度设置为足够小的值以充当生产者与使用者之间的同步距离,即可确保一致性。提示: shared 默认深度值为 1。 -
unsync
:除了个别存储器读取和写入外,无任何同步。设计必须自行确保一致性(读取 - 写入和写入 - 写入顺序)。
-
示例 1
以下示例指定要进行串流的阵列 A[10]
,并作为 FIFO 来实现。
#pragma HLS STREAM variable=A
示例 2
在此示例中,阵列 B
设置为以 FIFO 深度 12 来进行串流。
#pragma HLS STREAM variable=B depth=12 type=fifo
示例 3
阵列 C
的串流以 PIPO 方式来实现。
#pragma HLS STREAM variable=C type=pipo