林凡淼,雷淑嵐,陸曉峰,張 恒
(中科芯集成電路有限公司,江蘇無錫 214072)
高速串行計算機擴展總線標準(PCIE)是外設部件互連標準(PCI)的一種,且具有帶寬大、速度快、成本低等特點,因此越來越多的設備將PCI接口轉換成PCIE接口來使用[1],但目前有的服務器主機上沒有設計PCI槽位,導致越來越多的PCI設備無用武之地。鑒于這種大量PCI設備因接口問題而無法使用的情況,眾多學者研究了數據轉換技術及應用,如單純的PCI交換技術[2]、基于PCI和PCIE的XMC/PMC載板設計[3]、PCIE總線及其交換技術[4]以及雙向PCI-PCIE橋接電路的驗證技術[5]等,使PCIE數據轉換成PCI進行通信,可以在很大程度上節省投入的時間和成本,避免因接口不對而無法通信的局面,因此研究PCIE轉PCI總線高速數據轉換技術是很有必要的。
文獻[6-7]均為PCIE轉PCI總線的擴展槽,主要針對服務器主機機箱空間限制及PCI插槽數量問題做的一種線纜擴展裝置,該裝置無法實現數據的轉換和交互及對PCI卡槽工作模式的設置,并且只局限在機箱主板內而無法應用在其他場合。本文以PI7C9X130芯片為核心,選擇合適的通用器件來搭建外圍電路,設計PCIE轉PCI電路系統及簡單有效的測試方法,配置完成后只需上電即可直接運行,滿足數據轉換和傳輸的需求。
根據功能及測試要求,整個電路系統在一塊PCB板卡上實現,包括CPU、PCIE及PCI接口(上下游)模塊、時鐘模塊、電源模塊、CPLD模塊、基本模式配置模塊、EEPROM模塊等,系統架構如圖1所示。

