The DMA controller reads data from the source address through the host read port, and then writes to the destination address through the host write port. You program the DMA controller using byte addresses. Read and write start addresses should be aligned to the transfer size. For example, to transfer data words, if the start address is 0, the address will increment to 4, 8, and 12. For heterogeneous systems where a number of different agent devices are of different widths, the data width for read and write hosts matches the width of the widest data-width agent addressed by either the read or the write host. For bursting transfers, the burst length is set to the DMA transaction length with the appropriate unit conversion. For example, if a 32-bit data width DMA is programmed for a word transfer of 64 bytes, the length registered is programmed with 64 and the burst count port will be 16. If a 64-bit data width DMA is programmed for a doubleword transfer of 8 bytes, the length register is programmed with 8 and the burst count port will be 1.
There is a shallow FIFO buffer between the host read and write ports. The default depth is 2, which makes the write action depend on the data-available status of the FIFO, rather than on the status of the host read port.
Both the read and write host ports can perform Avalon® transfers with flow control, which allows the agent peripheral to control the flow of data and terminate the DMA transaction.
For details about flow control in Avalon® -MM data transfers and Avalon® -MM peripherals, refer to Avalon® Interface Specifications.