[AXI] AXI Datamover

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 具有以下关键特性:

  1. 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 握手机制。
  2. 双向通道

    • MM2S 通道(Memory Map to Stream):从 AXI4 内存映射域读取数据,输出到 AXI4-Stream 域。
    • S2MM 通道(Stream to Memory Map):从 AXI4-Stream 域接收数据,写入 AXI4 内存映射域。
    • 两个通道独立运行,类似全双工模式,支持同时读写操作。
  3. 命令与状态接口

    • 命令接口:通过 AXI4-Stream 接口接收用户逻辑发送的传输命令,命令字宽通常为 72 位(32 位地址)或 104 位(64 位地址,参考 web:13)。
    • 状态接口:通过 AXI4-Stream 接口返回传输状态(如完成、错误),通知用户逻辑。
    • 支持多命令排队,利用 AXI4-Stream 协议的近乎全带宽能力。
  4. 数据传输功能

    • 4 KB 地址边界保护:确保数据传输不跨越 4 KB 地址边界,符合 AXI4 协议要求。
    • 自动突发分区:将大传输分解为符合 AXI4 协议的子突发(最大 256 数据节拍)。
    • 字节级数据重新对齐:通过数据重新排列引擎(DRE,Data Realignment Engine),支持任意字节偏移的内存读写(参考 web:6)。
    • 不定长字节传输(BTT)模式:S2MM 通道支持未知字节数的流式数据写入。
  5. 存储转发功能

    • 可选的通用存储转发(Store-and-Forward)模式,适用于 MM2S 和 S2MM 通道。
    • 确保数据完整性,防止数据流中断或溢出(参考 web:7)。
  6. 时钟支持

    • 同步模式:命令/状态接口和数据接口共享同一时钟(m_axi_mm2s_aclkm_axi_s2mm_aclk)。
    • 异步模式:命令/状态接口可使用独立时钟(m_axis_mm2s_cmdsts_aclkm_axis_s2mm_cmdsts_aclk)。
    • 最大频率:最高 200 MHz(7 系列,-1 速度等级),更高频率适用于 UltraScale 设备。
  7. 工具与设备支持

    • 设计工具: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),支持 TVALIDTREADYTLAST 信号。
  • 应用:将内存数据(如 DDR)传输到流式处理模块(如视频编码器)。

2. S2MM 通道(Stream to Memory Map)

  • 功能:从 AXI4-Stream 域接收数据,写入 AXI4 内存映射域。
  • 机制
    • 从 AXI4-Stream 接口(S_AXIS_S2MM)接收数据,支持不定长字节传输(BTT 模式)。
    • 通过 AXI4 写地址(AWADDR)和写数据(WDATA)通道写入内存。
    • 支持字节级数据重新对齐,允许任意字节偏移的内存写入。
    • 自动突发分区,确保符合 AXI4 协议的 4 KB 边界要求。
  • 应用:将流式数据(如传感器数据)存储到内存(如 DDR)。

3. 命令接口

  • 功能:接收用户逻辑发送的传输命令,控制 MM2S 和 S2MM 通道的操作。
  • 机制
    • 通过 AXI4-Stream 接口(S_AXIS_MM2S_CMDS_AXIS_S2MM_CMD)接收命令。
    • 命令格式包括起始地址(SADDR)、传输字节数(BTT)、突发类型(TYPE)、帧结束标志(EOF)和用户标签(TAG)(参考 web:20)。
    • 支持单次传输从 1 字节到 8,388,607 字节(7FFFFF 十六进制,23 位)。
    • 命令接口位宽为 8 的整数倍(如 32 位地址为 72 位,64 位地址为 104 位)。
  • 应用:用户逻辑通过命令控制数据传输的地址、长度和类型。

