[AXI] AXI MCDMA

AXI MCDMA IP 详细介绍

概述

AXI Multi-Channel Direct Memory Access (MCDMA) 专为高效数据传输设计,旨在实现内存映射域(Memory-Mapped Domain)与 AXI4-Stream 流域(Stream Domain)之间的高带宽直接内存访问(DMA)。AXI MCDMA 支持多达 16 个独立通道,具备全双工和分散-聚集(Scatter-Gather,SG)功能,广泛应用于 FPGA 和 SoC 系统设计,特别是在视频处理、信号处理、网络通信和多通道数据采集等复杂场景。

AXI MCDMA 的主要功能包括:

  • 多通道支持:支持最多 16 个独立通道,每个通道可独立配置,用于内存到流(MM2S)和流到内存(S2MM)的数据传输。
  • 高带宽传输:通过 AXI4 内存映射接口和 AXI4-Stream 接口实现高效数据迁移,减轻处理器负担。
  • 分散-聚集功能:支持非连续内存块的 DMA 传输,通过描述符链(Descriptor Chain)管理复杂数据模式。
  • 灵活仲裁:提供加权轮询(Weighted Round-Robin)或严格优先级(Strict Priority)仲裁机制,优化多通道性能。

主要特性

AXI MCDMA IP 具有以下关键特性:

  1. 多通道 DMA

    • 支持最多 16 个独立通道,每个通道可配置为 MM2S(Memory-Mapped to Stream)或 S2MM(Stream to Memory-Mapped)。
    • 每个通道支持独立的地址、数据宽度和传输参数,适合多路数据流处理(如多路视频或传感器数据)。
    • 通道间通过内部调度器协调,支持并发数据传输。
  2. AXI 协议兼容性

    • AXI4 内存映射接口:支持 32、64、128、256、512 或 1024 位数据宽度,用于高带宽内存访问。
    • AXI4-Stream 接口:支持 8、16、32、64、128、256、512 或 1024 位数据宽度,适配流式外设。
    • 支持 AXI4 突发传输(最大 256 数据节拍,INCR 类型)和 AXI4-Stream 的 TVALID/TREADY 握手机制。
  3. 分散-聚集(Scatter-Gather)支持

    • 支持非连续内存块的 DMA 传输,通过描述符链管理数据地址和长度。
    • 描述符存储在内存中,包含地址、长度、控制位和应用字(App Words)。
    • 支持环形缓冲区(Ring Buffer)模式,实现无限传输。
  4. 仲裁机制

    • 加权轮询(Weighted Round-Robin):根据通道权重分配带宽,适合带宽需求不均的场景。
    • 严格优先级(Strict Priority):高优先级通道优先传输,适合实时性要求高的应用。
    • 仲裁策略通过 Vivado 配置或寄存器动态调整。
  5. 时钟与复位

    • 同步模式:所有接口共享单一时钟(axi_aclk)。
    • 异步模式:支持独立的 MM2S 和 S2MM 时钟(m_axis_mm2s_aclkm_axis_s2mm_aclk)。
    • 最大频率:200 MHz(7 系列,-1 速度等级),更高频率支持 UltraScale+ 设备。
  6. 控制与状态

    • 通过 AXI4-Lite 从接口配置通道参数、描述符地址和仲裁策略。
    • 提供中断信号(irq)通知传输完成、错误或通道状态变化。
    • 支持轮询(Polling)和中断(Interrupt)驱动模式。
  7. 工具与设备支持

    • 设计工具:Vivado Design Suite、Vitis Unified Software Platform。
    • 支持设备:Kintex-7、Virtex-7、Zynq-7000、Kintex UltraScale、Virtex UltraScale、Zynq UltraScale+ MPSoC、Versal。

功能模块

AXI MCDMA IP 的功能模块围绕多通道 DMA 传输设计,核心包括控制逻辑、数据通路和描述符管理。以下是主要模块及其功能:

