[AXI] AXI VDMA

AXI VDMA IP 详细介绍

概述

AXI VDMA(Video Direct Memory Access,视频直接内存访问)专为在 FPGA 和 SoC 系统中实现高效的视频数据传输设计,支持通过 AXI4 和 AXI4-Stream 协议在内存(如 DDR)和视频处理模块之间进行高带宽数据搬运。它广泛应用于视频处理、图像处理和嵌入式视觉系统,如 Zynq SoC、Versal 架构和 UltraScale+ 设备的视频流水线设计。

AXI VDMA 的核心功能是提供双通道(Memory Map to Stream 和 Stream to Memory Map)DMA 引擎,支持视频帧的读写操作,配合 AXI4 内存映射接口(MM2S 和 S2MM)与 AXI4-Stream 接口传输数据。它通过灵活的帧缓冲区管理、动态分辨率支持和中断控制,满足实时视频处理的高吞吐量需求。

该 IP 核的主要功能包括:

  • 双通道 DMA:支持内存到流(MM2S)和流到内存(S2MM)的数据传输。
  • 协议支持:兼容 AXI4 内存映射和 AXI4-Stream 协议。
  • 帧管理:支持多帧缓冲区和动态分辨率配置。
  • 高性能:提供高带宽视频数据传输,适合 4K/8K 视频处理。

主要特性

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

  1. 协议支持

    • AXI4 内存映射接口:用于 MM2S(Memory Map to Stream)和 S2MM(Stream to Memory Map)通道,连接到内存控制器(如 DDR)。
    • AXI4-Stream 接口:用于视频数据流传输,连接到视频处理模块。
    • 支持 AMBA AXI4 协议规范(IHI0022),兼容 AXI4 和 AXI4-Stream。
  2. 双通道 DMA 引擎

    • MM2S 通道
      • 从内存读取视频帧数据,转换为 AXI4-Stream 格式输出。
      • 适合将存储的视频数据传输到视频处理模块。
    • S2MM 通道
      • 从 AXI4-Stream 输入接收视频数据,写入内存。
      • 适合将视频处理模块的输出存储到内存。
    • 支持独立或同步的双通道操作。
  3. 帧缓冲区管理

    • 支持多帧缓冲区(1-32 个帧),通过帧存储寄存器(Frame Store Registers)管理。
    • 提供动态帧切换,允许连续视频流处理。
    • 支持帧同步机制(如帧同步信号 fsync 或自由运行模式)。
  4. 动态分辨率支持

    • 支持可编程的水平分辨率(Horizontal Size,最大 8192 像素)和垂直分辨率(Vertical Size,最大 8192 像素)。
    • 支持可配置的行跨距(Stride),适配不同帧格式和内存对齐。
  5. 控制与中断

    • 通过 AXI4-Lite 控制接口配置 DMA 参数(如帧地址、分辨率、传输模式)。
    • 提供中断信号(mm2s_introuts2mm_introut),支持帧完成、错误和延迟中断。
    • 支持软件驱动(裸机或 Linux),简化配置和状态监控。
  6. 性能优化

    • 高带宽传输
      • 支持最大 1024 位数据宽度(AXI4 接口)。
      • 最大突发长度 256(AXI4),优化内存访问效率。
    • 流水线设计
      • 内部流水线处理,减少传输延迟。
      • 支持帧预取(Frame Prefetch),提高吞吐量。
    • 动态时钟支持
      • MM2S 和 S2MM 通道可使用不同时钟(m_axi_mm2s_aclkm_axi_s2mm_aclk)。
    • 最大频率:250 MHz(7 系列,-1 速度等级),更高频率支持 UltraScale+。
  7. 工具与设备支持

    • 设计工具:Vivado Design Suite。
    • 支持设备:Artix-7、Kintex-7、Virtex-7、Zynq-7000、Kintex UltraScale、Virtex UltraScale、Zynq UltraScale+ MPSoC、Versal AI Core、Versal Premium、Versal Prime。

功能模块

