戴玲琳,羅劼夫
(中國電子科技集團公司第三十研究所,四川 成都 610041)
在目前通信設(shè)備中,千兆以太網(wǎng)通信接口已成為最常見和通用的數(shù)據(jù)傳輸通道。本文采用較低成本的國產(chǎn)化處理器、國產(chǎn)化FPGA和國產(chǎn)化PHY芯片搭建多路千兆以太網(wǎng)接口交互處理平臺,可滿足多路以太網(wǎng)數(shù)據(jù)內(nèi)外交互需求,也可根據(jù)自身需求,基于FPGA設(shè)計實現(xiàn)自定義功能。
為了確保平臺的應(yīng)用推廣性,國產(chǎn)化平臺設(shè)計以實現(xiàn)數(shù)據(jù)交互性能達到1 000 Mb/s為硬性指標(biāo),采用較低成本和較低規(guī)格的國產(chǎn)化器件。本文采用CPU(龍芯2K1000)、FPGA(國微SMQ2V6000)和PHY芯片(JEM88E111)等國產(chǎn)化器件。它的平臺架構(gòu)如圖1所示。
多路千兆以太網(wǎng)接口國產(chǎn)化交互平臺對外提供2個通信網(wǎng)口,與背板采用Serdes總線進行交互,可實現(xiàn)自定義協(xié)議數(shù)據(jù)高速傳輸。FPGA與CPU連接接口為RGMII,與以太網(wǎng)芯片連接接口為GMII,可在FPGA內(nèi)部實現(xiàn)自定義多路千兆數(shù)據(jù)交互。SMQ2V6000資源情況,如表1所示[1]。
表1 SMQ2V6000資源情況
FPGA設(shè)計主要包括GMII接口模塊、RGMII接口、時鐘模塊和自定義交互處理模塊,總體設(shè)計框圖如圖2所示。
GMII和RGMII接口模塊主要使用廠家提供的IP core,經(jīng)過剪裁實現(xiàn)數(shù)據(jù)收發(fā),對內(nèi)統(tǒng)一將GMII接口和RGMII接口數(shù)據(jù)轉(zhuǎn)化為SPI-3(System Packet Interface)總線,便于平臺內(nèi)部進行自定義交互處理[2]。時鐘模塊對FPGA全局時鐘進行管理規(guī)劃,分別為各個功能模塊提供處理時鐘;自定義交互模塊用戶可根據(jù)自身需求進行代碼開發(fā)。
根據(jù)廠家提供的IP Core用戶手冊,GMII和RGMII接口數(shù)據(jù)接收、發(fā)送均需獨立處理時鐘。單路GMII接口時鐘方案較為簡單,其時鐘邏輯框圖如圖3所示。接收時鐘通過1個BUFG驅(qū)動作為IP Core的gmii_rx_clk時鐘源,發(fā)送時鐘經(jīng)過1個BUFG作為gtx_clk時鐘源和GMII接口線路發(fā)送時鐘[3]。
由于RGMII接口是用時鐘上下沿處理數(shù)據(jù),其時鐘處理較復(fù)雜。發(fā)送方向,時鐘通過1個DCM和4個BUFG驅(qū)動相位為0、90、180、270的4種時鐘。接收方向,線路時鐘通過1個DCM和2個BUFG恢復(fù)相位為0°和180°的2種時鐘。它的時鐘邏輯框圖如圖4所示。
通過以上分析可得,F(xiàn)PGA實現(xiàn)2路GMII接口和2路RGMII接口所需全局時鐘緩沖器為16個,已將SMQ2V6000全局時鐘緩沖器資源全部占用,導(dǎo)致FPGA其他邏輯模塊無法使用時鐘資源。所以,必須優(yōu)化時鐘資源。時鐘緩沖器使用數(shù)量對比,如表2所示。
表2 時鐘緩沖器使用數(shù)量對比
時鐘資源可通過以下方案進行優(yōu)化:
(1)2路GMII接口和2路RGMII線路發(fā)送時鐘可共用1個,時鐘源為FPGA內(nèi)部全局輸入時鐘,可減少使用3個時鐘緩沖器;
(2)RGMII發(fā)送時鐘模塊只產(chǎn)生0°相位和90°相位的時鐘,其180°相位和270°相位的時鐘采用0°相位和90°相位的時鐘直接取反得到,2路RGMII接口則可減少使用6個時鐘緩沖器;
(3)RGMII接收時鐘180°相位也可使用取反方式代替,可節(jié)約2個時鐘緩沖器資源[4]。
通過時鐘優(yōu)化后,2路GMII和2路RGMII僅使用7個時鐘緩沖器,因此SMQ2V6000資源完全滿足設(shè)計需求。
RGMII接口所有數(shù)據(jù)以及指示信號是時鐘上下沿采樣,時鐘頻率為125 MHz高頻。在FPGA設(shè)計中必須對RGMII接口時鐘、線路IOB、電平/驅(qū)動、上下沿采樣以及時鐘相位和位置進行約束,否則會引起線路數(shù)據(jù)恢復(fù)錯誤或不穩(wěn)定現(xiàn)象[5]。本文將對國產(chǎn)化FPGA的多路RGMII接口調(diào)試常遇到的問題進行排查和分析。
2.3.1 單路RGMII接口調(diào)試
單路RGMII接口接收方向無數(shù)據(jù),一般是由硬件問題和接收時鐘與數(shù)據(jù)時序問題引起的。因此,需從這兩方面入手進行問題排查。排查流程如圖5所示。
硬件問題主要包括線路時鐘頻率穩(wěn)定問題、PCB布線等長以及接口電平是否符合IPCore要求。若硬件設(shè)計均滿足要求,RGMII接口接收方向依然無數(shù)據(jù),則可能是由于接收時鐘與數(shù)據(jù)時序問題引起的。RGMII接口采用接收時鐘上升沿恢復(fù)低4 bit,下降沿恢復(fù)高4 bit。若時鐘不穩(wěn)定或者出現(xiàn)相位差,則導(dǎo)致恢復(fù)數(shù)據(jù)不正確,下一個模塊采不到正確的幀頭則會丟棄數(shù)據(jù)。該問題可在約束文件中對接收時鐘進行頻率和相位調(diào)整解決。
2.3.2 多路RGMII接口調(diào)試
由于國產(chǎn)化FPGA時鐘資源限制,本文采用多路RGMII接口共用發(fā)送時鐘解決該問題。但是,各路時鐘FPGA內(nèi)部不同的布局則會引起一路RGMII接口收發(fā)正常、另一路收發(fā)不正常的現(xiàn)象,需對多路RGMII多個接收、發(fā)送時鐘時序同時進行約束和優(yōu)化,具體步驟如下文所述。
(1)先調(diào)A路,記錄各個時鐘BUFG、DCM的位置,約束A路所有收方向時鐘的BUFG位置。
(2)再調(diào)B路,記錄各個時鐘BUFG、DCM的位置,約束B路所有收方向時鐘的BUFG位置。
(3)對比兩次BUFG的位置,將相同的BUFG位置寫入UCF文件。一般來說,RGMII數(shù)據(jù)收發(fā)不正常是由于發(fā)送方向時鐘和數(shù)據(jù)存在相位差,所以在FPGA盡量將兩路共用的發(fā)送BUFG設(shè)置在相近的位置。
(4)約束好時鐘位置后,每路采用偏移相位的方法進行調(diào)試,根據(jù)數(shù)據(jù)恢復(fù)情況將時鐘相位調(diào)整到最佳位置。
本文在多路千兆以太網(wǎng)接口國產(chǎn)化交互平臺上進行結(jié)果驗證。FPGA內(nèi)部對RGMII0接口與GMII0接口、RGMII1接口與GMII1接口客戶側(cè)數(shù)據(jù)進行交換,外部在背板上對兩路Serdes進行環(huán)回處理。它的驗證平臺如圖6所示。
驗證過程主要在CPU網(wǎng)口0和網(wǎng)口1之間進行數(shù)據(jù)收發(fā)。FPGA內(nèi)部對各個接口客戶側(cè)信號采集,其時序圖如圖7、圖8所示,可得多路GMII和RGMII接口數(shù)據(jù)收發(fā)均正常。網(wǎng)口0和網(wǎng)口1數(shù)據(jù)收發(fā)均正常,證明該國產(chǎn)化平臺多路千兆以太網(wǎng)接口數(shù)據(jù)交互正確穩(wěn)定。目前,該硬件平臺已成功應(yīng)用于隔離交換項目。
本文搭建了一種低成本的國產(chǎn)化CPU+FPGA硬件平臺,針對多路GMII和RGMII接口時鐘資源沖突和時序不穩(wěn)定問題,采用時鐘共享、時序優(yōu)化、相位調(diào)整等措施進行解決。大量數(shù)據(jù)的傳輸驗證了其穩(wěn)定性和可靠性,實現(xiàn)了多路千兆以太網(wǎng)接口交互。目前,該平臺已成功應(yīng)用于相關(guān)項目,同時可以廣泛應(yīng)用于需要多路以太網(wǎng)接口交互和數(shù)據(jù)處理的平臺。