AHB總線協議(一)




1. 簡介

       AHB(Advanced High Performance Bus)總線規范是AMBA(Advanced Microcontroller Bus Architecture) V2.0總線規范的一部分,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總線的架構

      下面先看幾個貫穿全文的術語:

總線周期(bus cycle): 總線周期是總線時間的基本單位,其實就是總線時鍾的頻率。對於 AMBA AHB 或者 APB 協議總線周期定義為從一個上升沿到臨界的上升沿的變化區間。總線信號時序總是參考總線時鍾周期

總線傳輸: AMBA AHB 或者 ASB 總線傳輸是對數據目標的讀寫操作,可能會持續一個或者多個總線周期。總線傳輸在收到從機地址的完成響應后終止。AMBA ASB 總線支持的傳輸大小包括字節(8 位)、半字(16 位)、字(32 位)。 AMBA AHB 又支持較寬的數據傳輸,包括 64 位和 128 位的數據傳輸。 AMBA APB 總線傳輸是對數據目標的讀寫操作,總是需要 2個總線周期

突發(Burst)傳輸:突發傳輸定義了一個或多個數據傳輸,由主線總機發起,在地址空間增加時,傳輸寬度保持不變。每次傳輸增加的步長(地址),由傳輸大小決定(字節,半字,字),APB不支持突發傳輸

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


image


1.2 AHB基本特性


分塊處理
單周期總線主機移交
單時鍾沿操作

無需三態門的實現方式
更寬的數據總線架構(64位或者128位)
流水線操作
可支持多個總線主設備(最多16個)

2. AHB總線的組成

AHB總線由AHB總線主機(Master)、AHB總線從機(Slave)和Infrastructure構成。Infrastructure由仲裁器、數據多路選擇器、地址控制多路選擇器、譯碼器構成。

AMBA AHB 總線協議設計使用一個中央多路選擇器互聯方案。該方案中,所有總線主機設備輸出地址和控制信號來指示它們想執行的傳輸,同時仲裁器決定哪一個主機能夠將它
的地址和控制信號連通到所有的從機
。當然也需要一個譯碼器來控制讀數據和響應多路信號選擇器,多路信號選擇器選中來自傳輸中所包含從機的適當信號。

下圖實現包含三個主機和四個從機的AMBA AHB設計的結構要求。

image


典型的 AMBA AHB 系統設計包含以下的部分


AHB 主機: 總線主機能夠通過提供地址和控制信息發起讀寫操作。任何時候只允許一個總線主機處於有效狀態並能使用總線。
AHB 從機: 總線從機在給定的地址空間范圍內響應讀寫操作。總線從機將成功、失敗或者等待數據傳輸的信號返回給有效的主機。
AHB 仲裁器: 總線仲裁器確保每次只有一個總線主機被允許發起數據傳輸。即使仲裁協議已經固定,任何一種仲裁算法,比如最高優先級或者公平訪問都能夠根據應用要求而得到執行。AHB 必須只包含一個仲裁器,盡管在單總線主機系統中這顯得並不重要。
AHB 譯碼器: AHB 譯碼器用來對每次傳輸進行地址譯碼並且在傳輸中包含一個從機選擇信號。
所有 AHB 執行都必須僅要求有一個中央譯碼器。


3. 信號描述

所有 AMBA 信號的命名都用名稱的第一個字母來指示信號和哪個總線相關聯。信號名稱中用一個小寫的 n 表示該信號低電平有效,否則信號的名稱總是用大寫字母來表示。
測試信號有一個前綴T而與總線類型無關。

AHB信號前綴:H 表示一個 AHB 信號。例如, HREADY 是用來指示 AHB 部分數據傳輸完畢的信號。該信號高電平有效。

本節是AHB信號的簡單描述,每個信號的詳細功能會在后面的章節中介紹。

名稱 來源 描述

HCLK

總線時鍾

時鍾源 時鍾為所有總線傳輸提供時基。所有信號時序都和HCLK的上升沿相關。

HRESETn

復位

復位控制器 總線復位信號,低電平有效,用來復位系統和總線。這是唯一低電平有效的信號。
名稱 來源 描述

