# AMBA ###### tags: `Digital IC Design` [點我回主頁](https://hackmd.io/@derek8955/BkK2Nb5Jo/https%3A%2F%2Fhackmd.io%2Fc%2FBkK2Nb5Jo%2Fedit%3Fedit) Outline --- - AMBA Introduction - AHB 2.0 - APB 2.0 - AXI 3.0 ~AXI 5.0 - AHB other version - APB other version AMBA Introduction --- AMBA(Advanced Microcontroller Bus Architecture)是由ARM開發的SoC Bus protocol,用於實現不同模塊之間的高校通訊。本文僅介紹AHB, APB. AHB(Advanced High-Performance Bus) 高速 BUS, ARM當初訂定的目的為讓它能夠用來當作SOC 的 on-chip system bus,它的特性包括: - 支持多個Master-Slave 設備,至多16個master(同個時間點上,只允許一個主設備使用Bus) - 支持 burst 傳輸 - bandwidth 8~128bits - Split transcation(後面會提到) APB 低速 BUS, - 接口簡單,主要應用於peripherial外設 - APB上的設備都是Slave,僅APB Bridge為master - 沒有 pipeline設計,傳輸過程永遠需要2個cycle以上 || |:---:| |典型AMBA系統| AHB由以下四種組成 - AHB master(CPU、DMA...等): 發起1次讀/寫操作; 當前時刻只允許一個主設備使用 BUS - AHB slave(Memory、Bridge...等): 響應一次讀寫操作; 通過address mapping選擇要使用哪個slave - AHB arbiter: 允許某一個 master 設備控制 BUS - AHB decoder: address deocoder,決定選擇接收哪個 slave 設備 APB由以下兩種組成 - AHB2APB Bridge - APB Slave > AXI 3.0 可以看這篇[文章](https://www.cnblogs.com/xianyuIC/p/17372573.html) > AXI lite 可以看這篇[文章](https://www.cnblogs.com/xianyuIC/p/11609358.html) > AXI 5.0 可以看這篇[文章](https://www.cnblogs.com/xianyuIC/p/17937602) AHB 2.0 操作流程 --- Step 1: 有需要占用BUS的master向arbiter發出請求,arbiter授權給指定的master Step 2: master開始傳輸,發送地址和控制訊號。選中的 slave 響應 Step 3: decoder根據地址與控制訊號確定哪個slave與master進行數據通訊,直到HREADY拉高,表示數據傳輸完畢 || |:---:| |AHB 操作方塊圖| |HADDR: Write Address. HWDATA: Write Data. HRDATA: Read Data.| <font color="Red">Note: 傳輸階段有分兩個phase,address phase(only one cycle) and data phase(透過hready控制) </font> || |:---:| |無需等待,Data Phase 僅一個週期。在HREADY通知為High時,代表transfer已完成,slave必須回應OKAY or ERROR...等| || |:---:| |等待傳輸,可以發現效率很低| || |:---:| |多重傳輸pipeline| AHB 2.0 Signal --- | Name | Source | Description | | -------- | -------- | -------- | | HCLK | Clock Source | Bus Clock(Positive Edge Trigger) | |HRESETn|Reset Controller| Bus Reset(Active Low)| |HADDR[31:0]|Master|32-bit address bus| |HTRANS[1:0]|Master|表示目前傳輸的type,NONSEQUENTIAL(非連續傳輸), SEQUENTIAL(連續傳輸), IDLE or BUSY.| |HWRITE|Master|表示目前傳輸方向,High表示slave接收資料| |HSIZE[2:0]|Master|表示傳輸大小,最高支持1024 Bit| |HBURST[2:0]|Master|AHB支援8種burst type,用來指示burst 長度(transfer個數,我們也稱作beat)與address之間的關係| |HPROT[3:0]|Master|保護控制訊號,一般不用| |HWDATA[31:0]|Master|write data| |HRDATA[31:0]|Slave|read data| |HREADY|Slave|控制HRDATA讀出的數據週期,High表示已完成| |HRESP[1:0]|Slave|slave發給master的Bus 狀態,OKAY、ERROR、RETRY、SPLIT| |HSELx|Decoder|slave選擇訊號| - HTRANS[1:0] - IDLE(2'b00): 指示slave忽略當前的transfer(Master沒有資料要傳送) - BUSY(2'b01): 在burst transfer時,master可能因為某些原因導致無法及時傳送資料,則使用此transfer type通知slave - NONSEQ(2'b10): 指示目前的transfer與上一筆transfer無關 - SEQ(2'b11): 指示address與上一筆transfer相關且control訊號與上一筆相同,通常用在burst transfer - HBURST[2:0]: BURST傳輸分成兩種形式,incrementing的burst的每一筆transfer address必定是前一筆address + transfer size; wrapping burst則將memory切割成 transfer size x transfer beat 大小的一個個memory boundary,當address要跨過memory bond. 時,下一筆transfer address會繞回bond. 起點。例如起始address為0x34,transfer size 為WORD(4-byte),burst type為WRAP4,此時的memory bond.為16byte,因此依序傳輸的address為0x34, 0x38, 0x3C, 0x30 |HBURST[2:0]|Type|Description| |--------|--------|--------| |000|SINGLE| single transfer| |001|INCR|不固定長的傳輸| |010|WRAP4|4-beat WRAP| |011|INCR4|4-beat INCR| |100|WRAP8|8-beat WRAP| |101|INCR8|8-beat INCR| |110|WRAP16|16-beat WRAP| |111|INCR16|16-beat INCR | || |:---:| |4-beat WRAP| - HSIZE[2:0]: |HSIZE[2:0]|Size|Description| |--------|--------|--------| |000|8bits| Byte| |001|16bits|Halfword| |010|32bits|Word| |011|64bits| | |100|128bits|4-word lines| |101|256bits|8-word lines | |110|512bits| | |111|1024bits| | - HRESP[1:0]: AHB protocol除了slave可以使用HREADY訊號去extend transfer cycle,在transfer結束時slave還可以使用HRESP告訴master結束時的狀態,共有以下四種狀態: - OKAY: transfer成功完成 - ERROR: transfer失敗,可能造成的原因有企圖寫入read-only的memory, 錯誤的location ...等 - RETRY: 傳輸未完成,請求master device重新開始一個傳輸。不要求master device 釋放BUS控制權,arbiter會繼續延用優先級。通常在slave device繁忙的時候出現此回應。 - SPLIT: 與RETRY雷同,從設備暫時無法回應當前傳輸請求,但可以稍後完成,需要主設備釋放匯流排。通常用於更複雜的從設備,比如可能需要較長時間處理的設備(如存储器)。 || |:---:| |RETRY Response| Arbiter signal: |Name|Source|Description| |--------|--------|--------| |HBUSREQx|Master|Master發出BUS使用請求| |HLOCKx|Master|當此訊號為High時,表示主機需要鎖定對匯流排的訪問,並且在該訊號為低電平之前,其他主機不應被授予匯流排存取權限。換句話說,如果有其他主機發送請求存取BUS,不允許任何一個device中斷當前處理| |HGRANTx|Arbiter|此訊號表示匯流排Master x是目前優先順序最高的| |HMASTER[3:0]|Aribiter|來自仲裁器的這些訊號指示哪個匯流排主機目前正在執行傳輸,並由支援 SPLIT 傳輸的從機用來決定哪個主機正在嘗試存取。| |HMASTLOCK|Arbiter|表示當前的master正在執行lock操作| |HSPLITx[15:0]|Slave|slave向仲裁器指示應該允許哪個master重新嘗試split傳輸。每一位對應一個master| <font color = RED> x indicate each of master devices or slave devices </font> || |:---:| |wait state on the bus handover| APB 2.0 Signal --- APB主要應用於外設periperial的設備上,如UART, RTC, ...等。由於其應用場景不需要複雜的處理,因此他相較AHB也簡單了許多。以下是APB Signal: | Name | Source | Description | | -------- | -------- | -------- | | PCLK | Clock Source | Bus Clock | | PRESETn | Reset Controller | Bus Reset | | PADDR[31:0] | Master | Bus address | | PSELx | Slave | Slave選擇訊號,每個slave對應一個PSEL訊號 | | PENABLE | Master | APB transfer中的第二個cycle(後面補充) | | PWRITE | Master | Transfer dircetion(High for access) | | PRDATA[31:0] | Slave | Read data | | PWDATA[31:0] | Master | Write data | APB 2.0 操作流程 --- || |:---:| |APB Transfer FSM| - 一開始為IDLE狀態,此時若有transfer要進行,PSELx訊號就被拉為High並進入SETUP階段。 - 僅於SETUP狀態停留一個cycle,進入ENABLE狀態 - PENABLE始能,此時資料傳輸完畢,若接下來無transfer則進入IDLE狀態 > ENABLE state 在新的APB protocol稱作ACCESS ||  |:---:|:---:| |APB Write Transfer|APB Read Transfer| - T1: IDLE狀態 - T2: Setup 狀態 - T3: Enable狀態 - T4: IDLE狀態 || |:---:| |Read Transfer with AHB(假設兩個BUS Clock相同)| T1: AHB BUS傳送位置與傳輸方向訊息 T2: HADDR被APB採樣,APB開始進入SETUP階段,PSELx拉高 T3: APB ENABLE階段,讀取APB Data,並且將PENABLE拉高 T4: 傳輸結束,將資料送往AHB BUS || |:---:| |Write Transfer with AHB(假設兩個BUS Clock 相同)| T1: AHB BUS傳送位置與傳輸方向訊息 T2: AHUB BUS傳送DATA T3: APB SETUP階段 T4: APB ENABLE階段 T5: 傳輸結束 || |:---:| |讀寫交叉傳輸| AXI 3.0 --- AMBA Optimization --- APB3: - 新增了PREADY,slave用此訊號擴展傳輸 - 新增PSLVERR,用於表示此筆傳輸狀態(Source:slave) APB4: - 新增PPROT,保護訊號 - 新增PSTRB,write strobe的縮寫,允許通過 PSTRB 信號選擇性地寫入部分資料位元組,而不影響未選中的位元組。例如,在 32 位元匯流排上,你可以只寫入其中的某個位元組,而不修改其他位元組。(讀資料時,必須將此訊號tie 0) APB5: - 新增PWAKEUP,喚醒訊號 - 新增USER,自定義訊號(不常用) - 新增Parity Protection,奇偶校驗保護 - 新增RME,領域管理擴展 Realm Management Extension,ARM的一種系統架構 AHB3(AHB Lite)&AHB5: AHB3為AHB2的簡化版,主要應用於單個master多個slave的架構,因此沒有arbiter。此外也移除了RETRY與SPLIT功能。而AHB5相比AHB3沒什麼差異,新增了一些訊號。 |Page 1-2| |:---:| |AHB3 Architecture| - 由Slave發送的HREADY更名為HREADY_OUT - 原先AHB2的HREADY更改為多工器發送至slave與master。不管是AHB2還是AHB3/AHB5,Slave都需要返回HREADYOUT(AHB2是HREADY)。而到了AHB3/AHB5中,Slave除了向master發出HREADYOUT,slave還會接收到MUX返回的HREADYIN,如下所示 |Page 4-3| |:---:| |HREADYIN & HREADYOUT| HREADYIN的設計主要是有利於Pipeline操作,例如Master先發出對Slave-1的讀操作,而Slave-1還沒準備好資料,於是將資料相位擴展,HREADYOUT_1為低。此時Master又發出對Slave-2的讀操作,而Slave-2本身是ready的狀態,HREADYOUT_2為高。由於Slave1的HREADYOUT_1為低,所以HREADY也為低,表示master對所有的slave訪問未完成。可是如果沒有HREADYIN設計,Slave2會誤以為自己這次訪問成功,造成誤操作。 - AHB3沒有HMASTER訊號 - AHB5新增HEXCL,exclusive傳輸時(詳見原論文),指明該傳輸是否為獨佔傳輸(exclusive transfer) - AHB5新增HEXOKAY,exclusive傳輸時,指明獨佔訪問(exclusive transfer)成功or失敗 - AHB5新增user自定義訊號(不常用) - AHB5新增HNONSEC訊號,若此訊號為0,代表當前傳輸為安全傳輸 - 新增AHB原子訪問Atomicity(看不動@@) Reference --- AMBA Spec. https://www.arm.com/architecture/system-architectures/amba/amba-specifications Blog https://www.slideshare.net/slideshow/2002-5-1-introduction-to-amba-bus-system-presentation/555420#2 https://www.cnblogs.com/xianyuIC
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.