來源:
在一篇中文期刊上看到的。
1. AHB仲裁器信號:
2. 仲裁過程包括四個基本步驟:
1.主設備使用HBuSREQx信號請求訪問總線;
2.仲裁器置位相應的HGRATx信號,表示主設備的申請已成功,它將在當前傳輸完成時獲得總線訪問權;
3.主設備擁有地址/控制總線;
4.主設備擁有數據總線。
3. 請求總線訪問
1. master使用HBUSREQx想arbiter請求總線的控制權,仲裁器在時鐘上升沿採樣HBUSREQx信號,然後通過仲裁算法(協議中未規定)來決定哪一個master接管總線。
2. 如果master請求鎖定總線(不希望傳輸被其他master的請求打斷),那麼master還必須斷言HLOCKx信號,使其他主機不能控制總線。
3. 申請到總線的master可以執行一次burst傳輸,arbiter需要知道HTRANS和HBURST信號,以知道一次burst的停止。如果master希望在一次burst之後還要進行burst傳輸,那麼master需要在burst傳輸中再次請求HBUSREQ。
4. 如果主機在一次burst中丟掉了對總線的控制,那麼需要重新申請HBUSREQ。
5. 如果master進行未定長度的burst,那麼master需要在傳輸過程中一直申請HBUSREQ。
6. 如果沒有master請求bus,那麼總線會被移交給缺省主機,HTRANS上發送IDLE。
4. 仲裁器不響應master總線請求:
arbiter可以通過仲裁算法對發起HBUSREQ的master進行仲裁,決定哪個master佔用總線,但是以下情況下,當前佔用總線的master保持對總線的佔用權:
1. 當前master 用HLOCK信號鎖定了總線。
2. 當前主設備處於定常的burst傳輸。
3. 發生split相應的主設備的請求會被屏蔽。
5. 授予總線
arbiter通過HGRANT信號表示總線中哪個master的優先級最高,並且在當前HREADY爲高(也就是當前數據讀寫完成)時將總線授予優先權最高的master。同時arbiter改變HMASTER表示哪個master佔用bus。
6. 突發提前終止
通常仲裁器在突發結束之前不會將總線移交給新的主機。但是,如果仲裁器決定突發必須被提前終止以防止過長的總線訪問時間,那麼可能在一個突發完成之前將總線訪問權移交給另一個主機。如果主機在突發傳輸中失去對總線的訪問,必須重新斷言總線請求信號。主機必須確保HBURsI'和瑚限ANS信號都被更新以確保不再執行一個完整的突發傳輸。
7. 仲裁算法
仲裁算法有固定優先級的仲裁(Fixed priority),循環式優先級仲裁(Round Robin),或是隨機性的仲裁(Random)和競爭仲裁優先級(Tournament)
固定優先級算法,就是指總線中各主設備的優先級是事先確定好的,在仲裁器仲裁過程中固定不變。
而循環優先級算法則不同,各主設備的優先級在仲裁器的仲裁過程中不是一成不變,而是根據一定規律發生變化的。
兩者各有利弊,採用固定優先級算法,可以對那些有重要數據傳輸或有大量實時數據傳輸以及經常需要佔用總線的主設備賦予較高的優先權,以便有效地利用AHB總線。固定優先級算法的缺點是可能會出現總線主設備“撐死”和“餓死”的現象,即優先級高的主設備總是優於優先級低的主設備獲得總線的訪問權,從而導致優先級低的設備不能及時獲得總線的訪問權而造成數據發送堵塞。
相反,採用循環優先級算法則可以克服這種“飽餓”不均的弊端,在循環優先級算法中,由於其優先級隨着每個總線週期動態地改變,各個設備在總線上的身份平等,獲得總線佔用權的機會均等。所以,在一定意義上來說,優先級循環是最公平的算法。循環優先級的缺點是當處理某些設備的大批量實時數據時會造成效率下降。
8. 一些仲裁場景
8.1 普通仲裁
希望獲得總線權的master向仲裁器發出總線仲裁請求信號,經仲裁器根據仲裁邏輯仲裁後,發出總線應答信號HGRANT。Master會在時鐘的上升沿採樣HGRANT信號,當採樣到HGRANT有效,並且HREADY同時爲高電平時,表示該master獲得了總線的訪問權並且可以開始傳輸。
8.2 master lock 仲裁
如果獲得總線訪問權的master不希望在傳輸的過程中被打斷,而想要進行連續的不可中斷的傳輸,那麼master在發出總線請求信號(HBUSREQ)的同時可以發出總線鎖存信號HLOCK,即將HLOCK置爲高電平。
當master獲得總線訪問權後仲裁器會發出相應的響應信號HMASTLOCK,這樣arbiter就不會把總線釋放給其它的master,直到master自行將HLOCK置爲低電平取消鎖存信號,仲裁器纔會在進行總線仲裁的動作,使其它的master可以進行總線操作。這裏我們假定固定長度的突發優先級的傳輸都是不可中斷的。
8.3 SPLIT 傳輸
仲裁器還可以仲裁希望能完成SPLIT傳輸的總線slave。當仲裁器觀察到master收到SPLIT響應,則會將master的優先權給屏蔽起來,當master的總線訪問權被屏蔽後,該master將無法再獲得總線訪問的權利,即使是沒有其它master訪問總線時也一樣。同時,slave需要記錄master的信號,以便以後要通知仲裁器恢復那個master的優先級。這可以從仲裁器發出的HMASTER[3:0]信號查得。若所有的master都收到SPLIT的響應信號,則仲裁器會把總線訪問移交給dummy master(一種只會發出IDLE傳輸的master)。
當迴應SPLIT的slave處理完傳輸的要求後,會發出HSPLIT[15:0]的信號給master . 仲裁器會在時鐘的每一個上升沿採樣HSPLIT[15:0],當它收到HSPLIT[15:0]後,會將原來被屏蔽掉的master的總線優先權解封,這樣master的優先權就會回覆原來的狀態而有機會去重新獲得總線訪問權。
8.4 RETRY 傳輸
當slave發出RETRY的響應信號時,仲裁器內master的優先權不會發生改變。但是當有更高優先級的master的發出總線請求信號時,總線的訪問權會由高優先級的master取得,但是如果原來得到RETRY響應的master是當時總線請求的master中優先級別最高的,則總線還是繼續會被佔住,而無法釋放給其它有需要的master。