王 琦, 甄國涌, 焦新泉, 儲成群
(中北大學(xué) 儀器科學(xué)與動態(tài)測試教育部重點(diǎn)實(shí)驗(yàn)室,太原 030051)
以太網(wǎng)已經(jīng)成為現(xiàn)代社會常用的通信方式之一,成為通信界當(dāng)之無愧的“寵兒”[1]。以太網(wǎng)通信經(jīng)過了多年的發(fā)展,其傳輸速率已經(jīng)達(dá)到萬兆甚至十萬兆,在如此高速率的數(shù)據(jù)傳輸中,光纜的傳輸成為了必不可少的傳輸媒介。在高速遠(yuǎn)距離光纜傳輸過程中,為了降低以太網(wǎng)的誤碼率不能單單依靠循環(huán)冗馀校驗(yàn)碼(Cyclic Redundancey Check,CRC)校驗(yàn)。為了保證以太網(wǎng)數(shù)據(jù)傳輸?shù)目煽啃裕疚奶岢龅兔芏绕媾夹r?yàn)碼(Low Density Parity Check Code,LDPC)的編碼方式, LDPC碼其靈活性較強(qiáng),譯碼方式較為簡便,譯碼吞吐量高,可以在編解碼過程中實(shí)現(xiàn)糾錯功能,保證數(shù)據(jù)傳輸可靠性[2],在以太網(wǎng)光纜傳輸中加入LDPC編解碼可以有效保證其數(shù)據(jù)傳輸可靠性,本文主要是對以太網(wǎng)LDPC碼的編碼進(jìn)行研究與實(shí)現(xiàn)。
LDPC碼的低密度特性降低了其在編解碼過程的復(fù)雜度同時大大提高了其性能,其密度的高低程度成為了判斷LDPC碼的糾錯性能的好壞以及其編譯碼簡單程度的重要條件[3]。
LDPC碼的構(gòu)造具有如下幾個原則:Tanner圖無短環(huán)且直徑盡可能小,碼間距離、偽碼字重量、誘捕集以及停止集不能過小[4]。LDPC碼的碼長確定取決于以太網(wǎng)在鏈路層的傳輸碼字的長度。千兆以太網(wǎng)在PHY采用8b/10b編碼的編碼方式[5],因此在不經(jīng)過解碼后其鏈路層傳輸位數(shù)為10 bit,為了方便起見確定LDPC碼信息位數(shù)為此傳輸位數(shù)即10 bit的整數(shù)倍。同理,因?yàn)槿f兆以太網(wǎng)編碼常用編碼方式為64b/66b[6],采用雙通道并行結(jié)構(gòu),所以LDPC碼的碼長選擇為33 bit的整數(shù)倍即可[7]。
本文選擇準(zhǔn)低密度奇偶校驗(yàn)碼(Quasi-Cyclic Low-Density Parity-check,QC-LDPC)進(jìn)行編碼設(shè)計(jì),QC-LDPC碼稱為準(zhǔn)循環(huán)LDPC碼,此類碼的構(gòu)造是將基礎(chǔ)矩陣進(jìn)行循環(huán)移位得到的循環(huán)矩陣[8]。而在構(gòu)造基本矩陣時可以選用Gallager給出的方法進(jìn)行構(gòu)造。選擇QC-LDPC碼可以減少硬件上的工作量,大大簡化硬件構(gòu)成的復(fù)雜程度[9]。校驗(yàn)矩陣的構(gòu)造如下:
(1)
式中,A為a×a子矩陣,之后將此基礎(chǔ)矩陣作為標(biāo)準(zhǔn)進(jìn)行整體循環(huán)從而構(gòu)造出所需的校驗(yàn)矩陣[10]。根據(jù)上文選定的LDPC碼的長度規(guī)則,對其進(jìn)行如表1的相關(guān)設(shè)計(jì)。
本文以千兆以太網(wǎng)為例進(jìn)行LDPC編碼設(shè)計(jì),首先對LDPC校驗(yàn)矩陣即H矩陣進(jìn)行設(shè)計(jì),如1表所示,千兆以太網(wǎng)的LDPC編碼的校驗(yàn)矩陣H是由3×8個24×24大小的基礎(chǔ)矩陣循環(huán)移位得到。
表1 LDPC校驗(yàn)矩陣設(shè)計(jì)參數(shù)
傳統(tǒng)以太網(wǎng)在進(jìn)行數(shù)據(jù)傳輸時,每一幀數(shù)據(jù)會首先經(jīng)過一次解碼發(fā)送至數(shù)據(jù)鏈路層,之后在數(shù)據(jù)鏈路層進(jìn)行信道編碼。為了節(jié)省時延,將以太網(wǎng)未經(jīng)過第一次解碼的數(shù)據(jù)直接進(jìn)行LDPC編碼,從而減少一次解碼,縮短傳輸時間。
針對以太網(wǎng)LDPC編碼,設(shè)計(jì)LDPC的校驗(yàn)矩陣H,H矩陣為LDPC編碼校驗(yàn)矩陣,將其進(jìn)行分割,分割為HS以及HP矩陣:
H=[HSHP]
(2)
(3)
式中:HS矩陣為信息位矩陣;HP為校驗(yàn)位矩陣。
為了方便計(jì)算將HP矩陣變換為如下矩陣[11]:
(4)
假設(shè)輸出碼字C=[SP]。其中:S為信息位;P為校驗(yàn)位。分析LDPC編碼特點(diǎn)可知H與C具有如下關(guān)系:
H·CT=0T
(5)
根據(jù)式(5)并結(jié)合以上分析可得
(HS:HP)·(ST:PT)=0T
(6)
因此
HS·ST=HP·PT
(7)
(8)
由式(8)可知,對于校驗(yàn)位的計(jì)算需要求得HP的逆矩陣,但由于矩陣的逆矩陣求解過程較為復(fù)雜,在實(shí)現(xiàn)方面有一定的難度,同時因?yàn)長DPC碼的校驗(yàn)矩陣為稀疏矩陣,若經(jīng)過求逆之后可能會破壞其稀疏性導(dǎo)致計(jì)算過程變得復(fù)雜,而且會造成編碼延時加長,因此,本文不選擇直接求逆的方式進(jìn)行計(jì)算。結(jié)合HP矩陣的特點(diǎn),采用迭代的方式進(jìn)行校驗(yàn)碼的計(jì)算成為了一種較好的方式[12]。令hT=HS·ST,其檢驗(yàn)位的計(jì)算如下式所示:
(9)
如圖1所示為編碼架構(gòu)圖,在編碼過程中,傳輸數(shù)據(jù)10 bit并行發(fā)送至編碼模塊中,在LDPC編碼模塊中進(jìn)行編碼計(jì)算,之后根據(jù)編碼輸出要求輸出信息位以及校驗(yàn)位[13]。
圖1 編碼架構(gòu)
根據(jù)上文對LDPC編碼算法的研究與分析可知,LDPC編碼基于的FPGA實(shí)現(xiàn),其重點(diǎn)在于矩陣乘法和異或運(yùn)算的實(shí)現(xiàn),圖2所示為FPGA實(shí)現(xiàn)LDPC編碼的整體設(shè)計(jì)方案。
圖2 LDPC編碼整體設(shè)計(jì)方案
由圖2可見,首先信息位與信息矩陣進(jìn)行矩陣乘法計(jì)算得到中間輸出值Do1,之后Do1與校驗(yàn)矩陣進(jìn)行異或計(jì)算得到校驗(yàn)位,最后輸出編碼結(jié)果Do。整套設(shè)計(jì)方案的核心主要是矩陣乘法的計(jì)算,對二進(jìn)制矩陣的乘法進(jìn)行FPGA的設(shè)計(jì),其具體思路如下:對矩陣HS進(jìn)行行掃描,掃描每一行中‘1’的位置,同時對矩陣S進(jìn)行相同的掃描。比較矩陣HS中每一行中‘1’的位置與矩陣S中‘1’的位置,當(dāng)兩個矩陣中‘1’的位置相同時計(jì)數(shù)加‘1’,直到HS單行掃描完成,如果計(jì)數(shù)為奇數(shù),則輸出值為‘1’;反之則為‘0’。對矩陣HS的每一行都進(jìn)行如上所述的步驟,最終輸出中間值Do1,至此矩陣乘法的運(yùn)算即可結(jié)束。同理,矩陣的異或計(jì)算可以采用相類似的算法?;贚DPC碼的特點(diǎn),其校驗(yàn)矩陣中‘1’的數(shù)量遠(yuǎn)遠(yuǎn)小于‘0’的數(shù)量,這就大大簡化了矩陣的運(yùn)算過程[14-15]。為了進(jìn)一步優(yōu)化,在HS的存儲方法上可以采用不同的方式。因?yàn)樵诰仃嚦朔ǖ挠?jì)算過程中,關(guān)注點(diǎn)在于‘1’的數(shù)量及位置,因此可以規(guī)定矩陣存儲的規(guī)則,在進(jìn)行矩陣存儲時只存儲此矩陣的行重以及其‘1’的位置。如表2所示為矩陣存儲表,即為本文采用的矩陣存儲方式[16]。
表2 矩陣存儲表
根據(jù)以上分析對其進(jìn)行編碼仿真分析,在輸出端口擬采用3種輸出方式,第1種方式是以完全并行的方式直接進(jìn)行輸出,這種做法可以提高傳輸速度但是其I/O口資源占有率大大增加,一般情況下FPGA可用I/O口遠(yuǎn)遠(yuǎn)小于其占有I/O口數(shù)量,因此此方案無法在實(shí)際中應(yīng)用;第2種方式采用完全串行的方式進(jìn)行輸出,這種方案可以大大減小I/O口的占用率,但是會使得編碼速度變慢;最后一種方式是采用部分并行的方式進(jìn)行輸出,既可以將輸出以8位并行的方式進(jìn)行輸出,這種方案既可以在一定程度上提高編碼速度,同時I/O口資源占有率也不會特別高,還可以根據(jù)實(shí)際情況對并行位數(shù)進(jìn)行調(diào)整。如圖3所示為3種不同輸出模式,如圖4所示為LDPC編碼仿真結(jié)果。
如圖3所示,為不同的輸出模式,其中(a)(b)(c)分別為3種模式的輸出方式。圖4所示為LDPC編碼結(jié)果輸出圖,其中(a)(b)(c)分別為3種不同輸出方式的輸出結(jié)果。如圖所示信息位為以太網(wǎng)輸出的120 bit的信息數(shù)據(jù),校驗(yàn)位為經(jīng)過LDPC編碼后輸出的72位校驗(yàn)數(shù)據(jù),最終輸出值Dout為編碼后碼字的輸出值。對上述3種不同的編碼輸出方式的資源占用率進(jìn)行分析。
(a) 完全并行輸出模式
(b) 完全串行輸出模式
(c) 部分并行輸出模式
圖3 3種不同輸出模式
(a) 完全并行輸出模式
(c) 部分并行輸出
圖4 LDPC編碼結(jié)果圖
表3所示為資源利用情況以及運(yùn)行速度情況,其中運(yùn)行速度即完成一次輸出所需的時間,其與校驗(yàn)矩陣的構(gòu)造有很大關(guān)系。由表3可知,完全并行的輸出方式由于I/O口資源不夠,因此無法在實(shí)際中應(yīng)用,但根據(jù)仿真結(jié)果可分析其運(yùn)行速度,其完成一次輸出所需時間為76 970 ns,是3種輸出方式中速率最快的一種。對其余兩種方式進(jìn)行對比,可以看到資源利用方面兩種方式只是在I/O口占用率方面差別較大,在運(yùn)行速度方面,采用部分并行的輸出方式要比完全串行的輸出方式快。綜合以上資源利用率以及運(yùn)行速度情況,在I/O口資源足夠的情況下采用部分并行的方式進(jìn)行輸出可以提高傳輸速率,達(dá)到最好的效果。
表3 資源利用率
本文根據(jù)以太網(wǎng)數(shù)據(jù)傳輸方式實(shí)現(xiàn)了LDPC的(192,120)編碼同時分析對比了完全串行輸出,完全并行輸出以及部分并行輸出的3種編碼輸出模式的資源占用率以及運(yùn)行速度,發(fā)現(xiàn)部分并行的方式進(jìn)行編碼輸出可以達(dá)到性能最優(yōu)。