在存在多個主設備的共享總線片上系統(tǒng)中,仲裁器是必不可少的。它決定哪個主設備可以使用總線。所有的主設備通過置高CYC_O信號向仲裁器請求使用總線,仲裁器則根據用戶自定義的優(yōu)先級算法確定哪個主設備可以使用總線。仲裁器的輸出信號GNT0~GNTN(或者同時輸出更加簡潔的GNT()信號作為選擇器的輸入,如圖24中的例子)對應N個不同的主設備。GNT[N-1…0]用于選擇器的選擇輸入端,以選擇各主設備和從設備對應的輸入信號。需要指出,二輸入與門是最簡單的選擇器,它或者選擇一個信號,或者一個信號也不選。
優(yōu)先級算法最常用的是循環(huán)優(yōu)先級(Round robin)和固定優(yōu)先級相結合。所謂循環(huán)優(yōu)先級是指各個主設備的優(yōu)先級安排按照FIFO的方式組織,排到隊頭的主設備先使用總線,使用完總線后該主設備被插入到FIFO的隊尾。
常見的片上系統(tǒng)的主設備包括一個處理器,一個液晶顯示屏控制器,若干DMA引擎。一般地,液晶顯示屏控制器的優(yōu)先級固定是最高的,DMA引擎的優(yōu)先級次之,而處理器的優(yōu)先級最低。與此同時,處理器是缺省的主設備,也就是說,當沒有其他主設備申請使用總線時,總線的使用權歸處理器。DMA引擎存在多個,它們之間采用循環(huán)優(yōu)先級,表示它們在系統(tǒng)中具有同等的地位。高優(yōu)先級的主設備使用一次總線只完成一次單次操作或者塊操作,然后釋放總線,并試圖再次獲得總線。這樣做的目的是讓出總線給其他主設備插入更加重要的操作。一次塊操作的子操作次數的典型值為4或者8,只在特殊情況下才使用16或者更大。
因而,Wishbone共享總線示例中的仲裁器可以設計如下:
//CYC0 is the default master, but it has lower priority.
module arbiter2M2S(
input CLK,input RST, input CYC0,input CYC1,
output reg GNT0,output reg GNT1,output CYC);
always @(posedge CLK or posedge RST)
begin
if(RST)
{GNT0,GNT1}<=2'b10;
if(CYC1 & !CYC0)
{GNT0,GNT1}<=2'b01;
else if(!CYC1)
{GNT0,GNT1}<=2'b10;
end
assign CYC=GNT1?CYC1:CYC0;
endmodule