AHB總線筆記(一)
????????系統(tǒng)芯片中各個模塊之間的連接通訊就通過總線,總線就作為子系統(tǒng)之間共享的通信鏈路??偩€可以理解為數(shù)據(jù)傳輸?shù)膮f(xié)議,大家都按照這種協(xié)議(AHB、APB、AXI)來傳數(shù)據(jù),這樣各個模塊之間就不會出錯,尤其是很多時候別人買你的IP,你要保證人家買過去能用起來,那就需要一個規(guī)范來統(tǒng)一標(biāo)準(zhǔn),我們稱之為總線。
????????總線的優(yōu)點(diǎn)就是成本低,方便使用。缺點(diǎn)也很明顯,就是會造成性能瓶頸,也正是因為這個所以總線協(xié)議一直在更新,到現(xiàn)在的AXI4,讀寫數(shù)據(jù)通道分開,增加了數(shù)據(jù)的帶寬。
????????AMBA全稱Advanced Microcontroller Bus Architecture,即片上總線協(xié)議標(biāo)準(zhǔn)?。AMBA協(xié)議是與工藝無關(guān)的,沒有電氣特性,而是一種協(xié)議??偣捕x了三種總線:
????????AHB(Advanced High-performance Bus)
????????ASB(Advanced System Bus)用的很少
????????APB(Advanced Peripheral Bus)
????????AMBA發(fā)展歷史:
????????AMBA1.0:ASB和APB
????????AMBA2.0: ? AHB、ASB和APB
????????AMBA3.0:AMBA Advanced eXtensible Interface(AXI)
????????AMBA4.0:....
????? ??
AHB特點(diǎn):
????????高速總線,高性能。
????????具有兩級流水操作,包括地址周期和數(shù)據(jù)周期的兩級流水線處理。第一個周期讀地址,第二個周期寫數(shù)據(jù),用流水線操作處理,在第二個周期寫數(shù)據(jù)的同時讀另一個地址,這樣在下一個周期就可以直接寫數(shù)據(jù),讀地址寫數(shù)據(jù)同時進(jìn)行,這樣兩周期的操作在流水線開始后每周期都能寫一個數(shù)據(jù)。

? ? ????AHB可以支持多個總線主設(shè)備(最多16個)。
????????還支持burst傳輸。就是一次burst傳輸,一次性傳輸一串?dāng)?shù)據(jù),數(shù)據(jù)長度為burst length。
????????總線帶寬:8、16、32、64、128bits。采用上升沿觸發(fā)操作。
APB總線特點(diǎn):
????????低速總線,低功耗,接口簡單。在bridge中鎖存地址信號和控制信號。適用于多種外設(shè),采用上升沿觸發(fā)操作。

AHB組成部分:
????????AHB主設(shè)備(master)
????????????????初始化一次讀/寫操作。某一時刻只允許一個主設(shè)備使用總線。比如CPU、DMA、DSP、LCDC等。
????????AHB從設(shè)備(slave)
????????????????響應(yīng)一次讀/寫操作。通過地址映射來選擇使用哪一個從設(shè)備。外部存儲器控制EMI、APB bridge等。
????????AHB仲裁器(arbiter)
????????????????因為總線上只允許一個master訪問,所以在多個master同時申請總線的時候就會引起沖突,這就需要仲裁器來選擇給哪個master總線的控制權(quán)。但是在AMBA協(xié)議中沒有定義仲裁算法,所以具體分配可以自己定制,循環(huán)優(yōu)先也好、設(shè)定優(yōu)先級也好,都可以自己定制。
????????AHB譯碼器(decoder)
????????????????通過地址譯碼來決定哪一個從設(shè)備。它必須知道地址map信息,知道后就會分析總線上的address是什么值,落在那個slave的區(qū)域,就會把對應(yīng)slave的HSEL信號拉高。而作為slave而言,他就看自己的HSEL信號是否被譯碼器拉高來判斷自己是否要工作。
APB組成部分:
????????AHB2APB Bridge
????????????????可以鎖存所有地址、數(shù)據(jù)和信號。進(jìn)行二級譯碼來產(chǎn)生APB從設(shè)備選擇信號,APB有一個地址空間比如0x5000_0000~0x6fff_ffff,其中又分為很多小的APB地址,比如APB1~APB5,當(dāng)AHB總線上地址落在0x5000_0000~0x6fff_ffff時,代表這塊APB被選中,選中之后就會通過二級譯碼來判斷具體是落在那個APB塊兒上。
????????????????APB總線上的所有其他模塊都是APB從設(shè)備。
????????拿一個CPU控制DMA的過程舉例說明設(shè)備之間的通信:

