AXI4-Stream 实现方式 - 2022.1 Chinese

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2022-06-07
Version
2022.1 简体中文

如果设计需要串流接口,可首先定义和使用串流数据结构,例如,Vitis HLS 中的 hls::stream。此简单对象可封装串流的要求,其串流接口则默认在 RTL 中作为 FIFO 来实现 (ap_fifo),但(可选)可作为握手接口 (ap_hs) 或 AXI4-Stream 接口 (axis) 来实现。请参阅 Github 上的 Vitis-HLS-Introductory-Examples/Interface/Streaming 以获取串流接口的不同示例。

如果通过接口编译指示模式选项指定 AXI4-Stream 接口 (axis),那么接口实现将通过定义 TDATA、TVALID 和 TREADY 信号来模仿 AXIS 接口的样式。

如需更正式的 AXIS 实现,那么 Vitis HLS 需使用特殊数据类型(ap_axi_sdata.h 中定义的 hls::axis)来封装 AXI4-Stream 协议的要求,并实现此接口所需的特殊 RTL 信号。

AXI4-Stream 接口是作为 Vitis HLS 中的结构体类型来实现的,并且具有如下特征(在 ap_axi_sdata.h 中定义):

template <typename T, size_t WUser, size_t WId, size_t WDest> struct axis { .. };

其中:

T
要串流的数据类型。
提示: 可支持任意数据类型,包括 ap_fixed
WUser
TUSER 信号的宽度
WId
TID 信号的宽度
WDest
TDest 信号的宽度

当串流数据类型 (T) 为简单的整数类型时,有 2 种预定义的 AXI4-Stream 实现类型可用:

  • AXI4-Stream 类的有符号实现(或者使用 ap_axis<Wdata, WUser, WId, WDest> 则更简单)
    hls::axis<ap_int<WData>, WUser, WId, WDest>
  • AXI4-Stream 类的无符号实现(或者使用 ap_axiu<WData, WUser, WId, WDest> 则更简单)
    hls::axis<ap_uint<WData>, WUser, WId, WDest>

WUserWIdWDest 模板参数指定的值将控制 AXI4-Stream 接口中旁路信号的使用。

使用 hls::axis 类时,生成的 RTL 通常将包含实际数据信号 TDATA,和以下额外信号:TVALIDTREADYTKEEPTSTRBTLASTTUSERTIDTDEST

TVALIDTREADYTLAST 都是 AXI4-Stream 协议的必要控制信号。TKEEPTSTRBTUSERTIDTDEST 信号均为可选特殊信号,可用于围绕额外的簿记数据来传递。

提示: 如果 WUserWIdWDest 设置为 0,那么在接口中生成的 RTL 将不包含可选 TUSERTIDTDEST 信号。