AXI Central Direct Memory Access (AXI CDMA) IP 详细介绍
概述
AXI Central Direct Memory Access(AXI CDMA)专为嵌入式处理系统设计,提供高带宽的直接内存访问(DMA)功能,支持在内存映射的源地址和目标地址之间通过 AXI4 协议进行数据传输。它广泛应用于 FPGA 和 SoC 系统设计,特别是在需要高效数据移动的场景,如视频处理、信号处理、网络数据包处理和硬件加速器集成。
该 IP 核的主要功能包括:
- 高带宽 DMA:在 AXI4 内存映射接口上实现高效数据传输,支持最大 1024 位数据宽度。
- 简单 DMA 模式:通过寄存器直接配置源和目标地址,适合简单数据移动任务。
- 可选 Scatter Gather(SG)模式:通过硬件自动化处理描述符,卸载 CPU 的控制任务。
- AXI4-Lite 控制接口:提供初始化、状态查询和控制功能,适合与 MicroBlaze 或其他处理器配合使用。
主要特性
AXI CDMA IP 具有以下关键特性:
-
AXI4 协议兼容性:
- 符合 ARM AMBA AXI4 和 AXI4-Lite 协议规范(参考 UG761)。
- AXI4 主接口:用于主数据路径(M_AXI),支持 32、64、128、256、512 和 1024 位数据宽度。
- AXI4-Lite 从接口:用于寄存器访问(S_AXI_LITE),固定 32 位数据宽度。
- 可选 AXI4 Scatter Gather 主接口:用于 Scatter Gather 模式,固定 32 位数据宽度。
-
操作模式:
- 简单 DMA 模式:通过 AXI4-Lite 寄存器直接配置源地址、目标地址和传输长度,适合单次或少量传输。
- Scatter Gather 模式(可选):通过描述符链表实现自动化 DMA 传输,卸载 CPU 管理任务,支持描述符预取和并行处理。
-
高性能设计:
- 最大频率:在 Virtex-6 FPGA 上可达 180 MHz(AXI4 接口),在 Zynq-7000 上可达更高频率(参考 PG034 表 2-1)。
- 吞吐量:支持高达 99% 的 AXI4 总线带宽利用率(64 字节突发,150 MHz,参考 PG034 表 2-2)。
- 突发支持:最大突发长度可配置为 16、32、64、128 或 256 个数据节拍。
- 数据重对齐引擎(DRE)(可选):支持 32 位和 64 位数据宽度下任意字节偏移的读写操作。
-
存储转发(Store and Forward):
- 可选内部 FIFO,支持存储转发模式,减少总线竞争,提高吞吐量。
- FIFO 深度可配置,适用于突发传输场景。
-
时钟与复位:
- 支持同步和异步时钟模式:
- 同步模式:AXI4 主接口(
m_axi_aclk
)和 AXI4-Lite 接口(s_axi_lite_aclk
)使用相同频率。 - 异步模式:两者可运行在不同频率,
s_axi_lite_aclk
可低于或等于m_axi_aclk
(通过参数C_AXI_LITE_IS_ASYNC=1
启用)。
- 同步模式:AXI4 主接口(
- 提供两个硬件复位信号:
m_axi_aresetn
(主接口复位)和s_axi_lite_aresetn
(AXI4-Lite 接口复位)。
- 支持同步和异步时钟模式:
-
工具与设备支持:
- 设计工具:Vivado Design Suite、ISE Design Suite、嵌入式开发套件(EDK)。
- 支持设备:Zynq-7000、Virtex-7、Kintex-7、Artix-7、Virtex-6、Spartan-6。
- 免费随 Vivado 和 ISE 设计套件提供,无需额外许可(参考 web:19)。
功能模块
AXI CDMA IP 的核心功能是提供高效的内存映射数据传输,其主要功能模块包括以下几个方面:
1. 寄存器模块(Registers)
- 功能:通过 AXI4-Lite 从接口提供控制和状态寄存器,用于配置 DMA 操作和查询状态。
- 寄存器空间(参考 PG034,第 18-25 页):
- 控制寄存器(CDMACR):配置中断、错误处理、软复位等。
- 状态寄存器(CDMASR):报告 DMA 状态、错误和中断。
- 源地址寄存器(SA):设置传输的源地址。
- 目标地址寄存器(DA):设置传输的目标地址。
- 字节传输寄存器(BTT):设置传输字节数(最大 8 MB)。
- Scatter Gather 寄存器(如 CURDESC、TAILDESC):管理描述符链表。
- 应用:处理器(如 MicroBlaze)通过 AXI4-Lite 接口写入寄存器,启动和监控 DMA 操作。
2. Scatter Gather 引擎(Scatter Gather Engine,可选)
- 功能:通过 AXI4 主接口(M_AXI_SG)从系统内存中获取和更新 DMA 传输描述符,自动化复杂传输序列。
- 机制:
- 支持描述符预取和内部队列,允许描述符处理与数据传输并行执行。
- 描述符包含源地址、目标地址、传输长度等信息,形成链表结构。
- 支持循环和非循环描述符处理。
- 应用:适合需要连续或复杂传输模式的场景,如视频流或网络数据包处理。
3. 控制/状态逻辑(Cntl/Sts Logic)
- 功能:协调 DMA 操作,管理 DataMover 的命令加载和状态更新。
- 机制:
- 在简单 DMA 模式下,根据寄存器配置生成传输命令。
- 在 Scatter Gather 模式下,协调 Scatter Gather 引擎和 DataMover。
- 应用:确保 DMA 操作的正确执行和状态反馈。
4. 数据移动器(DataMover)
- 功能:通过 AXI4 主接口(M_AXI)执行高吞吐量数据传输。
- 机制:
- 支持 4 KB 地址边界保护和自动突发分割。
- 提供字节级数据重对齐(DRE),支持 32 位和 64 位数据宽度下的任意字节偏移。
- 支持多请求队列,允许并行处理多个传输请求。
- 应用:实现从源内存到目标内存的高效数据移动。
5. 复位模块(Reset Module)
- 功能:协调硬件复位(
m_axi_aresetn
、s_axi_lite_aresetn
)和软复位(通过 CDMACR 寄存器)。 - 机制:复位所有寄存器、队列和逻辑,初始化为默认状态。
- 注意:硬件复位不保证 AXI4 传输的优雅完成,可能中断正在进行的传输。
接口说明
以下是 AXI CDMA IP 的主要接口及其功能:
-
AXI4-Lite 从接口(S_AXI_LITE):
- 类型:32 位 AXI4-Lite 从接口。
- 信号:
S_AXI_LITE_AWADDR
、AWVALID
、AWREADY
:写地址通道。S_AXI_LITE_WDATA
、WVALID
、WREADY
:写数据通道。S_AXI_LITE_BRESP
、BVALID
、BREADY
:写响应通道。S_AXI_LITE_ARADDR
、ARVALID
、ARREADY
:读地址通道。S_AXI_LITE_RDATA
、RRESP
、RVALID
、RREADY
:读数据通道。
- 功能:提供寄存器访问接口,用于配置和监控 DMA 操作。
- 时钟:
s_axi_lite_aclk
。
-
AXI4 主接口(M_AXI):
- 类型:AXI4 主接口,用于主数据路径。
- 信号:
M_AXI_ARADDR
、ARVALID
、ARREADY
:读地址通道。M_AXI_RDATA
、RRESP
、RVALID
、RREADY
:读数据通道。M_AXI_AWADDR
、AWVALID
、AWREADY
:写地址通道。M_AXI_WDATA
、WVALID
、WREADY
:写数据通道。M_AXI_BRESP
、BVALID
、BREADY
:写响应通道。
- 功能:执行从源地址到目标地址的内存映射数据传输。
- 数据宽度:可配置为 32、64、128、256、512 或 1024 位。
- 时钟:
m_axi_aclk
。
-
AXI4 Scatter Gather 主接口(M_AXI_SG,可选):
- 类型:32 位 AXI4 主接口,用于 Scatter Gather 描述符传输。
- 信号:与 M_AXI 类似,但固定 32 位数据宽度。
- 功能:从系统内存中读取和更新 Scatter Gather 描述符。
- 时钟:
m_axi_aclk
。
-
时钟与复位接口:
m_axi_aclk
:主数据路径和 Scatter Gather 接口的时钟。s_axi_lite_aclk
:AXI4-Lite 接口的时钟,可与m_axi_aclk
同步或异步。m_axi_aresetn
:主接口低电平有效复位信号。s_axi_lite_aresetn
:AXI4-Lite 接口低电平有效复位信号。
-
中断接口:
Interrupt
:输出中断信号,指示 DMA 完成、错误或其他事件。- 功能:通知处理器 DMA 状态变化,需配合中断控制器使用。
配置方法
1. 在 Vivado 中添加 IP
- 打开 Vivado 的 IP Catalog,搜索 AXI Central DMA,将其添加到设计。
- 双击 IP 核,打开定制化对话框,配置以下参数:
- 基本设置:
- 数据宽度(C_M_AXI_DATA_WIDTH):选择 32、64、128、256、512 或 1024 位。
- 突发长度(C_M_AXI_BURST_LEN):选择 16、32、64、128 或 256。
- 高级选项:
- 异步模式(Enable Asynchronous Mode):启用
C_AXI_LITE_IS_ASYNC=1
,允许s_axi_lite_aclk
和m_axi_aclk
不同。 - 数据重对齐引擎(Include DRE):启用
C_INCLUDE_DRE=1
,支持字节偏移(仅限 32/64 位)。 - 存储转发(Include Store and Forward):启用
C_INCLUDE_SF=1
,添加内部 FIFO。 - Scatter Gather(Include SG):启用
C_INCLUDE_SG=1
,支持描述符自动化。 - 地址管道深度:配置读/写地址管道深度(
C_READ_ADDR_PIPE_DEPTH
、C_WRITE_ADDR_PIPE_DEPTH
)。
- 异步模式(Enable Asynchronous Mode):启用
- 其他:
- 配置延迟定时器分辨率(
C_DLYTMR_RESOLUTION
),用于 Scatter Gather 模式的中断延迟。
- 配置延迟定时器分辨率(
- 基本设置:
2. 连接与驱动
- 硬件连接:
- 将
S_AXI_LITE
接口连接到处理器(如 MicroBlaze 或 Zynq PS)的 AXI4-Lite 主接口。 - 将
M_AXI
接口连接到 AXI4 内存控制器(如 AXI Interconnect)。 - 若启用 Scatter Gather,将
M_AXI_SG
接口连接到内存控制器。 - 分配时钟(
m_axi_aclk
、s_axi_lite_aclk
)和复位(m_axi_aresetn
、s_axi_lite_aresetn
)信号。
- 将
- 驱动程序:
- 使用 Xilinx 提供的 standalone 驱动程序(位于 SDK 目录
<install_directory>/doc/usenglish/xilinx_drivers.htm
)。 - Linux 驱动支持信息见 Xilinx Wiki(参考 web:19)。
- 驱动程序提供 API 用于配置寄存器、启动传输和处理中断。
- 使用 Xilinx 提供的 standalone 驱动程序(位于 SDK 目录
3. 仿真与验证
- 使用 Vivado 仿真工具验证 DMA 操作:
- 检查
S_AXI_LITE
接口的寄存器读写。 - 验证
M_AXI
接口的源到目标数据传输。 - 若启用 Scatter Gather,验证描述符链表的正确处理。
- 检查
- 确保时钟频率满足吞吐量需求,检查突发长度对系统性能的影响。
资源利用情况
AXI CDMA IP 的资源占用取决于数据宽度、Scatter Gather 和其他配置。以下是典型资源利用情况(基于 Virtex-6、Spartan-6 和 Zynq-7000,Vivado 生成):
- 资源类型:
- LUT(查找表):500-3000,取决于数据宽度和 Scatter Gather。
- FF(触发器):500-2500,与 LUT 占用相关。
- BRAM:0-4,根据是否启用存储转发 FIFO。
- DSP 切片:不使用。
- 配置示例:
- 32 位数据宽度,无 Scatter Gather:约 500 LUT、600 FF、0 BRAM。
- 64 位数据宽度,启用 Scatter Gather 和 DRE:约 1500 LUT、1200 FF、2 BRAM。
- 256 位数据宽度,启用存储转发:约 2500 LUT、2000 FF、4 BRAM。
- 最大频率:
- Virtex-6:180 MHz(AXI4)、135 MHz(AXI4-Lite)。
- Spartan-6:90 MHz(AXI4)、80 MHz(AXI4-Lite)。
- Zynq-7000:更高频率(参考 web:9)。
具体资源利用数据需参考 Vivado 生成的报告,建议用户根据目标设备和配置验证资源占用。
应用场景
AXI CDMA IP 适用于以下场景:
-
高带宽数据传输:
- 在内存和外设之间移动大块数据,如视频帧或网络数据包。
- 配合 AXI Interconnect 用于 SoC 系统中的内存访问。
-
视频处理:
- 将视频数据从 DDR 内存传输到处理模块(如编码器、解码器)。
- 使用 Scatter Gather 模式处理连续视频流。
-
信号处理:
- 在信号处理系统中移动采集数据到处理核心(如 FFT、滤波器)。
- 利用 DRE 支持非对齐数据传输。
-
网络数据包处理:
- 在网络处理器中实现数据包的快速搬移。
- Scatter Gather 模式适合动态数据包序列。
-
Zynq SoC 集成:
- 在 Zynq-7000 的 PS 和 PL 之间传输数据,配合 AXI Interconnect 和内存控制器。
注意事项
-
突发长度选择:
- 较大的突发长度(如 64 或 256)可提高吞吐量(高达 99% 总线利用率),但可能增加其他模块的延迟(参考 PG034 表 2-2)。
- 需权衡系统性能,建议通过仿真测试不同突发长度。
-
异步模式:
- 启用异步模式(
C_AXI_LITE_IS_ASYNC=1
)时,s_axi_lite_aclk
可低于m_axi_aclk
,但需确保时钟域同步逻辑正确(参考 web:1)。 - 异步模式增加少量 LUT 和 FF 占用。
- 启用异步模式(
-
复位管理:
- 硬件复位(
m_axi_aresetn
或s_axi_lite_aresetn
)会中断正在进行的 AXI4 传输,需确保复位时机(参考 PG034,第 7 页)。 - 软复位(通过 CDMACR)可用于非关键场景。
- 硬件复位(
-
Scatter Gather 配置:
- 描述符链表需正确初始化,地址需对齐到 8 字节边界(参考 PG034,第 25 页)。
- 中断延迟定时器(
C_DLYTMR_RESOLUTION
)需根据应用调整,以优化中断频率。
总结
AXI Central Direct Memory Access(AXI CDMA)IP(PG034)是一款高性能的 DMA 软核,专为嵌入式系统中的内存映射数据传输设计。其支持简单 DMA 和 Scatter Gather 两种模式,通过 AXI4 和 AXI4-Lite 接口提供高效数据移动和灵活控制。该 IP 核以其高吞吐量、可配置数据宽度和硬件自动化特性,广泛应用于视频处理、信号处理、网络数据包处理和 Zynq SoC 集成等领域。
FPGA设计工具推荐
-
SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
-
SZ501(PRO_A7):
- SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
- 双网口(RGMII)
- 双SFP+
- DDR
- UART
- IIC