《電子技術(shù)應用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 基于EPLD的 PCI總線仲裁器的設(shè)計與實現(xiàn)

基于EPLD的 PCI總線仲裁器的設(shè)計與實現(xiàn)

2009-03-09
作者:史美萍 竇文華

  摘 要: 以自行研制開發(fā)的PCI高速總線背板為背景,系統(tǒng)地論述了PCI總線的仲裁機制、總線的缺省占用、仲裁信號協(xié)定及優(yōu)先級仲裁算法,,給出了采用EPLD實現(xiàn)仲裁器功能的編程設(shè)計
  關(guān)鍵詞: PCI總線 仲裁機制 總線的缺省占用 仲裁信號協(xié)定 仲裁算法


  隨著VLSI/ULSI技術(shù)的發(fā)展,,可編程邏輯器件EPLD/FPGA越來越受到人們的青睞,,由于它具有集成度高、速度快,、開發(fā)周期短,、費用低、用戶可定義功能及可重復編程和擦寫等許多優(yōu)點,,其應用領(lǐng)域不斷擴大,。這些器件的靈活性和通用性使得它們已成為研制和開發(fā)復雜數(shù)字系統(tǒng)的理想選擇。
  在PCI總線技術(shù)規(guī)范的基礎(chǔ)上,,采用EPLD實現(xiàn)了高速PCI總線背板中多主控設(shè)備的總線仲裁,。
1 PCI總線的仲裁機制
  PCI總線仲裁是基于訪問而不是基于時間片,也就是說,,對于一個PCI總線主設(shè)備,,必須為它在總線上進行的每次訪問提出仲裁要求。PCI總線上采用的是并行仲裁(也叫獨立請求仲裁)方案,其仲裁機制如圖1所示,。在這種仲裁中,,每個主控器各有自己獨立的總線請求線_REQ 和總線允許線_GNT 與總線仲裁器相連,相互間沒有任何控制關(guān)系,。仲裁器直接識別所有設(shè)備的請求,,并根據(jù)一定的優(yōu)先級仲裁算法選中一個設(shè)備Ci ,向它直接發(fā)出總線允許信號_GNTi,。PCI總線的仲裁是“隱含的”,,就是說一次仲裁可以在前一次總線訪問期間完成,這樣就使得仲裁的具體實現(xiàn)不必占用PCI總線周期,。當然在總線空閑時除外,。
  在實際的PCI總線仲裁電路中,與仲裁直接有關(guān)的控制線除_REQ和_GNT外,,還有_FRAME,、_IRDY。此外,,為了保證總線交換的同步,,還應有一根總線時鐘信號PCIclk和一根總線復位信號_PCIrst,如圖1虛線所示,。


2 總線的缺省占用
  所謂總線的缺省占用,,就是指在當前沒有設(shè)備使用總線或請求總線的情況下,允許仲裁器根據(jù)一定的方式選定一個設(shè)備作為總線缺省的擁有者,,并向它發(fā)出_GNT信號,。選擇的方式有多種,如可為某一固定設(shè)備,,也可為最后一次使用總線的設(shè)備,,當然也可以指定自己(仲裁器本身)為總線缺省的擁有者。
  當仲裁器將某一設(shè)備確定為總線的缺省擁有者時,該設(shè)備可以不通過發(fā)_REQ信號就開始一次總線操作(只要總線空閑且_GNT信號有效),。但要注意的是:如果該設(shè)備需要做多次的數(shù)據(jù)傳輸,,它就應當發(fā)出_REQ信號,以便向仲裁器提出多次操作的請求,;而如果該設(shè)備只要求做一次總線操作,它就不應當發(fā)出_REQ信號,,否則仲裁器可能在它不需要使用總線的情況下又給它發(fā)出_GNT信號,。
