文章目录
- 一、AHB(Advanced High_performence Bus 先进高性能总线)、APB(Advanced Peripheral Bus 先进外设总线)、AXI(Advanced eXtensible Interface 先进可扩展接口)的对比
- 二、AXI 概述
- 三、AXI 架构
- 四、AXI 的传输类型详解(Outstanding Transfer超前传输、Out-of-order Transfer乱序传输、Interleaving Transfer交叉传输、Narrow Transfer窄传输、Unaligned Transfer非对齐传输)
- 参考
一、AHB(Advanced High_performence Bus 先进高性能总线)、APB(Advanced Peripheral Bus 先进外设总线)、AXI(Advanced eXtensible Interface 先进可扩展接口)的对比
1、1 AHB、APB、AXI的应用场景对比
- 1、AHB主要是针对
高效率、高频宽及快速系统模块
所设计的总线,它可以连接如微处理器(CPU)、片上或片外的内存模块(RAM)和DMA等高效率模块; - 2、APB主要用在
低速且低功率的外设
(如UART、 I2C),可针对外设作功率消耗及复杂接口的最佳化。APB 在AHB和低带宽的外设之间提供了通信的桥梁,所以APB是AHB或ASB(Advanced System Bus 先进系统总线)的二级拓展总线; - 3、AXI是一种面向
高性能、高带宽、低延迟
的片内总线,支持读写并行、乱序传输、非对齐操作、只需要首地址的突发(Burst)传输等,比AHB更加快速。
1、2 AHB、APB、AXI的性能对比
- 1、总线宽度:指数据读写总线的宽度
(如:HRDATA[31:0]、HWDATA[31:0])
,一般配置成32位,但可扩展:- AXI:8、16、32、64、128、256、512、1024
- AHB:32、64、128、256
- APB:8、16、32
- 2、
AXI、AHB、APB
的通道特性:- ①、AXI有五个独立通道:
- 读取数据:
- 读地址通道(ARxxx)
- 读数据通道(Rxxx)
- 写入数据:
- 写地址通道(AWxxx)
- 写数据通道(Wxxx)
- 写操作响应通道(Bxxx)
- 读取数据:
- ②、AHB属于三通道总线:
- 读写数据通道
- 读写地址通道
- 写操作响应通道
- ③、APB只有两个通道:
- 读写地址通道
- 读写数据通道
- ①、AXI有五个独立通道:
1、3 AHB和AXI突发传输的对比
- 1、
AHB
:需要一次Burst传输的所有地址、地址与数据锁定对应关系、后一次突发传输必须等待前次传输完成; - 2、
AXI
:只需要首地址、可以连续发送多个突发传输首地址而无需等待前次突发传输完成、两次传输的数据可以交错传递、大大提高了总线的利用率!!!!! - 3、AHB Burst传输只有八种模式:
single、INCR、INCR4、WRAP4、INCR8、WRAP8、INCR16、WRAP16
- 4、AXI Burst传输
可以指定传输数据的个数:1-16
SoC系统中,均以AXI总线为主总线,通过桥连接AHB总线与APB总线,这样能够增加SoC系统的灵活性,更加合理地把不同特征IP分配到总线:
- AHB总线与AXI总线均适用于高性能、高带宽的SoC系统,但AXI具有更好的灵活性,而且能够读写通道并行发送,互不影响;
- AXI总线支持乱序传输,能够有效地利用总线的带宽,平衡内部系统。
二、AXI 概述
2、1 AXI总线、接口、协议(AXI4、AXI4-Lite与AXI4-Stream区别与联系)
- 1、总线、接口和协议常常放在一起,但是他们有各自的含义:
- ①、总线:一组由各种逻辑器件构成的数据传输通道,一般由
数据线、地址线、控制线等
构成; - ②、接口:一种连接标准,又常常被称为物理接口;
- ③、协议:传输数据的规则
- ①、总线:一组由各种逻辑器件构成的数据传输通道,一般由
- 2、AXI总线分为:AXI4、AXI4-Lite、AXI4-Stream
- ①、
AXI4
:(For high-performance memory-mapped requirements.)主要面向高性能内存映射通信的需求(如读写DDR、使用BRAM控制器读写BRAM等),是面向内存映射的接口,允许最大256个数据突发传输; - ②、
AXI4-Lite
:(For simple, low-throughput memory-mapped communication )用于简单、低吞吐量的内存映射通信(例如,与控制寄存器和状态寄存器之间的通信),占用很少的逻辑单元;- AXI4-Lite 是 AXI4 的删减版,适合轻量级的应用,也是包含 5 个通道,不同的是每个通道都进行了简化,去掉了对突发传输的支持(Burst),只允许每个transfer传输一个数据。
- ③、
AXI4-Stream
:(For high-speed streaming data.)面向高速流数据传输(视频、图像等流式数据);去掉了地址项,允许无限制的数据突发传输规模。- AXI4-Stream为流数据的传输定义了单个通道;
- 允许无限制的数据突发传输
- ④、AXI4、AXI4-Lite与AXI4-Stream的共同点:
- 均使用Ready、Valid握手机制进行通信。
- ①、
- 3、AXI接口:
- AXI-GP接口(4个):是通用的AXI接口;
- AXI-HP接口(4个):是高性能/带宽的标准的接口;
- AXI-ACP接口(1个):是ARM多核架构下定义的一种接口。
- 4、AXI协议:AXI4,AXI4-Lite,AXI4-Stream都是AXI4协议
,细节上略微有差别。
2、2 AXI协议特点:
- 五个独立的地址读写、数据读写、写操作响应通道
- 支持发出多个未完成地址(outstanding addresses):可连续发出传输地址,无需等待前次传输完成
- 支持乱序传输(out-of-order transaction):更快内存区域的传输无需等待较慢内存区域的传输完成,减少传输延迟的影响
- 在乱序传输的基础上,支持具有不同AWID的交叉数据写入(Interleaving Transfer)
- 支持使用
字节选通信号(byte strobes)
的非对齐传输 - 仅发出首地址的突发(Burst)传输
- AXI 特点:
- ①、单向通道体系结构:信息流只以单方向传输,简化时钟域间的桥接,减少门数量;当信号经过复杂的片上系统时,减少延时。
- ②、支持多项数据交换:通过并行执行突发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗。
- ③、独立的地址和数据通道:地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低。
三、AXI 架构
3、1 AXI 通道
- 1、AXI总线共有5个独立的通道,每个传输通道都是单方向的
- ①、这五个独立通道中的每一个都包含一组信息信号和一个双路的
VALID
和READY
握手机制:- 发起方:使用VALID信号来指示通道中的数据和控制信息什么时候有效;
- 接收方:使用READY信号来表示何时可以接收数据;
- 数据发起方,发送VALID信号,数据接收方,返回一个READY信号。
- ②、读数据和写数据通道都包括一个
LAST
信号,用来指明一个transaction传输的最后一个数据 - ③、
读数据通道
传送着slave到master的读数据和读响应信息:- 读数据总线宽度可以是
8,16,32,64,128,256,512,1024
位; - 读响应信息指明读事务的完成状态。
- 读数据总线宽度可以是
- ④、
写数据通道
传送着master向slave的写数据,- 写数据总线宽度可以是
8,16,32,64,128,256,512,1024
位; - 每八位数据都会有一个
byte lane strobe
,用来指明数据总线上面的哪些byte有效(即WSTRB[n] = 1
,表示第n个字节有效(n从0开始))
- 写数据总线宽度可以是
- ⑤、
写响应通道
提供了slave响应写事务的一种方式,slave只会在一个transaction传输结束时发送一个响应信号。对每个突发发生一次,而不是对突发中的每个单独数据传输发生一次
- ①、这五个独立通道中的每一个都包含一组信息信号和一个双路的
- 2、地址通道(address channel)包含:地址(ADDR)和控制信息(control)
- 3、
读transcation
的结构图:
- 4、
写transcation
的结构图:
- 5、一个典型的AXI系统由多个Master和Slave组成,通过某种形式的互连连接在一起,如下图所示:
3、2 AXI 信号描述
- 1、AXI五个通道对应的信号有不同的首字母表示:
读地址通道:ARxxx
、写地址通道:AWxxx
、读数据通道:Rxxx
、写数据通道:Wxxx
、写操作响应通道:Bxxx
- 2、
全局(系统)信号:Axxx
- 3、本节将以
32位数据总线(data bus)、4位写数据有效信号(write data strobe)和4位ID字段(ID fields)
为例介绍AXI信号
3、2、1 全局信号(Axxx)
3、2、2 写地址通道信号(AWxxx)
信号 | 源 | 描述 |
---|---|---|
AWID[3:0] | 主机 | 写地址ID,这个信号是写地址信号组的ID标签 |
==AWADDR[31:0] == | 主机 | 写地址 |
AWLEN[3:0] | 主机 | 突发式写的长度。此长度决定突发式写所传输的数据的个数 |
==AWSIZE[2:0] == | 主机 | 突发式写的大小,表示一次Burst传输中,每个数据的大小 |
AWBURST[1:0] | 主机 | Burst传输的类型 |
AWLOCK[1:0] | 主机 | 锁定类型 |
AWCACHE[3:0] | 主机 | Cache类型 |
AWPROT[2:0] | 主机 | 保护类型 |
AWVALID | 主机 | 表示写地址和控制信息是有效的。1 = 地址和控制信息有效;0 = 地址和控制信息无效。地址和控制信号会一直保持稳定,直到AWREADY变为高。 |
AWREADY | 从设备 | 写地址准备好。这个信号用来指明设备已经准备好接受地址和控制信息了。1 = 设备准备好;0 = 设备没准备好 |
3、2、3 写数据通道信号(Wxxx)
信号 | 源 | 描述 |
---|---|---|
WID[3:0] | 主机 | 写数据ID,这个信号是写数据传输的ID标签。在一次写事务中,WID必须和AWID保持一致 |
WDATA[31:0] | 主机 | 写数据,写数据总线可以是:8、16、32、64、128、256、512、1024bits |
WSTRB[3:0] | 主机 | 写选通信号。表示在一个数据传输WDATA[31:0] 中,那些字节的数据有效,每一bit对应WDATA[31:0] 的一个字节 |
WLAST | 主机 | 表示一次突发写的最后一个数据 |
WVALID | 主机 | 表示写数据和选通信号是有效的。1 = 有效;0 = 无效 |
WREADY | 从设备 | 写操作准备好了。这个信号用来指明从设备能接收写数据了。1 = 设备准备好;0 = 设备没准备好 |
- 1、
WSTRB[n]
表示的WDATA区间为:WDATA[((8*n)+7) : (8*n)]
3、2、4 写响应通道信号(Bxxx)
信号 | 源 | 描述 |
---|---|---|
BID[3:0] | 从设备 | 响应ID,这个信号是写响应的ID标签。在一次写事务中,BID必须和AWID保持一致 |
BRESP[1:0] | 从设备 | 写响应信号。从设备告诉主机,写传输的状态:OKAY、EXOKAY、SLVERR、DECERR ;从机告诉主机,写的对不对 |
BVALID | 从设备 | 表示写响应有效,写响应准备好了。1 = 有效;0 = 无效 |
BREADY | 主机 | 主机可以接收写响应信号了。1 = 主机准备好;0 = 主机没准备好 |
3、2、5 读地址通道信号(ARxxx)
信号 | 源 | 描述 |
---|---|---|
ARID[3:0] | 主机 | 读地址ID,这个信号是读地址信号组的ID标签 |
==ARADDR[31:0] == | 主机 | 读地址 |
ARLEN[3:0] | 主机 | 突发式读的长度。此长度决定突发式读所传输的数据的个数 |
==ARSIZE[2:0] == | 主机 | 突发式读的大小,表示一次Burst传输中,每个数据的大小 |
ARBURST[1:0] | 主机 | Burst读传输的类型 |
ARLOCK[1:0] | 主机 | 锁定类型 |
ARCACHE[3:0] | 主机 | Cache类型 |
ARPROT[2:0] | 主机 | 保护类型 |
ARVALID | 主机 | 表示读地址和控制信息是有效的。1 = 地址和控制信息有效;0 = 地址和控制信息无效。地址和控制信号会一直保持稳定,直到ARREADY变为高。 |
ARREADY | 从设备 | 读地址准备好。这个信号用来指明从设备已经准备好接受地址和控制信息了。1 = 设备准备好;0 = 设备没准备好 |
3、2、6 读数据通道信号(Rxxx)
信号 | 源 | 描述 |
---|---|---|
RID[3:0] | 从设备 | 读数据ID,这个信号是读数据传输的ID标签。在一次读事务中,RID必须和ARID保持一致 |
RDATA[31:0] | 从设备 | 读数据,读数据总线可以是:8、16、32、64、128、256、512、1024bits |
RRESP[1:0] | 从设备 | 读响应信号。表示在一个读传输的状态:OKAY、EXOKAY、SLVERR、DECERR ;从机告诉主机,读的对不对 |
RLAST | 从设备 | 表示一次突发读的最后一个数据 |
RVALID | 从设备 | 表示读数据有效,读数据准备好了。1 = 有效;0 = 无效 |
RREADY | 主机 | 读操作准备好了。这个信号用来指明主机可以读从机发出的数据了。1 = 主机准备好;0 = 主机没准备好 |
3、3 AXI 握手机制
- 1、AXI的五个独立通道都使用握手机制来传输数据及控制信号:
- 传输源:产生
VLAID
信号来指明何时数据或控制信息有效; - 目地源:产生
READY
信号来指明已经准备好接受数据或控制信息。
- 传输源:产生
- 2、当
VLAID
和READY
同时为高时,数据传输才能发生 - 3、
VALID
和READY
信号的出现有三种关系:VALID
先高,READY
后高;VALID
后高,READY
先高;VLAID
和READY
同时为高。
3、3、1 VALID
先高,READY
后高
3、3、2 VALID
后高,READY
先高
3、3、3 VLAID
和READY
同时为高
3、3、4 通道握手信号之间的依赖性
- 单箭头指向的信号能在箭头起点信号之前或之后断言(使能)
- 双箭头指向的信号必须在箭头起点信号断言之后断言
- 1、一对VALID信号和READY信号之间没有先后关系:AXI接口可以等到检测到VALID才断言对应的READY,也可以检测到VALID之前就断言READY;
- 2、读数据通道:
- slave可以提前准备好
先ARREADY
,再等待读地址有效再ARVALID
;也可以在地址有效之后先ARVALID
,再准备好接收地址再ARREADY
; - slave只有在成功接收读地址之后,才能将对应地址的数据准备好:必须先
ARVAILD和ARREADY
,再RVALID
- slave可以提前准备好
- 3、写数据通道:
- master不能等到slave准备好之后
先AWREADY/WREADY
,再使地址和数据有效再AWVALID/WVALID
- master在发送写数据之前
WVALID之前
,从设备必须已经读取到了写地址AWREADY必须为高
,不然数据就不知道要存在哪儿了 - slave可以等待信号AWVALID或WVALID信号有效或者两个都有效之后再给出AWREADY信号
- slave可以等待AWVALID或WVALID信号有效或者两个信号都有效之后再给出WREADY信号
- master不能等到slave准备好之后
3、4 AXI Burst传输
AXI是基于BURST传输的!!!!!
3、4、1 AXI Burst传输相关信号及概念
- 1、与Burst传输相关的信号:
- ①、
AWLEN[3:0]、ARLEN[3:0]
:决定Burst传输的数据个数 - ②、
AWSIZE[2:0]、ARSIZE[2:0]
:一次Burst传输的每个数据的最大位数:8到1024bits(1到128bytes) - ③、
ARBURST[1:0]或AWBURST[1:0]
:决定突发传输的类型00(FIXED)、01(INCR)、10(WRAP)
- ①、
- 2、AXI支持可变长度的突发,每次突发传输的数据个数可以是:1到16个
AWLEN[3:0]、ARLEN[3:0]
突发传输的数据个数 = AWLEN[3:0]/ARLEN[3:0] +1
- 3、
AWSIZE[2:0]、ARSIZE[2:0]
:一次Burst传输的每个数据的最大位数:8到1024bits(1到128bytes)
注意:任何传输的
SIZE
都不能超过数据总线WDATD、RDATA
的宽度
- 如:如果WDATA位宽为32,那么每个transfer,传输字节数不超过4
- 4、三种突发类型:由
ARBURST[1:0]或AWBURST[1:0]
决定突发传输的类型- ①、FIXED(Fixed-address burst:固定传输地址的burst传输)
- 每一次传输的地址都不变,重复对一个相同的位置进行存取,
例如:FIFO
- 每一次传输的地址都不变,重复对一个相同的位置进行存取,
- ②、INCR(Incrementing-address burst :可指定长度的增量式突发传输)
- 指每一次读写的地址都比上一次的地址增加一个固定的值
- 增量值取决于传输的大小
AWSIZE[2:0]、ARSIZE
。例如,在大小为4字节的突发中,每个传输的地址是前一个地址加4 - 注意:AHB的INCR:指不限定长度的增量式突发传输
- ③、==WRAP(Wrapping burst:有回环边界的回环传输) ==
- 在一个回环突发中,当到达回环边界时,地址会回环到一个较低的地址
- 对于
Wrapping Bursts
,突发的长度必须为2、4、8或16 - 起始地址必须与传输的size对齐:起始地址可以被**一个transfer的size(burst传输的一个数据的字节数)**整除
- ①、FIXED(Fixed-address burst:固定传输地址的burst传输)
- 回环传输通常用于从memory中读取cache line
因为master对cache的访问通常是cache line中的某些bytes,但当发生cache miss时,从memory读回来的是整个cache line。而此时master发送的地址却不一定是cache line的起始地址,而可能位于中间,因此递增到upper boundary时需要回卷到lower boundary,才能将该cache line读完。
- 5、AXI Burst读写不能超过4K的地址边界!!!也就是说当Burst传输地址,是4K的倍数时,必须要结束当前Burst,重新开始一次Burst传输
- AHB Burst传输是1K的地址边界!!!!
- 6、不支持提前终止burst传输
3、4、2 AXI Burst传输地址计算
- 1、变量含义:
变量名 | 含义 |
---|---|
Start_Address | 主机发送的起始地址AWADDR、ARADDR |
Number_Bytes | 一个transfer(一个Burst传输中的一个数据)的最大字节数2^WSIZE[2:0]、2^RSIZE[2:0] |
Data_Bus_Bytes | 数据总线上面==byte lanes(总线宽度Data_Bus_Bytes 包括多个bytes,每个byte称为一个byte lane)==的数量 |
Aligned_Address | 对齐Burst传输的起始地址 |
Burst_Length | 一次突发式读写所传输的数据的个数AxLEN + 1 |
Address_N | 第N个transfer的地址,N:每一次突发式读写所传输的地址数量,范围是1-16。Address_1 = Start_Address;Address_N = Aligned_Address + (N – 1) x Number_Bytes |
Lower_Wrap_Boundary | 回环边界(下界) |
Upper_Wrap_Boundary | 回环边界(上界) |
Lower_Byte_Lane | 传输的最低地址的byte lane |
Upper_Byte_Lane | 传输的最高地址的byte lane |
INT(x) | 对x进行向下取整 |
- 2、Burst对齐传输的起始地址
Aligned_Address
:判断Burst传输是否为对齐传输- 对齐:一次transaction(一次Burst传输)的起始地址可以被一个transfer的size(最大字节数)整除
- 若
Aligned_Address= Start_Address
,则为对齐传输,否则为非对齐传输
Aligned_Address = (INT(Start_Address / Number_Bytes) ) x Number_Bytes
-
3、WRAP的上下界地址计算:WPAP中,起始地址每次增加Number_Bytes个,地址到达上界后,下一个transfer地址回到下界
- 回环下界:是根据与burst总字节对齐的起始地址计算的
Lower_Wrap_Boundary = (INT(Start_Address / (Number_Bytes * Burst_Length))) * (Number_Bytes * Burst_Length) - 回环上界:回环下界+burst总字节数
UPPer_Wrap_Boundary = Lower_Wrap_Boundary + (Number_Bytes * Burst_Length)
- 回环下界:是根据与burst总字节对齐的起始地址计算的
-
4、Byte Lane的计算:
总线宽度data_bus_bytes包括多个bytes,每个byte称为一个byte lane,STRB就是用来标记byte lane是否valid的信号。在某些情况下,data bus中并非每个byte lane都是valid的,例如:- ①、单个transfer的字节数 ≠ 数据总线的宽度(小于);
- ②、非对齐传输,即
start_addr ≠ aligned_addr
; - ③、master逻辑主动丢弃某些bytes(与master功能模块的设计逻辑有关)
- 在①、②两种情况中,data bus中有效的最低byte lane与最高byte lane可以通过如下方式进行计算:
Lower_Byte_Lane = Address_N - INT(Address_N /Data_Bus_Bytes ) * Data_Bus_Bytes- Upper_Byte_Lane 需要分情况讨论:
- 对齐传输(Start_Address = Aligned_Address):
Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes- 1 - 非对齐传输:
Upper_Byte_Lane = Aligned_Address+ Number_Bytes- 1 - INT(Address_N /Data_Bus_Bytes ) * Data_Bus_Bytes
- 对齐传输(Start_Address = Aligned_Address):
- Upper_Byte_Lane 需要分情况讨论:
3、5 AXI Burst传输示例
3、5、1 Read burst example
下图展示了四个传输的读突发,在本例中,Master驱动地址(包含控制信号),Slave在一个周期后接受它。
地址出现在地址总线上后,数据传输发生在读数据通道上。Slave保持VALID
信号低,直到读取数据可用。对于突发的最终数据传输,Slave拉高RLAST
信号以显示正在传输最后一个数据。
3、5、2 Overlapping read burst example(重叠读突发示例,或者又可叫outstanding)
下图显示Master如何在Slave接受第一个地址后驱动另一个突发地址,这使得Slave可以在第一个突发完成的同时开始处理第二个突发的数据。
3、5、3 Write burst example
下图显示一个写事务,当Master在写地址通道上发送地址和控制信息时,进程开始。然后,Master通过写数据通道发送每一项写数据。当Master发送最后一个数据项时,WLAST信号变为HIGH。当Slave接受了所有数据项后,它将向Master驱动一个写响应,以指示写事务已经完成。
四、AXI 的传输类型详解(Outstanding Transfer超前传输、Out-of-order Transfer乱序传输、Interleaving Transfer交叉传输、Narrow Transfer窄传输、Unaligned Transfer非对齐传输)
4、1 Outstanding Transfer超前传输
- outstanding addresses:可连续发出传输地址,无需等待前次传输完成
- AXI的通道是分离的,因此master不需要等待前一笔操作A响应完成就可以发送下一笔操作请求B
- outstanding的能力指的是:Master在等到响应信号之前,可以持续发送的地址个数(读/写命令个数),也就是
outstanding depth
- outsanding可以减少总数据量的传输延迟、提高总线利用率
- outsanding分为:读outstanding、写outstanding
- outsanding传输,要求Master和slave都具有outstanding能力!!!!!
注: 当主机具有outstanding能力时,会将awvalid拉高多个周期,若从机也支持outstanding,则相应的将awready拉高多个周期;
- 如果slave不支持outstanding怎么办呢?那就在接收完地址A之后,把awready拉低,等数据写完,或者读完,再拉高awready
PS:
- Burst可以减少地址通道的交互,提升单笔传输的效率
- Outstanding可以减少多笔传输之间的等待,提升多笔传输的效率
4、2 Out-of-order Transfer乱序传输
- 1、AXI为啥可以乱序传输呢?
- AXI的每个通道都有自己的ID,用来区分不同的transaction;
- 因此只需要保证一个写事务的AWID、WID一致,读事务的ARID、RID一致,即可保证数据的正确传输;
- 不需要管事务的前后关系(不是说事务A的地址和控制信号先发,那事务A的数据一定要先读写);
- 哪个事务先准备好,就可以先发送到总线上。
- 2、out of order乱序的实现思路:
- ①、不同事务的AxID
AWID、ARID
如果一致,那么这些事务就不能实现out of order,只能进行顺序完成; - ②、不同事务AxID
AWID、ARID
不同,那么这些事务之间可以乱序
- ①、不同事务的AxID
- 3、Out-of-order分为读乱序和写乱序(尤其注意!!!写乱序不是写数据乱序,而是写响应信号乱序,是针对slave的):
- ①、==读乱序(读数据乱序):==如果一个slave连续收到多个ARID不同的transaction,而slave发送到总线上的读数据,RID的顺序与master发出的ARID顺序不同,则称为读乱序
读乱序的深度由read data reordering depth决定,代表slave中允许pending的adress个数;
当read data reordering depth = 1时代表不允许读乱序。 - ②、==写乱序(写响应信号乱序):==如果一个slave连续收到多个AWID不同的transaction,而slave发送到总线上的响应信号,BID的顺序与master发出的AWID顺序不同,则称为写乱序
- ①、==读乱序(读数据乱序):==如果一个slave连续收到多个ARID不同的transaction,而slave发送到总线上的读数据,RID的顺序与master发出的ARID顺序不同,则称为读乱序
4、3 Interleaving Transfer交叉传输
- 1、啥是Interleaving ?
- ①、==不同事务的数据(不同Burst的transfer)==可以被打散混合排列,注意!!!!这里说的混合排列是不同事务间的,同一个事务的数据是不能被打乱的,还是按照顺序读写
- ②、例如:事务A数据是a1 a2,事务B数据是b1 b2;如果不支持交织,那么总线上数据的传输需要是a1 a2 b1 b2或者b1 b2 a1 a2;如果支持交织,就可以是a1 b1 a2 b2(或者别的插入顺序)
- 2、Interleaving 也分为读交叉和写交叉:
- ①、读交叉:简单来说,读交织是out of order乱序的其中一种实现形式。
out of order
是transaction级别
的,而读Interleaving
则是transfer级别
的,读交叉也是通过ARID/RID来标识数据属于哪一个事务的
- ②、写交叉:WID提供了写交织的不同事务的识别,不同WID的写数据transfer可以间插发送,但需要注意:
- 每笔transaction的第一个transfer需与写数据发送的顺序严格一致;
- 为了避免死锁dead lock,支持写交织的slave必须一直支持写交织,不能某些时候支持,而某些时候不支持;
- 写交织在AXI4中被弃用。
- ①、读交叉:简单来说,读交织是out of order乱序的其中一种实现形式。
4、4 Narrow Transfer窄传输
- 1、当本次传输事务中**数据位宽(transfer的位宽)小于通道本身的数据位宽(WDATD、RDATA)**时,称为窄位宽数据传输(Narrow Transfer);
- 2、窄传输中通过master发出的
字节有效信号 WSTRB
来调整有效数据的字节位置,能够使slave无需进行数据重组等工作; - 3、窄位宽写传输(需要用到WSTRB 信号):由master告知slave,数据总线中,哪些字节是有效的
- WSTRB 信号:每1位对应WDATA中的一个字节(8bit);
- 对应关系:
WSTRB[n]
对应WDATA[(8*n+7) : 8*n]
- 4、针对一些特定的寄存器读写,或者在不同数据位宽的总线传输中会使用窄传输操作
- 5、该结构有利于 memory 类型的slave进行写入处理:
- 第一拍,英文协议中叙述说起始地址为 0x4 ,可以理解为实际是从地址 0x4 开始写入了 32bit 数据。slave获取整个总线上的 64bit 数据存储至存储介质中,比如 DDR,并利用 WSTRB 作为 mask 信号屏蔽无效的低 32 bit(比如 DDR 的 DQM
信号)。这时候对于存储介质的写入地址为 0x0,实际写入的起始地址是0x4。- 第二拍,slave获取整个总线上的 64bit 数据存储至存储介质中,并利用 WSTRB 作为 mask 信号屏蔽无效的高 32 bit。这时候存储介质的写入地址为 0x8,实际为从地址 0x8 开始写入了 32bit 数据。
- 第三拍,slave获取整个总线上的 64bit 数据存储至存储介质中,并利用 WSTRB 作为 mask 信号屏蔽无效的低 32 bit。这时候存储介质的写入地址为 0x8,但实际只从地址 0xC 开始写入了 32bit 数据。
4、5 Unaligned Transfer非对齐传输
-
1、非对齐传输指:突发传输的首字节地址,即起始地址与突发传输transfer位宽不对齐
- eg:突发传输中数据位宽为32bit
32bit = 0010_0000 = 0x20
,如果起始地址为0x20
的整数倍(例如:0x00或0x20或0x40
),则为对齐传输;否则为非对齐传输(例如:0x01或0x21
)
- eg:突发传输中数据位宽为32bit
-
2、对于非对齐传输,主机会进行两项操作:
- 即使起始地址非对齐,也保证所有传输是对齐的;
- 在首个 transfer 中增加填充数据,将首次传输填充至对齐,填充数据使用 WSTRB 信号标记为无效
-
3、在读传输中,slave也按照同样的原则,在读数据中填充无效数据实现对齐,由master自行分离
参考
- AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?
- AXI总线的out of order/interleaving到底是怎么一回事?
- AXI传输数据结构
- AXI中的传输类型——图文解释(Burst / Outstanding / Out-of-order 等)
- AXI协议(5):AXI协议的burst机制-窄传输
- AXI总线的out of order/interleaving到底是怎么一回事?
- AXI协议的transaction attributes和cache属性
- AXI协议中的4K边界问题
- 关于axi协议里面burst的4k问题
- AXI事务ID与outstanding/out of oreder/interleaving实现关系