摘 要:該數(shù)據(jù)處理機(jī)系統(tǒng)底板總線采用CPCI總線,并通過(guò)PCI-to-PCI橋進(jìn)行總線擴(kuò)展,為了解決PCI透明橋和非透明橋在該系統(tǒng)使用中存在的配置、通信及切換問(wèn)題,本文從軟件方面論述了透明橋和非透明橋機(jī)制,CPCI總線主控設(shè)備透明橋的配置過(guò)程,CPCI總線從設(shè)備非透明橋的配置過(guò)程,設(shè)備間基于CPCI總線的通信方法,互為備份設(shè)備間的故障監(jiān)控,CPCI總線主控設(shè)備的故障切換方法以及CPCI總線從設(shè)備的故障切換方法。該方案簡(jiǎn)單易行,已在該數(shù)據(jù)處理機(jī)中實(shí)施,對(duì)以后的其他系統(tǒng)設(shè)計(jì)具有一定的參考價(jià)值。
關(guān)鍵詞:PCI總線;CPCI總線;PCI-to-PCI透明橋;PCI-to-PCI非透明橋
中圖分類號(hào):TP334.7
CPCI的全程稱為CompactPCI,中文又稱緊湊型PCI,是國(guó)際PICMG協(xié)會(huì)于1994年提出來(lái)的一種總線接口標(biāo)準(zhǔn)。它是以PCI電器規(guī)范為標(biāo)準(zhǔn)的高性能工業(yè)用總線。
為了解決PCI總線在總線負(fù)載能力方面的先天不足,PCISIG(PCI Special Interest Group)發(fā)布了PCI-to-PCI橋規(guī)范,將PCI總線以層次化的系統(tǒng)結(jié)構(gòu)進(jìn)行擴(kuò)展,從而使PCI總線系統(tǒng)擴(kuò)展為具有多條PCI總線、可連接更多PCI設(shè)備的系統(tǒng)。根據(jù)從PCI接口和主PCI接口之間的設(shè)備是否可見(jiàn),可以將PCI-to-PCI橋分為透明橋(Transparent bridge)和(Non-transparent bridge)。
透明橋(Transparent):如圖1所示。透明橋通常用于擴(kuò)展總線,從PCI總線上的所有設(shè)備對(duì)主PCI總線一側(cè)的處理器都是透明的,從PCI總線上的所有設(shè)備只能由主PCI總線一側(cè)的處理器對(duì)其進(jìn)行配置和控制。主PCI總線和從PCI總線的地址空間完全透明,主PCI總線和從PCI總線之間的地址傳遞是直接傳輸,不用進(jìn)行地址轉(zhuǎn)換。通過(guò)PCI透明橋隔離PCI總線,能夠擴(kuò)展PCI總線負(fù)載數(shù)量,匹配不同的工作頻率、總線寬度和電壓;
圖1 PCI-PCI透明橋
非透明橋(Non-transparent):如圖2所示。通常用于嵌入式智能子系統(tǒng)。它連接兩個(gè)獨(dú)立的處理器,從PCI總線一側(cè)的資源和地址對(duì)主PCI總線一側(cè)的處理器是不可見(jiàn)的,允許從PCI總線一側(cè)的處理器獨(dú)立地配置和控制其子系統(tǒng),主PCI總線和從PCI總線的地址完全獨(dú)立,時(shí)鐘也相互隔離,主PCI總線和從PCI總線的地址由非透明橋來(lái)進(jìn)行轉(zhuǎn)換。
圖2 PCI-PCI非透明橋
該數(shù)據(jù)處理機(jī)通過(guò)專門設(shè)計(jì)的CPCI機(jī)箱底板使其中搭載的通用處理模塊具有主從自適應(yīng)能力,該設(shè)計(jì)在具有多個(gè)CPCI外設(shè)的嵌入式平臺(tái)中具有很大的優(yōu)越性。針對(duì)這種硬件設(shè)計(jì),專門設(shè)計(jì)了具有主從自動(dòng)切換的驅(qū)動(dòng)軟件。
1 系統(tǒng)結(jié)構(gòu)
該數(shù)據(jù)處理機(jī)的組成情況如下:
(1)兩個(gè)中央處理模塊(CPM1、CPM2);
(2)兩個(gè)實(shí)時(shí)控制模塊(RCM1、RCM2)。
這些模塊通過(guò)CPCI底板總線連接數(shù)據(jù)處理機(jī)。每種類型的兩個(gè)模塊互為熱備份,兩個(gè)中央處理模塊中有一個(gè)為CPCI總線的主控模塊,并且可以互相切換。系統(tǒng)中各模塊在CPCI總線上的連接圖如圖3所示。
圖3 數(shù)據(jù)處理機(jī)系統(tǒng)結(jié)構(gòu)
缺省狀態(tài)下,CPM2、RCM2、GPM2作為備份模塊工作,CPM1是CPCI總線的主控模塊;當(dāng)CPM1發(fā)生故障后,由軟件將CPM1從CPCI總線隔離,并將CPM2設(shè)置為CPCI總線的主控模塊,由CPM2接替CPM1繼續(xù)工作。
數(shù)據(jù)處理機(jī)各模塊之間通過(guò)CPCI總線進(jìn)行通信。模塊間的通信通過(guò)PCI6466非透明橋的共享內(nèi)存方式實(shí)現(xiàn),通過(guò)配置PCI6466非透明橋,映射CPCI總線主控模塊的某一段內(nèi)存空間到其他的所有從模塊的PCI空間上,使所有的模塊都可以通過(guò)該內(nèi)存空間來(lái)交換數(shù)據(jù)。
2 管理軟件的設(shè)計(jì)
該數(shù)據(jù)處理機(jī)的管理軟件主要完成CPCI總線的初始化、各模塊數(shù)據(jù)通信、故障監(jiān)控及主控模塊。
2.1 CPCI總線初始化
CPCI總線的初始化包括PCI6466透明橋及非透明橋的枚舉及其總線配置。
2.1.1 透明橋及非透明橋的枚舉
數(shù)據(jù)處理機(jī)加電后,由各通用處理模塊進(jìn)行PCI6466透明橋及非透明橋的枚舉,各通用處理模塊應(yīng)通過(guò)枚舉可識(shí)別到的PCI6466橋如表1所示:
表1 數(shù)據(jù)處理機(jī)PCI6466橋列表
通用處理模塊PCI6466橋
CPM1第一PCI總線上的PCI6466透明橋(1個(gè)),第二PCI總線上的PCI6466非透明橋(3個(gè))。
CPM2PCI6466非透明橋(1個(gè))。
RCM1PCI6466非透明橋(1個(gè))。
RCM2PCI6466非透明橋(1個(gè))。
PCI6466橋枚舉結(jié)束后,由各通用處理模塊對(duì)其總線進(jìn)行配置。
2.1.2 透明橋的配置
每個(gè)PCI-PCI橋與兩條PCI局部總線連接,這兩個(gè)總線稱為它的第一總線和第二總線。
(1)向下:當(dāng)一個(gè)請(qǐng)求被啟動(dòng),并通過(guò)一個(gè)或者多個(gè)PCI-PCI橋向從處理器方向傳送,就稱此請(qǐng)求為向下傳送;
(2)向上:當(dāng)一個(gè)請(qǐng)求被啟動(dòng),并通過(guò)一個(gè)或者多個(gè)PCI-PCI橋向主處理器方向傳送,就稱此請(qǐng)求為向上傳送;
(3)第一總線:位于PCI-PCI橋上側(cè)的PCI局部總線;
(4)第二總線:位于PCI-PCI橋下側(cè)的PCI局部總線;
(5)下級(jí)總線:位于PCI-PCI橋的下側(cè),編號(hào)最高的PCI局部總線。
數(shù)據(jù)處理機(jī)主控模塊PCI-PCI橋的結(jié)構(gòu)如圖4所示。
圖4 主控模塊PCI-PCI橋的結(jié)構(gòu)
在數(shù)據(jù)處理機(jī)中,透明橋位于其主控模塊中。對(duì)于CPCI總線主控模塊來(lái)說(shuō),該系統(tǒng)中具有兩條PCI總線,總線0和總線1,總線0是直接駐留在主/PCI橋另一側(cè)的PCI局部總線,總線編號(hào)永遠(yuǎn)為0,總線1是總線0的下級(jí)總線,位于PCI-PCI透明橋的下側(cè)。規(guī)范規(guī)定,每個(gè)PCI-PCI橋必須在其配置空間內(nèi)預(yù)定義的位置實(shí)現(xiàn)三個(gè)總線編號(hào)寄存器,這三個(gè)總線編號(hào)寄存器是:第一總線編號(hào)寄存器、第二總線編號(hào)寄存器和下級(jí)總線編號(hào)寄存器。
綜合數(shù)據(jù)處理機(jī)中CPCI總線主控模塊對(duì)PCI6466透明橋的配置過(guò)程如下:
(1)配置PCI6466透明橋的總線編號(hào)寄存器,分別配置該P(yáng)CI-PCI透明橋的第一總線編號(hào)、第二總線編號(hào)和下級(jí)總線編號(hào),以便在有PCI總線交易發(fā)生時(shí)PCI-PCI橋能夠確定是否將該交易傳送到下級(jí)總線;
(2)配置PCI6466透明橋的可預(yù)取存儲(chǔ)器范圍寄存器和基地址寄存器。這兩個(gè)寄存器定義了第二PCI總線上設(shè)備的哪些空間的存儲(chǔ)訪問(wèn)請(qǐng)求被傳送到第一PCI總線上;
(3)配置PCI6466透明橋的命令寄存器,以便使能總線的存儲(chǔ)空間和總線主控功能。
配置完成后,就可以在CPCI主控模塊的主PCI橋一側(cè)的CPU發(fā)送1類配置命令來(lái)配置和控制PCI-PCI透明橋下面的設(shè)備,即第二總線上的設(shè)備,在數(shù)據(jù)處理機(jī)中,這些設(shè)備就是其他通用處理模塊中的非透明橋。
2.1.3 非透明橋的配置
在數(shù)據(jù)處理機(jī)中,配置非透明橋的目的是各通用處理模塊之間的數(shù)據(jù)共享。主控模塊通過(guò)PCI-PCI透明橋共享自己的一塊RAM空間,其他所有的通用處理模塊都映射自己的某一IO存儲(chǔ)空間到主控模塊的RAM空間,即可實(shí)現(xiàn)主控模塊和其他通用處理模塊彼此之間通過(guò)該RAM空間的數(shù)據(jù)共享。
PCI6466透明橋的在數(shù)據(jù)流的方向上分為上行和下行,即向上數(shù)據(jù)流和向下數(shù)據(jù)流。在該數(shù)據(jù)處理機(jī)中,從模塊需要通過(guò)PCI6466非透明橋訪問(wèn)主控模塊為其共享的RAM空間,因此數(shù)據(jù)流為向下數(shù)據(jù)流,所以我們?cè)谂渲肞CI6466的寄存器時(shí)僅需配置下行相關(guān)寄存器即可。
非透明橋的配置需要橋兩側(cè)的處理器共同完成,即非透明橋的從端由主控模塊來(lái)完成配置,非透明橋的主端由其他通用處理模塊來(lái)完成配置。下面分別說(shuō)明非透明橋的從端和主端的配置過(guò)程。
非透明橋從端配置:
由于PCI6466非透明橋在主控模塊的總線1上,因此主控模塊CPU要完成非透明橋從端的配置需要通過(guò)發(fā)送1類配置來(lái)實(shí)現(xiàn)。PCI規(guī)范中定義的1類配置訪問(wèn)的配置地址的訪問(wèn)格式如圖5所示。
圖5 PCI 1類配置訪問(wèn)的格式
其中AD[1::0]=01表示該配置為1類配置,用于將一個(gè)配置請(qǐng)求傳遞到另一條PCI局部總線上,AD[23::16]表示這個(gè)1類配置訪問(wèn)需要傳遞到哪條PCI總線上,對(duì)于CPCI主控模塊來(lái)說(shuō),第二總線的總線編號(hào)為1,因此在主控模塊CPU在配置每個(gè)從模塊的非透明橋時(shí),發(fā)出的配置周期的配置地址中,AD[23::16]=00000001。
主控模塊配置PCI6466非透明橋時(shí)需要配置的寄存器有:下行數(shù)據(jù)映射后基址寄存器、下行數(shù)據(jù)映射窗口大小寄存器和命令寄存器。其中下行數(shù)據(jù)映射后基址寄存器和下行數(shù)據(jù)映射窗口大小寄存器共同定義了主控模塊給各個(gè)從模塊共享的RAM空間基址和大小。在本系統(tǒng)中定義主控模塊的從0xF000000地址開(kāi)始的8Mbytes空間共享給從模塊訪問(wèn)因此下行數(shù)據(jù)映射窗口基址寄存器配置為共享RAM區(qū)的起始地址0xF000000。
非透明橋主端配置:
對(duì)于CPCI總線的從模塊來(lái)說(shuō),PCI6466非透明橋位于其第一PCI總線上,因此可直接通過(guò)主PCI橋?qū)ζ溥M(jìn)行配置。從模塊需要配置的寄存器有:下行數(shù)據(jù)訪問(wèn)基址寄存器和命令寄存器,其中下行數(shù)據(jù)訪問(wèn)基址寄存器配置了從模塊用于訪問(wèn)主控模塊為其共享的RAM空間的IO地址空間。
至此,非透明橋已配置完成,非透明橋的主端和從端均可讀寫主端共享的RAM空間,以達(dá)到數(shù)據(jù)交換的目的。
2.2 模塊間通信
模塊間通信通過(guò)CPCI總線的共享存儲(chǔ)空間完成。系統(tǒng)管理軟件主要負(fù)責(zé)空間的配置、通信通道的配置、數(shù)據(jù)的讀寫控制及備份模塊的通信控制。
系統(tǒng)管理軟件根據(jù)用戶的通信通道配置在共享存儲(chǔ)空間中為每一個(gè)通用處理模塊分配通信通道所使用的共享存儲(chǔ)空間,保證各通信通道所占用的存儲(chǔ)空間互相隔離。
系統(tǒng)管理軟件設(shè)計(jì)了對(duì)共享存儲(chǔ)空間的互斥機(jī)制,保證通信的收發(fā)雙方對(duì)共享存儲(chǔ)空間讀寫操作的互斥性。
系統(tǒng)管理軟件還負(fù)責(zé)互為備份的兩個(gè)模塊的通信控制,為每個(gè)通用處理模塊設(shè)置工作狀態(tài)標(biāo)志,處理故障或者備份狀態(tài)的通用處理模塊則不允許其進(jìn)行通信操作。
2.3 故障監(jiān)控
在整個(gè)處理機(jī)運(yùn)行過(guò)程中,系統(tǒng)管理軟件將實(shí)時(shí)監(jiān)控各通用處理模塊的運(yùn)行狀態(tài),監(jiān)控手段包括周期自檢測(cè)結(jié)果、心跳消息等,并根據(jù)監(jiān)控結(jié)果對(duì)發(fā)生故障的模塊實(shí)時(shí)故障隔離,對(duì)備份模塊實(shí)施切換。
2.4 系統(tǒng)的備份切換
系統(tǒng)的備份切換是綜合數(shù)據(jù)處理機(jī)系統(tǒng)管理軟件的主要功能,能夠基于故障監(jiān)控結(jié)果及時(shí)發(fā)現(xiàn)發(fā)生故障的模塊并進(jìn)行故障的隔離和系統(tǒng)切換,系統(tǒng)的備份切換按照切換方法的不同分為主控模塊的切換和非主控模塊的切換。
2.4.1 主控模塊的自動(dòng)切換
主控模塊的自動(dòng)切換包括故障模塊的總線隔離及備份模塊的總線初始化。
CPCI主控模塊發(fā)生故障時(shí),需要進(jìn)行兩個(gè)CPM模塊之間的切換,CPM1被從總線隔離,CPM2被設(shè)置為CPCI總線的主控模塊。
由于CPM2之前作為CPCI總線的從模塊運(yùn)行,因此,在被設(shè)置為主控模塊后,CPM2需要通過(guò)一系列的切換操作以便恢復(fù)整個(gè)系統(tǒng)的運(yùn)行,在主控模塊切換過(guò)程中,數(shù)據(jù)處理機(jī)各通用處理模塊的數(shù)據(jù)交換是禁止的。
新的主控模塊需要完成的切換操作包括:
(1)將本模塊的PCI6466設(shè)置為透明模式;
(2)對(duì)本模塊PCI6466透明橋進(jìn)行配置;
(3)對(duì)其他CPCI從模塊的非透明橋進(jìn)行配置。
主控模塊切換完成后,將以事件形式通知其他通用處理模塊。
2.4.2 非主控模塊的自動(dòng)切換
非主控模塊的切換在非主控模塊發(fā)生故障時(shí)進(jìn)行,此時(shí),系統(tǒng)管理軟件根據(jù)故障監(jiān)控狀態(tài)將不允許發(fā)生故障的模塊輸出,并將輸出切換至備份模塊。
3 結(jié)束語(yǔ)
PCI-PCI橋是嵌入式系統(tǒng)中常用的一種總線擴(kuò)展方法,PLX公司的PCI6466是一種可以工作在透明模式和非透明模式的PCI-PCI橋,本文主要論述了某綜合數(shù)據(jù)處理機(jī)中的PCI-PCI透明橋和非透明橋的配置和切換方法,并通過(guò)PCI-PCI橋?qū)崿F(xiàn)了系統(tǒng)各模塊間的通信以及熱備份,該方案簡(jiǎn)單易行,對(duì)以后的系統(tǒng)設(shè)計(jì)具有一定的參考價(jià)值。
參考文獻(xiàn):
[1]PCI Local Bus Specification 2.3[S].Portland.PCI Special Interest Group,2001.
[2]王樂(lè),馬春江,馮曉東.PCI-to-PCI非透明橋的設(shè)計(jì)和應(yīng)用[J].微電子學(xué)與計(jì)算機(jī),2007(07):160-163.
[3]張玲,李鵬.一種具有主從自適應(yīng)功能的CPCI通用處理模塊設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2012(20):19-24.
[4]PLX Technology.Inc.PCI6466 Data Book[EB].PLX Technology.Inc,1999.http://www.plxtech.com.
[5]韓振國(guó),梁小虎.基于CPCI總線的具有熱切換能力的數(shù)據(jù)處理模塊的設(shè)計(jì)與實(shí)現(xiàn)[J].航空計(jì)算技術(shù),2010(04):116-117.
[6]周先譜,童朝南.一種基于C-PCI總線的HMCS地址映射機(jī)制研究[J].計(jì)算機(jī)工程與應(yīng)用,2008(10):71-74.
作者簡(jiǎn)介:陳曉磊(1981-),男,陜西西安人,工程師,學(xué)士學(xué)位,主要研究方向:機(jī)載嵌入式操作系統(tǒng)。
作者單位:中國(guó)航空計(jì)算技術(shù)研究所,西安 710065