《AMBA 4 AXI4-Stream Protocol Specification》 AXI4_stream协议详解 AXI协议(五)-AXI-STREAM及接入思路解析 【OpenHW参赛手记】AXI-Stream接口介绍
1. Overview
AXI4-Stream(AXIS)协议主要用于组件之间数据流传输,既可用于单主单从,也可用于多主多从流传输。AXIS该协议支持多种数据流使用相同共享总线集合,允许构建类似于路由、宽窄总线、窄宽总线等更为普遍的互联。
2. Interface Description
AXIS接口描述如下,不再如AXI一样划分多个独立通道
Signal | Source | Width(bits) | Description |
---|
ACLK | Clock Source | 1 | AXIS时钟 |
---|
ARESETn | Reset Source | 1 | AXIS全局复位 |
---|
TID | Master | TID_WIDTH | 用于多机通信时指示数据流ID号 |
---|
TDATA | Master | TDATA_WIDTH | 传递的数据 |
---|
TSTRB | Master | TDATA_WIDTH/8 | 指示TDATA中对应的byte是data byte还是position byte |
---|
TKEEP | Master | TDATA_WIDTH/8 | 指示TDATA中对应的byte是data byte还是null byte |
---|
TVALID | Master | 1 | 数据信息有效 |
---|
TREADY | Slave | 1 | 数据信息准备接收 |
---|
TLAST | Master | 1 | 指示一包数中最后一个TDATA |
---|
TDEST | Master | TDEST_WIDTH | 用于多机通信时指示路由信息 |
---|
Parameter | Units | Description |
---|
TID_WIDTH | bit | 数据流ID号位宽 |
---|
TDATA_WIDTH | bit | AXI AW通道的AWADDR位宽 |
---|
3. Transfer Signaling
3.1. Handshake process
与AXI单个通道的握手时序一致

3.2. Byte signaling
TSTRB和TKEEP两个信号用于指示TDATA中每个byte的类型,用于帮助写入内存时位宽对齐,总共有以下三种类型
● Data Byte: 数据字节,TDATA中从source到destination必须要传递的有效数据byte
● Position Byte: 占位字节,TDATA中从source到destination必须要传递的无效数据byte,但必须占据内存
● Null Byte: 空字节,实际传递中被无视的byte
指示方式为
TSTRB[i] | TKEEP[i] | TDATA[8(i+1)-1:8i] |
---|
high | high | data byte | high | low | position byte | low | high | reserved | low | low | null byte |
为什么要搞这么多种byte呢?其实为了让一包数与内存中的数据位宽对齐。
例如内存数据位宽是4byte,一包数共16byte的话,恰好占据4个内存单元,可见Continuous Aligned Stream。但是在传输中可以加入null byte传输多次,即Byte Stream。
Continuous Aligned Stream
如下图,TDATA_WIDTH为32,每一列是每一次transfer transaction

Byte Stream
如下图,每次transaction加入了null byte,就可以使同样的16byte握手不同次,但最终写入内存的还是这D-00~D-0F,null byte被丢弃!

Continuous Unaligned Stream
下图中要传递18byte,写入内存时会占据4.5个内存单元,即第5个内存单元只用了2byte,另外2byte难道要存下一包数嘛?
不能,所以加入position byte使这一包数大小恰为内存单元的整数倍。注意TSTRB和TKEEP指示position byte就用于占位并不是有效数据

Sparse Stream
还可以穿插着插入position byte

|