作者:閻穩(wěn),王國(guó)東,姜運(yùn)生
機(jī)載計(jì)算機(jī)的幾何結(jié)構(gòu)一般采用高強(qiáng)度機(jī)箱和底板來(lái)連接各功能模塊。底板總線類(lèi)型大部分采用VME總線規(guī)范。VME總線是1981年Motorola等公司為歐洲板(Euroboard)設(shè)計(jì)的總線,是歐洲通用模塊(VME-Versa Module Europe)的首字母縮寫(xiě)。經(jīng)過(guò)二十多年的演變發(fā)展,已經(jīng)成為美國(guó)國(guó)家標(biāo)準(zhǔn)。它以高性能、并行性、實(shí)時(shí)性和高可靠性四大特點(diǎn)贏得機(jī)載計(jì)算機(jī)青睞,模塊結(jié)構(gòu)具有良好的抗震性,抗沖擊能力。本文結(jié)合我們的實(shí)際工作,重點(diǎn)介紹VME總線接口邏輯的工程實(shí)踐方法。
VME總線簡(jiǎn)介
VME總線建立了8位、16位、32位和64位并行傳輸計(jì)算機(jī)體系,能夠?qū)崿F(xiàn)單個(gè)或多個(gè)微處理器共存的對(duì)等分布式系統(tǒng)。VME總線是一種緊耦合(Closely coupled)總線,將微處理器、數(shù)據(jù)存儲(chǔ)器以及外設(shè)控制器通過(guò)總線統(tǒng)一互聯(lián)起來(lái),實(shí)現(xiàn)高速通訊。物理上采用96芯或160芯標(biāo)準(zhǔn)連接器,各功能模塊分別插在其中某一個(gè)插槽(slot)中。圖1是VME總線系統(tǒng)的通用結(jié)構(gòu),它包括4個(gè)子總線,即數(shù)據(jù)傳輸總線,優(yōu)先級(jí)中斷總線,仲裁總線,工具總線。表1是其中數(shù)據(jù)總線和優(yōu)先級(jí)中斷總線主要信號(hào)的定義。
在VME總線的4類(lèi)子總線中,數(shù)據(jù)傳輸總線(DTB-Data Transfer Bus)和中斷優(yōu)先總線(PIB-Priority Interrupt Bus)包含了主要信號(hào)。VME總線允許多個(gè)處理器控制總線,所以必須有系統(tǒng)總線管理者,即系統(tǒng)控制器。它位于VME總線的一號(hào)插槽上,功能包括:提供系統(tǒng)時(shí)鐘、總線仲裁器、中斷響應(yīng)菊花鏈驅(qū)動(dòng)器和總線定時(shí)器,還可能包括串行時(shí)鐘驅(qū)動(dòng)器、電源監(jiān)視器功能??偩€周期類(lèi)型主要由地址修飾碼AM(Address Modifer)規(guī)定,主要包括讀周期、寫(xiě)周期、塊讀周期、塊寫(xiě)周期、信號(hào)復(fù)用周期等周期。尋址單元以字節(jié)為單位,可以進(jìn)行單字節(jié)、雙字節(jié)、3字節(jié)、4字節(jié),甚至8字節(jié)存取。字節(jié)界限可以是偶地址或奇地址,可以通過(guò)數(shù)據(jù)選通信號(hào)DS1*和DS0*,LWord* 以及A2 A1地址線的組合決定。
VME數(shù)據(jù)總線通用訪問(wèn)邏輯設(shè)計(jì)
VME總線各功能模塊現(xiàn)在一般設(shè)計(jì)為智能型,把自己映射成整個(gè)VME總線地址空間的一部分。在模塊內(nèi)部一般都有自己的CPU管理模塊內(nèi)功能接口,然后通過(guò)雙口存儲(chǔ)器和主控模塊交換數(shù)據(jù)。這樣,對(duì)各功能模塊的訪問(wèn)統(tǒng)一轉(zhuǎn)換成對(duì)存儲(chǔ)器的訪問(wèn)。圖2是我們?yōu)闅炥Z七機(jī)載計(jì)算機(jī)設(shè)計(jì)的VME總線的I/O 模塊,下面以此為例說(shuō)明DTB總線控制邏輯。
在圖2中,板內(nèi)CPU可以根據(jù)需要選擇,內(nèi)總線隨CPU型號(hào)而變化,但必須對(duì)底板提供VME總線接口??刂七壿嬓枰幚淼闹饕盘?hào)如表1所示,其中信號(hào)方向從VME總線進(jìn)入本模塊為輸入,否則為輸出。
在表1中可以看到,數(shù)據(jù)線只有32-Bit,地址只有31位,如何實(shí)現(xiàn)64Bit傳輸,這涉及到信號(hào)復(fù)用(Multiple)問(wèn)題。在32Bit以下模式,地址線和數(shù)據(jù)線是獨(dú)立的兩組信號(hào)。在64Bit模式下,將訪問(wèn)周期分為兩個(gè)相位階段(Phase),階段是地址階段,用D31..D0的數(shù)據(jù)線傳輸高32Bit地址。在第二階段是數(shù)據(jù)階段,利用31Bit地址A31..A1以及長(zhǎng)字選擇LWord*作為高32Bit數(shù)據(jù)。顯然,在64Bit模式下,從方模塊應(yīng)該設(shè)計(jì)一個(gè)64Bit地址鎖存器,將相位階段的地址穩(wěn)定鎖存,保證第二階段的數(shù)據(jù)尋址正確。6位地址修飾碼AM5..AM0用來(lái)定義本次總線尋址模式,即地址寬度和傳輸性質(zhì),如16地址塊傳輸?shù)?,可以產(chǎn)生64種尋址類(lèi)型。
圖2中的I/O模塊是作為系統(tǒng)從設(shè)備,當(dāng)主控方選擇訪問(wèn)時(shí),控制邏輯首先應(yīng)該產(chǎn)生系統(tǒng)選擇信號(hào),以啟動(dòng)模塊內(nèi)數(shù)據(jù)通路??梢杂靡韵路椒▽?shí)現(xiàn):
…
VA15,VA14,VA13 pin; // VME 總線地址高 3 位
VA3,VA2,VA1 pin; // VME 總線地址低 3 位
VAM5..VAM0 pin; // VME 總線地址修飾碼
VAM node;
VDS1,VDS0 pin; // 字節(jié)選擇。
VAS,VRW pin; // 地址選通、讀寫(xiě)信號(hào)
…
VAM = VAM5 & !VAM4 & VAM3 & !VAM2 & !VAM1 & VAM0; // = 10.1001: 短管理訪問(wèn)
// 為雙口普通讀寫(xiě)產(chǎn)生片選信號(hào)
!CS_VME = !VAS & VIACK & VAM & (VAddr 》= StartA ddr) & (VAddr 《= EndAddr);
// VME 數(shù)據(jù)總線使能
!VDEN = (!VDS1 # VDS0) & !CS_VME #
// 普通DTB讀寫(xiě)時(shí)要開(kāi)門(mén)
!VIACK & !VIACKIN & (IntID == MyIntID);
// 應(yīng)答中斷時(shí)也要開(kāi)門(mén)
VDIR = !VRW; // VME 數(shù)據(jù)方向
…
上面一段邏輯代碼,主要判斷地址修飾碼AM和地址映像范圍,產(chǎn)生VME總線訪問(wèn)啟動(dòng)信號(hào),亦即雙口RAM的片選信號(hào)CS_VME。為增強(qiáng)信號(hào)驅(qū)動(dòng)能力,在模塊輸出數(shù)據(jù)信號(hào)前插入雙向驅(qū)動(dòng)。VDEN信號(hào)就是數(shù)據(jù)驅(qū)動(dòng)器的開(kāi)門(mén)信號(hào),數(shù)據(jù)方向控制信號(hào)VDIR由讀寫(xiě)信號(hào)反相后產(chǎn)生。當(dāng)從模塊完成DTB周期后,應(yīng)該驅(qū)動(dòng)DTACK*,通知主控模塊本次訪問(wèn)完成。這個(gè)信號(hào)各個(gè)從模塊都要驅(qū)動(dòng),一般在控制邏輯產(chǎn)生應(yīng)答后加OC驅(qū)動(dòng)(如54F05)。其上拉電阻由底板統(tǒng)一,若由各模塊自行上拉,勢(shì)必造成并聯(lián)電阻值變小,灌電流變大,嚴(yán)重影響信號(hào)驅(qū)動(dòng)能力,使各模塊不能同時(shí)工作。這個(gè)信號(hào)產(chǎn)生的邏輯涉及到下面的菊花鏈中斷處理,詳細(xì)邏輯方法可參考下節(jié)。
菊花鏈中斷優(yōu)先級(jí)邏輯設(shè)計(jì)
VME優(yōu)先級(jí)中斷機(jī)制采用菊花鏈,它用于在板與板之間傳送一電平信號(hào)。它始于槽而終結(jié)于一槽。系統(tǒng)可以提供IRQ1*~IRQ7*共7個(gè)中斷請(qǐng)求,其中IRQ7*具有優(yōu)先級(jí)。當(dāng)中斷處理器處理中斷請(qǐng)求時(shí),中斷應(yīng)答菊花鏈驅(qū)動(dòng)器啟動(dòng)中斷應(yīng)答菊花鏈工作,以確保只有一個(gè)中斷器響應(yīng)正在進(jìn)行中的中斷應(yīng)答周期。整個(gè)原理示意如圖3所示。當(dāng)應(yīng)答某個(gè)中斷時(shí),首先把IACK*信號(hào)驅(qū)動(dòng)為低,表示當(dāng)前周期是中斷應(yīng)答周期,同時(shí)將中斷識(shí)別碼通過(guò)數(shù)據(jù)線傳輸,而中斷響應(yīng)主要由中斷響應(yīng)輸入(IACKIN*)和中斷響應(yīng)輸出(IACKOUT*)組成應(yīng)答菊花鏈。若某一模塊發(fā)出中斷請(qǐng)求,并且響應(yīng)的中斷識(shí)別碼和自己匹配,同時(shí)要接到上傳下來(lái)的有效的IACKIN*信號(hào)。若是自己的中斷響應(yīng),應(yīng)該堵塞IACKOUT*信號(hào),使之為高電平,否則應(yīng)該繼續(xù)下傳IACKOUT*信號(hào)。顯然,若某一插槽為空或者不具備中斷響應(yīng)能力,應(yīng)該將IACKIN* 和IACKOUT* 短接,否則菊花鏈將中斷。當(dāng)中斷響應(yīng)后,要及時(shí)撤除中斷請(qǐng)求。下邊邏輯實(shí)現(xiàn)菊花鏈優(yōu)先級(jí)中斷,其中狀態(tài)機(jī)處理包含數(shù)據(jù)總線訪問(wèn)周期和菊花鏈中斷實(shí)現(xiàn)的所有邏輯。
// VME 中斷管理邏輯。
VCLK pin; //VME 總線時(shí)鐘,16MHz
VMID3..VMID0 pin; //底板為該模塊分配的標(biāo)識(shí)
VIACK pin; //VIACK = 0: VME 中斷應(yīng)答周期
= 1: VME 普通總線周期
VIACKIN ,VIACKOUT pin; //中斷應(yīng)答菊花鏈輸出/輸出
Qv2,Qv1,Qv0 pin istype ‘REG’; //VME 總線操作控制狀態(tài)機(jī)
VDTACK pin istype ‘REG’; //VME 總線讀寫(xiě)完成應(yīng)答,
//高有效,經(jīng)OC 門(mén)后低有效
VIRQ3 pin istype ‘REG’; //向VME之中斷請(qǐng)求
VD3..VD0 pin istype ‘REG’; //要發(fā)送的中斷應(yīng)答向量(具 有輸出 /OE 之緩沖)
MyIntID = [0,1,1]; //通過(guò) VA3 VA2 VA1 送來(lái)的中
斷應(yīng)答號(hào),本模塊使用 IRQ3*
圖3 LACKIN*/IACKOUT*菊花鏈
MyVector = [VMID3..VMID0]; //本模塊使用的中斷應(yīng)答向量
IntID = [VA3,VA2,VA1]; //VME 送來(lái)的 IRQ 號(hào)
IntVec = [VD3..VD0]; //本模塊應(yīng)答時(shí)的中斷向量
// VME 中斷申請(qǐng) 和 清除 狀態(tài)編碼
IntS0 = ^B0;
IntS1 = ^B1;
EQUATIONS
// 以下語(yǔ)句確立VME 總線器控制由系統(tǒng)時(shí)鐘管理
[Qv2,Qv1,Qv0].clk = VCLK;
VDTACK.clk = VCLK;
IntVec.clk = VCLK;
VIRQ3.clk = VCLK;
IntVec:= !MyVector; // 中斷應(yīng)答向量隨時(shí)準(zhǔn)備放出去
// 放出中斷應(yīng)答向量。
IntVec.OE = !VIACK & !VIACKIN & // 中斷應(yīng)答周期
(IntID = MyIntID); // 而且是我們的
。.
//==========================================
// VME 總線周期控制之狀態(tài)機(jī) (包括中斷應(yīng)答)
//==========================================
State_Diagram [Qv2,Qv1,Qv0];
State SV0:
VIACKOUT = 1; // 不能亂傳中斷應(yīng)答
VDTACK := 0; // 不能隨便應(yīng)答
if (!RST) then SV0
else if (!CS_VME) then SV1 // VME 普通讀寫(xiě)
else if (!VIACK & !VIACKIN) then SV4
else SV0; // 原地待命
State SV1: // 普通讀寫(xiě)周期
VIACKOUT = 1; // 不傳中斷應(yīng)答
VDTACK := 0;
if (!RST) then SV0
else SV2; // 順延
State SV2:
VIACKOUT = 1; // 不傳中斷應(yīng)答
VDTACK := 0; // 還在干
if (!RST) then SV0;
else if (!BUSYL) then SV2 // 雙口正忙
else SV3
with { VDTACK := 1;}
State SV3:
VIACKOUT = 1; // 不傳中斷應(yīng)答
VDTACK := 1; // 準(zhǔn)備好了
if (!RST) then SV0
else if (!CS_VME) then SV3 // 本周期沒(méi)完沒(méi)了
else SV0
with {VDTACK := 0; }
// SV4..SV7 為中斷應(yīng)答周期
State SV4:
VIACKOUT = H; // 情況不明,先別往下傳
VDTACK := L;
if (!RST # VIACK # VIACKIN) then SV0
else if (IntID == MyIntID) then SV6 // 應(yīng)答我們的
with {
VDTACK := H; // 早已準(zhǔn)備好
}
else SV5 // 應(yīng)答別人的
with {VIACKOUT = L; } // 趕快往下傳
State SV5:
VIACKOUT = L; // 傳。傳.傳
VDTACK := L;
if (!RST) then SV0
else if (!VIACK & !VIACKIN) then SV5
// 還在中斷應(yīng)答周期
else SV0; // 總算熬到結(jié)束了
State SV6:
VIACKOUT = H; //是自己的,不能往下傳
VDTACK := H;
if (!RST) then SV0
else if (!VIACK & !VIACKIN) then SV6
// 還在中斷應(yīng)答周期
else SV0;
State SV7:
goto SV0; // 非法狀態(tài),趕快轉(zhuǎn)
//=========================================
// 本狀態(tài)機(jī)實(shí)現(xiàn) VME 總線中斷請(qǐng)求和清除控制
//=========================================
State_Diagram [VIRQ3]
State IntS0:
//對(duì) 011AH 讀寫(xiě),觸發(fā)對(duì) VME 中斷請(qǐng)求
if (!RST) then IntS0
else if (!CS_ALLP & (IOAddr == VMEIRQReg))
then IntS1
else IntS0; // 老實(shí)呆著
State IntS1:
// 此狀態(tài)時(shí),保持中斷請(qǐng)求
if (!RST ) then IntS0
else if (!VIACK & !VIACKIN & (IntID == MyIntID))
then IntS0 // 已經(jīng)應(yīng)答
else IntS1; // 不應(yīng)答不走
END
結(jié)束語(yǔ)
VME總線的應(yīng)用愈來(lái)愈廣泛,各種機(jī)載計(jì)算機(jī)系統(tǒng)總線都在逐漸向它靠攏。按照以上思想設(shè)計(jì)的機(jī)載計(jì)算機(jī)已經(jīng)經(jīng)過(guò)了試飛階段,實(shí)踐也證明VME總線性能和可靠性優(yōu)于以前的各種總線。
責(zé)任編輯:gt
評(píng)論
查看更多