PYNQ开发板使用-使用DMA进行数据搬移-Scatter Gather(sg) DMA transfer 模式

本文深入探讨了Xilinx AXI_CDMA的ScatterGather模式,详细讲解了SG模式的配置步骤、中断配置以及硬件平台设计。通过对比简单传输模式,分析了SG模式在并发处理上的优势和潜在问题,特别关注了DMA解码错误的排查。

上一篇使用了axi_cdma的简单传输模式,发现在板级支持包里有他的SG_intr和SG_poll模式的使用例程。因此想尝试sg模式在并发处理上的效果。本篇目的:学习如何使用AXI_CDMA_SG_MODE,并且与上一篇simple Mode的工作效率进行对比。(目前应用中出现了某个配置上的错误导致传输中断,打印状态寄存器发现是DMA解码错误,使用的就是官方例程bsp_xaxicdma_example_sg_intr。具体排查在文末)

目录

1 AXI_CDMA

1.1 什么是Scatter Gather Mode

1.2 Scatter Gather Mode配置步骤

1.3 AXI_CDMA中断配置:中断合并和中断延时

2 AXI_CDMA硬件平台:fpga资源分配和设计

3 SDK工程建立及运行

4 打桩排查流程

5 拟解决方案


1 AXI_CDMA

   AXI_CDMA是xilinx的一个IP核,可以从官网找的其手册《AXI Central DirectMemory Access v4.1》,放一个该IP核的原理图

                                         

该图对应第二章的axi_cdma_0  IP,由axi_smc桥接ps端,支持高速的axi hp协议。

1.1 什么是Scatter Gather Mode

     “Scatter Gather是一种机制,它允许通过传输描述符的预编程指令列表自动进行数据传输调度。 该指令列表由您的软件应用程序编程为必须由AXI CDMA SG接口访问的内存驻留数据结构。 该指令列表被组织成所谓的传输描述符链。 每个描述符都有一个指向要处理的下一个顺序描述符的地址指针。 链中的最后一个描述符通常指向链中的第一个描述符,但这不是必需的。”

以上简介来自AXI_CDMA ip使用手册,说的有点笼统,但是有两个重要概念:1.需要有一种可以使得AXI_CDMA可以直接访问的数据类型。2.AXI_CDMA可以按照这个类型的数据所构成的链表(是一个buffer descriptors 构成的ring,简称BDsRing )。但是这个描述中没有描述SG模式相对于简单传输模式的特征:并发性。不太清楚该IP核是如何实现并发的,但是BD ring这个结构传递给AXI_CDMA之后,该IP就可以实现BD的并发传输。工作效率应该高于简单传输模式。

要搞明白Scatter Gather机制需要进一步了解cache和DMA的关系(有关于cache DMA一致性)才能更好的理解AXI_CDMA 是如何根据BD ring来指导搬移数据的。

在阅读了AXI_CDMA_SG_INTR的SDK历程相关代码之后,我梳理出了上述Scatter Gather机制:

1)首先说明在源码中宏定义了三段地址空间:

                                       

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值