《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 雙機(jī)通信在CPCI總線上的實(shí)現(xiàn)

雙機(jī)通信在CPCI總線上的實(shí)現(xiàn)

2008-08-28
作者:尚長(zhǎng)興,, 俞定玖,, 季新生

  摘 要: 介紹了PCI Bridge的工作原理,基于地址映射" title="地址映射">地址映射機(jī)制提出了SBC(Single Board Computer)間直接內(nèi)存訪問的新方案,。該方案可將板間通信效率提高6倍以上,,并可服務(wù)于各種高層應(yīng)用,。
  關(guān)鍵詞: CPCI總線 地址映射 PCI Bridge 單板計(jì)算機(jī) 性能優(yōu)化


  在電信,、電力、國(guó)防等應(yīng)用領(lǐng)域中,,經(jīng)常要求其所用設(shè)備有極高的實(shí)時(shí)性,。當(dāng)需要在各個(gè)設(shè)備間進(jìn)行大容量的信息交換時(shí),傳統(tǒng)的網(wǎng)絡(luò)包交換模式已不能很好地滿足實(shí)時(shí)性的要求,。而借助于CPCI總線,,兩個(gè)設(shè)備可以互訪對(duì)方的內(nèi)存,具有傳輸速度快,、傳輸容量大和高可靠性等特點(diǎn),,非常適合大容量的信息傳遞。國(guó)家數(shù)字交換系統(tǒng)工程技術(shù)研究中心承擔(dān)的國(guó)家863計(jì)劃項(xiàng)目——“中國(guó)第三代移動(dòng)通信系統(tǒng)”CDMA2000系統(tǒng)集成就選擇基于CPCI總線的多SBC平臺(tái),。各個(gè)SBC間的通信效率直接決定了整個(gè)系統(tǒng)性能的高低,。目前常用的實(shí)時(shí)操作系統(tǒng)如VxWorks、Lynx等,,都針對(duì)CPCI總線實(shí)現(xiàn)了消息隊(duì)列,,可用于SBC間的消息通信。但VxWorks,、Lynx中消息傳遞的實(shí)現(xiàn)方式很不靈活,,一般是通過在一個(gè)特定的SBC(通常為system board)中開啟一塊共享內(nèi)存,其他各個(gè)SBC(通常為non system board)通過對(duì)共享內(nèi)存的讀寫交換信息,;每完成一次兩個(gè)non system SBC間的信息交換,都要進(jìn)行一次PCI讀寫操作,,效率不高,。另外VxWorks、Lynx中的消息長(zhǎng)度都有一個(gè)最大值,,當(dāng)要進(jìn)行大數(shù)據(jù)量(如1GB的內(nèi)存數(shù)據(jù)庫(kù))的信息傳輸時(shí),,操作系統(tǒng)提供消息傳遞機(jī)制也無(wú)能為力。而以上這些問題,,都可以通過任意兩個(gè)SBC間的直接內(nèi)存訪問得到解決,。本文首先介紹了PCI Bridge的工作原理;然后以Motorola公司提供的CPX8000系列工控機(jī)為例,,討論了兩個(gè)SBC是如何基于背板(Backplane)上的CPCI總線,,并利用PCI Bridge的地址映射機(jī)制,通過互訪內(nèi)存的方式最終實(shí)現(xiàn)雙機(jī)通信" title="雙機(jī)通信">雙機(jī)通信,;最后介紹了實(shí)際應(yīng)用時(shí)應(yīng)注意的性能優(yōu)化問題,。
