深入AXI4總線-[二]架構


知乎用戶ljgibbs授權轉發

本系列我想深入探尋 AXI4 總線。不過事情總是這樣,不能我說想深入就深入。當前我對 AXI總線的理解尚談不上深入。但我希望通過一系列文章,讓讀者能和我一起深入探尋 AXI4。

聲明1:部分時序圖以及部分語句來自 ARM AMBA 官方手冊

(有的時候感覺手冊寫得太好了,忍不住就直接翻譯了。。)

聲明2:AXI 總線是 ARM 公司的知識產權

備注

五個獨立通道

AXI4 總線的一大特征是它有 5 個獨立的傳輸通道,這些通道都只支持單向傳輸。

作為類比,SPI 總線有 2 條單向傳輸通道:MISO, MOSI。SPI 輸入和輸出的數據,大路朝天,各走一條。

而作為對比, IIC 協議則只有 SDA 一條雙向通道,輸入輸出數據只能在這一條通道上分時雙向傳輸。

單向傳輸的通道意味着兩端的終端節點是有身份差距的,好比水只能從上游流到下流。在 AXI 總線傳輸中,通道兩端分為 Master 主機與 Slave 從機,主機總是發起讀寫請求的一方。常見的主機有CPU、DMA,而存儲介質控制器(比如 DDR 控制器)則是典型的從機。主機可能通過從機讀取或者寫入存儲介質。而顯然從機不可能主動向 CPU 寫入數據。

通道的讀/寫定義都是根據主機來定義的,那么五個通道都有誰呢:

  1. 讀地址 (AR) read address
  2. 讀數據 (R) read data
  3. 寫地址 (AW) write address
  4. 寫數據 (W) write data
  5. 寫回復 (R) write response

5個是不是很奇怪,你看讀/寫怎么也得是個2的倍數不是,那為什么不是6條,為什么沒有讀回復?其實,讀回復借用了讀數據通道。至於為什么有獨立的寫回復,而無讀回復通道,我們之后再講。

讀寫傳輸操作中的通道們

首先是寫傳輸操作(Write transcation):

如下圖所示,主機首先在寫地址通道(AWC)上告知從機本次傳輸操作(transcaction,對應后文中的"傳輸操作")的特性,包括地址和控制信息。

然后,在寫數據通道(WC)向從機寫入數據,一次傳輸操作中可能包括多個數據傳輸(data transfer)。

最后,從機在接收到寫數據后,通過寫回復通道(RC)將本次傳輸操作的響應告知主機。主機以收到從機的響應信號,作為本次傳輸操作結束的標志。手冊中強調,寫回復是針對整個傳輸操作(transcaction)的,而不是針對每個寫入數據(data transfer)。

所有傳輸操作中,RC 與 WC 的關系都如上圖所示,寫回復必然是在收到傳輸操作中最后一個寫數據之后觸發。

但是,AWC 與 WC 的關系並不局限於一種情況。一般來說,寫數據都發生在寫地址操作之后,但也不是絕對的,在有些情況下,可以先寫數據,或者在同一周期寫入數據與地址,都是允許的。這也表現了 AXI 通道之間的獨立性。(例外:RC 和 WDC 間的獨立性較弱)

接下來看讀操作(Read transcation):

讀操作只涉及兩個通道,首先主機在讀地址通道(ARC)上寫入本次傳輸操作(Transcation)待讀取數據的地址以及控制信息。

從機在接收到地址后,將該地址上的數據通過讀數據通道(RC)傳輸給主機。

值得注意的是, AR 雖然名字為讀地址通道,但實際上仍由主機寫入地址,只不過是寫入要讀取數據的地址。讀地址通道,這個名字確實有點歧義,主機讀操作地址通道表達得更貼切一些。

讀操作時通道間(ARC&RC)完全獨立,當然從機發出讀數據一定發生在主機寫入讀地址后,從機不能未卜先知,是吧。

無論是讀寫操作,AXI 總線支持,或者說基於突發傳輸(Burst Transaction)。簡單來說,主機可以寫入起始地址以及突發傳輸的長度等信息,從機將起始地址開始,依次接收主機傳輸的寫數據,或者讀取連續地址上的數據,作為讀數據傳輸給主機。所以上面兩張圖中,一次傳輸操作中(Transcation) 中包括了一次地址與控制信息(Address & Control)、多個數據(data transfer)。

突發傳輸又稱猝發傳輸,詳情可見后續更新的文章

通道定義

五個通道有一些共同的定義:

每個通道都使用 VALID/READY 握手機制,詳情可見第一章

在讀寫數據(WC&RC)兩條數據通道中,傳輸突發傳輸(Burst Transaction)中的最后一個數據,必須要給出 LAST 信號,來標識這是此次突發傳輸中的最后一個數據(data transfer)。

在共同的定義之外,各個通道有自己的定義。

讀&寫地址通道(ARC&AWC):

寫入本次傳輸操作所需的地址和控制信息,讀寫操作都擁有各自的地址通道。

讀數據通道(RC):

