資料來源:https://wenku.baidu.com/view/bbacbd36e109581b6bd97f19227916888586b999.html
本內容只是根據上面的資料做了整理
AMBA總線(一)
發展史
- AMBA 1.0
- ASB 和 APB
- AMBA 2.0
- AHB, ASB 和 APB
- AMBA 3.0
- AMBA Advanced eXtensible Interface (AXI)
簡介
AHB
- 高速總線,高性能
- 流水線操作
- 可支持多個總線主設備(最多16個)
- 支持burst傳輸
- 總線帶寬:8、16、32、64、128bits
- 上升沿觸發操作
- 對於一個新設計建議使用AHB
AHB 組成
- AHB 主設備(master)
- 初始化一次讀/寫操作
- 某一時刻只允許一個主設備使用總線
- uP、DMA、DSP、LCDC …
- AHB從設備(slave)
- 響應一次讀/寫操作
- 通過地址映射來選擇使用哪一個從設備
- 外部存儲器控制器EMI、APB bridge、UART、 …
- AHB仲裁器(arbiter)
- 允許某一個主設備控制總線
- 在AMBA協議中沒有定義仲裁算法
- AHB譯碼器(decoder)
- 通過地址譯碼來決定選擇哪一個從設備
ASB
- 高速總線
- 流水線操作
- 支持多個總線主設備
- 支持burst傳輸
- 總線帶寬:8、16、32bits
- 三態、雙向總線
- (不適於做DFT)
- 下降沿或者上升沿觸發
APB
- 低速總線、低功耗
- 接口簡單
- 在Bridge中鎖存地址信號和控制信號
- 適用於多種外設
- 上升沿觸發
APB 組成
- AHB2APB Bridge
- 可以鎖存所有的地址、數據和控制信號
- 進行二級譯碼來產生APB從設備選擇信號
- APB總線上的所有其他模塊都是APB從設備
- 不是流水線方式
- 接口是零功耗
AHB
AHB總線互聯

基本信號

- HRESETn
- 低電平有效
- HADDR[31:0]
- 32位系統地址總線
- HWDATA[31:0]
- 寫數據總線,從主設備寫到從設備
- HRDATA[31:0]
- 讀數據總線,從從設備讀到主設備
- HTRANS
- 指出當前傳輸的狀態
- NONSEQ、SEQ、IDLE、BUSY
- HSIZE
- 指出當前傳輸的大小
- HBURST
指出傳輸的burst類型 - HRESP
- 從設備發給主設備的總線傳輸狀態
- OKAY、ERROR、RETRY、SPLIT
- HREADY
- 高:從設備指出傳輸結束
- 低電平:從設備需延長傳輸周期
AHB基本傳輸
- 兩個階段
- 地址周期,只有一個cycle
- 數據周期,由HREADY信號決定需要幾個cycle
- 流水線傳送
- 先是地址周期,然后是數據周期
一次無需等待狀態的簡單傳輸

如果slave沒有准備好?
需要兩個等待周期的簡單傳輸

根據傳輸規則,slave不能插入超過16個等待周期!
流水線傳輸

- HBURST指定了傳輸burst的類型,分為:
- Single Transfer
- 增量傳輸,不指定長度
- 4-拍
- 8-拍
- 16-拍
如果傳輸過程中從設備忙碌,可以通過HREADY信號控制,但是如果主設備忙碌呢? -- 通過HTRANS控制
傳輸類型
- HTRANS[1:0]:控制傳輸類型
- 四種類型:IDLE、BUSY、NONSEQ、SEQ
- 00:IDLE
- 主設備占用總線,但沒進行傳輸
- 兩次burst傳輸中間主設備可發IDLE
- 01:BUSY
- 主設備占用總線,但是在burst傳輸過程中還沒有准備好進行下一次傳輸
- 一次burst傳輸中間主設備可發BUSY
- 10:NOSEQ
- 表明一次單個數據的傳輸或者一次burst傳輸的第一個數據地址和控制信號與上一次傳輸無關
- 11:SEQ
- 表明burst傳輸接下來的數據地址和上一次傳輸的地址是相關的

