隨著FPGA在數據中心加速和Smart NIC在SDN和NFV領域的廣泛應用,基于以太網接口的FPGA開發板越來越受到關注。而更高速率的以太網接口技術則是應用的關鍵,本文將詳細介紹基于FPGA的10G以太網接口的原理及調試技術。
1、10G以太網結構
10G以太網接口分為10G PHY和10G MAC兩部分。如下圖所示。
本設計中使用了Xilinx公司提供的10GEthernet PCS/PMA IP核充當連接10GMAC的PHY芯片,然后將該IP核約束到光模塊上構建完整的物理層。需要說明的是本設計主要是完成以太網二層邏輯設計,不涉及PHY層的邏輯設計,如:bit同步、字節同步、字同步、64b/66b編解碼等。
2、10G以太網接口PHY
10G EthernetPCS/PMA的整體結構如圖5.2所示,其核心是基于RocketIO GTH/GTX來實現的。從圖中可知,該模塊分為PCS層和PMA層,對于發送數據,PCS層主要功能是對數據進行64B/66B編碼、擾碼、發送變速等功能。同時在測試模式下還提供了一個測試激勵源,用于對鏈路進行檢測。PMA層的主要功能是提供并串轉換、對串行信號進行驅動并發送等功能。對于接收數據,PMA層的主要功能是將接收到的高速差分信號進行串并轉換、bit同步、時鐘恢復等功能,PCS層對于從PMA層接收到的數據進行塊同步、解擾碼、64B/66B解碼、彈性緩存等。同時在測試模式下還提供測試激勵檢測功能,用于檢測鏈路工作狀態。
在接口調試過程中,可能用到PMA層的近端環回和遠端環回功能。PMA近端回環,用于測試IP核內部自回環;PMA遠端回環,用于將接收到的遠端10G PHY發送的的數據在PMA層直接回環發送給遠端10G PHY,而不經過本地的PCS層。
3、10G以太網接口時鐘布局設計
由于10G Ethernet PCS/PMA是Xilinx官方提供的一款IP核,所以我們需要做的工作是結合開發板的實際情況,為該IP核以及其他模塊設計合理的時鐘電路,使其能夠正常工作。本文選用Xilinx VC709開發板作為上板調試的硬件平臺,因此我們的時鐘布局需要充分考慮此開發板的結構來設計,具體的時鐘布局如圖5.3所示。
由于VC709開發板連接光模塊的Quad并沒有直接輸入的參考時鐘,而是連接到一對SMA接口,因此我們將156.25Mhz晶振產生的時鐘經過FPGA內部的IBUFDS、OBUFDS驅動后輸出到另一對SMA接口,并通過同軸電纜將兩對SMA接口互聯,從而使連接光模塊的Quad具有輸入參考時鐘。
對于FPGA內部的時鐘布局主要分為以下4部分:
(a)輸入的差分參考時鐘經過一個參考鐘專用緩存(IBUFDS_GTE2)變為單端時鐘refclk,然后將refclk分為兩路,一路接到QPLL(QuadraturephasePhase Locking Loop),另一路時鐘經過一個BUFG后轉變為全局時鐘coreclk,繼續將coreclk分為兩路,一路作為10G MAC核XGMII接口的收發時鐘(xgmii_rx_clk和xgmii_tx_clk),另一路用于驅動10G Ethernet PCS/PMA IP核內部用戶側的邏輯。
(b) 對于QPLL輸出的兩路時鐘qplloutclk和qplloutrefclk,主要是用于IP核內GTH收發器使用的高性能時鐘,其中qplloutclk直接用于驅動GTH內發送端的串行信號,其頻率為5.15625GHz。qplloutrefclk用于驅動GTH內部部分邏輯模塊,頻率為156.25MHz。
(c) txoutclk是由10G Ethernet PCS/PMA IP產生的一個322.26MHz的時鐘,該時鐘經過BUFG后分為兩路,其中txusrclk用于驅動IP核內GTH的32bits總線數據,txusrclk2用于驅動IP核內PCS層部分模塊。
(d)200MHz的晶振產生差分時鐘輸入到FPGA內的PLL(Phase LockingLoop)模塊,PLL模塊以200MHz差分鐘為驅動時鐘生成192MHz用戶鐘(sys_clk)發送給10G MAC核用戶側。
4、仿真驗證
在本節中我們主要是對10G MAC核和10G Ethernet PCS/PMA IP核進行聯合仿真測試,用于檢測兩個模塊結合后能否穩定運行。具體的測試原理如圖5.4所示。
將10G Ethernet PCS/PMA IP核的高速串行差分信號的輸入輸出相連,實現回環測試。我們在10G MAC核的用戶側的設置一個數據源用于發送數據幀,數據經過MAC核后轉變為標準以太網幀,通過XGMII接口發送到10G Ethernet PCS/PMA IP核,10G Ethernet PCS/PMA IP核將其變為高速串行差分信號輸出,高速串行差分信號經過回環被10GEthernet PCS/PMA IP核接收,重復上述過程的逆過程,最終數據在10G MAC核的用戶側接收接口被恢復。本測試具體分為3個步驟:定長最短幀(64Bytes)仿真測試、定長最長幀(1518Bytes)仿真測試、隨機幀長仿真測試。在每一個測試步驟中,我們要盡可能模擬10Gbps的業務流。對于數據的檢測,我們不但要對比波形是否正確,還要將10GMAC核用戶側的收發數據分別記錄到兩個文檔內,并使用軟件對兩個文檔內的數據對比來判斷收發數據是否一致。由于篇幅限制,我們只給出定長最短幀的仿真結果截圖。
圖5.5 定長最短幀仿真圖
隨著以太網接口速率的提升,10G、20G、40G甚至100G的以太網接口應用越來越廣泛,具體來講主要有兩個關鍵的應用領域。
1、數據中心加速。
在一些數據中心采用10G或者更高速率的以太網接口加FPGA的模式,可以在數據進入到服務器之前采用硬件的方式進行快速的處理,降低服務器CPU的負荷,見本公眾號之前文章:深度 | 如何評價微軟在數據中心使用 FPGA ?;
2、SDN/NFV
把上面的應用場景擴展一下,就可以把帶有FPGA的以太網卡用來降低各種各樣場景下的CPU負荷,目前較為流行的概念是SMART NIC即智能網卡,其核心是通過FPGA(現場可編程門陣列)協助CPU處理網絡負載,編程網絡接口功能,具有以下特征:
通過FPGA本地化編程支持數據面和控制面功能定制,協助CPU處理網絡負載;
通常包含多個端口和內部交換機,快速轉發數據并基于網絡數據包、應用程序套接字等智能映射到到相關應用程序;
檢測和管理網絡流量。
Smart NIC能夠提升應用程序和虛擬化性能,實現軟件定義網絡(SDN)和網絡功能虛擬化(NFV)的諸多優勢,將網絡虛擬化、負載均衡和其他低級功能從服務器CPU中移除,確保為應用提供最大的處理能力。與此同時,智能網卡還能夠提供分布式計算資源,使得用戶可以開發自己的軟件或提供接入服務,從而加速特定應用程序。
目前業界提供基于FPGA的Smart NIC的廠商包括Accolade、BittWare、Enyx、Ethernity、Napatech、Netcope、Reflex CES、Silicom和Solarflare,通常集成自Intel或Xilinx的FPGA來實現。此外,Broadcom,Cavium,Intel,Kalray,Mellanox,Netronome,Silicom和SolidRun均可提供基于處理器的Smart NIC,使用帶有集成處理器內核或FPGA的處理器或智能I/O處理器;亞馬遜和谷歌已經開發了Smart NIC ASIC。