1. AXI4 内存映射接口模块

  • 功能:处理内存映射域的读写操作。
  • MM2S(内存到流)
    • 通过 AXI4 读通道(M_AXI_MM2S_ARADDRRDATA)从内存读取数据。
    • 支持突发传输(最大 256 数据节拍),自动分区以符合 4 KB 地址边界。
    • 根据描述符中的地址和长度发起读请求。
  • S2MM(流到内存)
    • 通过 AXI4 写通道(M_AXI_S2MM_AWADDRWDATA)将数据写入内存。
    • 支持突发写操作,优化内存带宽利用。
  • 应用:从 DDR 或 BRAM 读取数据,或将流数据写入内存。

2. AXI4-Stream 接口模块

  • 功能:处理流域的数据输入和输出。
  • MM2S
    • 将内存读取的数据通过 AXI4-Stream 接口(M_AXIS_MM2S)输出,支持 TDATATVALIDTLASTTKEEP 信号。
    • 使用 TUSER 信号(可选)携带用户定义信息。
  • S2MM
    • 接收 AXI4-Stream 输入(S_AXIS_S2MM),转换为内存写操作。
    • 支持流式数据的连续或突发传输。
  • 应用:连接流式外设,如视频编码器、ADC 或 DAC。

3. 通道调度器(Scheduler)

  • 功能:协调多通道的 DMA 传输,管理带宽分配。
  • 机制
    • 根据仲裁策略(加权轮询或严格优先级)分配内存和流接口资源。
    • 使用权重寄存器(Weighted Round-Robin 模式)或优先级寄存器(Strict Priority 模式)动态调整通道优先级。
    • 支持通道独立使能/禁用,确保灵活配置。
  • 应用:优化多通道并发传输,满足不同带宽和实时性需求。

4. 分散-聚集引擎

  • 功能:管理非连续内存块的 DMA 传输。
  • 机制
    • 解析描述符链,获取数据地址、长度和控制信息。
    • 描述符格式包括:
      • Next Descriptor:指向下一个描述符的地址(支持 64 位地址)。
      • Buffer Address:数据缓冲区的起始地址。
      • Control:传输长度、SOP/EOP 标志。
      • App Words:用户定义字段(如时间戳)。
    • 支持环形缓冲区模式,描述符循环使用,适合连续传输。
  • 应用:处理复杂数据模式,如视频帧或多路传感器数据。

5. 控制与状态模块

  • 功能:通过 AXI4-Lite 接口配置和监控 DMA 操作。
  • 机制
    • 配置寄存器:通道使能、描述符地址、仲裁权重、突发长度。
    • 状态寄存器:传输完成、错误标志、通道空闲状态。
    • 中断控制:支持通道级中断(IOC_Irq、Error_Irq)和全局中断(irq)。
  • 应用:支持处理器(如 MicroBlaze、Zynq PS)动态控制 DMA。

6. 时钟与复位模块

  • 功能:管理时钟域和复位信号。
  • 机制
    • 时钟
      • axi_aclk:全局时钟(同步模式)。
      • m_axis_mm2s_aclk:MM2S 流接口时钟(异步模式)。
      • m_axis_s2mm_aclk:S2MM 流接口时钟(异步模式)。
      • s_axi_lite_aclk:AXI4-Lite 接口时钟。
    • 复位
      • axi_aresetn:全局低电平有效复位。
      • 各接口支持独立复位(异步模式)。
    • 支持跨时钟域传输,确保数据一致性。
  • 应用:适配多时钟域系统设计。

接口信号

