0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ZYNQ开发案例之DMA控制器系统设计

454398 来源:FPGA技术联盟 作者:FPGA技术联盟 2020-12-05 10:17 次阅读

1. DMA外设特点:

1. DMA引擎拥有一个灵活的指令设置DMA的传输;
2. 拥有8个cache线,每一个cache线宽度是4个字;
3. 拥有8个可以并行的DMA通道线程;
4. 拥有8个中断给中断控制器
5. 拥有8个DMA触发事件并且可以编码控制;
6. 128个(64bit)的MFIFO,在传输的时候读写端可写入到此FIFO;
7. 支持任意内存到内存的传输;

整个系统中的DMA控制器如图1所示:

图1 DMA控制器系统图

DMAC包含一个指令处理单元,其能够编码控制DMA传输,每一个线程包含一个独立的状态机处理各自的DMA事件,包括通道仲裁,通道优先级。

当一个通道线程执行加载或者存储指令的时候控制器会将指令增加到读队列和写队列中,控制器使用这些队列来存储指令,并且按队列指令顺序在AXI总线上完成传输。

2. DMA在AXI总线上传输:

所有的DMA传输使用AXI接口移动数据,包括片上内存的移动,DDR内存,以及PL上的从外设内存。PL端的从外设正常连接到DMAC外设接口上控制其数据流。DMAC在PS端可以访问到IOPs,但是正常情况下不会使用,因为这些路径不会提供数据流信号。DMAC数据路径正常使用情况如图2所示,没一个AXI路径可以执行一个读或者一个写,其中拥有好多组合,典型的DMA传输有:

内存到内存的传输(片上内存到DDR内存);

内存到PL端外设或者PL端外设到内存(DDR内存到PL端外设)。

图2 数据流传输

3. DMA的管理:

DMAC实时操作时,用户可以通过下面的指令设置DMA的传输:

DMAGO:开始一个用户指定通道的DMA传输;

DMASEV:用户指定的一个事件或者中断发生时给出信号;

DMAKILL:终止一个线程。

当DMA管理器接受到一个从APB从接口的指令后,会等待若干个时钟周期,在执行指令之前(pipeline是处于忙的状态,在执行其他指令)。

4. 多通道数据FIFO(MFIFO)

MFIFO是一个当前所有活动通道共享的,基于先进入先服务的共享资源。对于编程角度来讲,它是以份额深度可变的并行的FIFO集合,每个通道都有一个FIFO,但是所有FIFO的总深度不能超多MFIFO的大小,DMAC的MFIFO深度最大为128个64bit的大小。

5. 事件和中断:

DMAC支持16个事件,开始的8个事件是中断信号,IRQs[7:0],这8个中断都会输出到PS或者PL的中断控制器。这些事件使用内部的DMA引擎通道与通道之间的传输。EMAC的中断事件表如图3所示。

图3 事件与中断

DMA的配置实例

配置DMA做内存到内存的传输实例。

DMA配置步骤:

1. 初始化dma的命令数据结构,主要配置传输源地址,目的地址,传输长度,burst的大小等信息

2. 通过DMA的ID信息,找到DMA外设信息;

3. 初始化dma的数据结构;

4. 连接到硬件中断,将GIC中断映射到中断向量表中;

5. 通过GIC的ID信息,找到GIC外设信息;

6. 链接DMA中断和GIC,将DMA中断映射到GIC控制器上;

7. 时能GIC中断;

8. 使能硬件中断;

9. 设置中断服务函数的映射配置;

10. 开始DMA的传输;

11. 等待DMA的传输完成;

程序源码:

XDmaPs_Config *DmaConfigPtr;

    XScuGic_Config *GicConfigPtr;

    XDmaPs_Cmd DmaCmd;

    volatile int Checked = 0;

    int Index = 0;

    memset(&DmaCmd, 0, sizeof(XDmaPs_Cmd));

    DmaCmd.ChanCtrl.SrcBurstSize = 4;

    DmaCmd.ChanCtrl.SrcBurstLen = 4;

    DmaCmd.ChanCtrl.SrcInc = 1;

    DmaCmd.ChanCtrl.DstBurstSize = 4;

    DmaCmd.ChanCtrl.DstBurstLen = 4;

    DmaCmd.ChanCtrl.DstInc = 1;

    DmaCmd.BD.SrcAddr = (u32) Src;

    DmaCmd.BD.DstAddr = (u32) Dst;

    DmaCmd.BD.Length = DMA_LENGTH * sizeof(int);

    //find device

 DmaConfigPtr = XDmaPs_LookupConfig (XPAR_XDMAPS_1_DEVICE_ID);

    //config xdmaps data

    XDmaPs_CfgInitialize(&Dma,DmaConfigPtr,DmaConfigPtr->BaseAddress);

    //config gic

    //config hardware interrupt

    Xil_ExceptionInit();

 Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,(void *)&Gic);

    //find device

 GicConfigPtr = XScuGic_LookupConfig (XPAR_SCUGIC_SINGLE_DEVICE_ID);

    //config gic data

    XScuGic_CfgInitialize(&Gic,GicConfigPtr,GicConfigPtr->CpuBaseAddress);

    //connect gic handler

XScuGic_Connect(&Gic,XPAR_XDMAPS_0_FAULT_INTR,(Xil_InterruptHandler)XDmaPs_FaultISR, (void *)&Dma);

