王 琦, 甄國涌, 焦新泉, 儲成群
(中北大學 儀器科學與動態測試教育部重點實驗室,太原 030051)
以太網已經成為現代社會常用的通信方式之一,成為通信界當之無愧的“寵兒”[1]。以太網通信經過了多年的發展,其傳輸速率已經達到萬兆甚至十萬兆,在如此高速率的數據傳輸中,光纜的傳輸成為了必不可少的傳輸媒介。在高速遠距離光纜傳輸過程中,為了降低以太網的誤碼率不能單單依靠循環冗馀校驗碼(Cyclic Redundancey Check,CRC)校驗。為了保證以太網數據傳輸的可靠性,本文提出低密度奇偶校驗碼(Low Density Parity Check Code,LDPC)的編碼方式, LDPC碼其靈活性較強,譯碼方式較為簡便,譯碼吞吐量高,可以在編解碼過程中實現糾錯功能,保證數據傳輸可靠性[2],在以太網光纜傳輸中加入LDPC編解碼可以有效保證其數據傳輸可靠性,本文主要是對以太網LDPC碼的編碼進行研究與實現。
LDPC碼的低密度特性降低了其在編解碼過程的復雜度同時大大提高了其性能,其密度的高低程度成為了判斷LDPC碼的糾錯性能的好壞以及其編譯碼簡單程度的重要條件[3]。
LDPC碼的構造具有如下幾個原則:Tanner圖無短環且直徑盡可能小,碼間距離、偽碼字重量、誘捕集以及停止集不能過小[4]。LDPC碼的碼長確定取決于以太網在鏈路層的傳輸碼字的長度。千兆以太網在PHY采用8b/10b編碼的編碼方式[5],因此在不經過解碼后其鏈路層傳輸位數為10 bit,為了方便起見確定LDPC碼信息位數為此傳輸位數即10 bit的整數倍。同理,因為萬兆以太網編碼常用編碼方式為64b/66b[6],采用雙通道并行結構,所以LDPC碼的碼長選擇為33 bit的整數倍即可[7]。
本文選擇準低密度奇偶校驗碼(Quasi-Cyclic Low-Density Parity-check,QC-LDPC)進行編碼設計,QC-LDPC碼稱為準循環LDPC碼,此類碼的構造是將基礎矩陣進行循環移位得到的循環矩陣[8]。而在構造基本矩陣時可以選用Gallager給出的方法進行構造。選擇QC-LDPC碼可以減少硬件上的工作量,大大簡化硬件構成的復雜程度[9]。校驗矩陣的構造如下:
(1)
式中,A為a×a子矩陣,之后將此基礎矩陣作為標準進行整體循環從而構造出所需的校驗矩陣[10]。根據上文選定的LDPC碼的長度規則,對其進行如表1的相關設計。
本文以千兆以太網為例進行LDPC編碼設計,首先對LDPC校驗矩陣即H矩陣進行設計,如1表所示,千兆以太網的LDPC編碼的校驗矩陣H是由3×8個24×24大小的基礎矩陣循環移位得到。

表1 LDPC校驗矩陣設計參數
傳統以太網在進行數據傳輸時,每一幀數據會首先經過一次解碼發送至數據鏈路層,之后在數據鏈路層進行信道編碼。為了節省時延,將以太網未經過第一次解碼的數據直接進行LDPC編碼,從而減少一次解碼,縮短傳輸時間。
針對以太網LDPC編碼,設計LDPC的校驗矩陣H,H矩陣為LDPC編碼校驗矩陣,將其進行分割,分割為HS以及HP矩陣:
H=[HSHP]
(2)
(3)
式中:HS矩陣為信息位矩陣;HP為校驗位矩陣。
為了方便計算將HP矩陣變換為如下矩陣[11]:
(4)
假設輸出碼字C=[SP]。其中:S為信息位;P為校驗位。分析LDPC編碼特點可知H與C具有如下關系:
H·CT=0T
(5)
根據式(5)并結合以上分析可得
(HS:HP)·(ST:PT)=0T
(6)
因此
HS·ST=HP·PT
(7)
(8)
由式(8)可知,對于校驗位的計算需要求得HP的逆矩陣,但由于矩陣的逆矩陣求解過程較為復雜,在實現方面有一定的難度,同時因為LDPC碼的校驗矩陣為稀疏矩陣,若經過求逆之后可能會破壞其稀疏性導致計算過程變得復雜,而且會造成編碼延時加長,因此,本文不選擇直接求逆的方式進行計算。結合HP矩陣的特點,采用迭代的方式進行校驗碼的計算成為了一種較好的方式[12]。令hT=HS·ST,其檢驗位的計算如下式所示:
(9)
如圖1所示為編碼架構圖,在編碼過程中,傳輸數據10 bit并行發送至編碼模塊中,在LDPC編碼模塊中進行編碼計算,之后根據編碼輸出要求輸出信息位以及校驗位[13]。