HADDR[31:0]

地址總線

主機 32位地址總線

HTRANS[1:0]

傳輸類型

主機 表示當前傳輸的類型,可以是連續,不連續,空閑和忙

HWRITE

傳輸方向

主機 該信號為高表示一個寫傳輸,為低表示一個讀傳輸

HSIZE[2:0]

傳輸大小

主機

表示傳輸的大小,三位表示0…7,分別對應8bits(byte), 16bits(halfword),32bits(word),

64bits, 128bits,256bits, 512bits,1024bits

HBRUST[2:0]

突發類型

主機 表示傳輸是否組成了突發的一部分。支持4個,8個,16個節拍的突發傳輸,突發傳輸可以使增量或回環。

HPROT[3:0]

保護控制

主機

提供總線訪問的附加信息,主要是給那些希望執行某種保護級別的模塊使用的。

這個信號指示當前傳輸是否為預取指令或者數據傳輸,同時也表示傳輸是保護模式訪問還是用戶模式訪問。

對帶存儲器管理單元的總線主機而言這些信號也用來指示當前傳輸是高速緩存的(cache)還是緩沖的(buffer)。

HWDATA[31:0]

寫總線數據

主機

寫數據總線用來在寫操作期間從主機到總線從機傳輸數據。建議最小的數據總線寬度為 32 位。

在要求高帶寬運行時擴展(數據總線)還是很容易的。

HSELx

從機選擇

譯碼器

每個 AHB 從機都有自己獨立的從機選擇信號並且用該信號來表示當前傳輸是否是打算送給選中的從機。

該信號是地址總線的簡單組合譯碼。

HRDATA[31:0]

讀數據總線

從機

讀數據總線用來在讀操作期間從總線從機向總線主機傳輸數據。建議最小的數據總線寬度為 32 位。

在要求高帶寬運行時擴展(數據總線)還是很容易的。

HREDAY

傳輸完成

從機

當 HREADY 為高時表示總線上的傳輸已經完成。在擴展傳輸時該信號可能會被拉低。
注意:總線上的從機要求 HREADY 作為輸入輸出信號。

HRESP[1:0]

傳輸響應

從機

傳輸響應給傳輸狀態提供了附加信息。提供四種不同的響應: OKEY、 ERROR、 RETRY 和 SPLIT。

AMBA AHB也有許多信號請求支持多主機操作。這些仲裁信號用於點對點連接, 下表中后綴x用來表示信號來自模塊x。例如,一個系統中會有許多的信號
HBUSREQx,比如HBUSREQarm, HBUSREQdma和HBUSREQtic。

名稱 來源 描述

HBUSREQx
總線請求

主機

從總線主機 x 傳向總線仲裁器用來表示該主機請求(控
制 ) 總 線 的信 號 。 系 統中 每 個 總 線主 機 都 有 一個
HBUSREQx 信號,最多 16 個總線主機。

HLOCKx
鎖定的傳輸

主機

當該信號為高時表示主機請求鎖定對總線的訪問並且
在該信號為低之前其他主機不應該被允許授予總線。

HGRANTx
總線授予

仲裁器

該信號用來表示總線主機 x 目前是優先級最高的主機。
當 HREADY 為高時傳輸結束,地址/控制信號的所有
權發生改變。所以主機應在 HREADY 和 HGRANTx
都為高時獲得對總線的訪問。

HMASTER[3: 0]
主機號

仲裁器

這些來自仲裁器的信號表示哪個總線主機正在執行傳輸和被支持分塊傳輸的從機用來確定哪個主機正在嘗
試一次訪問。HMASTER 的時序和地址以及控制信號對齊。

HMASTLOCK
鎖定順序

仲裁器

表示當前主機正在執行一個鎖定順序的傳輸。該信號
和 HMASTER 有相同的時序。

HSPLITx[15: 0]
分塊完成請求

從機(支持分塊)

從機用這 16 位的分塊總線來指示仲裁器總線主機應該被允許重試一個分塊傳輸。
分塊總線上的每一位對應一個總線主機。



