Continuously running kernels represent a category of hardware kernels engineered to operate perpetually until a reset occurs. This contrasts with conventional software acceleration kernels that are invoked, execute a task, and return control.
In traditional SW acceleration kernels, parameter modifications are restricted to kernel invocation time or during idle periods. Continuously running kernels present a different challenge: their arguments cannot be modified during execution through standard mechanisms because they operate without interruption. To address this limitation, AMD Vitis™ HLS provides the Direct I/O class, which enables dynamic modification of kernel arguments (both scalar values and memory offsets) while execution continues.
Dynamic Parameter Adjustment using Direct I/O
AMD Vitis™ HLS offers a C++ template class hls::direct_io specifically for modifying the kernel’s
scalar/ Memory offset arguments during execution.
Features of hls::direct_io
-
hls::direct_iostreams can be used only on the top-level functions - This class supports all the port-level protocols. The class supports the
following port protocols:
ap_none,ap_ack,ap_vld, andap_hs. - Direct I/O streams use blocking and non-blocking calls for read and writes.
- Direct I/O streams are coded similar to HLS Streams. However, they are implemented as wires based on the port protocols. Note: They are not implemented/synthesized as FIFO.