21、dummy master和default master有什么區別?
default master用于描述當系統中沒有任何一個master請求訪問總線時被仲裁選擇到的master。通常,最有可能請求總線的master設置成default master。
dummy master是一個只執行IDLE傳輸的master。它在一個系統中是必需的,以便arbiter可以授予一個master仲裁,但是并保證不執行任何真正的傳輸。在兩種場景下,仲裁需要dummy master:1、LOCK傳輸返回SPLIT 響應,2、當返回SPLIT 響應時,其他的master也正處于等待SPLIT響應的狀態。
22、HPROT的默認值建議是什么?
對于不需要這些保護信息的masters ,建議HPROT默認值為HPROT[3:0]=4‘b0011,即Non-cacheable, Non-bufferable, Privileged, Data Accesses
23、在復位過程中,AHB信號的狀態是什么?
SPEC規定,在復位期間總線信號應處于有效電平(即邏輯“0”或者邏輯“1”),不能是X態或者高阻態。 當然,具體是高電平還是低電平由設計去把握,需要強制約束的是,HTRANS需要為IDLE。
另外在復位過程中,需要確保系統中所有slave輸出的HREADY需要為高,避免發生死鎖,特別是針對多slave的系統。 在這里需要了解輸出hready和輸出hready的區別。

24、master 重建被終止的burst 傳輸時,是否有限制?
唯一的限制是,master 需要使用合法的burst組合來重建被終止的burst傳輸。例如,如果一個master 執行8拍burst傳輸,但在完成3次傳輸后就失去了對總線的控制。這時其余的5次burst傳輸可以使用SINGLE burst傳輸,和INCR4 burst傳輸,也可以使用5拍INCR burst傳輸。
為簡單起見,建議master 使用INCR burst傳輸來重建剩余的傳輸。
25、 AHB如何處理LOCKed SPLITs?
當傳輸被SPLIT 時,arbiter 將該master 從仲裁選擇中移除 ,直到slave 指示傳輸可以完成。當訪問是LOCKed 時,訪問不能被另一個master訪問中斷。
AHB系統能夠同時處理這兩個需求的唯一方法是在訪問請求LOCKed 并且被SPLIT時授予一個 "dummy master" 仲裁。dummy master在鎖定傳輸期間只執行IDLE傳輸。因為將仲裁授予任何其他的master 都將違反AHB LOCK相關的協議。
當所有的請求響應都處于SPLIT 狀態時,也需要使用 dummy master 在此期間一直發送IDLE傳輸 。所以,建議支持split的slave要一直監測HMASTLOCK 輸入信號,因為此時split響應沒有任何意義。
26、AHB中的wrapping burst可以和總的傳輸字節數對齊么?
可以,此行為符合AHB協議。
以四拍傳輸大小為4字節的wrapping burst傳輸為例(共傳輸16字節)。如果傳輸的起始地址是0x30,則burst傳輸的四次地址為0x30、0x34、0x38和0x3C。盡管HBURST被設置為WRAP4,但實際上不會發生wrap,當然這也是AMBA AHB協議允許的。
27、master 應該在什么時候拉高和拉低locked 傳輸中的HLOCK信號?
HLOCK信號至少在locked 傳輸的地址階段開始之前至少一個周期拉高,以便arbiter能夠在地址階段開始時采樣到HLOCK信號。
在locked傳輸的最后一次傳輸的地址階段,master 應該拉低HLOCK信號。
28、master 什么時候應該拉低HBUSREQ 信號?
對于一個未定義長度的burst 傳輸(INCR),master 必須保持其hbusreq信號的拉高狀態,直到它開始了burst 傳輸中最后一次傳輸的地址階段。
對于定義長度的burst 傳輸,一旦獲得了第一次總線傳輸的授權,master 就可以拉低hbusreq信號??梢赃@樣做的原因是,arbiter可以計算burst傳輸中的傳輸數量,并保持授予給定master總線權限,直到burst傳輸完成。
29、在一次locked 傳輸后,arbiter 什么時候才可以授予另一個master 總線權限?
arbiter 總是在locked 傳輸結束時授予該master 一拍額外的傳輸,即master 在locked 傳輸的最后一次傳輸的數據階段會在拉低HMASTLOCK 信號執行一次傳輸的地址階段。
在此期間,仲裁器可以將HGRANT信號更改為新的master,但如果上次locked 傳輸的數據階段接收到SPLIT 或RETRY 響應,則master將驅動HGRANT信號給正在執行locked 傳輸的master(RETRY 響應場景)或者授權給Dummy master(SPLIT 響應場景)。
30、master 可以在burst傳輸期間拉低HLOCK嗎?
AHB SPEC要求在burst傳輸期間所有控制信號(除HADDR和HTRANS外)保持不變。
因此,HLOCK必須在burst傳輸期間保持高,并且只能在最后一次的地址階段拉低。
31、當master 沒有請求但是被授予總線權限時,master 可以執行非IDLE以外的傳輸嗎?
是的。master 沒有請求總線時,可以執行IDLE以外的傳輸。在這種情況下,仍然建議master 拉高其請求信號,以便arbiter 在傳輸進行期間不會將總線的權限授予給其他的master 。
32、如果默認情況下當前master 被授予了總線權限,那么在啟動非idle傳輸之前,它必須拉高hbusreq多少個周期?

