User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 278
UG585 (v1.11) September 27, 2016
Chapter 9: DMA Controller
Table 9-12: DMAC Unaligned Transfers
Description Code MFIFO Usage
Aligned source address to unaligned
destination address
In this program, the source address is
aligned with the AXI data bus width
but the destination address is
unaligned. The destination address is
not aligned to the destination burst
size so the first DMAST instruction
removes less data than the first
DMALD instruction reads. Therefore, a
final DMAST of a single word is
required to clear the data from the
MFIFO.
DMAMOV CCR, SB4 SS64
DB4 DS64
DMAMOV SAR, 0x1000
DMAMOV DAR, 0x4004
DMALP 16
DMALD
DMAST
DMALPEND
DMAMOV CCR, SB4 SS64
DB1 DS32
DMAST
DMAEND
The first DMALD instruction loads four
double words but because the
destination address is unaligned, the
DMAC shifts them by four bytes, and
therefore it only removes three entries
on the first loop, leaving one static
MFIFO entry. Each DMAST requires
only four entries of data and therefore
the extra entry remains in use for the
duration of the program until it is
emptied by the last DMAST.
This example has a static requirement
of one MFIFO entry and a dynamic
requirement of four MFIFO entries.
Unaligned source address to aligned
destination address
In this program the source address is
unaligned with the AXI data bus width
but the destination address is aligned.
The source address is not aligned to
the source burst size so the first
DMALD instruction reads in less data
than the DMAST requires. Therefore,
an extra DMALD is required to satisfy
the first DMAST.
DMAMOV CCR, SB4 SS64
DB4 DS64
DMAMOV SAR, 0x1004
DMAMOV DAR, 0x4000
DMALD
DMALP 15
DMALD
DMAST
DMALPEND
DMAMOV CCR, SB1 SS32
DB4 DS64
DMALD
DMAST
DMAEND
The first DMALD instruction does not
load sufficient data to enable the
DMAC to execute a DMAST and
therefore the program includes an
additional DMALD, prior to the start of
the loop. After the first DMALD, the
subsequent DMALDs align with the
source burst size. This optimizes the
performance but it requires a larger
number of MFIFO entries.
This example has a static requirement
of four MFIFO entries and a dynamic
requirement of four MFIFO entries.