AXI Datamover IP 详细介绍
概述
AXI Datamover 是 AXI 互连基础架构的重要组成部分,专为在 AXI4 内存映射域(Memory-Mapped Domain)和 AXI4-Stream 域(Stream Domain)之间实现高吞吐量数据传输而设计。它通过内存映射到流(MM2S,Memory Map to Stream)和流到内存映射(S2MM,Stream to Memory Map)通道,提供高效的数据搬运功能,广泛应用于 FPGA 和 SoC 系统设计,特别是在需要直接内存访问(DMA)功能的高性能场景,如视频处理、信号处理、网络数据包处理和硬件加速器集成。
该 IP 核的主要功能包括:
- 高吞吐量传输:支持 AXI4 内存映射域和 AXI4-Stream 域之间的高效数据搬运。
- 双向通道:提供独立运行的 MM2S 和 S2MM AXI4-Stream 通道,类似全双工模式。
- 灵活配置:支持 4 KB 地址边界保护、自动突发分区、字节级数据重新对齐和不定长字节传输(BTT)模式。
- 命令驱动:通过 AXI4-Stream 命令接口控制数据传输,支持多请求排队。
主要特性
AXI Datamover IP 具有以下关键特性:
-
AXI 协议兼容性:
- 符合 ARM AMBA AXI4 和 AXI4-Stream 协议规范(参考 UG761)。
- AXI4 内存映射接口:支持 32、64、128、256、512 或 1024 位数据宽度,适用于高带宽内存访问。
- AXI4-Stream 接口:支持 8、16、32、64、128、256、512 或 1024 位数据宽度,适用于流式数据传输。
- 支持 AXI4 突发传输(最大 256 数据节拍)和 AXI4-Stream 的
TVALID
/TREADY
握手机制。
-
双向通道:
- MM2S 通道(Memory Map to Stream):从 AXI4 内存映射域读取数据,输出到 AXI4-Stream 域。
- S2MM 通道(Stream to Memory Map):从 AXI4-Stream 域接收数据,写入 AXI4 内存映射域。
- 两个通道独立运行,类似全双工模式,支持同时读写操作。
-
命令与状态接口:
- 命令接口:通过 AXI4-Stream 接口接收用户逻辑发送的传输命令,命令字宽通常为 72 位(32 位地址)或 104 位(64 位地址,参考 web:13)。
- 状态接口:通过 AXI4-Stream 接口返回传输状态(如完成、错误),通知用户逻辑。
- 支持多命令排队,利用 AXI4-Stream 协议的近乎全带宽能力。
-
数据传输功能:
- 4 KB 地址边界保护:确保数据传输不跨越 4 KB 地址边界,符合 AXI4 协议要求。
- 自动突发分区:将大传输分解为符合 AXI4 协议的子突发(最大 256 数据节拍)。
- 字节级数据重新对齐:通过数据重新排列引擎(DRE,Data Realignment Engine),支持任意字节偏移的内存读写(参考 web:6)。
- 不定长字节传输(BTT)模式:S2MM 通道支持未知字节数的流式数据写入。
-
存储转发功能:
- 可选的通用存储转发(Store-and-Forward)模式,适用于 MM2S 和 S2MM 通道。
- 确保数据完整性,防止数据流中断或溢出(参考 web:7)。
-
时钟支持:
- 同步模式:命令/状态接口和数据接口共享同一时钟(
m_axi_mm2s_aclk
或m_axi_s2mm_aclk
)。 - 异步模式:命令/状态接口可使用独立时钟(
m_axis_mm2s_cmdsts_aclk
或m_axis_s2mm_cmdsts_aclk
)。 - 最大频率:最高 200 MHz(7 系列,-1 速度等级),更高频率适用于 UltraScale 设备。
- 同步模式:命令/状态接口和数据接口共享同一时钟(
-
工具与设备支持:
- 设计工具:Vivado Design Suite、ISE Design Suite。
- 支持设备:Artix-7、Kintex-7、Virtex-7、Zynq-7000、Kintex UltraScale、Virtex UltraScale、Zynq UltraScale+ MPSoC、Versal Prime、Versal AI Core。
。
功能模块
AXI Datamover IP 的核心功能是在 AXI4 内存映射域和 AXI4-Stream 域之间实现高效数据搬运,其主要功能模块包括以下几个方面:
1. MM2S 通道(Memory Map to Stream)
- 功能:从 AXI4 内存映射域读取数据,转换为 AXI4-Stream 数据流。
- 机制:
- 通过 AXI4 读地址(
ARADDR
)和读数据(RDATA
)通道访问内存。 - 自动突发分区,将大传输分解为符合 AXI4 协议的子突发(最大 256 数据节拍)。
- 数据重新排列引擎(DRE)支持字节级对齐,允许任意字节偏移的内存读取。
- 输出到 AXI4-Stream 接口(
M_AXIS_MM2S
),支持TVALID
、TREADY
和TLAST
信号。
- 通过 AXI4 读地址(
- 应用:将内存数据(如 DDR)传输到流式处理模块(如视频编码器)。
2. S2MM 通道(Stream to Memory Map)
- 功能:从 AXI4-Stream 域接收数据,写入 AXI4 内存映射域。
- 机制:
- 从 AXI4-Stream 接口(
S_AXIS_S2MM
)接收数据,支持不定长字节传输(BTT 模式)。 - 通过 AXI4 写地址(
AWADDR
)和写数据(WDATA
)通道写入内存。 - 支持字节级数据重新对齐,允许任意字节偏移的内存写入。
- 自动突发分区,确保符合 AXI4 协议的 4 KB 边界要求。
- 从 AXI4-Stream 接口(
- 应用:将流式数据(如传感器数据)存储到内存(如 DDR)。
3. 命令接口
- 功能:接收用户逻辑发送的传输命令,控制 MM2S 和 S2MM 通道的操作。
- 机制:
- 通过 AXI4-Stream 接口(
S_AXIS_MM2S_CMD
和S_AXIS_S2MM_CMD
)接收命令。 - 命令格式包括起始地址(
SADDR
)、传输字节数(BTT
)、突发类型(TYPE
)、帧结束标志(EOF
)和用户标签(TAG
)(参考 web:20)。 - 支持单次传输从 1 字节到 8,388,607 字节(7FFFFF 十六进制,23 位)。
- 命令接口位宽为 8 的整数倍(如 32 位地址为 72 位,64 位地址为 104 位)。
- 通过 AXI4-Stream 接口(
- 应用:用户逻辑通过命令控制数据传输的地址、长度和类型。
4. 状态接口
- 功能:返回 MM2S 和 S2MM 通道的传输状态。
- 机制:
- 通过 AXI4-Stream 接口(
M_AXIS_MM2S_STS
和M_AXIS_S2MM_STS
)输出状态。 - 状态信息包括传输完成、错误标志(如地址越界、协议错误)和用户标签(
TAG
)。
- 通过 AXI4-Stream 接口(
- 应用:用户逻辑监控传输状态,处理错误或触发后续操作。
5. 数据重新排列引擎(DRE)
- 功能:实现字节级数据对齐,支持任意字节偏移的内存读写。
- 机制:
- 在 MM2S 通道中,将内存数据重新对齐到 AXI4-Stream 的字节边界。
- 在 S2MM 通道中,将 AXI4-Stream 数据重新对齐到内存的字节边界。
- 支持最大 64 位数据宽度的 DRE(参考 web:20)。
- 应用:处理非对齐的数据传输,如视频帧或网络数据包。
6. 时钟与复位模块
- 功能:管理时钟和复位信号,支持同步和异步模式。
- 机制:
- 时钟:
m_axi_mm2s_aclk
:MM2S AXI4 内存映射接口时钟。m_axi_s2mm_aclk
:S2MM AXI4 内存映射接口时钟。m_axis_mm2s_cmdsts_aclk
:MM2S 命令/状态接口时钟(异步模式)。m_axis_s2mm_cmdsts_aclk
:S2MM 命令/状态接口时钟(异步模式)。
- 复位:
m_axi_mm2s_aresetn
:MM2S 接口低电平有效复位。m_axi_s2mm_aresetn
:S2MM 接口低电平有效复位。m_axis_mm2s_cmdsts_aresetn
:MM2S 命令/状态接口复位(异步模式)。m_axis_s2mm_cmdsts_aresetn
:S2MM 命令/状态接口复位(异步模式)。
- 时钟:
- 应用:支持灵活的时钟域配置,适应复杂系统。
接口说明
以下是 AXI Datamover IP 的主要接口及其功能:
-
AXI4 内存映射接口(MM2S 和 S2MM):
- MM2S 接口(
M_AXI_MM2S
):- 类型:AXI4 主接口(读通道)。
- 信号:
M_AXI_MM2S_ARADDR
、ARVALID
、ARREADY
:读地址通道。M_AXI_MM2S_RDATA
、RRESP
、RVALID
、RREADY
:读数据通道。
- 功能:从内存读取数据,传输到 MM2S 通道。
- S2MM 接口(
M_AXI_S2MM
):- 类型:AXI4 主接口(写通道)。
- 信号:
M_AXI_S2MM_AWADDR
、AWVALID
、AWREADY
:写地址通道。M_AXI_S2MM_WDATA
、WVALID
、WREADY
:写数据通道。M_AXI_S2MM_BRESP
、BVALID
、BREADY
:写响应通道。
- 功能:将 S2MM 通道数据写入内存。
- 数据宽度:32 至 1024 位。
- 时钟:
m_axi_mm2s_aclk
(MM2S),m_axi_s2mm_aclk
(S2MM)。
- MM2S 接口(
-
AXI4-Stream 数据接口:
- MM2S 接口(
M_AXIS_MM2S
):- 类型:AXI4-Stream 主接口。
- 信号:
M_AXIS_MM2S_TVALID
、TREADY
、TDATA
、TLAST
:标准流信号。M_AXIS_MM2S_TKEEP
:字节有效信号(可选)。
- 功能:输出内存读取的流式数据。
- S2MM 接口(
S_AXIS_S2MM
):- 类型:AXI4-Stream 从接口。
- 信号:与
M_AXIS_MM2S
类似。 - 功能:接收流式数据,传输到内存。
- 数据宽度:8 至 1024 位。
- 时钟:
m_axi_mm2s_aclk
(MM2S),m_axi_s2mm_aclk
(S2MM)。
- MM2S 接口(
-
AXI4-Stream 命令接口:
- MM2S 命令接口(
S_AXIS_MM2S_CMD
):- 类型:AXI4-Stream 从接口。
- 信号:
S_AXIS_MM2S_CMD_TVALID
、TREADY
、TDATA
。 - 功能:接收 MM2S 传输命令(如起始地址、字节数)。
- S2MM 命令接口(
S_AXIS_S2MM_CMD
):- 类型:AXI4-Stream 从接口。
- 信号:同上。
- 功能:接收 S2MM 传输命令。
- 命令字宽:72 位(32 位地址)或 104 位(64 位地址,参考 web:13)。
- 时钟:
m_axis_mm2s_cmdsts_aclk
(MM2S),m_axis_s2mm_cmdsts_aclk
(S2MM)。
- MM2S 命令接口(
-
AXI4-Stream 状态接口:
- MM2S 状态接口(
M_AXIS_MM2S_STS
):- 类型:AXI4-Stream 主接口。
- 信号:
M_AXIS_MM2S_STS_TVALID
、TREADY
、TDATA
。 - 功能:返回 MM2S 传输状态。
- S2MM 状态接口(
M_AXIS_S2MM_STS
):- 类型:AXI4-Stream 主接口。
- 信号:同上。
- 功能:返回 S2MM 传输状态。
- 时钟:
m_axis_mm2s_cmdsts_aclk
(MM2S),m_axis_s2mm_cmdsts_aclk
(S2MM)。
- MM2S 状态接口(
-
时钟与复位接口:
- 时钟:
m_axi_mm2s_aclk
:MM2S 数据接口时钟。m_axi_s2mm_aclk
:S2MM 数据接口时钟。m_axis_mm2s_cmdsts_aclk
:MM2S 命令/状态接口时钟(异步模式)。m_axis_s2mm_cmdsts_aclk
:S2MM 命令/状态接口时钟(异步模式)。
- 复位:
m_axi_mm2s_aresetn
:MM2S 数据接口复位。m_axi_s2mm_aresetn
:S2MM 数据接口复位。m_axis_mm2s_cmdsts_aresetn
:MM2S 命令/状态接口复位。m_axis_s2mm_cmdsts_aresetn
:S2MM 命令/状态接口复位。
- 功能:提供时钟和复位控制,支持同步或异步设计。
- 时钟:
配置方法
1. 在 Vivado 中添加 IP
- 打开 Vivado 的 IP Catalog,搜索 AXI Datamover,将其添加到设计。
- 双击 IP 核,打开定制化对话框,配置以下参数:
- 通道选择:
- Enable MM2S Channel:启用 MM2S 通道。
- Enable S2MM Channel:启用 S2MM 通道。
- 数据宽度:
- MM2S Memory Map Data Width:选择 32、64、128、256、512 或 1024 位。
- MM2S Stream Data Width:选择 8、16、32、64、128、256、512 或 1024 位。
- S2MM Memory Map Data Width:同 MM2S。
- S2MM Stream Data Width:同 MM2S。
- 突发长度:
- Maximum Memory Map Burst Length:选择 2、4、8、16、32、64、128 或 256 数据节拍,影响吞吐量和 AXI 总线负载(参考 web:20)。
- 功能选项:
- Enable Data Realignment Engine (DRE):启用字节级数据重新对齐(最大 64 位数据宽度)。
- Enable Store-and-Forward:启用存储转发模式(MM2S 和 S2MM)。
- Enable Indeterminate BTT Mode:启用 S2MM 不定长字节传输模式。
- 时钟配置:
- Command/Status Clock Mode:选择 Synchronous(同步)或 Asynchronous(异步)。
- MM2S Clock Frequency:设置
m_axi_mm2s_aclk
频率(默认 100 MHz)。 - S2MM Clock Frequency:设置
m_axi_s2mm_aclk
频率(默认 100 MHz)。 - Command/Status Clock Frequency:设置命令/状态接口时钟频率(异步模式)。
- 地址宽度:
- Address Width:选择 32 位或 64 位,影响命令字宽(72 位或 104 位)。
- 通道选择:
2. 连接与驱动
- 硬件连接:
- MM2S 通道:
- 将
M_AXI_MM2S
连接到 AXI4 从设备(如 AXI Interconnect、DDR 控制器)。 - 将
M_AXIS_MM2S
连接到 AXI4-Stream 从设备(如视频处理模块)。 - 将
S_AXIS_MM2S_CMD
连接到用户逻辑的命令生成模块。 - 将
M_AXIS_MM2S_STS
连接到用户逻辑的状态处理模块。
- 将
- S2MM 通道:
- 将
M_AXI_S2MM
连接到 AXI4 从设备(如 DDR 控制器)。 - 将
S_AXIS_S2MM
连接到 AXI4-Stream 主设备(如传感器接口)。 - 将
S_AXIS_S2MM_CMD
和M_AXIS_S2MM_STS
连接到用户逻辑。
- 将
- 分配时钟信号:
- 同步模式:所有接口连接到单一时钟(
m_axi_mm2s_aclk
或m_axi_s2mm_aclk
)。 - 异步模式:为命令/状态接口分配独立时钟(
m_axis_mm2s_cmdsts_aclk
和m_axis_s2mm_cmdsts_aclk
)。
- 同步模式:所有接口连接到单一时钟(
- 分配复位信号:
- 确保复位信号(
m_axi_mm2s_aresetn
等)与时钟同步。
- 确保复位信号(
- 使用 Vivado 地址编辑器为
M_AXI_MM2S
和M_AXI_S2MM
分配地址空间。
- MM2S 通道:
- 驱动程序:
- AXI Datamover 核依赖用户逻辑生成命令和处理状态,通常无需专用驱动程序。
- 用户逻辑需通过 AXI4-Stream 命令接口发送传输命令(如起始地址、字节数),并监控状态接口的反馈。
- 参考 Xilinx 提供的示例设计(如 AXI DMA 参考设计,web:0)实现命令生成和状态处理。
3. 仿真与验证
- 使用 Vivado 仿真工具验证数据搬运功能:
- 检查 AXI4 内存映射接口的突发传输和 4 KB 边界保护。
- 验证 AXI4-Stream 接口的
TVALID
/TREADY
握手和TLAST
信号。 - 测试 DRE 的字节级数据对齐,确保非对齐传输正确。
- 验证不定长 BTT 模式(S2MM)的数据完整性。
- 检查命令和状态接口的操作,确认多命令排队的正确性。
- 使用 AXI Verification IP(PG267)或 AXI4-Stream Verification IP(PG277)生成激励,验证协议合规性。
- 分析波形,确认无数据丢失、协议错误或地址越界。
资源利用情况
AXI Datamover IP 的资源占用取决于数据宽度、通道配置、DRE 和存储转发功能。以下是典型资源利用情况(基于 7 系列、UltraScale 和 Zynq 设备,Vivado 生成):
- 资源类型:
- LUT(查找表):500-3000,取决于数据宽度和功能选项。
- FF(触发器):600-4000,与 LUT 占用相关。
- BRAM:0-2,存储转发模式可能使用少量 BRAM。
- DSP 切片:不使用。
- 配置示例:
- MM2S+S2MM,32 位数据宽度,无 DRE,同步模式:约 500 LUT、600 FF、0 BRAM。
- MM2S+S2MM,128 位数据宽度,启用 DRE,异步模式:约 1500 LUT、2000 FF、1 BRAM。
- MM2S+S2MM,256 位数据宽度,启用存储转发和 BTT 模式:约 2500 LUT、3000 FF、2 BRAM。
- 最大频率:
- 7 系列(-1 速度等级):200 MHz。
- UltraScale:250 MHz 或更高。
具体资源利用数据需参考 Vivado 生成的报告,建议用户根据目标设备和配置验证资源占用。
应用场景
AXI Datamover IP 适用于以下场景:
-
直接内存访问(DMA)系统:
- 作为 AXI DMA 核的构建块,实现内存到流或流到内存的高效数据搬运。
- 例如,在 Zynq SoC 中将 DDR 数据传输到 PL 的处理模块。
-
视频处理:
- 将视频帧从 DDR 内存传输到 AXI4-Stream 处理模块(如编码器、显示接口)。
- 支持字节级数据对齐,适配非对齐的视频数据。
-
信号处理:
- 将传感器数据(如 ADC 输出)通过 S2MM 通道存储到内存。
- 支持不定长 BTT 模式,处理连续或未知长度的流式数据。
-
网络数据包处理:
- 通过 MM2S 通道将网络数据包从内存传输到流式处理单元。
- 通过 S2MM 通道将处理后的数据包存储回内存。
-
缓存与内存管理:
- 在 FPGA 设计中,将 DDR 内存数据搬运到 PL 的块 RAM(BRAM),实现缓存功能。
- 支持固定突发或增量突发传输,适配不同内存访问模式。
注意事项
-
命令格式:
- 命令接口需严格遵循 AXI4-Stream 协议,命令字宽为 8 的整数倍(72 位或 104 位)。
- 确保起始地址(
SADDR
)和字节数(BTT
)符合 4 KB 边界要求,否则可能触发错误状态。
-
数据宽度配置:
- MM2S 和 S2MM 的内存映射和流接口数据宽度需合理匹配,避免带宽瓶颈。
- DRE 仅支持最大 64 位数据宽度的重新对齐,高于 64 位需确保数据对齐。
-
时钟域配置:
- 异步模式下,命令/状态接口时钟(
m_axis_mm2s_cmdsts_aclk
等)应与数据接口时钟频率协调,建议接近或高于数据接口时钟(参考 web:7)。 - 确保时钟源稳定,使用 MMCM/PLL 生成时钟。
- 异步模式下,命令/状态接口时钟(
-
复位同步:
- 复位信号(
m_axi_mm2s_aresetn
等)需在各自时钟域内同步,保持至少 16 个时钟周期(参考 UG761)。 - 推荐使用异步复位同步释放机制,避免亚稳态问题。
- 复位信号(
-
不定长 BTT 模式:
- S2MM 通道的 BTT 模式适合未知长度的数据流,需确保用户逻辑正确处理
TLAST
信号。 - 通过仿真验证 BTT 模式的数据完整性。
- S2MM 通道的 BTT 模式适合未知长度的数据流,需确保用户逻辑正确处理
总结
AXI Datamover IP(PG022)是一款高效的 AXI 数据搬运软核,专为 AXI4 内存映射域和 AXI4-Stream 域之间的高吞吐量传输设计。其通过 MM2S 和 S2MM 通道、命令驱动接口和字节级数据重新对齐功能,支持 4 KB 边界保护、自动突发分区和不定长传输,广泛应用于 DMA 系统、视频处理、信号处理和网络数据包处理等领域。
FPGA设计工具推荐
-
SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
-
SZ501(PRO_A7):
- SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
- 双网口(RGMII)
- 双SFP+
- DDR
- UART
- IIC