摘 要
64B/66B編碼是萬兆以太網(wǎng)物理編碼子層的重要組成部分,是IEEE推薦的10G通信的編碼方式。文章主要研究64B/66B編碼的編碼準則以及一種基于查找表法的改進的編解碼方法。該方法使用FPGA實現(xiàn),實驗結(jié)果與數(shù)據(jù)分析顯示,該方案滿足設計意圖與協(xié)議的規(guī)定。
【關鍵詞】64B/66B 萬兆以太網(wǎng) 查找表 編解碼 FPGA
與以往的傳統(tǒng)以太網(wǎng)的介質(zhì)獨立接口類似,萬兆以太網(wǎng)(XGMII)接口為l0GbE的MAC層和物理層之間提供了一種簡單、低成本并易于實現(xiàn)的互聯(lián)接口。XGMII接口由發(fā)送通道和接收通道組成,每個方向的數(shù)據(jù)傳輸是相互獨立的,接口信號由數(shù)據(jù)、控制和時鐘信號構(gòu)成。XGMII接口具有支持l0Gbps的雙向傳輸速率,成本低、容易實現(xiàn)的特點。64B/66B編碼為XGMMII接口傳輸數(shù)據(jù)編碼,編碼準則來源于IEEE803.2ae,它并不是真正的編碼,而是一種基于擾碼機制的編解碼方式,是IEEE推薦的10G通信標準編碼方式。該編碼具有系統(tǒng)開銷較小,碼字長,安全性高,傳輸快等優(yōu)點。本文根據(jù)IEEE803.2ae中的編碼準則,使用查找表法,運用Verilog語言完成了數(shù)字電路設計,使用Qurtus II軟件完成模擬和數(shù)據(jù)分析。
如今使用硬件描述語言(Verilog 或 VHDL)所完成的電路設計,經(jīng)過簡單的綜合與布局,快速的燒錄至合適的FPGA 上進行測試,是現(xiàn)代 IC 設計驗證的主流方法。開發(fā)人員可以根據(jù)自身的設計要求對FPGA編程,將編碼燒錄到 FPGA 芯片中即可實現(xiàn)數(shù)字系統(tǒng)的設計。得到所需要的數(shù)字電路。一個出廠后的成品 FPGA 的邏輯塊和連接可以按照設計者而改變,所以 FPGA可以完成所需要的邏輯功能。
1 編解碼的基本原理
1.1 概述
64b/66b編解碼與萬兆以太網(wǎng)的媒體獨立接口XGMII(10 Gigabit Media Independent Interface)連接。其主要功能是:根據(jù)給出的不同的8個XGMII控制信號(XGMII_TXC[7:0]),把輸入的64B的XGMII數(shù)據(jù)塊或控制塊XGMII_TXD[63:0]編碼成66B碼進行通信。其中,控制信號的每一位與64B碼每8位對應,比如:XGMII_TXC[0]=0,則XGMII_TXD[7:0]為數(shù)據(jù)代碼;XGMII_TXC[0]=1,則XGMII_TXD[7:0]為控制代碼。64B/66B解碼則是將66B碼按照相反的規(guī)律解碼成原先的64B XGMII數(shù)據(jù)塊或控制塊,并將原先的8個控制信號傳送到XGMII接口。
1.2 IEEE802.3ae準則解讀
萬兆以太網(wǎng)協(xié)議 IEEE 802.3ae 中規(guī)定了 64B/66B的編解碼規(guī)則。具體規(guī)則如下:64B/66B碼組的映射關系如表1所示。從中我們可以知道,64B碼可以分為包含純粹數(shù)據(jù)(8個8位的數(shù)據(jù))的數(shù)據(jù)塊(Data Block Format)和數(shù)據(jù)與控制代碼按照一定順序排列的控制塊(Control Block Format)。根據(jù)不同的64B碼格式,也有不同的編碼規(guī)則,在生成66B碼時就會有不同的同步頭(sync)和塊有效荷(Block Payload)。比如:輸入的八位控制信號全部為0時,則表示輸入的64B碼為數(shù)據(jù)塊格式,則同步頭為01,塊有效荷即輸出相應數(shù)據(jù)。反之,當輸入的八位控制信號不全為0,則表示輸入的64B碼為控制塊格式,則同步頭為10,塊有效荷按如表1中規(guī)定格式生成。
根據(jù)IEEE803.2ae的編碼準則,控制塊代碼也具有相應的類型,這些控制塊代碼的類型如表2所示。表2將控制代碼分為對應的幾種形式:
(1)Idle表示空字符。(64B碼中為16進制ox07,生成66B碼時變?yōu)?6進制ox00)
(2)start表示開始字符。
(3)Terminate表示結(jié)束字符。
(4)Error 表示錯誤,一般表示收到錯誤的數(shù)據(jù)。
(5)Sequence ordered_set系列號有序集。
(6)Reserved(0~5)保留字符0到5。
(7)Signal Order_set表示信號有序集。
所有的有效字符必須符合表2的要求,否則為無效或者非法字符。
1.3 編解碼
64B/66B 編碼過程:將輸入的64B碼分成8個1字節(jié)的碼組,根據(jù)輸入XGMII_TXC的每比特值判斷這個碼組是數(shù)據(jù)代碼還是控制代碼。如果XGMII_TXC 每個比特值都為0,則64B碼為純數(shù)據(jù)代碼,直接在64B碼組前加上同步頭01就組成66B碼組輸出。如果XGMII_TXC 中有一個比特為1,則表示64B碼組為控制塊格式,先根據(jù)表2判斷控制塊中的每個控制代碼是否有效,如果符合要求,則繼續(xù)根據(jù)表1中的控制塊格式來判斷是否符合其中一種格式,如果格式符合則根據(jù)相應的控制塊格式生成66B碼組。在編碼過程中,只要不符合表1或表2中的任何形式就認為是無效不符合要求,則不需進行編碼。
解碼則相對容易,與編碼過程相反,首先根據(jù)66B碼的同步頭判斷當前的數(shù)據(jù)是數(shù)據(jù)塊還是控制塊,如果是數(shù)據(jù)塊則將除塊頭的64B數(shù)據(jù)賦予XGMII_TXD[63:0],再將XGMII_TXC[7:0]全部賦值0;如果是控制塊,則根據(jù)塊類型區(qū)的值確定控制塊的格式,可以得到64B碼每8位數(shù)據(jù)是數(shù)據(jù)代碼還是控制代碼,一方面得出XGMII_TXC[7:0],另一方面,運用查找表法,根據(jù)表1和表2相應的轉(zhuǎn)換得出XGMII_TXD[63:0]。(表1中的空格表示一比特0,在64B控制塊格式中C0—C7是8比特,在66B塊效荷中為7 比特)。
2 編解碼器設計
2.1 改進的編碼器設計
根據(jù)對編碼原理的研究,目前最常用的64b/66b編碼方法是查找表法,這種方法雖然實現(xiàn)起來非常方便,但是使用過程中占用資源相對巨大,對于工程來說,單純?yōu)榱司幗獯a占用較多的FPGA資源是不合理的,這在很大程度上限制了該方法的使用。鑒于此,本文采用了一種基于查找表法的新的編碼方法。其基本思路是:先判斷輸入的XGMII_TXC是否符合控制塊格式的要求并判斷出同步頭,如果不符合則直接輸出Error并不需要對XGMII_TXD進行處理。再根據(jù)控制塊將輸入的XGMII_TXD分為8個通道,分別對每個8位數(shù)據(jù)進行處理,最后將數(shù)據(jù)輸入多路復用器進行整合,輸出符合要求的66Bit數(shù)據(jù)。其基本原理電路圖如圖1所示。編碼器的組成為:輸入數(shù)據(jù)寄存器,控制塊格式判斷模塊,數(shù)據(jù)代碼生成模塊,塊類型寄存器和多路復用器模塊。
2.2 解碼器設計
先分析66B碼的同步頭和塊類型數(shù)據(jù),得出接受的是數(shù)據(jù)塊還是控制塊,并可以確定是何種類型的控制塊,生成判決信號輸送到下一個模塊(塊類型生成模塊),然后塊類型生成模塊根據(jù)表1和表2得出相應的64B控制塊格式并根據(jù)判決信號得出XGMII_RXC的值。碼子反轉(zhuǎn)換模塊根據(jù)XGMII_RXC判斷XGMII_RXD每8個比特是控制代碼還是數(shù)據(jù)代碼并根據(jù)表2進行相應轉(zhuǎn)換。最后利用數(shù)據(jù)生成器將這些數(shù)據(jù)或控制信號組成總線的形式輸出。
3 仿真結(jié)果和數(shù)據(jù)分析
3.1 實驗用FPGA開發(fā)板介紹
本文所使用的開發(fā)板如圖3所示,該開發(fā)板的FPGA芯片是選用Cyclone IV系列的FPGA器件EP4CE15F17C8N,屬于邏輯單元相對較少的FPGA芯片。CycloneIV系列器件集成了一個可選擇的低成本收發(fā)器,在不影響性能的情況下,節(jié)省了功耗及成本。針對無線、有線、廣播、工業(yè),用戶以及通信等行業(yè)中的低成本的小型應用,CycloneIV器件應該是最理想的選擇。
3.2 實驗結(jié)果
根據(jù)本文提出的新的64B/66B編解碼方法,在Altera公司的Quartus II 軟件平臺上進行相關程序代碼的編寫,并選用Cyclone IV系列的FPGA器件EP4CE15F17C8N實現(xiàn)了編解碼的功能驗證,電路綜合和波形仿真。編碼器的仿真結(jié)果如圖4所示, 從圖中的仿真波形可以看出,DATA_OUT輸出前先延時4個時鐘周期,當輸入xgmii_txc=0xff,xgmiix_txd=0x0707070707070707時,表示輸入的控制塊格式,參考表1,同步頭為10,則可以得出data_out= 00000000000000079 。從圖4可以得出結(jié)果是正確的。相反,解碼器仿真結(jié)果如圖5所示,解碼器輸出延時2個時鐘周期,當輸入數(shù)據(jù)data_in=00000000000000079時,解碼得出結(jié)果xgmii_txc=0xff;xgmii_txd=0x0707070707070707,也與解碼碼準則相符合。
以上的仿真結(jié)果表明本文設計的編解碼器可以正確的對輸入的數(shù)據(jù)進行編解碼,符合本文的設計意圖。
本文所設計的編碼器的FPGA資源占有率如圖6所示,解碼器的FPGA資源占有率如圖7所示,從圖中看出,資源的總體占有率很小,使用較少的邏輯單元(其中編碼器:625/15408約占4%;解碼器:426/15408 約占3%)便能完成工程設計,符合工程設計要求。
4 結(jié)論
64B/66B編碼作為一種應用于以太網(wǎng)技術的編碼方式,具有很多優(yōu)點,其也為之后用于PCI-E,USB的128B/132B編碼提供參考。本文的數(shù)字電路設計方法是基于查找表法的改進方法,在運用FPGA實現(xiàn)時,具有占用資源少,編碼速度塊等優(yōu)點。此外,此方法使用的Verilog代碼具有很好的可移植性,可以作為IP核植入到64B/66B編碼的光纖電路中,特別適合FPGA設計,有很實用的工程價值。
參考文獻
[1]溫宇辰.嵌入式光纖萬兆以太網(wǎng)系統(tǒng)設計[D].大連:大連理工大學通信與信息系統(tǒng),2014.
[2]齊劍,胡春暉.高端路由器8口萬兆子卡的硬件設計[J].電子設計工程,2015(07):178-181.
[3]朱云鵬.10G EPON協(xié)議分析儀中物理層的設計與實現(xiàn)[D].西安:電子科技大學光學工程,2015.
[4]周晴倫,王勇.萬兆以太網(wǎng)中64B/66B編解碼的硬件實現(xiàn)方法[J]:光通信技術,2006(02):21-23.
[5]王新.高速率傳送網(wǎng)平臺的物理層編碼研究與實現(xiàn)[D].西安:電子科技大學通信與信息系統(tǒng),2015.
[6]IEEE Std 802.3ae-2002[S/OL].New Jersey:IEEE,2002[2002-8-30].http://standards.ieee.org.
[7] The Automotive-Grade Device Handbook [EB/OL].2016-5-3.San Jose:http://www.altera.com.
[8]程博鋒.基于FPGA及以太網(wǎng)技術的100G接口板設計[D].南京:南京理工大學電子與通信工程,2014.
作者簡介
王向陽(1991-),男,安徽省廬江市人。合肥工業(yè)大學碩士生。主攻方向為數(shù)字集成電路設計。
作者單位
合肥工業(yè)大學電子科學與應用物理學院 安徽省合肥市 230009