AMBA
Advanced Microcontroller Bus Architecture,片上總線標准
- AMBA 1.0
- ASB:Advanced System Bus
- APB:Advanced Peripheral Bus
- AMBA 2.0
- AHB:Advanced High-performance Bus
- AMBA 3.0
- AXI:Advanced eXtensible Interface
ASB
- 高速總線
- 流水線操作
- 支持多個總線主設備
- 支持burst傳輸
- 總線帶寬:8、16、32bit/s
- 三態、雙向總線(不適合做DFT)
- 上升沿或下降沿觸發
APB
- 低速總線、低功耗
- 接口簡單
- 在Bridge中鎖存地址信號和控制信號
- 適用於多種外設
- 上升沿觸發
AHB
- 高速總線,高性能
- 2級流水線操作
- 支持最多16個總線主設備
- 支持burst傳輸
- 總線帶寬:8、16、32、64、128bit/s
- 上升沿觸發
AHB組成部分
-
AHB主設備master
- 初始化一次讀寫操作
- 某一時刻只允許一個主設備使用總線
- CPU、DMA、DSP、LCDC...
-
AHB從設備slave
- 響應一次讀寫操作
- 通過地址映射來選中使用哪一個從設備
- 外部存儲器控制器EMI、APB bridge
-
AHB仲裁器arbiter
- 允許某一個主設備控制總線
- AMBA協議中沒有定義仲裁算法
-
AHB譯碼器decoder
- 通過地址譯碼決定選中哪一個從設備
-
AHB2APB Bridge
- 可以鎖存所有的地址、數據和控制信號
- 進行二級譯碼來產生APB從設備選中信號
-
APB總線上的所有其他模塊都是APB從設備
-
其他問題
- 與工藝無關
- 沒有電氣特性
- 僅在時鍾周期級定義時序(時序參數依賴於工藝和頻率)
AHB信號
Name | Source | Description |
---|---|---|
HCLK | Clock source | Bus clock |
HRESETn | Reset Controller | Reset |
HADDR[31:0] | Master | Address bus |
HTRANS[1:0] | Master | Transfer type(IDLE、BUSY、SEQ、NONSEQ) |
HWRITE | Master | Transfer direction |
HPROT[3:0] | Master | Protection control(很少用) |
HWDATA[31:0] | Master | Write data bus |
HSELx | Decoder | Slave select |
HRDATA[31:0] | Slave | Read data bus |
HREADY | Slave | Transfer done |
HRESP[1:0] | Slave | Transfer sesponse(Status) |
-
HRESETn
- 低電平有效
-
HADDR[31:0]
- 32位系統地址總線
-
HWDATA[31:0]
- 寫數據總線,從Master寫到Slave
- 位寬為 32,即 4 Byte,因此地址每次增加 4
-
HRDATA[31:0]
- 讀數據總線,從Slave讀到Master
- 位寬為 32,即 4 Byte,因此地址每次增加 4
-
HTRANS:指出當前傳輸的status
- 00 IDLE
- Master占用主線,但沒進行傳輸
- 兩次burst傳輸中間,Master發出IDLE
- 01 BUSY
- Master占用主線,但還沒准備好下一次傳輸
- 一次burst傳輸中間,Master發出BUSY
- 10 NONSEQ
- 表明首次數據的傳輸
- 地址和控制信號與上一次傳輸無關
- SEQ
- 表明burst接下來的傳輸
- 地址和上一次傳輸相關
- 00 IDLE
-
HSIZE:指出當前傳輸的大小
-
HBURST:指出傳輸的 burst 類型
- 0、4、8、16......
- INCR突發即不停止就一直突發
- burst傳輸不可跨越1K邊界,因為從設備的最小地址間隙是1KB(400),INCR的burst都不用改,只需要HTRANS的SEQ改成NSEQ就行
-
HRESP
- Slave的總線傳輸狀態
- OKAY、ERROR、RETRY、SPLIT
-
HREADY
- 高:Slave指出能夠進行傳輸
- 低:Slave需延長時間接收
- 不能超過16個時鍾周期
-
兩個階段
- 由HREADY信號決定需要幾個Cycle
- 分為地址周期和數據周期
-
流水線pipeline
- 先地址,然后數據
-
HWRITE:讀寫控制
- 高:寫
- 低:讀
-
HSIZE[2:0]
- 000-111,對應8-1024
- 最大值的選擇取決於總線配置
- 通常使用32bit/s
-
HPROT
- 很少用,不看
AHB Slave短時間無法響應則HREADY拉低
AHB Slave長時間無法響應則發出Retry信號
WRAP說明
-
WRAP4:到 0x10(16)的倍數就回環
-
WRAP8:到 0x20(32)的倍數就回環
-
WRAP16:到 0x40(64)的倍數就回環
從設備響應信號
- RETRY和SPLIT
- RETRY:下次請求,本次Master還是一樣優先級
- SPLIT:下次請求,本次Master優先級會降低
- 兩周期響應原因
- 流水線特性,使得Master有足夠時間處理下一次傳輸
- Split傳輸過程
- 由主設備開始傳輸。
- 如果從設備需要多個周期才能獲取數據,則從設備給出一個SPLIT傳輸響應。從設備記錄主設備號: HMASTER。接着仲裁器改變主設備的優先級。
- 仲裁器grant其他的主設備,總線主設備移交。
- 當從設備准備結束本次傳輸,將設置給仲裁器的HSPLITx信號的相應位。
- 仲裁器恢復優先級。
- 仲裁器grant主設備,這樣主設備可以重新開始傳輸。
- 結束。
仲裁信號
Name | Source | Description | 說明 |
---|---|---|---|
HBUSREQx | Master | Bus request | 每個Master都會發出 |
HLOCKx | Master | Locked transfers | 鎖定此次傳輸 |
HGRANTx | Arbiter | Bus grant | 指出Master x可訪問總線 |
HMASTER[3:0] | Arbiter | Master number | Master的ID |
HMASTLOCK | Arbiter | Locked sequence | Master正在進行鎖定 |
HSPLITx[15:0] | Slave(SPLIT-capable) | Split completion request | 選擇哪個master允許重試 |
- 對於固定長度的burst傳輸,不必持續請求總線
- 對於未定義長度的burst傳輸,主設備應該持續送出HBUSREQ信號,直到開始最后一次傳輸
- 如果沒有主設備請求總線,則給缺省主設備grant信號,且HTRANS=IDLE
- 建議主設備在鎖定總線傳輸結束之后插入IDLE傳輸,以重新仲裁優先級。
AHB-lite
- 單個Master
- 不需要HBUSREQ
- 不需要HGRANT
- 簡單Slave
- 不需要retry
- 不需要split
- 兼容標准AHP協議
- 允許更簡單的design
APB
AHB是機動車道,APB可以看成是非機動車道
慢速設備也可以走AHB機動車道
為了不影響AHB的效率
Name | Description |
---|---|
PCLK | Bus clock |
PRESETn | APB reset |
PADDR[31:0] | APB address bus |
PSELx | APB select |
PENABLE | APB strobe |
PWRITE | APB transfer direction |
PRDATA[31:0] | APB read data bus |
PWDATA[31:0] | APB write data bus |
- 非流水線pipeline
- 最快2個cycle才能讀寫一個數據
- PSEL起來
- 然后PENABLE起來