AHB總線筆記(三)附AMBA2.0面試提問(wèn)
疊加在一起的AMBA系統(tǒng)Multi-layer:

并行的訪問(wèn)可以提高系統(tǒng)的帶寬。
AHB-Lite
????????假設(shè)AHB上面只有一個(gè)master,再這個(gè)系統(tǒng)下面不需要request,不需要grant,壓根就不需要arbiter,slave也是一樣會(huì)更加簡(jiǎn)單,不需要RETRY也不需要SPLIT,只需要返回ERROR或者OKAY

AHB總結(jié):
※ 主要組成部分:
????Master、slaves、arbiter、decoder 。
※ 傳輸?shù)倪^(guò)程:
????流水線機(jī)制,有address phase 和data phase。
※ 提高性能:
????Burst read/Write。
※ 仲裁機(jī)制:
????總線控制權(quán)的移交。
※ 如果slave短時(shí)間內(nèi)無(wú)法響應(yīng)
????可以把HREADY拉低
※ 如果slave長(zhǎng)時(shí)間無(wú)法響應(yīng)
????可以插入SPLIT或者RETRY
※ 如果master不能進(jìn)行傳輸
????master的HTRANS插入BUSY,注意BUSY和IDLE的區(qū)別,BUSY是插在同一個(gè)burst中間,而IDLE是插在兩次burst中間。
※ Arbiter 的優(yōu)先級(jí)最好可以配置。
※ 如果slave長(zhǎng)時(shí)間不能響應(yīng)的話,一般不支持SPLIT響應(yīng),使用RETRY響應(yīng)。
※ 總線上如果只有一個(gè)Master的話,可以使用AHB Lite協(xié)議,不用arbiter。
APB總線:
APB比AHB要簡(jiǎn)單很多

APB信號(hào):

????????APB總線的信號(hào),開(kāi)頭都是P開(kāi)頭,這點(diǎn)在筆記一有所提到。APB中也有很多的slave ,每個(gè)slave也有一段自己的地址空間,address落在哪個(gè)地址空間內(nèi),哪個(gè)PSELx就會(huì)拉高。PWRITE = 1的時(shí)候就是寫操作,PWRITE = 0的時(shí)候就是讀操作。
PADDR [31:0] 地址總線,由設(shè)備總線的bridge單元驅(qū)動(dòng)。
PSELx 從譯碼器來(lái)的信號(hào),到每一個(gè)總線從設(shè)備x。
PENABLE 用于在設(shè)備總線上把所有訪問(wèn)按時(shí)間階段進(jìn)行。
PRDATA 和 PWDATA 最多32位寬。

APB互連:
????????APB Master會(huì)把AHB輸入的CLK、HADDR、HWRITE、HWDATA全部都傳輸給自己的slave,信號(hào)以廣播的形式傳播給各個(gè)slave,但是具體哪個(gè)slave能得到相應(yīng)開(kāi)始工作還得看PSEL具體選擇了哪個(gè)slave,選中了slave之后PRDATA讀入mux傳回給Bridge。

APB寫傳輸:

????????APB寫操作里面,當(dāng)選中某個(gè)slave時(shí),PSEL信號(hào)拉高,選中slave,然后具體是否寫入還得看PENABLE是否拉高,只有PSEL和額PENABLE同時(shí)拉高時(shí),才可以進(jìn)行數(shù)據(jù)寫入。APB不是pipeline的形式。APB在PSEL信號(hào)拉高后,PENABLE最快也得延遲一個(gè)周期拉高,所以APB數(shù)據(jù)傳輸最快也得兩個(gè)cycle才能寫入一個(gè)數(shù)據(jù)。
APB讀傳輸:

????????讀傳輸和寫傳輸一樣,最快也得兩個(gè)周期讀一個(gè)數(shù)據(jù),APB中沒(méi)有用pipeline,兩個(gè)cycle一個(gè)是SETUP cycle 一個(gè)是ENABLE cycle。
AHB2APB Bridge

