AXI4-Stream Data Width Converter IP 详细介绍
概述
AXI4-Stream Data Width Converter 属于 AXI4-Stream Infrastructure IP Suite的一部分。该 IP 核旨在实现 AXI4-Stream 数据流的数据宽度转换,支持将输入数据流的宽度(TDATA
和相关信号)转换为不同的输出数据宽度,以适应上下游模块的不同接口需求。它广泛应用于需要数据宽度调整的场景,例如视频处理中分辨率调整、信号处理中多通道数据重组,或网络数据包处理中的带宽适配。
该 IP 核的主要功能包括:
- 宽度转换:支持 AXI4-Stream 数据流的宽度增大(Upsizing)或减小(Downsizing)。
- 信号管理:自动处理
TDATA
、TSTRB
、TKEEP
、TUSER
等信号的宽度调整,保持协议一致性。 - 灵活配置:支持多种输入/输出宽度组合,适应不同应用需求。
- 高性能:低延迟设计,支持背靠背传输,最大化吞吐量。
主要特性
AXI4-Stream Data Width Converter 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 定义的信号:
-
宽度转换支持:
- Upsizing(宽度增大):将窄输入数据流转换为宽输出数据流,例如从 32 位转换为 64 位。
- Downsizing(宽度减小):将宽输入数据流转换为窄输出数据流,例如从 64 位转换为 32 位。
- 支持任意输入/输出宽度组合,只要宽度为 8 的倍数(以字节为单位,1-64 字节)。
-
信号宽度调整:
TDATA
:根据输入/输出宽度比例调整,自动拼接(Upsizing)或分割(Downsizing)。TSTRB
和TKEEP
:宽度为TDATA
的 1/8(每字节 1 位),随TDATA
宽度同步调整。TUSER
:支持用户定义的宽度转换,输入和输出TUSER
宽度可独立配置。TLAST
:在 Upsizing 时,TLAST
仅在最后一个输出数据节拍置高;在 Downsizing 时,输入TLAST
传播到对应的输出数据节拍。TID
和TDEST
:保持不变,直接从输入传递到输出。
-
高性能设计:
- 使用组合逻辑和最小缓冲设计,延迟低(通常为 0-1 时钟周期,取决于宽度转换比例)。
- 支持背靠背传输,最大吞吐量接近时钟频率(假设
TREADY
始终为高)。 - 内部寄存器管道(Register Slice)可配置,用于优化时序或跨时钟域。
-
时钟与复位:
- 支持单一时钟域(
ACLK
),输入和输出接口共享同一时钟。 - 提供低电平有效复位信号(
ARESETn
),同步到ACLK
。 - 可选的时钟使能信号(
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 Width Converter IP 的核心功能是调整 AXI4-Stream 数据流的宽度,其功能模块包括以下几个方面:
1. 数据宽度转换
- Upsizing(宽度增大):
- 功能:将窄输入数据流拼接为宽输出数据流。
- 机制:多个输入数据节拍(
TDATA
)累积后形成一个输出数据节拍。例如,输入 32 位,输出 64 位,需 2 个输入节拍生成 1 个输出节拍。 - TLAST 处理:输入
TLAST
仅在最后一个输出节拍置高,确保数据流完整性。 - 示例:输入
TDATA[31:0]
,输出TDATA[63:0]
,第一个输入节拍填充TDATA[31:0]
,第二个输入节拍填充TDATA[63:32]
。
- Downsizing(宽度减小):
- 功能:将宽输入数据流分割为窄输出数据流。
- 机制:一个输入数据节拍分割为多个输出数据节拍。例如,输入 64 位,输出 32 位,1 个输入节拍生成 2 个输出节拍。
- TLAST 处理:输入
TLAST
传播到最后一个输出节拍。 - 示例:输入
TDATA[63:0]
,输出TDATA[31:0]
,第一个输出节拍为TDATA[31:0]
,第二个为TDATA[63:32]
。
2. 信号管理
- TDATA 和 TUSER:根据宽度比例拼接或分割,保持数据一致性。
- TSTRB 和 TKEEP:随
TDATA
宽度调整,自动对齐字节。 - TLAST:确保数据包边界的正确传递,Upsizing 时延迟到最后一个输出节拍,Downsizing 时传播到最后一个输出节拍。
- TID 和 TDEST:直接传递,不受宽度转换影响。
- TVALID 和 TREADY:通过 AXI4-Stream 握手机制控制数据流,确保同步传输。
3. 背压管理
- 功能:通过
TREADY
信号管理数据流,防止数据丢失。 - 机制:
- Upsizing:输入
TREADY
由输出TREADY
和内部缓冲状态决定,需等待足够输入节拍生成输出。 - Downsizing:输出
TREADY
由下游设备控制,输入TREADY
在分割完成前保持高。
- Upsizing:输入
- 注意:宽度转换可能导致吞吐量变化(Upsizing 降低输入吞吐量,Downsizing 增加输出节拍数)。
4. 寄存器管道
- 功能:可选的寄存器管道(Register Slice)用于优化时序或隔离时钟域。
- 特点:增加 1-2 个时钟周期延迟,但提高最大时钟频率(Fmax)。
- 应用:适用于高频设计或长路径时序优化。
接口说明
以下是 AXI4-Stream Data Width Converter IP 的主要接口及其功能:
-
输入接口(S00_AXIS):
- 类型:AXI4-Stream 主接口。
- 信号:
S00_AXIS_TVALID
:输入数据有效信号。S00_AXIS_TREADY
:输入接口准备好信号(由宽度转换逻辑和输出TREADY
决定)。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 主设备。
- 宽度:
TDATA
和TUSER
宽度根据配置调整,TSTRB
和TKEEP
随TDATA
宽度变化。
-
时钟与复位接口:
ACLK
:全局时钟信号,输入和输出接口共享同一时钟域。ARESETn
:全局低电平有效复位信号,同步到ACLK
。ACLKEN
(可选):时钟使能信号,用于控制数据传输的时序。
配置方法
1. 在 Vivado 中添加 IP
- 打开 Vivado 的 Block Design,右键选择 Add IP。
- 搜索 AXI4-Stream Data Width Converter,将其拖入设计。
- 双击 IP 核,打开定制化对话框,配置以下参数:
- 输入 TDATA 宽度:设置输入
TDATA
宽度(8-512 位,1-64 字节)。 - 输出 TDATA 宽度:设置输出
TDATA
宽度(8-512 位,1-64 字节)。 - TUSER 宽度:设置输入和输出
TUSER
宽度(1-128 位,可选)。 - TID/TDEST 宽度:设置流标识和目标标识宽度(1-32 位,可选)。
- 信号使能:启用或禁用
TSTRB
、TKEEP
、TLAST
、TID
、TDEST
和TUSER
。 - 寄存器管道:启用或禁用 Register Slice(默认禁用)。
- 时钟使能:启用或禁用
ACLKEN
。
- 输入 TDATA 宽度:设置输入
2. 连接与验证
- 将输入接口(S00_AXIS)连接到上游 AXI4-Stream 从设备。
- 将输出接口(M00_AXIS)连接到下游 AXI4-Stream 主设备。
- 确保输入和输出设备的
TDATA
宽度与 IP 配置一致。 - 使用 Vivado 仿真工具验证宽度转换,检查
TVALID
、TREADY
、TLAST
和TDATA
信号的时序。 - 监控吞吐量变化(Upsizing 可能降低输入速率,Downsizing 可能增加输出节拍)。
资源利用情况
根据 PG085 和相关资源利用数据,AXI4-Stream Data Width Converter IP 的资源占用取决于配置参数(如输入/输出宽度、信号使能和寄存器管道)。以下是一些典型配置的资源利用情况(基于 Vivado 生成数据):
- 设备系列:Artix-7、Kintex-7、Zynq-7000 等。
- 资源类型:
- LUT(查找表):随宽度转换比例和信号复杂性增加,典型值为 50-500。
- FF(触发器):用于控制逻辑和寄存器管道,典型值为 50-300。
- BRAM:通常不使用,除非启用额外的缓冲逻辑。
- DSP 切片:不使用。
- 配置示例:
- 32 位到 64 位(Upsizing)、无寄存器管道:约 100 LUT、80 FF、无 BRAM。
- 64 位到 32 位(Downsizing)、启用 TUSER 和寄存器管道:约 150 LUT、120 FF、无 BRAM。
- 256 位到 64 位(Downsizing)、启用所有信号:约 300 LUT、200 FF、无 BRAM。
应用场景
AXI4-Stream Data Width Converter IP 适用于以下场景:
-
视频处理:
- 调整视频流的数据宽度,例如将 24 位 RGB 数据转换为 32 位或 64 位,以适配下游处理模块。
- 适用于实时视频编码、解码或显示系统。
-
信号处理:
- 将多通道信号数据重新组织,例如将 128 位输入分割为 4 个 32 位输出,或将多个窄数据流合并为宽数据流。
- 适用于雷达、通信和音频处理系统。
-
网络数据包处理:
- 适配不同带宽的网络接口,例如将 512 位数据流转换为 64 位以适配低速设备。
- 适用于数据中心或网络处理器设计。
-
SoC 集成:
- 在 Zynq 或 UltraScale+ MPSoC 系统中,调整 PL 和 PS 之间的 AXI4-Stream 数据宽度,确保接口兼容性。
- 适用于嵌入式系统或硬件加速器设计。
注意事项
-
宽度转换比例:
- 确保输入和输出
TDATA
宽度为 8 的倍数(以字节为单位),否则可能导致配置错误。 - 宽度转换比例(输入/输出)会影响吞吐量,Upsizing 降低输入速率,Downsizing 增加输出节拍数。
- 确保输入和输出
-
TLAST 处理:
- 在 Upsizing 时,
TLAST
仅在最后一个输出节拍置高,需确保上游设备正确设置TLAST
。 - 在 Downsizing 时,
TLAST
传播到最后一个输出节拍,需验证下游设备是否正确识别。
- 在 Upsizing 时,
-
TREADY 信号管理:
- 确保下游设备的
TREADY
信号及时响应,避免因背压导致数据流阻塞。 - 对于 Upsizing,内部缓冲可能限制输入
TREADY
,建议通过仿真验证背压行为。
- 确保下游设备的
-
时钟域:
- 该 IP 核仅支持单一时钟域(
ACLK
),如需跨时钟域传输,需配合 AXI4-Stream Clock Converter IP 使用。 - 启用寄存器管道可改善时序,但会增加 1-2 个时钟周期延迟。
- 该 IP 核仅支持单一时钟域(
总结
AXI4-Stream Data Width Converter IP 是一款高效、灵活的 AXI4-Stream 基础设施 IP 核,专为数据宽度转换而设计。其支持 Upsizing 和 Downsizing、低延迟的组合逻辑设计以及可选的寄存器管道功能,使其在视频处理、信号处理、网络数据包处理和 SoC 集成等领域具有广泛应用前景。
FPGA设计工具推荐
-
SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
-
SZ501(PRO_A7):
- SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
- 双网口(RGMII)
- 双SFP+
- DDR
- UART
- IIC