I have been familiarizing myself with VHDL and FPGAs in general with the Digilent Basys3 board. Recently I have tried incorporating the Microblaze in to my design just to familiarize myself with it. I have created a simple block diagram where I connect a custom AXI-stream counter to an AXI-DMA block. The counter just streams incrementing numbers and adds the tlast signal to generate frames. My purpose is to develop a minimum working example on AXI-DMA transfer. I plan to transfer x-number of samples generated by the AXI-stream counter with the AXI-DMA to a BRAM memory. On programming the AXI-DMA core I have followed the Xilinx manual PG021 https://www.xilinx.com/support/documentation/ip_documentation/axi_dma/v7_1/pg021_axi_dma.pdf section Direct Register Mode (Simple DMA) on page 71. Initializing the DMA works. However, after sending the transfer command to the DMA no transaction happens. I wonder whether the problem is in my C-code or the block diagram.
I have verified with the vivado ILA that the counter is working and produces a stream of data. In addition I have tied tkeep port to logical high on the s2mm port on the DMA. Is it possible I have forgotten something else? Any suggestions will be warmly welcomed.
Question
Pertti56
Hi,
I have been familiarizing myself with VHDL and FPGAs in general with the Digilent Basys3 board. Recently I have tried incorporating the Microblaze in to my design just to familiarize myself with it. I have created a simple block diagram where I connect a custom AXI-stream counter to an AXI-DMA block. The counter just streams incrementing numbers and adds the tlast signal to generate frames. My purpose is to develop a minimum working example on AXI-DMA transfer. I plan to transfer x-number of samples generated by the AXI-stream counter with the AXI-DMA to a BRAM memory. On programming the AXI-DMA core I have followed the Xilinx manual PG021 https://www.xilinx.com/support/documentation/ip_documentation/axi_dma/v7_1/pg021_axi_dma.pdf section Direct Register Mode (Simple DMA) on page 71. Initializing the DMA works. However, after sending the transfer command to the DMA no transaction happens. I wonder whether the problem is in my C-code or the block diagram.
I have verified with the vivado ILA that the counter is working and produces a stream of data. In addition I have tied tkeep port to logical high on the s2mm port on the DMA. Is it possible I have forgotten something else? Any suggestions will be warmly welcomed.
top_module.pdfAXI_DMA_minimum_example.c
Link to comment
Share on other sites
3 answers to this question
Recommended Posts
Archived
This topic is now archived and is closed to further replies.