讀數據通道上包括從機發送給主機的讀數據,以及從機對於本次讀傳輸操作的回復,具體的讀操作狀態回復情況會在之后討論。總線數據位寬可以是 8,16,64,128,256,512 或者是 1024 比特。

寫數據通道(WC):

寫數據通道用於將主機的寫數據傳輸至從機,位寬和RC的數據位寬相同。WC 有一點 RC 所不具有的特性是擁有 STROBE 信號,用於標識寫數據中有效的傳輸字節。即有些無效的數據,出於減少主機工作量的目的,或者在讀寫寬度不對稱時,被放到寫數據通道上和有效數據一起發送。而 STROBE 的信號的作用就是標識出這些無用的數據,告知從機不需要接收無用數據。(Master:我太懶,以至於把所有信號都送過來了)

寫數據通道設計有緩存,可超前於從機響應本次傳輸操作,發起下一次寫傳輸操作。

寫回復通道(RC):

用於從機將寫操作響應回復給主機。所有寫傳輸操作都需要以寫回復通道上接收寫響應作為完成信號。再次強調,寫回復是針對一次傳輸操作(transcation)的,而不是針對每一次寫數據(data transfer)。

那么問題來了,為什么只有寫回復通道而沒有讀回復通道呢?

這個問題可以從數據流向看出來,主機在讀取數據時,數據在讀通道上傳輸,流向為從機到主機。而讀回復由從機向主機報告讀操作的情況,信號的數據流向也是從機到主機,所以讀回復可以合並在讀數據通道中,搭個順風車。

但寫回復通道的數據流向就和寫數據相反。寫數據是從主機到從機,而寫回復為從機報告寫操作的完成情況,流向為從機到主機,無法合並到寫數據通道中,另一方面,寫回復又是不可或缺的,所以就有了一條獨立的寫回復通道。

通道上的信號們

全局信號

AXI 總線中有兩個全局信號:ACLK,全局的時鍾信號,所有的傳輸操作都發生在 ACLK 的上升沿。ARESETn,全局復位信號,低電平有效。在復位問題上,AXI 規定了一些細節,會在后續的文章中討論。

注意:AResetn 一般是一個同步復位信號,A 代表 AXI,而不是 Async。

寫地址通道

寫地址通道的信號可以分為 3 部分:經常用到的基礎信號、突發傳輸的控制信號、內存訪問相關以及其他的在基礎階段不是很常用的信號。

基礎信號即 AWADDR:傳輸操作的起始地址,AWVALID 以及 AWREADY:所有通道都使用的握手信號。

突發傳輸指的是傳輸一次起始地址后,進行多次地址上連續的讀寫操作。突發傳輸有關的操作包括:AWLEN:突發傳輸的長度,即在一次突發傳輸中數據傳輸的個數。AWSIZE:每次突發傳輸中的數據傳輸的位寬。AWBURST:突發傳輸的類型。

其他信號包括和內存原子操作有關的 AWLOCK,AWCACHE,AWPROT 以及用於用戶自定義的 AWUSER 信號,都將在以后的文章涉及。(等我自己先用到再說)

讀地址通道

讀地址通道和寫地址通道的信號十分類似,就不再從 specification 中截圖以及介紹了。

寫數據通道

值得注意的是 AXI4 不再支持 WID 信號,這和 AXI4 的亂序機制有關,AXI4 規定所有數據通道的數據必須順序發送。

WDATA 與常見的握手信號不再贅述,WDATA 的可使用位寬可以見上文。WSTRB 信號用於標記傳輸數據中有效的字節,每個 WSTRB 位對應一個字節的位寬,比如數據位寬為 64 位,那么 WSTRB 信號的位寬就是 1 個字節,共 8 位。

WLAST 標識一次突發傳輸中最后一次數據傳輸,如果沒有正確的 WLAST 的信號,就會造成寫入地址的混亂,導致從機無法正確接收寫數據,從而造成從機不再拉高 READY 信號的現象。

寫回復通道

與寫數據通道不同,寫回復通道支持 BID,即支持亂序的寫回復,關於亂序的問題,我們稍后再談。BRESP 回復上一次的寫狀態。

讀數據通道

讀數據通道與寫數據通道類似,區別有兩點:一,支持 RID 信號。二,因為讀回復信息在讀數據通道上傳遞,所以集成了 RRESP 信號,用於返回讀狀態,值得注意的是讀回復信號和讀數據一樣,發送方(source)為從機(slave)。

通道間的關系

首先,再次聲明一般情況下 AXI 的五個通道之間是獨立的。但凡事都免不了例外,是吧。AXI 的通道間需要保證以下三種聯系(relationship):

  • 寫回復必須在其所屬傳輸的最后一個寫數據完成后(write response must follow the last write transfer in the transaction)
  • 讀數據必須在接收到讀地址信號后產生
  • 通道間的握手需要滿足通道間的握手依賴性(handshake dependencies)

除了這三種聯系外,通道之間保持獨立關系。前兩種聯系已在上文中討論,接下來我們討論第三種情況:通道間的握手信號依賴

握手依賴關系