3 仲裁信號協(xié)定
  綜上所述, PCI總線的仲裁主要是通過_REQ和_GNT兩個信號來實現(xiàn)的,。前者用于某一設(shè)備要求占用總線的請求,,后者用于允許某一設(shè)備占用總線的應答。而對于一個PCI總線主控器,必須在它真正需要總線時才能發(fā)出_REQ信號,,絕不可以用_REQ信號把自己“??俊?在總線上。只有總線仲裁器才可以指定誰是總線缺省的擁有者,。
  當仲裁器允許某一設(shè)備使用總線時,,就向該設(shè)備發(fā)出_GNT信號;相反,,當仲裁器不再允許某一設(shè)備擁有總線控制權(quán)時,,可以在任意時鐘撤消該設(shè)備的_GNT信號。所以,,每個總線主控器在開始一次PCI總線操作時,,一定要確知此時它們的_GNT信號是否有效。如果_GNT信號無效,,這次操作就不可以進行,。
  PCI總線的仲裁信號之間必須遵循一定的協(xié)定,具體描述如下:
  · 若_GNT信號撤消而_FRAME有信號,,當前的總線操作是合法的,,并將繼續(xù)下去;
  · 若總線不是處于空閑狀態(tài),,有可能一個_GNT的撤消碰巧是另一個_GNT發(fā)出的同時,,但如果是在空閑狀態(tài),則要求一個_GNT撤消到下一個_GNT的發(fā)出之間必須有一個時鐘周期,。否則可能會在AD線和PAR線上出現(xiàn)沖突,;
  · 當_FRAME無信號時,_GNT可以在任意時間撤消,,以便服務于另一個主設(shè)備,,或者作為對相應的_REQ撤消的響應;
  · _GNT信號的每次發(fā)出,,只限于相應的總線主控器可以使用總線進行一次總線操作,。若該主控器還想做多次總線訪問時,可以保持它的_REQ信號一直有效,。此時,,如果沒有其它請求,或者當前的主控器具有最高優(yōu)先權(quán),,仲裁器就會繼續(xù)批準總線給當前主控器,;
  ·一個主控器可以在任意時刻撤消其_REQ信號,但要注意,,_REQ信號一旦撤消,,仲裁器將認為該設(shè)備不再請求使用總線,,因而撤消其_GNT信號。若一個主控器只希望做一次總線傳輸,,它應當在發(fā)出_FRAME的同一時鐘周期撤消_REQ,;
  ·如果當前的主控器在它的_GNT信號發(fā)出之后(_REQ也一直有效),持續(xù)16個空閑周期還沒有開始總線操作,,仲裁器就可以認為當前的主控器“已壞”,。因而,仲裁器可以在任意時刻撤消_GNT信號,,以便服務于一個優(yōu)先級更高的設(shè)備,。
4 優(yōu)先級仲裁算法
  為了合理地控制和管理系統(tǒng)中需要占用總線的數(shù)據(jù)源,PCI仲裁器必須實現(xiàn)一個特別的優(yōu)先級仲裁算法,,以便在多個設(shè)備同時提出總線占用請求時,,能依據(jù)該仲裁算法判決出哪個設(shè)備應獲得對總線的控制權(quán)??偩€仲裁可以確保任何時刻總線上最多只有一個設(shè)備發(fā)送信息,,而決不會出現(xiàn)多個主控器同時占用總線的情況。
  由于總線仲裁算法從根本上說與PCI總線技術(shù)規(guī)范無關(guān),,所以設(shè)計者可以根據(jù)實際需要自由地進行選擇和修改,。但要注意,設(shè)計時必須為所選用的I/O控制器及接插卡提供所要求的訪問延遲保證,。
  總線優(yōu)先級仲裁算法通常有兩種,,一種是固定優(yōu)先級算法,一種是循環(huán)優(yōu)先級算法,。但不管是哪一種仲裁算法,,都必須滿足以下三個基本要求:
  · 每一時刻只能有一個設(shè)備作為總線主控器;
  · 先請求者先響應,,且在一個總線操作周期之內(nèi)不被打斷,;
  · 同一時刻有幾個設(shè)備發(fā)出請求時,按優(yōu)先級排序響應,。
  所謂固定優(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)什么時候應該發(fā)生變化則由總線狀態(tài)機的狀態(tài)決定,,具體如下:當總線狀態(tài)機處于FRAMED狀態(tài),,表明在最后一個數(shù)據(jù)傳輸周期結(jié)束后,它將釋放PCI總線,,此時,,仲裁器便可撤消對它的_GNT信號,以便去服務于另一個主控器,;當總線狀態(tài)機處于NO_REQ狀態(tài),,此時,需要由仲裁器來指定一個缺省的總線占用者,;當總線狀態(tài)機處于WAIT_CYCLE狀態(tài),,且允許該設(shè)備占用總線的時間限制已到(Timeout),這時仲裁器也將撤消對它的_GNT信號,,以便服務于其它的主設(shè)備,。所以,若用EnChange來代表允許仲裁器仲裁狀態(tài)發(fā)生變化的條件,,則采用AHDL語言的具體編程如下:
  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高速總線背板已應用在我們研發(fā)的總線型高性能網(wǎng)絡交換機系列中,。經(jīng)過近兩年的實際運行表明,,仲裁器工作正常,性能穩(wěn)定可靠,。
參考文獻
1 PCI Local Bus Specification (Rev 2.1).6/1/1995
2 Altera. MAX+PLUSⅡProgrammable Logic Development System AHDL.1997
3 Altera. MAX + PLUS Ⅱ Getting Started.1997
4 Altera. MAX 7000 Programmable Logic Device Family Data Sheet.1995
5 鄒逢興,,何智勇,史美萍. 微型計算機硬件技術(shù)及應用基礎(chǔ). 長沙:國防科技大學出版社,,1997

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點,。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]