Loading

AMBA协议学习二之AXI协议

引言

曾经在项目中使用过AXI协议进行DMA,但是只用到了其中部分信号,对时序有了初步了解,但其中很多特性还不是很清楚,特此写一篇文章记录深入学习的部分。

协议研读

1. AXI特性

本文约等于对文档的一次翻译,真正的学习需要结合项目,常看常新!

2. AXI架构

 五个独立通道,读地址通道,读数据通道,写地址通道,写数据通道,写相应通道。

注意这里对于out-of-order的描述是:completion of transaction,因此对应的是从机的行为

曾经看过一个问题,提到了为什么不设置一个读响应通道,上文解释了原因:读数据通道是从从机返回给主机,因此省去了这一个通道,读响应可以从读数据通道返还给主机。

写数据通道有一个字节strobe信号,相当于一个掩码,只传输需要传输的字节数据给从机。

而写入的数据是永远视作被缓存的,这一性质使得主机可以在从机还没给前一写交易相应时继续发起写交易。

有时在高速场景下需要较大的带宽可能导致时序问题,因此插入寄存器片Register slices可以改善时序,相当于pipeline了,但是会增大延时。

一些专用术语,AXI的一次操作称为一次Transaction,一次传输中的负载数据称为Burst,一次突发由多笔数据传输构成,一笔传输称为Beat,这里可以理解为一拍。

3. AXI信号

写数据通道的信号稍微少一些,这里WID仅仅在AXI3中适用,后续协议取消了,这里WSTRB信号需要着重关注一下。

写相应通道也有ID标识信号, BRESP信号表明写交易的状态。

读地址通道与写地址通道的信号类似,ARLEN与ARSIZE有些像,需要区分开。

读数据通道与写数据通道相比多了个读响应信号。

4. 流控机制

这里需要区分的是:上图是一个依赖关系,实际上从机是可以先拉高READY信号表示可以接受,然后主机发送VALID信号表示源信号有效,然后握手表示一次传输。但是这里主机不是等待从机有效才拉高的。

5. 通道依赖关系

5.1 读交易握手依赖性

这里单箭头表示终点信号的断言与起点信号无关,双箭头表示终点信号必须在起电信号断言后才能断言!

这里可以看出很明显的规律,单箭头发起方的行为不能依赖于箭头结束方,单箭头结束方的行为与发起方无关。双箭头表示有严格的依赖关系。

这里我通俗理解一下单箭头的行为,valid信号的行为是指示数据有效,而数据有效是与其他端口无关的,仅由本模块决定。因此valid信号发起不能依赖于其他模块。而ready信号表示本模块是否有能力接受数据,因此这种行为是可以在任意时刻断言的。

5.2 写交易握手依赖性

写交易的规律与上文类似,AXI4和AXI5对于BVALID信号的依赖性进行了修改,这里BVALID需要等待AWVALID,AWREADY,WVALID,WRADY信号均断言后才可断言。而AXI3中仅需等待WVALID和WREADY断言后即可断言。如下图所示:

 

从AXI3到AXI4 AXI5的依赖性变化表明:后续协议不再支持从机在接收地址前,接收所有的写数据并提供写响应。

这一转变需要wrapper(协议这么写的,有点不太理解)。wrapper能确保从机只有接收到适当的地址后才可提供写响应。

6. 交易结构

6.1 地址结构

突发地址的约束,这里限制在4KB的内在原因协议中没有解释。其实很多地方都存在4K边界的说法,比如说处理器中虚拟地址空间划分以页(page)为单位,典型的页大小为4KB,每次程序运行时处理器将一页的内容从硬盘搬运到主存上。

这里给出一个参考,感觉解释的很清楚:

关于axi协议里面burst的4K问题

6.2 突发传输

突发长度由ARLEN和AWLEN的数值表示,位宽为8,因此最大支持256(255+1)的突发长度。注意这里的单位是transfer!!!!!!!Burst length 表示一次突发传输有多少次数据的传输,多少次transfer!

突发大小ARSIZE,AWSIZE 这里描述是每次burst传输中,每次data transfer或每1beat包含的bytes数目,具体配置如下图所示:

