1.前言
相信很多朋友對AMBA都比較熟悉了,對AHB總線也不陌生,在AHB總線中,hready這個信號是最難理解,最容易搞錯,也是系統(tǒng)調試的過程中出問題最多的地方之一,同時也是很多面試官最喜歡問的知識點之一。本文做一個梳理,幫助大家徹底理解這個知識點。
2.理解一下hready和hready_out的含義
我們先看一個簡單的場景,就是系統(tǒng)中只有一個AHB Slave的場景。
下圖是AHB2協(xié)議中的一張截圖,其中hready作為Slave發(fā)給Master的握手信號,它表明AHB總線上該筆傳輸?shù)耐瓿?。AHB Slave的HREADY信號是Slave“延長”AHB傳輸?shù)臄?shù)據(jù)階段的指示。如果Slave不能立即響應,通常會發(fā)生這種情況,因此該Slave將HREADY信號拉低,以通知Master延長數(shù)據(jù)階段,以便Slave有足夠的時間響應。這種場景比較簡單,根本不需要hready_in信號,我就不仔細分析了,相信大家都能看懂。
寫到這里,補充一下,AHB2協(xié)議里只有hready的叫法,并沒有hready_out這一說法的,到AHB3和AHB5協(xié)議里就有了hready_out的叫法。但協(xié)議原文中都沒有hready_in的稱呼,hready_in只是工程項目中比較形象、比較好溝通的一種稱呼。這種稱呼很流行,甚至很多ip廠商也這么給信號命名。大家對照理解,不要搞混了。下圖中的hready就是通常所說的hready_out。到這里,相信你已經(jīng)理解了hready和hready_out的含義。
3.為什么AHB_slave還會有hready_in信號
下面讓我們看一個復雜的場景,就是系統(tǒng)中有多個AHB Slave,那么當發(fā)生流水操作(pipeline)的時候應該怎么處理呢?關于這個問題,AHB5協(xié)議中給出了一個經(jīng)典的方案,參見下方截圖。每個Slave的HREADYOUT都“與”在一起,以給出系統(tǒng)范圍的HREADY信號,該信號再作為輸入反饋給每個Slave。這意味著每個Slave將具有2個HREADY信號: HREADY_in(系統(tǒng)范圍的HREADY信號)和HREADY_out。因此,如果任何Slave將HREADYOUT設為低,則hready_in將變?yōu)榈碗娖健R虼嗣總€Slave都等該hready_in變?yōu)楦唠娖?,然后才能做出響應。每個Slave的HREADYOUT用來擴展數(shù)據(jù)階段,并且每個Slave必須有hready_in,以便知道系統(tǒng)上是否有任何其他Slave正在請求數(shù)據(jù)階段擴展。如果任何Slave的hready_in為低電平,則該Slave必須等待其hready_in變?yōu)楦唠娖?,然后才能響應任何AHB請求。因此每個Slave都有兩個hready信號,一個hready_in信號,一個hready_out信號。建議每個Slave的HREADY信號默認值設為“1”。 感謝關注微信公眾號《芯片驗證日記》
4.hready_in作用示例
即便是pipeline操作,如果AHB連續(xù)對同一個Slave進行突發(fā)讀寫,hready_in的作用也體現(xiàn)不出來,只有下邊的情況才能體現(xiàn)hready_in的作用:
①AHB流水操作;②AHB連續(xù)訪問,并且是跨多個Slave訪問;③Slave存在反壓。如下圖所示:
AHB master第二次訪問S0時,S0出現(xiàn)反壓,但此時訪問S1的addr phase已經(jīng)出現(xiàn),且此時S1處于ready狀態(tài)(hready_out_s1=1),但由于此時訪問S0的data_phase未結束,S0通過hready_out_s0反壓hready_in_s1,因此即便S1處于ready狀態(tài)也必須hold住。因此在設計AHB slave時,必須hready_out和hready_in同時為高,當次訪問才能完成。感謝關注微信公眾號《芯片驗證日記》
審核編輯 黃昊宇
-
信號
+關注
關注
11文章
2794瀏覽量
76871 -
AHB
+關注
關注
0文章
21瀏覽量
9799
發(fā)布評論請先 登錄
相關推薦
評論