4. AHB總線操作概括

在一次 AMBA AHB 傳輸開始之前總線主機必須被授予訪問總線。這個過程開始於總線主機向仲裁器斷言一個請求信號。仲裁器指示主機何時能夠被授予使用總線。被授權的總線主機通過驅動地址和控制信號來發起一次 AMBA AHB 傳輸。這些信號提供關於地址、方向和傳輸寬度的信息,以及表示傳輸類型是否為一次突發傳輸的部分。

允許有兩種不同類型的突發傳輸:

  • 增量突發,在地址邊界處不回環;
  • 回環突發,在特定的地址邊界上回環。



寫數據總線用來將數據從主機傳輸到從機上,而讀數據總線用來將數據從從機傳輸到主機上。
每次傳輸包含:


  • 一個地址和控制周期;

  • 一個或多個數據周期。


地址不長期有效所以所有從機必須在這個時段(傳輸地址時)采樣地址。然而,通過HREADY 信號可以延長數據。當該信號為低時導致在傳輸中插入等待狀態同時允許從機有額外的時間提供或者采樣數據。
在傳輸中從機通過使用響應信號來表示狀態,

HRESP[1: 0]:OKAY OKAY 響應用來表示傳輸進展正常並且當 HREADY 變高時表示傳輸成功完成。
ERROR ERROR 響應表示發生了一個傳輸錯誤並且傳輸失敗。
RETRY 和 SPLIT RETRY 和 SPLIT 兩個傳輸響應都表示傳輸不能立刻完成,但是總線主機應該繼續嘗試傳輸。
在常規操作中主機被允許在仲裁器授予另一個主機訪問總線之前完成一個特定突發的所有傳輸。然而,為了避免過多的仲裁延時可能允許仲裁器打斷一個突發並且這種情況下主機必須(申請)重新仲裁總線以完成剩下的突發傳輸。

5. 基本傳輸

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

5.1 沒有等待狀態的single transfer


         第一個周期的上升沿,主機將地址信息和控制信息發送到總線上;
         第二個周期的上升沿,從機采樣地址和控制信號,並將HREADY拉高
                 如果是寫操作,主機會在第二個周期的上升沿過后傳輸要寫入的數據;如果是讀操作,從機會在HREADY信號拉高后將讀取的數據寫入總線;
         第三個周期的上升沿,
         如果是寫操作,主機獲取HREADY高信號,表明從機已成功接收數據,操作成功;
         如果是讀操作,主機獲取HREADY高信號,表明此時的讀數據有效並且接收下來,操作成功。
         需要注意,HREADY信號在數據有效期間必須為高,並且延續到第三個周期的上升沿之后,確保主機的正確采樣。


5.2 slave插入等待狀態的single transfer


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


5.3 多個single transfer的pipeline操作


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


5.4 AHB控制信息

在介紹突發傳輸之前,我們再來看下AHB控制信息。

HWRITE - 這個信號是讀寫控制信號,也即transfer的方向控制信號。 高電平表示寫操作,低電平表示讀操作。

HSIZE - 這個信號是指明單次傳輸的數據寬度。

表示傳輸的大小,三位表示0…7,分別對應8bits(byte), 16bits(halfword),32bits(word),

64bits, 128bits,256bits, 512bits,1024bits

 

HPROT[3:0] - 為transfer提供額外的訪問保護和控制權限信號。一般不用,在此不做介紹。

HTRANS[1:0] - 進行一次傳輸時的傳輸類型,這個信號由主機根據自己要進行的傳輸類型生成的控制信號。一共4種類型

HTRANS[1:0]

傳輸類型

Description

00

IDLE

主設備占用總線,但沒進行傳輸
兩次突發傳輸中間主設備可發IDLE
此時就算從機被使能,也不會從總線上獲取任何的數據信號。如果此時從機被選中,那么每一個IDLE周期從機都要通過HRESP[1:0]返回一個OKAY響應

01

BUSY

