AXI4/AXI5-Stream协议介绍

共 4600字,需浏览 10分钟

 ·

2022-06-08 20:29

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:基于TVALIDTREADY握手协议的传输

  • Packet:一组通过AXI4-Stream接口传输的数据,类似于AXI4的突发

  • Frame:在AXI4-Stream中最大的Byte组合,内包含整数个Packets

  • Data Stream:一系列单独Byte传输或者一系列Packets

关于Data streams

可能的情况,括号里是标准定义的名字:

  1. byte和byte之间有Null data(Byte stream)
  2. 纯Data byte(Continuous aligned stream)
  3. 在数据流开始或结尾存在Position byte或开始和结尾都存在Position byte(Continuous unaligned stream)
  4. 混合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,建议最大为8bits

  • d:TDEST位宽,单位为bit,建议最大为4bits

  • u:TUSER位宽,单位为bit,建议为n的整数倍

时钟和复位

时钟

每个元件都使用单一时钟信号,ACLK,所有输入信号都在时钟上升沿采样,所有输出信号都必须发生在时钟上升沿之后。

复位

协议规定复位为低复位有效信号,ARESETn,复位信号可以异步断言,但在反断言阶段,必须在时钟上升沿后同步(复位信号基本要求)。在复位期间TVALID必须为低,其他信号状态不需要强制在某状态。

主接口必须在时钟上升沿驱动TVALID信号,且必须在复位信号反断言后的时钟沿才可将TVALID拉高,如下图:

复位

传输信号

握手过程

两个信号TVALIDTREADY定义了握手过程,TVALID表示主机开始驱动有效数据,TREADY表示从机可以接收有效数据,当两者都被断言,那么数据传输开始。TVALID可以先于或后于TREADY断言,也可以同时断言。下面给出三种情况的时序图,ACLK标注箭头的上升沿为传输开始处。

图一
图二
图三

数据信号

字节限定符(Byte qualifiers)

AXI4-Stream定义了两个字节限定符:

  • TKEEP:区分对应byte是否需要保留传输到接收方,即判断是否为Null byte

  • TSTRB:区分对应byte为data byte还是position byte

每个TKEEPTSTRB的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。下表为TKEEPTSTRB组合意义:

TKEEPTRTRBData TypeDescription
HHData byte需要传输的数据字节
HLPosition byte表述数据在数据流中位置的字节
LLNull byte无效数据
LHReserved保留,不强制使用

数据包边界(Packet boundaries)

数据包就是一组bytes的组合,与传输packet相关的信号有TIDTDEST,和TLAST,这里我们主要谈TLASTTLAST反断言时表示另一个传输可以进行,断言时表示一个包的边界,断言时也是共享总线可以进行仲裁的有效点。但并不是说,仲裁就一定要在此处,但这个信号确实可以保持有效点连续传输。

对于packet开始的边界,标准也没有明确的定义,但可以通过复位后第一次出现置位TIDTDEST来判定,也可通过,先前包传输后的第一次传输出现置位TIDTDEST来判定。对TIDTDEST来说,一个包内的所有bytes都应该来自同一个源以及去同一个目的地,所以,一个包内的TIDTDEST数值应当一致。也要注意,不同包是不支持重新组的。

源和目的信号(Source and destination signaling)

TID:提供一个流ID,用于区分不同streams传输通过同一个接口

TDEST:为数据streams提供粗略的路由信息

内部互联(interconnect)可以操作TIDTDEST信号,任何对这两个信号的操作必须不同流的TIDTDEST不一样。

用户信号

典型的AXI4-Stream接口需要用户边带信号,这里的用途标准没有明确的定义应该是什么,只给出一些实例,比如标记特殊数据类型,提供必需附带的信号,比如校验信息(后续的版本把这一条删除了,因为AXI5发布明确了数据和控制信号的校验模式),控制信号等等。TUSER的bits应该是数据位宽的整数倍(位宽单位为byte),这个端口的具体功能取决于IP厂商的设计。

默认信号要求

以上谈及的信号大多数都是可选的,如TREADYTKEEPTSTRBTLASTTIDTDESTTUSERTDATA,在某种情况下,这些确实是可选的接口,一般场上的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等。后面三个图是互联的几种模式(没有展示全部模式),大家看对应厂家手册即可。

互联框图
N对1AXI互联
1对N AXI互联
N对M AXI互联Crossbar Mode

总结

这篇文章很短,但从了解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)

浏览 51
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报