AHB總線實(shí)現(xiàn)了簡(jiǎn)單的基于burst的傳輸,數(shù)據(jù)總線帶寬可配置32-1024bit,。可以實(shí)現(xiàn)簡(jiǎn)單的fixed pipeline在address/control phase和 data phase之間,。 典型的AHB的slave包括:internal memory device,,external memory interfaces,high bandwidth peripheral,。 AHB必須是對(duì)齊傳輸,,word,addr[1:0]為0,half-word,addr[0]為0,。包括wrap burst傳輸,,也必須是對(duì)齊的。
AHB-Lite協(xié)議是整個(gè)AHB協(xié)議的子集,,只支持一個(gè)總線主設(shè)備,,不需要總線仲裁器及相應(yīng)的總線請(qǐng)求/授權(quán)協(xié)議, 不支持Retry和Split響應(yīng),。 AHB-Lite的典型應(yīng)用結(jié)構(gòu)是一個(gè)AHB-Lite master,,一些AHB-Lite slaves。slave由APB總線實(shí)現(xiàn),,HSEL信號(hào)由一個(gè) address decoder產(chǎn)生,。從slave到master的rdata,response由一個(gè)slave-to-master multiplexor通過選址 送給master,。
AHB中的transfer由兩部分組成,,Address phase,Data phase,。 slave可以通過信號(hào)HREADY來延長(zhǎng)data phase,,但是不能延長(zhǎng)address phase。 在master比較繁忙時(shí),,可以通過busy transfer,,表示burst還在繼續(xù),相當(dāng)于多延時(shí)一個(gè)address cycle,。
AHB信號(hào)大致可以分為五類: Global signals:HCLK,,HRESETn; Master signals:HADDR,,32bit的地址線,。 HBURST,3bitde burst長(zhǎng)度和類型,。支持長(zhǎng)度為4/8/16的INCR/WRAP類型的burst,。 未定義長(zhǎng)度的INCR類型的burst。和Single burst兩種新類型,。 HMASTLOCK,,表示一個(gè)locked的transfer,,主要用在一個(gè)存在多個(gè)master訪問的slave原語操 作中。因?yàn)锳HB并不存在亂序操作,,所以單一master時(shí),,并沒用。arm建議,,lock transfer之后 加一個(gè)IDLE的transfer,。 HPROT,4bit包含data/opcode,supervisor/user之外,,還包含bufferable,cacheable兩位 AHB并沒有對(duì)secure world的支持,。 HSIZE, 3bit表示transfer的帶寬,,必須小于AHB配置的BUS width,。 AHB中的byte lanes由address offset來決定,對(duì)于32bit的bus,,0x1在小端格 式就只選擇最低的byte,。 HTRANS,2bit,,只有AHB的信號(hào),,表示前后兩個(gè)transfer之間的關(guān)系。 IDLE,,表示無數(shù)據(jù)傳輸,,在lock transfer之后以idle結(jié)束。slave必須返回OKAY response,。 BUSY,,允許master在一個(gè)transfer中加入idle cycle。并不實(shí)現(xiàn)數(shù)據(jù)的傳輸,,address和control signals反映在下一個(gè)transfer,。 NONSEQUENTIAL,表示一個(gè)single transfer或者一個(gè)burst的第一個(gè)transfer,。 這個(gè)transfer的address和control signal和前一個(gè)transfer沒關(guān)系,。 SEQUENTIAL,表示INCR/WRAP類型的transfer,。control signal和前一個(gè)transfer一樣,。 address根據(jù)前一個(gè)transfer計(jì)算得到。 AHB的每個(gè)transfer的控制是分開的,,其中包含burst信息,,而AXI的transfer是打包在一個(gè)burst中 的。AHB是基于transfer的,AXI是基于burst的,。 HWDATA,,32bit。 HWRITE,,1--write,;0--read。 Slave signals:HRDATA,,31bit數(shù)據(jù),從slave送往Multiplexor,。 HREADYOUT,,從slave送往Multiplexor表示每個(gè)slave自己的READY信號(hào),最終變?yōu)镠READY,。 HRESP,,從slave送往Multiplexor的response信號(hào)。 Decode signal:HSEL,,從decoder送往slave的HSEL信號(hào),,由高位地址線組合邏輯生成。 Multiplexor signals:HRDATA,,31bit,,從Multiplexor送往master,讀數(shù)據(jù),。 HREADY,,從Multiplexor送往master,transfer結(jié)束信號(hào),。 HRESP,,從Multiplexor送往master,response信號(hào),。
AHB中的transfer:主要依靠address,,data之間的overlapping來實(shí)現(xiàn)pipeline。 所以當(dāng)slave在data phase通過HREADY延長(zhǎng)一個(gè) transfer時(shí),,下一個(gè)transfer的address phase不能被即時(shí) 采樣,,也會(huì)被延長(zhǎng)。建議slave插入的wait state不超過16個(gè)clk,。 AHB沒有enable信號(hào),,所以不進(jìn)行傳輸時(shí),HTRANS信號(hào)有0,,表示idle,,無數(shù)據(jù)傳輸。 只有HTRANS為10,non_seq時(shí),才會(huì)開始一個(gè)transfer,。
AHB中的transfer是不能超過1KB的,,不是AXI的4KB。 AHB中要實(shí)現(xiàn)一個(gè)SEQ的transfer也是NONSEQ起始,,然后每次clock rising 采樣,,其后增加SEQ或BUSY類型 的transfer,也是每個(gè)clock被采樣,。祥見相冊(cè),。
固定長(zhǎng)度的burst,只能自然結(jié)束,,最后一個(gè)seq transfer后,,結(jié)束。 undefined INCR burst,,通過non_seq和idle transfer來進(jìn)行結(jié)束,。 不允許通過busy tansfer,來結(jié)束burst,。
burst中的wrap操作: AHB的wrap中要求兩種對(duì)齊:1)字對(duì)齊,;2)wrap對(duì)齊; 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的對(duì)齊地址,,在16byte的對(duì)齊,,只有低四位變化,每次增加4,。
當(dāng)slave在一個(gè)transfer中插入wait state時(shí),,下一transfer的可以類型改變,但是會(huì)有限制,。 1)前一transfer在IDLE類型,,這一transfer可以是變?yōu)镹ONSEQ類型; 2)前一transfer在BUSY類型且length固定,,這一transfer可以變?yōu)镾EQ類型,; 3)前一transfer在undefined burst length且在BUSY類型,這一transfer可以變?yōu)槿我忸愋汀?/p> 當(dāng)slave在一個(gè)transfer中插入wait state時(shí),,在以下情況下可以改變address,。 1)當(dāng)前是一個(gè)IDLE類型transfer,address可以改變,。 2)當(dāng)slave返回一個(gè)error時(shí),,可以在HREADY為低時(shí),改變地址,。
AHB中一個(gè)transfer傳輸?shù)慕Y(jié)果: 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返回,,必須持續(xù)兩個(gè)clock,,提前一個(gè)cycle可以讓master在發(fā)出下一個(gè)transfer之前,意識(shí)到這個(gè)transfer的error,。 在slave需要更長(zhǎng)時(shí)間返回slave時(shí),,也最多只能有兩個(gè)cycle的error resp,通過ready進(jìn)行extend,。
一個(gè)seq的transfer一般不能超過1K,,因?yàn)橐话鉏P的地址空間都是以1K為單位的,如果一個(gè)transfer超過了IP邊界,,因?yàn)閍ddress的值是不變的,,所以會(huì)導(dǎo)致 第二個(gè)IP傳輸?shù)臄?shù)據(jù)出錯(cuò),這時(shí)應(yīng)該用NONSEQ重新發(fā)起一個(gè)新的transfer,。
盡管AHB中有wrap類型的傳輸,,但是addr的計(jì)算還是master每一個(gè)cycle都計(jì)算一次的。 |
|