PCI總線仲裁器的設計與實現(xiàn)
摘要:基于Altera的CPLD器件的PCI總線仲裁器設計,實現(xiàn)仲裁器的AHDL編程,并結(jié)合仿真結(jié)果對PCI總線的仲裁進行了論述。
PCI總線仲裁器通常是集成在PCI芯片組中。隨著計算機應用的深入,尤其是嵌入式系統(tǒng)的不斷發(fā)展,集成的仲裁器難以滿足某些場合的應用。而采用CPLD技術實現(xiàn)的獨立的PCI總線仲裁器,則較好的適應了這方面的需求。
一pPCI總線仲裁機制
PCI的仲裁是基于設備訪問,而不是基于時間分配的。在任一時刻,總線上的一個主設備要想獲得對總線的控制權(quán),就必須發(fā)出它的請求信號(PCIreqN),如果此刻該設備有權(quán)控制總線,總線仲裁器就使該設備的總線占用允許信號(PCIgntN)有效,進而獲得總線的使用權(quán)。當有多個主設備同時發(fā)出總線控制請求時,就必須由仲裁器根據(jù)一定的算法判定,當前應該由哪個主設備獲得控制權(quán)。
二、仲裁算法
常用的仲裁算法有:公平算法、循環(huán)算法等。
本仲裁器設計采用的是循環(huán)算法,設備的優(yōu)先級預先設定。目前的設計實現(xiàn)對四個PCI設備請求的仲裁,各設備優(yōu)先級由高到低安排為:設備0 >設備1 > 設備2 > 設備3。
系統(tǒng)啟動伊始,沒有設備使用PCI總線,也沒有設備請求使用PCI總線,仲裁器總是設定設備0擁有總線控制權(quán),即將總線??坑谠O備0。此時設備0的PCIgntN是有效的。而在此之后,仲裁器總是指定PCI總線的最后一個使用者為總線的??吭O備。
當有一個或多個設備提出擁有總線使用權(quán)的請求時,仲裁器將按照事先安排的設備優(yōu)先級順序逐一查詢。對于只有一個設備請求的情況,該設備的請求將會馬上得到響應;如果多個設備同時發(fā)出請求時,仲裁器裁定首先響應優(yōu)先等級高的設備的請求,當此設備完成數(shù)據(jù)傳輸交出總線使用權(quán)后,再由優(yōu)先等級低的設備使用總線。示意框圖見圖2。
如果一個設備已獲得總線使用權(quán)并且正在進行地址、數(shù)據(jù)傳輸時,比它優(yōu)先級別高的設備也發(fā)出了占用請求,仲裁器將會撤銷優(yōu)先級別低的設備的總線占用信號,并把總線使用權(quán)交給優(yōu)先級別高的設備,同時還要確保在任一時刻不會出現(xiàn)多個設備同時占用總線的情況。具體見仿真分析。
三、編程設計與實現(xiàn)
本設計使用AHDL語言,在MaxplusII 10.0上編譯通過,并進行了仿真。
1.仲裁器信號定義
SUBDESIGN PCI_arb
( -- 輸入
PCIclk :INPUT -- PCI時鐘
Arbiter_rstN :INPUT -- 復位信號
PCIreqN[3..0] :INPUT -- 總線占用請求信號
frameN :INPUT -- 數(shù)據(jù)交易的啟動或開始,主設備發(fā)出
irdyN :INPUT --交易數(shù)據(jù)準備好,主設備發(fā)出
-- 輸出
PCIgntN[3..0] :OUTPUT -- 總線占用允許信號
)
frameN和irdyN決定了總線的狀態(tài),只要兩個信號中的一個有效,就表明總線上有數(shù)據(jù)通過,總線處于忙狀態(tài);當兩個信號都無效時,則總線處于空閑狀態(tài)。
2.仲裁器狀態(tài)機定義
parb_sm : MACHINE
OF BITS ( PARB2 , PARB1 , PARB0 )
WITH STATES (
PARB_SLT0 = 0, -- PCIgnt0#有效,設備0擁有總線使用權(quán),總線空閑
PARB_SLT0D = 1, -- PCIgnt0#有效,數(shù)據(jù)在總線上傳輸,總線處于忙狀態(tài)
PARB_SLT1 = 2, -- 以下類同
PARB_SLT1D = 3,
PARB_SLT2 = 4,
PARB_SLT2D = 5,
PARB_SLT3 = 6,
PARB_SLT3D = 7 );
3.仲裁的實現(xiàn)
由于采用循環(huán)算法,對每一個設備而言狀態(tài)的變換都是相同的,下面僅以設備0的狀態(tài)轉(zhuǎn)換為例:
CASE parb_sm IS
WHEN PARB_SLT0 =>
IF ( !frameN # !irdyN # frameN irdyN PARBtout4 ) THEN
IF ( !PCIreqN1 ) THEN
PCIgntN1 = GND;
parb_sm = PARB_SLT1D;
ELSIF ( !PCIreqN2 ) THEN
PCIgntN2 = GND;
parb_sm = PARB_SLT2D;
ELSIF ( !PCIreqN3 ) THEN
PCIgntN3 = GND;
parb_sm = PARB_SLT3D;
ELSE
PCIgntN0 = GND;
parb_sm = PARB_SLT0D;
ELSE
PCIgntN0 = GND;
parb_sm = PARB_SLT0D;
END IF;
WHEN PARB_SLT0D =>
PCIgntN0 = GND;
IF ( frameN irdyN ) THEN
parb_sm = PARB_SLT0;
ELSE
Parb_sm = PARB_SLT0D;
END IF;
為了避免AD線上和PAR線上出現(xiàn)時序競爭,一個設備的PCIgntN信號有效和另一個設備的PCIgntN的撤銷,如果不是在總線空閑狀態(tài),則兩者之間至少要有一個時鐘的延遲。設計中,將每個設備占用總線的狀態(tài)分為兩部分,PARB_SLTx(總線空閑)和PARB_SLTxD(總線忙);狀態(tài)機不能從一個設備的PARB_SLTxD狀態(tài)直接轉(zhuǎn)到另一個設備的PARB_SLTyD狀態(tài),中間必須經(jīng)過至少一個時鐘的PARB_SLTx狀態(tài)的銜接,這樣就避免了總線上競爭的出現(xiàn)。
代碼中,PARBtout為一5位計數(shù)器,對PCI時鐘個數(shù)進行計數(shù),用來判別設備發(fā)出請求信號后是否在規(guī)定時間內(nèi)(16個時鐘,即PARBtout[4..0] = 10000)占據(jù)了總線,啟動了數(shù)據(jù)的傳輸;如果超時,則撤銷該設備的請求信號,并按預設的優(yōu)先級順序,對其余設備總線使用權(quán)進行新一輪的裁定。計數(shù)器的編程實現(xiàn):
IF ( PARBtout4 # PCIreqN0 PCIreqN1 PCIreqN2 PCIreqN3 ) THEN
PARBtout [ ] = 0;
ELSIF ( frameN irdyN ) THEN
PARBtout [ ] = PARBtout [ ] + 1;
ELSE
PARBtout [ ] = 0;
END IF;
四、仿真分析
1.單一設備總線請求情況
系統(tǒng)初始化后自動將總線??坑谠O備0上,總線處于空閑狀態(tài),frameN、irdyN均為高電平。需要強調(diào)的一點是,仲裁所用的PCI控制信號均在PCI時鐘信號的上升沿采樣而得。如圖3所示,設備2發(fā)出總線占用信號,仲裁器在時鐘上升沿A處采樣到該信號,并開始啟動PARBtout計數(shù),此時的frameN、irdyN為高電平,設備0仍然擁有總線使用權(quán);隨后設備2驅(qū)動使得frameN和irdyN有效,在時鐘上升沿B處,仲裁器采樣到frameN和irdyN,計數(shù)器清零,使設備2的PCIgntN2信號有效,從而占用總線,設備把地址、數(shù)據(jù)驅(qū)動到總線上,總線處于忙狀態(tài)。
之后,設備2撤銷其PCIreqN2信號,放棄對總線的占用;接著frameN、irdyN信號相繼無效,表明數(shù)據(jù)傳輸?shù)耐瓿?,總線變?yōu)榭臻e,仲裁器在C處采樣后,將總線??吭谠O備2上。
2.多個設備同時請求總線使用權(quán)(以兩個設備為例)
設備3首先發(fā)出請求信號,仲裁器在時鐘A處采樣后,計數(shù)器開始計數(shù),此時總線仍然為設備0占用著;在時鐘B處的采樣,檢測到frameN有效,表明數(shù)據(jù)傳輸?shù)拈_始,仲裁器使得PCIgntN3信號有效,設備3獲得總線所有權(quán);
在隨后的一個時鐘上升沿,仲裁器采樣到設備2的總線請求信號,此時由于frameN、irdyN依然有效,表明數(shù)據(jù)傳輸正在進行中,必須等當前數(shù)據(jù)傳輸完成后,設備2才能占用總線進行自己的數(shù)據(jù)傳輸,此時仲裁器隱含設定設備2擁有總線使用權(quán)。設備3在時鐘C之前使得frameN、irdyN無效,總線進入空閑狀態(tài),??吭谠O備3上。設備2檢測到總線空閑,驅(qū)動自己的frameN、irdyN信號,仲裁器在時鐘D處采樣到有效的frameN、irdyN信號后,使PCIgntN2有效,設備2占據(jù)總線,開始數(shù)據(jù)的傳輸。設備2使用完總線后,使總線回到空閑狀態(tài),??吭谠O備2上;設備3檢測到總線空閑,再次驅(qū)動frameN、irdyN有效,從而再次獲得總線使用權(quán)(時鐘上升沿F處)。所有傳輸完成后,總線將停靠在設備3上。
值得一提的是,如果設備3在被迫交出總線前不能完成所有數(shù)據(jù)的傳輸,它必須使自己的PCIreqN3信號持續(xù)有效,這樣在設備2用完總線后,仲裁器能將使用權(quán)交回,從而完成剩余數(shù)據(jù)的傳輸。
圖5為設備獲得總線使用權(quán),在設定的16個時鐘周期內(nèi)沒有啟動傳輸,仲裁器狀態(tài)的變換。仍以兩個設備為例。
五、應用CPLD進行PCI總線仲裁器的設計,系統(tǒng)結(jié)構(gòu)簡單;配置靈活,可以根據(jù)系統(tǒng)的需要,對有關信號進行裁減或者擴展;在線修改方便。本設計采用Altera的EPM3064實現(xiàn),并應用于所設計的系統(tǒng)板中。
評論