AHB總線(xiàn)協(xié)議
擴展數據周期的一個(gè)負效應是必需延長(cháng)相應的下一筆傳輸的地址周期。A和C為零等待傳輸,B加入了一個(gè)等待周期,因此相應的C地址周期要進(jìn)行擴展。
第一個(gè)周期,master發(fā)起一個(gè)操作A,并驅動(dòng)地址和控制信號;
第二個(gè)周期,slave收到了來(lái)自總線(xiàn)的請求,將HREADY信號拉高;
第二個(gè)周期上升沿后,master發(fā)現有操作B需要執行,并且檢查到上一周期的HREADY為高,則發(fā)起第二個(gè)操作B;
第三個(gè)周期,master獲取HREADY信號為高,表示操作A已經(jīng)完成;
第三個(gè)周期上升沿后,master發(fā)現有操作C需要執行,并且檢查到上一周期的HREADY為高,則發(fā)起第三個(gè)操作C;
第三個(gè)周期上升沿后,slave由于繁忙插入了一個(gè)等待狀態(tài),將HREADY拉低;
第四個(gè)周期,master獲取HREADY信號為低,知道slave希望等待,于是master保持和上一拍一樣的信號;
第四個(gè)周期,slave處理完了事務(wù),將HREADY信號拉高,表示可以繼續處理;
第五個(gè)周期,master獲取HREADY信號為高,知道slave已經(jīng)可以處理B操作;
第五個(gè)周期上升沿后,B操作完成;
第六個(gè)周期上升沿后,C操作完成。
需要注意幾點(diǎn):
HREADY在一定程度上表示了slave的pipeline能力,在A(yíng)HB中是2個(gè)pipe,也就是總線(xiàn)上最多存在2個(gè)未處理完的transfer。只有當總線(xiàn)上未完成的transfer少于2個(gè)時(shí),master才能發(fā)起操作。
5.4 遞增burst

T1,master傳入地址和控制信號,因為是新的burst開(kāi)始,transfer的類(lèi)型是NONSEQ;
T2,由于master不能在第二個(gè)周期里處理第二拍,所以master使用BUSY transfer來(lái)為自己延長(cháng)一個(gè)周期的時(shí)間。注意,雖然是延長(cháng)了一個(gè)周期,但是master需要給出第二個(gè)transfer的地址和控制信號;
T3,slave采集到了master發(fā)來(lái)的BUSY,知道master需要等待一拍,所以slave會(huì )忽略這個(gè)BUSY transfer;
T3,master發(fā)起了第二個(gè)transfer,因為是同一個(gè)burst的第二個(gè)transfer,所以transfer的類(lèi)型是SEQ;
T5,slave將HREADY信號拉低,告訴master需要等待一個(gè)周期;
T8時(shí)刻完成最后一個(gè)transfer。
需要注意的 雖然slave會(huì )忽略掉BUSY transfer,但是master也需要給出下一拍的地址和控制信號。
5.5 wrapping 4-beat burst

跟之前唯一的區別在于地址的不同,在0x3C地址之后,根據回環(huán)的地址邊界,第三拍的地址變?yōu)?x30。一共四拍,4個(gè)地址,每個(gè)地址各不相同,這四個(gè)地址是一個(gè)回環(huán)范圍。起始地址決定了回環(huán)操作的回環(huán)范圍。
5.6 遞增4拍burst

