UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Contributor
Contributor
1,654 Views
Registered: ‎03-03-2017

Multi-channel DMA or several DMAs

Jump to solution

I have implemented the firmware that captures the data from an external ADC, processes the data and stores it in the DDR using the AXI DMA. Due to the signal processing, I'm already using the 32 bits of the AXI bus. 

 

Now I have to replicate it for 4 simultaneous ADCs. I was wondering which is a better option, to use a multi-channel DMA (the four ADCs are connected to a single DMA using an AXI Interconnect module) or 4 different AXI DMAs? 

 

In the case of multi-channel DMA, is it possible to do it in polling mode?

Tags (2)
1 Solution

Accepted Solutions
Xilinx Employee
Xilinx Employee
1,856 Views
Registered: ‎08-02-2011

Re: Multi-channel DMA or several DMAs

Jump to solution
Now I have to replicate it for 4 simultaneous ADCs

Most likely this means you want to do 4 separate instances of DMA unless your sample rate on your ADCs is slow enough that they can be time muxed into a single multichannel DMA. The AXI DMA in multichannel mode uses one single AXI Stream interface and different channels are indicated by tid/tdest signals. You can use an AXI Stream Interconnect for the muxing.

www.xilinx.com
6 Replies
Xilinx Employee
Xilinx Employee
1,857 Views
Registered: ‎08-02-2011

Re: Multi-channel DMA or several DMAs

Jump to solution
Now I have to replicate it for 4 simultaneous ADCs

Most likely this means you want to do 4 separate instances of DMA unless your sample rate on your ADCs is slow enough that they can be time muxed into a single multichannel DMA. The AXI DMA in multichannel mode uses one single AXI Stream interface and different channels are indicated by tid/tdest signals. You can use an AXI Stream Interconnect for the muxing.

www.xilinx.com
Visitor carlx
Visitor
1,424 Views
Registered: ‎12-05-2017

Re: Multi-channel DMA or several DMAs

Jump to solution

If there is only one DDR memory, the MM data from 4 separate DMA engines would still have to be time muxed. Is this correct?

 

If there are 4 DDR memories for 4 ADCs, using multichannel DMA would not make sense, right? Thanks.

0 Kudos
Xilinx Employee
Xilinx Employee
1,412 Views
Registered: ‎08-02-2011

Re: Multi-channel DMA or several DMAs

Jump to solution

This discussion is at the AXI DMA level.

 

Yes, you're right that everything will get 'scrambled' together on the other side of the AXI Interconnect and on the memory interface anyway, but that's not something you really need to worry about for the purposes of the original question. Which was about the front end and how to handle the multiple parallel streaming interfaces from the ADCs.

www.xilinx.com
0 Kudos
Scholar vanmierlo
Scholar
1,369 Views
Registered: ‎06-10-2008

Re: Multi-channel DMA or several DMAs

Jump to solution

If you use a single DMA you have to be sure that every transaction you program will end within a limited time or else the other channels will be starved. If all 4 channels always produce a fixed amount of data in each frame time this should work (with a bit of buffering).

0 Kudos
Observer nitthin21
Observer
443 Views
Registered: ‎08-01-2017

Re: Multi-channel DMA or several DMAs

Jump to solution

When we use multiple DMAs, how do we start all of them so that they work in parallel. Once I write the transfer size to the length register for one DMA, it starts the transfer and the baremetal application code blocks at this line until the interrupt is received and the interrupt handler is executed.

Xil_Out32(XPAR_AXI_DMA_0_BASEADDR + 0x28, 32);

This is the line of code where I write the length and start the transfer. Anything after this statement is executed only after the transfer is complete, interrupt occur and the interrupt handler code is run. Is there anyway that I can do this in a non-blocking way and start another DMA core immediately after I execute the above statement, without waiting for the interrupt to occur?

0 Kudos
Scholar vanmierlo
Scholar
434 Views
Registered: ‎06-10-2008

Re: Multi-channel DMA or several DMAs

Jump to solution

The only reason I can think of is bus starvation for the CPU. It needs to fetch the next instruction, but the bus is totally busy doing the DMA transfer. Doing a register write should NOT generate a wait.

0 Kudos