33、HLOCK 信號和HMASTLOCK 信號之間的關系是什么?
在每個傳輸的地址階段,arbiter 會采樣master的HLOCK信號。如果此時HLOCK被拉高,則arbiter 將在傳輸的地址階段拉高HMASTLOCK 信號。
34、 HGRANT信號什么時候可以改變?
HGRANT信號可以在任何周期中發生改變,可能出現以下情況:
1)、有可能在當前傳輸完成之前拉高然后拉低HGRANT信號,因為HGRANT信號只有在HREADY為高時才由masters采樣。
2)、master 可以在沒有請求總線的時候被授予總線 ,也可能在master請求的同一周期被授予總線。
35、為什么HADDR有時為arbiter的輸入?
地址總線HADDR不需要作為arbiter 的輸入。但在某些系統設計中,使用地址總線來確定在master之間切換的時間點可能很有用。例如,arbiter 可以被設計為在burst 傳輸邊界改變總線所有權。
36、為什么在AHB中有一個1KB邊界的限制?
1KB邊界限制在AHB中表示burst傳輸不能跨越1KB邊界的約束。該限制旨在防止burst傳輸從一個slave交叉到另一個slave。在實踐中,這意味著如果master必須要進行跨1KB邊界的burst傳輸則必須切分成兩次傳輸。例如:
0x3F00 x3F40 x3F80 x3FC0 x4000 x4040 x4080
這種1KB地址邊界地址傳輸需要劃分成
NSEQ SEQ SEQ SEQ NSEQ SEQ SEQ
37、舉例說明什么是Wrap 邊界 ? WRAP4,WRAP8,WRAP16 ?
Wrap邊界取決于Hsize和burst beat的數量(4,8,16)
"For wrapping bursts, if the start address of the transfer is not aligned to the total number of bytes in the burst (size x beats) then the address of the transfers in the burst will wrap when the boundary is reached"
AHB SPEC
Case1: Start Address is 0x4,Wrap4,Hsize is 2.
beat1 - 0x4beat2 - 0x8beat3 - 0xcbeat4 - 0x0
Hsize為2,意味著一次傳輸4字節。Wrap4 意味著一次burst共4拍,并且總的傳輸字節為16(beats*Hsize)字節。如果起始地址從0x4開始,則在0x10處wrap
Case2: Start Address is 0x4,Wrap4,Hsize is 1.
beat1 - 0x4beat2 - 0x6beat3 - 0x0beat4 - 0x2
Hsize為1,意味著一次傳輸2字節。Wrap4 意味著一次burst共4拍,并且總的傳輸字節為8(beats*Hsize)字節。如果起始地址從0x4開始,則在0x8處wrap
Case3: Start Address is 0x4,Wrap8,Hsize is 1.
beat1 - 0x4beat2 - 0x6beat3 - 0x8beat4 - 0xabeat5 - 0xcbeat6 - 0xebeat7 - 0x0beat8 - 0x2
Hsize為1,意味著一次傳輸2字節。Wrap8 意味著一次burst共8拍,并且總的傳輸字節為16(beats*Hsize)字節。如果起始地址從0x4開始,則在0x10處wrap。
往期回顧:
AMBA AHB面試題連載(上篇)