了解完通道握手的依賴關系,我們再看看傳輸事務的結構。首先看傳輸的地址結構。AXI協議是基於突發(burst)傳輸的。所謂突發傳輸,就是在一次事務中,連續地傳輸多個地址相鄰的數據。一次突發傳輸中可以包含一至多次數據(Transfer)。每個 transfer 因為使用一個周期,又被稱為一拍數據(Beat)。每個數據可以是多個Byte構成。
協議規定,每次突發傳輸的累計地址不能跨4KB邊界。至於為啥是4KB而不是別的數值,這是最初操作系統的問題,以4KB為一個頁(page),對於某些設備而言,跨了4KB邊界可能就是另外一個設備了。
ARLEN用於讀地址通道的突發長度,AWLEN用於寫地址通道的突發長度。下文中AxLEN指ARLEN或AWLEN, x指代R或者W,對於其它信號也類似,以后不再贅述。在AXI3中,對於所有的突發類型,都支持1-16的突發傳輸。AXI4中,INCR類型支持1-256突發傳輸,其它類型依然是1-16。所以對於AXI3來說,AxLEN信號是4bit寬度;而在AXI4中,AxLEN是8bit寬度。一次突發傳輸的長度是AxLEN+1,因此,最小長度就是1了(畢竟0的話沒有任何意義)。
AxSIZE信號指示突發傳輸中的數據位寬。數據位寬不能超過數據總線本身的位寬,而當數據總線位寬大於突發傳輸的位寬時,將根據協議的相關規定,將數據在部分數據線上傳輸。
突發傳輸有以下幾種類型:
FIXED,所有數據都使用起始地址。該模式適合對某個固定地址進行多次數據更新,比如讀寫一個 fifo 時,讀寫地址就是固定的。
INCR,后續數據的地址在初始地址的基礎上進行遞增,遞增幅度與傳輸寬度相同。適合對於RAM 等通過地址映射(mapped memory)的存儲介質進行讀寫操作。
WRAP,首先根據起始地址得到繞回邊界地址與最高地址。當前地址小於最高地址時,WRAP 與 INCR 類型完全相同,地址遞增。但到遞增后的地址到達最高地址后,地址直接回到繞回邊界地址,再進行遞增,就這樣循環往復。最高地址由繞回邊界地址計算得到。這種傳輸類型適用於對緩存行(cache line)的操作。
突發傳輸類型是通過AxBURST信號來指示的,具體參考下圖:
好了,到這里,我們知道了每次突發的起始地址是主機發出的。AxLEN用於指示要傳輸多少次數據(beat);AxSIZE用於指示每個數據有多少Byte;AxBURST用於指示突發類型,除去首次傳輸的地址,下次傳輸的地址可以根據AxBURST和首地址計算得出。
協議中規定,通信雙方都不能在傳輸事務的所有 Transfer 完成前提前結束。哪怕發生錯誤,也要走完整個傳輸事務的流程。但是主機有辦法減少傳輸的數據。在寫傳輸事務中,發送方可以通過置低所有寫有效位的方式,使得寫數據無效。在讀傳輸事務中,主機可以直接丟棄讀取到的數據。
分析完傳輸的地址結構,再來看看讀寫數據的結構。主要是涉及窄傳輸(Narrow transfers),非對齊傳輸(unaligned transfer)和混合大小端(mixed-endian)傳輸等話題。
WSTRB信號用於指示WDATA中的哪些數據byte是有效的。WSTRB[n] 對應的是WDATA[8n+7:8n],也就是:當 WSTRB[n] 為 1 時,WDATA[8n+7:8n]有效。
當主機發起的傳輸位寬小於總線寬度時,就是一次窄傳輸。如果是INCR或者WRAP類型,可以每拍(beat)使用不同的字節位置(byte lane),如果是FIXED類型就不可以了。協議中給出了兩個例子,我們看一個就好了,如下圖:
突發長度是5
起始地址0
每次傳輸8bit
數據總線寬度32bit
突發類型是INCR
圖中灰色表示該byte無效,我們可以看到,每次傳輸的有效字節位置是不同的。在窄傳輸中,主機可以調整有效數據的字節位置,以及給出字節有效信號 WSTRB,能夠使從機無需進行數據重組等工作。
AXI中還有一個問題是大小端問題,之前的文章講過什么是大端和小端。其根本不同就是高字節數據存在低地址位還是高地址位。AXI協議定義了一種字節順序不變端序(byte-invariant endianness)方案。
1.無論大端或小端模式,每個數據結構存儲空間的分配方式是相同的
2.該數據結構按照其大端或小端模式決定字節存儲的地址順序
3.在傳輸過程中不考慮數據結構的大小端,按照字節原先存儲的順序,原樣傳輸並存放至對端
AXI 協議支持地址非對齊的傳輸,允許突發傳輸的首字節地址,即起始地址與突發傳輸位寬不對齊。比如,總線位寬為 32bit,也就是4byte,這時要保證對齊,起始地址的最低兩位必須是2‘b00。如果起始地址為 0x1002,則產生了非對齊現象。
主機可以使用低階地址行表示未對齊的起始地址,然后提供一個對齊的地址,並使用字節通道選通信號通知未對齊的起始地址。下面是協議中給出的例子:
看完了數據結構。就剩下讀寫響應結構了。讀寫響應信號分別是RRESP/BRESP,各2bit,總共4種狀態:
OKAY ,常規訪問成功
EXOKAY,獨占(exclusive)訪問成功
SLVERR,從機錯誤,從機接收到了訪問請求,但因為種種原因向主機返回了一個錯誤狀態
DECERR,解碼錯誤,一般由互連(interconnect)組件產生,表示主機發送的傳輸事務地址無效,無法將傳輸事務發送給某個從機。