本文转载自:孤独的单刀的CSDN博客
写在前面
随着对XILINX器件使用的深入,发现越来越多的IP都选配了AXI4的接口。这使得只要学会了AXI4总线的使用,基本上就能对XILINX IP的使用做到简单的上手。所以学会AXI4总线,对XILINX器件的调试设计有很大的帮助。
AXI4-Stream协议是AXI4三个协议中最简单的一个部分,本着先易后难的理念,该系列先对AXI4-Stream协议及其使用做一个简单的介绍。
1、什么是AXI4-Stream?
AXI 表示 Advanced eXtensible Interface(高级可扩展接口),它是由 Arm 定义的接口协议,包含在“高级微控制器总线架构 AMBA”标准中。
AXI4 接口 (AMBA 4.0) 分 3 种类型:
AXI4 (AXI4-Full):用于满足高性能存储器映射需求。
AXI4-Lite:用于简单的低吞吐量存储器映射通信(例如,往来于状态寄存器的通信)。
AXI4-Stream:用于高速流传输数据。
AXI-Stream顾名思义是用来传输数据流的,如图像输入,高速AD等,这种数据流的处理一般是和DMA一并使用的。
该协议的信号接口如下,我依据功能对其进行了划分,共分为4个大块。接下来分别对其进行讲解:
2.1、系统类
该类信号比较简单,只有两个:ACLK和ARESETn。分别是系统的全局时钟与全局复位:
ACLK:全局时钟信号,所有信号在主时钟信号的上升沿采样
ARESETn:复位信号,低电平有效
2.2、传输数据类
该类信号用于数据的传输过程:
TVALID:主机数据有效信号。由主机发出,表明当前发送的数据有效
TREADY:从机发出的接收准备好信号。由从机发出,表明从机准备好接收数据
TDATA:主机发出的数据,数据宽度为BYTE的整数倍
TLAST:主机发出的数据,表明当前数据为该报数据(packet)的最后一个数据,即为数据包的边界
2.2.1、握手(handshake)
AXIS协议的通信机制是通过握手过程建立起来的,可分为以下三种情况:
情况1:主机先于从机做好了发送数据的准备
主机先拉高TVALID信号--表明当前主机可以传送数据给从机,而TVALID一旦被拉高,则只能在从机进行响应传输了数据后才能拉低。从机在接收到主机发送的准备好的信号后,会对自身的情况做判断,判断自己是否具备了接收数据的准备,这也给了从机对数据流进行反压的能力,保证从机的接收处理能力不会瘫痪。一旦从机可以接收数据,便拉高TREADY信号,表明自己可以接收数据。此时TVALID && TREADY为高,在时钟的上升沿进行数据传输。
情况2:主机后于从机做好了发送数据的准备
从机拉高TREADY信号,表明自己可以接收数据。主机会对自身的情况做判断,判断自己是否具备了发送数据的准备,一旦主机可以发送数据便拉高TVALID信号,此时TVALID && TREADY为高,在时钟的上升沿进行数据传输。
情况3:主机、从机同时做好了发送/接收数据的准备
主机拉高TVALID信号的同时从机拉高TREADY信号,分别表明自己可以发送/接收数据,在时钟的上升沿进行数据传输。
握手机制可以用个通俗的例子比较----快递小哥(主机MASTER)拿了一车快递,准备全部送去小区的菜鸟驿站入库,与驿站值班小妹(从机SLAVE)对话如下:
情况1:主机先于从机做好了发送数据的准备
小哥:老妹,我这来了一车快递,赶紧让我入库(主机可以发送数据,拉高TVALID)
小妹:你先别急,我这货架还没空出来呢!先让我整理整理(从机没有做好接收数据的准备)
小妹: 好了,大兄弟,你赶紧入库吧(从机可以接收数据,拉高TREADY)
小妹:慢慢来,一件一件的来(每个时钟输出一个数据,流式传输stream)
情况2:主机后于从机做好了发送数据的准备
小妹:大兄弟,你赶紧入库吧,我都等你半天了,不然早回家了(从机可以接收数据,拉高TREADY)
小哥:老妹,我这车快没电了,跑不快,再给我两分钟(主机没有做好发送数据的准备)
小哥:老妹,我终于来了,赶紧的吧(主机可以发送数据,拉高TVALID)
小妹:慢慢来,一件一件的来(每个时钟输出一个数据,流式传输stream)
情况3:主机、从机同时做好了发送/接收数据的准备
小妹:来了啊,大兄弟,赶紧的吧(从机可以接收数据,拉高TREADY)
小哥:哎哟我去,这不巧了吗,咱也刚到(同时主机也可以发送数据,拉高TVALID)
小妹:慢慢来,一件一件的来(每个时钟输出一个数据,流式传输stream)
2.2.2、TLAST
在具有帧或者包概念的流式传输中,TLAST信号,用来表示一个包的结尾。例如发送大小为32字节的包,在发送第32个字节的时候,可以把TLAST信号拉高,来表示这个包发送完了。时序如下:
对于没有包或帧概念的数据流,TLAST的默认值是不确定的。则有以下选项:
设置TLAST低。这表明所有传输都在同一个数据包中
设置TLAST高。这表明所有传输都是单独的数据包
自动产生脉冲TLAST值。这个选项在固定数量的传输之后断言TLAST,例如在两次或16次传输之后
2.2.3、TDATA
主机发送给从机的信息(数据,空数据,位置数据),为BYTE的整数倍,是AXIS传输通道的主要载荷。
2.3、数据修饰类
在AXIS中,定义了三种流数据字节:
数据字节(Data Byte):包含在源和目标之间传输的有效信息的数据字节。
占位字节 (Position byte):表示流内部数据字节的相对位置的字节。 这是一个不包含在源和目标之间传输的任何相关数据值的占位符。
空字节(Null byte):不包含任何数据信息的字节或关于流内数据字节的相对位置的任何信息。
data type是最有意义的数据;position type 作为占位符使用,可以用来表征date type 的相对位置,null type不包含任何有用的信息。数据流的结构可以有很多种,例如:可以只传数据,也即都是data type,不包含position type和null type;也可以将data type 和 null type 混着传输;还可以将position type 和 data type混着传输。当然三者混着传输也没有问题。
那么不难想象信号TKEEP、WSTRB就是用来区分数据类型的了:
2.4、传输修饰类
这三个信号通常是在多个AXI接口的组件构成拓扑结构时用于表征传输的源与目的:
TID :表示不同数据流的数据流标识符,指示数据来源
DEST :用于提供路由信息,指示数据目的地
TUSER:AXI4协议留给用户自定义的数据,可用来表征额外的信息
3、总结
AXI4-Stream跟AXI4的区别在于AXI4-Stream没有地址接口,这样就不涉及读写数据的概念了,只有简单的发送与接收说法,减少了延时,允许无限制的数据突发传输规模。AXI4-Stream的核心思想在于流式处理数据。
接下来详解AXI4-Stream接口的IP核----AXI4-STREAM DATA FIFO。