I have made a simple design to run an FFT with xilinx IP block in vivado. You can see it here: design.pdf (91.8 KB)
I then try to load data into the FFT with this small snippit:
# setup buffers of both input and output fft_in_buffer = xlnk.cma_array(shape=(N,),dtype=np.int32) fft_out_buffer = xlnk.cma_array(shape=(N*2,),dtype=np.int16) # convert to 2 16 bit numbers for total of 2*N 16 bit numbers # memcpy the input data into the buffer np.copyto(fft_in_buffer, aud_data) # trigger the dma transfers for send and receive, this will trigger the FFT too fft_data.sendchannel.transfer(fft_in_buffer) fft_data.recvchannel.transfer(fft_out_buffer) fft_data.sendchannel.wait() fft_data.recvchannel.wait()
however the wait statement always triggers “DMA channel not started”. trying to manually start the channel results in a hanging function call. The funny thing is there is data in the output buffer, its just completely non sensical.
I am running on a PYNQ-Z2 board.
Things I have tried the following things after reading the forums:
- disabled scatter engine
- added the interrupt controller
- added the fifo queues
- Tried fft throttle scheme real-time and non real-time on the FFT block
al result in the same situation. Its a bit frustrating and I’m running out of ideas. Can somebody help me?