The Xilinx PCI Express DMA IP provides high-performance direct memory access (DMA) via PCI Express. The PCIe DMA supports UltraScale+, UltraScale, Virtex-7 XT and 7 Series Gen2 devices; the provided driver can be used for all of these devices. Xilinx QDMA Windows Driver ¶ Xilinx QDMA Subsystem for PCIe example design is implemented on a Xilinx FPGA, which is connected to an X64 host system through PCI Express. Xilinx QDMA Windows Driver package consists of user space applications and kernel driver components to control and configure the QDMA subsystem. Download driver Xilinx Platform Cable USB II Driver version 2.0.0.3 for Windows XP, Windows Vista, Windows 7 32-bit (x86), 64-bit (x64). Screenshot of files File Name.
SoftIP DMA'S Linux driver for Microblaze and Zynq and Zynq Ultrascale+ MPSoCThis page gives an overview of Soft IP's DMA(AXI DMA/CDMA/VDMA) driver, which is available as part of the Xilinx Linux distribution and in open source linux as drivers/dma/xilinx_dma.c
AXI DMA
The AXI Direct Memory Access (AXI DMA) IP provides high-bandwidth direct memory access between memory and AXI4-Stream-type target peripherals. Its optional scatter gather capabilities also offload data movement tasks from the Central Processing Unit (CPU) in processor-based systems. Initialization, status, and management registers are accessed through an AXI4-Lite slave interface.- AXI4 and AXI4-Stream compliant
- Optional Scatter/Gather (SG) DMA support. When Scatter/gather mode is not selected the IP operates in Simple DMA mode.
- Primary AXI4 Memory Map and AXI4-Stream data width support of 32, 64, 128, 256, 512, and 1024 bits
- Optional Data Re-Alignment Engine
- Optional AXI Control and Status Streams
- Multi-channel mode
- Optional Keyhole support
- Optional Micro DMA mode support
- Support for upto 64-bit Addressing
Features supported in driver
- Optional Scatter/Gather (SG) DMA support. When Scatter/gather mode is not selected the IP operates in Simple DMA mode.
- Primary AXI4 Memory Map and AXI4-Stream data width support of 32, 64, 128, 256, 512, and 1024 bits
- Optional Data Re-Alignment Engine
- Optional AXI Control and Status Streams
- Multi-channel mode
- 64-bit Addressing support
AXI CDMA
The AXI CDMA provides high-bandwidth direct memory access (DMA) between a memory mapped source address and a memory mapped destination address using the AXI4 protocol. An optional Scatter Gather (SG) feature can be used to offload control and sequencing tasks from the System CPU. Initialization, status, and control registers are accessed through an AXI4-Lite slave interface.- AXI4 Compliant
- Primary AXI Memory Map data width support of 32, 64, 128, and 256 bits
- Primary AXI Stream data width support of 8, 16, 32, 64, 128, and 256 bits
- Optional Data Re-Alignment Engine
- Optional Gen-Lock Synchronization
- Independent, asynchronous channel operation
- Provides Simple DMA only mode and an optional hybrid mode supporting both Simple DMA and Scatter-Gather automation
- Optional Store and Forward operation mode with internal Data FIFO (First In First Out)
Features supported in driver
- Optional Scatter/Gather (SG) DMA support. When Scatter/gather mode is not selected the IP operates in Simple DMA mode.
- Primary AXI4 Memory Map and AXI4-Stream data width support of 32, 64, 128, 256, 512, and 1024 bits
- Optional Data Re-Alignment Engine
- 64-bit Addressing Support
- Simple DMA mode
- Scatter-Gather DMA mode
AXI VDMA
The AXI Video Direct Memory Access (AXI VDMA) core is a soft Xilinx IP core that provides high-bandwidth direct memory access between memory and AXI4-Stream type video target peripherals. The core provides efficient two dimensional DMA operations with independent asynchronous read and write channel operation. Initialization, status, interrupt and management registers are accessed through an AXI4-Lite slave interface.- High-bandwidth direct memory access for video streams
- Efficient two-dimensional DMA operations
- Independent, asynchronous read and write channel operation
- Gen-Lock frame buffer synchronization
- Supports maximum of 32 frame buffers
- Supports dynamic video format changes
- Configurable Burst Size and Line Buffer depth for efficient video streaming
- Processor accessible initialization, status, interrupt and management registers
- Primary AXI Stream data width support for multiples of 8-bits: 8, 16, 24, 32, etc. up to 1024 bits
- 64-bit Addressing
Features supported in driver
- 2-D Operations
- Support for maximum 32 frame buffers
- 64-bit Addressing
- Gen-lock frame buffer synchronization
AXI DMA
- No support for Keyhole feature
AXI CDMA
- None
AXI VDMA
- Configurable Burst Size and Line Buffer depth for efficient video streaming
CONFIG_DMADEVICES
CONFIG_XILINX_DMA
The driver is available at,
https://github.com/Xilinx/linux-xlnx/blob/master/drivers/dma/xilinx/xilinx_dma.c
The device tree node for AXI DMA/CDMA/VDMA will be automatically generated, if the core is configured in the HW design, using the Device Tree BSP.
Steps to generate device-tree is documented here,
http://www.wiki.xilinx.com/Build+Device+Tree+Blob
And a sample binding is shown below and the description of DT property is documented here
AXI DMA
AXI CDMA
AXI VDMA
AXI DMA
A separate test case is provided to test the functionality of IP which assumes the IP streaming interfaces are connected back-to-back in the HW design. The test client is designed to transfer the data on the streaming interface (MM2S) and compares the data received on another interface (S2MM) which is loopback'ed. This test client is available in the Linux source at,https://github.com/Xilinx/linux-xlnx/blob/master/drivers/dma/xilinx/axidmatest.c
NOTE: In ZynqMP vivado design it is mandatory to enable high address=1 (Zynq Ultrsacale+ MPSoC customization-> PS-PL configuration-> Address Fragementation-> High Address) and set AXI DMA adress width=40 bits.
For detail please refer: http://www.wiki.xilinx.com/PL+Masters
The test client can be configured in the ZynqMPSOC/Zynq/Microblaze kernel as either module or in-built,
Device-tree Node for test client
Running the test client will display the message when test is successful,
AXI CDMA
A separate test case is provided to test the functionality of IP which is designed to read the data from one location of memory and compare the data after copying data to other location of memory. This test client is available in the Linux source at,https://github.com/Xilinx/linux-xlnx/blob/master/drivers/dma/xilinx/cdmatest.c
The test client can be configured in the Zynq/Microblaze kernel as either module or in-built,
Device-tree Node for test client
Running the test client will display the message when test is successful,
AXI VDMA
A separate test case is provided to test the functionality of IP which assumes the IP streaming interfaces are connected back-to-back in the HW design. The test client is designed to transfer the data on the streaming interface (MM2S) and compares the data received on another interface (S2MM) which is loopback'ed. This test client is available in the Linux source at,https://github.com/Xilinx/linux-xlnx/blob/master/drivers/dma/xilinx/vdmatest.c
The test client can be configured in the Zynq/Microblaze kernel as either module or in-built,
Device-tree Node for test client
Running the test client will display the message when test is successful,
The current driver available in the xilinx linux git is in sync with the open source 4.9 kernel driver except for the following
- Add idle checks across the driver for all the DMA's (AXI DMA/CDMA/VDMA) before submitting the descriptor.
- Fix bug in multiple frame stores scenario in vdma
- Fix race condition in the driver for multiple descriptor scenarios for axidma.
Summary:
- Mainlined the driver
- Fixed the issues as per the commit ID
- Deleted the AXI DMA/CDMA driver and Merged the AXI DMA/CDMA code with the VDMA driver
- Merged all the 3 DMA's drivers into a single driver
Commits:
commit dma: xilinx: axidma: Fix race condition in the cyclic dma mode
dma: xilinx: axidma: Fix race condition in the cyclic dma mode
commit: vdma: sync driver with mainline
commit: vdma: sync driver with mainline
commit: dma: xilinx: Delete AXI DMA driver
dma: xilinx: Delete AXI DMA driver
commit: dma: xilinx: Delete AXI CDMA driver
dma: xilinx: Delete AXI CDMA driver
commit: dma: xilinx: Use dma_poll_zalloc
dmaengine: vdma: Use dma_pool_zalloc
commit: dmaengine: vdma: Rename xilinx_vdma_prefix to xilinx_dma
dmaengine: vdma: Rename xilinx_vdma_ prefix to xilinx_dma
commit: dmaengine: vdma: Add support for AXI DMA driver
dmaengine: vdma: Add Support for Xilinx AXI Direct Memory Access Engine
commit: dmaengine: vdma: Add support for AXI CDMA driver
dmaengine: vdma: Add Support for Xilinx AXI Central Direct Memory Acc… …ess Engine
commit: dmaengine: vdma: Add config sructure to differentiate dmas
dmaengine: vdma: Add config structure to differentiate dmas
commit: dmaengine: vdma: Add clock support
dmaengine: vdma: Add clock support
commit: dmaengine: don't crash when bad DMA channel is requested.
dmaengine: vdma: don't crash when bad channel is requested
commit: dmaengine: Add support for cyclic dma mode
dmaengine: vdma: Add support for cyclic dma mode
commit: dmaengine: use dma_pool_zalloc
dmaengine: vdma: Use dma_pool_zalloc
commit: dmaengine: Fix compilation warning in cyclic DMA mode
dmaengine: vdma: Fix compilation warning in cyclic dma mode
commit: dmaengine: Add 64-bit Addressing support for AXI DMA
dmaengine: vdma: Add 64 bit addressing support for the axi dma
commit: dmaengine: Add 64-bit Addressing support for AXI CDMA
dmaengine: vdma: Add 64 bit addressing support for the axi cdma
commit: dmaengine: Add support for multi channel mode for AXI DMA
dmaengine: vdma: Add support for mulit-channel dma mode
commit: dmaengine: Rename driver and config
dmaengine: xilinx: Rename driver and config
commit: dmaengine: use different channel names for each DMA
dmaengine: xilinx: Use different channel names for each dma
commit: dmaengine: Fix race condition in AXI DMA cyclic Mode
dmaengine: xilinx: Fix race condition in axi dma cyclic dma mode
commit: dma: update test client depends configs
dma: xilinx: Update test clients depends config option
commit: Check for channel Idle state before submitting descriptors
dma: xilinx: Check for channel idle state before submitting dma descr…
2016.4
- None
2017.1
Summary:
- Add idle checks across the driver for all the DMA's (AXI DMA/CDMA/VDMA) before submitting the descriptor.
- Fix bug in multiple frame stores scenario in vdma
- Fix race condition in the driver for multiple descriptor scenario for axidma.
Commits:
d4df1d5 dma: xilinx_dma: check for channel idle state before submitting the dma descriptor.
05ce73d dma: xilinx_dma: Fix bug in multiple frame stores scenario in vdma
3794829 dma: xilinx_dma: Fix race condition in the driver for multiple descriptor scenario for axidma.
2017.2
- None
2017.3
Summary:
- Fix issues with dma_get_slave_caps API for AXI DMA configuration.
- Fix issues with vdma mulit fstore configuration.
ed2ee32 dma: xilinx: Fix issues with vdma mulit fstore configuration
54c8b75dma: xilinx: Fix dma_get_slave_caps gaps
2017.4
Summary:
- Added support for memory sg transactions for cdma
- Fixed race conditions in the driver for cdma
- Differentiate probe based on IP type.
- Fix compiler warning.
9e8f5fc dma: xilinx: Add support for memory sg transactions for cdma
b3fe111 dma: xilinx: Fix race conditions in the driver for cdma.
61a18fd dma: xilinx: Differentiate probe based on the IP type.
322bd63dma: xilinx: xilinx_dma: Fix compilation warning.
Using Xilinx tools, iMPACT, Chipscope, ... on an UBUNTU 12.04LTS machine.
Being able to download configuration files in Xilinx FPGAs on Xilinx and othere demo boards anduse tools a iMPACT, Chipscope, and etcetera requires he installation of drivers.In the past it often was a burden to get this going, in the latest releases of the software these drivers are delivered with the installation of the software.
I'll provide here the installation procedure on an Ubuntu 12.04LTS equipped machine but thisprocedure can also be followed for other Linux distributions.
After installing the Xilinx ISE software on your machine, open a terminal window using the following key-combination:
The terminal window opens in your home directory. Change directory to where the Xilinx USB drivers can be found.
The given path points to the 64-bit drivers, for the 32-bit versions replace 'lin64' by 'lin'.
for the installation on my machine the path looks as:
Install the USB cable drivers for Xilinx tools
Install the USB cable drivers for Xilinx tools by typing in the terminal:
Provide your sudo password and the installation will start.Below is an example of the text that will appear in the terminal window while the drivers areinstalled:
It is possible to specify a directory path here for the installation of the drivers, but normally you can just accept the default given path.
The terminal screen will show a whole list of this kind of messages while all .so files areinstalled or installation is skipped because the libraries are already available.
The libraries are installed and the question is asked where to install the binaries of theXilinx USB cable drivers. Provide a path or accept the default given path by just hitting the enter/return key.
Remark:
The paths shown in the terminal text examples are those where the drivers are installed on my machine, it is possible that the install paths/locations are different for your machine and/or Linux distribution.
The binaries are installed and now the question is asked where to install the data files.Provide a pth or accept the given default by hitting enter/return.
Question asked by the installation flow where to install the runtime configuration file.As for may programs the default given path is /etc but hen wanted this can be anywere else byspecifying a custom path.
Xilinx and Digilent boards use a FTDI USB/RS232 device for communication and downloading of configuration files in the FPGA(s) on teh development / demo boards.The installation program checks if FTDI drivers are already available on the machine and if notinstalls them. Ubuntu is default equiped with Silabs USB/RS232 drivers, so the FTDI drivers willbe installed.It is again possible to specify a location for these drivers. I've let the install tool use the default given location but maybe one wants to install drivers elsewhere, possibly were theSilabs drivers are installed.
Voila, installation done and ready to be tested. Connect a development board via a USB cable to your PC and start a tool like iMPACT or Chipscope.
Example for iMPACT
Start iMPACT via the menu, if you installed the menu system as described in another article on this web page or start iMPACT from the command line.
Source the right Xilinx settings file:
Xilinx Drivers Github
Where <Install Path> is the directory path where the Xilinx tools are installed, <Version Number> is the version of the Xilinx ISE software installed on your machine, NN = 32 or 64 bit machine and FFF = csh or sh shell used.Then type:
The iMPACT GUI will start and when it asks to automatically detect the JTAG chain, respond with yes. WHen the drivers are correctly installed the JTAG chain of components on the used development board will be displayed with icons on the iMPACT canvas.