AMBA基础知识3:AMBA-AXI总线协议详解

来自:http://blog.sina.com.cn/s/blog_13f7886010102x2iz.html


AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。它的地址/控制和数据相位是分离的,支持不对齐的数据传输,同时在突发传输中,只需要首地址,同时分离的读写数据通道、并支持Outstanding传输访问和乱序访问,并更加容易进行时序收敛。

AXI的特点

单向通道体系结构。信息流只以单方向传输,简化时钟域间的桥接,减少门数量。当信号经过复杂的片上系统时,减少延时。

支持多项数据交换。通过并行执行猝发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗。

独立的地址和数据通道。地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低。

增强的灵活性。AXI技术拥有对称的主从接口,无论在点对点或在多层系统中,都能十分方便地使用AXI技术。

AXI总线还定义了在进出低功耗节电模式前后的握手协议。规定如何通知进入低功耗模式,何时关断时钟,何时开启时钟,如何退出低功耗模式。这使得所有IP在进行功耗控制的设计时,有据可依,容易集成在统一的系统中。​

总之,AXI 能够使SoC 以更小的面积、更低的功耗,获得更加优异的性能。AXI获得如此优异性能的一个主要原因,就是它的单向通道体系结构。单向通道体系结构使得片上的信息流只以单方向传输,减少了延时。   

AXI的工作模式

A. 握手机制

扫描二维码关注公众号,回复: 1051658 查看本文章

AXI所采用的是一种READY,VALID握手通信机制,即主从模块进行数据通信前,新根据操作对各所用到的数据、地址通道进行握手。主要操作包括传输发送者A等到传输接受者B的READY信号后,A将数据与VALID信号同时发送给B。根据READY和VALID拉高的先后顺序,可分为如下3种情况:

VALID before READY handshake
READY before VALID handshake
VALID with READY handshake

​每个channel内的valid和ready之间没有严格的先后顺序,但是channel间的valid和ready信号有依赖关系。对于读操作,spec要求读data必须出现在读addr之后,因此读操作的两个channel之间存在如下的依赖关系,即必须等到ARVALID的ARREADY同时为High后,RVALID才能拉高。

  Read transaction handshake dependencies

对于写操作,addr和data两个channel之间不存在依赖关系,但是只能等最后一次transfer结束后,才能拉高BVALID。从下图中看不出AWVLAID, AWREAY与BVALID之间的关系,但是,隐含条件是slave只有接收到addr和data后,才能做出响应,因此AWAVLID, AWREADY为High,且最后一次transfer结束后才能拉高BVALID.

  Write transaction handshake dependencies

B. axi总线的五个通道:

  • 读地址通道,包含ARVALID, ARADDR, ARREADY信号;
  • 写地址通道,包含AWVALID,AWADDR, AWREADY信号;
  • 读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;
  • 写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号;
  • 写应答通道,包含BVALID, BRESP, BREADY信号;
  • 另外,还有两个global signal,ACLK,ARESETN信号;

其中ACLK为axi总线时钟,仅上升沿有效,ARESETN是axi总线复位信号,低电平有效,异步复位同步释放;所有master和slave共用ACLK和ARESETn。

READY与VALID是对应的通道握手信号;WSTRB信号为1的bit对应WDATA有效数据字节,WSTRB宽度是32bit/8=4bit;BRESP与RRESP分别为写回应信号,读回应信号,宽度都为2bit,‘h0代表成功,其他为错误。

a. 读操作:

顺序为主与从进行读地址通道握手并传输地址内容,然后在读数据通道握手并传输所读内容以及读取操作的回应。对于读操作,slave必须先知道master想要读取的地址,因此,slave必须先接收到command后再回数据。normal的操作如图所示:

Channel architecture of reads
Read burst

​b. 写操作:

顺序为主与从进行写地址通道握手并传输地址内容,然后在写数据通道握手并传输所读内容,最后再写回应通道握手,并传输写回应数据。对于写操作,command和数据都是master发给slave的,因此command和data没有顺序,可以先发command,再发data,也可以先发data,在发送data过程中发送command。normal的操作如图所示:

  Channel architecture of writes
Write burst

Atomic访问​

在AXI中,atomic access分为exclusive和lock两种操作。

首先,Lock在amba2.0中就有涉及,意思是,某个master 可以通过Lock 总线来实现独占。只有当该master完成传输后才释放出总线。master1发出lock的transaction,在其发出unlock操作之前,不允许其它master访问该slave。这样的话,总线的效率会降低。

