目录
一.AXI-stream的基本概念
1.1关于AXI-stream
1.1.1字节定义
数据字节(Data byte):代表有效信息
位置字节(Position byte):仅表示相对位置不包括相关的有效信息
空字节(Null byte):不包括任何有效信息与位置信息
1.1.2传输定义
Transfer:transfer可定义为一次TVALID和TREADY信号有效的握手操作间的传输数据。
Packet:定义为一个或多个transfer操作,相当于AXI中的burst操作。
Frame:定义为一个或多个packet操作,是AXI-stream中的最高层次的字节组合。
Data stream:包含两种形式①一系列独立的transfer②一系列有transfer组合而成的packet
1.2数据流
1.2.1字节流
字节流的传输由数据字节和空字节构成,空字节可以在任何位置被插入or移除。下图为一个字节流的例子。
1.2.2持续对齐的流
意味这他传输过程中没有占位字节和空字节
1.2.3持续非对齐流
指的是在每个packet的第一个数据字节和最后一个数据字节中没有位置字节,但在其开始之前或者结束之后可以有许多的位置字节。
1.2.4稀疏流
稀疏流中包含了数据字节和位置字节,数据字节在稀疏流中占主要部分,位置字节在,稀疏流中的位置保持不变。
二.AXI-stream接口信号
2.1信号列表
①ACLK:来源于clock 位宽为1,上升沿有效。
②ARESERn:来源于reset, 位宽为1。
③TVALID:来源于数据发送端,位宽为1,该信号意味着发射端将发射有效的transfer。
④TREADY:来源于数据接收端,位宽为1,该信号意味着接收端将接受一个transfer。
⑤TDATA:来源于数据发送端,位宽为TDATA_WIDTH(8、16、32、64、128、256、512、1024-bits)。
⑥TSTRB:来源数据发射端,位宽为TDATA_WIDTH/8,该信号意味这TDATA是数据字节还是位置字节。
⑦TKEEP:来源数据发射端,位宽为TDATA_WIDTH/8,该信号意味相关字节的内容是否作为数据的一部分来处理。
⑧TLAST:来源数据发射端,位宽为1,该信号意味着packet的边界。
⑨TID:来源数据发射端,位宽为TID_WIDTH,该信号是数据流标识符。
⑩TDEST:来源数据发射端,位宽为TDEST_WIDTH,该信号提供了数据流的routing信息(暂未搞懂routing information指的是什么)。
①①TUSER:来源数据发射端,位宽为TUSER_WIDTH,该信号指的是用户定义的边带可以传送的信息数据流。
①②TWAKEUP:来源数据发射端,位宽为1,该信号指的是任何与axi-stream接口有关的活动。
2.2握手信号
握手过程依靠的是TVALID和TREADY两个信号,分成以下三种情况。
2.2.1TVALID在TREADY之前有效
当TVALID有效时来自数据发送端的数据字节和控制信息必须保持不变,当TREADY为高电平时接收器就可以接收数据和控制信息,transfer的过程发生在TREADY为高时,图中的T3时刻。
2.2.2TREADY在TVALID在之前有效
当TREADY在数据信号有效之前有效,当TVALID为高电平时接收器就可以接收数据和控制信息,transfer的过程发生在TVALID为高时,图中的T3时刻。
2.2.3TREADY和TVALID同时有效
TREADY和TVALID信号在同一个时钟上升沿有效,所以transfer发生在下图中的T2时刻。
2.3唤醒信号(wake-up signaling)
TWAKEUP:暗示了AXI5-stream接口的任何活动,不多做解释具体可以参照ARM的AXI-stream手册。
2.4数据信号
TDATA是由数据发射端传输到数据接收端的数据。
2.4.1字节位置(有疑问)
在一个数据流中,数据总线的低位字节是流中的较早传输的。
对于一个没有空字节的packet,流中一个给定字节的位置可以使用以下方式来决定:
在一个数据流中:
1.字节 n 的序列 从 0 开始向上编号
2.序列中的每个transfer,t, 从 0 开始向上编号
3.数据总线的宽度为 w bytes
4.INT(x) 是数值 x 向下取整( rounded down 向绝对值减小的方向舍入取整)
因此字节n 被包含在传输 t 中:t = INT(n/w)
字节位置 b: b = n -(t *w)
字节位置b包含在:TDATA[(8b+7):8b]
举例当n=100bytes,w=32bytes时 t=3 b=4意味着需要传输3+1一次,第四次传输4byte(总线为32byte)
2.4.2字节类型
数据字节:在传输过程中不能修改的数据字节属性①数据字节的number②相关的TDATA信号的值③在数据流中数据字节的相对位置。
位置字节:在传输过程中不能修改的位置字节属性①位置字节的number②在数据流中位置字节的相对位置。
空字节:不包含任何信息,空字节在传输过程中可以插入或者移除。
互联不能修改流中的数据字节和位置字节的数量和相对位置,但是可以插入或者移除空字节。
2.4.3数据合并、组包以及宽度转换
推荐建立AXI-stream接口的时候是一个强适应性的数据位宽,因为这样可以根据系统去配置他的位宽。但当适应性强的位宽是不可能的时候他需要数据合并、组包以及宽度转换。
考虑数据合并
数据合并是指把两个来自不同的transfer的字节合并成一个transfer,数据合并需要考虑几个条件:
①只用满足TID和TDEST一致的transfer才可以被合并
②如果当前的transfer的TLAST信号有效,他将不能与后面的transfer合并,并且这个transfer不能被延迟。
③满足正确的数据字节以及位置字节的要求。
④满足正确的TLAST、TSTRB、TUSER信号要求。
考虑数据组包
数据组包的意思是移除数据流中的空字节,利用的是KEEP信号。
考虑数据压缩
通过给定的压缩给定的数据位宽(将数据位宽从给定的位宽压缩至更窄的数据总线位宽)通常涉及单输入到多输出。需要考虑以下条件:
①输出流的字节顺序与输入流的字节顺序必须match
②TSTRB必须以类似的方式缩小,保证数据字节以及位置字节的映射关系。
③TLAST只能与缩小后的最后一个transfer有关。
④所有输出transfer的TID和TDEST必须和输入的transfer的值相同。
⑤TUSER信息必须保持一样的字节。
⑥如果一个只包含空字节的transfer并且他的TKEEP和TLAST无效时是可以被压缩的。
考虑数据扩展操作
扩展是从一个给定的数据总线宽度转换到一个更宽的数据总线。
这一过程可以和合并操作混合进行,以便从多输入传输产生一个单个的输出传输。
如果扩展与合并操作混合进行,那么扩展操作可能会是一个更复杂的过程,因为在传输的接收端,扩展器不能始终判断下一个传输是否在一个相同的包中。
扩展的规则如下:
①输出流中的字节顺序必须与输入流中的字节顺序相同
②TSTRB 必须以类似的方式被扩展到数据的宽度,以保证数据字节和位置字节之间正确的关系被保持
③TLAST 必须被保持
④所有输出事物的 TID 和 TDEST 必须与输入事物的相同
⑤TUSER 信息必须与相同的字节保持关联
2.5限定字符
2.5.1TKEEP限定字符
TKEEP:来表示该byte的数据是否必须传输到目的地;
TKEEP为高代表他必须被传输到目的地,为低代表是可以被移除的NULL byte。
2.5.1TSTRB限定字符
TSTRB:来表示该byte数据是数据字节还是位置字节;
TSTRB为高代表是一个数据字节,TSTRB为低代表是一个位置字节。
2.6包边界
包是通过接口传输的一组字节。通过处理组合成包的传输,可以使得基础组件更有效率。AXI4-stream packet类似于 AXI4-burst。在一个包传输过程中需要考虑的信号有TID 、 TDEST 以及 TLAST 。关于 TID 和 TDEST 的更多信息请参考源设备和目标设备信号 。
TLAST的使用如下:
①当取消断言时, TLAST 表示接下来可以进行另一个传输,因此当前传输可以被延迟,以进行扩展、缩小或合并操作
②当被断言时, TLAST 可以被一个目标设备用来表示包的边界
③当被断言时, TLAST 表示在一个共享链路上进行仲裁改变的有效点
2.7源和目标信号
与源设备和目标设备关联的信号有:
TID 提供了一个流标识符,可被用来区分通过相同接口传输的多流数据。
TDEST 提供了用于数据流的粗放的路由信息。
2.8时钟和复位信号
2.8.1 时钟
每个组件都使用一个单一的时钟信号ACLK 。所有输入信号都在 ACLK 的上升沿上采样。所有输出信号必须在 ACLK 上升沿之后发生改变。
2.8.2 复位
协议包含一个单一的低有效的复位信号ARESETn 。复位信号可以被异步断言,但取消断言必须是在 ACLK 上升沿之后、同步的。在复位期间,TVALID 必须被驱动为低。
2.9 用户信号
当m=2 n=3时,它意味着每个数据字节有2个用户信号与他相关,接口总宽度为2,用户bits为6,x=0-5
所以字节x=5的用户信号为TUSER[(5*2)+(2-1):(5*2)];
x=4的用户信号为TUSER[(4*2)+(2-1):(4*2)]
对于TUSER的扩展或者压缩补0法
2.9.1决定用户信号的宽度
决定TUSER 的宽度对于一个具有若干个主机接口和从机接口的互联,互联必须支持的每字节TUSER bit 数定义为:
MIN(MAX[ 主机每字节 TUSER 位数), MAX[ 从机每字节 TUSER 位数])
在实际中:
1. 找出 TDATA 的每字节 TUSER bit 数最大的主机
2. 找出 TDATA 的每字节 TUSER bit 数最大的从机
3. 使用以上两个值中的最小值,即为互联必须支持的每 TDATA 字节 TUSER bit 数