其他信號
-
HWRITE
- 高電平:寫
- 低電平:讀
-
HSIZE[2:0]
- 000:8bits 100:128bits
- 001:16bits 101:256bits
- 010:32bits 110:513bits
- 011:64bits 111:1024bits
- 最大值受總線的配置所限制
- 通常使用32bits(010)
- HADDR的地址必須由HSIZE作為最小單位。
-
HPROT[3:0]
- HPROT[0]: OPCODE/DATA
- HPROT[1]: USER/PRIVILGED
- HPROT[2]: Bufferable/Non-Bufferable
- HPROT[3]: Cacheable/Non-Cacheable
AHB 突發傳輸
- AHB Burst 操作
-
4beat、8beat、16beat、單個字節傳輸、未定義長度的增量傳輸
-
支持incrementing(增量)和wrapping兩種burst傳輸
-
Incrementing burst
- 地址是上一次的傳輸地址加1個傳輸單位
-
Wrapping burst
- 例:4beat的wrapping burst 字傳輸(4byte):
- 0x34 -> 0x38 -> 0x3c -> 0x30
- 應用場合:Cache填充
-
地址計算示例
根據HSIZE和HBURST來計算地址
例:起始地址是0x48,HSEZE=010(32bits)

Burst類型: INCR8

Burst類型: WRAP8

Burst類型:INCR4

Burst類型:WRAP4

Burst類型:未定義長度的

LDM(Load Multiple instruction) AHB Activity
多指令加載:

Burst 傳輸不能超過1k邊界
-
Burst傳輸不能穿越1K邊界
- 一個從設備最小的地址間隙是1KB
- NONSEQ -> SEQ -> 1KB Boundary -> NONSEQ -> SEQ …
-
主設備不能試圖開始一個可能穿越1K邊界的INCR傳輸

地址譯碼
-
HSELx:選擇從設備
- 指出由主設備所選擇的從設備
-
由地址譯碼器來提供選擇信號
-
一個從設備應該至少占用1KB的存儲空間
-
需要一個額外的缺省從設備來映射其他的存儲地址

從設備響應
-
所訪問的從設備必須響應這次傳輸
-
從設備可能返回的響應:
- 完成這次傳輸
- 插入等待狀態(HREADY信號)
- 發出錯誤信號表示這次傳輸失敗
- 分離傳輸,使得總線可用於其他傳輸(SPLIT)
從設備的響應信號
-
HREADY:transfer done
-
HRESP[1:0]:transfer response
- 00:OKAY 成功(單周期響應)
- 01:ERROR 失敗(兩周期響應)
- 10:RETRY 傳輸未完成,請求主設備重新開始一個傳輸(兩周期響應)
- 11:SPLIT 傳輸未完成,請求主設備分離一次傳輸(兩周期響應)
總線的流水特性需要從設備兩個周期的響應。可以使得主設備有足夠的時間處理下一次傳輸。
Retry 響應

可以看到,主設備在從設備忙時發送了兩次傳輸,Retry信號跨了兩個周期,第二個周期后總線開始新的一次傳輸。
-
RETRY和SPLIT的主要區別在於仲裁的方式
- RETRY:arbiter會繼續使用通常的優先級
- SPLIT:arbiter會調整優先級方案以便其他請求總線的主設備可以訪問總線
-
總線主設備應該用同樣的方式處理RETRY響應和SPLIT響應
Locked 傳輸

-
被鎖的傳輸序列不能被打斷
-
HLOCK信號表示下一次的傳輸時被鎖傳輸
- 上圖中A和B信號時被鎖住的,不能分開
-
ARM 處理器只在 SWP 指令中使用HLOCK
總線傳輸的其他細節放到第二部分。