AXI VDMA IP 的功能模块围绕视频数据传输和帧管理设计,核心包括 DMA 引擎、帧存储器、控制逻辑和接口适配。以下是主要模块及其功能:

1. MM2S DMA 引擎

  • 功能:从内存读取视频帧,转换为 AXI4-Stream 输出。
  • 机制
    • 通过 AXI4 接口(m_axi_mm2s)从内存读取数据。
    • 根据帧存储寄存器中的地址(MM2S_START_ADDRESS)和分辨率(HSIZEVSIZE)组织数据。
    • 将数据打包为 AXI4-Stream 格式,输出到 m_axis_mm2s 接口。
    • 支持帧同步(mm2s_fsync)或自由运行模式。
  • 应用:将存储的视频帧传输到视频处理模块(如图像缩放、颜色转换)。

2. S2MM DMA 引擎

  • 功能:从 AXI4-Stream 输入接收视频数据,写入内存。
  • 机制
    • 通过 AXI4-Stream 接口(s_axis_s2mm)接收视频数据。
    • 根据帧存储寄存器中的地址(S2MM_START_ADDRESS)和分辨率写入内存(m_axi_s2mm)。
    • 支持帧同步(s2mm_fsync)或自由运行模式。
  • 应用:将视频处理模块的输出存储到内存(如 DDR)。

3. 帧存储器管理模块

  • 功能:管理多帧缓冲区的地址和状态。
  • 机制
    • 存储 1-32 个帧的起始地址(MM2S_START_ADDRESSS2MM_START_ADDRESS)。
    • 跟踪当前帧和下一帧状态,支持动态帧切换。
    • 提供帧计数器(Frame Counter),触发帧完成中断。
  • 应用:支持连续视频流处理,防止帧丢失。

4. 控制逻辑模块

  • 功能:通过 AXI4-Lite 接口配置和监控 VDMA 状态。
  • 机制
    • 配置寄存器
      • 设置帧地址、分辨率(HSIZEVSIZE)、行跨距(STRIDE)。
      • 启用/禁用 MM2S 和 S2MM 通道。
      • 配置中断阈值和延迟。
    • 状态寄存器
      • 记录传输状态(运行、停止、错误)。
      • 提供错误标志(如帧同步错误、DMA 错误)。
    • 中断控制
      • 生成 mm2s_introuts2mm_introut,通知帧完成或错误。
  • 应用:支持软件动态配置和故障诊断。

5. 接口适配模块

  • 功能:适配 AXI4 和 AXI4-Stream 接口的信号和时序。
  • 机制
    • AXI4 接口
      • 支持读(MM2S)/写(S2MM)事务,优化突发长度和地址对齐。
      • 实现 AXI4 握手(ARVALID/ARREADYWVALID/WREADY)。
    • AXI4-Stream 接口
      • 支持 TVALID/TREADY 握手,传递 TDATATLASTTUSER
      • 提供帧同步信号(mm2s_fsyncs2mm_fsync)或内部触发。
  • 应用:确保与内存和视频模块的兼容性。

6. 时钟与复位模块

  • 功能:管理时钟和复位信号。
  • 机制
    • 时钟
      • s_axi_lite_aclk:AXI4-Lite 控制接口时钟。
      • m_axi_mm2s_aclk:MM2S AXI4 接口时钟。
      • m_axis_mm2s_aclk:MM2S AXI4-Stream 接口时钟。
      • m_axi_s2mm_aclk:S2MM AXI4 接口时钟。
      • s_axis_s2mm_aclk:S2MM AXI4-Stream 接口时钟。
    • 复位
      • axi_resetn:低电平有效复位,同步到对应时钟。
    • 支持多时钟域设计,需正确配置时钟同步。
  • 应用:支持灵活的时钟分配和高性能传输。

