戴玲琳,羅劼夫
(中國電子科技集團公司第三十研究所,四川 成都 610041)
在目前通信設備中,千兆以太網通信接口已成為最常見和通用的數據傳輸通道。本文采用較低成本的國產化處理器、國產化FPGA和國產化PHY芯片搭建多路千兆以太網接口交互處理平臺,可滿足多路以太網數據內外交互需求,也可根據自身需求,基于FPGA設計實現自定義功能。
為了確保平臺的應用推廣性,國產化平臺設計以實現數據交互性能達到1 000 Mb/s為硬性指標,采用較低成本和較低規格的國產化器件。本文采用CPU(龍芯2K1000)、FPGA(國微SMQ2V6000)和PHY芯片(JEM88E111)等國產化器件。它的平臺架構如圖1所示。
多路千兆以太網接口國產化交互平臺對外提供2個通信網口,與背板采用Serdes總線進行交互,可實現自定義協議數據高速傳輸。FPGA與CPU連接接口為RGMII,與以太網芯片連接接口為GMII,可在FPGA內部實現自定義多路千兆數據交互。SMQ2V6000資源情況,如表1所示[1]。

表1 SMQ2V6000資源情況
FPGA設計主要包括GMII接口模塊、RGMII接口、時鐘模塊和自定義交互處理模塊,總體設計框圖如圖2所示。
GMII和RGMII接口模塊主要使用廠家提供的IP core,經過剪裁實現數據收發,對內統一將GMII接口和RGMII接口數據轉化為SPI-3(System Packet Interface)總線,便于平臺內部進行自定義交互處理[2]。時鐘模塊對FPGA全局時鐘進行管理規劃,分別為各個功能模塊提供處理時鐘;自定義交互模塊用戶可根據自身需求進行代碼開發。
根據廠家提供的IP Core用戶手冊,GMII和RGMII接口數據接收、發送均需獨立處理時鐘。單路GMII接口時鐘方案較為簡單,其時鐘邏輯框圖如圖3所示。接收時鐘通過1個BUFG驅動作為IP Core的gmii_rx_clk時鐘源,發送時鐘經過1個BUFG作為gtx_clk時鐘源和GMII接口線路發送時鐘[3]。
由于RGMII接口是用時鐘上下沿處理數據,其時鐘處理較復雜。發送方向,時鐘通過1個DCM和4個BUFG驅動相位為0、90、180、270的4種時鐘。接收方向,線路時鐘通過1個DCM和2個BUFG恢復相位為0°和180°的2種時鐘。它的時鐘邏輯框圖如圖4所示。
通過以上分析可得,FPGA實現2路GMII接口和2路RGMII接口所需全局時鐘緩沖器為16個,已將SMQ2V6000全局時鐘緩沖器資源全部占用,導致FPGA其他邏輯模塊無法使用時鐘資源。所以,必須優化時鐘資源。時鐘緩沖器使用數量對比,如表2所示。

表2 時鐘緩沖器使用數量對比
時鐘資源可通過以下方案進行優化:
(1)2路GMII接口和2路RGMII線路發送時鐘可共用1個,時鐘源為FPGA內部全局輸入時鐘,可減少使用3個時鐘緩沖器;
(2)RGMII發送時鐘模塊只產生0°相位和90°相位的時鐘,其180°相位和270°相位的時鐘采用0°相位和90°相位的時鐘直接取反得到,2路RGMII接口則可減少使用6個時鐘緩沖器;
(3)RGMII接收時鐘180°相位也可使用取反方式代替,可節約2個時鐘緩沖器資源[4]。
通過時鐘優化后,2路GMII和2路RGMII僅使用7個時鐘緩沖器,因此SMQ2V6000資源完全滿足設計需求。
RGMII接口所有數據以及指示信號是時鐘上下沿采樣,時鐘頻率為125 MHz高頻。在FPGA設計中必須對RGMII接口時鐘、線路IOB、電平/驅動、上下沿采樣以及時鐘相位和位置進行約束,否則會引起線路數據恢復錯誤或不穩定現象[5]。本文將對國產化FPGA的多路RGMII接口調試常遇到的問題進行排查和分析。
2.3.1 單路RGMII接口調試
單路RGMII接口接收方向無數據,一般是由硬件問題和接收時鐘與數據時序問題引起的。因此,需從這兩方面入手進行問題排查。排查流程如圖5所示。
硬件問題主要包括線路時鐘頻率穩定問題、PCB布線等長以及接口電平是否符合IPCore要求。若硬件設計均滿足要求,RGMII接口接收方向依然無數據,則可能是由于接收時鐘與數據時序問題引起的。RGMII接口采用接收時鐘上升沿恢復低4 bit,下降沿恢復高4 bit。若時鐘不穩定或者出現相位差,則導致恢復數據不正確,下一個模塊采不到正確的幀頭則會丟棄數據。該問題可在約束文件中對接收時鐘進行頻率和相位調整解決。
2.3.2 多路RGMII接口調試
由于國產化FPGA時鐘資源限制,本文采用多路RGMII接口共用發送時鐘解決該問題。但是,各路時鐘FPGA內部不同的布局則會引起一路RGMII接口收發正常、另一路收發不正常的現象,需對多路RGMII多個接收、發送時鐘時序同時進行約束和優化,具體步驟如下文所述。
(1)先調A路,記錄各個時鐘BUFG、DCM的位置,約束A路所有收方向時鐘的BUFG位置。
(2)再調B路,記錄各個時鐘BUFG、DCM的位置,約束B路所有收方向時鐘的BUFG位置。
(3)對比兩次BUFG的位置,將相同的BUFG位置寫入UCF文件。一般來說,RGMII數據收發不正常是由于發送方向時鐘和數據存在相位差,所以在FPGA盡量將兩路共用的發送BUFG設置在相近的位置。
(4)約束好時鐘位置后,每路采用偏移相位的方法進行調試,根據數據恢復情況將時鐘相位調整到最佳位置。
本文在多路千兆以太網接口國產化交互平臺上進行結果驗證。FPGA內部對RGMII0接口與GMII0接口、RGMII1接口與GMII1接口客戶側數據進行交換,外部在背板上對兩路Serdes進行環回處理。它的驗證平臺如圖6所示。
驗證過程主要在CPU網口0和網口1之間進行數據收發。FPGA內部對各個接口客戶側信號采集,其時序圖如圖7、圖8所示,可得多路GMII和RGMII接口數據收發均正常。網口0和網口1數據收發均正常,證明該國產化平臺多路千兆以太網接口數據交互正確穩定。目前,該硬件平臺已成功應用于隔離交換項目。
本文搭建了一種低成本的國產化CPU+FPGA硬件平臺,針對多路GMII和RGMII接口時鐘資源沖突和時序不穩定問題,采用時鐘共享、時序優化、相位調整等措施進行解決。大量數據的傳輸驗證了其穩定性和可靠性,實現了多路千兆以太網接口交互。目前,該平臺已成功應用于相關項目,同時可以廣泛應用于需要多路以太網接口交互和數據處理的平臺。