以下是 AXI MCDMA IP 的主要接口信号及其功能:

  1. AXI4 内存映射接口(M_AXI_MM2S、M_AXI_S2MM)

    • 类型:AXI4 主接口(读通道用于 MM2S,写通道用于 S2MM)。
    • 信号
      • M_AXI_MM2S_ARADDR[C_ADDR_WIDTH-1:0]:MM2S 读地址(32 或 64 位)。
      • M_AXI_MM2S_ARVALIDARREADY:读地址握手。
      • M_AXI_MM2S_ARLEN[7:0]:突发长度(0-255)。
      • M_AXI_MM2S_RDATA[C_DATA_WIDTH-1:0]:读数据(32-1024 位)。
      • M_AXI_MM2S_RVALIDRREADY:读数据握手。
      • M_AXI_S2MM_AWADDRAWVALIDAWREADY:S2MM 写地址通道。
      • M_AXI_S2MM_WDATAWVALIDWREADY:写数据通道。
      • M_AXI_S2MM_BRESPBVALIDBREADY:写响应通道。
    • 功能:实现内存映射域的读写操作。
    • 时钟axi_aclk
  2. AXI4-Stream 接口(M_AXIS_MM2S、S_AXIS_S2MM)

    • 类型:AXI4-Stream 主接口(MM2S 输出)或从接口(S2MM 输入)。
    • 信号(每通道独立,x=0-15):
      • M_AXIS_MM2S_TDATA_x[C_STREAM_WIDTH-1:0]:MM2S 流数据(8-1024 位)。
      • M_AXIS_MM2S_TVALID_xTREADY_x:流握手。
      • M_AXIS_MM2S_TLAST_x:包或帧结束标志。
      • M_AXIS_MM2S_TKEEP_x[C_STREAM_WIDTH/8-1:0]:字节有效信号。
      • S_AXIS_S2MM_TDATA_xTVALID_xTREADY_xTLAST_xTKEEP_x:S2MM 流输入。
    • 功能:传输流式数据到/从外设。
    • 时钟m_axis_mm2s_aclk(MM2S)、m_axis_s2mm_aclk(S2MM)。
  3. AXI4-Lite 控制接口(S_AXI_LITE)

    • 类型:AXI4-Lite 从接口。
    • 信号
      • S_AXI_LITE_ARADDR[31:0]:读地址。
      • S_AXI_LITE_ARVALIDARREADY:读地址握手。
      • S_AXI_LITE_RDATA[31:0]:读数据(固定 32 位)。
      • S_AXI_LITE_WDATAWVALIDWREADY:写数据通道。
      • S_AXI_LITE_BRESPBVALIDBREADY:写响应通道。
    • 功能:配置 DMA 参数和监控状态。
    • 时钟s_axi_lite_aclk
  4. 中断接口

    • irq:全局中断信号,汇总各通道的中断事件(如传输完成、错误)。
    • 功能:通知处理器处理 DMA 事件。
  5. 时钟与复位接口

    • axi_aclk:全局时钟。
    • m_axis_mm2s_aclk:MM2S 流时钟(异步模式)。
    • m_axis_s2mm_aclk:S2MM 流时钟(异步模式)。
    • s_axi_lite_aclk:AXI4-Lite 时钟。
    • axi_aresetn:全局低电平有效复位。
    • 功能:支持多时钟域和复位管理。

配置方法

