所謂固定優(yōu)先級算法,就是指PCI總線中各主控器的優(yōu)先級是事先確定好的,在仲裁器仲裁過程中固定不變;而循環(huán)優(yōu)先級算法則不同,各主控器的優(yōu)先級在仲裁器的仲裁過程中不是一成不變,而是根據(jù)一定規(guī)律發(fā)生變化的。表1給出了采用循環(huán)優(yōu)先級算法或固定優(yōu)先級算法時,PCI總線仲裁器中N個主控器的優(yōu)先級變化規(guī)律。
采用固定優(yōu)先級算法,可以對那些有重要數(shù)據(jù)傳輸、或有大量實時數(shù)據(jù)傳輸以及經(jīng)常需要占用總線的主設(shè)備賦予較高的優(yōu)先權(quán),以便有效地利用PCI總線周期。固定優(yōu)先級算法的缺點是,它將規(guī)定每個PCI插槽的優(yōu)先級,這也就規(guī)定了接插卡的插放次序,從而造成了使用上的不便。另外,固定優(yōu)先級算法有時還會出現(xiàn)總線設(shè)備“撐死”和“餓死”的現(xiàn)象。相反,采用循環(huán)優(yōu)先級算法則可以克服這種“飽餓”不均的弊端。在循環(huán)優(yōu)先級算法中,由于其優(yōu)先級隨著每個總線周期動態(tài)地改變,各個設(shè)備在總線上的身份平等,獲得總線占用權(quán)的機會均等。所以,在一定意義上來說,優(yōu)先級循環(huán)是最公平的算法。循環(huán)優(yōu)先級的缺點是當處理某些設(shè)備的大批量實時數(shù)據(jù)時會造成效率的降低。正因如此,在實際中,常常將這兩種算法結(jié)合起來使用,以便構(gòu)成更為靈活的仲裁機構(gòu)。
5 仲裁器的EPLD編程設(shè)計
下面以支持5個總線主控器的PCI總線仲裁器為例,給出采用Altera公司的EPLD進行功能實現(xiàn)的主要設(shè)計思路,其中,所用編程語言為Altera公司的AHDL語言。該仲裁器采用循環(huán)優(yōu)先級仲裁算法,且總線的缺省擁有者指定為最后一次使用總線的主設(shè)備。
5.1 PCI總線的狀態(tài)機
PCI總線的狀態(tài)機包括三種基本狀態(tài):無任何總線請求(NO_REQ)、等待周期(WAIT_CYCLE)和幀信號_FRAME的撤消(FRAMED)。其中,_FRAME信號的撤消,意味著當前的總線操作將進入最后一個數(shù)據(jù)傳輸周期,此時,_IRDY有效,一旦 _TRDY也有效最后一個數(shù)據(jù)傳輸周期就可完成。而判斷_FRAME是否撤消的具體方法就是判斷_FRAME是否出現(xiàn)從低到高的上跳變。圖2所示即為PCI總線的狀態(tài)機。圖中,TIME_OUT為從_GNT發(fā)出到_FRAME變?yōu)橛行试S的PCI總線周期數(shù)。
5.2 PCI總線仲裁器的狀態(tài)機
由于此仲裁器最大支持5個PCI總線主控器,所以,需定義5個狀態(tài)Master0、Master1、 Master2、Master3、Master4用來區(qū)分當前是哪一個主控器占用總線。至于仲裁器的仲裁狀態(tài)什么時候應(yīng)該發(fā)生變化則由總線狀態(tài)機的狀態(tài)決定,具體如下:當總線狀態(tài)機處于FRAMED狀態(tài),表明在最后一個數(shù)據(jù)傳輸周期結(jié)束后,它將釋放PCI總線,此時,仲裁器便可撤消對它的_GNT信號,以便去服務(wù)于另一個主控器;當總線狀態(tài)機處于NO_REQ狀態(tài),此時,需要由仲裁器來指定一個缺省的總線占用者;當總線狀態(tài)機處于WAIT_CYCLE狀態(tài),且允許該設(shè)備占用總線的時間限制已到(Timeout),這時仲裁器也將撤消對它的_GNT信號,以便服務(wù)于其它的主設(shè)備。所以,若用 EnChange來代表允許仲裁器仲裁狀態(tài)發(fā)生變化的條件,則采用AHKL語言的具體編程如下:
EnChange=(EnCHstate ==FRAMED)#(eNchSTATE == no_req)#(TimeOut[]==TIME_OUT)
該仲裁器中,由于采用循環(huán)優(yōu)先級算法,仲裁器從每一種仲裁狀態(tài)轉(zhuǎn)換到其它仲裁狀態(tài)的方法都是一樣的,所以,下面只給出了仲裁器的仲裁狀態(tài)為主控器1時向其它仲裁狀態(tài)的轉(zhuǎn)換機理(如圖3所示)。另外,若仲裁器在剛啟動時處于無效狀態(tài),則強制狀態(tài)機在下一個時鐘轉(zhuǎn)換到 Master0態(tài)。
5.3 總線允許信號_GNTi(低電平有效)的建立
在PCI對話中,由于_FRAME 和 _IRDY決定著總線的忙/閑狀態(tài)。兩者之中只要有一個信號成立,總線就處于忙碌狀態(tài);當兩個信號都無效時,總線才處于空閑狀態(tài)。所以建立_GNTi的具體編程如下:
!_GNTi=(GNTstate==Masteri)&GLOBAL(_PCIrst)&!MaskGNT;%式中,MaskGNT=_FRAME&_IRDY%
總之,本文介紹的PCI總線仲裁器,由于采用單片EPLD即可實現(xiàn),所以它具有系統(tǒng)結(jié)構(gòu)簡單、成本低、可靠性高、在線修改方便及升級容易等特點。目前,采用該仲裁器的PCI高速總線背板已應(yīng)用在我們研發(fā)的總線型高性能網(wǎng)絡(luò)交換機系列中。經(jīng)過近兩年的實際運行表明,仲裁器工作正常,性能穩(wěn)定可靠。





