AXI总线是一种基于burst的传输总线,适合用在high-bandwidth和low-latency的场景,大致分为5个通道:
read address, read data, write address, write data, write response。
支持:
1)unaligned data transfer,包括SIZE的对齐和Wrap Burst的对齐;
2)Burst-based transactions,只有首地址issued;(burst首地址之后的地址,slave来产生)
3)能够进行multiple outstanding address的发送;(outstanding FIFO与reorder FIFO不一样)
4)能够以out-of-order的方式,完成transaction;(应该outstanding的FIFO大于reorder的FIFO depth)
write data channel是一种从master到slave的传输,在一个写操作中,返回一个整体的response。
read data channel是一种从slave到master的传输,在一个读操作中,response与read data同一通道,分别为transfer返回response
AXI中的每个channel包含两个handshake signal,source提供VALID信号,destination提供READY信号。
写读分别会有source和destination发出last信号,来表示最后一个transfer。
AXI中的interconnect由一系列的master和slave接口来组成,一般有三种topologies:
shared address and data buses;
shared address buses and multiple data buses;
multilayer with multiple address and data buses;
由于很多系统,对于地址的带宽一般都比数据带宽小很多,所以应用最多的还是shared address buses and multiple data buses。
Interconnect中的Register slices,两个作用:trade-off between cycles of latency and maximum frequency of operaton。
每个register slice的插入都会增加一个cycle 的latency。
isolate a longer path to less performance critical。
一个write burst传输:
AW通道在下一个clock cycle被采样,W通道然后传输data,R通道最后传输resp。
没有component可以提前结束一个burst,在resp产生error时,也必须将数据写完(可以加strb,控制写数据)或读完然后将数据丢掉。
这种情况在访问FIFO时,会影响之后的数据访问,所以这时,要求master发出准确的transfer。
读写地址中的信号:AXLEN:burst传输的长度,transfer的个数。计算方式AXLEN + 1。
wrap类型的burst只能是2,4,8,16。对于AXI3,incr类型的burst从1-16;对于AXI4,从1-256。
AXSIZE:每一个transfer中的byte个数。3bit,计算方式2的幂次方,最多128个byte,1024bit。
如果AXI BUS比AXSIZE大,应该由interface来决定有效的byte lanes。写操作strb信号,读操作无操作。
AXBURST:表示burst的type。
fixed burst:每次的address相同,可以用在loading/emptying FIFO。
INCR burst:address依次增加,以SIZE的byte数为单位。可以用在正常的sequential memory.
WRAP burst:最大地址称为wrap boundary,与AXSIZE*AXLEN相对齐。循环读写此区间内的数据。可
以进行cache line的访问。length必须是2的幂数。初始地址必须是与size对齐的,到了最大地址之后,会wrap会小的地址。
AXLOCK:AXI3中包含exclusive transaction和lock transaction,AXI4中只包含exclusive transaction。
详见之前博客:http://www.cnblogs.com/-9-8/p/4654294.html
AXCACHE:在AXI3中,4bit数据分别是buffer,cache,read allocate, write allocate。
bufferable多用在write操作中,表示可以由一个中间节点来返回response信号。
cacheable在读操作中,表示可以prefetch一些数据,在写操作中,表示可以将不同的write merged together。
RA针对,读操作。WA针对,写操作。详见之前博客:http://www.cnblogs.com/-9-8/p/4655243.html
只有在cacheable有效的情况下,这两个bit才有效。
在AXI4中,cache bit改名为modefiable,RA,WA的概念被更新,将不用的哪一个allocate bit改为other allocate。
AXPROT:3bit数据分别表示,privilage/secure/instruction。在amba总线中与ARM core的状态联系在一起。
AXQOS:AXI4中的信号,4bit的quality,用在每个读写transaction的channel中,用作priority indicator,越大的值,表示越高的
优先级,默认值是4’b0000表示接口不实现QoS。master侧必须根据scenario来产生具体的QoS值,而slave根据QoS的值
来决定不同transaction的值。如用在DDR Controller中,决定transaction的优先级来转换为DDR的读写次序。
AXREGION:AXI4中的信号,4bit可以表示16个region。主要作用是简化slave中的address decode。由interconnect在做address
decode时产生。否则使用默认值。同样必须在4k范围内。
AXUSER:AXI4中的信号,arm不推荐使用。存在于五个通道中。
RRESP/BRESP:表示四种错误,OKAY/EXOKAY/SLVERR/DECERR。
EXOKAY,用在exclusive的访问,
SLVERR,表示trans已经经过interconnect,到达slv,但是slv返回error。
比如,对read-only区域的写,lowe-power状态下的访问,不支持的size,burst等。
DECERR,表示interconnect的route出错,被导向interconnect内部的一个default slave。
由于axi的out-of-order特性,晚的transfer的resp可能会更早的返回,早的transfer的resp返回的比较晚,master需要可以
处理这样的情况的。
读写数据通道:WLAST/RLAST:表示一个transaction中的最后一个transfer。
WSTRB:只存在于WDATA channel,选取有效的beats。
Lower-power signals:CSYSREQ/CSYSACK:两个与clock controller的handshake signals,来离开和进入lower_power state。
针对带有power-down/up的peripheral。
CACTIVE:表示(不)需要clock,也可以用在没有power-down/up的外设,与clock controller单端通信。
三个信号也可以用在一个power domain中。power-down/up的外设需要这三个信号,而没有power-down/up的外设只需要
一个信号。
AXI中的reset,reset信号可以在assert时,async,但是在deassert时,必须sync与ACLK。
master必须将AWVALID,ARVALID,WVALID拉低。
slave必须将RVALID,BVALID拉低。
AXI中的handshake signal,所有的通道。
source不允许等READY信号来触发VALID信号,而且一旦VALID信号触发就必须等到READY信号有效。
ready信号可以在valid信号无效时,有toggle的变动。
destination允许等到VALID信号有效,而触发READY。
一般的READY信号,有两种产生方式:1)等VALID有效后,READY信号有效。2)default READY信号有有效。
ARM官方的建议,AWREADY/WREADY/BREADY/ARREADY/RREADY都default为1,这样可以让传输更快的传输,但是slave端必须准备好。
在read data channel中,RVALID必须等到ARVALID和ARREADY信号都assert,RVALID才能assert。
R通道必须在AR通道完成之后,才开始。
在write data channel中,BVALID必须等到WVALID和WREADY信号都assert,BVALID才能assert(AXI3)。
b通道必须在aw通道完成之后,才开始,但是在axi3中aw和w通道之间的关系,是没有约束的。
AWREADY的assert可以等到AWVALID和WVALID信号有效后。WVALID的assert不可以等到AWREADY信号有效。
在write data channel中,BVALID必须等到AWVALID和AWREADY,WVALID和WREADY信号都assert,BVALID才能assert(AXI4)。
主要是因为AXI4中取消了wid,w通道的顺序与aw通道的顺序是相同的。
在AXI3中,由于AW通道和w通道完全没有关联,所以aw和w的传输顺序是任意的,aw可以在w之后,aw也可以与w同一拍。
但是AXi4中,由于wid的取消,w通道只能紧接着aw通道,就不存在data ahead of address的传输。
(在axi3中,只要aw通道插入的RS比w通道多一些,就可能出现data ahead of address)
AXI中的slave可以归结为两大类:Memory slave,一般要求handle all transaction type。
Peripheral slave,只要求work for a defined method of access。
Transaction identifiers:一般来说interconnect都会在ARID,AWID,WID(AXI4已删除)中增减一些addition bits。
interconnect在送来的transaction中增加addition bits(AWID/WID/ARID)来表示各个master port。因为各个master port可能会有ID冲突。
interconnect在slave发送过来的transaction中减少addition bits(RID/BID),来发送给master。
这样,slave中的ID号总是比master中的ID号,多几位。
对于只支持single order的interface,可以将ID的output,tie掉。
AXI中的order model: 同一ID的transaction必须是ordered,不同的ID的transaction order no restrict。
同一ID,slave端必须按接收到的address顺序来传输。
outstanding address是指:master可以不等该transaction结束,就发送下一个transaction的address。
complete transaction out of order是指:transaction之间的完成顺序与issue的order可以不同。
但是同一个burst中的transfer必须是按顺序的。
对于ARID,同一个master返回的同一个ID的transaction必须是按address的顺序来发送的。
在interconnect中,同一ID的transaction必须按master issue address的order来返回。
对于AWID和ARID,协议中没有限制,如果master要求必须是先读后写,master端必须保证。
简单的master可以选择,transaction按顺序来处理,一次一个transaction,不支持outstanding。
read data reordering depth与slave中可以pending的address的个数相同。(也叫interleave depth)
按顺序处理transaction的slave,等于read data reordering depth为1。
Writing data ordering:如果slave不支持interleave的write,master在发送write data的时候,与address的顺序必须是一致的。
同样interconnect在处理的过程中,也必须保证data的顺序与address的顺序也是一致的。(与WID号无关)
interleave的操作只能用在不同ID号的burst中。
interleave depth与slave中支持的pending address个数相同。
AXI中的interleave操作是指burst之间是有交叠的,interleave的深度,表示可以交叠的个数。
但是这个特性,会很大程度的增加IP的设计复杂度,(自己设计的master一般不会有这个feature,但是arm本身的core是可能有的,
一般情况下,对大多数的master,interleave write不是很必要,所以master可以以address的order来发送data,
只有当master从不同的多个source,像interconnect写数据时,才需要进行interleave操作。
读写之间的interaction:协议中没有规定读写之间的关系,所以必须由master保证一个结束之后,才发送下一个。
对于peripheral device,master保证transaction必须按他们issued order来到达peripheral。一个接一个,不进行outstanding。
对于memory device,master,需要有addr check保证如果有same/overlapping address,
transaction也必须一个个发送,不能outstanding。
对于unaligned transfer,master可以提供一个lower-address,unaligned address,通过byte lanes strobes信号来signal unaligned address。
或者也可以传输aligned transfer。
先传输低地址的非burst transfer,后按aligning的burst传输:(白色表示传输数据的地址),此时unaligned addr会占用一个transfer/beat。
对于narrow transfers,每个beat的byte lanes是不同的,针对burst,每次增加的地址,由size计算得到。
例如一个burst length=4的read,起始地址为xx111,arsize=64bit,bus中的width=128bit.
则首先master发出一个起始地址为7的,transfer,此时从slave拿到的数来自[63:56];
master发出下一个起始地址为0的,transfer,此时从slave拿到的数来自[31:0];
master发出下一个起始地址为8的,transfer,此时从slave拿到的数来自[63:32];
master发出下一个起始地址为0的,transfer,此时从slave拿到的数来自[31:0];
至此四个length的burst传输结束。
axi中的数据,是不区分大小端的,直接将memory中的低位数据,放在data bus的低位。byte-invariant
实际数据的大小端,需要由slave来自己调整。
对于一个burst传输,不能超过4K的地址空间,主要是为了防止burst横跨两个slave。
通过burst,横穿两个IP,会导致第二个IP的地址出错,从而数据出错,所以必须有这样的限制机制。
因为memory page size的一般就是4K,所以这里设置为4K Byte。
AXI4中取消了W通道的id号信号,w通道的次序保证与aw通道的次序相同。
关于bufferable和cacheable:cacheable表示可不可以直接去cache中寻找数据以及cache miss之后的操作,如allocated等。
bufferable主要考虑write操作中,response返回的执行者是不是最终的slave发出的。
关于valid和ready信号,数据输出者,发出valid信号,数据接收者,发出ready信号。
eg:arm读数据,rvalid由matrix提供,ready由arm core提供。
AXI中的5组信号,可以是master---interconnect,可以是interconnect----slave,也可以是master-slave。