User manual
Table Of Contents
- Zynq-7000 All Programmable SoC
- Table of Contents
- Ch. 1: Introduction
- Ch. 2: Signals, Interfaces, and Pins
- Ch. 3: Application Processing Unit
- Ch. 4: System Addresses
- Ch. 5: Interconnect
- Ch. 6: Boot and Configuration
- Ch. 7: Interrupts
- Ch. 8: Timers
- Ch. 9: DMA Controller
- Introduction
- Functional Description
- DMA Transfers on the AXI Interconnect
- AXI Transaction Considerations
- DMA Manager
- Multi-channel Data FIFO (MFIFO)
- Memory-to-Memory Transfers
- PL Peripheral AXI Transactions
- PL Peripheral Request Interface
- PL Peripheral - Length Managed by PL Peripheral
- PL Peripheral - Length Managed by DMAC
- Events and Interrupts
- Aborts
- Security
- IP Configuration Options
- Programming Guide for DMA Controller
- Programming Guide for DMA Engine
- Programming Restrictions
- System Functions
- I/O Interface
- Ch. 10: DDR Memory Controller
- Introduction
- AXI Memory Port Interface (DDRI)
- DDR Core and Transaction Scheduler (DDRC)
- DDRC Arbitration
- Controller PHY (DDRP)
- Initialization and Calibration
- DDR Clock Initialization
- DDR IOB Impedance Calibration
- DDR IOB Configuration
- DDR Controller Register Programming
- DRAM Reset and Initialization
- DRAM Input Impedance (ODT) Calibration
- DRAM Output Impedance (RON) Calibration
- DRAM Training
- Write Data Eye Adjustment
- Alternatives to Automatic DRAM Training
- DRAM Write Latency Restriction
- Register Overview
- Error Correction Code (ECC)
- Programming Model
- Ch. 11: Static Memory Controller
- Ch. 12: Quad-SPI Flash Controller
- Ch. 13: SD/SDIO Controller
- Ch. 14: General Purpose I/O (GPIO)
- Ch. 15: USB Host, Device, and OTG Controller
- Introduction
- Functional Description
- Programming Overview and Reference
- Device Mode Control
- Device Endpoint Data Structures
- Device Endpoint Packet Operational Model
- Device Endpoint Descriptor Reference
- Programming Guide for Device Controller
- Programming Guide for Device Endpoint Data Structures
- Host Mode Data Structures
- EHCI Implementation
- Host Data Structures Reference
- Programming Guide for Host Controller
- OTG Description and Reference
- System Functions
- I/O Interfaces
- Ch. 16: Gigabit Ethernet Controller
- Ch. 17: SPI Controller
- Ch. 18: CAN Controller
- Ch. 19: UART Controller
- Ch. 20: I2C Controller
- Ch. 21: Programmable Logic Description
- Ch. 22: Programmable Logic Design Guide
- Ch. 23: Programmable Logic Test and Debug
- Ch. 24: Power Management
- Ch. 25: Clocks
- Ch. 26: Reset System
- Ch. 27: JTAG and DAP Subsystem
- Ch. 28: System Test and Debug
- Ch. 29: On-Chip Memory (OCM)
- Ch. 30: XADC Interface
- Ch. 31: PCI Express
- Ch. 32: Device Secure Boot
- Appx. A: Additional Resources
- Appx. B: Register Details
- Overview
- Acronyms
- Module Summary
- AXI_HP Interface (AFI) (axi_hp)
- CAN Controller (can)
- DDR Memory Controller (ddrc)
- CoreSight Cross Trigger Interface (cti)
- Performance Monitor Unit (cortexa9_pmu)
- CoreSight Program Trace Macrocell (ptm)
- Debug Access Port (dap)
- CoreSight Embedded Trace Buffer (etb)
- PL Fabric Trace Monitor (ftm)
- CoreSight Trace Funnel (funnel)
- CoreSight Intstrumentation Trace Macrocell (itm)
- CoreSight Trace Packet Output (tpiu)
- Device Configuration Interface (devcfg)
- DMA Controller (dmac)
- Gigabit Ethernet Controller (GEM)
- General Purpose I/O (gpio)
- Interconnect QoS (qos301)
- NIC301 Address Region Control (nic301_addr_region_ctrl_registers)
- I2C Controller (IIC)
- L2 Cache (L2Cpl310)
- Application Processing Unit (mpcore)
- On-Chip Memory (ocm)
- Quad-SPI Flash Controller (qspi)
- SD Controller (sdio)
- System Level Control Registers (slcr)
- Static Memory Controller (pl353)
- SPI Controller (SPI)
- System Watchdog Timer (swdt)
- Triple Timer Counter (ttc)
- UART Controller (UART)
- USB Controller (usb)

Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 260
UG585 (v1.11) September 27, 2016
Chapter 9: DMA Controller
The appropriate APB interface must be used depending on the security state in which the SLCR
register TZ_DMA_NS initializes the DMA manager to operate. For example, if the DMA manager is in
the secure state, the instruction using the secure APB interface must be used or the DMAC ignores
the instruction. The non-secure APB interface is the suggested port to use to start or restart a DMA
channel when the DMA manager is in the non-secure state, however, the secure APB interface can be
used in non-secure mode. (Refer to section 9.2.12 Security for more details.) For additional
information related to the use of the DMA PL330 controller with ARM TrustZone, refer to UG1019,
Programming ARM TrustZone Architecture on the Zynq-7000 All Programmable SoC.
Before issuing instructions using the Debug Instruction registers or the DBGCMD register, the
DBGSTATUS register must be read to ensure that debug is idle, otherwise, the DMA manager ignores
the instructions. Refer to the Debug Command register and Debug Status register in Appendix B,
Register Details.
When the DMA manager receives an instruction from an APB slave interface, it can take several clock
cycles before it can process the instruction — for example, if the pipeline is busy processing another
instruction.
Prior to issuing DMAGO, the system memory must contain a suitable program for the DMA channel
thread to execute, starting at the address that the DMAGO specifies.
Example: Start DMA Channel Thread
The following example shows the steps required to start a DMA channel thread using the debug
instruction registers.
1. Create a program for the DMA channel.
2. Store the program in a region of system memory.
Use one of the APB interfaces on the DMAC to program a DMAGO instruction as follows:
3. Poll the dmac.DBGSTATUS register to ensure that debug is idle, that is, the dbgstatus bit is 0.
Refer to the Debug Status register in Appendix B, Register Details.
4. Write to the dmac.DBGINST0 register and enter the:
a. Instruction byte 0 encoding for DMAGO.
b. Instruction byte 1 encoding for DMAGO.
c. Debug thread bit to 0. This selects the DMA manager. Refer to the Debug Instruction-0
register in Appendix B, Register Details.
5. Write to the dmac.DBGINST1 register with the DMAGO instruction byte [5:2] data, refer to the
Debug Instruction-1 register in Appendix B, Register Details. These four bytes must be set to the
address of the first instruction in the program that was written to system memory in Step 2.
Instruct the DMAC to execute the instruction that the debug instruction registers contain:
6. Write a 0 to the dmac.DBGCMD register. The DMAC starts the DMA channel thread and sets the
dbgstatus bit to 1. Refer to the Debug Command register in Appendix B, Register Details. After
the DMAC completes execution of the instruction, it clears the dbgstatus bit to 0.