和上面的基本一致,只不過(guò)地址在0x30并不回環(huán),而是遞增。
6.控制信號
HTRANS[1:0] | 傳輸類(lèi)型 | Description |
00 | IDLE | 主設備占用總線(xiàn),但沒(méi)進(jìn)行傳輸 兩次burst傳輸中間主設備可發(fā)IDLE 此時(shí)就算slave被使能,也不會(huì )從總線(xiàn)上獲取任何的數據信號。如果此時(shí)salve被選中,那么每一個(gè)IDLE周期slave都要通過(guò)HRESP[1:0]返回一個(gè)OKAY響應 |
01 | BUSY | 主設備占用總線(xiàn),但是在burst傳輸過(guò)程中還沒(méi)有準備好進(jìn)行下一次傳輸 一次burst傳輸中間主設備可發(fā)BUSY 這時(shí)slave不會(huì )從總線(xiàn)上收取數據而是等待,并且通過(guò)HRESP[1:0]返回一個(gè)OKAY響應。需要注意的是,這個(gè)transfer需要給出下一拍的地址和控制信號,盡管slave不會(huì )去采樣。 |
10 | NONSEQ | 表明一次單個(gè)數據的傳輸或者一次burst傳輸的第一個(gè)數據 地址和控制信號與上一次傳輸無(wú)關(guān) |
11 | SEQ | burst傳輸接下來(lái)的數據 地址和上一次傳輸的地址是相關(guān)的,這時(shí)總線(xiàn)上的控制信號應當與之前的保持一致,地址視情況遞增或者回環(huán)。 |
HSIZE[2:0] | Size | Description |
000 | 8 bits | Byte |
001 | 16 bits | Halfword |
010 | 32 bits | Word |
011 | 64 bits | - |
100 | 128 bits | 4-word line |
101 | 256 bits | 8-word line |
110 | 512 bits | - |
111 | 1024 bits | - |
- Burst傳輸類(lèi)型
burst不能超過(guò)1K地址邊界。
HBURST[2:0] | 類(lèi)型 | Description |
000 | SINGLE | Single transfer |
001 | INCR | Incrementing burst of unspecified length |
010 | WRAP4 | 4-beat wrapping burst |
011 | INCR4 | 4-beat increment burst |
100 | WRAP8 | 8-beat wrapping burst |
101 | INCR8 | 8-beat increment burst |
110 | WRAP16 | 16-beat wrapping burst |
111 | INCR16 | 16-beat increment burst |
響應信號
master發(fā)起一筆傳輸后,slave可以決定這筆傳輸的進(jìn)程,而master不能取消已經(jīng)發(fā)出的傳輸。slave通過(guò)HREADY信號反映傳輸是否完成,通過(guò)HRESP[1:0]反映傳輸的狀態(tài)。
slave可以如下方式完成一筆傳輸:
立即完成一筆傳輸;
延遲一個(gè)或幾個(gè)周期完成傳輸;
傳輸失敗返回error;
延遲傳輸,釋放總線(xiàn)。
傳輸完成HREADY
為高時(shí)傳輸完成,為低時(shí)傳輸需要延遲。
傳輸響應HRESP[1:0]
00: OKAY
01: ERROR
10: RETRY
傳輸未完成,請求主設備重新開(kāi)始一個(gè)傳輸,arbiter會(huì )繼續使用通常的優(yōu)先級
11: SPLIT
傳輸未完成,請求主設備分離一次傳輸,arbiter會(huì )調整優(yōu)先級方案以便其他請求總線(xiàn)的主設備可以訪(fǎng)問(wèn)總線(xiàn)
地址譯碼
地址譯碼器用于為總線(xiàn)上每個(gè)slave提供選擇信號HSELx,選擇信號是通過(guò)組合邏輯對地址碼譯碼產(chǎn)生的。只有當前的數據傳輸完成后(HREADY為高),slave才會(huì )采樣地址和控制信號以及HSELx。在一定條件下可能會(huì )出現這樣的情況:產(chǎn)生HSELx信號而HREADY為低,在當前傳輸后slave會(huì )改變。
每個(gè)slave最小的地址空間為1KB,所有的master的burst傳輸上限也是1KB,如此設計保證了不會(huì )出現地址越界問(wèn)題。當一個(gè)設計不會(huì )用到所有的地址空間時(shí),可能出現訪(fǎng)問(wèn)到一個(gè)不存在的地址的情況,這就需要增加一個(gè)附加的默認slave來(lái)為上面的情況提供一個(gè)響應。當SEQ或NONSEQ傳輸訪(fǎng)問(wèn)到一個(gè)不存在的地址,默認slave應該提供ERROR響應;當IDLE或BUSY傳輸訪(fǎng)問(wèn)到一個(gè)不存在的地址,默認slave會(huì )響應OKAY。地址譯碼器會(huì )帶有實(shí)現默認slave的功能。
仲裁
仲裁機制保證了任意時(shí)刻只有一個(gè)master可以接入總線(xiàn)。arbiter決定哪個(gè)發(fā)出接入請求的master可以接入總線(xiàn),這通過(guò)優(yōu)先級算法實(shí)現。AHB規范并沒(méi)有給出優(yōu)先級算法,設計者需要根據具體的系統要求定義。一般情況下arbiter不會(huì )中斷一個(gè)burst傳輸,將總線(xiàn)接入權讓給其他master。當然未定義長(cháng)度的burst傳輸是可以打斷的,這要看優(yōu)先級算法是如何規定的。如果一筆burst被打斷,master再度獲得接入權限時(shí),會(huì )傳遞剩余的部分。如一筆長(cháng)度為INCR8的傳輸在傳遞3 beat后被打斷,master再次獲得接入授權后,會(huì )繼續傳輸剩余的5 beat,剩余部分可以由一個(gè)SINGLE和一個(gè)INCR4組成,或者一個(gè)INCR。
HBUSREQx:master向arbiter發(fā)出接入請求的信號。
HLOCKx:指示是否要進(jìn)行不可中斷的傳輸,這一信號與HBUSREQx同時(shí)由master向arbiter發(fā)出。
HGRANTx:arbiter產(chǎn)生指示master獲得授權,當HGRANTx信號為高同時(shí)HREADY為高時(shí),master可以向總線(xiàn)傳輸地址信號。
HMASTER[3:0]:arbiter產(chǎn)生指示哪個(gè)master獲得授權,這一信號用于地址控制多路來(lái)選擇哪個(gè)master接入總線(xiàn)。
HMASTERLOCK:arbiter產(chǎn)生指示當前傳輸是否為鎖定序列傳輸。
HSPLIT:供支持SPLIT傳輸使用。
評論