1 PCI Bridge的工作原理
  在簡(jiǎn)單的計(jì)算機(jī)系統(tǒng)中,其擁有的外部設(shè)備較少,,單級(jí)總線結(jié)構(gòu)便能滿足系統(tǒng)的需要,。但是由于單個(gè) PCI總線可支持的 PCI 設(shè)備數(shù)量有電氣限制,,對(duì)擁有大量外設(shè)的計(jì)算機(jī)系統(tǒng)而言,單級(jí)總線結(jié)構(gòu)已不能滿足系統(tǒng)的要求,,因此便產(chǎn)生了橋接設(shè)備,。通過PCI-to-PCI Bridge可擴(kuò)展出新的PCI總線,通過PCI-to-ISA Bridge可擴(kuò)展出ISA總線,。借助PCI Bridge這些特殊的PCI設(shè)備,,系統(tǒng)中各級(jí)總線被粘和在一起,使整個(gè)系統(tǒng)成為一個(gè)有機(jī)整體,。
  每個(gè)PCI設(shè)備都有自己的PCI I/O空間,、PCI內(nèi)存空間和PCI配置空間(configuration space)。PCI設(shè)備的設(shè)備驅(qū)動(dòng)程序?qū)CI配置空間進(jìn)行初始化設(shè)置后,,各個(gè)智能控制器如CPU,、DMA控制器等,可以對(duì)PCI設(shè)備的PCI I/O空間,、PCI內(nèi)存空間進(jìn)行訪問,。在圖1中,CPU若要訪問網(wǎng)卡,,首先會(huì)在PCI Bus0上生成一個(gè)物理地址,,這個(gè)地址經(jīng)PCI-to-PCI Bridge的過濾及轉(zhuǎn)換后,在PCI Bus1上產(chǎn)生一PCI Bus地址,,網(wǎng)卡通過地址譯碼,,響應(yīng)對(duì)這個(gè)地址的訪問。


  從這個(gè)過程可以了解到,,PCI-to-PCI Bridge有兩種基本的功能:
  (1)地址映射功能,。雖然同是對(duì)網(wǎng)卡進(jìn)行訪問,但PCI Bus0與PCI Bus1上的地址意義是不同的,。兩個(gè)地址分屬各自的地址空間,,通過PCI-to-PCI Bridge實(shí)現(xiàn)兩個(gè)地址的映射。根據(jù)這兩個(gè)地址是否相同,,可將PCI-to-PCI Bridge區(qū)分為兩種類型:
  ·PCI-to-PCI Transparent Bridge,。PCI Bridge不對(duì)PCI Bus0上的地址進(jìn)行轉(zhuǎn)換,直接將其映射到PCI Bus1上,。PCI Bus0與PCI Bus1上的地址是相同的,。
  ·PCI-to-PCI Non Transparent Bridge。PCI Bus0上的地址必須經(jīng)過PCI Bridge的轉(zhuǎn)換,,才能映射到PCI Bus1上,。PCI Bus0與PCI Bus1上的地址是不同的。
  (2)地址過濾功能,。PCI Bridge在把PCI Bus0上的地址向下游總線(ISA Bus,、PCI Bus1)傳遞時(shí),,具有選擇性。在圖1中,,CPU在PCI Bus0上所產(chǎn)生的地址,,只有對(duì)SCSI和Ethernet的訪問,PCI-to-PCI Bridge才予以接收,;而對(duì)于PCI Bus0的其他地址,,PCI-to-PCI Bridge均不予響應(yīng)。每一個(gè)PCI Bridge所響應(yīng)的地址范圍,,可形象地稱其為此PCI Bridge的地址窗口,,只有當(dāng)上游總線的地址落進(jìn)PCI Bridge的地址窗口中,PCI Bridge才響應(yīng)此地址并向下游總線傳遞,。
