![]() |
為設計方便起見,在程序中設計三類狀態(tài)機:總線狀態(tài)狀態(tài)機、總線主設備查詢狀態(tài)機、仲裁狀態(tài)機。
2.1 總線狀態(tài)狀態(tài)機
總線狀態(tài)狀態(tài)機用于記錄總線事務的狀態(tài),定義如下:
type bus_state is(IDLE,BUSY,LAST_DATA,FINISH)
四種狀態(tài)分別表示總線空閑、忙、最后一個數據傳輸期以及傳輸完成。狀態(tài)圖如圖3。
![]() |
2.2總線主設備查詢狀態(tài)機
總線主設備查詢狀態(tài)機用來決定當前是否需要重新指定一個主設備,重新指定一個主設備的條件是:(1)當前被授權的設備已開始傳輸;(2)當前被授權的設備沒有開始傳輸并且超時。將主設備查詢狀態(tài)分為IDLE、GNT1、GNT2、WAIT_NOBUSY和WAIT_BUSY2五個狀態(tài),并設置計數器count,當總線上某個設備被授權,但16個周期仍然沒有開始操作,count超過16,被視為超時,仲裁器可以撤銷其仲裁授權,并傳授其他設備,程序根據這個狀態(tài)機的輸出結果決定仲裁狀態(tài)機是否改變。
狀態(tài)轉換如圖4所示,狀態(tài)機描述的VHDL代碼略。
![]() |
主設備查詢狀態(tài)機的輸出信號search_master: 
該狀態(tài)機的驅動條件是由總線狀態(tài)狀態(tài)機的輸出結果(busbusy)、仲裁狀態(tài)機的狀態(tài)(idle,park)和計數器的產生的超時信號(timeout)組成,設置WAIT_BUSY2的目的是為了避免可能會在AD線和PAR線上出現的沖突。該狀態(tài)機的輸出search_master作為仲裁狀態(tài)機狀態(tài)轉換使能信號,只有該信號有效時,仲裁狀態(tài)機才進行當前狀態(tài)的改變。
2.3 仲裁狀態(tài)機
仲裁狀態(tài)機表示總線仲裁器的狀態(tài),定義如下:
狀態(tài)轉變過程如圖5所示,狀態(tài)機描述的VHDL代碼略。
![]() |
仲裁器根據仲裁狀態(tài)機當前狀態(tài)控制仲裁授權信號(GNT)的給出。









