AXI4-Stream Data FIFO IP 详细介绍
概述
AXI4-Stream Data FIFO 属于 AXI4-Stream Infrastructure IP Suite的一部分。该 IP 核旨在为 AXI4-Stream 数据流提供缓冲功能,支持数据流的平滑传输、突发吸收和跨时钟域传输。它通过内部 FIFO 实现数据的临时存储和同步,广泛应用于需要解决数据流速率不匹配、背压管理或跨时钟域通信的场景,例如视频处理、信号处理和网络数据包传输。
该 IP 核的主要功能包括:
- 数据缓冲:通过 FIFO 缓冲 AXI4-Stream 数据流,吸收突发传输或速率差异。
- 跨时钟域支持:支持输入和输出接口运行在不同时钟域。
- 灵活配置:支持多种 FIFO 深度、数据宽度和实现方式(块存储器或分布式存储器)。
- 协议兼容性:完全符合 AXI4-Stream 协议,支持所有标准信号。
主要特性
AXI4-Stream Data FIFO IP 具有以下关键特性:
-
AXI4-Stream 协议兼容性:
- 完全符合 AXI4-Stream 协议规范,支持所有 AXI4-Stream 定义的信号:
TVALID
、TREADY
、TDATA
、TSTRB
、TKEEP
、TLAST
、TID
、TDEST
和TUSER
。 TDATA
、TSTRB
、TKEEP
、TLAST
、TID
、TDEST
和TUSER
为可选信号,用户可通过配置启用或禁用。- 支持可编程的
TDATA
宽度(8-512 位)、TUSER
宽度(1-128 位)、TID
和TDEST
宽度(1-32 位)。
- 完全符合 AXI4-Stream 协议规范,支持所有 AXI4-Stream 定义的信号:
-
FIFO 缓冲:
- FIFO 深度可配置,支持 16、32、64、128、256、512、1024、2048、4096、8192 或 16384 字(word)。
- FIFO 宽度等于 AXI4-Stream 数据宽度(包括
TDATA
、TSTRB
、TKEEP
、TLAST
、TID
、TDEST
和TUSER
的总和)。 - 支持两种实现方式:
- 块存储器(Block Memory):使用 FPGA 的 BRAM 资源,适合大深度 FIFO。
- 分布式存储器(Distributed Memory):使用 LUT 和触发器,适合小深度 FIFO。
-
跨时钟域支持:
- 支持输入接口(S00_AXIS)和输出接口(M00_AXIS)运行在不同时钟域(
S_ACLK
和M_ACLK
)。 - 异步 FIFO 设计确保跨时钟域传输的可靠性,适合处理不同时钟频率或Missed by default.
- 支持输入接口(S00_AXIS)和输出接口(M00_AXIS)运行在不同时钟域(
-
高性能:
- 支持背靠背传输,最大吞吐量接近时钟频率(假设 FIFO 未满或未空)。
- 提供低延迟选项(First-Word Fall-Through, FWFT),允许输出数据在写入时立即可用,减少读取延迟。
-
状态监控:
- 提供可选的状态信号,包括 FIFO 满(
FULL
)、几乎满(ALMOST_FULL
)、空(EMPTY
)、几乎空(ALMOST_EMPTY
)等。 - 支持可编程的阈值,用于触发
ALMOST_FULL
和ALMOST_EMPTY
信号。
- 提供可选的状态信号,包括 FIFO 满(
-
时钟与复位:
- 支持独立的输入时钟(
S_ACLK
)和输出时钟(M_ACLK
)或单一时钟域(ACLK
)。 - 提供独立的复位信号(
S_ARESETn
和M_ARESETn
)或全局复位(ARESETn
),支持异步复位同步释放。 - 可选的时钟使能信号(
ACLKEN
),用于精细化时钟控制。
- 支持独立的输入时钟(
-
工具与设备支持:
- 设计工具:Vivado Design Suite、ISE Design Suite。
- 支持设备:Artix-7、Kintex-7、Kintex UltraScale、Kintex UltraScale+、Virtex-7、Virtex UltraScale、Virtex UltraScale+、Zynq-7000、Zynq UltraScale+ MPSoC。
功能模块
AXI4-Stream Data FIFO IP 的核心功能是为 AXI4-Stream 数据流提供缓冲和同步,其功能模块包括以下几个方面:
1. 数据缓冲
- 功能:通过内部 FIFO 缓冲 AXI4-Stream 数据流,吸收突发传输或上下游速率差异。
- 机制:输入数据写入 FIFO,输出接口从 FIFO 读取数据,
TVALID
和TREADY
信号控制数据流。 - 特点:支持高吞吐量,FIFO 接近满或空时通过
TREADY
信号管理背压。
2. 跨时钟域传输
- 功能:支持输入和输出接口运行在不同时钟域,异步 FIFO 确保数据同步。
- 机制:输入数据在
S_ACLK
时钟域写入 FIFO,输出数据在M_ACLK
时钟域读取。 - 应用:适用于 Zynq SoC 中处理系统(PS)与可编程逻辑(PL)之间的跨时钟域通信。
3. First-Word Fall-Through (FWFT)
- 功能:启用 FWFT 模式时,FIFO 的第一个数据字在写入时立即出现在输出端口,减少读取延迟。
- 应用:适用于对延迟敏感的应用,如实时视频或信号处理。
4. 状态监控
- 功能:提供 FIFO 状态信号(
FULL
、ALMOST_FULL
、EMPTY
、ALMOST_EMPTY
),帮助系统监控 FIFO 占用情况。 - 配置:可设置
ALMOST_FULL
和ALMOST_EMPTY
的阈值,优化背压管理。 - 应用:用于动态调整数据流速率或触发中断。
5. 信号支持
- 必选信号:
TVALID
、TREADY
。 - 可选信号:
TDATA
、TSTRB
、TKEEP
、TLAST
、TID
、TDEST
、TUSER
,可通过配置启用或禁用。 - 信号宽度:
TDATA
支持 8-512 位,TUSER
支持 1-128 位,TID
和TDEST
支持 1-32 位。
接口说明
以下是 AXI4-Stream Data FIFO IP 的主要接口及其功能:
-
输入接口(S00_AXIS):
- 类型:AXI4-Stream 主接口。
- 信号:
S00_AXIS_TVALID
:输入数据有效信号。S00_AXIS_TREADY
:输入接口准备好信号(FIFO 未满时为高)。S00_AXIS_TDATA
:输入数据,宽度可配置(8-512 位)。S00_AXIS_TSTRB
、TKEEP
:字节选通信号,宽度为TDATA
的 1/8。S00_AXIS_TLAST
:数据流结束信号。S00_AXIS_TID
、TDEST
:流标识和目标标识信号。S00_AXIS_TUSER
:用户定义信号,宽度可配置(1-128 位)。
- 功能:接收来自上游 AXI4-Stream 从设备的数据流。
-
输出接口(M00_AXIS):
- 类型:AXI4-Stream 从接口。
- 信号:与输入接口类似,包括
M00_AXIS_TVALID
、TREADY
、TDATA
、TSTRB
、TKEEP
、TLAST
、TID
、TDEST
和TUSER
。 - 功能:将缓冲后的数据流发送到下游 AXI4-Stream 主设备。
-
时钟与复位接口:
S_ACLK
:输入接口的时钟信号(异步模式)。M_ACLK
:输出接口的时钟信号(异步模式)。ACLK
:全局时钟信号(同步模式)。S_ARESETn
:输入接口的低电平有效复位信号。M_ARESETn
:输出接口的低电平有效复位信号。ARESETn
(可选):全局低电平有效复位信号。ACLKEN
(可选):时钟使能信号。
-
状态接口:
FULL
:FIFO 满信号。ALMOST_FULL
:FIFO 几乎满信号。EMPTY
:FIFO 空信号。ALMOST_EMPTY
:FIFO 几乎空信号。- 功能:提供 FIFO 状态信息,用于系统控制。
配置方法
1. 在 Vivado 中添加 IP
- 打开 Vivado 的 Block Design,右键选择 Add IP。
- 搜索 AXI4-Stream Data FIFO,将其拖入设计。
- 双击 IP 核,打开定制化对话框,配置以下参数:
- FIFO 实现方式:选择块存储器(Block Memory)或分布式存储器(Distributed Memory)。
- FIFO 深度:选择 16、32、64、128、256、512、1024、2048、4096、8192 或 16384 字。
- TDATA 宽度:设置
TDATA
宽度(8-512 位)。 - TUSER 宽度:设置
TUSER
宽度(1-128 位,可选)。 - TID/TDEST 宽度:设置流标识和目标标识宽度(1-32 位,可选)。
- 信号使能:启用或禁用
TSTRB
、TKEEP
、TLAST
、TID
、TDEST
和TUSER
。 - 时钟模式:选择同步时钟(单一
ACLK
)或异步时钟(S_ACLK
和M_ACLK
)。 - FWFT 模式:启用或禁用 First-Word Fall-Through。
- 状态信号:启用或禁用
FULL
、ALMOST_FULL
、EMPTY
、ALMOST_EMPTY
,并设置阈值。 - 复位配置:选择独立复位(
S_ARESETn
和M_ARESETn
)或全局复位(ARESETn
)。 - 时钟使能:启用或禁用
ACLKEN
。
2. 连接与验证
- 将输入接口(S00_AXIS)连接到上游 AXI4-Stream 从设备,分配输入时钟(
S_ACLK
或ACLK
)和复位(S_ARESETn
或 `ARESET"', - 将输出接口(M00_AXIS)连接到下游 AXI4-Stream 主设备,分配输出时钟(
M_ACLK
或ACLK
)和复位(M_ARESETn
或ARESETn
)。 - 使用 Vivado 仿真工具验证数据流,检查
TVALID
、TREADY
、TLAST
和状态信号(FULL
、EMPTY
等)的时序。 - 监控 FIFO 的背压行为,确保 FIFO 深度足够支持突发传输和速率差异。
资源利用情况
根据 PG085 和相关资源利用数据,AXI4-Stream Data FIFO IP 的资源占用取决于配置参数(如 FIFO 深度、数据宽度、实现方式等)。以下是一些典型配置的资源利用情况(基于 Vivado 生成数据):
- 设备系列:Artix-7、Kintex-7、Zynq-7000 等。
- 资源类型:
- LUT(查找表):分布式存储器模式下随 FIFO 深度和数据宽度增加,块存储器模式较少。
- FF(触发器):用于 FIFO 控制逻辑和数据寄存器。
- BRAM:块存储器模式下使用 BRAM(深度 ≥ 512 时),分布式存储器模式不使用。
- DSP 切片:不使用。
- 配置示例:
- 分布式存储器、32 位 TDATA、64 字深度:约 200 LUT、150 FF、无 BRAM。
- 块存储器、32 位 TDATA、512 字深度:约 100 LUT、100 FF、1-2 BRAM。
- 块存储器、256 位 TDATA、1024 字深度:约 300 LUT、200 FF、4-6 BRAM。
具体资源利用数据需参考 Vivado IP 核生成报告,建议用户在设计时根据目标设备和配置参数进行验证。
应用场景
AXI4-Stream Data FIFO IP 适用于以下场景:
-
突发传输吸收:
- 缓冲突发数据流,平滑上下游速率差异,适用于视频流或网络数据包传输。
- 确保下游设备以稳定速率处理数据。
-
跨时钟域传输:
- 在不同时钟域之间传输 AXI4-Stream 数据流,例如 Zynq-7000 中 PL 和 PS 之间的通信。
- 适用于视频处理、信号处理和 SoC 集成。
-
背压管理:
- 通过 FIFO 管理下游设备的背压,避免数据丢失。
- 适用于实时系统,如音频/视频处理或数据采集。
-
数据流同步:
- 与 AXI4-Stream Combiner 或 Broadcaster 配合,确保多路数据流同步。
- 适用于多通道信号处理或视频流合并。
注意事项
-
FIFO 深度选择:
- FIFO 深度需根据突发长度、时钟频率差和背压情况选择,过小的深度可能导致数据丢失。
- 建议通过仿真验证 FIFO 深度是否满足应用需求。
-
时钟频率关系:
- 异步模式下,输出时钟频率(
M_ACLK
)建议不低于输入时钟频率(S_ACLK
)的 75%,以避免 FIFO 溢出。 - 同步模式下,单一
ACLK
需满足上下游的时钟需求。
- 异步模式下,输出时钟频率(
-
复位同步:
- 确保
S_ARESETn
和M_ARESETn
信号在各自时钟域内正确同步,推荐使用异步复位同步释放机制。 - 全局复位(
ARESETn
)需确保所有时钟域同时复位。
- 确保
-
FWFT 模式:
- 启用 FWFT 模式可减少读取延迟,但会略微增加资源占用(约 10-20 LUT/FF)。
- 仅在对延迟敏感的应用中启用。
-
状态信号使用:
- 启用
FULL
和ALMOST_FULL
信号可帮助上游设备控制数据发送速率。 - 设置合理的
ALMOST_FULL
阈值(例如,FIFO 深度的 80%),避免频繁背压。
- 启用
总结
AXI4-Stream Data FIFO IP 是一款功能强大且灵活的 AXI4-Stream 基础设施 IP 核,专为数据流缓冲和跨时钟域传输而设计。其支持块存储器和分布式存储器两种实现方式、可配置的 FIFO 深度和信号宽度,以及 FWFT 和状态监控功能,使其在视频处理、信号处理、网络数据包传输和 SoC 集成等领域具有广泛应用前景。
FPGA设计工具推荐
-
SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
-
SZ501(PRO_A7):
- SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
- 双网口(RGMII)
- 双SFP+
- DDR
- UART
- IIC