2 雙機(jī)通信的具體實(shí)現(xiàn)
  本節(jié)以Motorola公司提供的CPX8000系列工控機(jī)為例,,介紹了如何通過CPCI總線實(shí)現(xiàn)雙機(jī)間的通信。如圖2所示,,兩個(gè)SBC通過背板上的CPCI總線實(shí)現(xiàn)了物理上的連接,。如果兩個(gè)SBC能夠互相訪問對(duì)方的內(nèi)存,就可實(shí)現(xiàn)兩者間的數(shù)據(jù)交流,。以系統(tǒng)處理機(jī)板" title="機(jī)板">機(jī)板(System Processor Board,,又稱主機(jī)板" title="主機(jī)板">主機(jī)板)訪問非系統(tǒng)處理機(jī)板(Non-system Processor Board, 又稱子機(jī)板)內(nèi)存為例,介紹雙機(jī)通信的具體實(shí)現(xiàn),。本方案已在Lynx及VxWorks實(shí)時(shí)操作系統(tǒng)上實(shí)現(xiàn),。


  在圖2中,主機(jī)板CPU若要訪問子機(jī)板中的1MB" title="1MB">1MB內(nèi)存單元,,必須將這塊內(nèi)存映射到主機(jī)板CPU的虛擬地址空間中,,可以通過對(duì)主機(jī)板、子機(jī)板,、主機(jī)板與子機(jī)板的接口配置來(lái)達(dá)到目的。此1MB的內(nèi)存單元可被映射到不同的地址空間(如CPU虛擬地址空間,、物理地址空間,、本地PCI地址空間、系統(tǒng)CPCI地址空間等),,映射地址也各不相同,。在圖2中,對(duì)于此1MB內(nèi)存的起始單元在不同地址空間中的映射地址,,分別用符號(hào)A1,、A2、…A7表示,。
2.1 子機(jī)板的配置
  (1)調(diào)用內(nèi)核內(nèi)存分配函數(shù)申請(qǐng)1MB的內(nèi)核虛擬地址空間,,得到申請(qǐng)空間的開始地址A7,。
  (2)根據(jù)操作系統(tǒng)的內(nèi)存映射關(guān)系,得到虛擬地址A7的物理映射地址A6,。
  (3)Raven ASIC是一個(gè)Host-to-PCI Bridge,,因?yàn)镻rocessor Bus不是一個(gè)標(biāo)準(zhǔn)總線,所以通過Raven將其轉(zhuǎn)換為PCI總線,,以掛接各類PCI設(shè)備,。CPU和Raven一起構(gòu)成了一組套片(chipset),配合使用,。根據(jù)Raven的設(shè)置,,獲得物理地址A6在Local PCI Bus的映射地址A5。
  (4)21554是一PCI-to-PCI Non Transparent Bridge,,并可進(jìn)行雙向數(shù)據(jù)傳遞,。通過其內(nèi)部的兩個(gè)配置寄存器,將其地址窗口的大小設(shè)為1MB,;地址窗口的起始地址在Local PCI Bus端設(shè)為A5,。
2.2 主機(jī)板的配置
  (1)申請(qǐng)大小1MB的內(nèi)核虛擬地址空間,得到其開始地址A1,。
  (2)根據(jù)操作系統(tǒng)的內(nèi)存映射關(guān)系,,得到虛擬地址A1的物理映射地址A2。
  (3)根據(jù)Raven的設(shè)置,,得到物理地址A2在Local PCI Bus上的映射地址A3,。
  (4)21154是一PCI-to-PCI Transparent Bridge,它也可以在兩個(gè)方向上進(jìn)行數(shù)據(jù)訪問,。設(shè)置其內(nèi)部的兩個(gè)配置寄存器,,將其地址窗口的大小設(shè)為1MB;地址窗口的起始地址設(shè)置為A3,。由于21154的透明性,,地址A3與其在System CPCI Bus端的映射地址A4的值是相同的。
2.3 主機(jī)板與子機(jī)板的接口配置
  在主機(jī)板端對(duì)子機(jī)板進(jìn)行配置,,設(shè)置21554的配置寄存器,,將其在System CPCI Bus端的地址窗口開始地址設(shè)為A4。由于在Local PCI Bus端的地址窗口起始地址已設(shè)為A5,,所以將地址A4映射到了地址A5,。可以看到,,由于21554的非透明性,,使主機(jī)板與子機(jī)板的地址空間相互隔離,各自可獨(dú)立分配,并在System CPCI Bus級(jí)實(shí)現(xiàn)了對(duì)接,。在主機(jī)板CPU看來(lái),,整個(gè)子機(jī)板與主機(jī)板網(wǎng)卡一樣,都是掛在主機(jī)板Local PCI Bus下的一個(gè)外設(shè),。對(duì)子機(jī)板的訪問與對(duì)主機(jī)板網(wǎng)卡的訪問方式是一樣的,,沒有什么不同。
