Since the tutorial is targeting to Z2, I modified some setting of my DMA block to make the DMA work.
I used the same source code for HLS.
The DMA block setting has small modification see PDF:
The Block design of vivado see PDF
The design ran well when you call the DMA once. When call DMA transfer again, the notebook sad the DMA is not ready. See attached PDF, look for Ipython location In [32]:
What I am wanting to achieve is to be able to call for DMA transfer and receieve multiple times, for example within a for loop.
Can you point out what went wrong?
The AXI DMA needs to have the TLAST signal.
If the TLAST is not provided, you can only read the AXI DMA only once and next time it will generate the error.
If you are sending streams of equal sizes, you need to make sure you empty the DMA each send/receive cycle. If you don’t do this, the DMA will not be idle/ready - it is waiting to finish sending data.