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