Bug + fix: ap_ctrl_none + io_parallel causes permanent TREADY=0 deadlock in Vitis HLS 2022.2 #1484
Unanswered
saiprashanth802
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
When using hls4ml with VivadoAccelerator backend, io_parallel, and ap_ctrl_none on the
return port in Vitis HLS 2022.2, the generated IP permanently asserts TREADY=0 on the
input AXI stream. The AXI DMA MM2S channel hangs indefinitely with no error flags.
Symptom
DMA status registers at offset 0x04 and 0x34 both read 0x00000000 after transfer
initiation — no error flags, halted bit clear — but the transfer never completes even
for a 1-word send.
Root cause
ap_ctrl_none removes the ap_start port. Without ap_start, the IP never enters a
data-accepting state, permanently holding TREADY=0.
Diagnosis steps
DMA never saw it)
Fix
Replace ap_ctrl_none with s_axilite on the return port in myproject_axi.cpp:
Then add an AXI Interconnect in Vivado connecting PS M_AXI_HPM0_LPD →
myproject_axi_0/s_axi_control, and pulse ap_start from the PS before each inference.
Environment
Full reproduction guide + context
https://github.com/saiprashanth802/hls4ml-rfsoc4x2
Not documented anywhere in hls4ml literature or Xilinx forums as of May 2026.
Beta Was this translation helpful? Give feedback.
All reactions