1.前言
相信很多朋友對AMBA都比較熟悉了,對AHB總線也不陌生,在AHB總線中,hready這個信號是最難理解,最容易搞錯,也是系統調試的過程中出問題最多的地方之一,同時也是很多面試官最喜歡問的知識點之一。本文做一個梳理,幫助大家徹底理解這個知識點。
2.理解一下hready和hready_out的含義
我們先看一個簡單的場景,就是系統中只有一個AHB Slave的場景。
下圖是AHB2協議中的一張截圖,其中hready作為Slave發給Master的握手信號,它表明AHB總線上該筆傳輸的完成。AHB Slave的HREADY信號是Slave“延長”AHB傳輸的數據階段的指示。如果Slave不能立即響應,通常會發生這種情況,因此該Slave將HREADY信號拉低,以通知Master延長數據階段,以便Slave有足夠的時間響應。這種場景比較簡單,根本不需要hready_in信號,我就不仔細分析了,相信大家都能看懂。
寫到這里,補充一下,AHB2協議里只有hready的叫法,并沒有hready_out這一說法的,到AHB3和AHB5協議里就有了hready_out的叫法。但協議原文中都沒有hready_in的稱呼,hready_in只是工程項目中比較形象、比較好溝通的一種稱呼。這種稱呼很流行,甚至很多ip廠商也這么給信號命名。大家對照理解,不要搞混了。下圖中的hready就是通常所說的hready_out。到這里,相信你已經理解了hready和hready_out的含義。
![pYYBAGOdB0eAVgixAAHm9bLDO20828.png](https://file.elecfans.com/web2/M00/84/A7/pYYBAGOdB0eAVgixAAHm9bLDO20828.png)
3.為什么AHB_slave還會有hready_in信號
下面讓我們看一個復雜的場景,就是系統中有多個AHB Slave,那么當發生流水操作(pipeline)的時候應該怎么處理呢?關于這個問題,AHB5協議中給出了一個經典的方案,參見下方截圖。每個Slave的HREADYOUT都“與”在一起,以給出系統范圍的HREADY信號,該信號再作為輸入反饋給每個Slave。這意味著每個Slave將具有2個HREADY信號: HREADY_in(系統范圍的HREADY信號)和HREADY_out。因此,如果任何Slave將HREADYOUT設為低,則hready_in將變為低電平。因此每個Slave都等該hready_in變為高電平,然后才能做出響應。每個Slave的HREADYOUT用來擴展數據階段,并且每個Slave必須有hready_in,以便知道系統上是否有任何其他Slave正在請求數據階段擴展。如果任何Slave的hready_in為低電平,則該Slave必須等待其hready_in變為高電平,然后才能響應任何AHB請求。因此每個Slave都有兩個hready信號,一個hready_in信號,一個hready_out信號。建議每個Slave的HREADY信號默認值設為“1”。 感謝關注微信公眾號《芯片驗證日記》
![poYBAGOdB5-AcH_9AAIAaf-qHBw434.png](https://file.elecfans.com/web2/M00/84/1E/poYBAGOdB5-AcH_9AAIAaf-qHBw434.png)
4.hready_in作用示例
即便是pipeline操作,如果AHB連續對同一個Slave進行突發讀寫,hready_in的作用也體現不出來,只有下邊的情況才能體現hready_in的作用:
①AHB流水操作;②AHB連續訪問,并且是跨多個Slave訪問;③Slave存在反壓。如下圖所示:
AHB master第二次訪問S0時,S0出現反壓,但此時訪問S1的addr phase已經出現,且此時S1處于ready狀態(hready_out_s1=1),但由于此時訪問S0的data_phase未結束,S0通過hready_out_s0反壓hready_in_s1,因此即便S1處于ready狀態也必須hold住。因此在設計AHB slave時,必須hready_out和hready_in同時為高,當次訪問才能完成。感謝關注微信公眾號《芯片驗證日記》
![poYBAGOdB8CAMKLFAAGduq9Q9Y0753.png](https://file.elecfans.com/web2/M00/84/1E/poYBAGOdB8CAMKLFAAGduq9Q9Y0753.png)
審核編輯 黃昊宇
-
信號
+關注
關注
11文章
2809瀏覽量
77162 -
AHB
+關注
關注
0文章
24瀏覽量
9857
發布評論請先 登錄
相關推薦
AHB總線中HREADY和HRESP信號如何處理?
請教關于ADE7880快速讀取諧波寄存器
hpi不穩定 請問是什么原因?
USB2.0設備控制器IP核的AHB接口設計實現
如何理解LabVIEW中ModBus Slave函數的用途?
【FPGA開發者項目連載】基于高云FPGA的方波發生器
【Sipeed TangNano9K開發板試用體驗】+ 可繪畫的LCD顯示屏
AHB總線中的HLOCK信號和HMASTLOCK信號之間有什么關系
Arm AMBA協議集中address phase是必須等到hready有效才結束嗎
Arm AMBA協議集中ahb2.0和3.0必須要有dummy master和default slave嗎?
ARM966E-S技術參考手冊
安路FPGA SF1 RISC-V 串口通訊
AHB Slave Decoder和AHB Slave Interface接口的使用說明
![<b class='flag-5'>AHB</b> <b class='flag-5'>Slave</b> Decoder和<b class='flag-5'>AHB</b> <b class='flag-5'>Slave</b> Interface接口的使用說明](https://file.elecfans.com/web1/M00/CE/CE/o4YBAF-rTTyAfWGNAACflSugHAE865.png)
數字IC驗證:ARM總線協議AMBA中AHB、APB的簡介、區別與聯系
![數字IC驗證:ARM總線協議AMBA<b class='flag-5'>中</b><b class='flag-5'>AHB</b>、APB的簡介、區別與聯系](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論