AHB匯流排協議

ivy_reny發表於2017-09-30

1. 簡介

        AHB匯流排規範是AMBA匯流排規範的一部分,AMBA匯流排規範是ARM公司提出的匯流排規範,被大多數SoC設計採用,它規定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。AHB用於高效能、高時脈頻率的系統結構,典型的應用如ARM核與系統內部的高速RAM、NAND FLASH、DMA、Bridge的連線。APB用於連線外部裝置,對效能要求不高,而考慮低功耗問題。ASB是AHB的一種替代方案。

1.1 AHB匯流排的架構

        AHB匯流排的強大之處在於它可以將微控制器(CPU)、高頻寬的片上RAM、高頻寬的外部儲存器介面、DMA匯流排master、各種擁有AHB介面的控制器等等連線起來構成一個獨立的完整的SOC系統,不僅如此,還可以通過AHB-APB橋來連線APB匯流排系統。AHB可以成為一個完整獨立的SOC晶片的骨架。
        下圖是一個典型的AHB系統匯流排的結構示意圖


1.2 AHB基本特性

  • Burst傳輸
  • Split事務處理
  • 單週期master移交
  • 單一時鐘沿操作
  • 無三態
  • 更寬的資料匯流排配置(64/128)
  • 流水線操作
  • 可支援多個匯流排主裝置(最多16個)

2. AHB匯流排的組成


        AHB匯流排由Master、Slave和Infrastructure構成。Infrastructure由arbiter、資料多路、地址控制多路、譯碼器構成。
  • 主裝置Master
發起一次讀/寫操作
某一時刻只允許一個主裝置使用匯流排
  • 從裝置Slave
響應一次讀/寫操作
通過地址對映來選擇使用哪一個從裝置
  • 仲裁器arbiter
允許某一個主裝置控制匯流排
  • 譯碼器decoder
通過地址譯碼決定選擇哪一個從裝置
  • 匯流排可以分為三組
        寫資料匯流排(HWDATA)
        讀資料匯流排(HRDATA)
        地址控制匯流排(HADDR)

3. 訊號描述

Name Source To Description
HCLK clock source 各module 匯流排時鐘,上升沿取樣
HRESETn reset controller 各module 匯流排復位,低電平有效
HADDR[31:0] Master decoder
mux to slave
arbiter
32位系統地址匯流排
HTRANS[1:0] Master mux to slave 當前傳輸型別NONSEQ, SEQ, IDLE, BUSY
HWRITE Master mux to slave 1為寫,0為讀
HSIZE[2:0] Master mux to slave 每一個transfer傳輸的資料大小,以位元組為單位,最高支援1024位
HBURST[2:0] Master mux to slave burst型別,支援4、8、16 burst,incrementing/wrapping
HPROT[3:0] Master mux to slave 保護控制訊號,需要slave帶保護功能,一般不用
HWDATA[31:0] Master mux to slave 寫資料匯流排,Master到Slave
HRDATA[31:0] Slave mux to master 讀資料匯流排,Slave到Master
HREADY Slave mux to master
arbiter
高:Slave指出傳輸結束
低:Slave需延長傳輸週期
HRESP[1:0] Slave mux to master
arbiter
Slave發給Master的匯流排傳輸狀態OKAY, ERROR, RETRY, SPLIT
HSELx Decoder slave slave選擇訊號

AHB仲裁訊號

Name Source To Description
HBUSREQx Master arbiter master給仲裁器的請求獲得匯流排使用權的請求訊號,最多支援16個master
HLOCKx Master arbiter 如果一個master希望自己在傳輸期間不希望丟掉匯流排,則需要向仲裁器傳送這個鎖定訊號
HGRANTx arbiter master 授權訊號,當前bus master x的優先順序最高。當HREADY和HGRANTx同時為高時,master獲取系統匯流排的權利
HMASTER [3:0] arbiter 具有split功能的slave 仲裁器為每一個master分配的ID,指出哪個主裝置正在進行傳輸,提供進行split的資訊
HMASTLOCK arbiter 具有split功能的slave 表示當前的master正在執行Locked操作。這個訊號和HMASTER有這相同的時序
HSPLITx[15:0] slave arbiter 從裝置用這個訊號告訴仲裁器哪個主裝置執行重新嘗試一次split傳輸,每一位對應一個主裝置

4. 匯流排操作

        有需要佔用匯流排的Master向arbiter發出請求,arbiter授權給指定的master。任一時間週期只有一個master可以接入匯流排,對其指定的slave進行讀寫操作。
        獲得授權的匯流排開始AHB傳輸,首先發出地址和控制訊號,提供地址資訊、傳輸方向、頻寬和burst型別。匯流排統一規劃slave的地址,譯碼器根據地址和控制訊號確定哪個slave與master進行資料通訊。資料傳輸通過資料匯流排完成。為避免出現三態匯流排,AHB將讀寫匯流排分開,寫資料匯流排用於從master到slave的資料傳輸,讀資料匯流排用於從slave到master的資料傳輸。每筆傳輸包括一個地址和控制週期,一個或多個資料週期。地址和控制週期不能被擴充套件,因此slave必須在一個週期內取樣地址訊號。資料週期可以通過HREADY訊號擴充套件,但HREADY為低時給傳輸加入一個等待狀態以使slave獲得額外的時間來提供或取樣資料,另外slave通過響應訊號HRESP反映傳輸狀態。
        一般情況下master完成完整的burst傳輸,arbiter才會授權給其他的master接入匯流排,然而為避免過大的判決延遲,arbiter也可能打斷burst傳輸。在這種情況下master必須再次接入匯流排以進行中斷的burst剩餘部分的傳輸。

