The execution mode of a Vitis kernel or
Vivado IP is defined by the block-level control
protocol and the structure of sub-functions within the HLS design. For control-driven TLP the
ap_ctrl_chain
and ap_ctrl_hs
protocols support both
sequential or pipelined execution. For data-driven TLP ap_ctrl_none
is the
required control protocol.
The ap_ctrl_chain
control protocol is the default for the
Vitis kernel flow as explained in Interfaces for Vitis Kernel Flow. The ap_ctrl_hs
block-level
control protocol is the default for the Vivado IP flow as
described in Interfaces for Vivado IP Flow. However, you should use
ap_ctrl_chain
when chaining HLS designs together to better support
pipelined execution.
ap_return
for the return value.
s_axilite
) all the ports in the control protocol are bundled
into the s_axilite
interface. This is a common practice
for software-controllable kernels or IP when an application or software driver is used to
configure and control when the block starts and stops operation. This is a requirement of
XRT and the Vitis kernel flow.ap_ctrl_chain
The following figure shows the behavior of the block-level handshake signals created by the
ap_ctrl_chain
control protocol. In the following figure, the first
transaction of the HLS design completes, and the second transaction starts immediately
because ap_continue
is High when ap_done
is High. However, the design halts at the end of the second transaction
until ap_continue
is asserted High.
- The block waits for
ap_start
to go High before it begins operation. - Output
ap_idle
goes Low immediately to indicate the design is no longer idle. - The
ap_start
signal must remain High untilap_ready
goes High. Onceap_ready
goes High:- If
ap_start
remains High the design will start the next transaction. - If
ap_start
is taken Low, the design will complete the current transaction and halt operation.
- If
- Data can be read on the input ports.
- Data can be written to the output ports.Note: The input and output ports can also specify a port-level I/O protocol that is independent of the control protocol. For details, see Port-Level Protocols for Vivado IP Flow.
- Output
ap_done
goes High when the block completes operation.Note: If there is anap_return
port, the data on this port is valid whenap_done
is High. Therefore, theap_done
signal also indicates when the data on outputap_return
is valid. - The
ap_ctrl_chain
control protocol provides an active-Highap_continue
signal that indicates when the downstream block that consumes the output data is ready for new data inputs. This allows the downstream block to provide back-pressure to prevent the flow of data.- If the
ap_continue
signal is High whenap_done
is High, the design continues operating. - If the downstream block is not able to consume new data inputs,
the
ap_continue
signal is Low. If theap_continue
signal is Low whenap_done
is High, the design stops operating, theap_done
signal remains High waiting forap_continue
to go High.
- If the
- When the design is ready to accept new inputs, the
ap_ready
signal goes High. Theap_ready
port of a downstream block can directly drive theap_continue
port. Following is additional information about theap_ready
signal:- The
ap_ready
signal is inactive until the design starts operation. - In non-pipelined designs, the
ap_ready
signal is asserted at the same time asap_done
. - In pipelined designs, the
ap_ready
signal might go High at any cycle afterap_start
is sampled High. This depends on how the design is pipelined. - If the
ap_start
signal is Low whenap_ready
is High, the design executes untilap_done
is High and then stops operation. - If the
ap_start
signal is High whenap_ready
is High, the next transaction starts immediately, and the design continues to operate.
- The
- The
ap_idle
signal indicates when the design is idle and not operating. Following is additional information about theap_idle
signal:- If the
ap_start
signal is Low whenap_ready
is High, the design stops operation, and theap_idle
signal goes High one cycle afterap_done
. - If the
ap_start
signal is High whenap_ready
is High, the design continues to operate, and theap_idle
signal remains Low.
- If the
ap_ctrl_hs
The ap_ctrl_hs
control protocol has the same signals as
ap_ctrl_chain
, but sets the ap_continue
signal to 1 so
it remains high. This control protocol supports sequential and piplined execution modes, but
does not offer back-pressure from downstream design modules to control the flow of data.
ap_ctrl_none
ap_ctrl_none
also has the same signals as ap_ctrl_chain
,
but the handshake signal ports (ap_start
,
ap_idle
, ap_ready
, and ap_done
) are set high and optimized away.
ap_ctrl_none
control protocol in your design, you must
meet at least one of the conditions for C/RTL co-simulation as described in Interface Synthesis Requirements to verify the RTL
design. If at least one of these conditions is not met, C/RTL co-simulation halts with the
following
message:@E [SIM-345] Cosim only supports the following 'ap_ctrl_none' designs: (1)
combinational designs; (2) pipelined design with task interval of 1; (3) designs with
array streaming or hls_stream ports.
@E [SIM-4] *** C/RTL co-simulation finished: FAIL ***