AXI MM2S Mapper IP 详细介绍
概述
AXI MM2S Mapper(Memory Map to Stream Mapper)是 AXI Video DMA(VDMA)模块的一个关键子组件,专为从 AXI4 内存映射域(Memory-Mapped Domain)到 AXI4-Stream 域(Stream Domain)的数据传输设计。它主要用于高效地将内存中的数据(如视频帧或图像数据)映射到流式接口,广泛应用于 FPGA 和 SoC 系统设计,特别是在视频处理、图像处理和实时数据流场景中。
AXI MM2S Mapper 的核心功能是通过读取内存映射域的数据(通常存储在 DDR 或 BRAM 中),将其转换为 AXI4-Stream 格式,供下游流式处理模块(如视频编码器、显示接口)使用。它支持帧同步、行缓冲和灵活的地址映射,特别适合视频数据流的处理需求。
该 IP 核的主要功能包括:
- 高效数据映射:从 AXI4 内存映射域读取数据,转换为 AXI4-Stream 数据流。
- 视频帧支持:支持视频帧的水平和垂直同步信号,适配视频数据格式。
- 灵活配置:支持可配置的数据宽度、帧大小和地址步幅。
- 高吞吐量:通过突发传输和行缓冲优化数据流传输性能。
主要特性
AXI MM2S Mapper IP 具有以下关键特性:
-
AXI 协议兼容性:
- 符合 ARM AMBA AXI4 和 AXI4-Stream 协议规范。
- AXI4 内存映射接口:支持 32、64、128、256、512 或 1024 位数据宽度,适用于高带宽内存访问。
- AXI4-Stream 接口:支持 8、16、32、64、128、256、512 或 1024 位数据宽度,适用于流式数据传输。
- 支持 AXI4 突发传输(最大 256 数据节拍)和 AXI4-Stream 的
TVALID
/TREADY
握手机制。
-
数据映射功能:
- 从 AXI4 内存映射域读取数据,转换为 AXI4-Stream 数据流。
- 支持视频帧格式,包括水平同步(Hsync)、垂直同步(Vsync)和帧同步信号。
- 支持可配置的帧大小(水平像素数和垂直行数)和数据步幅(Stride)。
- 支持 4 KB 地址边界保护,符合 AXI4 协议要求。
-
行缓冲机制:
- 内置行缓冲(Line Buffer),用于缓存一行的像素数据,优化突发传输效率。
- 支持可配置的行缓冲深度(通常为 512、1024 或 2048 字节)。
- 减少内存访问延迟,提高流式输出的连续性。
-
时钟支持:
- 同步模式:内存映射接口和流接口共享同一时钟(
m_axi_mm2s_aclk
)。 - 异步模式:支持独立的流接口时钟(
m_axis_mm2s_aclk
),用于跨时钟域传输。 - 最大频率:最高 200 MHz(7 系列,-1 速度等级),更高频率适用于 UltraScale 设备。
- 同步模式:内存映射接口和流接口共享同一时钟(
-
控制与状态:
- 通过 AXI4-Lite 接口(通常由 AXI VDMA 提供)配置映射参数,如帧地址、步幅和分辨率。
- 提供帧同步和传输状态信号(如
TLAST
、TUSER
),支持视频流控制。 - 支持中断信号,通知帧传输完成或错误事件。
-
工具与设备支持:
- 设计工具: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 MM2S Mapper IP 的核心功能是从 AXI4 内存映射域读取数据并映射到 AXI4-Stream 域,其主要功能模块包括以下几个方面:
1. AXI4 内存映射读取模块
- 功能:通过 AXI4 内存映射接口从内存读取数据。
- 机制:
- 使用 AXI4 读地址通道(
M_AXI_MM2S_ARADDR
、ARVALID
、ARREADY
)发起内存访问。 - 支持突发传输(最大 256 数据节拍),自动分区以符合 4 KB 地址边界。
- 根据帧地址和步幅(Stride)计算每次读取的地址增量。
- 读取数据通过 AXI4 读数据通道(
M_AXI_MM2S_RDATA
、RVALID
、RREADY
)返回。
- 使用 AXI4 读地址通道(
- 应用:从 DDR 或 BRAM 读取视频帧或图像数据。
2. 行缓冲模块
- 功能:缓存一行的像素数据,优化流式输出。
- 机制:
- 使用内部 FIFO 或 RAM 实现行缓冲,深度可配置(512、1024 或 2048 字节)。
- 从 AXI4 内存映射接口读取的数据首先存储到行缓冲。
- 按行顺序将缓冲数据输出到 AXI4-Stream 接口,减少内存访问频率。
- 支持动态调整缓冲深度,根据帧分辨率和数据宽度优化性能。
- 应用:确保视频流的连续性,减少下游模块的等待时间。
3. AXI4-Stream 输出模块
- 功能:将行缓冲中的数据转换为 AXI4-Stream 格式输出。
- 机制:
- 通过 AXI4-Stream 接口(
M_AXIS_MM2S
)输出数据,支持TVALID
、TREADY
、TDATA
和TLAST
信号。 - 使用
TUSER
信号携带帧同步信息(如 Start of Frame,SOF)。 - 使用
TKEEP
信号(可选)指示有效字节。 - 支持帧结束(End of Frame,EOF)标志,通过
TLAST
信号标记。
- 通过 AXI4-Stream 接口(
- 应用:将内存数据传输到流式处理模块,如视频编码器或 HDMI 接口。
4. 帧同步与控制模块
- 功能:管理视频帧的同步信号和传输控制。
- 机制:
- 根据配置的帧分辨率(水平像素数和垂直行数),生成帧同步信号(
TUSER[0]
为 SOF)。 - 支持外部同步信号输入(如
fsync
),与视频时序对齐。 - 通过 AXI4-Lite 控制接口(通常由 AXI VDMA 提供)设置帧地址、步幅和分辨率。
- 提供状态反馈,如传输完成或错误中断。
- 根据配置的帧分辨率(水平像素数和垂直行数),生成帧同步信号(
- 应用:支持视频帧的精确传输,适配标准视频格式(如 1080p、4K)。
5. 时钟与复位模块
- 功能:管理时钟和复位信号,支持同步和异步模式。
- 机制:
- 时钟:
m_axi_mm2s_aclk
:AXI4 内存映射接口时钟。m_axis_mm2s_aclk
:AXI4-Stream 接口时钟(异步模式)。
- 复位:
m_axi_mm2s_aresetn
:内存映射接口低电平有效复位。m_axis_mm2s_aresetn
:流接口低电平有效复位(异步模式)。
- 支持跨时钟域传输,确保数据一致性。
- 时钟:
- 应用:支持灵活的时钟域配置,适应复杂系统。
接口说明
以下是 AXI MM2S Mapper IP 的主要接口及其功能:
-
AXI4 内存映射接口(M_AXI_MM2S):
- 类型:AXI4 主接口(读通道)。
- 信号:
M_AXI_MM2S_ARADDR[C_ADDR_WIDTH-1:0]
:读地址(通常 32 或 64 位)。M_AXI_MM2S_ARVALID
、ARREADY
:读地址握手。M_AXI_MM2S_ARLEN[7:0]
:突发长度(0-255 数据节拍)。M_AXI_MM2S_ARSIZE[2:0]
:突发大小(字节对齐)。M_AXI_MM2S_ARBURST[1:0]
:突发类型(INCR 或 FIXED)。M_AXI_MM2S_RDATA[C_DATA_WIDTH-1:0]
:读数据(32-1024 位)。M_AXI_MM2S_RRESP[1:0]
:读响应(OKAY、SLVERR 等)。M_AXI_MM2S_RVALID
、RREADY
:读数据握手。
- 功能:从内存(如 DDR)读取数据。
- 时钟:
m_axi_mm2s_aclk
。
-
AXI4-Stream 输出接口(M_AXIS_MM2S):
- 类型:AXI4-Stream 主接口。
- 信号:
M_AXIS_MM2S_TDATA[C_STREAM_WIDTH-1:0]
:流数据(8-1024 位)。M_AXIS_MM2S_TVALID
、TREADY
:流握手。M_AXIS_MM2S_TLAST
:帧或行结束标志。M_AXIS_MM2S_TKEEP[C_STREAM_WIDTH/8-1:0]
:字节有效信号(可选)。M_AXIS_MM2S_TUSER[0]
:帧同步信号(SOF)。
- 功能:输出流式数据到下游模块。
- 时钟:
m_axis_mm2s_aclk
(异步模式)或m_axi_mm2s_aclk
(同步模式)。
-
控制与状态接口:
- 类型:通常通过 AXI VDMA 的 AXI4-Lite 接口(
S_AXI_LITE
)间接控制。 - 信号(由 VDMA 提供):
- 配置寄存器:帧起始地址、步幅、水平/垂直分辨率。
- 状态寄存器:传输完成、错误标志。
- 中断:
mm2s_introut
:帧传输完成或错误中断。
- 功能:配置映射参数,监控传输状态。
- 时钟:
s_axi_lite_aclk
(由 VDMA 提供)。
- 类型:通常通过 AXI VDMA 的 AXI4-Lite 接口(
-
时钟与复位接口:
m_axi_mm2s_aclk
:内存映射接口时钟。m_axis_mm2s_aclk
:流接口时钟(异步模式)。m_axi_mm2s_aresetn
:内存映射接口复位。m_axis_mm2s_aresetn
:流接口复位(异步模式)。- 功能:提供时钟和复位控制,支持同步或异步设计。
配置方法
1. 在 Vivado 中添加 IP
- AXI MM2S Mapper 通常作为 AXI VDMA IP 的子模块,无法单独在 Vivado IP Catalog 中添加。
- 添加 AXI VDMA:
- 打开 Vivado 的 IP Catalog,搜索 AXI VDMA,添加到设计。
- 双击 AXI VDMA IP,打开定制化对话框。
- 配置 MM2S Mapper 相关参数:
- 通道选择:
- Enable MM2S Channel:启用 MM2S 通道(包含 MM2S Mapper)。
- 数据宽度:
- MM2S Memory Map Data Width:选择 32、64、128、256、512 或 1024 位。
- MM2S Stream Data Width:选择 8、16、32、64、128、256、512 或 1024 位。
- 帧参数:
- Frame Size:设置水平分辨率(Hsize,最大 8192 像素)和垂直分辨率(Vsize,最大 8192 行)。
- Stride:设置帧步幅(字节数,影响行地址增量)。
- 行缓冲:
- MM2S Line Buffer Depth:选择 512、1024、2048 或更大(影响 BRAM 占用)。
- 时钟配置:
- Enable Asynchronous Clocks:启用异步模式(独立
m_axis_mm2s_aclk
)。 - MM2S Clock Frequency:设置
m_axi_mm2s_aclk
频率(默认 100 MHz)。 - Stream Clock Frequency:设置
m_axis_mm2s_aclk
频率(异步模式)。
- Enable Asynchronous Clocks:启用异步模式(独立
- 突发长度:
- MM2S Burst Size:选择 2、4、8、16、32、64、128 或 256 数据节拍,影响吞吐量。
- 帧同步:
- Frame Sync Source:选择内部同步(Free-Run)或外部同步(
fsync
信号)。
- Frame Sync Source:选择内部同步(Free-Run)或外部同步(
- 通道选择:
2. 连接与驱动
- 硬件连接:
- AXI4 内存映射接口(
M_AXI_MM2S
):- 连接到 AXI4 从设备(如 DDR 控制器、AXI Interconnect)。
- AXI4-Stream 接口(
M_AXIS_MM2S
):- 连接到 AXI4-Stream 从设备(如视频处理模块、HDMI 接口)。
- AXI4-Lite 控制接口(由 VDMA 提供):
- 连接到处理器(如 Zynq PS 或 MicroBlaze)通过 AXI Interconnect。
- 中断:
- 将
mm2s_introut
连接到中断控制器(如 Zynq GIC)。
- 将
- 分配时钟信号:
- 同步模式:所有接口使用
m_axi_mm2s_aclk
。 - 异步模式:为流接口分配
m_axis_mm2s_aclk
。
- 同步模式:所有接口使用
- 分配复位信号:
- 确保
m_axi_mm2s_aresetn
和m_axis_mm2s_aresetn
与时钟同步。
- 确保
- 使用 Vivado 地址编辑器为
M_AXI_MM2S
分配地址空间。
- AXI4 内存映射接口(
- 驱动程序:
- AXI MM2S Mapper 通过 AXI VDMA 的驱动程序间接控制。
- Xilinx 提供官方 Linux 和裸机驱动(参考 Xilinx GitHub):
- Linux 驱动:基于 V4L2 或 DMAEngine 框架,配置帧地址、分辨率和步幅。
- 裸机驱动:提供 API(如
XVDma
库)用于初始化 VDMA 和配置 MM2S 参数。
- 用户需通过 AXI4-Lite 接口配置 VDMA 寄存器,设置 MM2S 帧参数(如地址、Hsize、Vsize、Stride)。
3. 仿真与验证
- 使用 Vivado 仿真工具验证 MM2S Mapper 功能:
- 检查 AXI4 内存映射接口的突发传输和 4 KB 边界保护。
- 验证 AXI4-Stream 接口的
TVALID
/TREADY
握手、TLAST
和TUSER
信号。 - 测试行缓冲的填充和输出,确保流数据的连续性。
- 验证帧同步信号(SOF、EOF)与视频时序的正确性。
- 检查中断触发(帧完成、错误),确保处理器正确响应。
- 使用 AXI Verification IP或 AXI4-Stream Verification IP生成激励,验证协议合规性。
- 分析波形,确认无数据丢失、协议错误或帧同步问题。
资源利用情况
AXI MM2S Mapper 的资源占用(作为 AXI VDMA 的一部分)取决于数据宽度、行缓冲深度和时钟模式。以下是典型资源利用情况(基于 7 系列、UltraScale 和 Zynq 设备,Vivado 生成):
- 资源类型:
- LUT(查找表):300-2000,取决于数据宽度和行缓冲深度。
- FF(触发器):400-2500,与 LUT 占用相关。
- BRAM:0-4,行缓冲可能使用 BRAM(1024 字节约 1 BRAM,2048 字节约 2 BRAM)。
- DSP 切片:不使用。
- 配置示例:
- MM2S,64 位数据宽度,512 字节行缓冲,同步模式:约 300 LUT、400 FF、0 BRAM。
- MM2S,128 位数据宽度,1024 字节行缓冲,异步模式:约 800 LUT、1000 FF、1 BRAM。
- MM2S,256 位数据宽度,2048 字节行缓冲:约 1500 LUT、2000 FF、2 BRAM。
- 最大频率:
- 7 系列(-1 速度等级):200 MHz。
- UltraScale:250 MHz 或更高。
应用场景
AXI MM2S Mapper IP(作为 AXI VDMA 的一部分)适用于以下场景:
-
视频处理:
- 从 DDR 内存读取视频帧,传输到 AXI4-Stream 处理模块(如视频编码器、HDMI 接口)。
- 支持高分辨率视频(如 1080p、4K),通过帧同步信号适配标准视频格式。
- 配合 AXI VDMA 和 AXI4-Stream Interconnect。
-
图像处理:
- 将图像数据从内存映射到流式接口,供实时处理模块(如边缘检测、图像缩放)使用。
- 支持非对齐的图像数据,通过步幅配置灵活映射。
-
Zynq SoC 集成:
- 在 Zynq SoC 中,桥接 PS(ARM 处理器)和 PL 之间的视频数据传输。
- 例如,PS 配置 VDMA 寄存器,PL 通过 MM2S Mapper 输出视频流。
-
实时数据流:
- 将内存中的数据(如传感器数据、音频流)映射到流式处理模块。
- 行缓冲机制确保数据流的连续性,适合高吞吐量应用。
注意事项
-
帧参数配置:
- 帧分辨率(Hsize、Vsize)和步幅需与实际数据格式匹配,避免数据错位。
- 步幅(Stride)应为数据宽度的整数倍,且满足内存对齐要求(通常 64 字节)。
-
行缓冲深度:
- 行缓冲深度需根据帧分辨率和数据宽度配置,过小可能导致数据流中断,过大增加 BRAM 占用。
- 推荐深度:1080p(1920×1080)使用 2048 字节,4K(3840×2160)使用 4096 字节。
-
时钟域配置:
- 异步模式下,
m_axis_mm2s_aclk
频率应与下游模块匹配,建议接近或高于m_axi_mm2s_aclk
。 - 确保时钟源稳定,使用 MMCM/PLL 生成时钟。
- 异步模式下,
-
复位同步:
m_axi_mm2s_aresetn
和m_axis_mm2s_aresetn
需在各自时钟域内同步,保持至少 16 个时钟周期(参考 UG761)。- 推荐使用异步复位同步释放机制,避免亚稳态问题。
-
帧同步信号:
- 外部同步模式(
fsync
)需与视频源时序精确对齐,避免帧丢失。 - 内部同步模式(Free-Run)适合无外部时钟的场景,但需确保下游模块支持连续流。
- 外部同步模式(
总结
AXI MM2S Mapper IP(作为 AXI VDMA 的子模块,PG102)是一款高效的内存映射到流映射软核,专为 AXI4 和 AXI4-Stream 协议设计,支持从内存读取数据并转换为流式输出。其通过行缓冲、帧同步和突发传输功能,满足视频处理、图像处理和实时数据流等高吞吐量应用需求。
用户在使用时应注意帧参数、行缓冲深度和时钟域配置,合理设置分辨率和步幅,并通过仿真验证传输性能和帧同步正确性。该 IP 核通常与 AXI VDMA、AXI Interconnect 和 AXI4-Stream Interconnect 组合使用,构建高效的视频处理系统。
FPGA设计工具推荐
-
SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
-
SZ501(PRO_A7):
- SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
- 双网口(RGMII)
- 双SFP+
- DDR
- UART
- IIC