前文介绍了DDR3扩展,然而,对于大块数据而言,使用CPU进行搬运速度较慢,因此可以使用DMA进行数据搬运。这里会使用到前文提到的中断与DDR3。
本例中使用了Vivado提供的AXI-DMA IP,其中需要用到的寄存器如下,需要注意的是LENGTH寄存器不为0时会立刻开启传输。此外,接收端会接收到AXI Stream格式的数据,需要对AXIS数据进行逻辑处理。
寄存器名
| 地址偏移量
| 作用
|
MM2S_DMACR
| 0x0000
| 使能 DMA 功能,使能 DMA 中断
|
MM2S_DMASR
| 0x0004
| 对相应位写 1 ,可以将中断置位
|
MM2S_SA
| 0x0018
| DDR 起始地址( 32 位)
|
MM2S_LENGTH
| 0x0028
| DMA 写数据长度(字节为单位)
|
具体连接图如下,由于本次使用的总线为50MHz,DMA时钟为50M;DDR3 ui_clk为100MHz;e203这里使用了10MHz。时钟的转换完全由AXI Interconnect进行控制,具体连接如下,DMA的中断信号连接到了irq_1上,当触发中断后会立刻将中断位置零,同时开始响应操作。
本例中还设计了axis4从设备端口,用于地址转换,向BRAM中存数据。在IDE中编程如下
通过逻辑分析仪可知,DMA可以正确传输