????????在上面的APB Bridge里,其實(shí)大部分信號(hào)都是從AHB接入,或者內(nèi)部slave輸出的,實(shí)際上APB需要處理的就是PENABLE信號(hào)。而這個(gè)ENABLE信號(hào)的產(chǎn)生是通過(guò)一個(gè)狀態(tài)機(jī)產(chǎn)生的。

APB slave接口:

APB到AHB接口:
假設(shè)要做一個(gè)AHB的master,要去讀APB的信號(hào)。

????????AHB每?jī)蓚€(gè)cycle才能讀一個(gè),因?yàn)锳PB最快讀數(shù)據(jù)也得兩個(gè)cycle。如果AHB和APB的時(shí)鐘頻率是一樣的,那么PRDATA讀出來(lái)可以直接賦值給HRDATA,但是如果APB的時(shí)鐘頻率更低,那么就不能直接賦值,需要把值用寄存器存一下,然后在返回給AHB。這一張圖就可以把APB的信號(hào)傳輸說(shuō)清楚了,不管是讀和寫,都先給一個(gè)PSEL,然后在下一個(gè)周期PENABLE拉高,進(jìn)行讀或者寫操作。
????????每一個(gè)從設(shè)備都占用系統(tǒng)的一段地址空間。所有的從設(shè)備都是可尋址的。寄存器/存儲(chǔ)器都是內(nèi)存映射方式訪問(wèn)。CPU/IP讀寫其他IP的數(shù)據(jù)類似于讀寫存儲(chǔ)器。

????????CPU和IP之間的通信:

????????CPU 和 IP 進(jìn)行通信,CPU總是主設(shè)備,IP總是從設(shè)備,IP可以發(fā)送一個(gè)中斷請(qǐng)求,CPU 進(jìn)入中斷模式就可以去讀slave的狀態(tài)寄存器,來(lái)判斷你到底想?yún)R報(bào)一個(gè)什么事情,由interrupt service routine(ISR)來(lái)處理中斷。

????????比如DMA和 CPU之間的通信,DMA的狀態(tài)寄存器就是Status, 存放的地址空間為0x04,有ready和busy兩種狀態(tài)。由DMA向CPU發(fā)起一次中斷,然后CPU進(jìn)入中斷模式,去讀DMA狀態(tài)寄存器中的狀態(tài),如果狀態(tài)為ready,并且要發(fā)起一次數(shù)據(jù)搬運(yùn)start,那么就可以給DMA傳輸起始地址、終止地址和數(shù)據(jù)長(zhǎng)度,把數(shù)據(jù)搬運(yùn)的任務(wù)交給DMA。
學(xué)完AMBA 2.0 知道了AHB和APB的協(xié)議,需要徹底掌握:
AHB有哪些組成部分?
APB有哪些組成部分?
AHB信號(hào)由哪些?分別有什么作用?
AHB傳輸有幾個(gè)階段?哪些階段?
burst傳輸時(shí)如何開(kāi)始一段新的INCR傳輸?
burst傳輸能超越1K邊界嗎?為什么?如果跨越1K邊界要怎么處理?
HSEL信號(hào)是如何得到的?
AHB slave有哪些響應(yīng)信號(hào)?
AHB slave短時(shí)間無(wú)法響應(yīng)怎么辦? 長(zhǎng)時(shí)間無(wú)法響應(yīng)怎么辦?
AHB HTRANS中的IDLE和BUSY有什么區(qū)別?
AHB slave的HRESP響應(yīng)的RETRY和SPLIT有什么區(qū)別?
32bit小印第安序是怎么控制數(shù)據(jù)總線的有效字節(jié)的?如果傳輸?shù)臄?shù)據(jù)不是32bit而是8bit,那么傳輸?shù)氖悄?bit,由什么判斷?
master 可以控制總線的條件是什么?
什么是AHB lite?
APB有哪些信號(hào)?分別有什么作用?
APB傳輸有什么特點(diǎn)?
AHB和AHB Lite有什么區(qū)別?
????????如果能完整回答上面的問(wèn)題,那面試提問(wèn) AMBA總線2.0的內(nèi)容就基本沒(méi)什么問(wèn)題了,上面所有問(wèn)題的答案,都可以在我寫的AHB總線筆記里得到答案。
????????祝大家找工作順利。