4. 状态接口

  • 功能:返回 MM2S 和 S2MM 通道的传输状态。
  • 机制
    • 通过 AXI4-Stream 接口(M_AXIS_MM2S_STSM_AXIS_S2MM_STS)输出状态。
    • 状态信息包括传输完成、错误标志(如地址越界、协议错误)和用户标签(TAG)。
  • 应用:用户逻辑监控传输状态,处理错误或触发后续操作。

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 的主要接口及其功能:

  1. AXI4 内存映射接口(MM2S 和 S2MM)

    • MM2S 接口M_AXI_MM2S):
      • 类型:AXI4 主接口(读通道)。
      • 信号
        • M_AXI_MM2S_ARADDRARVALIDARREADY:读地址通道。
        • M_AXI_MM2S_RDATARRESPRVALIDRREADY:读数据通道。
      • 功能:从内存读取数据,传输到 MM2S 通道。
    • S2MM 接口M_AXI_S2MM):
      • 类型:AXI4 主接口(写通道)。
      • 信号
        • M_AXI_S2MM_AWADDRAWVALIDAWREADY:写地址通道。
        • M_AXI_S2MM_WDATAWVALIDWREADY:写数据通道。
        • M_AXI_S2MM_BRESPBVALIDBREADY:写响应通道。
      • 功能:将 S2MM 通道数据写入内存。
    • 数据宽度:32 至 1024 位。
    • 时钟m_axi_mm2s_aclk(MM2S),m_axi_s2mm_aclk(S2MM)。
  2. AXI4-Stream 数据接口

    • MM2S 接口M_AXIS_MM2S):
      • 类型:AXI4-Stream 主接口。
      • 信号
        • M_AXIS_MM2S_TVALIDTREADYTDATATLAST:标准流信号。
        • 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)。
  3. AXI4-Stream 命令接口

    • MM2S 命令接口S_AXIS_MM2S_CMD):
      • 类型:AXI4-Stream 从接口。
      • 信号S_AXIS_MM2S_CMD_TVALIDTREADYTDATA
      • 功能:接收 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)。
  4. AXI4-Stream 状态接口

    • MM2S 状态接口M_AXIS_MM2S_STS):
      • 类型:AXI4-Stream 主接口。
      • 信号M_AXIS_MM2S_STS_TVALIDTREADYTDATA
      • 功能:返回 MM2S 传输状态。
    • S2MM 状态接口M_AXIS_S2MM_STS):
      • 类型:AXI4-Stream 主接口。
      • 信号:同上。
      • 功能:返回 S2MM 传输状态。
    • 时钟m_axis_mm2s_cmdsts_aclk(MM2S),m_axis_s2mm_cmdsts_aclk(S2MM)。
  5. 时钟与复位接口

    • 时钟
      • 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_CMDM_AXIS_S2MM_STS 连接到用户逻辑。
    • 分配时钟信号:
      • 同步模式:所有接口连接到单一时钟(m_axi_mm2s_aclkm_axi_s2mm_aclk)。
      • 异步模式:为命令/状态接口分配独立时钟(m_axis_mm2s_cmdsts_aclkm_axis_s2mm_cmdsts_aclk)。
    • 分配复位信号:
      • 确保复位信号(m_axi_mm2s_aresetn 等)与时钟同步。
    • 使用 Vivado 地址编辑器为 M_AXI_MM2SM_AXI_S2MM 分配地址空间。
  • 驱动程序
    • 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 适用于以下场景:

  1. 直接内存访问(DMA)系统

    • 作为 AXI DMA 核的构建块,实现内存到流或流到内存的高效数据搬运。
    • 例如,在 Zynq SoC 中将 DDR 数据传输到 PL 的处理模块。
  2. 视频处理

    • 将视频帧从 DDR 内存传输到 AXI4-Stream 处理模块(如编码器、显示接口)。
    • 支持字节级数据对齐,适配非对齐的视频数据。
  3. 信号处理

    • 将传感器数据(如 ADC 输出)通过 S2MM 通道存储到内存。
    • 支持不定长 BTT 模式,处理连续或未知长度的流式数据。
  4. 网络数据包处理

    • 通过 MM2S 通道将网络数据包从内存传输到流式处理单元。
    • 通过 S2MM 通道将处理后的数据包存储回内存。
  5. 缓存与内存管理

    • 在 FPGA 设计中,将 DDR 内存数据搬运到 PL 的块 RAM(BRAM),实现缓存功能。
    • 支持固定突发或增量突发传输,适配不同内存访问模式。

注意事项

  1. 命令格式

    • 命令接口需严格遵循 AXI4-Stream 协议,命令字宽为 8 的整数倍(72 位或 104 位)。
    • 确保起始地址(SADDR)和字节数(BTT)符合 4 KB 边界要求,否则可能触发错误状态。
  2. 数据宽度配置

    • MM2S 和 S2MM 的内存映射和流接口数据宽度需合理匹配,避免带宽瓶颈。
    • DRE 仅支持最大 64 位数据宽度的重新对齐,高于 64 位需确保数据对齐。
  3. 时钟域配置

    • 异步模式下,命令/状态接口时钟(m_axis_mm2s_cmdsts_aclk 等)应与数据接口时钟频率协调,建议接近或高于数据接口时钟(参考 web:7)。
    • 确保时钟源稳定,使用 MMCM/PLL 生成时钟。
  4. 复位同步

    • 复位信号(m_axi_mm2s_aresetn 等)需在各自时钟域内同步,保持至少 16 个时钟周期(参考 UG761)。
    • 推荐使用异步复位同步释放机制,避免亚稳态问题。
  5. 不定长 BTT 模式

    • S2MM 通道的 BTT 模式适合未知长度的数据流,需确保用户逻辑正确处理 TLAST 信号。
    • 通过仿真验证 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值