AHB總線協(xié)議
擴展數(shù)據(jù)周期的一個負效應是必需延長相應的下一筆傳輸?shù)牡刂分芷?。A和C為零等待傳輸,B加入了一個等待周期,因此相應的C地址周期要進行擴展。
第一個周期,master發(fā)起一個操作A,并驅(qū)動地址和控制信號;
第二個周期,slave收到了來自總線的請求,將HREADY信號拉高;
第二個周期上升沿后,master發(fā)現(xiàn)有操作B需要執(zhí)行,并且檢查到上一周期的HREADY為高,則發(fā)起第二個操作B;
第三個周期,master獲取HREADY信號為高,表示操作A已經(jīng)完成;
第三個周期上升沿后,master發(fā)現(xiàn)有操作C需要執(zhí)行,并且檢查到上一周期的HREADY為高,則發(fā)起第三個操作C;
第三個周期上升沿后,slave由于繁忙插入了一個等待狀態(tài),將HREADY拉低;
第四個周期,master獲取HREADY信號為低,知道slave希望等待,于是master保持和上一拍一樣的信號;
第四個周期,slave處理完了事務,將HREADY信號拉高,表示可以繼續(xù)處理;
第五個周期,master獲取HREADY信號為高,知道slave已經(jīng)可以處理B操作;
第五個周期上升沿后,B操作完成;
第六個周期上升沿后,C操作完成。
需要注意幾點:
HREADY在一定程度上表示了slave的pipeline能力,在AHB中是2個pipe,也就是總線上最多存在2個未處理完的transfer。只有當總線上未完成的transfer少于2個時,master才能發(fā)起操作。
5.4 遞增burst
T1,master傳入地址和控制信號,因為是新的burst開始,transfer的類型是NONSEQ;
T2,由于master不能在第二個周期里處理第二拍,所以master使用BUSY transfer來為自己延長一個周期的時間。注意,雖然是延長了一個周期,但是master需要給出第二個transfer的地址和控制信號;
T3,slave采集到了master發(fā)來的BUSY,知道m(xù)aster需要等待一拍,所以slave會忽略這個BUSY transfer;
T3,master發(fā)起了第二個transfer,因為是同一個burst的第二個transfer,所以transfer的類型是SEQ;
T5,slave將HREADY信號拉低,告訴master需要等待一個周期;
T8時刻完成最后一個transfer。
需要注意的 雖然slave會忽略掉BUSY transfer,但是master也需要給出下一拍的地址和控制信號。
5.5 wrapping 4-beat burst
跟之前唯一的區(qū)別在于地址的不同,在0x3C地址之后,根據(jù)回環(huán)的地址邊界,第三拍的地址變?yōu)?x30。一共四拍,4個地址,每個地址各不相同,這四個地址是一個回環(huán)范圍。起始地址決定了回環(huán)操作的回環(huán)范圍。
5.6 遞增4拍burst
和上面的基本一致,只不過地址在0x30并不回環(huán),而是遞增。
6.控制信號
HTRANS[1:0] | 傳輸類型 | Description |
00 | IDLE | 主設(shè)備占用總線,但沒進行傳輸 兩次burst傳輸中間主設(shè)備可發(fā)IDLE 此時就算slave被使能,也不會從總線上獲取任何的數(shù)據(jù)信號。如果此時salve被選中,那么每一個IDLE周期slave都要通過HRESP[1:0]返回一個OKAY響應 |
01 | BUSY | 主設(shè)備占用總線,但是在burst傳輸過程中還沒有準備好進行下一次傳輸 一次burst傳輸中間主設(shè)備可發(fā)BUSY 這時slave不會從總線上收取數(shù)據(jù)而是等待,并且通過HRESP[1:0]返回一個OKAY響應。需要注意的是,這個transfer需要給出下一拍的地址和控制信號,盡管slave不會去采樣。 |
10 | NONSEQ | 表明一次單個數(shù)據(jù)的傳輸或者一次burst傳輸?shù)牡谝粋€數(shù)據(jù) 地址和控制信號與上一次傳輸無關(guān) |
11 | SEQ | burst傳輸接下來的數(shù)據(jù) 地址和上一次傳輸?shù)牡刂肥窍嚓P(guā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傳輸類型
burst不能超過1K地址邊界。
HBURST[2:0] | 類型 | 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可以決定這筆傳輸?shù)倪M程,而master不能取消已經(jīng)發(fā)出的傳輸。slave通過HREADY信號反映傳輸是否完成,通過HRESP[1:0]反映傳輸?shù)臓顟B(tài)。
slave可以如下方式完成一筆傳輸:
立即完成一筆傳輸;
延遲一個或幾個周期完成傳輸;
傳輸失敗返回error;
延遲傳輸,釋放總線。
傳輸完成HREADY
為高時傳輸完成,為低時傳輸需要延遲。
傳輸響應HRESP[1:0]
00: OKAY
01: ERROR
10: RETRY
傳輸未完成,請求主設(shè)備重新開始一個傳輸,arbiter會繼續(xù)使用通常的優(yōu)先級
11: SPLIT
傳輸未完成,請求主設(shè)備分離一次傳輸,arbiter會調(diào)整優(yōu)先級方案以便其他請求總線的主設(shè)備可以訪問總線
地址譯碼
地址譯碼器用于為總線上每個slave提供選擇信號HSELx,選擇信號是通過組合邏輯對地址碼譯碼產(chǎn)生的。只有當前的數(shù)據(jù)傳輸完成后(HREADY為高),slave才會采樣地址和控制信號以及HSELx。在一定條件下可能會出現(xiàn)這樣的情況:產(chǎn)生HSELx信號而HREADY為低,在當前傳輸后slave會改變。
每個slave最小的地址空間為1KB,所有的master的burst傳輸上限也是1KB,如此設(shè)計保證了不會出現(xiàn)地址越界問題。當一個設(shè)計不會用到所有的地址空間時,可能出現(xiàn)訪問到一個不存在的地址的情況,這就需要增加一個附加的默認slave來為上面的情況提供一個響應。當SEQ或NONSEQ傳輸訪問到一個不存在的地址,默認slave應該提供ERROR響應;當IDLE或BUSY傳輸訪問到一個不存在的地址,默認slave會響應OKAY。地址譯碼器會帶有實現(xiàn)默認slave的功能。
仲裁
仲裁機制保證了任意時刻只有一個master可以接入總線。arbiter決定哪個發(fā)出接入請求的master可以接入總線,這通過優(yōu)先級算法實現(xiàn)。AHB規(guī)范并沒有給出優(yōu)先級算法,設(shè)計者需要根據(jù)具體的系統(tǒng)要求定義。一般情況下arbiter不會中斷一個burst傳輸,將總線接入權(quán)讓給其他master。當然未定義長度的burst傳輸是可以打斷的,這要看優(yōu)先級算法是如何規(guī)定的。如果一筆burst被打斷,master再度獲得接入權(quán)限時,會傳遞剩余的部分。如一筆長度為INCR8的傳輸在傳遞3 beat后被打斷,master再次獲得接入授權(quán)后,會繼續(xù)傳輸剩余的5 beat,剩余部分可以由一個SINGLE和一個INCR4組成,或者一個INCR。
HBUSREQx:master向arbiter發(fā)出接入請求的信號。
HLOCKx:指示是否要進行不可中斷的傳輸,這一信號與HBUSREQx同時由master向arbiter發(fā)出。
HGRANTx:arbiter產(chǎn)生指示master獲得授權(quán),當HGRANTx信號為高同時HREADY為高時,master可以向總線傳輸?shù)刂沸盘枴?/p>
HMASTER[3:0]:arbiter產(chǎn)生指示哪個master獲得授權(quán),這一信號用于地址控制多路來選擇哪個master接入總線。
HMASTERLOCK:arbiter產(chǎn)生指示當前傳輸是否為鎖定序列傳輸。
HSPLIT:供支持SPLIT傳輸使用。
評論