作者: 碎碎思,来源:<span id="profileBt"><a href="https://mp.weixin.qq.com/s?__biz=Mzg4ODA5NzM1Nw==&mid=2247487621&idx=1&…; OpenFPGA微信公众号</a></span>
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052890-10…; alt=""></center>
<strong>不同类型的DMA</strong>
GPIO
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052890-10…; alt=""></center>
PL general purpose AXI
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052890-10…; alt=""></center>
GP AXI utlilizing PS DMAC
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052890-10…; alt=""></center>
High performance w/DMA
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052890-10…; alt=""></center>
ACP w/DMA
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052890-10…; alt=""></center>
几种DMA的总结
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052890-10…; alt=""></center>
<strong>ZYNQ中不同应用的DMA</strong>
几个常用的 AXI 接口 IP 的功能(上面已经提到):
AXI-DMA:实现从 PS 内存到 PL 高速传输高速通道 AXI-HP<---->AXI-Stream 的转换
AXI-FIFO-MM2S:实现从 PS 内存到 PL 通用传输通道 AXI-GP<----->AXI-Stream 的转换
AXI-Datamover:实现从 PS 内存到 PL 高速传输高速通道 AXI-HP<---->AXI-Stream 的转换,只不过这次是完全由 PL 控制的, PS 是完全被动的。
AXI-VDMA:实现从 PS 内存到 PL 高速传输高速通道 AXI-HP<---->AXI-Stream 的转换,只不过是专门针对视频、图像等二维数据的。
AXI-CDMA:这个是由 PL 完成的将数据从内存的一个位置搬移到另一个位置,无需 CPU 来插手。
涉及到DMA主要包括AXI Centralized DMA、AXI Video DMA和AXI DMA,详细的描述及IP核如下图所示:
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052890-10…; alt=""></center>
<p align="center"><strong>图4‑39 几种DMA应用</strong></p>
具体的描述如下表:
<p align="center"><strong>表4‑19 几种应用DMA描述</strong></p>
<body>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="73" align="center" valign="top" bgcolor="#CCCCFF"><strong>类型</strong></td>
<td width="57" align="center" valign="top" bgcolor="#CCCCFF"><strong>接口名称</strong></td>
<td width="47" align="center" valign="top" bgcolor="#CCCCFF"><strong>数据位宽</strong></td>
<td width="76" align="center" valign="top" bgcolor="#CCCCFF"><strong>接口类型</strong></td>
<td width="217" align="center" valign="top" bgcolor="#CCCCFF"><strong>功能描述</strong></td>
<td width="149" align="center" valign="top" bgcolor="#CCCCFF"><strong>关键特性</strong></td>
</tr>
<tr>
<td width="73" rowspan="4" valign="top">AXI Centralized DMA<br /></td>
<td width="57" valign="top">control</td>
<td width="47" valign="top">32</td>
<td width="76" valign="top">AXI4-lite slave</td>
<td width="217" valign="top">CPU通过总线对DMA内部的源地址寄存器、目的地址寄存器、控制寄存器、状态寄存器和传输数据长度寄存器等进行初始化。</td>
<td width="149" rowspan="4" valign="top"> a 兼容总线AXI4、AXI4-lite接口协议; b AXI4数据宽度支持32、64、128、256、512、1024; c AXI4-Stream 数据宽度支持8、16、32、64、128、256、512、1024; d 可选的数据重组引擎; e 独立且异步的数据通道操作; g可选S/G模式传输和普通模式传输; h 可选存储转发。<br />
<br /></td>
</tr>
<tr>
<td width="57" valign="top">Scatter/gather </td>
<td width="47" valign="top">32</td>
<td width="76" valign="top">AXI4 master </td>
<td width="217" valign="top">从系统内存读取和更新DMA传输数据的配置信息,根据配置信息初始化CDMA传输参数,执行S/G传输模式;它卸载了CPU控制传输,实现硬件自动化。</td>
</tr>
<tr>
<td width="57" valign="top">data read </td>
<td width="47" valign="top">32、64、128、256、512、1024 </td>
<td width="76" valign="top">AXI4 master </td>
<td width="217" valign="top">根据源地址从系统内存中读取数据。 </td>
</tr>
<tr>
<td width="57" valign="top">data write </td>
<td width="47" valign="top">32、64、128、256、512、1024 </td>
<td width="76" valign="top">AXI4 master </td>
<td width="217" valign="top">根据目的地址向系统内存中写入数据。 </td>
</tr>
<tr>
<td width="73" rowspan="6" valign="top">AXI Video DMA</td>
<td width="57" valign="top">control</td>
<td width="47" valign="top">32</td>
<td width="76" valign="top">AXI4-lite slave</td>
<td width="217" valign="top">访问VDMA内部的寄存器,对DMA内部的源地址寄存器、目的地址寄存器、控制寄存器、状态寄存器和传输数据长度寄存器等进行初始化。</td>
<td width="149" rowspan="6" valign="top">a 高带宽直接存储的视频数据流;b 具有二维DMA传送操作;c 独立且异步读取和写入通道操作;d 同步耦合帧缓冲区;e 支持最大32帧缓冲区;f 支持动态时钟频率的变化;g 配置突发传输数据的大小与行缓冲区的深度;h 处理器可访问的初始化、中断、状态和管理寄存器;i 兼容AXI4、AXI4-lite、AXI4-stream接口协议;j 可选的S/G传输模式和普通模式传输。<br /></td>
</tr>
<tr>
<td width="57" valign="top">Scatter/gather </td>
<td width="47" valign="top">32</td>
<td width="76" valign="top">AXI4 master </td>
<td width="217" valign="top">从系统内存读取和更新DMA传输数据的配置信息,根据配置信息初始化VDMA传输参数,执行S/G传输模式;它卸载了CPU控制传输,实现硬件自动化。 </td>
</tr>
<tr>
<td width="57" valign="top">data memory mapped read(mm2s) </td>
<td width="47" valign="top">32、64、128、256、512、1024 </td>
<td width="76" valign="top">AXI4 master </td>
<td width="217" valign="top">根据源地址从系统内存中读取数据。 </td>
</tr>
<tr>
<td width="57" valign="top">data memory mapped write(s2mm) </td>
<td width="47" valign="top">32、64、128、256、512、1024 </td>
<td width="76" valign="top">AXI4 master </td>
<td width="217" valign="top">根据目的地址向系统内存中写入数据。 </td>
</tr>
<tr>
<td width="57" valign="top">data stream out </td>
<td width="47" valign="top">8、16、32、64、128、256、512、1024 </td>
<td width="76" valign="top">AXI4-Stream master </td>
<td width="217" valign="top">从VDMA侧到兼容AXI4-Stream流接口的数据传输;数据位宽必须不大于data memory mapped 数据的位宽。 </td>
</tr>
<tr>
<td width="57" valign="top">data stream in </td>
<td width="47" valign="top">8、16、32、64、128、256、512、1024 </td>
<td width="76" valign="top">AXI4-Stream slave </td>
<td width="217" valign="top">从兼容AXI4-Stream流接口到VDMA侧的数据传输;数据位宽必须不大于data memory mapped 数据的位宽。 </td>
</tr>
<tr>
<td width="73" rowspan="8" valign="top">AXIDMA</td>
<td width="57" valign="top">Control</td>
<td width="47" valign="top">32</td>
<td width="76" valign="top">AXI-lite Slave</td>
<td width="217" valign="top">访问DMA内部的寄存器,对DMA内部的源地址寄存器、目的地址寄存器、控制寄存器、状态寄存器和传输数据长度寄存器等进行初始化。</td>
<td width="149" rowspan="8" valign="top"> a 兼容AXI4-liteAXI4、AXI4-Stream总线接口协议; b 可选的普通传输模式和S/G模式; c 数据宽度可至1024; d 可选AXI控制流和状态流; e 两通道是独立、全双工的。</td>
</tr>
<tr>
<td width="57" valign="top">AXI MemoryMapReadMaster</td>
<td width="47" valign="top">32、64、128、256、512、1024<br /></td>
<td width="76" valign="top">AXI4 Master<br /></td>
<td width="217" valign="top">根据源地址从系统内存中读取数据。 </td>
</tr>
<tr>
<td width="57" valign="top">AXI MemoryMapwriteMaster </td>
<td width="47" valign="top">32、64、128、256、512、1024<br /></td>
<td width="76" valign="top">AXI4Master</td>
<td width="217" valign="top">根据目的地址向系统内存中写入数据。</td>
</tr>
<tr>
<td width="57" valign="top">Scatter/Gather</td>
<td width="47" valign="top">32</td>
<td width="76" valign="top">AXI4Master</td>
<td width="217" valign="top">从系统内存读取和更新DMA传输数据的配置信息,根据配置信息初始化DMA传输参数,执行S/G传输模式;它卸载了CPU控制传输,实现硬件自动化。 </td>
</tr>
<tr>
<td width="57" valign="top">DataStreamOut<br /></td>
<td width="47" valign="top">32、64、128、256、512、1024<br /></td>
<td width="76" valign="top">AXI4-StreamMaster</td>
<td width="217" valign="top">从DMA侧到兼容AXI4-Stream流接口的数据传输;数据位宽必须不大于data memory mapped 数据的位宽。 </td>
</tr>
<tr>
<td width="57" valign="top">DataStreamIn<br /></td>
<td width="47" valign="top">32、64、128、256、512、1024<br /></td>
<td width="76" valign="top">AXI4-StreamSlave</td>
<td width="217" valign="top">从兼容AXI4-Stream的流接口到DMA侧的数据传输;数据位宽必须不大于data memory mapped 数据的位宽。 </td>
</tr>
<tr>
<td width="57" valign="top">AXI ControlStreamMaster</td>
<td width="47" valign="top">32</td>
<td width="76" valign="top">AXI4-StreamMaster</td>
<td width="217" valign="top">控制memory to stream的数据流</td>
</tr>
<tr>
<td width="57" valign="top">AXIStatusStreamSlave</td>
<td width="47" valign="top">32</td>
<td width="76" valign="top">AXI4-StreamSlave</td>
<td width="217" valign="top">AXI4-Stream侧传入数据流的状态</td>
</tr>
</tbody>
</table>
</body>