告别仿真困惑:在Vivado 2017.4里手把手跑通AXI CDMA的Scatter Gather模式

张开发
2026/4/20 19:51:43 15 分钟阅读

分享文章

告别仿真困惑:在Vivado 2017.4里手把手跑通AXI CDMA的Scatter Gather模式
深入解析AXI CDMA Scatter Gather模式从寄存器配置到波形分析的实战指南在FPGA开发中AXI CDMACentral Direct Memory Access控制器是实现高效数据搬运的核心IP之一。特别是其Scatter GatherSG模式能够通过描述符表实现复杂的数据传输任务大幅减轻CPU负担。但对于初次接触这一功能的开发者来说官方文档PG034中的理论描述与实际仿真操作之间往往存在一道难以跨越的鸿沟。本文将从一个实际工程案例出发手把手带你理解SG模式的每一个配置细节并通过Vivado仿真波形验证数据传输的全过程。1. AXI CDMA SG模式基础架构解析AXI CDMA控制器作为Xilinx提供的软IP核通过AXI4协议实现内存映射地址之间的高带宽DMA传输。其核心架构可以分为三个主要部分寄存器配置接口AXI4-Lite用于设置CDMA工作模式、中断使能等控制参数数据传输接口AXI4-Full负责实际的数据搬运操作Scatter Gather引擎当启用SG模式时负责解析和执行描述符表定义的数据传输任务在SG模式下CDMA控制器不再需要CPU逐个配置每次传输的源地址和目标地址而是通过描述符表Descriptor Table来定义一系列传输任务。这种机制特别适合以下场景非连续内存区域的数据收集/分发复杂的数据预处理流水线需要与CPU并行执行的数据搬运任务典型的SG模式数据传输流程包括四个阶段初始化阶段配置CDMA控制寄存器设置SG模式相关参数描述符获取阶段CDMA从内存中读取描述符表数据传输阶段根据描述符定义执行实际数据搬运状态更新阶段标记描述符完成状态触发中断如配置2. SG模式寄存器配置详解在Vivado 2017.4环境中配置AXI CDMA的SG模式需要正确设置以下关键寄存器2.1 控制寄存器地址0x00控制寄存器是SG模式配置的核心其各位定义如下位域值示例功能描述[31:24]0x00保留[23]0x1SG模式使能[22]0x1完成中断使能[21:16]0x07中断延迟[15]0x1错误中断使能[14:12]0x0保留[11:0]0x008中断阈值在示例工程中控制寄存器被配置为0x00027008对应SG模式使能bit231完成中断使能bit221中断延迟7个周期bit[21:16]0x07错误中断使能bit151中断阈值8bit[11:0]0x0082.2 描述符指针寄存器描述符表在内存中的位置通过两个指针寄存器指定当前描述符指针地址0x08指向第一个待处理的描述符尾部描述符指针地址0x10指向描述符链表的末尾在示例中当前描述符指针设置为0x00000000尾部描述符指针设置为0x00000040这两个指针定义了描述符表在内存中的范围CDMA控制器将自动处理这个范围内的所有描述符。3. 描述符表数据结构深度解析描述符表是SG模式的核心数据结构每个描述符包含8个32位字定义了一次数据传输的所有参数。以下是描述符各字段的详细说明偏移量名称示例值描述0x00NXT_DESC0x00000040下一个描述符的指针0x04BUFFER_ADDR0x00000000数据源地址0x08Reserved0x00000000保留字段0x0CCONTROL0x00000000控制字段0x10STATUS0x00000000状态字段0x14APP[0]0x00000000应用特定字段00x18APP[1]0x00000000应用特定字段10x1CAPP[2]0x00000000应用特定字段2在示例工程中描述符表1定义如下0x0000_0040 // NXT_DESC 0x0000_0000 // BUFFER_ADDR 0x0000_0000 // Reserved 0x0000_0000 // CONTROL 0x0000_0000 // STATUS 0x0000_0000 // APP[0] 0x0000_0000 // APP[1] 0x0000_0000 // APP[2]这表示下一个描述符位于地址0x00000040数据源地址为0x00000000传输长度为0x40字节由CONTROL字段隐含4. Vivado仿真波形关键信号分析在Vivado中设置好仿真环境后通过波形窗口可以观察SG模式数据传输的全过程。以下是需要重点关注的信号4.1 控制信号时序CDMA启动信号s_axi_lite_awvalid/s_axi_lite_wvalid寄存器写入有效s_axi_lite_bready寄存器写入完成响应数据传输信号m_axi_arvalid/m_axi_rready描述符表读取控制m_axi_awvalid/m_axi_wvalid数据写入控制4.2 描述符获取阶段波形当CDMA启动后首先会通过AXI总线读取描述符表。在波形中可以看到m_axi_araddr跳变到描述符表地址0x00000000m_axi_rdata返回描述符内容m_axi_rresp显示传输状态2b00表示OK4.3 数据传输阶段波形根据描述符内容CDMA开始实际数据传输从源地址0x00000000读取数据m_axi_araddr 0x00000000m_axi_rdata返回BRAM中的测试数据向目标地址写入数据m_axi_awaddr 描述符中定义的目标地址m_axi_wdata包含要写入的数据4.4 完成中断信号当一次DMA传输完成后cdma_introut信号拉高如果中断使能状态寄存器相应位被更新描述符的STATUS字段被更新通常为0x80000000表示完成5. 常见问题与调试技巧在实际工程中SG模式的配置和使用可能会遇到各种问题。以下是一些常见问题及其解决方法5.1 描述符表对齐问题Xilinx CDMA要求描述符表必须按32字节边界对齐。如果遇到描述符读取失败首先检查描述符指针是否32字节对齐低5位为0描述符表内存区域是否可访问5.2 传输长度限制单次DMA传输长度受以下因素限制CDMA IP配置的最大突发长度描述符CONTROL字段中的长度设置目标内存区域的大小建议在首次使用时先使用较小的传输长度如256字节进行验证。5.3 中断不触发问题如果配置了中断但未触发检查控制寄存器中的中断使能位中断阈值设置全局中断使能信号如有中断信号路径上的任何阻塞在Vivado中可以通过添加中断相关信号到波形窗口进行调试。6. 性能优化建议对于需要高性能DMA传输的应用可以考虑以下优化措施描述符预取通过设置多个描述符让CDMA可以预取下一个描述符减少空闲时间数据对齐确保源和目标地址按数据总线宽度对齐提高传输效率缓存利用合理配置AXI缓存属性提高总线利用率并行描述符对于独立的数据传输任务可以使用多个描述符链表并行处理在实际项目中我通常会先建立一个最小验证环境确认SG模式基本功能正常后再逐步添加性能优化措施。这种方法可以避免同时处理功能性和性能两方面的问题降低调试复杂度。

更多文章