接口信号

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

  1. 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_RVALIDRREADY:读数据握手。
      • S_AXI_LITE_AWADDRAWVALIDAWREADY:写地址通道。
      • S_AXI_LITE_WDATAWVALIDWREADY:写数据通道。
      • S_AXI_LITE_BRESPBVALIDBREADY:写响应通道。
    • 功能:配置帧地址、分辨率、传输模式,读取状态和错误。
    • 时钟s_axi_lite_aclk
  2. AXI4 内存映射接口(MM2S 和 S2MM)

    • MM2S 接口(M_AXI_MM2S)
      • 类型:AXI4 主接口,读取内存数据。
      • 信号
        • M_AXI_MM2S_ARADDR[C_ADDR_WIDTH-1:0]:读地址(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_mm2s_aclk
    • S2MM 接口(M_AXI_S2MM)
      • 类型:AXI4 主接口,写入内存数据。
      • 信号
        • M_AXI_S2MM_AWADDRAWVALIDAWREADYAWLEN:写地址通道。
        • M_AXI_S2MM_WDATAWVALIDWREADY:写数据通道。
        • M_AXI_S2MM_WSTRB[C_DATA_WIDTH/8-1:0]:写选通。
        • M_AXI_S2MM_BRESPBVALIDBREADY:写响应通道。
      • 功能:将视频数据写入内存。
      • 时钟m_axi_s2mm_aclk
  3. AXI4-Stream 接口(MM2S 和 S2MM)

    • MM2S 接口(M_AXIS_MM2S)
      • 类型:AXI4-Stream 主接口,输出视频流。
      • 信号
        • M_AXIS_MM2S_TDATA[C_STREAM_WIDTH-1:0]:流数据(32-1024 位)。
        • M_AXIS_MM2S_TVALIDTREADY:流握手。
        • M_AXIS_MM2S_TLAST:帧结束标志。
        • M_AXIS_MM2S_TUSER[0:0]:帧起始标志(SOF,Start of Frame)。
        • M_AXIS_MM2S_TKEEP[C_STREAM_WIDTH/8-1:0]:字节有效信号。
      • 功能:输出视频流到处理模块。
      • 时钟m_axis_mm2s_aclk
    • S2MM 接口(S_AXIS_S2MM)
      • 类型:AXI4-Stream 从接口,接收视频流。
      • 信号:同 M_AXIS_MM2S,但方向相反。
      • 功能:接收视频流并写入内存。
      • 时钟s_axis_s2mm_aclk
  4. 帧同步信号

    • mm2s_fsync:MM2S 通道帧同步输入。
    • s2mm_fsync:S2MM 通道帧同步输入。
    • 功能:触发新帧传输(可选,自由运行模式无需此信号)。
  5. 中断接口

    • mm2s_introut:MM2S 通道中断(帧完成、错误)。
    • s2mm_introut:S2MM 通道中断。
    • 功能:通知处理器传输状态。
  6. 时钟与复位接口

    • s_axi_lite_aclkm_axi_mm2s_aclkm_axis_mm2s_aclkm_axi_s2mm_aclks_axis_s2mm_aclk:多时钟输入。
    • axi_resetn:低电平有效复位。
    • 功能:提供时钟和复位控制。

配置方法

1. 在 Vivado 中添加 IP

  • 添加 AXI VDMA
    • 在 Vivado IP Catalog 中搜索 AXI VDMA,添加到设计。
    • 双击 IP 核,打开定制化对话框。
  • 配置参数
    • 通道配置
      • C_MM2S_ENABLE:启用 MM2S 通道(默认启用)。
      • C_S2MM_ENABLE:启用 S2MM 通道(默认启用)。
    • 接口参数
      • C_M_AXI_MM2S_DATA_WIDTH:MM2S AXI4 数据宽度(32-1024 位)。
      • C_M_AXI_S2MM_DATA_WIDTH:S2MM AXI4 数据宽度。
      • C_M_AXIS_MM2S_TDATA_WIDTH:MM2S AXI4-Stream 数据宽度。
      • C_S_AXIS_S2MM_TDATA_WIDTH:S2MM AXI4-Stream 数据宽度。
      • C_ADDR_WIDTH:地址宽度(32 或 64 位)。
    • 帧管理
      • C_NUM_FSTORES:帧缓冲区数量(1-32)。
      • C_MM2S_MAX_BURSTC_S2MM_MAX_BURST:最大突发长度(8-256)。
    • 同步模式
      • C_MM2S_GENLOCK_MODEC_S2MM_GENLOCK_MODE:帧同步模式(0=自由运行,1=外部帧同步)。
    • 控制接口
      • C_S_AXI_LITE_ADDR_WIDTH:AXI4-Lite 地址宽度(默认 32 位)。
  • RTL 生成
    • Vivado 生成 Verilog 代码,实例化 DMA 引擎和控制逻辑。
    • 输出文件位于项目目录(如 project_name.srcs/sources_1/ip/axi_vdma)。

2. 连接与驱动

  • 硬件连接
    • S_AXI_LITE
      • 连接到处理器(如 Zynq PS、MicroBlaze)通过 AXI Interconnect。
    • M_AXI_MM2SM_AXI_S2MM
      • 连接到内存控制器(如 AXI SmartConnect 到 DDR)。
    • M_AXIS_MM2SS_AXIS_S2MM
      • 连接到视频处理模块(如 AXI4-Stream 图像处理 IP)。
    • 帧同步信号
      • 连接 mm2s_fsyncs2mm_fsync 到外部触发源(若启用帧同步)。
    • 中断
      • 连接 mm2s_introuts2mm_introut 到中断控制器(如 Zynq GIC)。
    • 分配时钟和复位:
      • 分配独立的时钟到 s_axi_lite_aclkm_axi_mm2s_aclk 等。
      • axi_resetn 连接到系统复位。
    • 使用 Vivado 地址编辑器为 S_AXI_LITEM_AXI 接口分配地址空间。
  • 驱动程序
    • 裸机驱动
      • Xilinx 提供 VDMA 驱动(XilinxProcessorIPLib/drivers/vdma),支持帧配置和中断处理。
      • 示例代码:配置帧地址(XAxiVdma_SetFrameStore)、启动传输(XAxiVdma_DmaStart)。
    • Linux 驱动
      • 使用 Xilinx Linux VDMA 驱动(drivers/dma/xilinx/xilinx_vdma.c)。
      • 配置 Device Tree,指定帧缓冲区和中断。
    • 调试支持
      • 使用 Vivado ILA 捕获 AXI4 和 AXI4-Stream 信号,分析传输行为。
      • 读取状态寄存器,定位错误(如帧同步丢失)。

3. 仿真与验证

  • 仿真环境
    • 使用 Vivado Simulator 或 ModelSim 进行 RTL 仿真。
    • 编写 SystemVerilog 测试平台,驱动 S_AXI_LITE 配置和 S_AXIS_S2MM 数据。
    • 使用 AXI Verification IP(PG267)模拟 AXI 主设备和从设备,验证接口行为。
  • 验证内容
    • 检查 MM2S 通道:验证内存数据正确转换为 AXI4-Stream 输出,TLASTTUSER 信号正确。
    • 验证 S2MM 通道:确认 AXI4-Stream 输入正确写入内存,地址和跨距符合预期。
    • 测试帧同步:触发 mm2s_fsync/s2mm_fsync,验证帧切换。
    • 验证中断:检查 mm2s_introut/s2mm_introut 的触发时序。
    • 测试错误场景:模拟内存错误(RRESP=SLVERR)或帧同步丢失。
  • 波形分析
    • 使用 Vivado 波形查看器分析 AXI4 和 AXI4-Stream 信号。
    • 确认突发长度、数据对齐和帧同步时序。
    • 检查中断信号的触发条件。

资源利用情况

AXI VDMA 的资源占用取决于通道配置、数据宽度和帧缓冲区数量。以下是典型资源利用情况(基于 7 系列、UltraScale 和 Zynq 设备,Vivado 综合):

  • 资源类型
    • LUT(查找表):1000-5000,取决于通道数量和数据宽度。
    • FF(触发器):2000-8000,与 LUT 占用相关。
    • BRAM:0-2,用于帧地址存储(视 C_NUM_FSTORES)。
    • DSP 切片:0(不使用)。
  • 配置示例
    • MM2S+S2MM,64 位数据宽度,8 帧缓冲区:约 2000 LUT、4000 FF、1 BRAM。
    • MM2S 单通道,128 位数据宽度,4 帧缓冲区:约 1500 LUT、3000 FF。
    • S2MM 单通道,32 位数据宽度,16 帧缓冲区:约 1800 LUT、3500 FF、1 BRAM。
  • 最大频率
    • 7 系列(-1 速度等级):250 MHz。
    • UltraScale+:400 MHz 或更高。

具体资源利用需参考 Vivado 综合报告,建议根据目标设备和配置验证资源占用。


应用场景

AXI VDMA IP 适用于以下场景:

  1. 视频处理流水线

    • 在 Zynq SoC 或 Versal 设计中,构建视频处理流水线(如 4K/8K 视频缩放、格式转换)。
    • 配合 AXI4-Stream 处理模块(如 Xilinx Video Scaler、Color Space Converter)。
  2. 嵌入式视觉系统

    • 在自动驾驶或工业视觉系统中,传输相机捕获的图像数据到内存或处理模块。
    • 支持实时图像处理和存储。
  3. 显示系统

    • 在视频显示应用中,将内存中的帧数据传输到 HDMI 或 DisplayPort 接口。
    • 支持高分辨率视频输出(如 1080p、4K)。
  4. 数据采集与存储

    • 在高带宽数据采集系统中,将传感器数据通过 AXI4-Stream 存储到 DDR。
    • 配合 AXI SmartConnect(PG247)实现多通道数据管理。
  5. 调试与验证

    • 在视频系统开发中,使用 AXI VDMA 验证 AXI4 和 AXI4-Stream 接口的行为。
    • 配合 Vivado ILA 分析帧传输性能。

注意事项

  1. 协议配置

    • 确保 AXI4 和 AXI4-Stream 接口的参数(数据宽度、突发长度)与上下游模块匹配。
    • AXI4-Lite 地址空间需正确映射,避免配置错误。
  2. 帧同步设置

    • 外部帧同步模式需提供稳定的 mm2s_fsync/s2mm_fsync 信号,频率匹配视频帧率。
    • 自由运行模式适合无外部触发场景,但需软件管理帧切换。
  3. 时钟管理

    • 确保多时钟域(s_axi_lite_aclkm_axi_mm2s_aclk 等)同步或正确配置 CDC(跨时钟域)。
    • axi_resetn 需保持至少 16 个时钟周期,同步释放以防亚稳态。
  4. 中断处理

    • 配置中断控制器正确响应 mm2s_introuts2mm_introut,避免漏报帧完成或错误。
    • 定期读取状态寄存器,处理错误(如 DMA 错误、帧同步丢失)。
  5. 性能优化

    • 设置合适的突发长度(C_MM2S_MAX_BURSTC_S2MM_MAX_BURST),最大化内存带宽。
    • 调整行跨距(STRIDE)以优化内存对齐,减少无效传输。

总结

AXI VDMA IP(PG020)是一款高性能的视频 DMA 软核,支持 AXI4 和 AXI4-Stream 协议,通过双通道 DMA 引擎和灵活的帧管理,实现内存与视频处理模块间的高效数据传输。其动态分辨率支持、高带宽传输和中断控制使其成为视频处理、嵌入式视觉和显示系统的核心组件,广泛应用于 Zynq SoC、Versal 和 UltraScale+ 设计。

用户在配置时需注意接口参数、帧同步模式和时钟管理,合理优化突发长度和中断处理,并通过仿真验证传输性能。结合 Vivado 工具、Xilinx 驱动和 ILA 调试,AXI VDMA 可显著提升视频系统性能和开发效率。

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

余额充值