作者:Allen Zhan [介紹] 根據(jù) ARM 的說(shuō)法, 今天 AMBA 已經(jīng)成為了業(yè)界事實(shí)上的總線標(biāo)準(zhǔn). 本文我們簡(jiǎn)單對(duì)AMBA4 中的 APB v2.0(也稱(chēng)為 APB4), 以及 AMBA3 AHB-Lite v1.0 進(jìn)行簡(jiǎn)單的了解. 我們的介紹集中在, 我們比較有興趣的地方. 盡管如此, 也可能幾乎覆蓋了協(xié)議中幾個(gè)最重要的部分. [AMBA APB] AMBA Advanced Microcontroller Bus Architecture, 由ARM定義的總線架構(gòu)(標(biāo)準(zhǔn)), 由一個(gè)協(xié)議家族組成. ARM 聲稱(chēng)這一標(biāo)準(zhǔn)已經(jīng)稱(chēng)為事實(shí)上的 uController 業(yè)界通用標(biāo)準(zhǔn). APB The Advanced Peripheral Bus(APB) 是 AMBA 協(xié)議家族中一個(gè)組成部分. 它被定義為一個(gè) low-cost 的接口, 為了最小能耗與減小接口的復(fù)雜性進(jìn)行的優(yōu)化設(shè)計(jì). 被用于連接通用外圍, 比如 timers, inerrupt controllers, UART是, and IOs. 通過(guò) system-to-peripheral bus bridge 與 main system bus 相連, 有助于降低能耗. APB 版本 當(dāng)前(2013年9月), 最近的 APB協(xié)議版本是 AMBA APB Protocol Specification v2.0. 或者因?yàn)閷儆?AMBA4 家族中的發(fā)布協(xié)議, 一般也被稱(chēng)為 APB4. 而在第一個(gè)版本(APB2 )中, APB 的基本組元, APB bridge 與 APB slave 被定義. 而在 APB3 中, Ready signal 被引入, 這意味著增加了操作狀態(tài)中, 增加了 wait state. 另外增加了 PSLVERR, 用于錯(cuò)誤報(bào)告的 signal. 最近的 APB4, 增加了 PPROT 與 PSTRB signal. APB bridge 與 APB slave 我們可以掛載各種"慢速"的外設(shè)在 APB 上, 比如 IO, 比如 UART, 比如 SPI, etc. 它們都作為 slave 的角色存在. 但是, 我們想想看, bridge 這個(gè) role 就蠻有意思. 它實(shí)際上暗示我們, APB 不能"單獨(dú)存在". 我們這里所謂不能"單獨(dú)存在"的意思, 是說(shuō) APB 一定不能直接連接在 processor 上(或者說(shuō) arm core上). 而最可能的, 是通過(guò) APB bridge 而連接在高速的 bus 上. 實(shí)際上, 在 AHB-Lite 協(xié)議中, 我們發(fā)現(xiàn) APB bridge 被作為 AHB-Lite 的 slave 而被定義. Data buses APB 協(xié)議有兩個(gè)獨(dú)立的 data bus, 一個(gè)用來(lái)讀 data, 一個(gè)用來(lái)寫(xiě) data. 因?yàn)闆](méi)有獨(dú)立的握手信號(hào), 所以在兩根bus上, 同一時(shí)刻數(shù)據(jù)傳輸不能同時(shí)發(fā)生. Write Transfers 我們簡(jiǎn)單對(duì) APB 的 trasfers 過(guò)程進(jìn)行分析, 比如我們分析 write transfer with no wait states: [圖例1: Write transfer with no wait states] ![]() T0: Idle state T1: Setup state write address PADDR, write data PWDATA setup state 僅僅只保持 1pcs clock cycle, 而在下一個(gè) PCLK 的上升沿, 一定進(jìn)入 Access state. T2: Access state APB bridge 通過(guò)拉高 PENABLE, 通知slave 第二階段(也就是 access phase) 開(kāi)始. 因?yàn)槭?no wait states, 我們見(jiàn)到了 PREADY 在此被拉高, 表示 slave 通知 bridge, 在下一個(gè) PCLK 的上升沿, 本次 transfer 的過(guò)程可以結(jié)束. T3: finish transfer, then enter Idle state again or the next setup. PREADY 拉低, 說(shuō)明 slave 通知本次 transfer 結(jié)束. 在 PREADY unasserted 之前, PADDR, PWDATA, 以及其他的 signals 都應(yīng)該保持有效. 從上述時(shí)序中, 我們了解到, write transfer 看來(lái)至少需要 3 cycles. setup - access - finish 而在一個(gè) write transfer with wait states 時(shí)序中, [圖例2: Write transfer with wait states] ![]() 我們見(jiàn)到了, Slave 通過(guò) unassert 的方式(拉低), 延遲了2pcs cycles(根據(jù)圖例的例子), 這樣在 T2 狀態(tài)上的拉高動(dòng)作, 被延時(shí)到 T4 進(jìn)行拉高. 也就是 Slave 通知在 T5 cycle 中結(jié)束本次 transfer. 這就是通過(guò) PREADY 引入了 wait state 后現(xiàn)象, 我們注意到, 一般的術(shù)語(yǔ)被稱(chēng)為"extend the transfer". Operating States Read Transfer 的情形與 Write Transfer 類(lèi)似, 這樣, 我們就基本完備講述了 APB protocol, 附上 Operating States 進(jìn)行理解: [圖例3: State Diagram] ![]() transfer cycles APB protocol 中, 明確指出: "每個(gè) Transfer 至少消耗 2 cycles". 而我們檢查, 即使是 transfer with no wait state, 也最少消耗了 3 cycles. 這里我們理解, 在圖例1中, T3 狀態(tài)下, finish 本次 transfer后, 如果要連續(xù)操作下一個(gè)寫(xiě)傳遞的過(guò)程, 那么則在 T3 狀態(tài)下保持 PSEL asserted, 配合 PREADY unasserted, 恰好又進(jìn)入了如 T1 cycle 相同的 setup state, 這時(shí)需要 bridge 更新地址 PWRITE, 以及數(shù)據(jù) PWDATA. 也就是在連續(xù) transfer(針對(duì)同一個(gè) slave)的操作中, transfer 最少只消耗 2 cycle. 我們沒(méi)有在 APB 協(xié)議中, 獲得上述猜測(cè)的詳解, 我們保留上述對(duì) "2 cycles" 的理解猜測(cè)于此. 總結(jié) 我們通過(guò)對(duì) APB protocol 的理解, 得知 APB 是 unpipeline 的 bus. 無(wú)論如何, setup state 將占據(jù)一個(gè) cycle, 而 access state 將占據(jù)另一個(gè). 這種 unpipeline 的設(shè)計(jì), 很可能就是 APB 被作為連接外圍的, 而不是用于 processor 之間的 memory 連接的 BUS 的重要原因. 因其不要求外圍在一個(gè) cycle 中對(duì) address 進(jìn)行取樣, 這也給外圍更多的時(shí)間反應(yīng), 至少比較而言, 使用 APB 的外圍可以具備更小的 bandwidth. [AMBA AHB-Lite] AHB-Lite AHB: Advanced High-performance Bus 用于高表現(xiàn)力高clock頻率的系統(tǒng). 最經(jīng)常的使用是連接 internal memeory device, external memory interface, 以及 high bandwidth 外圍. 其基本組元是: Master, Slave, Decoder, Multiplexor. 在 address/control phase 與 data phase 中, 存在 fixed pipeline. AHB: 僅僅支持 AMBA AXI protocol 的功能子集(subset). AHB-Lite: 如果除去在 master 與 slave IP 開(kāi)發(fā)中不需要的部分, 則 AHB protocol 的這個(gè) subset 則定義為 AHB-Lite. Operation 每一個(gè) trasfer 都包括 Address phase 與 Data Phase. Address 不允許被 extend, 即便是來(lái)自 Slave 的請(qǐng)求, 因此我們可以想象, 全部的 Slaves 都必須在 Address phase(1 cycle) 完成 sampling address. 但是與 APB 一樣, Slave 也可以通過(guò) HREADY signal 請(qǐng)求 extend data phase, 增加額外的時(shí)間去 sample data. HRESP signal 被用來(lái)說(shuō)明 transfer 的成功與否. Address 總是可以在一個(gè) single HCLK cycle 中完成, 除非是之前的 bus transfer 被 extend(我們理解, 這里應(yīng)該是只有 data 才能做這個(gè) extend). Data 可以占有數(shù)個(gè) HCLK cycle, 這取決于 HREADY signal 是否 extend transfer. 因此, Address phase 可以與 Data phase 的 overlapping, 就是 pipeline 的基礎(chǔ). [圖例4: 在不同地址上的3個(gè)transfer的例子] ![]() Transfer types Transfer types 包括: IDLE, BUSY, NONSEQ, SEQ 同猜想的一樣, 對(duì)于 Slave, 可以通過(guò) HREADY 實(shí)現(xiàn) extend transfer, 我們覺(jué)得, 這或者就是"較為慢速"的 Slave 實(shí)現(xiàn) delay 的方式. 而 Master 如果在 HTRANS[1:0] 中使用 BUSY, 也可以在 burst transfer 的過(guò)程中, 插入idle cycles. 這讓人覺(jué)得, 這應(yīng)算是 master 試圖做 delay 的方式. [圖例5: BUSY Transfer type] ![]() 值得注意的是, 該例子, 使用了 4-beat 的 burst operation. Locked transfers 通過(guò) HMASTLOCK, master 可以要求完成"鎖定"的 transfer, 不能被打斷. 而這個(gè)用法, 往往在多個(gè) master 的用法中存在. [圖例6: Locked transfers] ![]() Default slave 如果不存在的的 memory map 被 master 點(diǎn)中, AHB-Lite 協(xié)議給出了一個(gè)解決方案, 就是必須存在一個(gè)增加的 default slave 來(lái)進(jìn)行回應(yīng). Slave transfer responses AHB-Lite 協(xié)議中指出, Master 一旦開(kāi)始一個(gè) transfer后, 將無(wú)法主動(dòng)取消這個(gè) transfer. 因此, 通過(guò)來(lái)自 Slave 的 HRESP signal 的狀態(tài), 判斷 transfer 的成功與否將是重要的. HWDATA 與 HRDATA 同 APB 協(xié)議一樣, data bus 的 read 與 write 是分離的. 所以不需要"三態(tài)"的 drivers. 我們此時(shí)有點(diǎn)大腦短路, 不太理解這里的意思, 這應(yīng)該是說(shuō), 如果我們?cè)趩我坏? 而不是分離的 data bus 上實(shí)現(xiàn) read data 以及 write data, 那么我們就需要"三態(tài)驅(qū)動(dòng)器"? 這里的 tristate 為何意? --有知道的同行, 這里定能有教于我. [參考文獻(xiàn)] 1. AMBA3 AHB-Lite Protocol v1.0 Specification 2. AMBA APB protocol v2.0 Specification [結(jié)語(yǔ)] 讓我們引用 Sailing 的文章 "ARM與x86之4--EAGLE is Coming!" (From: http://blog.sina.com.cn/s/blog_6472c4cc0100mnza.html) 中的論述 AMBA 的片段作為結(jié)語(yǔ): <剪切> "最令I(lǐng)ntel尷尬的是,x86處理器并沒(méi)有一個(gè)與 AMBA 總線類(lèi)似的 SoC 平臺(tái)總線,這是Intel 進(jìn)軍嵌入式領(lǐng)域一個(gè)不小的障礙。Intel 或者定義一條全新的SoC平臺(tái)總線,或者集成AMBA總線。從加速推出產(chǎn)品的角度上,直接使用 AMBA 總線無(wú)疑是一條捷徑。而世上沒(méi)有捷徑,從更長(zhǎng)遠(yuǎn)的時(shí)間上看,借用AMBA總線,會(huì)使ARM陣營(yíng)更加強(qiáng)大。最初的所謂捷徑不過(guò)是為他人做的嫁衣裳。" "面對(duì)ARM內(nèi)核,Intel并不畏懼,面對(duì)AMBA總線陣營(yíng),Intel只剩下無(wú)奈?梢灶A(yù)計(jì)在相當(dāng)長(zhǎng)的一段時(shí)間里,Intel無(wú)法推出一條能和AMBA總線抗衡的SoC平臺(tái)總線。Intel只能暫時(shí)向AMBA總線示弱。" <剪切> Written by Allen Zhan |