Can you be more specific about which UDB elements (components) you are using? In general, each UDB block can be clocked at 80MHz. Depending how that UDB block is hooked up to other blocks to implement that component function will lower the operational data rate.
If you have already constructed the UDB logic for your design, there should be a timing report that might yield effective data rates.
To get the fastest read rate from a UDB FIFO, you need to do the two following things:
- Configure the datapath to be clocked by the bus clock. In the Datapath Configurator tool, there is a config register called "FIFO FAST". It has two options, "DP" or "BUS". Choose "BUS".
- The MIMO bus is clocked by the Slow Clock. Configure the Slow Clock to be the fastest, which is 100 MHz.
I have used that settings allready and in get a reat of 11MHz reading with a DMA from the "xxx__32BIT_F0_REG". That is equvalent to 9 Clock Cycles at 100MHz
I guess you are controlling the DMA using the FIFO level from the UDB, doing single transfers per trigger.
If you want to transfer faster than that, you might be able to configure more than a single transfer if your UDB logic can keep up feeding the FIFO at a faster rate.
For example, configure the DMA to transfer 256 words on one trigger.
As Rodolfo is pointing out, using the DMA has some minor latencies and some clock cycles for pre-DMA setup and post-DMA cycle for completion. Maybe someone can find a KBA about these factors.
If you have a larger FIFO available, you can dump multiple long words at a time minimizing the pre- and post- effects.
PS: Are you willing to share your project with the forum? At least a stripped down version so we can reproduce your results can possibly suggest a 'better' solution?
I use a Continues DMA Transfer with only one Initial Trigger to get that data rate. To get that working I trimmed my sample rate in regards to the CLK_Peri so that I do not get an FIFO over and underrun.
I will try to create a striped down version I can post here.