AXI4/AXI5-Stream协议介绍
AXI4-Stream简介
AXI4-Stream概念简介
AXI4-Stream是一种标准协议接口,可用于芯片内部的数据流传输,不同于内存数据传输相关协议,AXI4-Stream没有与数据流相关的地址,它只是一个数据流,尤其可以用于高速大数据应用,比如视频数据流,相比较AXI4和AXI4-Lite,不限制突发长度。AXI主要面对内存映射,AXI-Lite主要是简化的AXI,比如用于配置一些寄存器。
Byte类型定义
Byte类型定义和一些控制信号相关,AXI-Stream定义了三种Byte数据类型:
普通字节(Data byte):传输源需要传输到目的地的有效信息
位置字节(Position byte):标定Data byte在数据流中的位置
无效字节(Null byte):顾名思义,没有意义的数据
Stream术语
Transfer:基于
TVALID
和TREADY
握手协议的传输Packet:一组通过AXI4-Stream接口传输的数据,类似于AXI4的突发
Frame:在AXI4-Stream中最大的Byte组合,内包含整数个Packets
Data Stream:一系列单独Byte传输或者一系列Packets
关于Data streams
可能的情况,括号里是标准定义的名字:
byte和byte之间有Null data(Byte stream) 纯Data byte(Continuous aligned stream) 在数据流开始或结尾存在Position byte或开始和结尾都存在Position byte(Continuous unaligned stream) 混合Position byte和Data byte,不要求在开头结尾,要求两者都要从源传输到目的地,一般Data byte数量大于Position byte(Sparse stream)
接口信号
信号列表
信号定义名称来自标准协议
信号 | 源 | 描述 |
---|---|---|
ACLK | 时钟源 | 全局时钟信号,时钟上升沿采样 |
ARESETn | 复位源 | 全局复位信号,低有效 |
TVALID | 传输 | 表示主机驱动有效数据 |
TREADY | 接收 | 表示从机能接受有效数据 |
TDATA[(8n-1):0] | 传输 | 传输数据,位宽为整数个Byte |
TSTRB[(n-1):0] | 传输 | 表示关联数据为Position byte还是Data byte |
TKEEP[(n-1):0] | 传输 | 区分Null bytes,如反断言,那么对应Byte可以删除 |
TLAST | 传输 | 表示包的边界 |
TID[(i-1):0] | 传输 | 数据Stream ID,表示不同数据流 |
TDEST[(d-1):0] | 传输 | 为Data Stream提供路由信息 |
TUSER[(u-1):0] | 传输 | 用户可定义的边带信息 |
注:
n:数据位宽,单位为byte
i:
TID
位宽,单位为bit,建议最大为8bitsd:
TDEST
位宽,单位为bit,建议最大为4bitsu:
TUSER
位宽,单位为bit,建议为n的整数倍
时钟和复位
时钟
每个元件都使用单一时钟信号,ACLK
,所有输入信号都在时钟上升沿采样,所有输出信号都必须发生在时钟上升沿之后。
复位
协议规定复位为低复位有效信号,ARESETn
,复位信号可以异步断言,但在反断言阶段,必须在时钟上升沿后同步(复位信号基本要求)。在复位期间TVALID
必须为低,其他信号状态不需要强制在某状态。
主接口必须在时钟上升沿驱动TVALID
信号,且必须在复位信号反断言后的时钟沿才可将TVALID
拉高,如下图:
传输信号
握手过程
两个信号TVALID
和TREADY
定义了握手过程,TVALID
表示主机开始驱动有效数据,TREADY
表示从机可以接收有效数据,当两者都被断言,那么数据传输开始。TVALID
可以先于或后于TREADY
断言,也可以同时断言。下面给出三种情况的时序图,ACLK标注箭头的上升沿为传输开始处。
数据信号
字节限定符(Byte qualifiers)
AXI4-Stream定义了两个字节限定符:
TKEEP
:区分对应byte是否需要保留传输到接收方,即判断是否为Null byteTSTRB
:区分对应byte为data byte还是position byte
每个TKEEP
和TSTRB
的bit位都对应数据的一个byte,如 TKEEP[x]
对应数据 TDATA[(8x+7):8x]
, TSTRB[x]
对应数据TDATA[(8x+7):8x]
。
TKEEP
如果Tkeep
被置为高电平,表示关联的数据byte必需被传输到目的地,如果为低,那么表示对应byte为null byte,可以将该byte从数据流中删除。Tkeep
全被置为低也属于协议允许的合法操作。在TLAST
被置为高前,Tkeep
也可以阻止全部被置为低。对主从来讲,标准没有强制要求他们具有处理null data的能力,但interconnect要有相关能力。(这里插一句,很多标准都是描述完成的协议应该是什么样子,但没有给出具体的实现方式,有些会给出比较大的灵活空间,随后要谈到的信号TUSER便是如此,所以对于使用IP还是要看厂家IP手册的具体表述)
TSTRB
当TKEEP
被断言,TSTRB
用来表示区分data byte 和 position byte,当TSTRB
为高,则byte为data byte,反之为position byte。下表为TKEEP
和TSTRB
组合意义:
TKEEP | TRTRB | Data Type | Description |
---|---|---|---|
H | H | Data byte | 需要传输的数据字节 |
H | L | Position byte | 表述数据在数据流中位置的字节 |
L | L | Null byte | 无效数据 |
L | H | Reserved | 保留,不强制使用 |
数据包边界(Packet boundaries)
数据包就是一组bytes的组合,与传输packet相关的信号有TID
,TDEST
,和TLAST
,这里我们主要谈TLAST
,TLAST
反断言时表示另一个传输可以进行,断言时表示一个包的边界,断言时也是共享总线可以进行仲裁的有效点。但并不是说,仲裁就一定要在此处,但这个信号确实可以保持有效点连续传输。
对于packet开始的边界,标准也没有明确的定义,但可以通过复位后第一次出现置位TID
和TDEST
来判定,也可通过,先前包传输后的第一次传输出现置位TID
和TDEST
来判定。对TID
和TDEST
来说,一个包内的所有bytes都应该来自同一个源以及去同一个目的地,所以,一个包内的TID
和TDEST
数值应当一致。也要注意,不同包是不支持重新组的。
源和目的信号(Source and destination signaling)
TID
:提供一个流ID,用于区分不同streams传输通过同一个接口
TDEST
:为数据streams提供粗略的路由信息
内部互联(interconnect)可以操作TID
和TDEST
信号,任何对这两个信号的操作必须不同流的TID
和TDEST
不一样。
用户信号
典型的AXI4-Stream接口需要用户边带信号,这里的用途标准没有明确的定义应该是什么,只给出一些实例,比如标记特殊数据类型,提供必需附带的信号,比如校验信息(后续的版本把这一条删除了,因为AXI5发布明确了数据和控制信号的校验模式),控制信号等等。TUSER的bits应该是数据位宽的整数倍(位宽单位为byte),这个端口的具体功能取决于IP厂商的设计。
默认信号要求
以上谈及的信号大多数都是可选的,如TREADY
,TKEEP
,TSTRB
,TLAST
,TID
,TDEST
,TUSER
,TDATA
,在某种情况下,这些确实是可选的接口,一般场上的IP都是带有这些接口的,具体是否有取决IP厂商,一般手册会给出详细的描述。
AXI4-Stream总结
对于AXI4,以上是参考参考早期的AXI-Stream版本,但是对比新版本并没有特别大的区别,新版本AXI-Stream对少部分模块做了更细致的描述,比如Continuous packets,以上的描述并不代表对AXI-Stream协议的所有部分都进行了详细的描述,有些细节化的表述我没有详细去写,主要还是去表述信号部分,旨在给大家一个宏观的概念。
AXI5-Stream
简介
这里的表述我参考的是2021年发布的最新版本,相比较之前的版本(指最初AXI4老版本),概念上并没有大的改变,只是对接口校验保护做了比较详细的表述(这里的校验不仅限于数据接口),接口方面引入一个只关乎AXI5的信号TWAKEUP
。这一小节我只介绍关于AXI5-Stream的相关特性,和AXI4-Stream重复的部分上面已经有介绍。
信号介绍
这个信号仅存在于AXI5,用于控制时钟,便于优化功耗。
信号 | 源 | 位宽 | 描述 |
---|---|---|---|
TWAKEUP | 传输 | 1 | 这个接口仅和AXI5有关 |
TWAKEUP
信号需要和ACLK
同步,在异步时钟域采样需要小心处理,注意去掉毛刺。TWAKEUP
可以在TVALID
之前或者之后断言,但如果他们在同一时钟周期置高,那么TWAKEUP
必须保持断言状态直到TREADY
被断言。但推荐TWAKEUP
断言最少早于TVALID
一个时钟周期。
接口校验保护
介绍
校验其实之前有些厂家有些IP就附带,之前的TUSER其实就表述过校验的功能,但实际从标准上讲,只有AXI5-Stream才能添加,这次的标准对校验也有了比较详细的表述。
校验保护
AXI使用端对端的校验模式,这里的校验检测和纠正(Error Detection and Correction)覆盖了从源端到目的端,如下图:
每个校验bit都对应8个数据bit,校验由接收方处理,中止或者纠正或者传播这个错误。
关于Interconnect
关于互联主要是为了处理多输入多输出多AXI协议的问题,比如1主N从,N主1从,N主M从等方式,关于互联的细节,ARM的标准没有特别详细的去表述,各个厂家的AXI手册对互联的表述比较详细,大家可以参考赛灵思的手册。
如下图的互联框图,各个主从AXI通过Crossbar连接,实现仲裁等功能,但并非互联中仅有图示的模块,以赛灵思的AXI互联,模块内可能有Crossbar、Clock Converter、Data FIFO、Protocol Converter等。后面三个图是互联的几种模式(没有展示全部模式),大家看对应厂家手册即可。
总结
这篇文章很短,但从了解AXI-Stream角度讲,我觉得是足够了,如果要想写自己的IP,那肯定要仔细研读官方的标准文档,如果是使用各个厂家的IP,那么看厂商IP手册也是可行的。
AXI-Stream官网下载地址:
https://documentation-service.arm.com/static/60d5b244677cf7536a55c23e
参考资料:
[^1]: AMBA® AXI-Stream Protocol Specification(2021版)
[^2]: AMBA® AXI-Stream Protocol Specification(2010版)
[^3]: 赛灵思官方文档AXI参考手册UG1037(2017V4)
[^4]: 赛灵思官方文档AXI互联PG059(2017V4)