AXIS中TDATA的辅助信号(TUSER,TSTRB,TKEEP)
作者:互联网
AXIS总线是一个流式总线,总线上没有addr的概念,数据随着时间先后,形成流式存储布局,
TDATA宽度以BYTE为基本单位,即8的倍数。每个字节宽度,视为一个byte lane。
对于N个byte lane的宽度的TDATA,多字节宽度的数据,在内部被流式化的时候,是按照逐个byte lane来串化存储的。可以理解为一个8bits的FIFO。
如果每个BYTE伴随有一个n位的TUSER时,可以理解为另有一个nbits的FIFO,在读取时,每取出一个TDATA 的8bits,就会同时取出一个TUSER的 nbits。
如果总线宽度有N个byte lane,但是TUSER只给出一个首个byte lane的nbits,那么内部处理时,会把其他的byte lane的TUSER的nbits,默认为拉低为常数0。
如果需要对AXIS进行数据宽度转换,那么就需要TKEEP的帮助了。
当tlast出现时,内部串化机会在本次传输的最后一个byte lane之后,
当内部串化机进行串化时,发现某个byte lane对应的TKEEP为0,那么就丢弃这个byte,不存入FIFO。这是个有用的特性,
例如,当输入的axis出现tlast时,
TKEEP 这是一个多比特的信号。比如总线8个Byte. 这个信号8bit. 没一个bit对应的是总像是对应的BYTE是不是有效的。
TSTRB 这也是一个多比特信号。。也是说明总线上的数据是不是有效的。。
那这个地方你可能会问,TKEEP和TSTSTRB到底有啥区别?
区别是这样的。。TKEEP要是为0。代表了这个数据完全没用,可以被扔掉了。。。
在TKEEP为1的前提下,表示这个信号不能扔掉。那TSTRB就起作用了。TSTRB为1,表示对应的数据有效,是个好数据。TSTRB为0时,表示这个是个占位数据,没啥意义,但是不能丢掉。为什么需要占位数据呢?是因为有时候需要AXISTREAM传输的数据队形不能乱。。。就像下图对应的情况。。。
TSTRB位字节修饰符。用来描述TDATA相关字节内容作为一个数字字节或者一个位置字节被处理。
TKEEP是字节修饰符。用来表明TDATA相关字节的内容是否作为数据流的一部分被处理。TKEEP字节修饰符未被确认的那些相关字节是空字节,可以从数据流中去除。
标签:TUSER,lane,字节,TDATA,辅助信号,TSTRB,byte,TKEEP 来源: https://blog.csdn.net/weixin_42418557/article/details/120769881