2.4 地址轉(zhuǎn)換流程
  當(dāng)所有的配置完成后,,主機(jī)板CPU只對(duì)地址A1進(jìn)行讀寫操作,,便可實(shí)現(xiàn)對(duì)子機(jī)板1MB內(nèi)存起始單元的訪問;對(duì)1MB內(nèi)存中其他單元的訪問,,只要將地址A1加上相應(yīng)的偏移量即可,。通過下面的地址轉(zhuǎn)換流程,可以清楚地看到各級(jí)地址是如何通過一級(jí)級(jí)映射,,最終命中指定單元的,。
  主機(jī)板CPU給出虛擬內(nèi)存訪問地址A1→主機(jī)板物理地址A2→主機(jī)板Local PCI Bus地址A3→System CPCI Bus地址A4→子機(jī)板Local PCI Bus地址A5→子機(jī)板物理地址A6→經(jīng)Falcon Memory Controller譯碼后,選中所申請(qǐng)的1MB內(nèi)存的起始單元,。
  從上述介紹可以看出,,要想實(shí)現(xiàn)雙機(jī)的內(nèi)存互訪,關(guān)鍵是要進(jìn)行正確的地址映射,。當(dāng)要實(shí)現(xiàn)多個(gè)SBC間的相互訪問時(shí),,地址的映射會(huì)更復(fù)雜,需要對(duì)操作系統(tǒng)的地址空間分配,、各個(gè)SBC的PCI-to-PCI Bridge設(shè)置,、System CPCI Bus地址空間分配等進(jìn)行通盤考慮。
