Description
By default, array variables are implemented as RAM:
- Top-level function array parameters are implemented as a RAM interface port.
- General arrays are implemented as RAMs for read-write access.
- Arrays involved in sub-functions, or loop-based DATAFLOW optimizations are implemented as a RAM ping pong buffer channel.
If the data stored in the array is consumed or produced in a sequential manner, a more efficient communication mechanism is to use streaming data as specified by the STREAM pragma, where FIFOs are used instead of RAMs.
ap_fifo
, the array is automatically implemented as streaming. See Managing Interface Synthesis for more information. Syntax
Place the pragma in the C source within the boundaries of the required location.
#pragma HLS stream variable=<variable> depth=<int> off
Where:
-
variable=<variable>
- Specifies the name of the array to implement as a streaming interface.
-
depth=<int>
- Relevant only for array streaming in DATAFLOW channels. By default,
the depth of the FIFO implemented in the RTL is the same size as the array specified in
the C code. This option lets you modify the size of the FIFO to specify a different
depth.
When the array is implemented in a DATAFLOW region, it is common to use the
depth
option to reduce the size of the FIFO. For example, in a DATAFLOW region when all loops and functions are processing data at a rate of II=1, there is no need for a large FIFO because data is produced and consumed in each clock cycle. In this case, thedepth
option can be used to reduce the FIFO size to 1 to substantially reduce the area of the RTL design.Tip: Theconfig_dataflow -depth
command provides the ability to stream all arrays in a DATAFLOW region. Thedepth
option specified in the STREAM pragma overrides theconfig_dataflow -depth
setting for the specified<variable>
. -
off
- Disables streaming data. Relevant only for array streaming in dataflow
channels. Tip: The
config_dataflow -default_channel fifo
command globally implies aSTREAM
pragma on all arrays in the design. Theoff
option specified here overrides theconfig_dataflow
command for the specified<variable>
, and restores the default of using a RAM ping pong buffer-based channel.
Example 1
The following example specifies array A[10]
to be streaming, and implemented as a FIFO.
#pragma HLS STREAM variable=A
Example 2
In this example, array B
is set to
streaming with a FIFO depth of 12.
#pragma HLS STREAM variable=B depth=12
Example 3
Array C
has streaming disabled. In this
example, it is assumed to be enabled by config_dataflow
-default_channel
.
#pragma HLS STREAM variable=C off