AXI总线协议
AXI特定名詞
AXI Transaction:the complete set of required operations on the AXI bus form the AXI Transaction.表示傳輸一段數(shù)據(jù)(AXI burst)所需的一整套操作;
AXI Burst:any required payload data is transferred as an AXI Burst.表示AXI待傳數(shù)據(jù);
AXI Beats:a burst can comprise multiple data transfers, or AXI Beats.表示AXI burst的組成,一個Beat就是一個transfer。
關(guān)系:一個Burst指對一個地址上的數(shù)據(jù)進(jìn)行拆分后多次傳輸,傳輸Burst的過程稱為transaction,每次傳輸內(nèi)容稱為一個‘Beat’,傳輸Beat的過程稱為transfer。
AXI組成
AXI4協(xié)議中包含五種信道,通道之間相互獨(dú)立且存在差別,通過通道進(jìn)行通信之前需要使用VALID/READY 進(jìn)行握手,Read和Write根據(jù)Master定義:
讀地址信道(Read Address Channel)
寫地址信道(Write Address Channel)
讀數(shù)據(jù)信道(Read Data Channel)
寫數(shù)據(jù)信道(Write Data Channel)
寫響應(yīng)信道(Write Response Channel)
還有兩種Component
Master component
Slave component
通信由Master發(fā)起,Master可以對Slave進(jìn)行讀數(shù)據(jù)(read)或?qū)懀╳rite)數(shù)據(jù)。每次讀寫操作都需要一個地址,讀地址信道(Read Address Channel)和寫地址信道(Write Address Channel)用于傳輸?shù)刂贰T趯懲陻?shù)據(jù)后,Master需要確認(rèn)Slave有沒有收完數(shù)據(jù),Slave收到完整數(shù)據(jù)后,會通過寫響應(yīng)信道(Write Response Channel)給Master一個反饋(completion),表示寫操作已經(jīng)完成。
VALID/READY 握手機(jī)制
在五個信道通信之前,需要使用VALID/READY進(jìn)行握手,信道通信僅發(fā)生在VALID和READY同時有效的階段[1]:
由數(shù)據(jù)發(fā)送端發(fā)送VALID,表示已經(jīng)將數(shù)據(jù)、地址或控制信息置于寫總線上;
由數(shù)據(jù)接收端發(fā)送READY,表示已經(jīng)準(zhǔn)備好接收發(fā)送端的信息;
當(dāng)VALID和READY同時置高時,在時鐘上升沿到達(dá)后,表示開始數(shù)據(jù)傳輸;完成數(shù)據(jù)傳輸后,兩個信號置低。
信道中的VALID/READY
五個信道的VALID/READY信號表示如下:
A表示Address,W表示W(wǎng)rite,B表示Back(Response),R表示Read;
在握手過程中,還會用到LAST信號。LAST信號存在Write Data Channel和Read Data Channel中,分別表示為WLAST和RLAST,用于標(biāo)記burst的最后一次數(shù)據(jù)傳輸,當(dāng)slave接收到LAST信號后,說明本次數(shù)據(jù)傳輸完成。
雙向流控機(jī)制
VALID/READY 機(jī)制使用雙向流控機(jī)制,指發(fā)送端通過 VALID 置起控制發(fā)送速度的同時,接收端也可以通過將置高READY 與否控制接收速度,反壓發(fā)送方的發(fā)送速度。
握手規(guī)則
信道的握手規(guī)則
VALID信號置高后,在完成本次傳輸之前不能拉低,直到有相應(yīng)的READY被聲明;
READY信號置高后可以在VALID信號置高之前取消;
VALID信號置高與READY信號無關(guān),VALID信號不能由READY信號控制;
在一個burst的最后一次transfer時,必須由LAST信號置高。
握手信號在不同操作下的依賴關(guān)系:
PS:單箭頭表示雙方無先后要求,雙箭頭表示箭頭所指對象應(yīng)遲于箭頭出發(fā)信號發(fā)送。
讀操作握手信號依賴關(guān)系:
讀數(shù)據(jù)通道的握手信號要在讀地址通道后傳輸
讀操作數(shù)據(jù)傳輸圖:
寫操作握手信號依賴關(guān)系:
寫操作時,寫數(shù)據(jù)通道和寫地址通道沒有先后關(guān)系;
寫反饋通道信號必須在寫數(shù)據(jù)通道和寫地址通道握手后進(jìn)行;
WVALID信號與WLAST信號相關(guān);
寫操作數(shù)據(jù)傳輸圖:
信號
全局信號:
ACLK,全局時鐘信號,所有傳輸操作都發(fā)生在上升沿;
ARESETn,全局復(fù)位信號,低電平有效,可以異步復(fù)位,但是必須和ACLK同步釋放。復(fù)位過程中VALID信號都要拉低,其他所有信號可以驅(qū)動為任意值。
復(fù)位過程中,Master必須把ARVILID、AWRVLID和WVALID拉低;Slave必須把RVIALID和BVALID拉低。
寫地址通道信號:
| Signal | Source | Description |
| AWID | Master | 寫地址ID,寫地址 |
| AWADDR | Master | 寫地址,在一次burst transaction中第一個transfer的地址。 |
| AWLEN | Master | burst的長度,一次burst中的transfer的數(shù)量。 |
| AWSIZE | Master | burst中一次transfer的字節(jié)數(shù)。 |
| AWBURST | Master | burst類型和size信息,決定本次burst中trasnfer地址的計(jì)算方式 |
| AWLOCK | Master | lock類型, |
| AWCACHE | Master | 內(nèi)存類型 |
| AWPORT | Master | 保護(hù)類型, |
| AWQOS | Master | QoS |
| AWREGION | Master | 區(qū)域標(biāo)志,能實(shí)現(xiàn)單一物理接口對應(yīng)多個邏輯接口 |
| AWUSER | Master | user信號,在寫地址信號中可選的用戶定義信號,僅在AXI4使用 |
| AWVALID | Master | 寫地址的valid信號,表示寫地址和控制信號可以發(fā)送。 |
| AWREADY | Slave | 寫地址的ready信號,表示slave可以接受一個地址或相關(guān)的控制信號。 |
讀地址通道信號
| Signal | Source | Description |
| ARID | Master | 讀地址ID |
| ARADDR | Master | 讀地址,首地址? |
| ARLEN | Master | burst的長度,一次burst中的transfer的數(shù)量。 |
| ARSISE | Master | burst中一次transfer的字節(jié)數(shù)。 |
| ARBURST | Master | burst類型和size信息,決定本次burst中trasnfer地址的計(jì)算方式 |
| ARLOCK | Master | lock類型 |
| ARCACHE | Master | 內(nèi)存類型,表明一次傳輸如何通過系統(tǒng) |
| ARPROT | Master | 保護(hù)烈性,一次傳輸?shù)陌踩氨?/td> |
| ARQOS | Master | QoS |
| ARREGION | Master | 區(qū)域標(biāo)志 |
| ARVALID | Master | 讀地址VALID信號 |
| ARREADY | Slave | 讀地址READY信號 |
寫數(shù)據(jù)通道信號
| Signal | Source | Description |
| WID | Master | 寫數(shù)據(jù)ID,僅AXI3支持 |
| WDATA | Master | 寫數(shù)據(jù) |
| WSTRB | Master | 標(biāo)記寫數(shù)據(jù)中有效的字節(jié),一位對應(yīng)一個字節(jié) |
| WLAST | Master | 寫LAST信號,在本次burst的最后一次transfer中置高。 |
| WUSER | Master | user信號,在寫數(shù)據(jù)信號中可選的用戶定義信號,僅在AXI4使用 |
| WVALID | Master | 寫數(shù)據(jù)的valid信號,表示寫地址和控制信號可以發(fā)送。 |
| WREADY | Slave | 寫數(shù)據(jù)的ready信號,表示slave可以接受一個地址或相關(guān)的控制信號 |
特點(diǎn):存在一個讀數(shù)據(jù)通道沒有的STROBE信號,用于標(biāo)識寫數(shù)據(jù)中有效的傳輸字節(jié),或者用于讀寫寬度不對稱
讀數(shù)據(jù)通道
| Signal | Source | Description |
| RID | Slave | 讀數(shù)據(jù)ID |
| WDATA | Slave | 讀數(shù)據(jù) |
| RRESP | Slave | 讀回復(fù)信號,表示讀transfer的狀態(tài) |
| RLAST | Slave | 讀LAST信號,在本次burst的最后一次transfer中置高。 |
| RUSER | Slave | user信號,在讀數(shù)據(jù)信號中可選的用戶定義信號,僅在AXI4使用 |
| RVALID | Slave | 寫數(shù)據(jù)的valid信號,表示寫地址和控制信號可以發(fā)送。 |
| RREADY | Master | 寫數(shù)據(jù)的ready信號,表示slave可以接受一個地址或相關(guān)的控制信號 |
特點(diǎn):讀Response信號在讀數(shù)據(jù)通道中由slave發(fā)送,且無strobe信號。
寫回復(fù)通道信號
| Signal | Source | Description |
| BID | Slave | 寫ID |
| BRESP | Slave | 寫回復(fù)信號,表示寫transaction的狀態(tài) |
| BUSER | Slave | user信號,僅AXI4支持 |
| BVALID | Slave | 回復(fù)VALID,表示寫回復(fù)信號可以發(fā)送 |
| BREADY | Master | 回復(fù)READY,表示master可以接受回復(fù) |
低功耗接口信號
| Signal | Source | Description |
| CSYSREQ | 時鐘控制器 | 系統(tǒng)退出低功耗請求,此信號由時鐘控制器向外設(shè)發(fā)送 |
| CSYSACK | 外設(shè) | 退出低功耗狀態(tài)確認(rèn) |
| CACTIVE | 外設(shè) | 外設(shè)請求時鐘有效 |
Burst傳輸
In the AHB protocol every transfer comes with an address value on HADDR. As you already know how the address will change because of what is signalled on HBURST, HTRANS and HSIZE, the HADDR information for all transfers after the start of the burst could be considered unnecessary as the target slave could calculate the addresses for transfers after the start of the burst.
In AXI the aim was to reduce unnecessary bus traffic, so here the master just issues the address for the start of a burst, and that is all that is required on the address channel. The target slave then calculates the address changes for each subsequent transfer in the burst based on what it sampled on AxADDR, AxSIZE, AxBURST and AxLEN.
So for example, if the AXI master signals an INCR burst of 4 transfers, with AxSIZE signalling 32-bit transfers, and AxADDR is 0x4, the slave can then see that the transfers for this burst will be to 0x4, 0x8, 0xC and 0x10.[2]
理解:由于每次傳輸?shù)臄?shù)據(jù)地址變化存在一定規(guī)律,因此AXI傳輸與規(guī)律相關(guān)的參數(shù),而非直接傳輸每次的數(shù)據(jù)地址
AXI協(xié)議是基于burst的,Master只給出transaction的第一個字節(jié)的地址,Slave必須計(jì)算后續(xù)transfer的地址。
通道信號描述
在地址通道中有三個信號控制進(jìn)行控制,包括:
BURST類型有三種,分別為:
| AxBURST[1:0] | Burst Type | Description |
| 0b00 | FIXED | 每個transger都使用相同地址,后續(xù)數(shù)據(jù)不斷寫入起始地址,刷新其實(shí)地址上的數(shù)據(jù) |
| 0b01 | INCR | 后續(xù)地址在前一個地址的基礎(chǔ)上遞增 |
| 0b10 | WRAP | 從起始地址遞增至到達(dá)最高地址,再返回起始地址,重復(fù)上述操作,用于cache的訪問 |
| 0b11 | Reserved |
BURST len:指在一次Burst傳輸中transfer的次數(shù),從0開始,實(shí)際長度為AxLEN+1.
要求:
INCR類型最大支持長度為256,其他類型最大長度為16,所有BURST類型最少為1;
對于長度超過16的INCR BURST,可以轉(zhuǎn)換為較小的BURST,即使transaction attributes指明該transaction時Non-modifiable;
對于WRAP模式,BURST len僅能為2、4、8、16;
一次傳輸中,地址不能跨越一個4KB分區(qū),防止跨越兩個Slave的邊界;
一次transaction不能再未達(dá)到BURST len的時候提前結(jié)束。
BURST size:指在一次transfer中的最大數(shù)據(jù)寬度,burst size不能超過數(shù)據(jù)線本身寬度;當(dāng)數(shù)據(jù)線本身寬度大于BURST size時,將根據(jù)協(xié)議相關(guān)規(guī)定制定數(shù)據(jù)在部分?jǐn)?shù)據(jù)線中傳輸。
AxSIZE由三個字節(jié)表示,數(shù)據(jù)大小為2^AxSIZE[2:0]。
BURST address:
Start_Address:由Master決定,每個burst的第一個transfer的地址
Number_Bytes = burst size
Data_Bus_Bytes:總線寬度/8
Aligned_Address:Start_Address @ Number_Bytes
RRESP[1:0]和BRESP[1:0]
OKAY:Normal access success + Exclusive access failed
EXOKAY: Exclusive access okay
SLVERR: Slave error
FIFO滿或空;
transfer size不支持;
向只讀設(shè)備寫入;
Slave timeout;
access to a disabled or powered-down function
DECERR:Decode error
interconnnect不能成功向Slave access譯碼;
access一個缺省Slave,由缺省Slave回應(yīng)DECERR
在write transaction中,對于整個burst,slave只會回應(yīng)一個BRESP;
在read transavtion中,Slave可以對不同的transfer回應(yīng)不同的RRESP;
AxCACHE
參考文獻(xiàn):
[1]https://www.cnblogs.com/lkiller/p/4773235.html
[2]https://community.arm.com/developer/ip-products/system/f/embedded-forum/10057/burst-based-transactions-on-axi?ReplySortBy=Votes&ReplySortOrder=Descending
[3]https://wenku.baidu.com/view/45491979bf1e650e52ea551810a6f524ccbfcbd5.html?rec_flag=default&sxts=1582552068762
總結(jié)
- 上一篇: iPhone 如何以手写体文字发送短信
- 下一篇: iPhone 12会延期发布吗iPhon