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

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

被折叠的 条评论
为什么被折叠?



