AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug

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

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

  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拉高,如下图:

图片[1]-AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug
复位

传输信号

握手过程

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

图片[2]-AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug
图一
图片[3]-AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug
图二
图片[4]-AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug
图三

数据信号

字节限定符(Byte qualifiers)

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

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

  • TSTRB:区分对应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)覆盖了从源端到目的端,如下图:

图片[5]-AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug

每个校验bit都对应8个数据bit,校验由接收方处理,中止或者纠正或者传播这个错误。

关于Interconnect

关于互联主要是为了处理多输入多输出多AXI协议的问题,比如1主N从,N主1从,N主M从等方式,关于互联的细节,ARM的标准没有特别详细的去表述,各个厂家的AXI手册对互联的表述比较详细,大家可以参考赛灵思的手册。

如下图的互联框图,各个主从AXI通过Crossbar连接,实现仲裁等功能,但并非互联中仅有图示的模块,以赛灵思的AXI互联,模块内可能有Crossbar、Clock Converter、Data FIFO、Protocol Converter等。后面三个图是互联的几种模式(没有展示全部模式),大家看对应厂家手册即可。

图片[6]-AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug
互联框图
图片[7]-AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug
N对1AXI互联
图片[8]-AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug
1对N AXI互联
图片[9]-AXI4/AXI5-Stream协议介绍-FPGA常见问题社区-FPGA CPLD-ChipDebug
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)

请登录后发表评论

    没有回复内容