?????? 摘要:在深入研究了8B/10B?編碼規則及其內在相關性的基礎上,提出了一種新的8B/10B編、解碼方法,該方法綜合了查表法和邏輯運算法的優點,具有運算量小、編解碼同步好、速度快、可靠性高等優點。用Verilog HDL 語言實現編解碼算法的描述,并通過高性能的FPGA器件進行仿真和綜合,實現了具體的硬件電路,并驗證了設計方法的有效性和可行性。?
關鍵詞:8B/10B 碼,?編碼, 解碼,?光纖通信,?集成電路?
引言
隨著Internet 業務的迅速增長,光纖通信的數據傳輸速率和容量不斷提高。目前,甚短距離傳輸系統(VSR) 、1000BASE-X標推的千兆以太網以及10GBASE-X標推的萬兆以太網成為世界上光纖通信系統研究的焦點。然而隨著傳輸距離的增加以及數據速率的提升,信號惡化將十分嚴重,此時滿足要求的誤碼率成為通信系統設計的一個挑戰。
為了增加信息傳輸的可靠性,以上系統都采用了一種傳輸帶寬小、轉換密度高以及碼字游程長度受限的8B/10B編碼,它將原8位(一個字節) 數據編碼成為10位字符,增加了數據中的高低電平變換(即“1”/“0”變換) ,有利于實現轉換前后的時鐘同步,此外還能幫助實現直流平衡,以使接收器的輸入沒有直流(DC)漂移。由于采用了這種編碼,鏈路可以是交流(AC)耦合的,這樣就給任一端的設備廠商提供了更大的靈活性。而且這種編碼有利于檢測出傳輸過程中單個和多個的比特誤碼,同時編碼設計中的一些特殊碼組還有助于比特流的碼組定位和信息識別。?
高速通信系統中信息處理都是通過大規模集成電路實現的,因此在集成電路設計過程中如何高速、有效地實現8B/10B編解碼,直接決定著通信系統數據傳輸速率的進一步提高。目前最常用的編碼方法是查表法,它用存儲器存儲所有可能出現的碼組,再把輸入碼組作為存儲地址,找出對應的編解碼。該方法簡單直接,但是編解碼電路工作速度受到存儲器讀取時間的限制,并且不可避免地增加芯片的面積和功耗。另一種方法則是通過邏輯運算直接完成編解碼功能,該方法的難點在于邏輯關系復雜,同時由于延時、競爭和冒險的存在,使輸出的數據抖動嚴重,限制了芯片的最高工作速度。本文在對8B/10B編解碼的內在相關性進行研究的基礎上,綜合上述兩種編碼方法的優點,實現了一種新的8B/10B編解碼方法。?
1 8B/10B 編解碼方法研究?
8B/10B 編碼在發送端將輸入的8B碼組按照編碼規則映射成10B碼組,再通過并串轉換將并行的10位碼組串行輸出,在接收端則進行串并轉換和解碼。8B/10B 編碼過程是將8B碼組(從高位到低位為HGFEDCBA) 分解成3B (HGF) 和5B( EDCBA) ,分別進行3B/4B編碼和5B/6B編碼,最后組成10B碼組(從低位到高位為abcdeifghj)。3B/4B 編碼表如表1 所示:?
分析表1 可以看出,3B碼000 ,011 ,100 的4B編碼都有互相取反的兩種編碼,000 和100 編碼的游程值(RD) 為1 和3 ,011 的兩種編碼的RD值均為2。而001 ,010 ,101 ,110 的編碼則只有一種,其RD值為2。比較特殊的是111 的編碼,它有兩組互相取反的編碼共4 種,但是根據8B/10B編碼表可以看出,1000 和0111 這組編碼分別只出現在5B 碼組為01011 ,01101 ,01110 的RD + 列和5B 碼組為10001 ,10010 ,10100 的RD-列,其它的碼組根據編碼規則采用0001 和1110這組編碼。?
同樣分析5B/6B 編碼表得出,5B 碼共32 種,其中有18 種的編碼為單值,其RD 值為3 ,其它13 種為互相取反的雙值,并且其RD 值為4 和2 ,剩下的00111 的編碼也是雙值(111000 和000111) ,但是其RD 均為3。因此編碼得到的10B 碼組的RD 值只可能是6、5或4,其它的為禁用碼組。同時根據游程差的正負,8B/10B 編碼表分成RD-和RD + 兩列。深入分析整個8B/10B 編碼的內在相關性可以知道:
當3B碼有唯一4B編碼時(001 , 010 , 101 ,110) ,若5B 碼為具有單值編碼的碼字,則8B/ 10B 編碼表的RD-列和RD + 列取唯一的10B 編碼,并且其RD 值為5 ;若5B 碼具有雙值編碼,則在RD-列取RD值為4 的6B 編碼,在RD + 列取RD 值為2 的6B 編碼;若5B 碼為00111 ,則在RD-列取111000 ,在RD +列取000111。?
當3B碼有雙值4B編碼時(000 ,100) ,若5B碼為18 種具有單值編碼的碼字,則4B 編碼在RD-列和RD+ 列分別取RD 值為3 和1 的編碼,3B 碼為011 的情況下則分別取1100 和0011 ;若5B 碼為13種有雙值編碼的碼字時,則在RD-列和RD+ 列分別取6B RD 值為4、4B RD 值為1 和6B RD 值為2、4B RD值為3 的編碼;若5B 碼為00111 ,3B 碼為000 ,100 ,則在RD-列和RD + 列分別取6B 為111000、4BRD 值為3 和6B 為000111、4B RD值為1 的編碼;若5B 碼為00111 ,3B 碼為011 時,在RD-列和RD+列的編碼分別111000、1100 和000111、0011。當3B 碼為111 時,由前面分析的1000 和0111 這組編碼出現的特殊情況外,其它的編碼規則同上面分析的3B 碼具有雙值編碼的情況,此時的編碼取0001 和1110 這組編碼。?
另外,8B 碼分為D 分組(數據字節編碼) 和K分組(特殊控制符號編碼) ,上面分析的D 分組,對于K 分組,共有12個8B 碼組,其編碼規則與D 分組不同,但是由于其碼組少,編碼比較簡單,只需要在編碼過程中根據輸入判斷這12 個碼組是否為K分組,再根據K 分組編碼規則進行編碼,在這里不再贅述。?
由前面的分析得出了3B/4B 編碼和5B/6B 編碼的關系,從而得到整個8B/ 10B 編碼表的RD-和RD+ 兩列,編碼過程中根據當前的游程差確定4B和6B 編碼的選取,從而實現10B碼的直流平衡 。根據上面對分析得出的結論,我們設計的8B/10B 編碼器如圖1 所示:?
圖1 8B/ 10B編碼器框圖?
上圖中整個編碼器的核心是Controls模塊,它根據輸入信號進行判斷,在8B/10B 編碼表的RD-和RD + 兩列正確的選取適當的編碼。3B/4B 編碼和5B/6B 編碼的選取是通過圖中的兩個異或門實現的,由上面的分析,具有非唯一編碼的8B 碼,其3B/4B 編碼和5B/ 6B 編碼都是成對出現的,而且互為取反。因此,我們可以根據輸入的3B和5B碼組,只選擇出一組4B和6B 編碼輸出即可,然后通過它們與0000 (000000) 或者1111 (111111) 的異或運算,就可以兩組編碼中的一組。?
5B/6B編碼表和3B/4B編碼表模塊實現多路選擇器的功能,根據輸入的3B和5B碼組,只選擇出一組RD-列的4B和6B 編碼輸出,然后與Controls模塊的輸出進行異或運算來得到正確的編碼。Controls模塊實現的功能有: K 分組(特殊控制符號編碼) 碼組的判斷,根據輸入8B碼組和K判斷輸入是D分組還是K分組,以及是否為正確的K分組碼,并根據K分組編碼規則輸出用來進行異或運算的操作數;設置一個內部寄存器變量RD,設定的默認初始值為0,表示RD-列,根據輸入8B碼判斷是否翻轉,并存儲下一個8B碼的游程差的正負,以便在正確的列取得編碼。
對RD的賦值狀態機如圖2所示,其中RD=0代表RD-列,RD=1代表RD+列;當輸入為D分組碼時,根據前面內在相關性的分析,輸出用來進行異或運算的正確的操作數,例如當輸入5B碼為01011 ,01101 ,01110 ,3B碼為111時,若當前取RD+列,輸出4比特1001 ,與3B/4B編碼表模塊輸出的4B碼0001相異或,得到正確的3B/4B編碼1000 ;對于輸入的K分組禁用碼組,輸出錯誤標志kerr 。根據對編碼的需要,Controls 模塊輸出的6 比特和4 比特操作數分別包括000000、111111、000001、111110 和0000、1111、1001、0110。?
圖2 游程差值狀態機?
對解碼器的設計相對簡單一些,其根據也是前面分析的結果。解碼過程大致為:先將輸入的10B碼分解成4B和6B 碼,對它們分別進行判斷是否為許用碼組,因為它們的許用碼組分別只有14個和46個。同時判斷4B和6B雖為許用碼組,得到的10B碼組是否為禁用碼。對于K分組碼組,判斷其是否為正確的K分組編碼。如果未出現禁用碼錯誤,則解出相應的3B和5B碼組,同時計算它們的RD值,否則輸出錯誤標志。然后根據得到的8B碼的RD值進一步判斷其是否為許用碼組,同時根據判斷標志輸出正確的8B碼。設計的解碼器框圖如圖3 所示。?
圖3 8B/10B解碼器框圖
該解碼器由三個模塊組成, 6B/5B 解碼表和4B/3B 解碼表模塊分別根據輸入的6B和4B許用碼,輸出相應的5B和3B解碼,其實現與編碼器的相應模塊類似。
Controls模塊完成對輸入10B 分解后的6B 和4B 碼組是否為許用碼組的判斷,并計算RD值,分別只能是4、3、2 和1、2、3 ;對輸入碼組是否為K分組碼及其正確性的判斷;對既是許用碼組,又滿足RD 值要求的10B 禁用碼進行判斷,包括6B 碼為111000 或000111、4B 碼為0011 或1100 時可能出現的禁用碼組合,以及前面提到3B 碼為111 時的兩對編碼的情況下禁用碼組的判斷,同時在本模塊內部對10B碼的RD值判斷其是否為6、5 或4 ,進一步判斷出10B 碼是否是禁用碼;完成解碼有效性的判斷,輸出各種錯誤標志,包括D 分組解碼錯誤derr 和K分組解碼錯誤kerr ,在此基礎上計算收到的10B 碼的游程差,檢查其是否是在編碼表中RD-和RD+兩列中相應的列中選擇的,若出現錯誤, rderr 指示解碼無效;輸出K指示得到的8B解碼是否是K分組碼。?
上述編解碼器的實現結構比較簡單,編解碼器的各個模塊用同一系統時鐘同步觸發,編解碼速度比較快,輸出抖動小。出現解碼錯誤的原因是10B碼在傳輸過程中出現了誤碼,對解碼的有效性檢查增加了信息傳輸的可靠性。?
2 仿真結果與分析?
根據本文提出的8B/10B 編、解碼方法,用Verilog HDL進行了硬件描述,用MAX+plus Ⅱ軟件在Altera的FPGA 器件上實現了編解碼器的功能驗證、綜合和時序仿真。在對編解碼器內的各個模塊分別進行驗證和仿真的基礎上,將各模塊組合起來綜合成完整的編解碼電路。?
圖4a所示為編碼器的仿真時序圖,輸入datain的順序為HGFEDBA ,輸出dataout 的順序為abcde-ifghj 。圖中所取的值包含了HGF =111時兩組不同的編碼的選擇,并且根據當前游程差的正負,從RD-和RD+兩列選取相應的編碼,從而實現了保持了碼流中1和0的數目相等。從編碼的結果可以看出采用該方法實現的編碼器能夠根據輸入8B碼正確的編碼。同時,由于本方法采用同步設計,并且各控制信號和數據產生的延時差別不大,所以輸出數據的抖動很小。圖4b 所示為解碼器的仿真時序圖,其中第五個輸入數據1110000011由于是10B禁用碼組,所以輸出derr 跳變為1指示該解碼錯誤。由于第二個輸入數據1000110111 取自RD-列,而第三個輸入數據1110100101 同樣取自RD-列,所以產生游程差錯誤,rderr = 1。?
(a) 8B/ 10B 編碼器仿真時序圖?
(b) 8B/10B 解碼器仿真時序圖? 圖4 8B/10B編解碼器仿真時序圖?
仿真結果表明,采用本方法設計的8B/10B 編解碼器有效可靠的實現了編解碼功能。對于輸出出現的抖動,可以通過減小高速電路的工作延時或者在關鍵路徑上用D 觸發器進行同步,減小輸出抖動的積累。在本設計中,在編解碼器的輸入、輸出級通過D 觸發器同步采樣后的輸入輸出的時序圖如圖5 所示,輸入信號、編碼信號和解碼信號之間都順序相差一個碼元周期,輸出抖動被完全消除了。?
圖5 用D 觸發器同步采樣后的編解碼器仿真時序圖?
3 結論?
文在分析8B/10B 編碼規則和3B/4B編碼、5B/6B編碼之間的內在相關性的基礎上,提出了新的編解碼方案, 并用Verilog HDL語言在Altera的FPGA上實現了硬件電路,仿真結果完全正確。該方案層次分明、結構簡單、編解碼速度快、輸出抖動小與現有的編解碼方法相比有一定的優勢,適合高速光纖通信物理層的8B/10B編解碼器以及VSR轉換器IC的設計。 |