1.AHB概述
AHB總線是一種專為高性能同步傳輸設(shè)計(jì)的總線,層次高于APB總線,支持以下特性:
- 突發(fā)傳輸
- 拆分事務(wù)
- 主設(shè)備單時鐘周期傳輸
- 單時鐘沿操作
- 非三態(tài)實(shí)現(xiàn)
- 寬數(shù)據(jù)總線配置(64/128bit)
1.1.典型AHB系統(tǒng)
典型的AHB系統(tǒng)包括以下部分:
- 可支持高帶寬傳輸?shù)闹鞲煽偩€
- AHB主設(shè)備(如高性能CPU和DMA設(shè)備等)
- AHB從設(shè)備(存儲器和APB橋等)
1.2.AHB互連
AHB的互連使用多路復(fù)用器策略,由以下幾個部分組成:
- 主設(shè)備:發(fā)起通信,所有主設(shè)備將通行地址和數(shù)據(jù)發(fā)送到主設(shè)備多路復(fù)用器
- 從設(shè)備:回應(yīng)通信,從主設(shè)備多路復(fù)用器獲得通信地址和數(shù)據(jù),將回應(yīng)數(shù)據(jù)發(fā)送到從設(shè)備多路復(fù)用器
- 判決器:主設(shè)備多路復(fù)用器的控制器,控制哪一個主設(shè)備的通信數(shù)據(jù)可以被發(fā)送到從機(jī)
- 解碼器:從設(shè)備多路復(fù)用器的控制器,控制哪一個從設(shè)備的通信數(shù)據(jù)可以被發(fā)送回主機(jī)
2.AHB信號
2.1.基本AHB信號
| 信號名 | 位寬 | 來源 | 描述 |
|---|---|---|---|
| HCLK | 1 | 系統(tǒng)時鐘 | 傳輸系統(tǒng)的時鐘 |
| HRESETn | 1 | 復(fù)位系統(tǒng) | 傳輸系統(tǒng)復(fù)位信號,低有效 |
| HADDR | 32 | 主機(jī) | 主機(jī)發(fā)送傳輸目標(biāo)地址 |
| HTRANS | 2 | 主機(jī) | 當(dāng)前發(fā)生的傳輸類型 |
| HWRITE | 1 | 主機(jī) | 讀寫信號:1-寫操作;0-讀操作 |
| HSIZE | 3 | 主機(jī) | 傳輸位寬,標(biāo)記一次傳輸?shù)奈粚?/td> |
| HBURST | 3 | 主機(jī) | 突發(fā)傳輸類型 |
| HPROT | 4 | 主機(jī) | 協(xié)議類型,標(biāo)記傳輸使用協(xié)議的額外信息 |
| HWDATA | 32 | 主機(jī) | 發(fā)送數(shù)據(jù),主機(jī)發(fā)送到從機(jī)的數(shù)據(jù) |
| HSELx | x | 解碼器 | 標(biāo)記哪一個從機(jī)被選中,由地址解碼產(chǎn)生 |
| HRDATA | 32 | 從機(jī) | 接收數(shù)據(jù),從機(jī)發(fā)送到主機(jī)的數(shù)據(jù) |
| HREADY | 1 | 從機(jī) | 傳輸完成信號,高有效 |
| HRESP | 2 | 從機(jī) | 傳輸狀態(tài)的額外標(biāo)記 |
2.2.多主機(jī)傳輸信號
| 信號名 | 位寬 | 來源 | 描述 |
|---|---|---|---|
| HBUSREQx | x | 主機(jī) | 主機(jī)x向判決器請求傳輸,最多支持16個主機(jī) |
| HLOCKx | x | 主機(jī) | 主機(jī)x向判決器請求鎖定傳輸,其他主機(jī)在鎖定期內(nèi)無法使用總線 |
| HGRANTx | x | 判決器 | 主機(jī)x權(quán)限標(biāo)記信號,當(dāng)有效時(為高有效),主機(jī)x在AHB總線空閑時具有最高的控制權(quán)限 |
| HMASTER | 4 | 判決器 | 主機(jī)標(biāo)號,標(biāo)記當(dāng)前傳輸由哪個主機(jī)控制 |
| HMASTLOCK | 1 | 判決器 | 鎖定標(biāo)記,標(biāo)記當(dāng)前總線被某個主機(jī)鎖定 |
| HSPLITx | 16x | 從機(jī) | 事務(wù)分離標(biāo)記,用于標(biāo)記哪個主機(jī)應(yīng)當(dāng)重啟事務(wù) |
3.AHB傳輸
AHB傳輸分為以下幾個部分:
- 主機(jī)獲取總線使用權(quán):主機(jī)向判決器發(fā)送總線請求信號,判決器發(fā)送應(yīng)答后主機(jī)可以開始傳輸
- 數(shù)據(jù)傳輸:主機(jī)向從機(jī)傳輸數(shù)據(jù),分為以下兩個部分:
- 發(fā)送地址和控制信號:包括地址,位寬,突發(fā)類型(增量突發(fā)和回卷突發(fā))等控制信號,僅一個時鐘周期
- 數(shù)據(jù)傳輸:進(jìn)行數(shù)據(jù)交換,一個或多個時鐘周期
- 從機(jī)應(yīng)答:從機(jī)通過HRESP和HREADY標(biāo)記完成狀態(tài),對于HRESP,有以下狀態(tài):
- OKAY:標(biāo)記傳輸完成,當(dāng)HRESP為該狀態(tài)且HREADY拉高時,傳輸完成
- ERROR:標(biāo)記傳輸出錯
- RETRY和SPLIT:標(biāo)記傳輸未完成,主設(shè)備仍需要占用總線
關(guān)于突發(fā)傳輸,理論上進(jìn)行突發(fā)傳輸?shù)闹髟O(shè)備應(yīng)當(dāng)一直占據(jù)總線,但是為了縮短等待時間,AHB允許打斷突發(fā)傳輸,并在一段時間后重啟該突發(fā)傳輸
3.1.基本傳輸
AHB的基本傳輸過程由兩個部分組成:
- 地址/控制傳輸:傳輸?shù)刂沸畔⒑涂刂菩畔?,僅占一個時鐘周期
- 數(shù)據(jù)傳輸:可能需要多個時鐘周期,由信號HREADY決定(拉高才結(jié)束數(shù)據(jù)傳輸)
3.1.1.無等待傳輸

