AHB-Lite簡介


AHB總線實現了簡單的基於burst的傳輸,數據總線帶寬可配置32-1024bit。可以實現簡單的fixed pipeline在address/control phase和

             data phase之間。

典型的AHB的slave包括:internal memory device,external memory interfaces,high bandwidth peripheral。

AHB必須是對齊傳輸,word,addr[1:0]為0,half-word,addr[0]為0。包括wrap burst傳輸,也必須是對齊的。

 

AHB-Lite協議是整個AHB協議的子集,只支持一個總線主設備,不需要總線仲裁器及相應的總線請求/授權協議,

             不支持Retry和Split響應。

AHB-Lite的典型應用結構是一個AHB-Lite master,一些AHB-Lite slaves。slave由APB總線實現,HSEL信號由一個

             address decoder產生。從slave到master的rdata,response由一個slave-to-master multiplexor通過選址

             送給master。

 

AHB中的transfer由兩部分組成,Address phase,Data phase。

slave可以通過信號HREADY來延長data phase,但是不能延長address phase。

在master比較繁忙時,可以通過busy transfer,表示burst還在繼續,相當於多延時一個address cycle。

 

AHB信號大致可以分為五類:

            Global signals:HCLK,HRESETn;

            Master signals:HADDR,32bit的地址線。

                                   HBURST,3bitde burst長度和類型。支持長度為4/8/16的INCR/WRAP類型的burst。

                                                  未定義長度的INCR類型的burst。和Single burst兩種新類型。

                                    HMASTLOCK,表示一個locked的transfer,主要用在一個存在多個master訪問的slave原語操

                                                  作中。因為AHB並不存在亂序操作,所以單一master時,並沒用。arm建議,lock transfer之后

                                                  加一個IDLE的transfer。

                                   HPROT,4bit包含data/opcode,supervisor/user之外,還包含bufferable,cacheable兩位 

                                                AHB並沒有對secure world的支持。

                                   HSIZE, 3bit表示transfer的帶寬,必須小於AHB配置的BUS width。    

                                                AHB中的byte lanes由address offset來決定,對於32bit的bus,0x1在小端格

                                                  式就只選擇最低的byte。 

                                   HTRANS,2bit,只有AHB的信號,表示前后兩個transfer之間的關系。

                                                  IDLE,表示無數據傳輸,在lock transfer之后以idle結束。slave必須返回OKAY response。

                                                 BUSY,允許master在一個transfer中加入idle cycle。並不實現數據的傳輸,address和control

                                                            signals反映在下一個transfer。 

                                                 NONSEQUENTIAL,表示一個single transfer或者一個burst的第一個transfer。 

                                                            這個transfer的address和control signal和前一個transfer沒關系。

                                                 SEQUENTIAL,表示INCR/WRAP類型的transfer。control signal和前一個transfer一樣。

                                                            address根據前一個transfer計算得到。

                                                 AHB的每個transfer的控制是分開的,其中包含burst信息,而AXI的transfer是打包在一個burst中

                                                 的。AHB是基於transfer的,AXI是基於burst的。

                                   HWDATA,32bit。

                                  HWRITE,1--write;0--read。

             Slave signals:HRDATA,31bit數據,從slave送往Multiplexor。

                                  HREADYOUT,從slave送往Multiplexor表示每個slave自己的READY信號,最終變為HREADY。

                                  HRESP,從slave送往Multiplexor的response信號。

            Decode signal:HSEL,從decoder送往slave的HSEL信號,由高位地址線組合邏輯生成。

       Multiplexor signals:HRDATA,31bit,從Multiplexor送往master,讀數據。

                                     HREADY,從Multiplexor送往master,transfer結束信號。

                                     HRESP,從Multiplexor送往master,response信號。

 

AHB中的transfer:主要依靠address,data之間的overlapping來實現pipeline。

                          所以當slave在data phase通過HREADY延長一個 transfer時,下一個transfer的address phase不能被即時

                                    采樣,也會被延長。建議slave插入的wait state不超過16個clk。

                          AHB沒有enable信號,所以不進行傳輸時,HTRANS信號有0,表示idle,無數據傳輸。

                         只有HTRANS為10,non_seq時,才會開始一個transfer。

                          AHB中的transfer是不能超過1KB的,不是AXI的4KB。

                          AHB中要實現一個SEQ的transfer也是NONSEQ起始,然后每次clock rising 采樣,其后增加SEQ或BUSY類型

                                    的transfer,也是每個clock被采樣。祥見相冊。

                          固定長度的burst,只能自然結束,最后一個seq transfer后,結束。

                          undefined INCR burst,通過non_seq和idle transfer來進行結束。

                          不允許通過busy tansfer,來結束burst。

 

                          burst中的wrap操作:

                          AHB的wrap中要求兩種對齊:1)字對齊;2)wrap對齊;

                          Aligned_address = (INT(start_address/number_of_bytes) * number_of_bytes)

                          Wrap_Boundary = (INT(start_address/number_of_bytes*burst_length) *(number_of_bytes*burst_length))

                          Address_1 = start_address

                          Address_n = Aligned_address + (N-1) * number_of_bytes

                          wrap的邊界地址等於burst_length*size的對齊地址,在16byte的對齊,只有低四位變化,每次增加4。

 

                          當slave在一個transfer中插入wait state時,下一transfer的可以類型改變,但是會有限制。

                                  1)前一transfer在IDLE類型,這一transfer可以是變為NONSEQ類型;

                                  2)前一transfer在BUSY類型且length固定,這一transfer可以變為SEQ類型;

                                  3)前一transfer在undefined burst length且在BUSY類型,這一transfer可以變為任意類型。

                              當slave在一個transfer中插入wait state時,在以下情況下可以改變address。

                                   1)當前是一個IDLE類型transfer,address可以改變。

                                   2)當slave返回一個error時,可以在HREADY為低時,改變地址。

 

AHB中一個transfer傳輸的結果:

1) Transfer pending------Hresp=0, Hready=0;

2) Transfer complete------Hresp=0, Hready=1;

3) error response first cycle-----Hresp=1, Hready=0;

4) error response second cycle----Hresp=1, Hready=1; 

 

AHB中的error返回,必須持續兩個clock,提前一個cycle可以讓master在發出下一個transfer之前,意識到這個transfer的error。

在slave需要更長時間返回resp時,也最多只能有兩個cycle的error resp,通過ready進行extend。

 

一個seq的transfer一般不能超過1K,因為一般IP的地址空間都是以1K為單位的,如果一個transfer超過了IP邊界,因為address的值是不變的,所以會導致

第二個IP傳輸的數據出錯,這時應該用NONSEQ重新發起一個新的transfer。

 

盡管AHB中有wrap類型的傳輸,但是addr的計算還是master每一個cycle都計算一次的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM