《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 利用PCI局部總線實(shí)現(xiàn)BIade Server的數(shù)據(jù)交換
利用PCI局部總線實(shí)現(xiàn)BIade Server的數(shù)據(jù)交換
摘要: 著眼于刀片服務(wù)器的內(nèi)部構(gòu)架和整體方案的介紹,主要論述了基于FPGA的刀片與主板之間PCI數(shù)據(jù)交換的具體實(shí)現(xiàn)方法。
Abstract:
Key words :

新一代機(jī)架式服務(wù)器Blade Server(刀片服務(wù)器),應(yīng)用iSCSI協(xié)議,通過(guò)TCP/IP實(shí)現(xiàn)網(wǎng)絡(luò)存儲(chǔ),利用Intemet,可將SCSI數(shù)據(jù)包傳到地球上的任何地方。

筆者著眼于刀片服務(wù)器的內(nèi)部構(gòu)架和整體方案的介紹,主要論述了基于FPGA的刀片與主板之間PCI數(shù)據(jù)交換的具體實(shí)現(xiàn)方法。

1 刀片服務(wù)器系統(tǒng)構(gòu)架

刀片服務(wù)器是一種HAHD(High Availability High Density,高可用高密度)的低成本服務(wù)器平臺(tái),是專門(mén)為特殊應(yīng)用行業(yè)和高密度計(jì)算機(jī)環(huán)境設(shè)計(jì)的。每一塊刀片均由"系統(tǒng)服務(wù)器主板+控制板"組成,可以遠(yuǎn)程啟動(dòng)Windows NT/2000、Linux、Solaris等操作系統(tǒng)。類似于獨(dú)立的服務(wù)器,每塊刀片可以沒(méi)有獨(dú)立硬盤(pán)來(lái)存儲(chǔ)數(shù)據(jù),而是多個(gè)刀片共享一個(gè)Raid磁盤(pán)陣列。在該模式下,每個(gè)刀片運(yùn)行自己的系統(tǒng),服務(wù)于用戶指定的不同用戶群,相互之間沒(méi)有關(guān)聯(lián),不過(guò)也可以通過(guò)系統(tǒng)軟件將這些刀片集合成一個(gè)服務(wù)器集群,在集群模式下,所有的刀片連接起來(lái)提供高速網(wǎng)絡(luò)環(huán)境,實(shí)現(xiàn)資源共享,為相同的用戶群服務(wù)。用戶若需提高整體性能,只需在集群中插入新的刀片即可。刀片可熱插拔,替換便捷,且維護(hù)時(shí)間減到最小。

機(jī)架中的服務(wù)器(刀片)可以通過(guò)智能KVM轉(zhuǎn)換板共享一套鍵盤(pán)、顯示器和鼠標(biāo),以訪問(wèn)多臺(tái)服務(wù)器(刀片),從而便于進(jìn)行升級(jí)、維護(hù)和訪問(wèn)服務(wù)器上的文件。單個(gè)刀片通過(guò)PCI總線連接至主板,刀片中據(jù)的傳輸和交換,均通過(guò)該通道進(jìn)行,刀片的實(shí)際組成如圖1所示。

圖1 刀片組成示意圖

刀片在單機(jī)架系統(tǒng)中的位置如圖2所示。

圖2 刀片系統(tǒng)結(jié)構(gòu)

在單機(jī)架系統(tǒng)中,用戶交換機(jī)與Blade通過(guò)RJ45的千兆網(wǎng)接口進(jìn)行連接,用戶經(jīng)用戶交換機(jī)接入Blade服務(wù)器進(jìn)行數(shù)據(jù)交換,可以在全球任何地方,由Intemet接入到用戶交換機(jī)。集中控制單元具有網(wǎng)絡(luò)端口等PC常用輸出端口;分散控制單元(DMU)通過(guò)CompactPCI與Blade進(jìn)行通信;通過(guò)232串口與集中控制中心(SMU)進(jìn)行通信。DMU和SMU共同完成KVM的切換和采集Blade狀態(tài)功能。

由于每個(gè)Blade沒(méi)有單獨(dú)的硬盤(pán),所有Blade的啟動(dòng)都是通過(guò)目標(biāo)服務(wù)器遠(yuǎn)程啟動(dòng),并完成配置以及啟動(dòng)Raid中預(yù)裝的操作系統(tǒng),同時(shí)通過(guò)DHCPD(動(dòng)態(tài)分配IP地址)、ADSS、iSCSI為每個(gè)Blade分配使用Raid磁盤(pán)陣列空間。也即每個(gè)Blade都是通過(guò)網(wǎng)絡(luò)接口啟動(dòng)系統(tǒng),所以網(wǎng)絡(luò)配置要先于操作系統(tǒng)引導(dǎo)前完成初始化和驅(qū)動(dòng)裝載。

2 PCI局部總線概述

PCI總線是一種不依附于某個(gè)具體處理器的局部總線。從結(jié)構(gòu)上看,PCI是在CPU和原來(lái)的系統(tǒng)總線之間插入的一級(jí)總線,具體由一個(gè)橋接電路實(shí)現(xiàn)對(duì)這一層的管理,并實(shí)現(xiàn)上下之間的接口以協(xié)調(diào)數(shù)據(jù)的傳送。管理器提供了信號(hào)緩沖,使之能支持10種外設(shè),并能在高時(shí)鐘頻率下保持高性能。PCI總線也支持總線主控技術(shù),允許智能設(shè)備在需要時(shí)取得總線控制權(quán),以加速數(shù)據(jù)傳送。

通用PCI2.2接口信號(hào)如圖3所示。在圖3左半部分為必要信號(hào),任選信號(hào)列于右邊。其中信號(hào)名稱右邊加一個(gè)"#"符號(hào)表示是低電平有效,未加"#"符號(hào)的是高電平有效。根據(jù)信號(hào)的功能劃分,可分為系統(tǒng)信號(hào)組、地址數(shù)據(jù)組、接口控制組、仲裁管理組、錯(cuò)誤測(cè)試組、中斷功能組、Cache支持組以及其他功能組。

圖3 PCI局部總線引腳圖

  3 基于FPGA的PCI數(shù)據(jù)交換實(shí)現(xiàn)

通常PC都是采用本地硬盤(pán)來(lái)引導(dǎo)操作系統(tǒng),完成設(shè)備的驅(qū)動(dòng),Blade則通過(guò)網(wǎng)絡(luò)啟動(dòng)系統(tǒng),所以網(wǎng)絡(luò)配置要先于操作系統(tǒng)引導(dǎo),并完成初始化和驅(qū)動(dòng)裝載。為了解決這個(gè)難點(diǎn),我們采用"PCI+FPGA+Flash"結(jié)構(gòu),在Flash中燒錄雙端口千兆網(wǎng)卡PCI設(shè)備的初始化和驅(qū)動(dòng)裝載程序,由CPU在系統(tǒng)上電時(shí)加載Flash中的程序到系統(tǒng)內(nèi)存。由于數(shù)據(jù)傳輸是PCI總線,而Flash是標(biāo)準(zhǔn)的數(shù)據(jù)總線,這就存在數(shù)據(jù)總線轉(zhuǎn)換的問(wèn)題,問(wèn)題解決的方案是通過(guò)FPGA完成PCI設(shè)備與Flash之間的通信,下面將詳細(xì)介紹如何利用FPGA來(lái)完成PCI接口和Flash之間的通信。

3.1 FPGA系統(tǒng)邏輯與實(shí)現(xiàn)

整個(gè)FPGA系統(tǒng)設(shè)計(jì)基于PCI2.2從設(shè)備設(shè)計(jì)思想,PCI主設(shè)備為PCI橋芯片,用FPGA來(lái)完成PCI從設(shè)備功能,終端為Flash芯片。在FPGA系統(tǒng)中,PCI總線接口部分的設(shè)計(jì)參數(shù)為:PCI時(shí)鐘為33 MHz(CLK),32位I/O接口(AD[310]),終端接口可以提供20位或32位數(shù)據(jù)線。PCI主設(shè)備與終端Flash間的通信采用PCI從設(shè)備(FPGA)來(lái)實(shí)現(xiàn)的。在FPGA的邏輯設(shè)計(jì)中,終端是兼有Memory空間和I/O空間的抽象設(shè)備,在實(shí)際的設(shè)計(jì)中終端Flash,只有對(duì)應(yīng)的memory空間。

根據(jù)FPGA的模塊設(shè)計(jì)思想,采用Verilog語(yǔ)言將整個(gè)系統(tǒng)按功能進(jìn)行分塊設(shè)計(jì),每個(gè)模塊的輸出可以為其他功能模塊提供輸入,各模塊功能和設(shè)計(jì)思想如下:

"PCI頂層模塊"是系統(tǒng)頂層模塊,完成系統(tǒng)端口各使能開(kāi)關(guān)的定義和調(diào)用其他5個(gè)功能模塊。

"配置模塊"完成PCI從設(shè)備配置寄存器的設(shè)置。

"基址模塊"實(shí)現(xiàn)兩個(gè)功能:1)配置I/O空間和存儲(chǔ)空間(memory空間)的基地址;2)告知PCI從設(shè)備狀態(tài)機(jī)(The State Machine)。

"狀態(tài)機(jī)模塊"是整個(gè)設(shè)計(jì)的核心,控制PCI主設(shè)備到終端的所有數(shù)據(jù)傳輸。在PCI地址傳送階段,通過(guò)采樣C/BE[30]和IDSEL來(lái)決定是配置讀寫(xiě)、存儲(chǔ)空間讀寫(xiě)還是I/O空間讀寫(xiě)。

"校驗(yàn)?zāi)K"對(duì)AD[310]和C/BE[30]#信號(hào)作奇偶校驗(yàn),以保證數(shù)據(jù)的有效性。

"重入模塊"若PCI從設(shè)備進(jìn)行一個(gè)讀寫(xiě)操作,則必須在6個(gè)時(shí)鐘周期內(nèi)(定義PCI從設(shè)備為slow=10 b,慢速設(shè)備)使能DEVSEL.若PCI從設(shè)備進(jìn)行數(shù)據(jù)傳送(已經(jīng)使能DEVSEL),終端在9個(gè)時(shí)鐘周期內(nèi)沒(méi)有使能READY#,則將告知:"The State Machine模塊",終端暫時(shí)中止當(dāng)前的數(shù)據(jù)傳送,直到傳送條件滿足后,才重新啟動(dòng)數(shù)據(jù)傳送。

3.2 FPGA系統(tǒng)邏輯功能仿真與結(jié)論

完成了各功能模塊程序的編輯和編譯過(guò)程,即可采用xilinx ISE11.2自帶的HDL Bencher來(lái)生成測(cè)試激勵(lì)文件,而后就可以調(diào)用Model Sim進(jìn)行仿真了,該仿真也叫前仿真(邏輯功能仿真),布線后的仿真稱為后仿真,也叫延時(shí)仿真,布線后的仿真包含門(mén)延時(shí)和線延時(shí)。

下面給出memory寫(xiě)操作功能仿真的詳細(xì)步驟,并對(duì)結(jié)果進(jìn)行分析。