XScuGic_Connect(&Gic,DMA_DONE_INTR_0,(Xil_InterruptHandler)XDmaPs_DoneISR_0, (void *)&Dma);

    //enable gic

    XScuGic_Enable(&Gic,XPAR_XDMAPS_0_FAULT_INTR);

    XScuGic_Enable(&Gic,DMA_DONE_INTR_0);

    //enable hardware interrupt

    Xil_ExceptionEnable();

    //handler connect

XDmaPs_SetDoneHandler(&Dma,0,(XDmaPsDoneHandler)DmaDoneHandler,(void *)&Checked);

    /* Initialize source */

    for (Index = 0; Index 

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dma
    dma
    +关注

    关注

    3

    文章

    559

    浏览量

    100411
  • DDR内存
    +关注

    关注

    0

    文章

    16

    浏览量

    6820
收藏 人收藏

    评论

    相关推荐

    ZYNQ开发案ZYNQ的UART加载

    ,最终将这个文件写入到QSPIFLASH中,整个ZYNQ在配置好启动方式为FLASH启动后,便可做到上电自启动运行下载到FLASH中的用户程序。 为了实现远程加载,抛开仿真,通过UART的方式将固定的.bin文件发送给ZYNQ
    的头像 发表于 12-05 10:15 5314次阅读
    <b class='flag-5'>ZYNQ</b><b class='flag-5'>开发案</b>例<b class='flag-5'>之</b><b class='flag-5'>ZYNQ</b>的UART加载

    DMA控制器介绍

    本帖最后由 yyeee312 于 2015-11-12 15:17 编辑 DMA控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储
    发表于 11-04 22:50

    一种以DMA控制器为基础的SoC系统设计

      引言   DMA(Direct Memory Access,直接存储存取)是一种快速传送数据的机制。DMA控制器能够有效替代微处理
    发表于 09-08 11:08 2448次阅读
    一种以<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>为基础的SoC<b class='flag-5'>系统</b>设计

    基于DMA控制器的UART串行通信设计

    针对大数据量的串口间通信,在常规的UART串行数据通信的基础上,结合Cortex-M3微控制器DMA控制器的作用,实现DMA控制的UART
    发表于 04-20 10:54 46次下载
    基于<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的UART串行通信设计

    LED显示系统DMA控制器的设计

     采用并行DMA数据传输可选择MCU加DMA芯片和具有内部DMA控制器的CPU两种方案,从系统结构和成本以及
    发表于 12-06 10:15 3265次阅读
    LED显示<b class='flag-5'>系统</b><b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的设计

    NiosⅡ系统DMA控制器的原理及应用

    DMA控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储与每个具有DMA能力的外设连接起来的
    发表于 12-07 08:51 2401次阅读
    NiosⅡ<b class='flag-5'>系统</b>中<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的原理及应用

    dma控制器芯片8257资料介绍

    DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术,又可以指实现该技术的硬件模块(对于通用计算机PC而言,DMA控制逻辑由CPU和DMA
    发表于 12-07 10:23 1.7w次阅读
    <b class='flag-5'>dma</b><b class='flag-5'>控制器</b>芯片8257资料介绍

    dma控制器由什么组成?

    DMA(Direct Memory Access)控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储与每个具有
    发表于 12-07 14:43 3644次阅读
    <b class='flag-5'>dma</b><b class='flag-5'>控制器</b>由什么组成?

    基于AXI总线的DMA控制器的设计

    一般而言,DMA控制器的功能与结构是由本单位特定的系统结构决定的。但是作为IP而言,DMA控制器又要有其一般性。
    发表于 12-07 15:48 6354次阅读
    基于AXI总线的<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的设计

    dma控制器由什么组成

    DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术,又可以指实现该技术的硬件模块(对于通用计算机PC而言,DMA控制逻辑由CPU和DMA
    发表于 12-07 16:08 5506次阅读
    <b class='flag-5'>dma</b><b class='flag-5'>控制器</b>由什么组成

    PIC24F系列参考手册直接存储访问控制器DMA

    本文主要介绍了PIC24F系列参考手册直接存储访问控制器DMA)。
    发表于 06-06 17:28 5次下载

    可提高系统响应速度的DMA控制器SoC系统架构

    在图1所示架构中,每次DMA传输都要发起1次读与1次写操作。若在DMA传输期间有需要紧急处理的异常响应,AHB总线此时又被DMA控制器占用,则处理
    发表于 08-24 15:34 1891次阅读
    可提高<b class='flag-5'>系统</b>响应速度的<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>SoC<b class='flag-5'>系统</b>架构

    dma控制器的组成

    一个DMA控制器,实际上是采用DMA方式的外围设备与系统总线之间的接口电路,这个接口电路是在中断接口的基础上再加DMA机构组成。习惯上将
    的头像 发表于 04-01 16:08 1.1w次阅读

    dma控制器是什么_dma控制器工作方式

    DMA(Direct Memory Access)控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储与每个具有
    发表于 11-15 10:25 1.3w次阅读

    如何调试 Zynq UltraScale+ MPSoC VCU DDR 控制器

    Zynq UltraScale+ MPSoC VCU DDR 控制器是一款专用 DDR 控制器,只支持在 Zynq UltraScale+ MPSoC EV 部件上与
    发表于 02-23 06:00 15次下载
    如何调试 <b class='flag-5'>Zynq</b> UltraScale+ MPSoC VCU DDR <b class='flag-5'>控制器</b>?