在介绍AXI 总线前,我们先说下总线、接口和协议在计算机硬件中的具体定义
- 总线(Bus):
- 在计算机体系结构中,总线指代连接多个设备的物理介质,它们连接不同的硬件组件,允许它们之间传输数据和信号。总线分为数据总线(传输数据)、地址总线(传输内存地址)、控制总线(传输控制信号)等,如以太网总线。
- 接口(Interface):
- 在计算机硬件中,接口是硬件组件之间的连接点,允许它们交换数据和信号。如USB接口允许外部设备与计算机连接。
- 协议(Protocol):
- 协议是一组规则和标准,用于定义不同设备或系统之间如何通信。协议规定了数据如何被格式化、传输和解析。在计算机网络中,协议定义了数据包的格式、错误检测和纠正机制、数据传输的顺序等。如TCP/IP协议是互联网通信的基础。
AXI协议概述
AXI4总线协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。AXI协议定位于高性能、高频率的系统级设计,非常适合于高速亚深微米集成电路的互联,能够满足超高性能和复杂的片上系统(SoC)设计的需求。AXI4总线协议规定的数据传输方式是猝发式的。它的地址/控制和数据相位是分离的,支持不对齐的数据传输。在突发传输中,使用首字节选通方式,只需要首地址,在独立的读写数据通道,采用独立的地址、控制和数据周期进行数据传输,支持非对齐方式的数据传输,能够发出多个未解析的地址,从而完成无序的数据传输交易,并更加容易并行时序收敛。
AXI 技术丰富了现有的AMBA 标准内容,常用的AXI总线有:AXI4、 AXI_Lite、AXI_Stream。
AXI4:主要面向高性能地址映射通信的需求,允许最大256轮的数据突发传输;
AXI4-Lite:是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元;
AXI4-Stream:面向高速流数据传输,去掉了地址项,允许无限制的数据突发传输规模。
AXI4总线分为主、从两端,两者间可以连续的进行通信。点到点的总线结构是AXI总线的核心特性。下图为AXI总线连接基本示意图:
除此之外,AXI总线特性如下:
- 地址/控制操作与数据操作相位分离。
- Byte Strobe信号支持非对齐传输。
- 每次突发传输只需要发送传输的首地址。
- 分离的读、写通道支持低成本DMA。
- 支持Outstanding地址发送功能。
- 支持乱序传输。
- 方便集成寄存器Stage以满足时序要求。
AXI协议构架
-
- AXI的基本传输模式为突发传输。
- 五个数据通道(Channel),相当于独立的五条总线。
- 每条通道都具有固定的方向性。
- 通道以异步方式进行传输,包括了独立的双向握手信号(Valid和Ready)。
- 信源通过Valid信号指示数据或控制信息在该通道有效,信宿通过Ready信号指示该数据已经被获取。
- 读操作包括两个通道-AR通道和R通道。
- 写操作包括三个通道-AW通道、W通道和B通道。
AXI总线各通道示意图如下:
-
- 每次传输的地址及控制信息通过地址通道(AR、AW)传输,用以指示该次传输的数据的属性。
- Master通过写数据通道(W)将数据传输给Slave,Slave通过读数据通道(R)将数据传输给Master。
- 写操作中,AXI提供一个额外的响应通道,该通道和写数据通道方向相反,Slave通过该通道通知Master该次写操作是否正确完成。
- 读、写数据通道(R、W)通过Last信号指示当前传输中的最后一个有效数据。
- 读写操作拥有独立的地址通道,用以传输每次传输的地址和控制信号,通道特性包括:1-16的定长Burst传输;8-1024 bits的传输位宽;卷绕、递增或FIFO传输模式;原子操作(包括排他性传输或Lock传输);系统级Cache和Buffer控制;安全及特权模式控制。
- 读数据通道用以传输读取的数据以及读应答信号给Master,通道特性包括:8/16/32/64/128/256/512/1024的可配置数据位宽;读应答信号指示每拍数据传输完成状况。
- 写数据通道用以传输写数据给Slave,通道特性包括: 8/16/32/64/128/256/512/1024的可配置数据位宽;Strobe信号指示数据通道中有效Byte位。
- 写应答通道提供给Slave一个对写传输进行应答的通道,通道特性包括:所有写传输都用该通道传递写完成信息;该通道的应答信息是基于每次Burst进行的而不是每拍数据传输进行。
AXI协议中各通道信号
AXI总线信号按功能通道可划分为:Globe Signals、AW Signals、AR Signals、W Signals、R Signals、B Signals、Miscellaneous Signals。各部分所包含的具体信号如下列表所示:
表1 AXI总线信号
Globe Signals:
Signal | Source |
ACLK | System |
ARESETn | System |
AW Signals:
Signal | Source |
AWID[31:0] | Master |
AWADDR[63:0] | Master |
AWLEN[3:0] | Master |
AWSIZE[2:0] | Master |
AWBURST[1:0] | Master |
AWLOCK | Master |
AWCACHE[3:0] | Master |
AWPROT | Master |
AWVALID | Master |
AWREADY | Slave |
AR Signals:
Signal | Source |
ARID[31:0] | Master |
ARADDR[63:0] | Master |
ARLEN[3:0] | Master |
ARSIZE[2:0] | Master |
ARBURST[1:0] | Master |
ARLOCK | Master |
ARCACHE[3:0] | Master |
ARPROT | Master |
ARVALID | Master |
ARREADY | Slave |
W Signals:
Signal | Source |
WID[31:0] | Master |
WDATA[1023:0] | Master |
WSTRB[127:0] | Master |
WLAST | Master |
WVALID | Master |
WREADY | Slave |
R Signals:
Signal | Source |
RID[31:0] | Slave |
RDATA[63:0] | Slave |
RRESP[1:0] | Slave |
RLAST | Slave |
RVALID | Slave |
RREADY | Master |
B Signals:
Signal | Source |
BID[31:0] | Slave |
BRESP[1:0] | Slave |
BVALID | Slave |
BREADY | Slave |
Miscellaneous Signals:
Signal | Source |
CSYSREQ | System |
CSYSACK | Slave/Master |
CACTIVE | Slave/Master |
通道握手及其各通道之间的相互关系
AXI中利用通道握手机制来完成总线的使用,握手通道特性如下:
- 信源通过置位Valid信号指示其发出的信息有效,信宿则通过置位Ready信号指示其可以接收信源发出的数据。
- 一次正确传输只在Valid和Ready都有效的时钟上升沿发生。
- AXI协议的通道是具有方向性。每一条通道Valid信号由信源控制,Ready信号由信宿控制,且信宿只控制Ready信号。
- Valid信号和Ready信号默认状态配置为低电平或高电平均为合法。
- 五条通道的握手模式完全相同,使用信号Valid与Ready的握手完成信息的交互。这种双向的控制机制可以使Master和Slave都能够控制传输速率。
- 对于每一个AXI接口,Ready信号由当前Slave产生,与下一级的Slave无关;Valid信号由当前Master产生,与上一级Master无关。
AXI总线中存在五条通道,各通道之间的信息是各自独立的,但是各通道之间依然遵循一定的依赖关系,其中必须遵循的有两条:
1、每次读操作,读数据通道必须在相应的读地址通道之后激活;
2、每次写应答通道必须在写数据通道的最后一个数据之后激活。
读地址通道和读数据通道的Valid和Ready信号先后顺序没有要求。ARM推荐将Ready信号先于Valid信号置位(即Ready信号默认值为高电平)。如下图所示的AXI读操作中各相关通道信号之间的关系(单箭头表示没有先后顺序要求,双箭头表示必须遵循的先后顺序):
除以上所说,还有几方面需要注意:
- 通道中的Ready和Valid信号是基于当前通道的,和下一级或上一级通道无关。
- 一次读或写操作的应答信息是基于最初的信源和最后的信宿的(也可能Cache或Buffer),该信息可能跨越多级的通道。
- 读操作和写操作在AXI协议上的Semaphore操作上有相关。
Burst Feature、Atomic Feature、Ordering(流水线操作)
Burst Feature:
AXI是基于Burst传输的协议(AXI不支持不定长Burst),且Master与Slave都不可以中断Burst传输,其传输的属性及首地址都通过地址通道发送,其中Burst操作不可以跨越4KB边界(协议中并没有给出怎样处理超过4KB边界操作的方法,如果使用拆分,则可能对Interconnect时序造成影响,为避免此情况,最好由Master保证这一边界界限。)
AXI基于Burst传输的基本读写时序Read Burst如下:
AXI基于Burst传输的基本读写时序Write Burst如下:
Burst传输长度由ARLEN或AWLEN控制,其长度为AR(W)LEN+1,Burst传输位宽通过AWSIZE或ARSIZE控制,最大位宽1024bits。
Burst传输模式包括FIX、INCR或WRAP,其中WRAP模式时Burst长度必须为2、4、8、或16,Burst传输模式编码如下图所示:
Burst操作通过读数据通道和写应答通道来实现操作的Response,其中读数据通道的Response对应于读操作的每一个数,写应答通道的Response对应于一次写Burst。应答Response的类型如下,AXI读写应答信号编码:
Atomic Feature:
Burst传输通过AWLOCK或ARLOCK信号传输原子操作,支持的原子操作包括排他式(Exclusive)传输及Lock传输,原子操作控制信号编码:
排他式(Exclusive)传输允许Semaphore操作在不锁定总线的情况下完成,此过程包括Master对某个地址的一次读和一次写,如果在Master的读操作和写操作之间没有其他Master访问该地址空间,则操作正确完成。排他式(Exclusive)传输的一个优势在于——进行Semaphore操作的同时不对总线延迟和总线带宽带来任何影响。
需要注意的是,有排他式传输进行时,如果Slave不支持排他式传输或者传输被其他Master插入,则Slave返回OKAY信号,而不是EXOKAY;有排他式传输操作时,Slave需要一个Monitor记录读操作的ID及地址,该Monitor在新一次排他式读操作或其他地址的排他式读操作发送时被更新,排他式操作正确完成时被复位。除此之外,排他式传输在诸多方面还有一些限制:
- 读、写操作的长度和位宽必须相同;
- 读、写地址必须相同且对齐;
- ARID和AWID必须相同;
- 读、写控制信号必须相同;
- 操作的Byte总宽度必须为2的指数倍;
- 最大Byte宽度为128 bytes。
- AR(W)CACHE信号必须符合原子操作的规范。
Lock传输同样允许Semaphore操作锁定Slave,操作由Lock操作开始,由Unlock操作结束,在此过程中,Interconnect禁止其他Master访问Slave直到本次传输结束,也正因为此,Lock传输对Interconnect的性能有较大影响,Lock传输只推荐应用在支持Legacy Devices方面。在Lock传输过程中,Master必须遵循以下几方面要素:
1)、Lock操作发起之前没有其他等待应答的Outstanding操作;
2)、发出最后的Unlock操作前的Lock操作都必须完成;
3)、最后的Unlock操作完成前不能有下一次操作发出。
4)、Lock操作中ID号必须相同。Slave需要保证Lock操作符合Cacheable、Bufferable操作规范。
在进行Lock操作时,ARM推荐:
1)、不跨越4KB边界;
2)、一次Lock操作只包含两次传输。
Ordering(流水线操作):
在诸如AHB总线等多数协议里面,数据的传送是以Ordering的形式进行的,即数据的传送与对应地址是按照主设备发送顺序进行的,当前操作完成后才能进行下一次操作。较之这些协议,AXI协议增加了一些新的内容,支持Out-of-Order传输以及多地址Outstanding操作(即当前传输未完成时可发起下一次或下几次的传输),这些协议特性决定了其有利于系统性能的提高,特别是对存储器的访问。需要注意的是,简单的Master、Slave在大多数条件下,Out-of-Order、Outstanding操作并没有太多需求,此时可以按顺序传送数据。
对于Master、Slave而言,AXI协议中都存在Outstanding的深度(大于等于1),表示能够同时支持多少个Active操作。理论上,AXI协议支持无限深度的Outstanding结构,通常深度为2或3时有较好的效率。当Master不支持Outstanding时(即Outstanding的深度为1),只有在当前操作完成时才能够接收下一次数据(置位下一次AW(R)READY)。在AXI协议中,支持Outstanding则意味着可能支持Out-of-Order传输,但并不一定支持;相反,如果支持Out-of-Order则意味着一定支持Outstanding操作,且Out-of-Order深度小于或等于Outstanding的深度。AXI协议中的Out-of-Order存在三种情况:读数据乱序、写数据间插、读和写操作交互。
AXI通过ID号进行Ordering控制,在AXI协议里总共定义了5个ID,分别为:AWID、ARID、WID、RID、BID,它们的作用分别为:
Master的ID号与Slave的ID号位宽不同,Interconnect会根据Master数目对Slave增宽ID号。ARM推荐Master的ID位宽为4bits,Slave的ID位宽为8bits,即Interconnect增加的位宽为4bits。
我们可以通过对各个ID及其相关协议信号的控制来完成协议里面规定的Outstanding、Out-of-Order的操作。在读写操作中,Interconnect记录的时Master的ID号(同时记录隐藏的Slave ID),同一个ID号的传输必须以Master的方式进行,不同ID号的传输允许乱序。
在读操作中,数据乱序是指不同的ID号的读传输请求允许读数据以乱序返回,乱序包括传输的乱序与读数据的间插,读数据排序遵循以下规则:
- 对同一个ID号的读传输的排序,由Interconnect进行保证。Interconnect将同一ID的Active传输记录在Table中,只允许Slave返回最靠前的传输,Stall靠后的传输。
- Interconnect的读地址通道Table是基于ID记录的。
- 当然,Interconnect的Table大小是有限的,因此Interconnect可能无法保证Master的全部Outstanding深度。
在写操作中ID,因为AXI协议的不完备,比如:读写可能死锁,支持写间插的Master可能死锁等,写数据的乱序需要某些特定的规则来保证。写数据乱序包括传输乱序和写数据的间插,写数据排序遵循以下规则:
- 写操作时,AXI协议不支持传输乱序,即对一个Slave,写数据的首数据顺序必须和写地址的顺序保持一致,无论ID号怎样。
- 对于支持Outstanding但是不支持写间插(Interleave)的Slave,必须预先通知Master和Interconnect,由Master和Interconnect来保证无论传输ID号是否相同,Slave收到的写数据顺序和其收到的写地址的顺序必须相同。Master必须保证即使其ID号不同,发出的写数据也是顺序的;而Interconnect则必须附加逻辑Table进行判定。
- Interconnect的写地址通道Table是基于Slave记录的。
- 对于支持写间插的Slave,Interconnect必须知道其间插深度,然后在深度限制下允许写入Slave的数据被间插,该间插可能是Master本身就发出的间插数据,也可能是多个写Master相应速率不同进行的间插。写间插可以提高系统性能,减少总线的Stall。
大多数Slave不支持写间插,即间插深度为1。但是为防止系统死锁,Slave最好拥有大于1的间插深度,因为Slave是不可能为了改变数据顺序而Stall接口的。
附加控制信号
Burst传输通过AWCACHE或ARCACHE信号传输系统Cache/Buffer信息,包括传输是否为Bufferable、Cacheable、Read Allocate或Write Allocate。
AR(W)CACHE[3:0]有效位(高电平)及对应属性如下表:
表2 AR(W)CACHE[3:0]有效位及对应属性
AR(W)CACHE[3:0]有效位 | 对应属性 |
AR(W)CACHE[0] | Bufferable |
AR(W)CACHE[1] | Cacheable |
AR(W)CACHE[2] | Read Allocate |
AR(W)CACHE[3] | Write Allocate |
Burst传输通过AWPROT或ARPROT信号传输系统Secure/Privileged信息,AW(R)PROT[0]指示传输是否为Privileged, AW(R)PROT[1]指示传输是否为Secure,AW(R)PROT[2]指示传输是否为指令操作。
非对齐操作、低功耗接口
AXI支持两种非对齐操作:一是写Strobe方式,另一种是地址非对称方式。Strobe信号指示写数据中有效的Byte位置,置1表示该位写数据有效。地址非对称方式遵循协议规定:比如,一个32位数据(4Byte),如果开始地址位为0x1002则表示是非对齐方式。(Typically, each data transfer is aligned to the size of the transfer.)
低功耗接口位AXI扩展协议,支持Master或Slave模块以握手的方式和时钟控制模块交互,达到控制时钟模块时钟降低功耗的目的。接口时序如下图所示:
AXI Bridge
在具体的项目开发中总会遇到不同总线之间转接的问题,比如AXI2AHB、AXI2APB等,典型的AXI总线接口应用如下图:
林林总总的总线转接大致可以分为三个方面:
1、高性能总线到低性能总线的桥,包括AXI2AHB、AXI2APB、AXI2Magenta等。
2、低性能总线到高性能总线的桥,包括AHB2AXI、APB2AXI、Magenta2AXI等。
3、同等性能总线的桥,包括AXI2OCP、OCP2AXI等。
高性能到低性能总线的桥设计最为复杂,而对双方的性能都会有影响,比如:AXI2AHB只支持深度为1的Outstanding,除此还有:
-
- AHB的读或写操作(NONSEQ)都是在AVALID有效后延迟一定周期产生。
- 对于AXI Master的WVALID和RREADY信号延迟,可通过在Burst中插入BUSY处理。
- 附加一定逻辑支持排他式(Exclusive)操作。
- WRAP2和FIFO的Burst拆成Single处理。
低性能到高性能总线桥以及同等性能总线的桥设计较为简单,对双方面的影响较小。
AXI vs AHB
随着SoC设计复杂性的增加和CPU处理能力的提升,总线结构会成为系统性能的瓶颈。在多处理器SoC设计中,这种瓶颈现象更加明显。
随着下一代高性能SoC设计的需要,比如多处理器核、多重存储器结构、DMA控制器等,AMBA需要新一代灵活性更强的总线结构,这就是AMBA 3.0 AXI总线。
表3 AXI与AHB的性能对比
总线名称 | AMBA 3 AXI | AMBA 2 AHB |
数据线宽度(位) | 8,16,32,64,128,256,512,1024 | 32, 64, 128, 256 |
地址线宽度(位) | 32 | 32 |
体系结构 | 多主/从设备 握手机制 | 多主/从设备 仲裁机制 |
数据线协议 | 支持多级流水/分裂传输 支持猝发传输 支持乱序访问 字节/半字/字 | 支持一级流水/分裂传输 支持猝发传输 字节/半字/字 |
数据对齐方式 | 大端/小端对齐 支持非对齐操作 | 大端/小端对齐 不支持非对齐操作 |
时序 | 同步 | 同步 |
互接 | 多路 | 多路 |
支持互接 | 不支持三态总线 | 不支持三态总线 |
AXI能够使SoC以更小的面积、更低的功耗,获得更加优异的性能。AXI获得如此优异性能的一个主要原因,就是它的单向通道体系结构。单向通道体系结构使得片上的信息流只以单方向传输,减少了延时。
AXI总线是一种多通道传输总线,将地址、读数据、写数据、握手信号在不同的通道中发送,不同的访问之间顺序可以打乱,用BUSID来表示各个访问的归属。主设备在没有得到返回数据的情况下可发出多个读写操作。读回的数据顺序可以被打乱,同时还支持非对齐数据访问。
AXI总线还定义了在进出低功耗节电模式前后的握手协议。规定如何通知进入低功耗模式,何时关断时钟,何时开启时钟,如何退出低功耗模式。这使得所有IP在进行功耗控制的设计时,有据可依,容易集成在统一的系统中。
新的高性能AXI协议技术性能新的特点主要包括:
- 单向通道体系结构。信息流只以单方向传输,简化时钟域间的桥接,减少门数量。当信号经过复杂的片上系统时,减少延时。
- 支持多项数据交换。通过并行执行猝发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗。
- 独立的地址和数据通道。地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低。
接下来一个章节将会继续基于FPGA 进行AXI 接口开发。