隨著FPGA在數(shù)據(jù)中心加速和Smart NIC在SDN和NFV領(lǐng)域的廣泛應(yīng)用,基于以太網(wǎng)接口的FPGA開發(fā)板越來(lái)越受到關(guān)注。而更高速率的以太網(wǎng)接口技術(shù)則是應(yīng)用的關(guān)鍵,本文將詳細(xì)介紹基于FPGA的10G以太網(wǎng)接口的原理及調(diào)試技術(shù)。
10G以太網(wǎng)接口簡(jiǎn)介
1、10G以太網(wǎng)結(jié)構(gòu)
10G以太網(wǎng)接口分為10G PHY和10G MAC兩部分。如下圖所示。
本設(shè)計(jì)中使用了Xilinx公司提供的10GEthernet PCS/PMA IP核充當(dāng)連接10GMAC的PHY芯片,然后將該IP核約束到光模塊上構(gòu)建完整的物理層。需要說(shuō)明的是本設(shè)計(jì)主要是完成以太網(wǎng)二層邏輯設(shè)計(jì),不涉及PHY層的邏輯設(shè)計(jì),如:bit同步、字節(jié)同步、字同步、64b/66b編解碼等。
2、10G以太網(wǎng)接口PHY
10G EthernetPCS/PMA的整體結(jié)構(gòu)如圖5.2所示,其核心是基于RocketIO GTH/GTX來(lái)實(shí)現(xiàn)的。從圖中可知,該模塊分為PCS層和PMA層,對(duì)于發(fā)送數(shù)據(jù),PCS層主要功能是對(duì)數(shù)據(jù)進(jìn)行64B/66B編碼、擾碼、發(fā)送變速等功能。同時(shí)在測(cè)試模式下還提供了一個(gè)測(cè)試激勵(lì)源,用于對(duì)鏈路進(jìn)行檢測(cè)。PMA層的主要功能是提供并串轉(zhuǎn)換、對(duì)串行信號(hào)進(jìn)行驅(qū)動(dòng)并發(fā)送等功能。對(duì)于接收數(shù)據(jù),PMA層的主要功能是將接收到的高速差分信號(hào)進(jìn)行串并轉(zhuǎn)換、bit同步、時(shí)鐘恢復(fù)等功能,PCS層對(duì)于從PMA層接收到的數(shù)據(jù)進(jìn)行塊同步、解擾碼、64B/66B解碼、彈性緩存等。同時(shí)在測(cè)試模式下還提供測(cè)試激勵(lì)檢測(cè)功能,用于檢測(cè)鏈路工作狀態(tài)。
在接口調(diào)試過(guò)程中,可能用到PMA層的近端環(huán)回和遠(yuǎn)端環(huán)回功能。PMA近端回環(huán),用于測(cè)試IP核內(nèi)部自回環(huán);PMA遠(yuǎn)端回環(huán),用于將接收到的遠(yuǎn)端10G PHY發(fā)送的的數(shù)據(jù)在PMA層直接回環(huán)發(fā)送給遠(yuǎn)端10G PHY,而不經(jīng)過(guò)本地的PCS層。
3、10G以太網(wǎng)接口時(shí)鐘布局設(shè)計(jì)
由于10G Ethernet PCS/PMA是Xilinx官方提供的一款I(lǐng)P核,所以我們需要做的工作是結(jié)合開發(fā)板的實(shí)際情況,為該IP核以及其他模塊設(shè)計(jì)合理的時(shí)鐘電路,使其能夠正常工作。本文選用Xilinx VC709開發(fā)板作為上板調(diào)試的硬件平臺(tái),因此我們的時(shí)鐘布局需要充分考慮此開發(fā)板的結(jié)構(gòu)來(lái)設(shè)計(jì),具體的時(shí)鐘布局如圖5.3所示。
由于VC709開發(fā)板連接光模塊的Quad并沒有直接輸入的參考時(shí)鐘,而是連接到一對(duì)SMA接口,因此我們將156.25Mhz晶振產(chǎn)生的時(shí)鐘經(jīng)過(guò)FPGA內(nèi)部的IBUFDS、OBUFDS驅(qū)動(dòng)后輸出到另一對(duì)SMA接口,并通過(guò)同軸電纜將兩對(duì)SMA接口互聯(lián),從而使連接光模塊的Quad具有輸入?yún)⒖紩r(shí)鐘。
對(duì)于FPGA內(nèi)部的時(shí)鐘布局主要分為以下4部分:
(a)輸入的差分參考時(shí)鐘經(jīng)過(guò)一個(gè)參考鐘專用緩存(IBUFDS_GTE2)變?yōu)閱味藭r(shí)鐘refclk,然后將refclk分為兩路,一路接到QPLL(QuadraturephasePhase Locking Loop),另一路時(shí)鐘經(jīng)過(guò)一個(gè)BUFG后轉(zhuǎn)變?yōu)槿謺r(shí)鐘coreclk,繼續(xù)將coreclk分為兩路,一路作為10G MAC核XGMII接口的收發(fā)時(shí)鐘(xgmii_rx_clk和xgmii_tx_clk),另一路用于驅(qū)動(dòng)10G Ethernet PCS/PMA IP核內(nèi)部用戶側(cè)的邏輯。
(b) 對(duì)于QPLL輸出的兩路時(shí)鐘qplloutclk和qplloutrefclk,主要是用于IP核內(nèi)GTH收發(fā)器使用的高性能時(shí)鐘,其中qplloutclk直接用于驅(qū)動(dòng)GTH內(nèi)發(fā)送端的串行信號(hào),其頻率為5.15625GHz。qplloutrefclk用于驅(qū)動(dòng)GTH內(nèi)部部分邏輯模塊,頻率為156.25MHz。
(c) txoutclk是由10G Ethernet PCS/PMA IP產(chǎn)生的一個(gè)322.26MHz的時(shí)鐘,該時(shí)鐘經(jīng)過(guò)BUFG后分為兩路,其中txusrclk用于驅(qū)動(dòng)IP核內(nèi)GTH的32bits總線數(shù)據(jù),txusrclk2用于驅(qū)動(dòng)IP核內(nèi)PCS層部分模塊。
(d)200MHz的晶振產(chǎn)生差分時(shí)鐘輸入到FPGA內(nèi)的PLL(Phase LockingLoop)模塊,PLL模塊以200MHz差分鐘為驅(qū)動(dòng)時(shí)鐘生成192MHz用戶鐘(sys_clk)發(fā)送給10G MAC核用戶側(cè)。
4、仿真驗(yàn)證
在本節(jié)中我們主要是對(duì)10G MAC核和10G Ethernet PCS/PMA IP核進(jìn)行聯(lián)合仿真測(cè)試,用于檢測(cè)兩個(gè)模塊結(jié)合后能否穩(wěn)定運(yùn)行。具體的測(cè)試原理如圖5.4所示。
將10G Ethernet PCS/PMA IP核的高速串行差分信號(hào)的輸入輸出相連,實(shí)現(xiàn)回環(huán)測(cè)試。我們?cè)?0G MAC核的用戶側(cè)的設(shè)置一個(gè)數(shù)據(jù)源用于發(fā)送數(shù)據(jù)幀,數(shù)據(jù)經(jīng)過(guò)MAC核后轉(zhuǎn)變?yōu)闃?biāo)準(zhǔn)以太網(wǎng)幀,通過(guò)XGMII接口發(fā)送到10G Ethernet PCS/PMA IP核,10G Ethernet PCS/PMA IP核將其變?yōu)楦咚俅胁罘中盘?hào)輸出,高速串行差分信號(hào)經(jīng)過(guò)回環(huán)被10GEthernet PCS/PMA IP核接收,重復(fù)上述過(guò)程的逆過(guò)程,最終數(shù)據(jù)在10G MAC核的用戶側(cè)接收接口被恢復(fù)。本測(cè)試具體分為3個(gè)步驟:定長(zhǎng)最短幀(64Bytes)仿真測(cè)試、定長(zhǎng)最長(zhǎng)幀(1518Bytes)仿真測(cè)試、隨機(jī)幀長(zhǎng)仿真測(cè)試。在每一個(gè)測(cè)試步驟中,我們要盡可能模擬10Gbps的業(yè)務(wù)流。對(duì)于數(shù)據(jù)的檢測(cè),我們不但要對(duì)比波形是否正確,還要將10GMAC核用戶側(cè)的收發(fā)數(shù)據(jù)分別記錄到兩個(gè)文檔內(nèi),并使用軟件對(duì)兩個(gè)文檔內(nèi)的數(shù)據(jù)對(duì)比來(lái)判斷收發(fā)數(shù)據(jù)是否一致。由于篇幅限制,我們只給出定長(zhǎng)最短幀的仿真結(jié)果截圖。
圖5.5 定長(zhǎng)最短幀仿真圖
圖5.6 定長(zhǎng)最短幀收發(fā)數(shù)據(jù)對(duì)比圖
10G以太網(wǎng)接口板級(jí)調(diào)試
1、工程設(shè)置
軟件環(huán)境為VIVADO2016.2,芯片設(shè)置為xc7vx690tffg1761-2 (active),板子采用Xilinx的VC709開發(fā)板。
VC709開發(fā)板實(shí)物圖
Vivado選擇FPGA型號(hào)界面
首先選擇IP核,在界面中選擇10G Ethernet Subsystem,PCS/PMA選擇 BASE-R,位寬選擇為64bit,其他標(biāo)簽中的選項(xiàng)默認(rèn)即可。
待IP核生成結(jié)束之后,右鍵IP核,選擇Open Ip Example Design,VIVADO便會(huì)自動(dòng)生成一個(gè)Example Design,如下圖所示:
此時(shí)example design設(shè)置完成,此時(shí)的工程中自帶一個(gè)數(shù)據(jù)源,即axi_10g_ethernet_0_gen_check_wrapper模塊,但此數(shù)據(jù)源通過(guò)函數(shù)產(chǎn)生數(shù)據(jù),不能綜合,所以為配合Testcenter打流測(cè)試,將此數(shù)據(jù)源刪掉。
為方便進(jìn)行管腳分配,在生成的example design上新生成了一個(gè)頂層文件,并在此頂層模塊中將用戶側(cè)輸入輸出的數(shù)據(jù)接在一起,實(shí)現(xiàn)MAC核的自回環(huán)。
此外在xdc文件中,管腳分配如下圖所示:
2、上板驗(yàn)證
板級(jí)驗(yàn)證環(huán)境連接圖如下,通過(guò)10G TestCenter用光口給VC709板子打流,在VC709板子的690T FPGA內(nèi)部編寫邏輯進(jìn)行用戶側(cè)的環(huán)回,通過(guò)觀察連接TestCenter的配置PC機(jī)上界面,就可以判斷回環(huán)的測(cè)試是否成功。
通過(guò)10G Testcenter打流測(cè)試,首先配置測(cè)試環(huán)境,幀長(zhǎng)為隨機(jī)幀長(zhǎng)(64~1518),速率設(shè)置為10G(實(shí)際設(shè)置為9.9G,當(dāng)滿速10G時(shí)Testcenter會(huì)出現(xiàn)一些丟幀錯(cuò)誤,9.9G不會(huì)出現(xiàn)問(wèn)題,但我們采用自己寫的10G以太網(wǎng)MAC核,而非Vivado工具生成的MAC核時(shí),可以支持滿負(fù)荷線速處理,本文只給出采用Vivado生成的MAC核的演示結(jié)果)。
測(cè)試結(jié)果如下圖所示,可以發(fā)現(xiàn)數(shù)據(jù)可以正常收發(fā),且沒有丟幀。
并在VIVADO中抓取了用戶側(cè)信號(hào),結(jié)果如下圖所示,數(shù)據(jù)收發(fā)正常。
本例程僅說(shuō)明回環(huán)測(cè)試,在實(shí)際應(yīng)用中,數(shù)據(jù)進(jìn)來(lái)后,就可以用FPGA進(jìn)行各種需要的處理。如矩陣運(yùn)算、圖像處理、機(jī)器學(xué)習(xí)、壓縮、非對(duì)稱加密、Bing 搜索等??梢源蠓鹊慕档?a target="_blank">CPU軟件的負(fù)荷,提高整體的處理能力。
參考時(shí)鐘管腳分配注意事項(xiàng)
根據(jù)第一部分圖5.3有關(guān)VC709板子時(shí)鐘布局的介紹,給10G以太網(wǎng)接口提供參考時(shí)鐘的SMA接口如下圖VC709開發(fā)板上紅色框內(nèi)標(biāo)記7和8兩個(gè)接口,在實(shí)際上板調(diào)試過(guò)程中,需要手動(dòng)用同軸電纜將兩個(gè)接口連接起來(lái)。
用同軸線連接后的實(shí)物圖如下所示:
查看用戶手冊(cè),可以發(fā)現(xiàn)7和8接口描述如下。
查看VC709原理圖,可以發(fā)現(xiàn)對(duì)應(yīng)690T FPGA管腳的參考時(shí)鐘如下圖:
另外,在Xilinx系列開發(fā)板中,VC707板子也具有10G的以太網(wǎng)接口,使用方法與VC709相同。
在VC707板子上,需要用同軸線連接的管腳是上圖中的9和10。
VC709板子上VC707板子上與10G接口相關(guān)的FPGA管腳對(duì)比圖如下,從圖中可以看出,VC709開發(fā)板可以接10G的接口數(shù)明顯多于VC707開發(fā)板。
上板調(diào)試過(guò)程中遇到的問(wèn)題
1、時(shí)序違例問(wèn)題。
問(wèn)題描述:在使用軟件vivado 2016.2完成對(duì)10G以太網(wǎng)接口綜合實(shí)現(xiàn)后,發(fā)現(xiàn)軟件報(bào)告該工程有幾處時(shí)序路徑的建立時(shí)間無(wú)法滿足,可能會(huì)出現(xiàn)時(shí)序錯(cuò)誤。
查找原因:通過(guò)查看時(shí)序報(bào)告,并結(jié)合工程的實(shí)際設(shè)計(jì)了解到,出現(xiàn)問(wèn)題的位置是10G MAC核的異步FIFO,由于此FIFO的兩個(gè)時(shí)鐘為異步時(shí)鐘,導(dǎo)致軟件在對(duì)其進(jìn)行布局布線時(shí)無(wú)法同時(shí)滿足兩個(gè)時(shí)鐘域的要求,因此出現(xiàn)建立時(shí)間報(bào)紅的問(wèn)題。
解決方法:由于此FIFO內(nèi)的核心是一個(gè)雙口RAM,此RAM本身就可以實(shí)現(xiàn)數(shù)據(jù)的跨時(shí)鐘域傳輸,所以,此問(wèn)題并不會(huì)出現(xiàn)時(shí)序錯(cuò)誤。通過(guò)時(shí)序約束對(duì)幾處時(shí)序違例的位置的時(shí)序路徑進(jìn)行忽略,解決該問(wèn)題。
2、10G以太網(wǎng)接口無(wú)法接收數(shù)據(jù)的問(wèn)題
問(wèn)題描述:在對(duì)10G以太網(wǎng)接口進(jìn)行上板測(cè)試時(shí),發(fā)現(xiàn)此接口無(wú)法從交換機(jī)接收數(shù)據(jù),10G EthernetPCS/PMA IP核的狀態(tài)信號(hào)顯示鏈路失同步、鏈路狀態(tài)為低。
查找原因:由于是接口出現(xiàn)問(wèn)題,因此使用Xilinx官方提供的專用測(cè)試接口的ibertIP核對(duì)其進(jìn)行測(cè)試,發(fā)現(xiàn)ibert的近端PCS回環(huán)和PMA回環(huán)都可以通過(guò)測(cè)試,但是在使用外部光纖進(jìn)行回環(huán)時(shí)無(wú)法通過(guò)測(cè)試,因此分析可能是光模塊的問(wèn)題導(dǎo)致10G以太網(wǎng)接口無(wú)法接收數(shù)據(jù)。通過(guò)查閱開發(fā)板VC709的官方手冊(cè)后發(fā)現(xiàn),此開發(fā)板的光模塊的默認(rèn)狀態(tài)是關(guān)閉的,要通過(guò)代碼對(duì)其進(jìn)行配置才能使光模塊正常工作。
解決方法:查閱手冊(cè),根據(jù)手冊(cè)對(duì)光模塊進(jìn)行配置。再次進(jìn)行測(cè)試,10G以太網(wǎng)接口可以接收數(shù)據(jù),問(wèn)題解決。
3、Vivado 2016.2軟件BUG問(wèn)題
發(fā)現(xiàn)了vivado2016.2版本的一個(gè)BUG!
參考文獻(xiàn)
[1] Xilinx.ug887-2013.VC709evaluation board for the Virtex-7 FPGA user guide[S].Xilinx, 2013.
[2] Xilinx.ug885-2016.VC707evaluation board for the Virtex-7 FPGA user guide[S].Xilinx, 2016.
[3] 付新宇. 10G HIMAC協(xié)處理器關(guān)鍵技術(shù)研究.[D].西安電子科技大學(xué),2018.
應(yīng)用場(chǎng)景
VC709和VC707開發(fā)板上還有千兆的接口模式,如SGMII接口等,具體調(diào)試見本公眾號(hào)之前文章:SGMII接口調(diào)試。同時(shí),隨著以太網(wǎng)接口速率的提升,10G、20G、40G甚至100G的以太網(wǎng)接口應(yīng)用越來(lái)越廣泛,具體來(lái)講主要有兩個(gè)關(guān)鍵的應(yīng)用領(lǐng)域。
1、數(shù)據(jù)中心加速。
在一些數(shù)據(jù)中心采用10G或者更高速率的以太網(wǎng)接口加FPGA的模式,可以在數(shù)據(jù)進(jìn)入到服務(wù)器之前采用硬件的方式進(jìn)行快速的處理,降低服務(wù)器CPU的負(fù)荷,見本公眾號(hào)之前文章:深度 | 如何評(píng)價(jià)微軟在數(shù)據(jù)中心使用 FPGA ?;
2、SDN/NFV
把上面的應(yīng)用場(chǎng)景擴(kuò)展一下,就可以把帶有FPGA的以太網(wǎng)卡用來(lái)降低各種各樣場(chǎng)景下的CPU負(fù)荷,目前較為流行的概念是SMART NIC即智能網(wǎng)卡,其核心是通過(guò)FPGA(現(xiàn)場(chǎng)可編程門陣列)協(xié)助CPU處理網(wǎng)絡(luò)負(fù)載,編程網(wǎng)絡(luò)接口功能,具有以下特征:
通過(guò)FPGA本地化編程支持?jǐn)?shù)據(jù)面和控制面功能定制,協(xié)助CPU處理網(wǎng)絡(luò)負(fù)載;
通常包含多個(gè)端口和內(nèi)部交換機(jī),快速轉(zhuǎn)發(fā)數(shù)據(jù)并基于網(wǎng)絡(luò)數(shù)據(jù)包、應(yīng)用程序套接字等智能映射到到相關(guān)應(yīng)用程序;
檢測(cè)和管理網(wǎng)絡(luò)流量。
Smart NIC能夠提升應(yīng)用程序和虛擬化性能,實(shí)現(xiàn)軟件定義網(wǎng)絡(luò)(SDN)和網(wǎng)絡(luò)功能虛擬化(NFV)的諸多優(yōu)勢(shì),將網(wǎng)絡(luò)虛擬化、負(fù)載均衡和其他低級(jí)功能從服務(wù)器CPU中移除,確保為應(yīng)用提供最大的處理能力。與此同時(shí),智能網(wǎng)卡還能夠提供分布式計(jì)算資源,使得用戶可以開發(fā)自己的軟件或提供接入服務(wù),從而加速特定應(yīng)用程序。
目前業(yè)界提供基于FPGA的Smart NIC的廠商包括Accolade、BittWare、Enyx、Ethernity、Napatech、Netcope、Reflex CES、Silicom和Solarflare,通常集成自Intel或Xilinx的FPGA來(lái)實(shí)現(xiàn)。此外,Broadcom,Cavium,Intel,Kalray,Mellanox,Netronome,Silicom和SolidRun均可提供基于處理器的Smart NIC,使用帶有集成處理器內(nèi)核或FPGA的處理器或智能I/O處理器;亞馬遜和谷歌已經(jīng)開發(fā)了Smart NIC ASIC。
評(píng)論
查看更多