協議規定握手依賴的目的是為了防止死鎖(deadlock),手冊定義於章節 A3.3 ,主要的原則還是第一章中說過的兩條:

  • 發送方 VALID 一定不能依賴接收方 READY 信號
  • 接收方 READY 信號可以檢測到 VALID 置起后再置起有效,換句話說,可以依賴 VALID 信號

下述內容就是對上述原則在不同情況下的具體表述,為選讀內容,無需實現協議的讀者可以略過。

我們首先來看讀傳輸的情況,讀地址通道中主機為發送方、從機為接收方;讀數據通道中主機為接收方、從機為發送方。其中,

圖中的單頭箭頭表示:其指向的信號可以在箭頭起始信號置起之前或之后置起(無依賴

圖中的雙頭箭頭表示:其指向的信號必須在箭頭起始信號置起之后置起(指向信號依賴起始信號)

具體的依賴可以表述為:

  • 主機的 ARVALID 信號不能等待從機的 ARREADY 信號置起后才置起,反之可以
  • 從機的 ARREADY 信號可以先於主機的 ARVALID 信號置起(如單頭箭頭所示)
  • 從機的 RVALID 信號必須等待 ARVALIDARREADY 信號均置起后置起(如兩個雙頭箭頭所示)
  • 從機的 RVALID 信號不能等待主機的 RREADY 信號置起后才置起,反之可以
  • 主機的 RREADY 信號可以在 RVALID 置起前置起,換句話說:無依賴關系(如單頭箭頭所示)

接下來是寫傳輸的情況,在寫數據以及寫地址通道中,主機作為發送方;寫回復通道中從機作為發送方

從圖中看到,只有 2 組代表着依賴關系的雙頭箭頭指向了 BVALID,這代表從機首先等待 WVALID 以及 WREADY 置高,此時寫傳輸啟動。再等待 WLAST 置起,此時傳輸完成。只有在傳輸完成后才能根據情況生成寫回復信號中的 BRESP 信號。此時置高 BVALID 信號表示從機的寫回復已經就緒。

此外另外三組單頭箭頭表示 AWREADYWREADY 信號可以根據 AWVALIDWVALID 信號生成,但不存在依賴。同樣的關系還存在於 BREADYBVALID 信號之間。本文此處不再展開具體依賴,可以參閱官方手冊的 A3-43 頁獲得詳細的表述。

(手冊中圖 A3-6 即上圖中的注釋部分似乎將 BVALID 誤寫為 WVALID,因為主機置起 WVALID 似乎與本次傳輸的 WLAST 無關,而且文本中也提到 BVALID 依賴於 WLAST)

在 AXI4 中,寫傳輸相較此前增加了從機置起 BVALID 信號所需的依賴

從上圖中增加的依賴可以看出,從機 BVALID 信號有效需要等待 AWVALID 以及 AWREADY 信號置起,完成地址傳輸作為前提條件之一。這在某種程度上是自然的,肯定需要等待從機獲取本次操作的地址以及數據之后才能回復寫入情況。一般而言地址會在數據之前傳輸完畢,不過協議並沒有要求這點,所以從機需要等待地址寫入后再產生寫回復,作為本次傳輸完成的標志。

拓撲連接

從上述信號我們可以發現,原生的 AXI 總線為單對單的拓撲結構,主機與從機間對應信號直接相連,比如下圖中的 VALID / READY 信號。

在一個系統中,顯然不可能只有單個主機和從機。AXI 總線需要借助總線互聯IP( Interconnect )來實現多對的的拓撲,結構如下圖。Interconnect 擁有多個 Master/Slave 接口,並在內部基於輪詢或者優先級策略對多路數據進行路由轉發,我們將在后續的文章中詳細討論。

實現細節

本文的最后討論一個協議的實現細節。如果讀者僅僅想了解 AXI 協議的使用,那么每篇文章的實現細節章節可以跳過。這個章節面向有實現 AXI 協議需求的讀者。

AXI 協議並沒有對寫數據以及寫地址通道中的握手信號先后順序做出規定。因此,實現中數據可以先於地址完成握手。這適用於一些情況,手冊中舉了個例子,比如寫地址通道為了滿足時序,觸發器的級數與寫數據通道不同,這樣一來兩通道握手的先后順序可能不同。

這反映了 AXI 通道間的獨立性,利用該特性可調整路徑中的觸發器,滿足時序約束。

結語

本文中我們了解了 AXI 總線的架構,它的五大通道以及各自的信號,最簡單的讀寫操作流程以及AXI 總線的拓撲連接。在接下來的文章中,我們會更加深入到:各通道的握手機制以及傳輸細則,突發傳輸以及亂序傳輸的規則與實例中。

讀者可能需要區分三個中文中的傳輸概念,本文許多地方重復地標記出了對應的英文,也是為了幫助大家區分。

  1. 傳輸 v. 指數據在主機和從機之間的流動的動作
  2. 傳輸操作 n. Transcation
  3. 數據傳輸 n. (data) transfer

其中地址與控制信號寫入、讀寫恢復以及 last 信號相關概念均為 transcation 相關。一個 transcation 包括一至多個 data transfer。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM