AXI Data FIFO IP 详细介绍
概述
AXI Data FIFO 属于 AXI Infrastructure IP Suite。该 IP 核专为 AXI4-Stream 协议设计,用于在 AXI4-Stream 数据流中提供缓冲功能,支持吸收突发传输、速率差异或跨时钟域传输。它通过内部 FIFO 实现数据流的平滑处理,广泛应用于 FPGA 和 SoC 系统设计,特别是在视频处理、信号处理、网络数据包处理和硬件加速器集成等需要稳定数据流的场景。
该 IP 核的主要功能包括:
- 数据缓冲:提供可配置深度的 FIFO,吸收 AXI4-Stream 数据流的突发或速率差异。
- 跨时钟域支持:支持输入和输出接口运行在不同时钟域,实现异步传输。
- 协议合规性:完全符合 AXI4-Stream 协议,支持标准信号和灵活配置。
- 低资源占用:支持分布式 RAM 或块 RAM(BRAM),优化资源利用。
主要特性
AXI Data FIFO IP 具有以下关键特性:
-
AXI4-Stream 协议兼容性:
- 完全符合 ARM AMBA AXI4-Stream 协议规范。
- 支持标准 AXI4-Stream 信号:
TVALID
、TREADY
、TDATA
、TSTRB
、TKEEP
、TLAST
、TID
、TDEST
和TUSER
。 - 数据宽度:
TDATA
支持 8 至 4096 位,TUSER
支持 0 至 128 位,TID
和TDEST
支持 0 至 32 位。 - 支持字节流、连续对齐流、连续非对齐流和稀疏流。
-
FIFO 配置:
- 深度:支持 16、32、64、128、256、512、1024、2048、4096、8192 或 16384 字。
- 存储类型:
- 分布式 RAM:使用 LUT 实现,适合小深度 FIFO(≤ 128 字)。
- 块 RAM(BRAM):使用 FPGA BRAM,适合大深度 FIFO(> 128 字)。
- 自动选择:根据深度自动选择分布式 RAM 或 BRAM。
- FIFO 模式:
- 标准 FIFO:缓冲所有 AXI4-Stream 信号(
TDATA
、TSTRB
等)。 - 数据包 FIFO:仅在
TLAST
信号触发时提交数据,适合数据包传输。
- 标准 FIFO:缓冲所有 AXI4-Stream 信号(
-
时钟域支持:
- 同步模式:输入(S_AXIS)时钟和输出(M_AXIS)时钟相同(
ACLK
),简化设计。 - 异步模式:支持跨时钟域传输,输入使用
S_AXIS_ACLK
,输出使用M_AXIS_ACLK
。 - 最大频率:最高 250 MHz(7 系列,-1 速度等级),更高频率适用于 UltraScale 设备(参考 PG085 表 2-1)。
- 同步模式:输入(S_AXIS)时钟和输出(M_AXIS)时钟相同(
-
性能优化:
- 吞吐量:支持接近 100% 的 AXI4-Stream 总线利用率(突发传输,150 MHz,参考 PG085 表 2-2)。
- 背压支持:通过
TREADY
信号吸收速率差异,防止数据丢失。 - 数据包模式:优化数据包传输,确保
TLAST
边界完整性。
-
资源优化:
- 分布式 RAM 模式减少 BRAM 使用,适合资源受限设计。
- 可配置 FIFO 深度,平衡资源占用和缓冲能力。
- 不使用 DSP 切片,逻辑资源占用低。
-
工具与设备支持:
- 设计工具: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 Data FIFO IP 的核心功能是为 AXI4-Stream 数据流提供缓冲,其主要功能模块包括以下几个方面:
1. AXI4-Stream 接口模块
- 功能:处理 AXI4-Stream 协议的输入和输出事务。
- 机制:
- 输入接口(S_AXIS):接收上游 AXI4-Stream 主设备的数据(
S_AXIS_TDATA
、S_AXIS_TVALID
等),写入 FIFO。 - 输出接口(M_AXIS):从 FIFO 读取数据,输出到下游 AXI4-Stream 从设备(
M_AXIS_TDATA
、M_AXIS_TVALID
等)。 - 支持标准 AXI4-Stream Valid-Ready 握手机制(参考 web:14)。
- 输入接口(S_AXIS):接收上游 AXI4-Stream 主设备的数据(
- 应用:实现数据流的输入输出,适配上下游设备。
2. FIFO 核心
- 功能:缓冲 AXI4-Stream 数据,吸收突发或速率差异。
- 机制:
- 标准 FIFO 模式:缓冲所有 AXI4-Stream 信号(
TDATA
、TSTRB
、TKEEP
、TLAST
、TID
、TDEST
、TUSER
)。 - 数据包 FIFO 模式:仅在接收到
TLAST
信号时提交数据,适合数据包边界敏感的应用(如视频帧或网络数据包)。 - 存储类型:
- 分布式 RAM:使用 LUT 实现,延迟低但容量有限。
- BRAM:使用 FPGA BRAM,支持大容量但延迟略高。
- 深度:可配置为 16 至 16384 字,影响缓冲能力和资源占用。
- 标准 FIFO 模式:缓冲所有 AXI4-Stream 信号(
- 应用:平滑数据流,防止数据丢失或溢出。
3. 时钟域同步模块
- 功能:在异步模式下实现跨时钟域数据传输。
- 机制:
- 使用异步 FIFO 架构,写入端同步到
S_AXIS_ACLK
,读取端同步到M_AXIS_ACLK
。 - 内部灰码指针(Gray-Code Pointer)确保跨时钟域的读写同步。
- 同步模式下无需额外同步逻辑,直接使用单一
ACLK
。
- 使用异步 FIFO 架构,写入端同步到
- 应用:支持不同时钟域的模块互联,如 Zynq PL 和 PS。
4. 控制逻辑
- 功能:管理 FIFO 的读写操作和 AXI4-Stream 信号的传输。
- 机制:
- 监控
S_AXIS_TVALID
和S_AXIS_TREADY
,控制数据写入 FIFO。 - 监控
M_AXIS_TVALID
和M_AXIS_TREADY
,控制数据从 FIFO 读取。 - 在数据包模式下,确保
TLAST
信号触发时完整提交数据包。
- 监控
- 应用:维持 AXI4-Stream 协议的时序和数据一致性。
5. 时钟与复位模块
- 功能:管理输入和输出时钟域的时钟和复位信号。
- 机制:
- 时钟:
- 同步模式:使用单一
ACLK
。 - 异步模式:使用
S_AXIS_ACLK
(输入)和M_AXIS_ACLK
(输出)。
- 同步模式:使用单一
- 复位:
- 同步模式:使用单一
ARESETN
。 - 异步模式:使用
S_AXIS_ARESETN
和M_AXIS_ARESETN
。
- 同步模式:使用单一
- 复位信号需同步到各自时钟域。
- 时钟:
- 应用:支持灵活的时钟域配置,适应复杂系统。
接口说明
以下是 AXI Data FIFO IP 的主要接口及其功能:
-
AXI4-Stream 输入接口(S_AXIS):
- 类型:AXI4-Stream 主接口。
- 信号:
S_AXIS_TVALID
:输入数据有效信号。S_AXIS_TREADY
:输入准备好信号(由 FIFO 输出)。S_AXIS_TDATA
:输入数据信号,宽度 8 至 4096 位。S_AXIS_TSTRB
、S_AXIS_TKEEP
:字节选通信号,宽度为TDATA
的 1/8(可选)。S_AXIS_TLAST
:数据流结束信号(可选)。S_AXIS_TID
、S_AXIS_TDEST
:流标识和目标标识信号(可选)。S_AXIS_TUSER
:用户定义信号,宽度 0 至 128 位(可选)。
- 功能:接收上游 AXI4-Stream 主设备的数据,写入 FIFO。
- 时钟:
S_AXIS_ACLK
(异步模式)或ACLK
(同步模式)。
-
AXI4-Stream 输出接口(M_AXIS):
- 类型:AXI4-Stream 从接口。
- 信号:与 S_AXIS 类似,但方向相反。
- 功能:从 FIFO 读取数据,输出到下游 AXI4-Stream 从设备。
- 时钟:
M_AXIS_ACLK
(异步模式)或ACLK
(同步模式)。
-
时钟与复位接口:
ACLK
:全局时钟信号,用于同步模式。S_AXIS_ACLK
:输入接口时钟(异步模式)。M_AXIS_ACLK
:输出接口时钟(异步模式)。ARESETN
:全局低电平有效复位信号,同步到ACLK
。S_AXIS_ARESETN
:输入接口复位信号(异步模式)。M_AXIS_ARESETN
:输出接口复位信号(异步模式)。- 功能:提供时钟和复位控制,支持同步或异步设计。
配置方法
1. 在 Vivado 中添加 IP
- 打开 Vivado 的 IP Catalog,搜索 AXI4-Stream Data FIFO,将其添加到设计。
- 双击 IP 核,打开定制化对话框(参考 PG085,第 26-28 页,图 5-2),配置以下参数:
- 基本设置:
- Component Name:设置 IP 实例名称。
- FIFO Depth:选择 16、32、64、128、256、512、1024、2048、4096、8192 或 16384 字。
- FIFO Mode:选择 Standard FIFO 或 Packet FIFO。
- 信号配置:
- TDATA Width:设置数据宽度(8 至 4096 位)。
- Enable TSTRB/TKEEP/TLAST/TID/TDEST/TUSER:启用或禁用可选信号。
- TUSER Width:设置用户信号宽度(0 至 128 位)。
- TID/TDEST Width:设置标识信号宽度(0 至 32 位)。
- 时钟配置:
- Clocking Mode:选择 Synchronous(同步)或 Asynchronous(异步)。
- S_AXIS_ACLK Frequency:设置输入时钟频率(默认 100 MHz,异步模式)。
- M_AXIS_ACLK Frequency:设置输出时钟频率(默认 100 MHz,异步模式)。
- 存储类型:
- Memory Type:选择 Distributed RAM、Block RAM 或 Auto(自动)。
- 复位配置:
- Reset Mode:选择 Single Reset(单一
ARESETN
)或 Dual Reset(S_AXIS_ARESETN
和M_AXIS_ARESETN
)。
- Reset Mode:选择 Single Reset(单一
- 基本设置:
2. 连接与驱动
- 硬件连接:
- 将
S_AXIS
接口连接到上游 AXI4-Stream 主设备(如 AXI4-Stream DMA、传感器接口)。 - 将
M_AXIS
接口连接到下游 AXI4-Stream 从设备(如处理模块、AXI4-Stream Interconnect)。 - 分配时钟信号:
- 同步模式:所有接口连接到单一
ACLK
。 - 异步模式:为输入接口分配
S_AXIS_ACLK
,为输出接口分配M_AXIS_ACLK
。
- 同步模式:所有接口连接到单一
- 分配复位信号:
- 同步模式:使用单一
ARESETN
。 - 异步模式:为输入接口分配
S_AXIS_ARESETN
,为输出接口分配M_AXIS_ARESETN
。
- 同步模式:使用单一
- 将
- 驱动程序:
- AXI Data FIFO 核无需专用驱动程序,依赖上下游 AXI4-Stream 设备的驱动。
- 确保上下游设备的数据宽度和信号配置一致(如
TLAST
的使用)。
3. 仿真与验证
- 使用 Vivado 仿真工具验证 FIFO 功能:
- 检查
S_AXIS
和M_AXIS
接口的 Valid-Ready 握手和数据完整性。 - 验证数据包模式下
TLAST
信号的正确处理。 - 测试异步模式下的跨时钟域传输稳定性。
- 确保 FIFO 深度足以吸收突发传输,防止溢出。
- 检查
- 使用 AXI4-Stream Verification IP(PG277)生成激励,验证协议合规性(参考 web:8)。
- 分析波形,确认无数据丢失或协议错误。
资源利用情况
AXI Data FIFO IP 的资源占用取决于 FIFO 深度、存储类型、数据宽度和时钟模式。以下是典型资源利用情况(基于 7 系列、UltraScale 和 Zynq 设备,Vivado 生成):
- 资源类型:
- LUT(查找表):100-1000,分布式 RAM 模式下随深度增加。
- FF(触发器):100-800,与 LUT 占用相关。
- BRAM:0-8,BRAM 模式下随深度增加(512 字约 1 BRAM,16384 字约 8 BRAM)。
- DSP 切片:不使用。
- 配置示例:
- 32 位 TDATA,64 字,分布式 RAM,同步模式:约 150 LUT、200 FF、0 BRAM。
- 64 位 TDATA,1024 字,BRAM,异步模式:约 300 LUT、400 FF、2 BRAM。
- 256 位 TDATA,4096 字,BRAM,Packet FIFO:约 500 LUT、600 FF、4 BRAM。
- 最大频率:
- 7 系列(-1 速度等级):250 MHz。
- UltraScale:300 MHz 或更高(参考 web:8)。
具体资源利用数据需参考 Vivado 生成的报告,建议用户根据目标设备和配置验证资源占用。
应用场景
AXI Data FIFO IP 适用于以下场景:
-
视频处理:
- 缓冲视频流数据,吸收传感器或 DMA 的突发传输。
- 配合 AXI4-Stream to Video Out 或 AXI Video DMA(参考 web:14)。
- 数据包模式适合视频帧传输,确保
TLAST
边界完整。
-
信号处理:
- 在信号处理系统中缓冲采集数据,适配不同速率的处理模块。
- 例如,高速 ADC(
S_AXIS_ACLK
)到低速 DSP 模块(M_AXIS_ACLK
)。
-
网络数据包处理:
- 缓冲网络数据包,处理高速输入和低速输出的速率差异。
- 数据包模式确保数据包边界(
TLAST
)正确传输。
-
跨时钟域传输:
- 在 Zynq SoC 中,桥接 PL(
S_AXIS_ACLK
)和 PS(M_AXIS_ACLK
)之间的 AXI4-Stream 数据流。 - 例如,PL 运行于 200 MHz,PS 运行于 100 MHz。
- 在 Zynq SoC 中,桥接 PL(
-
突发吸收:
- 在高突发性数据流中(如 AXI4-Stream DMA 输出),提供缓冲以平滑数据传输。
- 防止下游模块因速率不足而丢失数据。
注意事项
-
FIFO 深度选择:
- 深度需根据输入和输出时钟频率差及突发长度配置。
- 例如,若
S_AXIS_ACLK
(200 MHz)快于M_AXIS_ACLK
(100 MHz),需选择较深的 FIFO(如 1024 字)以避免溢出(参考 web:17)。 - 数据包模式下,FIFO 深度应足以容纳完整数据包。
-
存储类型选择:
- 分布式 RAM适合小深度(≤ 128 字),节省 BRAM 但占用 LUT。
- BRAM适合大深度(> 128 字),节省 LUT 但占用 BRAM。
- 自动模式通常是最佳选择,除非资源受限。
-
时钟域配置:
- 异步模式下,
M_AXIS_ACLK
频率应尽量接近或高于S_AXIS_ACLK
,以维持吞吐量(建议M_AXIS_ACLK
≥ 75%S_AXIS_ACLK
,参考 PG085,第 14 页)。 - 确保时钟源稳定,使用 MMCM/PLL 生成时钟。
- 异步模式下,
-
复位同步:
ARESETN
、S_AXIS_ARESETN
和M_AXIS_ARESETN
需在各自时钟域内同步,保持至少 16 个时钟周期(参考 UG761)。- 推荐使用异步复位同步释放机制,避免亚稳态问题。
-
数据包模式:
- 数据包模式下,需确保上游设备正确生成
TLAST
信号,否则可能导致数据堆积或丢失。 - 通过仿真验证
TLAST
边界和 FIFO 行为)。
- 数据包模式下,需确保上游设备正确生成
总结
AXI Data FIFO IP(PG085)是一款高效的 AXI4-Stream 数据缓冲软核,专为吸收突发传输、速率差异或跨时钟域传输设计。其支持标准 FIFO 和数据包模式,提供可配置的深度和存储类型,结合同步和异步时钟支持,广泛应用于视频处理、信号处理、网络数据包处理和跨时钟域传输等领域。
用户在使用时应根据应用需求选择 FIFO 深度、存储类型和时钟模式,合理规划时钟频率,并通过仿真验证数据流稳定性和协议合规性。该 IP 核可与 AXI4-Stream Interconnect、AXI4-Stream DMA 等 IP 组合使用,满足复杂系统设计需求。
FPGA设计工具推荐
-
SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
-
SZ501(PRO_A7):
- SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
- 双网口(RGMII)
- 双SFP+
- DDR
- UART
- IIC