林凡淼,劉 鑫,陸曉峰
(中科芯集成電路有限公司,江蘇無(wú)錫 214072)
高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn)(PCIe)是外設(shè)部件互連標(biāo)準(zhǔn)(PCI)的一種,相比于 PCI 應(yīng)用技術(shù)[1],PCIe是比其更快的串行通訊系統(tǒng),從中衍生出了眾多基于PCIe的應(yīng)用技術(shù),如與FPGA 相結(jié)合的PCIe接口DMA 傳輸[2]、高速數(shù)據(jù)采集系統(tǒng)[3]、高速 PCIe密碼卡[4]等。鑒于對(duì)PCIe越來(lái)越多的需求場(chǎng)合以及更好的熱插拔技術(shù)[5],傳統(tǒng)PCIe一一對(duì)應(yīng)的總線結(jié)構(gòu)已滿(mǎn)足不了各處理器之間的數(shù)據(jù)共享和傳輸,因此研究更多接口的“一對(duì)多”交換技術(shù)是十分有必要的。
文獻(xiàn)[6-7]和文獻(xiàn)[8]分別采用的是IDT 公司以及PLX 公司的PCIe交換電路芯片,能很好地完成多處理器間高速數(shù)據(jù)的傳輸和數(shù)據(jù)交換,但這些交換電路的設(shè)計(jì)以及對(duì)芯片的配置較為復(fù)雜,外圍電路采用的芯片不通用或?yàn)l臨淘汰,所以需簡(jiǎn)化電路及配置,使外圍器件通用化。本文以國(guó)產(chǎn)CPU 為核心,選擇合適的通用器件來(lái)搭建外圍電路,設(shè)計(jì)了一種PCIe交換電路及簡(jiǎn)單有效的測(cè)試方法,可滿(mǎn)足多PCIe總線之間高效且丟包率低的數(shù)據(jù)共享和傳輸?shù)男枨蟆?/p>
根據(jù)功能需求,整個(gè)電路系統(tǒng)集成在一塊板卡上,該系統(tǒng)包括CPU 模塊、PCIe接口(上下游)模塊、時(shí)鐘及復(fù)位模塊、電源模塊、熱插拔及I/O 擴(kuò)展模塊、基本模式配置模塊、EEPROM 模塊等。各個(gè)模塊通力協(xié)作,組成整個(gè)電路系統(tǒng),系統(tǒng)架構(gòu)如圖1 所示。
圖1 交換電路系統(tǒng)架構(gòu)
上游為PCIe金手指(定義為P0),下游為2 個(gè)PCIe卡槽 (定義為P2 和P4),通過(guò)基本模式配置電路對(duì)CPU 進(jìn)行模式配置,使得上下游的數(shù)據(jù)進(jìn)行傳遞,為下游的設(shè)備提供數(shù)據(jù)和時(shí)鐘信號(hào)。下游每個(gè)卡槽獨(dú)立工作,互不影響,所有端口均可支持X4 通道鏈接,2.5 Gbit/s 和5.0 Gbit/s。PCIe規(guī)范指定每一個(gè)交換機(jī)端口相當(dāng)于一個(gè)虛擬的PCIe-PCIe橋。時(shí)鐘分兩種方式給入至CPU,一種由金手指(P0)直接給入,一種由25 MHz 晶振通過(guò)配置電路給入,此電路可通過(guò)配置輸出不同頻率的差分時(shí)鐘信號(hào)。熱插拔模塊可檢測(cè)設(shè)備的運(yùn)行狀態(tài)并反饋給CPU,從而避免突然斷電導(dǎo)致數(shù)據(jù)丟失。本文重點(diǎn)介紹幾個(gè)重要模塊以及整板PCB的設(shè)計(jì),使得數(shù)據(jù)傳輸高效穩(wěn)定。
本文采用以IDT 公司的89HPES12T3G2 為對(duì)標(biāo)的國(guó)產(chǎn)CPU 作為核心芯片,該芯片具有高集成度、低功耗、小體積、低成本和外圍電路簡(jiǎn)單等特點(diǎn),廣泛應(yīng)用于服務(wù)器、存儲(chǔ)器、網(wǎng)絡(luò)交換器等設(shè)備,且具有12 通道/3 端口的PCIe-2.0 高性能交換電路,提供1 個(gè)PCIe上游端口和2 個(gè)PCIe下游端口,十分符合本文的設(shè)計(jì)架構(gòu)。其主要特征如下:
(1)具有 12 路 5 Gbit/s PCIe-2.0 通道(具備 8/10 編/譯碼器的SerDes 接口),3 個(gè)交換機(jī)端口 (其中包括1個(gè)X4 上游端口和2 個(gè)X4 下游端口),各端口自適應(yīng)支持的鏈接寬度為X4、X2、X1,所有端口支持通道自動(dòng)翻轉(zhuǎn);
(2)低延遲快速轉(zhuǎn)發(fā)交換架構(gòu),支持最大有效載荷為2048 Byte;
(3)支持通過(guò)EEPROM 自動(dòng)加載配置信息;
(4)支持與PCI 兼容的INTx 中斷及總線鎖定;
(5)下游PCIe端口支持熱插拔;
(6)9 個(gè)通用輸入/輸出引腳。
該芯片的PCIe總線輸出采用標(biāo)準(zhǔn)的高速總線硬件設(shè)計(jì)規(guī)范,因此為了保證信號(hào)完整性及傳輸質(zhì)量,在靠近芯片的PCIe接收總線上要放置隔離直流的電容(一般為 0.1 μF,封裝 0402)。
PCIe 設(shè) 備 與 PCIe 插 槽 都 具 有 REFCLK+ 和REFCLK-信號(hào),PCIe插槽使用這組信號(hào)與處理器系統(tǒng)同步。當(dāng)PCIe設(shè)備作為Add-In 卡連接在PCIe插槽時(shí),可以直接使用 PCIe 插槽提供的 REFCLK+ 和REFCLK-信號(hào),也可以使用獨(dú)立的參考時(shí)鐘,只要這個(gè)參考時(shí)鐘在(100±300×10-6)MHz 范圍內(nèi)即可。
當(dāng)使用獨(dú)立的參考時(shí)鐘時(shí),由25 MHz 晶振發(fā)出,經(jīng)時(shí)鐘配置芯片可輸出25~200 MHz 的差分時(shí)鐘信號(hào),再由PCIe專(zhuān)用時(shí)鐘復(fù)制芯片ICS9DB803DI 將其輸入的時(shí)鐘復(fù)制輸出至下游的2 個(gè)卡槽及CPU,ICS9DB803DI 具有8 路差分時(shí)鐘輸出 (低電平有效),復(fù)制范圍為50~400 MHz,且高效穩(wěn)定,滿(mǎn)足該電路功能需求。
本文采用0 Ω 選焊的方法來(lái)選擇時(shí)鐘輸入方式且當(dāng)選擇使用參考時(shí)鐘時(shí),設(shè)定通道4 輸出至P2 槽,通道0 輸出至P4 槽,通道1 輸出至CPU。整個(gè)時(shí)鐘模塊設(shè)計(jì)如圖2 所示。
圖2 時(shí)鐘模塊設(shè)計(jì)框圖
時(shí)鐘配置芯片ICS557-03 工作電壓為3.3 V,具有65 mA 的驅(qū)動(dòng)能力,通過(guò)S0 和S1 的高低電平的配置可輸出25~200 MHz 頻率的差分時(shí)鐘,符合設(shè)計(jì)要求。
上游的P0 口和下游的P2、P4 口與CPU 分別按照發(fā)送端和接收端的定義進(jìn)行連接,每個(gè)接口為8 路(發(fā)送端和接收端各 4 路),另外還有 PRSNT 1~3#、WAKE#和JTAG 等重要信號(hào)。
PRSNT1#、PRSNT2#和 PRSNT3# 是 PCIe卡實(shí)現(xiàn)熱插拔機(jī)制的邊帶信號(hào),上游將PRSNT1# 和PRSNT3#短路連接,PRSNT2#選焊是否與PRSNT1#和PRSNT3#連接,下游的PRSNT2#和PRSNT3#短路接連并上拉,而PRSNT1#被固定連接到地。這3 個(gè)信號(hào)的金手指長(zhǎng)度要比其他信號(hào)的金手指長(zhǎng)度短一點(diǎn),以便區(qū)分于其他重要信號(hào)。
WAKE#信號(hào)為可選信號(hào),可以懸空,也可以由下游兩個(gè)卡槽的WAKE# 邏輯與后連接金手指的WAKE#,即WAKE# (金手指)=WAKE# (卡槽1)&&WAKE#(卡槽2)。本文設(shè)計(jì)默認(rèn)懸空該引腳,邏輯與方式為選焊。
JTAG 為可選信號(hào),因此上下游的JTAG 引腳全部懸空處理。上下游的發(fā)送端和接收端數(shù)據(jù)線阻抗控制在(85±8.5)Ω,時(shí)鐘阻抗控制在(100±10)Ω,采用不同線寬的方法控制。
該模塊設(shè)計(jì)主要是為CPU 相關(guān)引腳進(jìn)行配置,PERSTN 為低時(shí),芯片對(duì)基本配置引腳狀態(tài)進(jìn)行采樣,以此確定交換機(jī)運(yùn)行的關(guān)鍵參數(shù)。配置的方法眾多,如電阻選焊、SMBus 配置、撥碼開(kāi)關(guān)等,本文選擇在斷電的情況下采用撥碼開(kāi)關(guān)和電阻選焊的方式進(jìn)行模式設(shè)置及切換,其中部分關(guān)鍵信號(hào)配置如表1 所示。
通過(guò)正確配置,CPU 的引腳處于正常狀態(tài),并且上下游接口連接的PCIe設(shè)備的線寬、速率等要求滿(mǎn)足系統(tǒng)需求,可建立正常通信。另外,引腳狀態(tài)及模式可根據(jù)所需來(lái)切換,方便測(cè)試其他功能。
表1 部分信號(hào)取值表
CPU 工作的穩(wěn)定性與電源系統(tǒng)息息相關(guān),因此電源模塊的設(shè)計(jì)尤為重要。CPU 共有5 種電源,分別是VDDCORE、VDDI/O、VDDPEA、VDDPEHA、VDDPETA,有模擬電源和數(shù)字電源,所需電壓值也不相同。由于金手指只提供12 V 和3.3 V 電源且3.3 V 電源引腳少,而為了給下游外接設(shè)備減少3.3 V 的壓力,電路系統(tǒng)中其他器件3.3 V 及VDDI/O 電源由12 V 經(jīng)穩(wěn)壓器轉(zhuǎn)成3.3 V 提供,金手指的3.3 V 直接供給于下游卡槽。12 V 轉(zhuǎn)3.3 V 穩(wěn)壓器采用TI 公司的PTH08T240W,可輸出最大10 A 的電流,轉(zhuǎn)換效率高達(dá)96%且輸入輸出電壓值均可調(diào)。
由于CPU 所需電源無(wú)時(shí)序要求,因此另外4 種電源采用4 片LDO 分別將3.3 V 轉(zhuǎn)換成3 種1.0 V 和1種2.5 V,該LDO 型號(hào)為EN5330DC,最大可輸出3 A,轉(zhuǎn)換效率高達(dá)90%,可通過(guò)電阻選配來(lái)調(diào)節(jié)輸出電壓值,上升時(shí)間為1.2 ms,完全滿(mǎn)足CPU 上電需求,只需注意LDO 輸出所配置的電容值[9],該電源模塊設(shè)計(jì)架構(gòu)如圖3 所示。
通過(guò)該電源方案,將CPU 的模擬電源和數(shù)字電源完全分開(kāi),使CPU 內(nèi)部的各個(gè)功能模塊的電源分離,這樣既可減輕各個(gè)功能模塊的電源壓力,又可以減少串?dāng)_對(duì)其工作性能的影響。
圖3 電源模塊設(shè)計(jì)架構(gòu)
將各個(gè)模塊整合在一塊PCB 板卡上,進(jìn)行PCB設(shè)計(jì),最后PCB 實(shí)物如圖4 所示。CPU 模塊預(yù)留插座封裝,可將芯片直接焊接或使用插座。電源模塊共有1個(gè)12 V 轉(zhuǎn)3.3 V 穩(wěn)壓器及4 片LDO。時(shí)鐘模塊主要由時(shí)鐘配置芯片及時(shí)鐘復(fù)制芯片組成,撥碼開(kāi)關(guān)可調(diào)節(jié)頻率?;灸J脚渲媚K斷電時(shí)采用撥碼開(kāi)關(guān)進(jìn)行模式選擇。上游模塊金手指為PCIe X4 寬度,定義為P0。下游模塊有2 個(gè)PCIe X4 卡槽,定義為 P2 和 P4。EEPROM 模塊內(nèi)的跳線為可讀寫(xiě)選擇,低電平為寫(xiě)保護(hù)。
圖4 整板PCB 實(shí)物
整個(gè)電路系統(tǒng)集成在一塊PCB 板卡上,先搭建測(cè)試環(huán)境,再通過(guò)軟件來(lái)測(cè)試是否實(shí)現(xiàn)了設(shè)計(jì)功能并達(dá)到傳輸時(shí)間及丟包率小于10 ms 和5×10-4的指標(biāo)。
上游為一個(gè)X4 通道的PCIe金手指,用于接入宿主處理器系統(tǒng)的PCIe總線,下游設(shè)置兩個(gè)X4 通道的PCIe卡槽,能夠插入任意PCIe 2.0 設(shè)備。將PCB 板插入PC 機(jī)或其他處理器主板的PCIe 2.0 插槽上,下游卡槽分別插入一個(gè)PCIe千兆網(wǎng)卡(82571EB),再將測(cè)試系統(tǒng)的網(wǎng)絡(luò)端口與外部測(cè)試電腦的網(wǎng)口通過(guò)網(wǎng)線全部接入網(wǎng)絡(luò)交換器,構(gòu)成測(cè)試環(huán)境,如圖5 所示。
圖5 交換電路PCB 板卡測(cè)試環(huán)境
測(cè)試環(huán)境搭建完成后,按照如下步驟進(jìn)行測(cè)試:
(1) 在宿主處理器系統(tǒng)內(nèi)通過(guò)掃描PCI 鏈路獲取PCI 總線上掛載的全部設(shè)備列表,測(cè)試硬件掛載是否成功;
(2) 通過(guò)外部測(cè)試電腦PC2 對(duì)宿主處理器系統(tǒng)進(jìn)行網(wǎng)絡(luò)ping 包,統(tǒng)計(jì)ping 包的傳輸時(shí)間及丟包率,驗(yàn)證交換電路系統(tǒng)的穩(wěn)定性。
根據(jù)3.1 節(jié)的介紹搭建測(cè)試環(huán)境并按測(cè)試步驟進(jìn)行測(cè)試,使用IDT 公司配套的開(kāi)發(fā)軟件PCIeBrower進(jìn)行掃描,掃描到的硬件設(shè)備掛載如圖6 所示,表明設(shè)備掛載成功。
掛載成功后進(jìn)行網(wǎng)絡(luò)ping 包來(lái)檢測(cè)上下游是否互通,結(jié)果如圖7 所示。
由圖6 和圖7 可知,電路系統(tǒng)功能正常,為驗(yàn)證ping 千兆網(wǎng)卡的穩(wěn)定性,從ping 每一個(gè)小包直至大包,運(yùn)行一段時(shí)間后的丟包率及ping 包所需時(shí)間這幾個(gè)指標(biāo)去體現(xiàn),列舉了量級(jí)為 300、2400、9600 和115200,運(yùn)行30 min 后的傳輸時(shí)間及丟包率的情況,測(cè)試結(jié)果如表2 所示。
圖6 設(shè)備掛載
圖7 P2 卡槽網(wǎng)絡(luò)ping 包
表2 不同量級(jí)下的ping 包性能
在ping 小包時(shí)基本上沒(méi)有丟包率,傳輸時(shí)間也很快,隨著包的量級(jí)逐漸增大,傳輸時(shí)間增長(zhǎng)且有一定的丟包率,但沒(méi)有出現(xiàn)較大的延遲(10 ms 以上)及丟包率(小于5×10-4),因?yàn)閁DP 協(xié)議中在高速數(shù)據(jù)傳輸下會(huì)有少量丟包的情況,因此該電路系統(tǒng)能進(jìn)行高速數(shù)據(jù)傳輸且比較穩(wěn)定。P4 卡槽的網(wǎng)絡(luò)ping 包情況與P2類(lèi)似,不再贅述。綜上所述,該電路系統(tǒng)各項(xiàng)指標(biāo)均在可接受范圍內(nèi),符合設(shè)計(jì)要求。
本文設(shè)計(jì)了一種PCIe交換電路系統(tǒng)且集成于一塊PCB 板卡上,通過(guò)搭建測(cè)試環(huán)境,利用對(duì)應(yīng)的測(cè)試軟件根據(jù)測(cè)試步驟進(jìn)行測(cè)試,測(cè)試結(jié)果表明該設(shè)計(jì)可靠穩(wěn)定。從ping 包的情況來(lái)看,UDP 協(xié)議在高速數(shù)據(jù)傳輸下會(huì)存在一定的丟包率,實(shí)驗(yàn)表明2 個(gè)卡槽均只有在ping 大包 (115200) 的情況下有一些延遲及丟包率,但均能滿(mǎn)足傳輸時(shí)間小于10 ms 及丟包率小于5×10-4的指標(biāo),符合設(shè)計(jì)要求;從設(shè)計(jì)合理性和復(fù)雜度的情況來(lái)看,所涉及的器件較少且多處作了可選擇設(shè)計(jì),方便按需切換。該設(shè)計(jì)可運(yùn)用在多處理器間PCIe數(shù)據(jù)傳輸?shù)母鱾€(gè)場(chǎng)合,但在高速傳輸較大數(shù)據(jù)包時(shí)仍有一定的丟包率,因此可繼續(xù)優(yōu)化電路及PCB 布局布線方案,選用性能指標(biāo)更優(yōu)的元器件,從而提高可靠性。