ZYNQ中的AXI DMA

AXI DMA简介
  • DMA—直接内存访问—从外设到内存或者从内存到外设,不干涉CPU

  • 硬核DMA和DMA软核如何选择

    • 硬核—内存到内存、内存到PL(通过GP传输速率低)、内存到IO外设
    • 软核—从PL部分将大量数据进行搬运到内存(连接到HP速率更高)
  • 传输对象—提供从内存memory到AXI4-Stream外设的高带宽的数据搬移,其可选的S/G功能可以将CPU从数据搬运任务中解放出来

  • AXI DMA接口分析

    • AXI4-Lite接口对寄存器做一些配置和获取状态
    • MM2S,就是存储器映射到AXI4-Stream
    • S2MM,就是AXI4-Stream到存储器映射
  • 下图是一个AXI DMA应用在以太网接口外设的框架图
    在这里插入图片描述

  • 接口时钟介绍

    • AXI DMA有两种时钟模式—异步和同步
    • 同步模式下—运行在单一的时钟源下
      • m_axi_sg_aclk, m_axi_mm2s_aclk,m_axi_s2mm_aclk接入同一时钟
      • s_axi_lite_aclk连接到更低的时钟源上
    • 异步模式—四个时钟源都可以不同,但要满足如下条件
      • s_axi_lite_aclk <= m_axi_sg_aclk
      • m_axi_sg_aclk <= m_axi_mm2s_aclk or m_axi_s2mm_aclk
    • 复位时钟
      • axi_resetn至少需要16个慢时钟周期同时要和s_axi_lite_aclk同步
  • 配置顺序

    • 单一DMA传输模式
      • 通过访问DMACR、源地址或者目的地址和长度寄存器发起DMA传输
      • 当传输完成后,如果使能了产生中断输出,那么DMASR寄存器相关联的通道位会有效,产生中断
      • DMA的MM2S通道的启动顺序
        • 开启/使能MM2S通道
        • 如果需要的话,可以使能中断
        • 写一个有效的源地址到MM2S_SA寄存器(如果没有使能DRE的功能,在指定起始地址时,需要注意字节地址对齐,哪些地址是对齐或者不对齐的,取决于Stream流的数据位宽)
        • 写传输的字节数到MM2S_LENGTH寄存器—必须最后一个配置这个寄存器,其他三步寄存器无所谓顺序
      • S2MM通道的启动顺序
        • 开启/使能S2MM通道
        • 如果需要的话,可以使能中断
        • 写一个有效的目的地址到S2MM_SA寄存器(如果没有使能DRE的功能,在指定起始地址时,需要注意字节地址对齐,哪些地址是对齐或者不对齐的,取决于Stream流的数据位宽)
        • 写传输的字节数到S2MM_LENGTH寄存器—必须最后一个配置这个寄存器,其他三步寄存器无所谓顺序
      • 单一模式的缺点—传输地址一旦开始就相对固定,不能更改
    • S/G模式
      • 他把传输的基本参数,存储在内存中,因此,完全不需要打扰CPU进行
      • 这些参数被称为BD
      • 在工作时,通过SG接口加载和更新BD中的状态
    • 循环DMA模式
      • 基于S/G模式
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Zynq是一款集成了ARM处理器和可编程逻辑的系统级芯片。AXI DMA(Advance Extensible Interface Direct Memory Access)是Zynq用于数据传输的IP核。循环读取是一种使用AXI DMA实现连续数据传输的方法。 循环读取是为了实现数据流的连续性,也就是通过持续地读取数据来实现数据的无缝传输。在Zynq的设计AXI DMA可以通过配置寄存器和相关设置来实现循环读取。 首先,需要配置AXI DMA的传输模式为循环模式。循环模式下,AXI DMA会在读取完一块数据后,自动跳转到下一块数据进行读取,实现循环的效果。这样就可以实现在连续的周期不断地读取数据。 其次,需要设置相关寄存器来确定数据的传输大小和存储位置。可以通过设置源和目标地址,以及传输长度来确定数据的读取范围。在循环读取,需要将目标地址设置为缓冲区的起始地址,然后设置传输长度为缓冲区的大小,这样可以实现在循环不断地将数据写入缓冲区。 最后,需要在ARM处理器编写软件代码来控制AXI DMA的启动和停止。可以通过编写断处理函数,当AXI DMA完成一次传输时,触发断,并在断处理函数判断是否继续进行下一次传输。通过循环读取的方式,可以实现连续地读取数据,并在需要时进行处理或存储。 总之,使用ZynqAXI DMA实现循环读取需要配置AXI DMA的传输模式、设置传输的地址和长度,并编写相关的软件代码来控制传输的启动和停止。这样可以实现在连续的周期循环读取数据,以满足特定应用的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值