Hi everyone,
I’m currently trying to implement a simple DMA → DAC → ADC → DMA loopback on my ZCU111 board using PYNQ. My goal is to send a waveform from the PS via DMA to the DAC, loop it back to the ADC through the analog path, and then retrieve the sampled data back into DDR using the DMA receive channel.
My Block Design and configuration details are provided as follows:
block design
system.pdf (117.2 KB)
Settings:
PYNQ Code:
However, I’m currently stuck at the following line in my Python code:
dma.recvchannel.wait() # program hangs here
The program hangs at wait()
, and no data is ever received.
Suspected Issues:
- TLAST not being generated on the ADC → DMA (S2MM) path, causing the DMA to never detect end-of-frame.
- The RF-ADC might not be outputting any data, due to incorrect configuration (e.g., Mixer, Decimation, Tile Clock, etc.).
- If the number of samples I want to transfer is large e.g., 2048, it will get stuck at dma.sendchannel.wait(). If the number is small, e.g. 256, it will get stuck at dma.recvchannel.wait().
Could someone please help me identify what might be wrong? Are there any critical settings in the RFDC IP or Tile Clocking tab or Subset Converter that I might have misconfigured?
Any suggestions or advice are greatly appreciated.
Thank you in advance!
Best regards,
Steven