0 引言
LDPC 碼最早于1962 年由Gallager提出,可以看成是一個具有稀疏校驗矩陣的線性分組碼,。自從Mackay 和Neal發(fā)現(xiàn)LDPC 碼的性能非常接近香農(nóng)限以后,,LDPC 碼越來越受到人們的重視?;跍?zhǔn)循環(huán)LDPC(QC-LDPC" title="QC-LDPC">QC-LDPC)碼結(jié)構(gòu)特點,,提出了一種支持多種碼率QC-LDPC 譯碼器" title="譯碼器">譯碼器的設(shè)計方法,并設(shè)計實現(xiàn)了一個能夠?qū)崟r自適應(yīng)支持三個不同H 陣的通用QC-LDPC 譯碼器,。
1 QC-LDPC 碼簡介
QC-LDPC 碼的校驗矩陣Hqc 是由c × t 個循環(huán)置換矩陣組成的,,其中c,t均為整數(shù),,且c < t ,。將QC-LDPC碼的校驗矩陣中每一個置換矩陣替換為相應(yīng)的移位值,這樣得到了一個新的矩陣,,稱為基本矩陣,?;揪仃嚺cΗ 陣是一一對應(yīng)的。QC-LDPC 規(guī)則的結(jié)構(gòu)使得其編譯碼在工程上易于實現(xiàn),,因此許多標(biāo)準(zhǔn)中的LDPC 碼都采用了QC-LDPC 碼,。
2 譯碼算法簡介
這里設(shè)計的譯碼器主要采用基于軟判決的偏移值最小和算法。偏移值最小和算法是在和積算法和最小和算法的基礎(chǔ)上改進(jìn)而來,,具有譯碼復(fù)雜度低,,性能優(yōu)異等特點。為了能夠較好地描述該算法,,先對一些符號進(jìn)行定義,。
L(ci )表示輸入譯碼器變量節(jié)點i 的原始軟信息, L( rji ) 表示由校驗節(jié)點j 傳遞給變量節(jié)點i 的信息,, L( q ij )表示由變量節(jié)點i 傳遞給校驗節(jié)點j 的信息,。而αij ,βi ' j 的意義如式1 所示:
具體的算法步驟如下所示:
初始化碼字的原始概率信息,。
第1 步,,更新校驗節(jié)點的概率信息(CNU,Check NodeUpdate),。
第2 步,,更新信息節(jié)點的概率信息(VNU, Variable NodeUpdate)。
同時計算:
L Q 進(jìn)行硬判決,,若( ) 0 i L Q > ,判決為0 否則為1,。計算cHT 是否為0,或者已經(jīng)達(dá)到設(shè)定的最大迭代次數(shù),,如果是轉(zhuǎn)第3 步,,否則轉(zhuǎn)第1 步。
第3 步,,輸出判決結(jié)果,。
通過仿真,文中確定的譯碼器輸入定點化方案如下:量化位寬為6 bit,,其中3 bit 表示整數(shù)位,,2 bit 表示小數(shù)位。
3 多碼率" title="多碼率">多碼率LDPC 譯碼器設(shè)計
首先考慮下面3 種QC-LDPC 碼字作為參考,,碼長8 064bit,,碼率分別為7/8, 3/4, 1/2。其中,,不同碼率的最小和譯碼算法所需的最佳偏移值((3)式中的offset 值)經(jīng)仿真得到,,分別為1, 0.7, 0.5。上述QC-LDPC 碼中所用到的碼型膨脹因子是112,。
文中實現(xiàn)的LDPC 譯碼器基于部分并行的譯碼結(jié)構(gòu),,對譯碼器進(jìn)行了輸入輸出雙緩沖處理,,支持?jǐn)?shù)據(jù)連續(xù)處理,總體的結(jié)構(gòu)如圖1 所示,。
圖 1 譯碼器的總體結(jié)構(gòu)
由于要支持三個不同H 陣的LDPC 碼,,所以需要有一個模式端口,告知譯碼器當(dāng)前數(shù)據(jù)塊是屬于哪個碼型,。輸入模式寄存器控制選擇器選擇不同的H 陣來配置控制和尋址模塊,,使其能選擇需要更新的節(jié)點RAM 和需要更新的校驗節(jié)點單元(CNU),變量節(jié)點單元(VNU)的電路套數(shù),。
輸入數(shù)據(jù)首先輸入到輸入緩存RAM 組中,,輸入緩存RAM 組按照基本矩陣的列數(shù)分成N 塊對數(shù)據(jù)進(jìn)行緩存,其中N 可配置,,文中用到的N 是72。數(shù)據(jù)存滿一幀編碼塊后,,就輸入到節(jié)點RAM 組中,。節(jié)點RAM 組的作用是對算法迭代更新時的中間信息進(jìn)行存儲。由于基本矩陣中有較多的零矩陣,,所以實際生成的節(jié)點RAM個數(shù)遠(yuǎn)小于M × N 個,。
CNU 電路的用途是做校驗節(jié)點概率更新,完成式(3)的計算,。實現(xiàn)結(jié)構(gòu)如圖2(a)所示,。VNU 電路的用途是做變量節(jié)點概率更新,同時計算硬判決結(jié)果,,完成式(4)和式(5)的計算,。
具體結(jié)構(gòu)如圖2(b)所示。
圖2 CNU 和VNU 電路的結(jié)構(gòu)
輸出緩存RAM 組用來存儲和輸出譯碼結(jié)果,,同樣也采取了乒乓操作,,支持?jǐn)?shù)據(jù)塊連續(xù)的輸入輸出??刂坪蛯ぶ纺K是譯碼器的核心模塊,,它為譯碼器提供各種控制信號和讀寫RAM 的尋址信號。尋址模塊分為CNU 地址產(chǎn)生模塊和VNU 地址產(chǎn)生模塊兩部分,,CNU 地址產(chǎn)生模塊的起始地址都是其偏移值,;而VNU 地址產(chǎn)生的地址則都是從0 到Z。
由于采用了輸入輸出雙緩沖,,所以譯碼器中最多可以存在三塊數(shù)據(jù)塊,,同時這三塊數(shù)據(jù)塊可以是不同碼率的數(shù)據(jù)塊,這就實現(xiàn)了對連續(xù)輸入的不同碼率數(shù)據(jù)塊自適應(yīng)譯碼的功能,。
4 FPGA 實現(xiàn)以及性能測試:
根據(jù)以上設(shè)計方案,,選用Verilog HDL 進(jìn)行設(shè)計,,同時采用了Modelsim 6.1b 進(jìn)行了仿真驗證,最后在STratix IIEP2S180F1020I4 芯片上進(jìn)行了測試,。具體見表1 所示,。
表1 資源占用情況
表1 中同時也列出了一個單碼率譯碼器的資源占用(7/8碼率)??梢钥闯?,該多碼率譯碼器在資源占用不超過2 種碼率譯碼器資源之和的前提下能夠有效支持3 種碼率。
同時,,還針對每種碼率都測試了其吞吐率和運行的最高時鐘,,其中三種碼率(1/2,3/4,7/8)工作最高時鐘均為110 MHz,最高吞吐率分別為110 Mb/s,、165 Mb/s 和192.5 Mb/s,。從該測試結(jié)果可以看出,該多碼率譯碼器吞吐率也在110 Mb/s以上,,說明其在滿足自適應(yīng)多碼率應(yīng)用需求的同時,,仍然保持了很高的譯碼吞吐率。
5 結(jié)語
針對QC-LDPC 碼特點,,提出了一種多碼率QC-LDPC譯碼器實現(xiàn)方法,,并用FPGA實現(xiàn)了此通用的多碼率譯碼器,可支持至少三種不同碼型的QC-LDPC 碼,。此多碼率QC-LDPC 譯碼器的輸入輸出參數(shù)可以根據(jù)所需支持的碼型靈活配置,,最終實現(xiàn)的譯碼吞吐率對任何碼率都可超過110 Mb/s,兼顧了多碼率譯碼器所需的靈活性和高吞吐量,。