HLS Stream Library
Streaming data is a type of data transfer in which data samples are sent in sequential order
starting from the first sample. Streaming requires no address management.
Modeling designs that use streaming data can be difficult in C. As discussed in Multi-Access
Pointer Interfaces: Streaming Data in Chapter 3, the approach of using pointers to perform
multiple read and/or write accesses can introduce issues, because there are implications for
the type qualifier and how the test bench is constructed.
Vivado HLS provides a C++ template class hls::stream<> for modeling streaming data
structures. The streams implemented with the hls::stream<> class have the following
• In the C code, an hls::stream<> behaves like a FIFO of infinite depth. There is no
requirement to define the size of an hls::stream<>.
• They are read from and written to sequentially. That is, after data is read from an
hls::stream<>, it cannot be read again.
• An hls::stream<> on the top-level interface is by default implemented with an
• An hls::stream<> internal to the design is implemented as a FIFO with a depth of 1.
The optimization directive STREAM is used to change this default size.
Using HLS Streams
1.Xilinx UG902, Chapter 2, Vivado Design Suite User Guide High-Level Synthesis