相比Lock,AXI 中引入了exclusive操作,不需要将bus锁定给某个master。而是通过TAG ID以及slave 返回的response来判断当前的传输是否成功。过程如下: 1)mst 首先向slave的某个地址位置发起一个exclusive读操作。slave中的monitor会纪录下该mst的 ARID和 要访问的地址位置ADDR。 2)过一段时间后,mst向同一地址区域发起一exclusive写操作。slave同样要记录该操作的mst的 AWID 和 要访问的地址位置ADDR。3)如果AWID==ARID && 该地址内容没有改变(没有其他的mst访问过),这个写操作就是成功的。该地址就会更新,同时slv会返回EXOKEY. 否则,slv会返回OKEY. 由此看来,对于exclusive操作,总线其实允许其他mst同时来请求总线。比如,当其他mst要同时通过总线访问其他的slv时,上述3)就不满足,所以总线就不会被锁定。

Ordering model

​AXI的控制和数据通道分离,可以带来很多好处。地址和控制信息相对数据的相位独立,可以先发地址,然后再是数据,这样自然而然的支持显著操作,也就是 outstanding 操作。Master访问slave的时候,可以不等需要的操作完成,就发出下一个操作。这样,可以让slave在控制流的处理上流水起来,达到提速的作 用。同时对于master,也许需要对不同的地址和slave就行访问,所以可以对不同的slave 连续操作。而这样的操作,由于slave 返回数据的先后可能不按照master 发出控制的先后进行,导致出现了乱序操作(out of order )。

先看下ordering model​的几个概念:​

Outstanding

: The ability to issue multiple outstanding addresses means that masters can issuetransaction addresses without waiting for earlier transactions to complete. This featurecan improve system performance because it enables parallel processing of transactions.

​Outstanding

​​发出A11的addr后,在完成D11~D14的transfer之前,发出A21叫做outstanding。

Out-of-order : The ability to complete transactions out of order means that transactions to faster memory regions can complete without waiting for earlier transactions to slower memory regions. This feature can also improve system performance because it reducesthe effect of transaction latency.

Out-of-order

​地址的顺序是A11,A21,A31,而数据顺序则可能是D2?,D3?,D1?,这个过程叫做Out-of-order

Interleaving:  Write data interleaving enables a slave interface to accept interleaved write data withdifferent AWID values. The slave declares a write data interleaving depth that indicatesif the interface can accept interleaved write data from sources with different AWIDvalues.

Interleaving

​D11和D12之间插入D23,叫做interleaving。

简单而言,outsatanding是对地址而言,一次burst还没结束,就可以发送下一相地址。而out-of-order和interleaving则是相对于 transaction,out-of-order说的是发送transaction​和接收的cmd之间的顺序没有关系,如先接到A的cmd,再接到B的cmd,则可以先发B的data,再发A的data;interleaving指的是A的data和B的data可以交错,如A1 B1 A2 B2 B3……

举个例子,从master和slave两个角色分别来看:

对于AXI master,先看写操作。如果分别发出WCMD1和WCMD2两个写命令给两个不同的slave,假设这两个写命令都是四拍的数据分别记为WDATA1_0,WDATA1_1,WDATA1_2,WDATA1_3,以及WDATA2_0,WDATA2_1,WDATA2_2,WDATA2_3。如果master在自己的写数据总线上,依次发出WDATA2_0,WDATA2_1,WDATA2_2,WDATA2_3,WDATA1_0,WDATA1_1,WDATA1_2,WDATA1_3,这就叫写out of order;如果master在自己的写数据总线上,依次发出WDATA2_0,WDATA1_0,WDATA2_1,WDATA1_1,WDATA2_2,WDATA2_3,WDATA1_2,WDATA1_3,这就叫写out of order且interleave;注意,不论是out of order还是interleave,同一个命令对应的四拍数据在内部必须是顺序的,不能乱序。比如,不允许出现WDATA2_1,WDATA1_0,WDATA2_0,WDATA1_1,WDATA2_2,WDATA2_3,WDATA1_2,WDATA1_3这样的。显然,你自己设计master时,如果是写操作,你不会主动发出out of oder和interleave的操作,因为这个明显增加了复杂度且没带来master自己的效率提高。再看master读,同样发出RCMD1和RCMD2两个读命令给不同的slave,由于不同slave的响应速度不同,就可能出现RCMD2对应的读数据先返回到master的情况;再考虑到复杂系统的总线设计,master依次接收到RDATA2_0,RDATA1_0,RDATA1_1,RDATA1_2,RDATA2_1,RDATA2_2,RDATA1_3,RDATA2_3这样的数据是有可能的,这就是读的out of order且interleave。所以,对于master,不建议发出out of order与interleave的写数据,但是必须支持out of order与interleave的读操作!同理,可以分析,对于slave,必须支持out of order与interleave的写操作,不建议返回out of order与interleave的读数据。在一个系统中,interleave会明显增加设计复杂度,其实可以约定master,slave以及连接总线都不要使用interleave,(另外可以配置depth ==1,达到不支持interleaving的目的)这样可以降低复杂度,但out of order是AXI特性,这个功能必须支持。


猜你喜欢

转载自blog.csdn.net/times_poem/article/details/79881716