This page gives an overview of zdma driver which is available as part of the Xilinx Vivado and Vitis distribution. ZDMA is a general purpose DMA designed to support memory to memory and memory to IO buffer transfers.
Zynq Ultrascale+ MPSOC has two instance of general purpose ZDMA.
One is located in FPD (full power domain) which usually called as GDMA and other is located in LPD (low power domain) which usually called as ADMA.
Versal has one instance of general purpose DMA in LPD (low power domain) known as ADMA.
For more information, please refer to ADMA/GDMA chapter in ZynqMP TRM (UG1085) or Versal TRM (AM011).
The source code for the driver is included with the Vitis Unified Software Platform installation, as well as being available in the Xilinx Github repository.
The driver source code is organized into different folders. The table below shows the ZDMA driver source organization.
Provides the API and data structure details
Driver .tcl and .mdd file
Example applications that show how to use the driver features
Driver source files
For a full list of features supported by this IP, please refer to ADMA/GDMA chapter in ZynqMP TRM (UG1085) or Versal TRM (AM011) for respective devices.
Controller/Driver features supported
GMDA & ADMA are configured each with 8 DMA channels and and each channel can be programmed secure or non-secure.
It support two DMA Modes
Simple DMA mode
Scatter Gather DMA mode
In Scatter gather Mode it supports 2 types of descriptors out of 3 that h/w supports
Linked list descriptor
Interrupt Accounting Support
INCR and Fixed burst are supported.
Known Issues and Limitations
Hybrid list descriptors are not supported.
Flow controller feature is not supported
Peripheral DMA is not tested/supported.
ZDMA driver supports a interrupt examples in various operating modes describing how its different features can be exercised. These example applications can be imported into the Vitis IDE from the Board Support Package settings tab.
Links to Examples
Example Application Usage
ZDMA Selftest example
Basic ZDMA selftest example to check sanity and use core APIs.
Successfully ran ZDMA Selftest Example
ZDMA Write-only example
ZDMA example demonstrating write-only feature.
Successfully ran Write Only mode ZDMA Example
ZDMA Read-only example
ZDMA example demonstrating read-only feature.
Successfully ran ZDMA Read Only Example
ZDMA SG Linear example
ZDMA example demonstrating Scatter Gather Linear descriptor mode.
Successfully ran ZDMA Linear mode Example
ZDMA SG Linked list example
ZDMA example demonstrating Scatter Gather Linked list descriptor mode.
Successfully ran ZDMA Linked list Example
ZDMA Simple DMA example
ZDMA example demonstrating Simple DMA mode.
Successfully ran ZDMA Simple Example
Example Design Architecture
No functional changes