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系統總線的結構示意圖:
1.2 AHB基本特性
- 分塊處理
- 單周期總線主機移交
- 單時鐘沿操作
- 無需三態門的實現方式
- 更寬的數據總線架構(64位或者128位)
- 流水線操作
- 可支持多個總線主設備(最多16個)
2. AHB總線的組成
????????AHB總線由AHB總線主機(Master)、AHB總線從機(Slave)和Infrastructure構成。Infrastructure由仲裁器、數據多路選擇器、地址控制多路選擇器、譯碼器構成。?
????????AMBA? AHB 總線協議設計使用一個中央多路選擇器互聯方案。該方案中,所有總線主機設備輸出地址和控制信號來指示它們想執行的傳輸,同時仲裁器決定哪一個主機能夠將它的地址和控制信號連通到所有的從機。當然也需要一個譯碼器來控制讀數據和響應多路信號選擇器,多路信號選擇器選中來自傳輸中所包含從機的適當信號。
????????下圖實現包含三個主機和四個從機的AMBA AHB設計的結構要求。
典型的 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 為高時表示總線上的傳輸已經完成。在擴展傳輸時該信號可能會被拉低。 |
HRESP[1:0] 傳輸響應 | 從機 | 傳輸響應給傳輸狀態提供了附加信息。提供四種不同的響應: OKEY、 ERROR、 RETRY 和 SPLIT。 |
????????AMBA? AHB也有許多信號請求支持多主機操作。這些仲裁信號用于點對點連接, 下表中后綴x用來表示信號來自模塊x。例如,一個系統中會有許多的信號HBUSREQx,比如HBUSREQarm, HBUSREQdma和HBUSREQtic。
名稱 | 來源 | 描述 |
HBUSREQx | 主機 | 從總線主機 x 傳向總線仲裁器用來表示該主機請求(控 |
HLOCKx | 主機 | 當該信號為高時表示主機請求鎖定對總線的訪問并且 |
HGRANTx | 仲裁器 | 該信號用來表示總線主機 x 目前是優先級最高的主機。 |
HMASTER[3: 0] | 仲裁器 | 這些來自仲裁器的信號表示哪個總線主機正在執行傳輸和被支持分塊傳輸的從機用來確定哪個主機正在嘗 |
HMASTLOCK | 仲裁器 | 表示當前主機正在執行一個鎖定順序的傳輸。該信號 |
HSPLITx[15: 0] | 從機(支持分塊) | 從機用這 16 位的分塊總線來指示仲裁器總線主機應該被允許重試一個分塊傳輸。 |
4. AHB總線操作概括
????????在一次 AMBA AHB 傳輸開始之前總線主機必須被授予訪問總線。這個過程開始于總線主機向仲裁器斷言一個請求信號。仲裁器指示主機何時能夠被授予使用總線。被授權的總線主機通過驅動地址和控制信號來發起一次 AMBA AHB 傳輸。這些信號提供關于地址、方向和傳輸寬度的信息,以及表示傳輸類型是否為一次突發傳輸的部分。
允許有兩種不同類型的突發傳輸:
- 增量突發,在地址邊界處不回環;
- 回環突發,在特定的地址邊界上回環。
寫數據總線用來將數據從主機傳輸到從機上,而讀數據總線用來將數據從從機傳輸到主機上。
每次傳輸包含:
- 一個地址和控制周期;
- 一個或多個數據周期。
????????地址不長期有效,所以所有從機必須在這個時段(傳輸地址時)采樣地址。然而,通過HREADY 信號可以延長數據。當該信號為低時導致在傳輸中插入等待狀態同時允許從機有額外的時間提供或者采樣數據。
?在傳輸中從機通過使用響應信號?HRESP[1: 0]來表示狀態:
OKAY 響應用來表示傳輸進展正常并且當 HREADY 變高時表示傳輸成功完成。
ERROR 響應表示發生了一個傳輸錯誤并且傳輸失敗。
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 | 主設備占用總線,但沒進行傳輸 |
01 | BUSY | 主設備占用總線,但是在突發傳輸過程中還沒有準備好進行下一次傳輸 |
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 字節邊界,并不回環,而是遞增。
下圖是8拍回環字突發傳輸:地址將在 32 字節邊界處回環因此地址 0x3C 之后的地址是 0x20。
下圖是8增量半字突發傳輸,所以地址每次增加 2 個字節并且突發在遞增因此地址連續增加通過了 16 字節邊界。
下圖是未定義長度的增量突發。
兩個半字傳輸在地址 0x20 處開始。半字傳輸地址增加為 2。 三個字傳輸在地址 0x5C 處開始。字傳輸地址增加為 4。
6 、地址譯碼
????????對于每個總線上的從機來說使用一個中央地址譯碼器提供選擇信號, HSELx。選擇信號是高位地址信號的組合譯碼,并且建議使用簡單的譯碼方案以避免復雜譯碼邏輯和確保高速操作。
????????從機只能在 HREADY 信號為高時采樣地址和控制信號以及 HSELx, HSELx 為高表示當前傳輸已經完成。在特定的情況下有可能在 HREADY 為低時采樣 HSELx,但是被選中的從機將會在當前傳輸完成后變更。
????????能夠分配給單個從機的最小地址空間是 1KB。所有總線主機必須被設計為不能執行超過 1KB 地址邊界的增量傳輸,因此確保了一個突發絕不會超過地址譯碼的邊界。
????????在系統設計中如果有包含一個存儲器映射并未完全填滿(存儲空間)的情況時應該設置一個額外的默認從機以在訪問任何不存在的地址空間時提供響應。如果一個非連續或者連續傳輸試圖訪問一個不存在的地址空間時這個默認從機應該提供一個 ERROR 響應。空閑或者忙傳輸訪問不存在的空間(默認從機)應該給出一個零等待狀態的 OKAY 響應。典型默認從機的功能將以作為中央地址譯碼器的一部分來實現。
7、從機傳輸響應
????????在主機發起傳輸后,由從機決定傳輸該如何進行。 AHB 規范中沒有做出總線主機在傳輸已經開始后取消傳輸的規定。
????????只要從機被訪問那它必須提供一個表示傳輸狀態的響應。
HREADY 信號被用來擴展傳輸并且和響應信號 HRESP[1: 0]相結合,以提供傳輸狀態。從機能夠用許多種方式來完成傳輸。它能:
- 立刻完成傳輸;
- 插入一個或者多個等待狀態以允許有時間來完成傳輸;
- 發出一個錯誤信號來表示傳輸失敗;
- 延時傳輸的完成,但是允許主機和從機放棄總線,把總線留給其他傳輸使用。
-
傳輸完成
????????HREADY 信號用來擴展一次 AHB 傳輸的數據部分。當 HREADY 信號為低時表示傳輸將被擴展而當其為高時表示傳輸完成。
????????注:每個從機必須有一個預先確定的在從機放棄總線之前插入的最大等待狀態數目,以便能夠計算訪問總線的延時。建議但不強制規定,從機不要插入多于 16 個等待狀態以阻止任何單個訪問將總線鎖定較長的時鐘周期。
-
傳輸響應
????????典型的從機將會用 HREADY 信號在傳輸中插入適當數量的等待狀態而傳輸在HREADY 為高時完成并且給出 OKAY 響應,表示傳輸成功完成。ERROR 響應被從機用來表示某種形式的錯誤條件和相關的傳輸。典型的是被用作保護錯誤,例如試圖寫一個只讀的存儲空間。SPLIT 和 RETRY 響應組合允許從機延長傳輸完成的時間,但是釋放總線給其他主機使用。這些響應組合通常僅由有高訪問延時的從機請求并且從機能夠利用這些響應編碼來確保其他主機在長時間內不被阻止訪問總線。關于SPLIT和RETRY的完整描述參見分塊和重試。
????????當從機需要插入一定數量的等待狀態優于決定將要給出何種響應時從機必須將響應驅動為 OKAY。HRESP[1: 0]的編碼、傳輸響應信號和每個響應的描述參見下表:
HRESP[1] | HRESP[0] | 響應 | 描述 |
0 | 0 | OKAY | 當 HREADY 為高表示傳輸已經成功完成。 OKAY 響 |
0 | 1 | ERROR | 該響應表示發生了一個錯誤。錯誤條件應該發信號給 |
1 | 0 | RETRY | RETRY(重試)信號表示傳輸并未完成,因此總線 |
1 | 1 | SPLIT | 傳輸并未成功完成。總線主機必須在下一次被授予訪 |
-
雙周期響應
????????僅有 OKAY 響應可以在單個周期里給出。?ERROR、 SPLIT 和 RETRY 響應需要至少兩個周期。為了完成這些響應中的任意一個,那么在倒數第二個(最后一個的前一個)周期從機驅動 HRESP[1: 0]以表示 ERROR、 RETRY 或者 SPLIT ,并同時驅動 HREADY 為低以給傳輸擴展一個額外的周期。在最后一個周期 HREADY 被驅動為高電平以結束傳輸,同時HRESP[1: 0]保持驅動以表示 ERROR、 RETRY 或者 SPLIT。
????????如果從機需要兩個以上的周期以提供 ERROR、 SPLIT 或者 RETRY 響應,那么額外的等待狀態可能會在傳輸開始時被插入。在這段時間 HREADY 信號將為低電平同時響應必須被設為 OKAY。
????????需要雙周期響應是因為總線通道的本質特征。在從機開始發出 ERROR、 SPLIT 或者RETRY 中任何一個響應時,接下來傳輸的地址已經廣播到總線上了。雙周期響應允許主機有足夠的時間來取消該地址并且在開始下一次傳輸之前驅動 HTRANS[1: 0]為空閑傳輸。
????????對于 SPLIT 和 RETRY 響應,接下來的傳輸必須取消因為在當前傳輸完成之前禁止下一次傳輸發生。然而,對于 ERROR 響應,由于當前傳輸不被重復,所以可以選擇完成接下來的傳輸。
下圖表示了一次RETRY操作的例子。
主機從地址 A 發起傳輸;
這次傳輸在接收到響應之前主機將地址移動到 A + 4;
從機在地址 A 不能立刻完成傳輸因此從機發出一個 RETRY 響應。該響指示主機在
地址 A 的傳輸無法完成并且在地址 A + 4 的傳輸被取消而用空閑傳輸替代。
下圖表示了一個傳輸中從機請求一個周期來決定將要給出的響應(在HRESP為OKAY的時間段),之后從機用一個雙周期的ERROR響應結束了傳輸。
-
分塊與重試(split and retry)
????????分塊和重試響應給從機提供了在無法立刻給傳輸提供數據時釋放總線的機制。這兩種機制都允許在總線上結束傳輸因此允許更高優先級的主機能夠訪問主機。
????????分塊(SPLIT)和重試(RETRY)的不同之處在于仲裁器在發生 SPLIT 和 RETRY 后分配總線的方式:
對 RETRY 而言仲裁器將繼續使用常規優先級方案因此只有擁有更高優先級的主機將獲準訪問總線;
對于 SPLIT 傳輸而言仲裁器將調整優先級方案以便其他任何主機請求總線即能獲得訪問(總線),即使是優先級較低的主機。為了完成一個 SPLIT 傳輸從機必須通知仲裁器何時數據可用。
????????SPLIT 傳輸增加了仲裁器和從機的復雜性,但是卻有可以完全釋放總線給其他主機使用的優點,但是 RETRY(響應)的情況就只允許較高優先級的主機使用總線。
????????總線主機應該以同樣的方式來對待 SPLIT 和 RETRY(響應)。主機應該繼續請求總線并嘗試傳輸直到傳輸成功完成或者遇到 ERROR 響應時終止。
-
數據總線
????????為了不使用三態驅動而又允許執行AHB系統所以要求分開讀和寫數據總線。最小的數據寬度規定為 32 位,但是總線寬度卻可以增加,參見關于AHB數據總線的位寬這一節中的描述。
????????寫數據總線在寫傳輸期間由總線主機驅動。如果傳輸是擴展的那么總線主機必須保持數據有效直到傳輸完成,由 HREADY 為高表示。
? ? ? =所有傳輸必須對齊到和傳輸大小相等的地址邊界。例如,字傳輸必須對齊到字地址邊界(也就是 A[1: 0] = 00),半字傳輸必須對齊到半字地址邊界(也就是 A[0] = 0)。
????????對于寬度小于總線寬度的傳輸,例如一個在 32 位總線上的 16 位傳輸,那么總線主機僅需要驅動相應的字節通道。從機必須負責從正確的字節通道選擇寫數據。 下面兩個表中分別表示了小端系統和大端系統中哪個字節通道有效。如果有要求,這些信息可以在更寬的總線應用中擴展。傳輸大小小于數據總線寬度的突發傳輸將在每拍突發中有不同有效字節通道。
????????有效字節通道取決于系統的端結構,但是 AHB 并不指定要求的端結構。因此,總線上所有主機和從機的端結構相同這點很重要。
????????讀數據總線在讀傳輸期間由合適的從機驅動。如果從機通過拉低 HREADY 擴展讀傳輸那么從機只需要在傳輸的最后一個周期提供有效數據,由 HREADY 為高表示。
????????對于寬度小于總線寬度的傳輸從機僅需要在有效的字節通道提供有效數據,如下兩個表所示。總線主機負責從正確的字節通道中選擇數據。
????????當傳輸以 OKAY 響應完成時從機僅需提供有效數據。 SPLIT、 RETRY 和 ERROR 響應不需要提供有效的讀數據。
?????????為了使系統正確運行事實上所有模塊都是相同端結構的并且任何數據通路或者橋接器也是相同端結構的。
????????不支持動態端結構,因為在大多數嵌入式系統中,這將導致明顯的硅晶片較高,也就是多余的。對于模塊設計者而言建議只有應用場合非常寬泛的模塊才應該被設計為雙端結構的,通過一個配置引腳或者內部控制位來選擇端結構。對于更多的特定用途的模塊,固定端結構為大端或者小端將產生體積更小、功耗更低、性能更高的接口。
8、仲裁
????????仲裁機制用來確保任意時刻只有一個主機能夠訪問總線。仲裁器的功能是檢測許多不同的使用總線的請求和決定當前請求總線的主機中哪一個的優先級最高。仲裁器也接收來自從機需要完成 SPLIT 傳輸的請求。
????????任何沒有能力執行 SPLIT 傳輸的從機不需要了解仲裁的過程,除非它們需要檢測因為總線所有權改變而導致突發傳輸不能完成的情況。
以下給出對每個仲裁信號的簡短描述:
- HBUSREQx 被總線主機用來請求訪問總線的總線請求信號。每個總線主機都有自己的連接到仲裁器的 HBUSREQx 信號并且任何一個系統中都可以有高達 16 個獨立的總線主機。
- HLOCKx 由主機在請求總線的同時時斷言的鎖定信號。這提示仲裁器主機正在執行一系列不可分割的傳輸并且一旦鎖定傳輸的第一個傳輸已經開始仲裁器不能授予任何其他主機訪問總線。 HLOCKx 必須在涉及到的地址被尋址到之前至少斷言一個周期,以防止仲裁器改變授予信號。
- HGRANTx 授予信號由仲裁器產生并且表示相關主機是當前請求總線的主機中優先級最高的主機,(優先)考慮鎖定傳輸和 SPLIT 傳輸。
- 主機在 HGRANTx 為高時獲取地址總線的所有權并且在HCLK 的上升沿 HREADY 為高電平。
- HMASTER[3: 0] 仲裁器使用 HMASTER[3: 0]信號表示哪一個主機當前被授予總線并且該信號可被用來控制中央地址和控制多路選擇器。有 SPLIT 傳輸能力的從機也可以請求主機的序號以便它們能夠提示仲裁器哪個主機能夠完成一個 SPLIT 傳輸。
- HMASTLOCK 仲裁器通過斷言 HMASTLOCK 信號指示當前傳輸是一個鎖定序列的一部分,該信號和地址以及控制信號有相同的時序。
- HSPLIT[15: 0] 這 16 位有完整分塊能力的總線被有分塊(SPLIT)能力的從機用來指示哪個總線主機能夠完成一個 SPLIT 傳輸。仲裁器需要這些信息以便于授予主機訪問總線完成傳輸。
8.1請求總線訪問
????????總線主機使用 HBUSREQx 信號來請求訪問總線并且可以在任何周期請求總線。仲裁器將在時鐘的上升沿采樣(主機的)請求然后使用內部優先級算法來決定哪個主機將會下一個獲得訪問總線。
????????如果主機請求鎖定訪問(總線),那么主機也必須斷言 HLOCKx 信號來提示仲裁器其它主機不應該被授予總線。
????????當一個主機被授予總線并且正在執行一個固定長度的突發,那么就沒有必要繼續請求總線以便完成傳輸。仲裁器監視突發的進程并且使用 HBURST[2: 0]信號來決定主機請求了多少個輸入。如果主機希望在當前正在進行的傳輸之后執行另一個突發那么主機需要在突發中重新斷言請求信號。
????????如果主機在一次突發當中失去對總線的訪問那么它必須重新斷言 HBUSREQx 請求線以重新獲取訪問總線。
????????對未定長度的突發主機應該繼續斷言請求直到已經開始最后一次傳輸。在未定長度的突發結束時仲裁器不能預知何時改變仲裁。
????????對于主機而言有可能當它未申請總線時卻被授予總線。這可能在沒有主機請求總線并且仲裁器將訪問(總線)授予一個默認的主機時發生。因此,如果一個主機并沒請求訪問總線那么它驅動傳輸類型 HTRANS 來表示空閑傳輸顯得很重要。
8.2授予總線訪問
????????仲裁器通過斷言適當的 HGRANTx 信號來表示請求總線的主機中哪個是當前優先級最高的。當前傳輸完成后,由 HREADY 為高時所表示,那么主機將被授予(總線)并且仲裁器將改變 ????????HMASTER[3: 0]信號來表示總線主機序號。
下圖表示了當所有傳輸都為零等待狀態并且HREADY信號為高時的處理過程。
下圖表示了在總線移交時等待狀態的影響。
????????數據總線的所有權延時在地址總線的所有權之后。一次傳輸無論何時完成(由HREADY為高時所表示)然后占有地址總線的主機才能使用數據總線并且將繼續占有數據總線直到傳輸完成。 ????????下圖表示當在兩個總線主機之間移交總線時數據總線的所有權是如何轉移的。
????????下圖表示一個仲裁器如何能在一次突發傳輸結束時移交總線的例子。
????????仲裁器在倒數第二個(最后一個之前的)地址被采樣時改變 HGRANTx 信號。新的HGRANTx 信息將在突發的最后一個地址被采樣的同時被采樣。
????????下圖表示了HGRANTx和HMASTER信號是如何在系統中使用的。
注:因為使用了中央多路選擇器,每個主機可以立刻輸出它希望執行的地址而不需要等到被授予總線。HGRANTx 信號是僅被主機用來決定它何時擁有總線并因此需要考慮何時讓地址被合適的從機采樣。HMASTER 總線的延時版本被用來控制寫數據多路選擇器。
8.3 突發提前終止
????????通常仲裁器在突發傳輸結束之前不會將總線移交給一個新的主機。但是,如果仲裁器決定突發必須被提前終止以防止過長的總線訪問時間那么它可能會在一個突發完成之前將(總線)授予轉移給另外一個總線主機。
????????如果主機在突發傳輸中間失去了對總線的所有權那么它必須重新斷言總線(請求)以完成突發。主機必須確保 HBURST 和 HTRANS 信號都被更新以反映主機不再執行一個完整的 4、 8 或者 16 拍的突發。例如,如果一個主機僅能完成一個 8 拍突發的 3 個傳輸,那么當它重新獲得總線時必須使用一個合法的突發編碼來完成剩下的 5 個傳輸。主機可以使用任何合法組合,因此無論是5 拍未定長度的突發或者是 4 拍固定長度的突發然后跟上一個單拍未定長度的突發都是可以的。
8.4 鎖定傳輸
????????仲裁器必須監視來自各個主機的 HLOCKx 信號以確定何時主機希望執行一個鎖定連續傳輸。之后仲裁器負責確保沒有其他總線主機被授予總線直到鎖定傳輸完成。
????????在一個連續鎖定傳輸之后,仲裁器將總是為一個附加傳輸保持總線主機被授予(總線)以確保鎖定序列的最后一個傳輸成功完成,并且沒有接收到 SPLIT 或者 RETRY 響應。因此建議但不規定,主機在任何鎖定連續傳輸之后插入一個空閑傳輸,以提供給仲裁器在著手另外一個突發傳輸之前改變(總線授予)的機會。
????????仲裁器也負責斷言 HMASTLOCK 信號, HMASTLOCK 信號和地址以及控制信號有相同的時序。該信號指示每個從機當前傳輸是鎖定的因此必須在其他主機被授予總線之前被處理掉。
8.5 默認總線主機
????????每個系統必須包含一個默認總線主機,如果所有其他主機不能使用總線時該主機被授予總線。當被授予總線時,默認主機必須只能執行空閑(IDLE)傳輸。
????????如果沒有請求總線那么仲裁器可以授予默認主機(訪問總線)或者訪問總線延時較低的主機將因此受益而被授予總線。
????????授予默認主機訪問總線也為確保在總線上沒有新的傳輸開始提供了一個有用的機制并且也是預先進入低功耗操作模式的有用步驟。
????????如果其他所有主機都在等待 SPLIT 傳輸完成時默認主機必須被授予總線。
8.6 分塊傳輸
????????分塊傳輸通過根據從機的響應操作來分離(或者分塊)主機操作以給從機提供地址和合適的數據,提高了總線的總體使用率。
????????當傳輸產生時如果從機認為傳輸的執行將占據大量的時鐘周期那么從機能夠決定發出一個 SPLIT 響應。該信號提示仲裁器嘗試這次傳輸的主機不應該被授予訪問總線,直到從機表示它準備好了完成傳輸時。因此仲裁器負責監視響應信號并且在內部屏蔽已經是 SPLIT傳輸主機的任何請求。
????????在傳輸的地址相位期間仲裁器在 HMASTER[3: 0]產生一個標記,或者總線主機序號,以表示正在執行傳輸的主機。任何一個發出 SPLIT 響應的從機必須表示它有能力完成這個傳輸,并且通過記錄 HMASTER[3: 0]信號上的主機序號來實現。之后,當從機能夠完成傳輸時,它就根據主機序號在從從機到主機的 HSPLITx[15: 0]信號上斷言適當的位。然后仲裁器使用這個信息來解除來自主機請求信號的屏蔽并且主機將被及時授予訪問總線以重試傳輸。仲裁器在每個時鐘周期采樣 HSPLITx 總線因此從機只需要斷言適當的位一個周期以便仲裁器能夠識別。
????????如果系統中有多個具有 SPLIT 能力的從機那么每個從機的 HSPLITx 總線可以邏輯或在一起以提供給仲裁器單個 HSPLIT 總線。
????????大多數系統中并沒有用到最大 16 個總線主機的能力因此仲裁器僅要求一個位數和總線主機數量一樣的 HSPLIT 總線。但是,建議所有有 SPLIT 能力的從機被設計成支持高達 16個主機。
SPLIT 傳輸的基本步驟如下:
1、 主機以和其他傳輸一樣的方式發起傳輸并發出地址和控制信息;
2、 如果從機能夠立刻提供數據那么它可以馬上提供數據。如果從機確認獲取數據可能會占據較多的周期那么它給出一個 SPLIT 傳輸響應;
每次傳輸中仲裁器廣播一個序號或者標記,表示哪個主機正在使用總線。從機必須記錄該序號,以便用來在之后的一段時間重新發起傳輸;
3、 仲裁器授予其他主機使用總線并且 SPLIT 響應的動作允許主機移交總線。如果所有其他主機也接收到一個 SPLIT 響應那么默認主機將被授予總線;
4、 當從機準備完成傳輸那么它斷言 HSPLITx 總線中的適當位給仲裁器以指示哪個主機應該被重新授予訪問總線;
5、 仲裁器每個時鐘周期監視 HSPLITx 信號,并且當 HSPLITx 中的任何一位被斷言仲裁器將恢復對應主機的優先級;
6、 最后仲裁器將授予(SPLIT 的)主機總線,因此主機能重新嘗試傳輸。如果一個優先級更高的主機正在使用總線的話這可能不會立刻發生;
7、 當傳輸終于開始后從機以一個 OKAY 傳輸響應來結束(傳輸)。
多重分塊傳輸
????????總線協議只允許每個總線主機有一個未完成的處理。如果任何主機模塊能夠處理多于一個未完成的處理,那么它需要為能夠處理的每個未完成處理設置一個額外的請求和授予信號。在協議級上一個信號模塊可以表現為許多不同總線主機,每個主機只能有一個未完成的處理。
????????然而,可能一個有 SPLIT 能力的從機會接收比它能并發處理的(傳輸)還要多的傳輸請求。如果這種情況發生那么從機可以不用記錄對應傳輸的地址和控制信息而僅需要記錄主機序號就發出 SPLIT 響應。之后從機可以通過斷言 HSPLITx 總線中適當的位給之前被給出SPLIT 響應的所有主機來表示它能處理另外一個傳輸,但是從機沒有記錄地址和控制信息。之后仲裁器能夠重新授予這些主機訪問總線并且它們將重試傳輸,給出從機要求的地址和控制信息。這表示一個主機可以在它最終完成它要求的傳輸之前被多次授予總線。
預防死鎖
????????SPLIT 和 RETRY 傳輸響應都必須在使用中注意預防總線死鎖。單個傳輸決不會鎖定AHB,因為每個從機必須被設計成能在預先確定的周期數內完成傳輸。但是,如果多個不同主機試圖訪問同一個從機,從機發出 SPLIT 或者 RETRY 響應以表示從機不能處理,那么就有可能發生死鎖。
????????從機可以發出 SPLIT 傳輸響應,通過確保從機能夠承受系統中每個主機(最多 16 個)的單個請求來預防死鎖。從機并不需要存儲每個主機的地址和控制信息,它只需要簡單的記錄傳輸請求已經被處理和 SPLIT 響應已經發出的事實即可。最后所有主機將處在低優先級然后從機可以有次序的來處理這些請求,指示仲裁器正在服務于哪個請求,因而確保了所有請求最終都被服務。
????????當從機有許多未完成的請求時它可能以任何順序(隨機的)來選擇處理這些請求,盡管從機需要注意鎖定傳輸必須在任何其他傳輸繼續之前完成。
????????從機使用 SPLIT 響應而不用鎖存地址和控制信息顯得非常合法(合適)。從機僅需要記錄特定主機做出的傳輸嘗試,并且稍后的時間段從機通過指示自己已經準備好完成傳輸就能獲取地址和控制信息。主機將被授予總線并將重新廣播傳輸,允許從機鎖存地址和控制信息并且立刻應答數據,或者發出另外一個 SPLIT 響應,如果還需要額外的一些周期的話。理想情況下從機不應該有多于它能支持的未完成傳輸,但是要求支持這種機制以防止總線死鎖。
????????發出 SPLIT 響應的從機必須一次只能被一個主機訪問。在總線協議中并沒有強制而在系統體系結構中應該確保這一點。大多數情況下發出 RETRY 響應的從機必須是一次只能被一個主機訪問的外設,因此這會在一些更高級協議中得到確保。
????????硬件保護和多主機訪問 RETRY(響應)的從機相違背并不是協議中的要求,但是可能會在下文描述的設計中得到執行。僅有的總線級要求是從機必須在預先確定的時鐘周期內驅動 HREADY 為高。
????????如果要求硬件保護那么這可以被 RETRY(響應)的從機自己執行。當一個從機發出一個 RETRY 信號后它能夠采樣主機序號。在這之后和傳輸最終完成之前 RETRY 的從機可以檢查做出的每次傳輸嘗試以確保主機序號是相同的。如果從機發現主機號不一致那么它可以選擇下列的行動方式:一個錯誤響應;一個信號給仲裁器;一個系統級中斷;一個完全的系統復位。
8.7分塊傳輸的總線移交
協議要求主機在接收到一個SPLIT或者RETRY響應后立刻執行一個空閑傳輸以允許總線轉移給另外一個主機。 圖 3.20表示了發生一個分塊(SPLIT)傳輸的順序事件。
需要注意以下的要點:
????????傳輸的地址在時間 T1 之后出現在總線上。在時鐘沿 T2 和 T3 后從機返回兩個周期的 SPLIT 響應;在第一個響應周期的末尾,也就是 T3,主機能夠檢測到傳輸將會被分塊,因此(主機)改變接下來的傳輸控制信號以表示一個空閑傳輸; 同樣也在時間 T3 處仲裁器采樣響應信號并確定傳輸已經被分塊。之后仲裁器可以調整仲裁優先權并且在接下來的周期改變授予信號,這樣新的主機能夠在時間 T4后被授予地址總線;新主機可以保證立刻訪問(總線),因為空閑傳輸總是在一個周期內完成。