1. 在 Vivado 中添加 IP

  • 添加 AXI MCDMA
    • 在 Vivado IP Catalog 中搜索 AXI MCDMA,添加到设计。
    • 双击 IP 核,打开定制化对话框。
  • 配置参数
    • 通道数量
      • Number of MM2S Channels:MM2S 通道数(0-16)。
      • Number of S2MM Channels:S2MM 通道数(0-16)。
    • 数据宽度
      • MM2S Data Width:MM2S 内存映射数据宽度(32-1024 位)。
      • S2MM Data Width:S2MM 内存映射数据宽度(32-1024 位)。
      • Stream Data Width:每通道流数据宽度(8-1024 位)。
    • 分散-聚集
      • Enable Scatter Gather:启用 SG 模式(默认启用)。
    • 仲裁策略
      • Arbitration Type:选择 Weighted Round-Robin 或 Strict Priority。
      • Channel Weights:为轮询模式设置通道权重(0-255)。
      • Channel Priorities:为优先级模式设置通道优先级(0-15)。
    • 突发长度
      • MM2S Burst Size:MM2S 突发长度(2、4、8、16、32、64、128、256)。
      • S2MM Burst Size:S2MM 突发长度。
    • 时钟模式
      • Enable Asynchronous Clocks:启用异步模式(独立流时钟)。
      • AXI Clock Frequency:设置 axi_aclk 频率(默认 100 MHz)。
    • 描述符管理
      • Descriptor Address Width:支持 32 或 64 位地址。
  • RTL 生成
    • Vivado 根据配置生成 Verilog 代码,实例化所需模块。
    • 输出文件位于项目目录的 IP 实例化路径(如 project_name.srcs/sources_1/ip/axi_mcdma)。

2. 连接与驱动

  • 硬件连接
    • M_AXI_MM2S:连接到 AXI4 从设备(如 DDR 控制器、AXI Interconnect)。
    • M_AXI_S2MM:连接到 AXI4 从设备。
    • M_AXIS_MM2S_x:连接到 AXI4-Stream 从设备(如视频处理模块)。
    • S_AXIS_S2MM_x:连接到 AXI4-Stream 主设备(如 ADC)。
    • S_AXI_LITE:连接到处理器(如 Zynq PS、MicroBlaze)通过 AXI Interconnect。
    • 中断:将 irq 连接到中断控制器(如 Zynq GIC)。
    • 分配时钟信号:
      • 同步模式:所有接口使用 axi_aclk
      • 异步模式:为 MM2S 和 S2MM 分配独立时钟(m_axis_mm2s_aclkm_axis_s2mm_aclk)。
    • 分配复位信号:
      • 确保 axi_aresetn 与时钟同步。
    • 使用 Vivado 地址编辑器为 M_AXI_MM2SM_AXI_S2MM 分配地址空间。
  • 驱动程序
    • Xilinx 提供裸机和 Linux 驱动:
      • 裸机驱动
        • 源代码位于 Vitis 或 Xilinx GitHub(embeddedsw/XilinxProcessorIPLib/drivers/mcdma)。
        • 使用 XMcDma_CfgInitialize() 初始化 MCDMA,配置通道和描述符
        • 支持中断模式(XMcdma_TxIntrHandlerXMcdma_IntrHandler)和轮询模式。
      • Linux 驱动
        • 集成在 Linux 内核(drivers/dma/xilinx/xilinx_dma.c),支持 DMAEngine 框架。
        • 通过 Device Tree 配置通道数和 StreamID。
    • 示例代码:
      • 裸机示例:xaxidma_example_sg_intr.c
      • Linux 示例:Petalinux 项目配置。
    • 参考 Xilinx 示例设计(如 Zynq MCDMA )。

3. 仿真与验证

  • 仿真环境
    • 使用 Vivado Simulator 或 ModelSim 进行 RTL 仿真。
    • 编写 Verilog 测试平台,驱动 AXI4 和 AXI4-Stream 接口。
    • 使用 AXI Verification IP(PG267)验证协议合规性。
  • 验证内容
    • 检查多通道传输的正确性(数据顺序、通道隔离)。
    • 验证 SG 模式的描述符解析和环形缓冲区功能。
    • 测试仲裁机制(加权轮询或优先级)在多通道竞争下的性能。
    • 确保跨时钟域传输的稳定性(异步模式)。
    • 验证中断触发(传输完成、错误)和状态寄存器。
  • 波形分析
    • 检查 AXI4 Valid-Ready 握手、TLASTTKEEP 信号。
    • 确认无数据丢失、通道冲突或死锁。

资源利用情况

