SPRUIE9D May 2017 – May 2024 DRA74P , DRA75P , DRA76P , DRA77P
Each logical channel can handle 4D transfers from system memory to SIMCOP memory and vice versa.
A frame is composed of SIMCOP_DMA_CHAN_FRAME_i[9:0] XCNT * SIMCOP_DMA_CHAN_FRAME_i[25:16] YCNT 2D blocks of data. A single 2D block of data is transferred each time a logical channel is in the RUNNING state.
The size of a 2D block is SIMCOP_DMA_CHAN_BLOCK_SIZE_i[13:4] XNUM * SIMCOP_DMA_CHAN_BLOCK_SIZE_i[28:16] YNUM words of 128 bits. The SIMCOP DMA can transfer only full 128-bit words.
2D blocks may overlap in system memory. This feature is typically used for source data fetches from system memory to handle filter dependencies. If this feature is not used, software must set:
Figure 9-190 shows DMA addressing.
The base position of 2D blocks in system memory is automatically computed by the SIMCOP DMA. The base address is computed using the following formula:
SMEM_BASE = SIMCOP_DMA_CHAN_SMEM_ADDR_i[31:4] ADDR +
Bx × SIMCOP_DMA_CHAN_BLOCK_STEP_i[14:4] XSTEP +
By × SIMCOP_DMA_CHAN_BLOCK_STEP_i[29:16] YSTEP × SIMCOP_DMA_CHAN_SMEM_OFST_i[19:4] OFST
All 2D blocks of a logical channel have the same location in SIMCOP local memories:
BUF_BASE = SIMCOP_DMA_CHAN_BUF_ADDR_i[23:4] ADDR
The same functionality can also be used to read or write sparse data from SDRAM.
Software can poll the status of a channel using the SIMCOP_DMA_CHAN_CURRENT_BLOCK_i register. It holds the Bx, By values of the last-transferred 2D block. The Bx, By values are reset when a channel is enabled (set the SIMCOP_DMA_CHAN_CTRL_i[0] ENABLE bit) and they are updated when a channel enters the RUNNING state.
Figure 9-191 shows an example of a 2-block large transfer.