[吳震霖]
隨著以太網(wǎng)技術(shù)的快速發(fā)展,利用以太網(wǎng)承載各種業(yè)務(wù)的需求也日益增強傳統(tǒng)的千兆以太網(wǎng)已不能滿足網(wǎng)絡(luò)對傳輸帶寬的要求[1,2],因此,需要運用更高速率的以太網(wǎng)技術(shù)解決傳統(tǒng)以太網(wǎng)帶寬不足的問題。萬兆以太網(wǎng)遵循的標準是IEEE 802.3ae,傳輸速率可達10 Gbit/s,性能相比千兆以太網(wǎng)有了很大的提高[3]。萬兆以太網(wǎng)控制器是協(xié)議層與傳輸媒介之間的橋梁,是實現(xiàn)萬兆以太網(wǎng)技術(shù)的基礎(chǔ)。
本文介紹了萬兆以太網(wǎng)控制器主要完成的功能以及萬兆以太網(wǎng)數(shù)據(jù)幀格式,并提出了一種基于FPGA 的萬兆以太網(wǎng)控制器,該控制器包括萬兆以太網(wǎng)MAC 模塊和萬兆以太網(wǎng)PCS/PMA 模塊,進一步說明了該控制器的用戶接口時序要求。最后,將設(shè)計的萬兆以太網(wǎng)控制器在硬件平臺上進行測試驗證。
萬兆以太網(wǎng)控制器主要完成了OSI 參考模型中的數(shù)據(jù)鏈路層和物理層的功能[4],如圖1 所示。
圖1 萬兆以太網(wǎng)控制器實現(xiàn)的功能示意圖
數(shù)據(jù)鏈路層包括MAC 子層和MAC 控制層子層,MAC 子層負責(zé)萬兆以太網(wǎng)數(shù)據(jù)成幀和數(shù)據(jù)錯誤判決,MAC 控制層子層負責(zé)實時提供流量控制機制。
物理編碼子層(PCS)負責(zé)對來自MAC 子層的數(shù)據(jù)進行64B/66B 編碼和解碼。物理介質(zhì)附屬子層(PMA)在發(fā)送方向負責(zé)將并行數(shù)據(jù)串行化,在接收方向負責(zé)串行數(shù)據(jù)流的時鐘恢復(fù),同時進行數(shù)據(jù)的串并轉(zhuǎn)換。物理介質(zhì)附屬子層(PMD)負責(zé)信號的調(diào)制、放大、整形。介質(zhì)相關(guān)接口(MDI)定義了不同的物理介質(zhì)和連接器類型。
標準的萬兆以太網(wǎng)數(shù)據(jù)幀格式如圖2 所示,數(shù)據(jù)幀的傳輸順序為從左到右,萬兆以太網(wǎng)數(shù)據(jù)幀主要包括以下內(nèi)容。
圖2 萬兆以太網(wǎng)數(shù)據(jù)幀格式
(1)前導(dǎo)碼:用于數(shù)據(jù)幀同步,包括7 個字節(jié)的數(shù)據(jù),內(nèi)容固定為0x55。
(2)幀起始定位符:標志數(shù)據(jù)幀的開始,占用1 個字節(jié)數(shù)據(jù),內(nèi)容固定為0Xd5。
(3)目的地址:定義數(shù)據(jù)幀的接收方。
(4)源地址:定義數(shù)據(jù)幀的發(fā)送方。
(5)長度/類型:當該字段用于表示長度時,其值定義了數(shù)據(jù)域中的字節(jié)數(shù)量;當該字段用于表示類型時,其值定義了上層協(xié)議的類型。
(6)數(shù)據(jù):由0~1 500 個字節(jié)的用戶數(shù)據(jù)組成。
(7)填充區(qū)域:由0~46 個字節(jié)的填充數(shù)據(jù)組成,保證傳輸?shù)臄?shù)據(jù)幀長度不小于64 字節(jié)。
(8)幀校驗:其值是對目的地址、源地址、長度/類型、數(shù)據(jù)、填充區(qū)域字段進行CRC 校驗所得。
萬兆以太網(wǎng)控制器的整體結(jié)構(gòu)如圖3 所示,包括萬兆以太網(wǎng)MAC 模塊和萬兆以太網(wǎng)PCS/PMA 模塊。萬兆以太網(wǎng)MAC 模塊主要實現(xiàn)了數(shù)據(jù)鏈路層的功能,萬兆以太網(wǎng)PCS/PMA 模塊主要實現(xiàn)了物理層的PCS 和PMA 子層功能,兩個模塊之間通過XGMII 接口互連。萬兆以太網(wǎng)MAC 模塊通過AXI4-Stream 接口與上層協(xié)議交互,萬兆以太網(wǎng)PCS/PMA 模塊通過高速串口GTH 與光模塊交互。
圖3 萬兆以太網(wǎng)控制器的整體結(jié)構(gòu)
萬兆以太網(wǎng)MAC 模塊組成如圖4 所示,包括發(fā)送引擎、接收引擎、流量控制模塊、協(xié)調(diào)模塊、發(fā)送FIFO 和接收FIFO。發(fā)送引擎實現(xiàn)萬兆以太網(wǎng)數(shù)據(jù)幀的組幀以及幀間隔的調(diào)整;接收引擎實現(xiàn)萬兆以太網(wǎng)數(shù)據(jù)幀的解幀以及數(shù)據(jù)的錯誤校驗;流量控制模塊從接收到的PAUSE 幀中提取暫停發(fā)送時間信息,并根據(jù)該信息控制以太網(wǎng)數(shù)據(jù)幀的發(fā)送時間間隔;協(xié)調(diào)模塊用于與萬兆以太網(wǎng)PCS/PMA 模塊的連接適配;發(fā)送FIFO 用于緩存用戶邏輯發(fā)送給MAC 模塊的數(shù)據(jù);接收FIFO 用于緩存MAC 模塊發(fā)送給用戶邏輯的數(shù)據(jù)。
圖4 萬兆以太網(wǎng)MAC 模塊組成
萬兆以太網(wǎng)PCS/PMA 模塊組成如圖5 所示,其中PCS 子層包括64b/66b 編碼器、加擾器、相位調(diào)整緩存、64b/66b 解碼器、解擾器、同步模塊、彈性緩沖器、測試序列生成器和測試序列檢查器,PMA 子層包括高速串口。
圖5 萬兆以太網(wǎng)PCS/PMA 模塊組成
用戶接口與萬兆以太網(wǎng)MAC 控制器之間通過AXI4-Stream 接口進行數(shù)據(jù)交互,AXI4-Stream 是面向數(shù)據(jù)流的傳輸,基于valid/ready 的握手機制數(shù)據(jù)傳輸協(xié)議,數(shù)據(jù)的發(fā)送方成為主機,數(shù)據(jù)的接收方成為從機,AXI4-Stream接口的時序如圖6 所示。主機使用valid 信號表明數(shù)據(jù)的有效性,從機使用ready 信號表明自己能夠接收數(shù)據(jù),keep 信號表明數(shù)據(jù)字節(jié)組的有效性,last 信號表明數(shù)據(jù)幀傳輸結(jié)束。
圖6 AXI4-Stream 接口的時序
萬兆以太網(wǎng)控制器仿真測試電路框圖7 如圖所示,F(xiàn)PGA 的高速串口外接萬兆光模塊,利用光纖對萬兆光模塊進行環(huán)回,測試數(shù)據(jù)生成模塊根據(jù)標準的萬兆以太網(wǎng)幀格式生成AXI4-Stream 數(shù)據(jù)流。啟用測試數(shù)據(jù)生成模塊后,它將以配置的最小幀大小開始,并在每幀之后發(fā)送,增加幀大小,直到達到最大值,然后再以最小幀大小再次開始幀發(fā)送。測試數(shù)據(jù)檢測模塊對正被接收的數(shù)據(jù)提供了一個簡單的完整性檢查。它使用與測試數(shù)據(jù)生成模塊相同的控制向量,因此期望接收到的數(shù)據(jù)幀具有相同的幀內(nèi)容和幀大小增量。監(jiān)視器首先通過捕獲到第一個完整幀的類型/長度字段中的值,判斷該幀所在的位置,然后就可以預(yù)測下一幀的長度將逐漸增大。如果檢測到錯誤數(shù)據(jù),則在不匹配的字節(jié)的位置使能錯誤標志,錯誤標志將被采樣輸出。
圖7 萬兆以太網(wǎng)控制器測試電路
測試數(shù)據(jù)生成模塊生成的數(shù)據(jù)流中其中一幀數(shù)據(jù)如圖8 所示,數(shù)據(jù)從控制器的用戶接口輸入,經(jīng)過控制器處理之后從高速串口發(fā)送端發(fā)出。測試程序希望發(fā)送一幀數(shù)據(jù)時,使能tx_axis_tvalid 信號,同時在同一時鐘周期上發(fā)送數(shù)據(jù)tx_axis_tdata 和控制信號tx_axis_tkeep??刂菩盘杢x_axis_tkeep 表明發(fā)送數(shù)據(jù)中的有效字節(jié)。當數(shù)據(jù)被控制器接收之后,使能tx_axis_tready 信號,測試數(shù)據(jù)生成模塊準備下一時鐘周期的數(shù)據(jù)。如果tx_axis_tready 沒有使能,測試數(shù)據(jù)生成模塊必須保持當前的有效數(shù)據(jù)和控制信號。tx_axis_tlast 信號有效表明一幀數(shù)據(jù)的結(jié)束。
圖8 測試數(shù)據(jù)生成模塊生成的數(shù)據(jù)流
仿真程序設(shè)置高速串口環(huán)回,將高速串行數(shù)據(jù)環(huán)回到接收端,控制器恢復(fù)的數(shù)據(jù)流從接口輸出,與發(fā)送端相對應(yīng)的一幀數(shù)據(jù)如圖9 所示,測試數(shù)據(jù)檢測模塊接收一幀數(shù)據(jù)時,在rx_axis_tvalid 信號有效時采樣數(shù)據(jù)rx_axis_tdata和控制信號rx_axis_tkeep??刂菩盘杛x_axis_tkeep 表明接收數(shù)據(jù)中的有效字節(jié)。當數(shù)據(jù)被測試數(shù)據(jù)檢測模塊接收之后,使能rx_axis_tready 信號,控制器準備下一時鐘周期的數(shù)據(jù)。如果rx_axis_tready 沒有使能,控制器必須保持當前的有效數(shù)據(jù)和控制信號。rx_axis_tlast 信號有效表明一幀數(shù)據(jù)的結(jié)束。
圖9 測試數(shù)據(jù)檢測模塊接收到的數(shù)據(jù)流
經(jīng)分析,測試程序發(fā)送給控制器的數(shù)據(jù)幀與控制恢復(fù)出來的數(shù)據(jù)幀內(nèi)容一致,同時測試5 小時無錯誤標志信號輸出,從而驗證了控制器的功能。
依據(jù)萬兆以太網(wǎng)的標準,分析了萬兆以太網(wǎng)控制器所需要實現(xiàn)的功能以及在OSI 參考模型中所處的位置,提出了一種基于FPGA 的萬兆以太網(wǎng)控制器,該控制器可利用FPGA 內(nèi)部邏輯資源實現(xiàn),為使用萬兆以太網(wǎng)技術(shù)進行組網(wǎng)提供基礎(chǔ)。通過硬件測試,驗證了該萬兆以太網(wǎng)控制器能夠為上層協(xié)議提供10 Gbit/s 的傳輸帶寬,且傳輸性能滿足要求。