I/O、memory空間讀寫(xiě)過(guò)程非常相似,現(xiàn)對(duì)memory空間猝發(fā)方式寫(xiě)操作進(jìn)行詳細(xì)的說(shuō)明。在圖4中,通過(guò)測(cè)試文件生成pci_rst#=1,不產(chǎn)生復(fù)位動(dòng)作,地址節(jié)拍pci_ad=0x2000_0000,表示PCI主設(shè)備從系統(tǒng)地址0x2000_0000地址開(kāi)始寫(xiě)到終端0x00000地址開(kāi)始的數(shù)據(jù)空間,可在"PCI頂層模塊"定義(bkend_ad[190]=pci_ad[190]),終端只取系統(tǒng)地址的低20位地址。pci_cbe#[30]=0111,表示是memory空間寫(xiě)操作,在idle狀態(tài)pci_frame#使能,irdy#、devsel#、stop#先不使能,PCI主設(shè)備將地址送到終端地址線上,data_stop#=1,表示終端支持猝發(fā)方式數(shù)據(jù)寫(xiě)操作。在下個(gè)時(shí)鐘周期,進(jìn)入到rw_wait狀態(tài),base_regionl#(memory片選)使能,告訴終端準(zhǔn)備執(zhí)行memory寫(xiě)操作,同時(shí)打開(kāi)I/O、memory空間寫(xiě)操作使能。在下個(gè)時(shí)鐘周期,進(jìn)入到rw_wait2狀態(tài),如果終端使能ready#,表示終端準(zhǔn)備好接收數(shù)據(jù),使能devsel#、tr dy#、date_write#,其中date_write#使能,是讓終端產(chǎn)生寫(xiě)使能信號(hào)。irdy#、trdy#使能。表示PCI主設(shè)備和終端數(shù)據(jù)可以有效傳輸,通過(guò)測(cè)試文件在PCI主設(shè)備的對(duì)應(yīng)地址(0x2000_0000)下產(chǎn)生數(shù)據(jù)cdef0000,在該狀態(tài),寫(xiě)入終端第一個(gè)數(shù)據(jù)cdef0000.在下個(gè)時(shí)鐘周期,進(jìn)入到rw狀態(tài),如果在該狀態(tài)下pci_frame#=0還使能,表示PCI主設(shè)備想支持猝發(fā)寫(xiě),繼續(xù)使能devsel#、trdy#信號(hào),stop#不能使能,因?yàn)镻CI主設(shè)備準(zhǔn)備猝發(fā)寫(xiě)操作,在該狀態(tài)下,只要pci_frame#=0(使能),循環(huán)寫(xiě)入數(shù)據(jù)cdef0001、cdef0002、cdef0003、cdef0004,上文已經(jīng)介紹,下一個(gè)數(shù)據(jù)對(duì)應(yīng)的地址自動(dòng)加一,地址都是線性增加的。圖4中,PCI主設(shè)備準(zhǔn)備發(fā)送cdef0005數(shù)據(jù)時(shí),irdy#=1(不使能),表示PCI主設(shè)備正在取數(shù)據(jù),data_write#(終端寫(xiě)使能)不使能,告訴終端等待PCI主設(shè)備取數(shù)據(jù),插入等待周期。在下個(gè)時(shí)鐘周期,irdy#重新使能,date_wri te#也重新使能,繼續(xù)寫(xiě)數(shù)據(jù)cdef0005,這樣可以一直寫(xiě)數(shù)據(jù)。pci_frame#=1,表示進(jìn)入最后一個(gè)周期的寫(xiě)數(shù)據(jù)操作,關(guān)閉irdy#、devsel#、base_regionl#使能。在下個(gè)時(shí)鐘周期,進(jìn)入到backoff狀態(tài),在下個(gè)時(shí)鐘周期進(jìn)入到idel狀態(tài),一個(gè)完整的memory猝發(fā)寫(xiě)就完成了。

圖4 memory寫(xiě)操作功能仿真

完成功能仿真(前仿真)后和后仿真(布線后仿真)后,可使用ISE11.2自帶的下載配置工具進(jìn)行下載,至此FPGA系統(tǒng)設(shè)計(jì)全部完成,接著可對(duì)整個(gè)FPGA芯片進(jìn)行硬件部分的測(cè)試工作。

可采用Xilinx的ISE自帶的ChipScope Pro(在線邏輯分析儀),添加測(cè)試激勵(lì),可以看到數(shù)據(jù)的讀寫(xiě)都是滿足要求,具體跟上面的仿真波形相似,只是包含延時(shí)信息,門(mén)延時(shí)和線延時(shí)控制在0.5個(gè)時(shí)鐘單元(15ns),符合設(shè)計(jì)要求。

4 結(jié)束語(yǔ)

刀片式服務(wù)器在軍用控制和計(jì)算中心等計(jì)算密集型應(yīng)用中已經(jīng)得到廣泛應(yīng)用。隨著InfiniBand技術(shù)開(kāi)始扮演重要角色,刀片服務(wù)器將逐漸成為主流服務(wù)器。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。