????????DMA在系統(tǒng)中主要起一個數(shù)據(jù)搬運(yùn)的作用,它可以代替CPU做數(shù)據(jù)遷移。DMA有自己的地址空間,表格中的Address為偏移地址offset,從DMA基地址開始的一些寄存器保存的一般為狀態(tài),稱為狀態(tài)寄存器。CPU控制DMA搬移數(shù)據(jù),先從DMA中讀DMA的Status,如果讀取DMA是ready狀態(tài),那么就可以給DMA寫的0x00地址給1,然后告訴DMA數(shù)據(jù)搬運(yùn)的起始地址(Source address)? 和目的地址(Destination address),然后還要告訴DMA搬運(yùn)數(shù)據(jù)的個數(shù)size。之后就可以把搬運(yùn)數(shù)據(jù)的工作交給DMA,然后自己騰出手來去做別的事。CPU控制DMA做數(shù)據(jù)搬運(yùn)主要可以分為以下幾個步驟:
????????step1:CPU設(shè)置(source address)、(destination address) 、(size)
????????step2:啟動DMA
????????step3:DMA把數(shù)據(jù)從memory1傳輸?shù)絤emory2
????????step4:DMA向CPU發(fā)起中斷請求
????????step5:CPU檢查DMA的狀態(tài)
AMBA總線的互連

????????Arbiter控制mux選擇哪個master有效。選中了master之后,HADDR會被送進(jìn)Decoder判斷選中的是那個slave,然后把對應(yīng)slave的HSEL信號拉高表示slave工作,接著讀入地址和數(shù)據(jù)信號,這里其他的slave其實也能看到數(shù)據(jù)和地址信號,但是因為他們的HSEL信號沒被拉高,所以不會工作。
????????master和slave中還有一對常用的master和slave,就是default master和default slave。當(dāng)沒有master在工作的時候,就選擇default master來控制總線,這個master可以直接訪問總線而不需要兩個仲裁周期的時間,他是最常用的master。當(dāng)沒有slave被控制的時候就選擇 default slave 來被控制。
AHB信號

????????這里的信號都是H打頭,因為是AHP總線的信號,如果是APB的話,就會是P打頭。HRESETn表示低電平有效的復(fù)位。HADDR[31:0]是32位系統(tǒng)地址總線。HWDATA[31:0] 寫數(shù)據(jù)總線,從主設(shè)備寫到從設(shè)備。HRDATA[31:0]讀數(shù)據(jù)總線,從從設(shè)備讀到主設(shè)備.
????????HTRANS是指當(dāng)前傳輸?shù)臓顟B(tài),分為IDLE、BUSY、NONSEQ和SEQ。00:IDLE,主設(shè)備占據(jù)總線,但沒進(jìn)行傳輸,兩次burst中間主設(shè)備沒準(zhǔn)備好的話發(fā)IDLE。01:BUSY,主設(shè)備占用總線,但是在burst傳輸過程中還沒有準(zhǔn)備好進(jìn)行下一次傳輸,一次burst傳輸中間主設(shè)備發(fā)BUSY。10:NONSEQ,表明一次單個數(shù)據(jù)的傳輸,或者一次burst傳輸?shù)牡谝粋€數(shù)據(jù),地址和控制信號與上一次傳輸無關(guān)。11:SEQ,表明burst傳輸接下來的數(shù)據(jù),地址和上一次傳輸?shù)牡刂肥窍嚓P(guān)的。
HWRITE信號表示讀寫狀態(tài),HWRITE=1時表示寫,=0時表示讀狀態(tài)。HSIZE指BUS的寬度當(dāng)前傳輸大小,HSIZE=000時 為8bit,HSIZE=001時為16bit,HSIZE=010時為32bit,以此類推。HBURST指傳輸?shù)腷urst類型,總共有8個類型:SINGLE、INCR、WRAP[4|8|16]、INCR[4|8|16]。HSELx用來選擇slave。HRESP是從設(shè)備發(fā)給主設(shè)備的總線傳輸狀態(tài),有四種狀態(tài):ERROR、OKAY、SPLIT和RETRY,RETRY和SPLIT有區(qū)別。RETRY不影響被拒絕的master 的優(yōu)先級,但是如果用SPLIT拒絕了當(dāng)前的master,arbiter會把當(dāng)前被拒絕的master優(yōu)先級降低。HREADY 為高:從設(shè)備指出傳輸結(jié)束;為低:從設(shè)備需要延長傳輸周期。
一次無需等待的AHB傳輸
????????

??????寫操作,HADDR就是寫地址,把HWDATA信號寫入,如果是讀,HADDR就是讀地址,采HRDATA信號讀出數(shù)據(jù)。
????????如果slave沒有準(zhǔn)備好接受信號,那么傳輸?shù)臄?shù)據(jù)就會被延長直到HREADY被拉高。但是master不會一直無限等slave,最多等16個周期,slave在HRESP信號里返回RETRY。

但是上面這種傳輸速度不夠快,所以AHB采用的實際上是pipeline結(jié)構(gòu)的數(shù)據(jù)傳輸,如下圖

????????這樣一次傳輸一個地址,傳輸一個數(shù)據(jù),那么每來一次傳輸,都要decode一次,效率很低,提高傳輸效率的方法就是burst傳輸,每一次burst傳輸只需要decode一次,提高數(shù)據(jù)傳輸效率。
????????