3 性能優(yōu)化
  圖3,、圖4是用VMETRO的總線分析儀截獲的數(shù)據(jù),。分別是在兩個(gè)SBC間進(jìn)行讀寫訪問時(shí),連續(xù)進(jìn)行100 Byte傳輸?shù)臅r(shí)間圖,。


  從圖3可以看出,,每進(jìn)行一次4Byte的讀操作,要花費(fèi)956.8+4×149.5+179.4=1734.2ns,,這相當(dāng)于1734.2ns/29.9ns=58 PCI clock cycles,。
  從圖4可以看到,第一個(gè)4Byte的寫操作花費(fèi)了159.5ns,接著是兩次猝發(fā)傳送,,隨后一個(gè)4Byte寫操作花費(fèi)了119.6ns。進(jìn)行一次4Byte的寫操作平均花費(fèi)(159.5ns+2×29.9ns+119.6ns)/(4×29.9ns)=11 PCI clock cycles,。
  對(duì)比讀寫兩種訪問方式可以看出,,寫操作比讀操作的效率要高得多。這主要有以下一些原因:
  (1)當(dāng)PCI上的一個(gè)主設(shè)備發(fā)起對(duì)一個(gè)目標(biāo)設(shè)備的訪問時(shí),讀和寫操作的完成時(shí)間差別很大,。目前的PCI設(shè)備中一般都有一個(gè)用于存儲(chǔ)器寫的轉(zhuǎn)發(fā)(post)緩沖器,。若要進(jìn)行寫操作(如圖2中主機(jī)板對(duì)子機(jī)板的寫操作),主設(shè)備只需將其寫緩沖區(qū)數(shù)據(jù)復(fù)制到目標(biāo)設(shè)備的轉(zhuǎn)發(fā)緩沖器中,,便認(rèn)為操作完成,。例如在圖2中,主機(jī)板的Raven只要將數(shù)據(jù)發(fā)給21154,,便認(rèn)為寫操作完成,,后續(xù)的數(shù)據(jù)傳輸由21154驅(qū)動(dòng)完成??梢钥吹?,寫操作在目的總線上(子機(jī)板的Process Bus)完成之前可以先在源總線上(主機(jī)板的Local PCI Bus)完成,實(shí)際上是寄存器對(duì)寄存器的操作。而要實(shí)現(xiàn)一個(gè)讀操作,,則必須經(jīng)過存儲(chǔ)器本身的訪問和各級(jí)PCI接口的邏輯延遲才可完成,。與寫操作相比,讀操作在源總線上完成之前必須先在目的總線上完成,,這導(dǎo)致了讀操作的效率很低,。
  (2)從圖3、圖4中可以看到,,PCI設(shè)備還可進(jìn)行寫操作的猝發(fā)操作,,但讀操作則無(wú)法進(jìn)行。這是由于猝發(fā)操作只有在前一事務(wù)是寫事務(wù)時(shí)才能實(shí)現(xiàn),。猝發(fā)傳送取消了FRAME#,、AD、C/BE#,、IRDY#,、TRDY#、DEVSEL#等總線信號(hào)的周轉(zhuǎn)周期,,實(shí)現(xiàn)了每一個(gè)PCI clock cycle進(jìn)行一次數(shù)據(jù)傳送,。
  (3)猝發(fā)傳送操作不可能無(wú)限制地進(jìn)行下去。連續(xù)進(jìn)行猝發(fā)傳送的次數(shù)與轉(zhuǎn)發(fā)緩沖器的大小,、Latency Timer的取值,、總線的繁忙狀況都有關(guān)系。
  由于以上原因,,在兩個(gè)SBC間進(jìn)行數(shù)據(jù)傳送時(shí),,應(yīng)該采用如下方式:
  (1)提供數(shù)據(jù)的SBC應(yīng)將數(shù)據(jù)直接寫到消費(fèi)數(shù)據(jù)的SBC內(nèi)存中;而不是提供者將數(shù)據(jù)放在本地內(nèi)存,,再由消費(fèi)者經(jīng)過PCI讀操作來(lái)實(shí)現(xiàn),。也就是說,,總是進(jìn)行PCI寫操作。
  (2)當(dāng)需要在多個(gè)SBC間進(jìn)行數(shù)據(jù)互傳時(shí),,要合理地設(shè)置Latency Timer的取值,,以使各SBC公平使用PCI總線資源。
  考慮兩個(gè)子機(jī)板間的通信實(shí)現(xiàn),。若采用操作系統(tǒng)提供的消息傳遞機(jī)制,,數(shù)據(jù)提供者必須先將數(shù)據(jù)寫到主機(jī)板,數(shù)據(jù)消費(fèi)者再?gòu)闹鳈C(jī)板讀取數(shù)據(jù),。對(duì)一個(gè)4 Byte的數(shù)據(jù)傳輸來(lái)說,,平均要花費(fèi)58+11=69 PCI clock cycles。若采用本文提供的方法,,提供數(shù)據(jù)的SBC將數(shù)據(jù)直接寫到消費(fèi)數(shù)據(jù)的(接上頁(yè))
SBC內(nèi)存中,,則傳輸一個(gè)4 Byte的數(shù)據(jù),平均只需11 PCI clock cycles,??芍笳弑惹罢呖炝?9/11≈6.3倍,,極大提高了傳輸效率,。
參考文獻(xiàn)
1 Motorola.MCP750 Series Single Board Computer Programmer’s Reference Guide. Motorola, 2001
2 Motorola. CompactPCI Single Board Computer Programmer’s Reference Guide. Motorola, 2001
3 Intel.21554 PCI-to-PCI Bridge for Embedded Applications Hardware Reference Manual. Intel,1998
4 Intel. 21154 PCI-to-PCI Bridge Configuration Application Note. Intel,1998
5 Wind River.VxWorks Programmer′s Guide. Wind River Systems Inc,1998
6 Lynx. Lynx Device Driver Service Manual. Lynx, 2000
7 T.Shanley, D.Anderson. PCI System Architecture(4th Edition).USA: Addison Wesley Longman,,1999

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