Types of Channels - 2023.1 English

Vitis Tutorials: Hardware Acceleration (XD099)

Document ID
Release Date
2023.1 English
Channel Type Examples Created By
FIFO Streams (including hls::streams and streamed arrays) User
Scalar propagation FIFOs Tool
Streams of blocks User

These FIFO channels should be thought of as “channels with their own handshake”, because:

  • Their read and write operations are scheduled.

  • Their read/write signals are driven individually by the pipeline control or the finite state machine (FSM).

  • Their full_n/empty_n signals directly stall individual iterations of a pipeline or states of the FSM.

Channel Type Examples Created By
Task Level FIFOs (TLF) Tool
Input and output ports to the upper level User

Task Level FIFOs (TLF) are scalar FIFOs which are connected to the done handshake of the producer for writing and to the start handshake of the consumer for reading. These types of FIFOs are inferred automatically by the tool. They are considered PIPO-like because of the underlying synchronization mechanism.

These channels should be thought of as “channels that use ap_ctrl_chain handshake”, because:

  • Their write and read operations are not scheduled. They are implicitly associated with the “done” handshake or the “start” handshake of a process.

  • Their write and read signals are connected to ap_done and ap_ready respectively.

  • Their full_n and empty_n are connected to ap_continue and ap_start respectively.

What really matters with respect to the analysis of depth, performance, deadlocks etc., is whether:

  • Channels have their own handshake (FIFOs). Hence their accesses are spread throughout the execution of their process. For example, you can read a FIFO outside the first II of a pipeline, or even in the last process of a dataflow network.

  • Channels are hand-shaken via ap_ctrl_chain (PIPOs). Hence their reads must be in the first II of the pipeline or in processes that are in the first “level” of a dataflow network, and similarly their writes must be in the last II or in the last “level.”

  • The other difference is based on the amount of data that is being transferred in one operation is more relevant for resource analysis than for performance: array for PIPOs and streams of blocks, scalar for streams, scalar propagation FIFOs and task-level FIFOs.