如果AXI总线宽度比burst size规定的大小更宽,AXI接口必须根据传输地址中确定每一次transfer中使用哪几条byte lanes(字节通道)。

AXI一共有三种突发传输类型,信号标识为AxBURST 固定模式0x00,自增模式0x01,卷绕模式 0x10

需要注意的是wrap模式必须地址对齐address aligned

6.3 读写数据结构

WSTRB信号标志了哪一条字节线选通,因此WSTRB[n]表明WDATA[8*n +: 8]这8bit的数据传输。因此主机对于数据总线上的有效信号可以通过拉高对应的WSTRB信号来选通。

6.3.1 Narrow transfer窄带传输

窄带传输是当主机发起传输时传输的数据比总线位宽造成的,这时需要在地址和控制信号中确认传输使用的数据字节通道。

这里给了两个示例:

1. 一笔突发有5次传输、起始地址为0、每次传输1个字节、传输数据总线是32bit、突发类型为INCR

2. 一笔突发有3次传输、起始地址为4、每次传输32bit、传输数据总线是64bit

6.3.2 Byte invariance字节不变性

这个特性使得在一个数据结构中可以同时使用大端序和小段序。如下图数据头采用小段序,数据段采用大端序。

6.3.3 Unaligned transfers非对齐传输

AXI支持非对齐传输。在对齐传输中一个大于1Byte的数据,第一个字节应该对齐自然边界,比如一个32bit的数据,4Byte,那么其地址应该是0,4,8,c这样变化,如果起始地址是0x02这样就是不对齐的情况。

在非对齐传输中,AXI有2中方案来进行传输:

具体的对齐传输和非对齐传输实例如下图所示:

6.4 读写响应结构

为什么有独立的写响应通道,但没有独立的读响应通道?这里读通道是从机反馈给主机,因此可以省去一个通道,节省带宽,减少设计复杂度。

以及对应4个响应的解释。OKAY-2'b00 EXOKAY-2'b01 SLVERR-2'b10 DECERR-2'b11

 

需要注意的点:

对于写交易,整个burts操作返回一个响应信号,不会对每一个transfer返回一个响应信号。但是对于读交易,从机可以针对一次突发中每一次transfer返回不同的响应信号。

7. 交易属性

这一部分描述——决定了诸如Caches、Buffers和内存控制器等系统组件应该如何处理事务的属性。

从机类型可以分为存储类和外设类。 

首先看AXI3中如何定义这两个信号的:

AXI4的变化:

AxCACHE[1]为可修改位,当 AxCACHE[1]=1,交易的特性可修改。当 AxCACHE[1]=0,交易的特性不可修改。

7.1 Non-modified transaction不可修改的交易

7.2 Modified transaction可修改的交易

同时AXI4还更新了读分配Read-Allocate和写分配Write-Allocate的含义:

上述变化表明主要关注AxCACHE[3:2]是否等于00,如果是则不需要管cache的内容,反之就必须查看cache的内容!

 具体信号描述:

对应的编码格式与Cache行为

7.3 访问许可

信号编码如下

8. 交易标识符

本章描述了实现乱序交易完成的机制,以及发送多个outstanding地址的行为。 

8.1 ID信号

8.2 读数据排序

8.3 写数据排序

8.4 使用交易ID的互连Interconnect

9. AXI顺序模型

交易分为设备类型和普通类型

次序模型后面看不懂了...待补充

10. 独占访问Exclusive access

10.1 访问流程 

读->不允许其他主机写->写

10.2 主机层面

10.2 从机层面

与exclusive access对应的还有一种访问方式locked access,AXI4不支持该访问方式,因此本文省去。

AXI4原子访问编码方式

结语

对于AXI4协议就先写到这儿,更多的理解需要结合实际项目工程,下一篇AMAB的重点将放在ACE中,想要学习一下ACE涉及缓存一致性的问题。

posted @ 2022-07-23 22:17  月光小猪(已长膘)  阅读(1736)  评论(0编辑  收藏  举报