圖1 編碼架構
根據上文對LDPC編碼算法的研究與分析可知,LDPC編碼基于的FPGA實現,其重點在于矩陣乘法和異或運算的實現,圖2所示為FPGA實現LDPC編碼的整體設計方案。

圖2 LDPC編碼整體設計方案
由圖2可見,首先信息位與信息矩陣進行矩陣乘法計算得到中間輸出值Do1,之后Do1與校驗矩陣進行異或計算得到校驗位,最后輸出編碼結果Do。整套設計方案的核心主要是矩陣乘法的計算,對二進制矩陣的乘法進行FPGA的設計,其具體思路如下:對矩陣HS進行行掃描,掃描每一行中‘1’的位置,同時對矩陣S進行相同的掃描。比較矩陣HS中每一行中‘1’的位置與矩陣S中‘1’的位置,當兩個矩陣中‘1’的位置相同時計數加‘1’,直到HS單行掃描完成,如果計數為奇數,則輸出值為‘1’;反之則為‘0’。對矩陣HS的每一行都進行如上所述的步驟,最終輸出中間值Do1,至此矩陣乘法的運算即可結束。同理,矩陣的異或計算可以采用相類似的算法。基于LDPC碼的特點,其校驗矩陣中‘1’的數量遠遠小于‘0’的數量,這就大大簡化了矩陣的運算過程[14-15]。為了進一步優化,在HS的存儲方法上可以采用不同的方式。因為在矩陣乘法的計算過程中,關注點在于‘1’的數量及位置,因此可以規定矩陣存儲的規則,在進行矩陣存儲時只存儲此矩陣的行重以及其‘1’的位置。如表2所示為矩陣存儲表,即為本文采用的矩陣存儲方式[16]。

表2 矩陣存儲表
根據以上分析對其進行編碼仿真分析,在輸出端口擬采用3種輸出方式,第1種方式是以完全并行的方式直接進行輸出,這種做法可以提高傳輸速度但是其I/O口資源占有率大大增加,一般情況下FPGA可用I/O口遠遠小于其占有I/O口數量,因此此方案無法在實際中應用;第2種方式采用完全串行的方式進行輸出,這種方案可以大大減小I/O口的占用率,但是會使得編碼速度變慢;最后一種方式是采用部分并行的方式進行輸出,既可以將輸出以8位并行的方式進行輸出,這種方案既可以在一定程度上提高編碼速度,同時I/O口資源占有率也不會特別高,還可以根據實際情況對并行位數進行調整。如圖3所示為3種不同輸出模式,如圖4所示為LDPC編碼仿真結果。
如圖3所示,為不同的輸出模式,其中(a)(b)(c)分別為3種模式的輸出方式。圖4所示為LDPC編碼結果輸出圖,其中(a)(b)(c)分別為3種不同輸出方式的輸出結果。如圖所示信息位為以太網輸出的120 bit的信息數據,校驗位為經過LDPC編碼后輸出的72位校驗數據,最終輸出值Dout為編碼后碼字的輸出值。對上述3種不同的編碼輸出方式的資源占用率進行分析。

(a) 完全并行輸出模式

(b) 完全串行輸出模式

(c) 部分并行輸出模式
圖3 3種不同輸出模式

(a) 完全并行輸出模式

(c) 部分并行輸出
圖4 LDPC編碼結果圖
表3所示為資源利用情況以及運行速度情況,其中運行速度即完成一次輸出所需的時間,其與校驗矩陣的構造有很大關系。由表3可知,完全并行的輸出方式由于I/O口資源不夠,因此無法在實際中應用,但根據仿真結果可分析其運行速度,其完成一次輸出所需時間為76 970 ns,是3種輸出方式中速率最快的一種。對其余兩種方式進行對比,可以看到資源利用方面兩種方式只是在I/O口占用率方面差別較大,在運行速度方面,采用部分并行的輸出方式要比完全串行的輸出方式快。綜合以上資源利用率以及運行速度情況,在I/O口資源足夠的情況下采用部分并行的方式進行輸出可以提高傳輸速率,達到最好的效果。

表3 資源利用率
本文根據以太網數據傳輸方式實現了LDPC的(192,120)編碼同時分析對比了完全串行輸出,完全并行輸出以及部分并行輸出的3種編碼輸出模式的資源占用率以及運行速度,發現部分并行的方式進行編碼輸出可以達到性能最優。