5. 基本傳輸

        一筆傳輸由如下兩部分組成:
        地址階段:一個週期
        資料階段:一個或多個週期,由HBURST訊號決定需要幾個有效週期,可以由HREADY發出請求延長一個週期。

5.1 沒有等待狀態的single transfer


        第一個週期的上升沿,master驅動地址和控制訊號;
        第二個週期的上升沿,slave取樣地址和控制訊號,並將HREADY拉高;
                如果是寫操作,master會在第二個週期的上升沿傳輸要寫入的資料;
        如果是讀操作,slave會在HREADY訊號拉高後將讀取的資料寫入匯流排;
        第三個週期的上升沿,
        如果是寫操作,master獲取HREADY高訊號,表明slave已成功接收資料,操作成功;
        如果是讀操作,master獲取HREADY高訊號,表明此時的讀資料有效並且接收下來,操作成功。
        需要注意,HREADY訊號在資料有效期間必須為高,並且延續到第三個週期的上升沿之後,確保master的正確取樣。

5.2 slave插入等待狀態的single transfer


        slave可以及時處理master請求,但也可能存在slave太慢不能立即處理的情況。這時需要讓master稍微等一等,需要slave插入一些等待的狀態。如下圖所示,HREADY訊號在第二和第三週期拉低,意在告訴master,slave不能立即處理,需要master等待2個週期。在這裡需要注意2點:
        如果是寫操作,master需要在等待期間保持寫資料不變,直到本次傳輸完成;
        如果是讀操作,slave不需要一開始就給出資料,僅當HREADY拉高後才給出有效資料。

5.3 多個single transfer的pipeline操作


        擴充套件資料週期的一個負效應是必需延長相應的下一筆傳輸的地址週期。A和C為零等待傳輸,B加入了一個等待週期,因此相應的C地址週期要進行擴充套件。
        第一個週期,master發起一個操作A,並驅動地址和控制訊號;
        第二個週期,slave收到了來自匯流排的請求,將HREADY訊號拉高;
        第二個週期上升沿後,master發現有操作B需要執行,並且檢查到上一週期的HREADY為高,則發起第二個操作B;
        第三個週期,master獲取HREADY訊號為高,表示操作A已經完成;
        第三個週期上升沿後,master發現有操作C需要執行,並且檢查到上一週期的HREADY為高,則發起第三個操作C;
        第三個週期上升沿後,slave由於繁忙插入了一個等待狀態,將HREADY拉低;
        第四個週期,master獲取HREADY訊號為低,知道slave希望等待,於是master保持和上一拍一樣的訊號;
        第四個週期,slave處理完了事務,將HREADY訊號拉高,表示可以繼續處理;
        第五個週期,master獲取HREADY訊號為高,知道slave已經可以處理B操作;
        第五個週期上升沿後,B操作完成;
        第六個週期上升沿後,C操作完成。
        需要注意幾點:
        HREADY在一定程度上表示了slave的pipeline能力,在AHB中是2個pipe,也就是匯流排上最多存在2個未處理完的transfer。只有當匯流排上未完成的transfer少於2個時,master才能發起操作。

5.4 遞增burst


        T1,master傳入地址和控制訊號,因為是新的burst開始,transfer的型別是NONSEQ;
        T2,由於master不能在第二個週期裡處理第二拍,所以master使用BUSY transfer來為自己延長一個週期的時間。注意,雖然是延長了一個週期,但是master需要給出第二個transfer的地址和控制訊號;
        T3,slave採集到了master發來的BUSY,知道master需要等待一拍,所以slave會忽略這個BUSY transfer;
        T3,master發起了第二個transfer,因為是同一個burst的第二個transfer,所以transfer的型別是SEQ;
        T5,slave將HREADY訊號拉低,告訴master需要等待一個週期;
        T8時刻完成最後一個transfer。
        需要注意的 雖然slave會忽略掉BUSY transfer,但是master也需要給出下一拍的地址和控制訊號。

5.5 wrapping 4-beat burst


        跟之前唯一的區別在於地址的不同,在0x3C地址之後,根據迴環的地址邊界,第三拍的地址變為0x30。一共四拍,4個地址,每個地址各不相同,這四個地址是一個迴環範圍。起始地址決定了迴環操作的迴環範圍。

5.6 遞增4拍burst


        和上面的基本一致,只不過地址在0x30並不迴環,而是遞增。

6.控制訊號