主設備占用總線,但是在突發傳輸過程中還沒有准備好進行下一次傳輸
一次突發傳輸中間主設備可發BUSY
這時從機不會從總線上收取數據而是等待,並且通過HRESP[1:0]返回一個OKAY響應。需要注意的是,這個傳輸需要給出下一拍的地址和控制信號,盡管從機不會去采樣。

10

NONSEQ

表明一次單個數據的傳輸或者一次突發傳輸的第一個數據
地址和控制信號與上一次傳輸無關

11

SEQ

突發傳輸中剩下的傳輸是連續傳輸並且地址是和前一次傳輸有關的。控制信息和前一次傳輸一樣。地址等於前一次傳輸的地址加上傳輸大小(字節)。在回環突發的情況下傳輸地址在地址邊界處回環,回環值等於傳輸大小乘以傳輸的次數(4、 8 或者 16 其中之一)。


這個信號只有在突發傳輸中出現。當從機收到這個信號時,表明當前的傳輸是一個突發中的某一拍。這時,總線上的控制信號應當與之前的保持一致,地址視情況遞增或者回環。(這些信號其實是由主機決定的,從機不用考慮,只需要單方面接收即可)


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


5.5 突發操作

AMBA AHB 協議定義了四、八和十六拍突發,也有未定長度的突發和信號傳輸。協議支持增量和回環操作:


增量突發訪問連續地址並且突發中的每次傳輸地址僅是前一次地址的一個增量;
對於回環突發,如果傳輸的起始地址並未和突發(x 拍)中字節總數對齊那么突發傳輸地址將在達到邊界處回環。例如,一個四拍回環突發的字(4 字節)訪問將在16 字節邊界回環。因此,如果傳輸的起始地址是 0x34,那么它將包含四個到地址
0x34、 0x38、 0x3C 和 0x30;
突發信息通過使用 HBURST[2: 0]並且 8 種可能的類型在中定義如下:

HBURST[2:0]

類型

描述
000 SINGLE 單一傳輸
001 INCR 未指定長度的增量突發
010 WRAP4 4拍回環突發
011 INCR4 4拍增量突發
100 WRAP8 8拍回環突發
101 INCR8 8拍增量突發
110 WRAP16 16拍回環突發
111 INCR16 16拍增量突發

突發禁止超過 1KB 的地址邊界。因此重要的是主機不要嘗試發起一個將要超過這個邊界的定長增量突發。將執行單個傳輸時使用未指定長度的增量突發理解為長度為一的突發比較合理。
一個增量突發可以是任何長度,但是(長度)上限由地址不能超過 1KB 邊界這個事實限定了。
注:突發大小表示突發的節拍數量,並不是一次突發傳輸的實際字節數量。一次突發傳輸的數據總量可以用節拍數乘以每拍數據的字節數來計算,每拍字節數由 HSIZE[2: 0]指示。所有突發傳輸必須將地址邊界和傳輸大小對齊。例如,字傳輸必須對齊到字地址邊界(也就是 A[1: 0] = 00),半字傳輸必須對齊到半字地址邊界(也就是 A[0] = 0)。

當一個突發不允許完成的特定情況下對任一從機設計而言如果突發提前終止那么利用突發信息能夠采取正確的動作顯得很重要。從機能夠通過監控 HTRANS 信號決定一個突發何時提前終止並且確保在突發開始之后每次傳輸有連續或者忙的標記。如果產生一個非連續或者空閑傳輸那么這表明一個新的突發已經開始因此前一次突發一定已經終止。
如果總線主機因為失去對總線的占有而不能完成一次突發那么它必須在下一次獲取訪問總線時正確地重建突發。例如,如果一個主機僅完成了一個四拍突發的一拍那么它必須用一個未定長度突發來執行剩下的三拍突發。

下圖表示了一個四拍回環突發並且第一次傳輸伴隨一個附加等待狀態。



作為一次四拍字突發傳輸,地址將會在 16 字節邊界回環,因此傳輸到地址 0x3C之后接下來傳輸的地址是 0x30。 下圖表示了(回環突發)和增量突發的唯一不同,既是地址連續通過了 16 字節邊界,並不回環,而是遞增。


免責聲明!

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



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