AHB總線規(guī)范是AMBA總線規(guī)范的一部分,AMBA總線規(guī)范是ARM公司提出的總線規(guī)范,被大多數(shù)SoC設(shè)計(jì)采用,它規(guī)定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。AHB用于高性能、高時(shí)鐘頻率的系統(tǒng)結(jié)構(gòu),典型的應(yīng)用如ARM核與系統(tǒng)內(nèi)部的高速RAM、NAND FLASH、DMA、Bridge的連接。APB用于連接外部設(shè)備,對(duì)性能要求不高,而考慮低功耗問(wèn)題。ASB是AHB的一種替代方案。
1.1 AHB總線的架構(gòu)
AHB總線的強(qiáng)大之處在于它可以將微控制器(CPU)、高帶寬的片上RAM、高帶寬的外部存儲(chǔ)器接口、DMA總線master、各種擁有AHB接口的控制器等等連接起來(lái)構(gòu)成一個(gè)獨(dú)立的完整的SOC系統(tǒng),不僅如此,還可以通過(guò)AHB-APB橋來(lái)連接APB總線系統(tǒng)。AHB可以成為一個(gè)完整獨(dú)立的SOC芯片的骨架。
下圖是一個(gè)典型的AHB系統(tǒng)總線的結(jié)構(gòu)示意圖
1.2 AHB基本特性
Burst傳輸
Split事務(wù)處理
單周期master移交
單一時(shí)鐘沿操作
無(wú)三態(tài)
更寬的數(shù)據(jù)總線配置(64/128)
流水線操作
可支持多個(gè)總線主設(shè)備(最多16個(gè))
2. AHB總線的組成
AHB總線由Master、Slave和Infrastructure構(gòu)成。Infrastructure由arbiter、數(shù)據(jù)多路、地址控制多路、譯碼器構(gòu)成。
主設(shè)備Master
發(fā)起一次讀/寫(xiě)操作
某一時(shí)刻只允許一個(gè)主設(shè)備使用總線
從設(shè)備Slave
響應(yīng)一次讀/寫(xiě)操作
通過(guò)地址映射來(lái)選擇使用哪一個(gè)從設(shè)備
仲裁器arbiter
允許某一個(gè)主設(shè)備控制總線
譯碼器decoder
通過(guò)地址譯碼決定選擇哪一個(gè)從設(shè)備
總線可以分為三組
寫(xiě)數(shù)據(jù)總線(HWDATA)
讀數(shù)據(jù)總線(HRDATA)
地址控制總線(HADDR)
3. 信號(hào)描述
Name?Source?To?Description?
HCLK?clock source?各module?總線時(shí)鐘,上升沿采樣?
HRESETn?reset controller?各module?總線復(fù)位,低電平有效?
HADDR[31:0]?Master?decoder
mux to slave
arbiter?32位系統(tǒng)地址總線?
HTRANS[1:0]?Master?mux to slave?當(dāng)前傳輸類(lèi)型NONSEQ, SEQ, IDLE, BUSY?
HWRITE?Master?mux to slave?1為寫(xiě),0為讀?
HSIZE[2:0]?Master?mux to slave?每一個(gè)transfer傳輸?shù)臄?shù)據(jù)大小,以字節(jié)為單位,最高支持1024位?
HBURST[2:0]?Master?mux to slave?burst類(lèi)型,支持4、8、16 burst,incrementing/wrapping?
HPROT[3:0]?Master?mux to slave?保護(hù)控制信號(hào),需要slave帶保護(hù)功能,一般不用?
HWDATA[31:0]?Master?mux to slave?寫(xiě)數(shù)據(jù)總線,Master到Slave?
HRDATA[31:0]?Slave?mux to master?讀數(shù)據(jù)總線,Slave到Master?
HREADY?Slave?mux to master
arbiter?高:Slave指出傳輸結(jié)束
低:Slave需延長(zhǎng)傳輸周期?
HRESP[1:0]?Slave?mux to master
arbiter?Slave發(fā)給Master的總線傳輸狀態(tài)OKAY, ERROR, RETRY, SPLIT?
HSELx?Decoder?slave?slave選擇信號(hào)
AHB仲裁信號(hào)
Name?Source?To?Description?
HBUSREQx?Master?arbiter?master給仲裁器的請(qǐng)求獲得總線使用權(quán)的請(qǐng)求信號(hào),最多支持16個(gè)master?
HLOCKx?Master?arbiter?如果一個(gè)master希望自己在傳輸期間不希望丟掉總線,則需要向仲裁器發(fā)送這個(gè)鎖定信號(hào)?
HGRANTx?arbiter?master?授權(quán)信號(hào),當(dāng)前bus master x的優(yōu)先級(jí)最高。當(dāng)HREADY和HGRANTx同時(shí)為高時(shí),master獲取系統(tǒng)總線的權(quán)利?
HMASTER [3:0]?arbiter?具有split功能的slave?仲裁器為每一個(gè)master分配的ID,指出哪個(gè)主設(shè)備正在進(jìn)行傳輸,提供進(jìn)行split的信息?
HMASTLOCK?arbiter?具有split功能的slave?表示當(dāng)前的master正在執(zhí)行Locked操作。這個(gè)信號(hào)和HMASTER有這相同的時(shí)序?
HSPLITx[15:0]?slave?arbiter?從設(shè)備用這個(gè)信號(hào)告訴仲裁器哪個(gè)主設(shè)備運(yùn)行重新嘗試一次split傳輸,每一位對(duì)應(yīng)一個(gè)主設(shè)備
4. 總線操作
有需要占用總線的Master向arbiter發(fā)出請(qǐng)求,arbiter授權(quán)給指定的master。任一時(shí)間周期只有一個(gè)master可以接入總線,對(duì)其指定的slave進(jìn)行讀寫(xiě)操作。
獲得授權(quán)的總線開(kāi)始AHB傳輸,首先發(fā)出地址和控制信號(hào),提供地址信息、傳輸方向、帶寬和burst類(lèi)型??偩€統(tǒng)一規(guī)劃slave的地址,譯碼器根據(jù)地址和控制信號(hào)確定哪個(gè)slave與master進(jìn)行數(shù)據(jù)通信。數(shù)據(jù)傳輸通過(guò)數(shù)據(jù)總線完成。為避免出現(xiàn)三態(tài)總線,AHB將讀寫(xiě)總線分開(kāi),寫(xiě)數(shù)據(jù)總線用于從master到slave的數(shù)據(jù)傳輸,讀數(shù)據(jù)總線用于從slave到master的數(shù)據(jù)傳輸。每筆傳輸包括一個(gè)地址和控制周期,一個(gè)或多個(gè)數(shù)據(jù)周期。地址和控制周期不能被擴(kuò)展,因此slave必須在一個(gè)周期內(nèi)采樣地址信號(hào)。數(shù)據(jù)周期可以通過(guò)HREADY信號(hào)擴(kuò)展,但HREADY為低時(shí)給傳輸加入一個(gè)等待狀態(tài)以使slave獲得額外的時(shí)間來(lái)提供或采樣數(shù)據(jù),另外slave通過(guò)響應(yīng)信號(hào)HRESP反映傳輸狀態(tài)。
一般情況下master完成完整的burst傳輸,arbiter才會(huì)授權(quán)給其他的master接入總線,然而為避免過(guò)大的判決延遲,arbiter也可能打斷burst傳輸。在這種情況下master必須再次接入總線以進(jìn)行中斷的burst剩余部分的傳輸。
5. 基本傳輸
一筆傳輸由如下兩部分組成:
地址階段:一個(gè)周期
數(shù)據(jù)階段:一個(gè)或多個(gè)周期,由HBURST信號(hào)決定需要幾個(gè)有效周期,可以由HREADY發(fā)出請(qǐng)求延長(zhǎng)一個(gè)周期。
5.1 沒(méi)有等待狀態(tài)的single transfer
第一個(gè)周期的上升沿,master驅(qū)動(dòng)地址和控制信號(hào);
第二個(gè)周期的上升沿,slave采樣地址和控制信號(hào),并將HREADY拉高;
如果是寫(xiě)操作,master會(huì)在第二個(gè)周期的上升沿傳輸要寫(xiě)入的數(shù)據(jù);
如果是讀操作,slave會(huì)在HREADY信號(hào)拉高后將讀取的數(shù)據(jù)寫(xiě)入總線;
第三個(gè)周期的上升沿,
如果是寫(xiě)操作,master獲取HREADY高信號(hào),表明slave已成功接收數(shù)據(jù),操作成功;
如果是讀操作,master獲取HREADY高信號(hào),表明此時(shí)的讀數(shù)據(jù)有效并且接收下來(lái),操作成功。
需要注意,HREADY信號(hào)在數(shù)據(jù)有效期間必須為高,并且延續(xù)到第三個(gè)周期的上升沿之后,確保master的正確采樣。
5.2 slave插入等待狀態(tài)的single transfer
slave可以及時(shí)處理master請(qǐng)求,但也可能存在slave太慢不能立即處理的情況。這時(shí)需要讓master稍微等一等,需要slave插入一些等待的狀態(tài)。如下圖所示,HREADY信號(hào)在第二和第三周期拉低,意在告訴master,slave不能立即處理,需要master等待2個(gè)周期。在這里需要注意2點(diǎn):
如果是寫(xiě)操作,master需要在等待期間保持寫(xiě)數(shù)據(jù)不變,直到本次傳輸完成;
如果是讀操作,slave不需要一開(kāi)始就給出數(shù)據(jù),僅當(dāng)HREADY拉高后才給出有效數(shù)據(jù)。
5.3 多個(gè)single transfer的pipeline操作
擴(kuò)展數(shù)據(jù)周期的一個(gè)負(fù)效應(yīng)是必需延長(zhǎng)相應(yīng)的下一筆傳輸?shù)牡刂分芷?。A和C為零等待傳輸,B加入了一個(gè)等待周期,因此相應(yīng)的C地址周期要進(jìn)行擴(kuò)展。
第一個(gè)周期,master發(fā)起一個(gè)操作A,并驅(qū)動(dòng)地址和控制信號(hào);
第二個(gè)周期,slave收到了來(lái)自總線的請(qǐng)求,將HREADY信號(hào)拉高;
第二個(gè)周期上升沿后,master發(fā)現(xiàn)有操作B需要執(zhí)行,并且檢查到上一周期的HREADY為高,則發(fā)起第二個(gè)操作B;
第三個(gè)周期,master獲取HREADY信號(hào)為高,表示操作A已經(jīng)完成;
第三個(gè)周期上升沿后,master發(fā)現(xiàn)有操作C需要執(zhí)行,并且檢查到上一周期的HREADY為高,則發(fā)起第三個(gè)操作C;
第三個(gè)周期上升沿后,slave由于繁忙插入了一個(gè)等待狀態(tài),將HREADY拉低;
第四個(gè)周期,master獲取HREADY信號(hào)為低,知道slave希望等待,于是master保持和上一拍一樣的信號(hào);
第四個(gè)周期,slave處理完了事務(wù),將HREADY信號(hào)拉高,表示可以繼續(xù)處理;
第五個(gè)周期,master獲取HREADY信號(hào)為高,知道slave已經(jīng)可以處理B操作;
第五個(gè)周期上升沿后,B操作完成;
第六個(gè)周期上升沿后,C操作完成。
需要注意幾點(diǎn):
HREADY在一定程度上表示了slave的pipeline能力,在AHB中是2個(gè)pipe,也就是總線上最多存在2個(gè)未處理完的transfer。只有當(dāng)總線上未完成的transfer少于2個(gè)時(shí),master才能發(fā)起操作。
5.4 遞增burst
T1,master傳入地址和控制信號(hào),因?yàn)槭切碌腷urst開(kāi)始,transfer的類(lèi)型是NONSEQ;
T2,由于master不能在第二個(gè)周期里處理第二拍,所以master使用BUSY transfer來(lái)為自己延長(zhǎng)一個(gè)周期的時(shí)間。注意,雖然是延長(zhǎng)了一個(gè)周期,但是master需要給出第二個(gè)transfer的地址和控制信號(hào);
T3,slave采集到了master發(fā)來(lái)的BUSY,知道m(xù)aster需要等待一拍,所以slave會(huì)忽略這個(gè)BUSY transfer;
T3,master發(fā)起了第二個(gè)transfer,因?yàn)槭峭粋€(gè)burst的第二個(gè)transfer,所以transfer的類(lèi)型是SEQ;
T5,slave將HREADY信號(hào)拉低,告訴master需要等待一個(gè)周期;
T8時(shí)刻完成最后一個(gè)transfer。
需要注意的 雖然slave會(huì)忽略掉BUSY transfer,但是master也需要給出下一拍的地址和控制信號(hào)。
5.5 wrapping 4-beat burst
跟之前唯一的區(qū)別在于地址的不同,在0x3C地址之后,根據(jù)回環(huán)的地址邊界,第三拍的地址變?yōu)?x30。一共四拍,4個(gè)地址,每個(gè)地址各不相同,這四個(gè)地址是一個(gè)回環(huán)范圍。起始地址決定了回環(huán)操作的回環(huán)范圍。
5.6 遞增4拍burst
和上面的基本一致,只不過(guò)地址在0x30并不回環(huán),而是遞增。
6.控制信號(hào)
HTRANS[1:0]
?傳輸類(lèi)型
?Description?
00?IDLE?主設(shè)備占用總線,但沒(méi)進(jìn)行傳輸
兩次burst傳輸中間主設(shè)備可發(fā)IDLE
此時(shí)就算slave被使能,也不會(huì)從總線上獲取任何的數(shù)據(jù)信號(hào)。如果此時(shí)salve被選中,那么每一個(gè)IDLE周期slave都要通過(guò)HRESP[1:0]返回一個(gè)OKAY響應(yīng)?
01?BUSY?主設(shè)備占用總線,但是在burst傳輸過(guò)程中還沒(méi)有準(zhǔn)備好進(jìn)行下一次傳輸
一次burst傳輸中間主設(shè)備可發(fā)BUSY
這時(shí)slave不會(huì)從總線上收取數(shù)據(jù)而是等待,并且通過(guò)HRESP[1:0]返回一個(gè)OKAY響應(yīng)。需要注意的是,這個(gè)transfer需要給出下一拍的地址和控制信號(hào),盡管slave不會(huì)去采樣。?
10?NONSEQ?表明一次單個(gè)數(shù)據(jù)的傳輸或者一次burst傳輸?shù)牡谝粋€(gè)數(shù)據(jù)
地址和控制信號(hào)與上一次傳輸無(wú)關(guān)?
11?SEQ?burst傳輸接下來(lái)的數(shù)據(jù)
地址和上一次傳輸?shù)牡刂肥窍嚓P(guān)的,這時(shí)總線上的控制信號(hào)應(yīng)當(dāng)與之前的保持一致,地址視情況遞增或者回環(huán)。?
HSIZE[2:0]?Size?Description?
000?8 bits?Byte?
001?16 bits?Halfword?
010?32 bits?Word?
011?64 bits?-?
100?128 bits?4-word line?
101?256 bits?8-word line?
110?512 bits?-?
111?1024 bits?-
Burst傳輸類(lèi)型
???????burst不能超過(guò)1K地址邊界。
HBURST[2:0]?類(lèi)型?Description?
000?SINGLE?Single transfer?
001?INCR?Incrementing burst of unspecified length?
010?WRAP4?4-beat wrapping burst?
011?INCR4?4-beat increment burst?
100?WRAP8?8-beat wrapping burst?
101?INCR8?8-beat increment burst?
110?WRAP16?16-beat wrapping burst?
111?INCR16?16-beat increment burst?
響應(yīng)信號(hào)
master發(fā)起一筆傳輸后,slave可以決定這筆傳輸?shù)倪M(jìn)程,而master不能取消已經(jīng)發(fā)出的傳輸。slave通過(guò)HREADY信號(hào)反映傳輸是否完成,通過(guò)HRESP[1:0]反映傳輸?shù)臓顟B(tài)。
slave可以如下方式完成一筆傳輸:
立即完成一筆傳輸;
延遲一個(gè)或幾個(gè)周期完成傳輸;
傳輸失敗返回error;
延遲傳輸,釋放總線。
傳輸完成HREADY
為高時(shí)傳輸完成,為低時(shí)傳輸需要延遲。
傳輸響應(yīng)HRESP[1:0]
00: OKAY
01: ERROR
10: RETRY
傳輸未完成,請(qǐng)求主設(shè)備重新開(kāi)始一個(gè)傳輸,arbiter會(huì)繼續(xù)使用通常的優(yōu)先級(jí)
11: SPLIT
傳輸未完成,請(qǐng)求主設(shè)備分離一次傳輸,arbiter會(huì)調(diào)整優(yōu)先級(jí)方案以便其他請(qǐng)求總線的主設(shè)備可以訪問(wèn)總線
地址譯碼
地址譯碼器用于為總線上每個(gè)slave提供選擇信號(hào)HSELx,選擇信號(hào)是通過(guò)組合邏輯對(duì)地址碼譯碼產(chǎn)生的。只有當(dāng)前的數(shù)據(jù)傳輸完成后(HREADY為高),slave才會(huì)采樣地址和控制信號(hào)以及HSELx。在一定條件下可能會(huì)出現(xiàn)這樣的情況:產(chǎn)生HSELx信號(hào)而HREADY為低,在當(dāng)前傳輸后slave會(huì)改變。
每個(gè)slave最小的地址空間為1KB,所有的master的burst傳輸上限也是1KB,如此設(shè)計(jì)保證了不會(huì)出現(xiàn)地址越界問(wèn)題。當(dāng)一個(gè)設(shè)計(jì)不會(huì)用到所有的地址空間時(shí),可能出現(xiàn)訪問(wèn)到一個(gè)不存在的地址的情況,這就需要增加一個(gè)附加的默認(rèn)slave來(lái)為上面的情況提供一個(gè)響應(yīng)。當(dāng)SEQ或NONSEQ傳輸訪問(wèn)到一個(gè)不存在的地址,默認(rèn)slave應(yīng)該提供ERROR響應(yīng);當(dāng)IDLE或BUSY傳輸訪問(wèn)到一個(gè)不存在的地址,默認(rèn)slave會(huì)響應(yīng)OKAY。地址譯碼器會(huì)帶有實(shí)現(xiàn)默認(rèn)slave的功能。
仲裁
仲裁機(jī)制保證了任意時(shí)刻只有一個(gè)master可以接入總線。arbiter決定哪個(gè)發(fā)出接入請(qǐng)求的master可以接入總線,這通過(guò)優(yōu)先級(jí)算法實(shí)現(xiàn)。AHB規(guī)范并沒(méi)有給出優(yōu)先級(jí)算法,設(shè)計(jì)者需要根據(jù)具體的系統(tǒng)要求定義。一般情況下arbiter不會(huì)中斷一個(gè)burst傳輸,將總線接入權(quán)讓給其他master。當(dāng)然未定義長(zhǎng)度的burst傳輸是可以打斷的,這要看優(yōu)先級(jí)算法是如何規(guī)定的。如果一筆burst被打斷,master再度獲得接入權(quán)限時(shí),會(huì)傳遞剩余的部分。如一筆長(zhǎng)度為INCR8的傳輸在傳遞3 beat后被打斷,master再次獲得接入授權(quán)后,會(huì)繼續(xù)傳輸剩余的5 beat,剩余部分可以由一個(gè)SINGLE和一個(gè)INCR4組成,或者一個(gè)INCR。
HBUSREQx:master向arbiter發(fā)出接入請(qǐng)求的信號(hào)。
HLOCKx:指示是否要進(jìn)行不可中斷的傳輸,這一信號(hào)與HBUSREQx同時(shí)由master向arbiter發(fā)出。
HGRANTx:arbiter產(chǎn)生指示master獲得授權(quán),當(dāng)HGRANTx信號(hào)為高同時(shí)HREADY為高時(shí),master可以向總線傳輸?shù)刂沸盘?hào)。
HMASTER[3:0]:arbiter產(chǎn)生指示哪個(gè)master獲得授權(quán),這一信號(hào)用于地址控制多路來(lái)選擇哪個(gè)master接入總線。
HMASTERLOCK:arbiter產(chǎn)生指示當(dāng)前傳輸是否為鎖定序列傳輸。
HSPLIT:供支持SPLIT傳輸使用。
評(píng)論
查看更多