HTRANS[1:0]
傳輸型別
Description
00 IDLE 主裝置佔用匯流排,但沒進行傳輸
兩次burst傳輸中間主裝置可發IDLE
此時就算slave被使能,也不會從匯流排上獲取任何的資料訊號。如果此時salve被選中,那麼每一個IDLE週期slave都要通過HRESP[1:0]返回一個OKAY響應
01 BUSY 主裝置佔用匯流排,但是在burst傳輸過程中還沒有準備好進行下一次傳輸
一次burst傳輸中間主裝置可發BUSY
這時slave不會從匯流排上收取資料而是等待,並且通過HRESP[1:0]返回一個OKAY響應。需要注意的是,這個transfer需要給出下一拍的地址和控制訊號,儘管slave不會去取樣。
10 NONSEQ 表明一次單個資料的傳輸或者一次burst傳輸的第一個資料
地址和控制訊號與上一次傳輸無關
11 SEQ burst傳輸接下來的資料
地址和上一次傳輸的地址是相關的,這時匯流排上的控制訊號應當與之前的保持一致,地址視情況遞增或者回環。

HSIZE[2:0] Size Description
000 8 bits Byte
001 16 bits Halfword
010 32 bits Word
011 64 bits -
100 128 bits 4-word line
101 256 bits 8-word line
110 512 bits -
111 1024 bits -

  • Burst傳輸型別
        burst不能超過1K地址邊界。

HBURST[2:0] 型別 Description
000 SINGLE Single transfer
001 INCR Incrementing burst of unspecified length
010 WRAP4 4-beat wrapping burst
011 INCR4 4-beat increment burst
100 WRAP8 8-beat wrapping burst
101 INCR8 8-beat increment burst
110 WRAP16 16-beat wrapping burst
111 INCR16 16-beat increment burst

  • 響應訊號
        master發起一筆傳輸後,slave可以決定這筆傳輸的程式,而master不能取消已經發出的傳輸。slave通過HREADY訊號反映傳輸是否完成,通過HRESP[1:0]反映傳輸的狀態。
        slave可以如下方式完成一筆傳輸:
    • 立即完成一筆傳輸;
    • 延遲一個或幾個週期完成傳輸;
    • 傳輸失敗返回error;
    • 延遲傳輸,釋放匯流排。
  • 傳輸完成HREADY
        為高時傳輸完成,為低時傳輸需要延遲。
        傳輸響應HRESP[1:0]
        00: OKAY
        01: ERROR
        10: RETRY
        傳輸未完成,請求主裝置重新開始一個傳輸,arbiter會繼續使用通常的優先順序
        11: SPLIT
        傳輸未完成,請求主裝置分離一次傳輸,arbiter會調整優先順序方案以便其他請求匯流排的主裝置可以訪問匯流排
  • 地址譯碼
        地址譯碼器用於為匯流排上每個slave提供選擇訊號HSELx,選擇訊號是通過組合邏輯對地址碼譯碼產生的。只有當前的資料傳輸完成後(HREADY為高),slave才會取樣地址和控制訊號以及HSELx。在一定條件下可能會出現這樣的情況:產生HSELx訊號而HREADY為低,在當前傳輸後slave會改變。
        每個slave最小的地址空間為1KB,所有的master的burst傳輸上限也是1KB,如此設計保證了不會出現地址越界問題。當一個設計不會用到所有的地址空間時,可能出現訪問到一個不存在的地址的情況,這就需要增加一個附加的預設slave來為上面的情況提供一個響應。當SEQ或NONSEQ傳輸訪問到一個不存在的地址,預設slave應該提供ERROR響應;當IDLE或BUSY傳輸訪問到一個不存在的地址,預設slave會響應OKAY。地址譯碼器會帶有實現預設slave的功能。
  • 仲裁
        仲裁機制保證了任意時刻只有一個master可以接入匯流排。arbiter決定哪個發出接入請求的master可以接入匯流排,這通過優先順序演算法實現。AHB規範並沒有給出優先順序演算法,設計者需要根據具體的系統要求定義。一般情況下arbiter不會中斷一個burst傳輸,將匯流排接入權讓給其他master。當然未定義長度的burst傳輸是可以打斷的,這要看優先順序演算法是如何規定的。如果一筆burst被打斷,master再度獲得接入許可權時,會傳遞剩餘的部分。如一筆長度為INCR8的傳輸在傳遞3 beat後被打斷,master再次獲得接入授權後,會繼續傳輸剩餘的5 beat,剩餘部分可以由一個SINGLE和一個INCR4組成,或者一個INCR。
        HBUSREQx:master向arbiter發出接入請求的訊號。
        HLOCKx:指示是否要進行不可中斷的傳輸,這一訊號與HBUSREQx同時由master向arbiter發出。
        HGRANTx:arbiter產生指示master獲得授權,當HGRANTx訊號為高同時HREADY為高時,master可以向匯流排傳輸地址訊號。
        HMASTER[3:0]:arbiter產生指示哪個master獲得授權,這一訊號用於地址控制多路來選擇哪個master接入匯流排。
        HMASTERLOCK:arbiter產生指示當前傳輸是否為鎖定序列傳輸。
        HSPLIT:供支援SPLIT傳輸使用。

相關文章