AXI MCDMA 的资源占用取决于通道数、数据宽度、SG 模式和时钟配置。以下是典型资源利用情况(基于 7 系列、UltraScale 和 Zynq 设备,Vivado 综合):

  • 资源类型
    • LUT(查找表):1000-15000,取决于通道数和数据宽度。
    • FF(触发器):1500-20000,与 LUT 占用相关。
    • BRAM:0-8,SG 模式下描述符存储可能使用 BRAM(512 字约 1 BRAM)。
    • DSP 切片:不使用。
  • 配置示例
    • 4 通道(2 MM2S + 2 S2MM),64 位数据宽度,SG 模式,同步模式:约 2000 LUT、3000 FF、2 BRAM。
    • 16 通道,128 位数据宽度,SG 模式,异步模式:约 10000 LUT、15000 FF、6 BRAM。
  • 最大频率
    • 7 系列(-1 速度等级):200 MHz。
    • UltraScale+:300 MHz 或更高。
      具体资源利用需参考 Vivado 综合报告,建议根据目标设备验证资源占用。

应用场景

AXI MCDMA IP 适用于以下场景:

  1. 多通道视频处理

    • 处理多路视频流(如 4K 视频或多摄像头输入),通过 MM2S 通道输出到流式处理模块。
    • 使用 S2MM 通道将编码后的视频流写入内存。
    • 配合 AXI VDMA 和 AXI4-Stream Interconnect。
  2. 信号处理

    • 处理多路传感器数据(如雷达、声纳),通过 S2MM 通道采集数据到内存。
    • 使用 SG 模式管理非连续数据块,提高灵活性。
  3. Zynq SoC 集成

    • 在 Zynq-7000 或 UltraScale+ MPSoC 中,桥接 PS 和 PL 之间的多通道数据传输。
    • PS 配置 MCDMA 寄存器,PL 处理流式数据。
  4. 网络通信

    • 处理多路网络数据包,通过 MM2S 和 S2MM 通道实现数据收发。
    • 支持高吞吐量传输,适合 10G 以太网或 PCIe 应用。
  5. 实时数据采集

    • 采集多路 ADC 数据,通过 S2MM 通道存储到 DDR。
    • 使用环形缓冲区模式实现连续采集。

注意事项

  1. 通道配置

    • 确保通道数(Number of MM2S/S2MM Channels)与实际需求匹配,避免资源浪费。
    • 每个通道的流数据宽度需与外设接口一致。
  2. 描述符管理

    • 描述符需存储在连续内存中,地址对齐(通常 64 字节)。
    • SG 模式下,描述符链需正确初始化,防止传输中断。
  3. 仲裁优化

    • 加权轮询适合带宽分配均匀的场景,需根据通道流量调整权重。
    • 严格优先级适合实时性要求高的通道,但可能导致低优先级通道饥饿(参考 PG288,第 10 页)。
  4. 时钟域管理

    • 异步模式下,流时钟(m_axis_mm2s_aclkm_axis_s2mm_aclk)频率应与外设匹配,建议接近 axi_aclk(参考)。
    • 使用 MMCM/PLL 生成稳定时钟,避免抖动。
  5. 复位同步

    • axi_aresetn 需在各时钟域内同步,保持至少 16 个时钟周期。
    • 推荐使用异步复位同步释放电路。

总结

AXI MCDMA IP(PG288)是一款高性能多通道 DMA 软核,支持最多 16 个独立通道,结合 AXI4 和 AXI4-Stream 协议,实现内存映射域与流域之间的高效数据传输。其通过分散-聚集、灵活仲裁和多时钟域支持,满足视频处理、信号处理、网络通信和数据采集等复杂应用需求。

用户在配置时需注意通道数、数据宽度、仲裁策略和描述符管理,合理选择时钟模式,并通过仿真验证多通道传输和 SG 功能的正确性。结合 Vivado 工具、Vitis 驱动和 Linux 框架,AXI MCDMA 可显著提升系统性能。

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、付费专栏及课程。

余额充值