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。