AXI DMA IP Core(二)IP核接口&编程描述

目录

01 系统连接

AXI DMA系统连接

02 接口描述

Clocking接口

时钟输入接口

复位接口

03 编程思路

Direct Register Mode(Simple DMA)

Scatter/Gather Mode

Cyclic DMA Mode

04 文章总结


大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程师。

上一篇推送中对AXI DMA的功能特性、引脚信号、寄存器进行了说明,本篇推送主要是对AXI DMA的连接使用、时钟信号、编程步骤进行说明。如需要更详细深入地了解,建议详看Xilinx官方文档《PG021_axi_dma.pdf》。


01 系统连接

AXI DMA系统连接

  • MicroBlaze(软核)系统连接框图如下:

图片

模块说明
①微处理器MicroBlaze是Xilinx的软核,使用ZYNQ芯片的硬核连接时,连接的方式是一致的。
②内存DDRx内存控制器,DMA通过AXI总线对内存进行寻址和读写数据。
③DMAAXI DMA IP核。
④ETH流设备AXI Ethernet外设,通过AXI-Stream总线与DMA进行数据交互。

特别说明:

在微处理器、内存、AXI DMA之间的通信总线是AXI总线,其是基于memory-mapped(内存映射)方式,即控制操作是通过读写寄存器进行控制的;

而AXI DMA是通过AXI-Stream总线与其他的流外设进行通信;对于AXI、AXI-Lite、AXI-Stream总线的总结介绍后续会有推送;


02 接口描述

Clocking接口

  • 时钟输入接口

接口信号说明
m_axi_mm2s_aclkMM2S接口时钟
m_axi_s2mm_aclkS2MM接口时钟
s_axi_lite_aclkAXI Lite接口时钟
m_axi_sg_clkScatter Gather接口时钟

  • 时钟模式

模式

说明
asynchronous
(异步模式)
在异步模式下,其允许数据路径运行在更高的时钟频率(比DMA的任何时钟高),有助于FPGA的placement和timing
synchronous
(同步模式)
在同步模式下,所有的逻辑都在同一个时钟域中运行。m_axi_mm2s_aclk、m_axi_s2mm_aclk、m_axi_sg_clk必须连接到同一个时钟源;s_axi_lite_aclk可以与其他一样连接或者连接低于其他频率的时钟

异步模式下Core信号与时钟域的关系如下:

图片


复位接口

对于AXI DMA Core而言,axi_resetn复位同步于s_axi_lite_aclk,并且信号的低电平至少维持16个时钟脉冲(s_axi_lite_aclk)。


03 编程思路

Direct Register Mode(Simple DMA)

Simple DMA模式提供了一个消耗较少的资源、通过MM2S和S2MM通道进行数据传输的DMA方式。传输通过读写DMACR、Source Address、Destination Address以及Length寄存器进行控制。通过S2MM通道进行DMA操作如下表所示:

操作通道实现描述

S2MM[接收]

(从机->主机)

  1. 使能S2MM通道。通过将S2MM_DMACR寄存器的RS位写1来使能通道;

  2. 开启S2MM中断。对S2MM_DMACR寄存器的IOC_irqEn位、Err_IrqEn位写1开启完成中断、错误中断;

  3. 向目标地址寄存器写入目标地址。当地址空间小于32位寻址时,向S2MM_DA寄存器写入地址;否则向S2MM_DA MSB寄存器写入地址;

  4. 对齐数据字节宽度。主要是对齐流传输的数据宽度;

  5. 向S2MM_LENGTH寄存器写入要接收的字节数;

MM2S[发送]

(主机->从机)

  1. 使能MM2S通道。通过将MM2S_DMACR寄存器的RS位写1来使能通道;

  2. 开启MM2S中断。对MM2S_DMACR寄存器的IOC_IrqEn位、Err_IrqEn位写1开启完成中断、错误中断;

  3. 向源地址寄存器写入源地址。当地址空间小于32位寻址时,向MM2S_SA寄存器写入地址;否则向MM2S_SA MSB寄存器写入地址;

  4. 向MM2S_LENGTH寄存器写入要传输的字节数;

特别说明:

其他步骤的顺序可以不一致,MM2S_LENGTH寄存器的写入操作必须是最后执行。


Scatter/Gather Mode

AXI DMA操作需要memory-resident(内存常驻)数据结构来维持DMA操作的实现以及信息的记录,该数据结构就是Descriptor(描述符)。

每个Descriptor有一个指针,指针指向下一个描述符,即组成了Descriptor Chain(描述符链表)。

SG模式通过描述符以及其组成的链表来维持DMA执行、信息记录等操作的实现。通过Descriptor进行DMA操作如下表所示:

操作通道描述

MM2S[发送]

(主机->从机)

  1.  向Current Descriptor寄存器写入start descriptor的地址;

  2. 使能MM2S通道。通过将MM2S_DMACR寄存器的RS位写1来使能通道;

  3. 开启MM2S中断。对MM2S_DMACR寄存器的IOC_IrqEn位、Err_IrqEn位写1开启完成中断、错误中断;

  4. 向Tail Descriptor寄存器写入一个有效的地址;Tail Descriptor写入地址后,会触发DMA从内存获取descriptors;

  5. 读取的descriptors会被执行,数据从memory中被读取,然后通过MM2S stream 通道输出;

S2MM[接收]

(从机->主机)

  1.  向Current Descriptor寄存器写入start descriptor的地址;

  2. 使能S2MM通道。通过将S2MM_DMACR寄存器的RS位写1来使能通道;

  3. 开启S2MM中断。对S2MM_DMACR寄存器的IOC_irqEn位、Err_IrqEn位写1开启完成中断、错误中断;

  4. 向Tail Descriptor寄存器写入一个有效的地址;Tail Descriptor写入地址后,会触发DMA从内存获取descriptors;

  5. 读取的descriptors会被执行,数据通过S2MM Stram通道读入,然后写入到memory中;


Cyclic DMA Mode

AXI DMA可以运行在Cyclic模式,将Tail Descriptor的指针指向Start Descriptor,即组成了循环模式。在循环模式下,DMA不间断地获取和处理Descriptor Chain的内容。跟Scatter/Gather模式不同,向Tail Descriptor寄存器写入地址时仅仅是启动DMA传输。当DMA执行到Tail Descriptor时不会停止,而是跳转回Start Descriptor继续执行。模型如下所示:

图片


04 文章总结

对于开发者而言,要深入了解该IP核的具体内容,还得是啃官方的参考文档部分内容。

参考文档:

《PG021_axi_dma.pdf》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰克拉力船长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值