圖1 電路系統架構
上游為PCIE X4金手指(定義為P3),下游為2個PCI卡槽(定義為P1和P2),通過基本模式配置電路對CPU相關管腳進行配置,使CPU正常工作,給下游PCI卡槽提供數據和時鐘信號,從而可以實現數據轉換和傳輸。下游的2個卡槽共享時鐘和數據且工作在相同的頻率,通過中斷及設備識別號(IDSEL)信號來區分。時鐘分2種方式給入CPU,一種由金手指(P3)直接給入,此方式稱為內部時鐘輸入且頻率由CPU引腳配置;一種由33 MHz晶振通過CPLD配置時鐘管理芯片后給入,此方式稱為外部時鐘輸入,可輸出不同的時鐘頻率。電源模塊為整個電路系統提供穩定且干凈的電源輸入,保證整個系統工作穩定且高效。本文重點介紹幾個重要模塊的設計,模塊之間相互配合,使得PCIE轉PCI的數據轉換和傳遞高速、高效且穩定。
本文采用Pericom公司的橋芯片PI7C9X130作為核心處理單元,該芯片具有高集成度、低功耗、小體積、低成本和外圍電路簡單等特點,廣泛應用于服務器、存儲器、網絡交換器等設備,擁有眾多工作模式及參數選擇,因此配置比較靈活方便。該橋芯片可支持下游最多7路PCI端口(本文只需2個)且相互獨立,因此十分符合本文的設計架構。其主要特征如下:
(1)支持PCIE-to-PCI橋規范1.0版本,PCIE基本規范1.1版本以及X4鏈接寬度(速率2.5 Gbit/s),最大有效載荷512 Byte;
(2)支持PCI總線標準3.0版本,PCI-to-PCI橋體系結構規范1.2版本,PCI-X補充協議2.0a,PCI熱插拔規范1.1版本,PCI中斷模式;
(3)支持正向或反向、透明橋或非透明橋、內部仲裁或外部仲裁、時鐘頻率配置等工作模式;
(4)具有I2C、SM總線、JTAG等接口;
(5)典型功耗僅為1.5 W,且具有輔助電源系統,可有效保護芯片避免電流的沖擊影響;
(6)7個通用輸入/輸出引腳。
PI7C9X130配置寄存器完全與現有的PCI橋軟件及防火墻兼容,在原始操作中不需要對PCI橋軟件及防火墻進行更改操作,因此減輕了工作量,應用起來更加方便、快捷。
上游的PCIE端只需接金手指的時鐘差分對(REFCLKP/REFCLKN)即可,下游的PCI卡槽端時鐘來源是通過CPU時鐘輸入引腳CLKIN/M66EN(T6)來實現,分為內部時鐘和外部時鐘,不同的模式(PCI/PCI-X)使用不同的時鐘來源。若要運行在PCI模式則使用內部時鐘頻率,通過CLKIN/M66EN(T6)、PCIXCAP(A4)和SEL100(E14)這3個引腳的配置來確定時鐘頻率并輸出至下游卡槽,通過配置可運行在25~66 MHz不等。
若要運行在PCI-X模式則使用外部時鐘電路,通過電路產生的時鐘接入CLKIN/M66EN(T6)即可,且輸出時鐘CLKOUT[0:6]中的某一根必須反饋到CPU的FBCLKIN(B4)引腳。時鐘電路采用33 MHz有源晶振接入ICS公司的可編程時鐘管理芯片ICS307-02,通過CPLD對其配置可輸出需要的時鐘頻率。該芯片通過時序來控制輸出頻率,最高可達200 MHz且在10 ms內鎖定,工作高效穩定,滿足電路功能需求。
為方便切換,相關引腳的高低電平配置利用撥碼開關來實現。下游2個卡槽的時鐘線即CLKOUT0和CLKOUT1需等長且各串聯1個22Ω電阻來保證信號質量。
上游的PCIE接口與CPU的連接有4對差分輸入信號、4對差分輸出信號、1對差分時鐘信號和1個復位信號,按照定義正確連接即可,在金手指的接收端和差分時鐘信號上必須放上隔離直流的電容(0.1μF,封裝0402)。SMBus接口和EEPROM接口通過0Ω電阻選焊的方式實現。
PRSNT1#、PRSNT2#和PRSNT3#是PCIE卡實現熱插拔機制的邊帶信號,因上游金手指寬度為X4,因此需將PRSNT1#和PRSNT3#短路連接,PRSNT2#可選擇懸空,這3個信號的金手指長度要比其他信號的金手指長度短一點,以便區分于其他重要信號。
下游的PCI接口與CPU的連接有64 bit數據線、控制線、中斷等,2個卡槽除了設備識別號(IDSEL)、仲裁號(REQ#)、總線使用權(GNT#)及時鐘線外均相同。2個卡槽的熱插拔機制邊帶信號均作上拉處理。
JTAG為可選信號,本文采用上游的JTAG信號預留接口而下游的JTAG信號均作上拉處理。為保證信號完整性和信號質量,上下游總線均需符合標準的高速總線硬件設計規范,因此上游的發送端和接收端數據線阻抗控制在(85±8.5)Ω且等長,時鐘阻抗控制在(100±10)Ω,下游的數據線阻抗控制在(65±6.5)Ω且等長。
CPU支持多種配置方式,不同的配置方式有其相對應的功能,因此在配置時要反復檢查是否正確,本文從CPU模式配置及下游PCI/PCI-X模式及其頻率配置兩個方面進行介紹。
本文所需的模式是支持I2C、透明橋、內部仲裁、正向(PCIE-to-PCI)、支持熱插拔等,因此只需令相關引腳置高或置低即可,通過撥碼開關進行配置,部分重要信號取值如表1所示。
下游卡槽所使用的PCI或PCI-X模式也需要配置,CPU的PCIXUP(B3)和PCIXCAP(A4)引腳通過1 kΩ電阻連接并使用56 kΩ電阻上拉,通過電阻和電容的不同組合方式來確定使用的是哪種模式(PCI模式、PCI-X 66 MHz模式、PCI-X 100 MHz或133 MHz模式)。若運行在PCI-X 100 MHz或133 MHz模式,則由CPU的SEL100(E14)引腳的高低電平來確定,具體電路實現如圖2所示。

表1 部分信號取值表

圖2 下游PCI卡槽模式選擇
通過對CPU的正確配置,整個電路系統工作正常,為數據交換提供了穩定環境。
電源模塊分2路電源輸入,一路是5 V穩壓電源,該電源接通后經過2次LDO芯片[8]將5 V轉換為3.3 V和1.8 V供CPLD使用,通過LED燈來判定CPLD是否工作正常,該路電源僅調試CPLD的功能。另一路為金手指輸入,金手指可提供12 V和3.3 V電源,而下游PCI卡槽需±12 V、3.3 V和5 V,因此3.3 V和12 V由金手指直接獲取,而-12 V則通過電平轉換芯片LT1054CDWR將12 V轉換得到。CPU有I/O口、內核、PLL及模擬和數字共10種電源,可分為4個功能模塊。為了有效區分這4個功能模塊,采用BGA封裝且有4路輸出的DC-DC電源芯片LTM4644來進行電壓轉換及供給,CPLD控制每路的使能(高電平有效),每路的輸出電流可達4 A且轉換效率在90%以上,可通過匹配電阻和啟動電容來調節輸出電壓及上電時間(本文默認0.1μF,上電時間大約20 ms),滿足電源功能需求。
由于下游卡槽有3.3 V和5 V兩個電壓環境(SVIO),因此做了可選擇性設計即通過0Ω來選擇電壓環境,這樣可兼容不同電壓環境的PCI設備。整個電源模塊設計架構如圖3所示。
通過該電源方案,將CPU及外圍器件的電源根據模塊不同層層分開,各電源獨立工作,模擬和數字互不干擾,可大大降低串擾的風險,減少各功能模塊的電源壓力,提高工作效率。

圖3 電源模塊設計架構
將各個模塊整合在一塊PCB上進行設計,最終實物如圖4所示。在PCB布線方面,從金手指出來的信號走差分對接入PI7C9X130的PCIE接口,隔離直流電容要盡量靠近金手指,出來的時鐘線接入下游的PCI卡槽必須等長,且盡量敷銅把時鐘線保護起來,反饋于FBCLKIN引腳的時鐘線要比接入下游卡槽的時鐘線長大約2.5 mm。

圖4 整板PCB實物
在板厚和板層方面,由于有金手指,所以采用標準板(厚1.6 mm)。該板有較多的差分對信號且PCIE信號為高速信號,因此板層不宜較多(本文為10層),否則會影響數據傳輸質量。
在方便調試方面,在板中一些重要的信號或引腳上設置測試點(尤其是時鐘和電源),方便后續調試。對于BGA封裝的元器件盡量多扇出,這樣可以方便飛線進行連接。
上游為X4通道的PCIE金手指,用于接入宿主處理器系統(Linux系統)的PCIE總線,下游為2個PCI(64 bit)卡槽,能夠插入任意PCI設備。將PCB板插入PC機或其他處理器主板的PCIE插槽上,下游卡槽分別插入一個PCI千兆網卡(BCM5704),再將測試系統的網絡端口與外部測試電腦的網口通過網線全部接入網絡交換器,構成測試環境,如圖5所示。

圖5 板卡測試環境
測試環境搭建完成后,按照如下步驟進行測試:
(1)在宿主處理器系統內通過掃描總線上掛載的全部設備列表,測試硬件掛載是否成功;
(2)下游卡槽在不同工作模式下通過外部測試電腦PC2對宿主處理器系統PC1進行網絡ping包,統計ping包的傳輸時間及丟包率,驗證電路系統的穩定性。
根據3.1節的介紹搭建好測試環境,在PC1上使用lspci命令掃描設備,掃描到的設備如圖6所示,可以看到掃描到橋芯片PI7C9X130及網卡BCM5704。
掛載成功后進行網絡ping包,并通過跳線及撥碼開關來選擇下游卡槽的不同工作模式,查看其性能指標,在這里網絡ping包的量級統一使用115200,運行30 min后統計傳輸時間及丟包率,測試結果如表2所示。

圖6 設備掛載

表2 下游卡槽不同工作模式下ping包性能
無論是PCI模式還是PCI-X模式均能上下游ping通,且隨著傳輸速率的增加,傳輸時間及丟包率均有一定的增加,但均小于10 ms和5×10-4,滿足設計指標。因UDP協議在高速數據傳輸過程中會有少量丟包的情況,因此該電路系統的各項指標均在可接受范圍內且工作比較穩定。P2卡槽的情況與P1類似,不再贅述。將本文與文獻[3]所設計的PCIE轉PCI橋電路系統進行對比(僅列舉幾個重要模塊設計),如表3所示。

表3 與文獻[3]的電路系統對比
在電路系統設計方面,本文涉及的元器件較少且設計更加合理和科學,采用靈活配置的多種方式可在不同工作環境下選擇;在結果方面,文獻[3]采用FPGA模擬數據存入,最后用示波器來觀察其輸出波形,本文可在不同模式下進行ping包來測試性能,覆蓋面更廣且更接近實際應用,因此本文設計的電路系統具有更好的實際工程價值。
綜上所述,該電路系統達到預期功能及穩定性指標,符合設計要求。
本文設計了一種基于PI7C9X130的PCIE轉PCI的電路系統且集成于一塊PCB上,通過搭建測試環境,根據測試步驟進行測試,測試結果表明該設計可靠穩定。從網絡ping包的情況來看,UDP協議在數據包較大且高速傳輸下會存在一定的丟包率,實驗結果表明隨著數據傳輸速率的增加會有些延遲及丟包率,但滿足傳輸時間小于10 ms、丟包率小于5×10-4的設計指標,符合設計要求;從設計復雜度和合理性情況看,外圍電路較簡單,所需器件較少且多處做了可選擇性設計,方便按需切換。該設計可實現PCIE對PCI的數據轉換且高效穩定,但在較苛刻的工作模式下仍有一定的丟包率,因此可繼續優化電路方案及PCB布局布線,選用性能更優的元器件,進一步提高可靠性。