無等待傳輸下,一個傳輸與三個時鐘沿有關(guān):
- 第一個時鐘沿:第一個時鐘沿后,主機(jī)將地址信息和控制信息發(fā)送到總線上
- 第二個時鐘沿:第二個時鐘沿上,從機(jī)采樣主機(jī)的地址信息和控制信息。第二個時鐘沿后,從機(jī)將響應(yīng)信號和數(shù)據(jù)發(fā)送到總線上
- 第三個時鐘沿:主機(jī)采樣從機(jī)響應(yīng)信號和數(shù)據(jù),傳輸完成
3.1.2.有等待傳輸

有等待傳輸下,數(shù)據(jù)傳輸階段可以擴(kuò)展,即在HREADY拉高之前,數(shù)據(jù)傳輸階段不結(jié)束。要求寫數(shù)據(jù)在HREADY拉高前保持穩(wěn)定,主機(jī)在HREADY拉高后采樣讀數(shù)據(jù)
3.1.3.流水線傳輸

AHB總線支持流水線傳輸,即將傳輸分為地址-數(shù)據(jù)兩個部分流水進(jìn)行,本次傳輸?shù)牡刂繁厝辉谏弦淮蔚刂分?,本次傳輸?shù)臄?shù)據(jù)必定緊跟在本次傳輸?shù)刂分?。因此,?dāng)上一次的數(shù)據(jù)傳輸阻塞導(dǎo)致傳輸周期增加時,下一傳輸?shù)牡刂分芷谝矔鄳?yīng)的變長:
- A1和C1為第一次傳輸?shù)牡刂泛涂刂菩盘?/li>
- WD1和RD1是第一次傳輸?shù)臄?shù)據(jù),該傳輸為單時鐘即無阻塞的傳輸,同時發(fā)送的還有下一次傳輸?shù)牡刂泛涂刂菩盘枺篈2和C2
- 第二次傳輸為多周期傳輸,因此WD2和RD2占據(jù)多個時鐘周期,對應(yīng)的,同時發(fā)送的第三次傳輸?shù)刂泛涂刂菩臕3和C3也被延遲相同的時鐘周期數(shù)
- WD3和RD3為第三次傳輸?shù)臄?shù)據(jù)
3.2.傳輸類型
傳輸類型使用端口HTRANS標(biāo)記,有以下取值:
- IDLE(00):標(biāo)志主機(jī)占有AHB總線,但是沒有數(shù)據(jù)傳輸發(fā)生。從機(jī)需要使用OKAY狀態(tài)回應(yīng)該類型
- BUSY(01):標(biāo)志主機(jī)占有AHB總線并在進(jìn)行猝發(fā)傳輸,但下一個傳輸不能立刻發(fā)生。從機(jī)需要使用OKAY狀態(tài)回應(yīng)
- NONSEQ(10):標(biāo)志主機(jī)當(dāng)前發(fā)送的地址和控制信號與上一次傳輸無關(guān)(單次傳輸就是該狀態(tài))
- SEQ(11):標(biāo)記主機(jī)處于猝發(fā)傳輸?shù)闹虚g部分,即當(dāng)前發(fā)送的地址和控制信號與上一次地址和控制信號有關(guān)
例子如下圖所示:
- 第一次傳輸,開啟一次猝發(fā)傳輸,因此該地址與上一次傳輸無關(guān),使用類型NONSEQ
- 第二次傳輸,無法立刻進(jìn)行傳輸,因此使用BUSY標(biāo)記延遲一個周期,延遲后可以進(jìn)行傳輸,且處于猝發(fā)傳輸中,因此地址與上一次地址有關(guān),使用SEQ標(biāo)記
- 之后均為猝發(fā)傳輸,均使用SEQ類型
3.3.猝發(fā)傳輸
3.3.1.猝發(fā)類型
猝發(fā)傳輸分為兩類:
- 增量猝發(fā):傳輸過程中傳輸?shù)刂愤f增。下一次傳輸?shù)牡刂肥巧弦淮蔚刂芳由弦粋€增量
- 回卷猝發(fā):猝發(fā)的地址范圍被限制在一個固定范圍之內(nèi),傳輸?shù)刂愤f增,若是超出則回到地址范圍的開始的地址。例如從0x34進(jìn)行增量為4,范圍為16的回卷猝發(fā),地址順序?yàn)?x34、0x38、0x3c,0x30
猝發(fā)類型使用字段HBURST標(biāo)記,含義如下表所示:
| HBURST[2:0] | 類型 | 描述 |
|---|---|---|
| 000 | SINGLE | 單個傳輸 |
| 001 | INCR | 無限制長度的增量猝發(fā)傳輸 |
| 010 | WRAP4 | 4拍回卷猝發(fā) |
| 011 | INCR4 | 4拍增量猝發(fā) |
| 100 | WRAP8 | 8拍回卷猝發(fā) |
| 101 | INCR8 | 8拍增量猝發(fā) |
| 110 | WRAP16 | 16拍回卷猝發(fā) |
| 111 | INCR16 | 16拍增量猝發(fā) |
注意一次猝發(fā)傳輸不能跨越1kB的地址區(qū)間,且傳輸?shù)钠鹗嫉刂繁仨毰c數(shù)據(jù)類型對應(yīng),例如傳輸字?jǐn)?shù)據(jù)的二進(jìn)制起始地址必須滿足后兩位為00。
3.3.2.猝發(fā)終止
從機(jī)通過監(jiān)控HTRANS發(fā)現(xiàn)猝發(fā)傳輸?shù)慕K止:
- 若下一個HTRANS標(biāo)記為BUSY或SEQ:猝發(fā)傳輸未終止
- 若下一個HTRANS標(biāo)記為NONSEQ或IDLE:上一次猝發(fā)傳輸已經(jīng)終止
若猝發(fā)傳輸是提前終止的,如總線控制權(quán)被剝奪,那么主機(jī)需要在可以進(jìn)行傳輸時重建猝發(fā)傳輸。例如一個4拍傳輸僅發(fā)送了一拍就終止,主機(jī)需要使用INCR類型的猝發(fā)構(gòu)建3拍傳輸以重建。
3.3.3.猝發(fā)切分傳輸
[暫時略過,需要使用時再補(bǔ)充]
3.4.數(shù)據(jù)總線
當(dāng)傳輸位寬不同時,數(shù)據(jù)總線的使用情況如下所示(小端傳輸):
4.控制信號
4.1.控制總線
4.1.1.HSIZE
HSIZE控制傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)位數(shù),如下表所示:
| HSIZE(bit) | 位寬 | 描述 |
|---|---|---|
| 000 | 8 | 字節(jié)傳輸(Byte) |
| 001 | 16 | 半字傳輸(Half word) |
| 010 | 32 | 字傳輸(Word) |
| 011 | 64 | - |
| 100 | 128 | 4字傳輸 |
| 101 | 256 | 8字傳輸 |
| 110 | 512 | - |
| 111 | 1024 | - |
4.1.2.HPROT
HPROT提供對傳輸協(xié)議的額外說明,如下所示:
- HPROT[3]:0-Cacheable;1-Not cacheable
- HPROT[2]:0-Bufferable;1-Not bufferable
- HPROT[1]:0-Privileged access;1-User access
- HPROT[0]:0-Opcode fetch;1-Data access
4.1.3.HSELx
HSELx由地址解碼器產(chǎn)生,用于指示哪個從機(jī)被選中。從機(jī)當(dāng)HREADY為高,即一次傳輸完成后鎖存HSELx信號,若HSELx在HREADY為低時有效,將不會對本次傳輸產(chǎn)生影響。
4.1.4.HRESETn
HRESETn信號是復(fù)位信號,該信號是異步觸發(fā)并同步釋放的,當(dāng)該信號有效時,所有主機(jī)均要將相關(guān)信號復(fù)位,包括將HTRANS置為IDLE。
4.2.響應(yīng)信號
4.2.1.HREADY
HREADY信號標(biāo)志傳輸是否完成:0-未完成,需要插入額外周期;1-已完成
4.2.2.HRESP
HRESP用于標(biāo)記傳輸完成的狀態(tài):
- OKAY(00):傳輸完成
- ERROR(01):傳輸錯誤,例如協(xié)議錯誤或?qū)懭胫蛔x地址
- RETRY(10):傳輸未正常完成,需要重新嘗試傳輸。該響應(yīng)不會改變優(yōu)先級
- SPLIT(11):傳輸未正常完成,需要從下一個地址重新啟動傳輸。該響應(yīng)可能改變優(yōu)先級
4.3.總線仲裁
仲裁器保證一個時刻僅有一個主設(shè)備占有總線,因此當(dāng)有多個主設(shè)備提出訪問請求時,仲裁器通過仲裁信號仲裁哪一個主設(shè)備獲得總線使用權(quán)
4.3.1.仲裁信號
仲裁信號見[2.2.多主機(jī)傳輸信號]
4.3.2.主機(jī)獲取總線
主機(jī)獲取總線控制權(quán)分為兩個步驟:
- 主機(jī)分別通過HBUSREQx和HLOCKx分別向仲裁器申請獲取或鎖定總線控制權(quán)
- 仲裁器分配總線控制權(quán)
主機(jī)通過自己的HBUSREQx向仲裁器申請總線控制權(quán),仲裁器在時鐘上升沿采樣該信號,并通過內(nèi)置的優(yōu)先級算法決定總線控制權(quán)歸屬。一般來說,仲裁器僅會在一次傳輸完成后分配總線控制權(quán),即將HMASTER置為獲取總線控制權(quán)的主機(jī)編號且在上一次突發(fā)傳輸?shù)牡箶?shù)第二個傳輸時改變HGRANTx,因此新HGRANTx可以在上一次突發(fā)傳輸?shù)淖詈笠淮蝹鬏斖瑫r被采樣。
但如果需要,仲裁器也可以通過打斷傳輸?shù)姆绞絻?yōu)先執(zhí)行優(yōu)先級更高的傳輸。若獲取總線控制權(quán)的主機(jī)申請鎖定總線,其他主機(jī)將無法獲得總線控制權(quán)。
對于指定突發(fā)長度的突發(fā)傳輸,仲裁器根據(jù)突發(fā)長度判斷需要總線控制權(quán)的時間,若結(jié)束后啟動下一次突發(fā)傳輸,需要再次請求控制權(quán)。對于未指定長度的突發(fā)傳輸,主機(jī)需要在傳輸過程中一直保持請求信號拉高,否則將仲裁器無法判斷何時收回總線控制權(quán)。
當(dāng)無主機(jī)申請總線時,總線的控制權(quán)被交給默認(rèn)的主機(jī),即使該主機(jī)沒有申請總線控制權(quán)。此時默認(rèn)主機(jī)需要將HTRANS置為IDLE狀態(tài)。