邱鵬文,柏 鵬,李明陽
(1.空軍工程大學(xué)理學(xué)院,陜西西安710051;2.空軍工程大學(xué)綜合電子信息系統(tǒng)與電子對(duì)抗技術(shù)研究中心,陜西西安 710051)
1962年,Gallager首次提出 LDPC 碼[1],但沒有引起人們足夠的重視,后來發(fā)現(xiàn)其接近香農(nóng)限的優(yōu)異性能[2],才引發(fā)人們對(duì)LDPC碼研究的熱潮,人們提出了多種LDPC編碼器的實(shí)現(xiàn)方法[3],有的側(cè)重于碼的優(yōu)良性能,有的側(cè)重于降低硬件實(shí)現(xiàn)的復(fù)雜度[4],還有為了適應(yīng)不同傳輸環(huán)境,通信系統(tǒng)需要糾錯(cuò)編碼的碼率自動(dòng)地根據(jù)信道環(huán)境做出調(diào)整,這就引出了本文的動(dòng)態(tài)可重構(gòu)LDPC編碼器設(shè)計(jì)。本文嘗試設(shè)計(jì)一種性能優(yōu)良復(fù)雜度較低的碼速率重構(gòu)LDPC編碼器,在Modelsim6.5中進(jìn)行了仿真,并對(duì)仿真結(jié)果進(jìn)行分析。
可重配置即可重構(gòu)的基礎(chǔ)是模塊化,模塊化要求子模塊具有通用性,所以可重配置又叫具有通用性的子單元模塊化。而非通用子單元需要采用冗余備份,冗余部分考慮布線和子單元的聯(lián)合成全局布線網(wǎng)絡(luò)。功能重構(gòu)的關(guān)鍵模塊有時(shí)鐘管理單元、子編碼單元、狀態(tài)控制單元、時(shí)序控制單元、輸入輸出接口、全局連線網(wǎng)絡(luò)。
符合CCSDS標(biāo)準(zhǔn)的 LDPC 采用生成矩陣[5]G=[I,P]的模式,其中P為分塊循環(huán)子矩陣[6],循環(huán)計(jì)數(shù)大小為w/4,其特點(diǎn)為生成矩陣由一個(gè)個(gè)分塊子矩陣構(gòu)成,可以設(shè)計(jì)部分并行的編碼器,比如每個(gè)子矩陣單獨(dú)編碼,子矩陣內(nèi)部采用串行或并行編碼,全局控制將子矩陣編碼結(jié)合成最終的編碼。同時(shí)利用分塊循環(huán)特性可以設(shè)計(jì)通用的編碼器,當(dāng)需要另一種編碼時(shí)只需要將當(dāng)前的生成矩陣重新存入到編碼器中,將循環(huán)編碼的控制和計(jì)數(shù)器進(jìn)行重配置即可。圖1為CCSDS標(biāo)準(zhǔn)的2/3碼率生成矩陣的校驗(yàn)部分。
圖1 LDPC(1 536,1 024)生成矩陣的校驗(yàn)分塊循環(huán)子矩陣
串行結(jié)構(gòu)中,編碼器子矩陣上一個(gè)編碼周期結(jié)束時(shí)刻下載子矩陣首行數(shù)據(jù),并寄存到生成矩陣寄存向量中[7]。編碼向量在編碼周期內(nèi)1 bit循環(huán)右移,并根據(jù)信息元決定子碼元寄存器保持不變還是和生成矩陣寄存向量異或運(yùn)算。按照這種方式將所有的分塊子矩陣的首行下載并編碼結(jié)束后,整個(gè)的編碼過程結(jié)束。這種結(jié)構(gòu)的優(yōu)點(diǎn)是簡(jiǎn)單,節(jié)約資源,子編碼模塊可重用,缺點(diǎn)是編碼過程耗時(shí)過長(zhǎng)。串行結(jié)構(gòu)如圖2所示。
圖2 串行編碼結(jié)構(gòu)
子矩陣內(nèi)部并行結(jié)構(gòu)利用了子矩陣的分塊循環(huán)特點(diǎn),即已知子矩陣首行后可以通過循環(huán)右移得到整個(gè)子矩陣。因此可以按照k行為單位并行編碼,其中k應(yīng)該能夠被子矩陣尺寸整除。每個(gè)編碼步調(diào)里根據(jù)輸入的k個(gè)信息元是否為1決定子碼元寄存器是否和此位對(duì)應(yīng)的生成矩陣寄存向量異或。結(jié)構(gòu)如圖3所示。
圖3 子矩陣內(nèi)部并行結(jié)構(gòu)
圖中x(0)~x(k-1)為k個(gè)信息元,gen_vec(0)~gen_vec(k-1)為生成矩陣寄存向量,reg_code為子碼元寄存器,下標(biāo)m代表子矩陣的標(biāo)號(hào)。圖中k+1個(gè)數(shù)據(jù)的異或可以采用分層的兩兩異或方式,但是需要考慮的是層數(shù)較多的情況下將會(huì)造成器件內(nèi)部較大的時(shí)延。相對(duì)于串行結(jié)構(gòu),子矩陣內(nèi)部并行結(jié)構(gòu)能將編碼速率提高k倍,但是隨著k的增加,編碼器可工作的最高頻率隨之下降,同時(shí)子矩陣編碼需要調(diào)用的異或邏輯也成k倍增加,k的數(shù)值需要根據(jù)器件進(jìn)行合理選擇。
子矩陣內(nèi)部并行結(jié)構(gòu)用降低最高頻率和異或邏輯k倍增加換取編碼速率的k倍提高,而子矩陣外部并行結(jié)構(gòu)不需要降低最高頻率,它需要子碼元寄存器和生成矩陣寄存向量的k倍增加。這種結(jié)構(gòu)采用k串行結(jié)構(gòu)同時(shí)工作,要求這些串行結(jié)構(gòu)的子矩陣必須在生成矩陣的同一行,并且k被生成矩陣尺寸整除。子矩陣外部并行結(jié)構(gòu)克服了子矩陣內(nèi)部并行結(jié)構(gòu)的頻率限制,但是額外支出了寄存器。結(jié)構(gòu)如圖4所示。
圖4 子矩陣外部并行結(jié)構(gòu)
混合并行結(jié)構(gòu)是子矩陣內(nèi)部和外部并行的混合使用,可以獲得和子矩陣外部并行結(jié)構(gòu)同樣的編碼速率,能夠克服子矩陣內(nèi)部并行的頻率限制,并且相對(duì)于子矩陣外部并行結(jié)構(gòu)降低寄存器開銷。它采用子矩陣內(nèi)部并行結(jié)構(gòu)為基本單元,k個(gè)這樣的基本單元并行工作,圖5為混合并行結(jié)構(gòu)圖。
從上述分析可以看出這4種編碼結(jié)構(gòu)具有內(nèi)在的聯(lián)系。串行編碼結(jié)構(gòu)是子矩陣外部并行編碼結(jié)構(gòu)的子結(jié)構(gòu),同時(shí)也是子矩陣內(nèi)部并行編碼結(jié)構(gòu)中k=1的特例。子矩陣內(nèi)部并行編碼結(jié)構(gòu)是混合并行結(jié)構(gòu)的子結(jié)構(gòu),同時(shí)串行結(jié)構(gòu)、子矩陣內(nèi)部和外部并行結(jié)構(gòu)都是混合并行結(jié)構(gòu)的特例??梢岳米泳仃噧?nèi)部并行結(jié)構(gòu)簡(jiǎn)化成串行結(jié)構(gòu)或重配置成更復(fù)雜的混合結(jié)構(gòu)。
圖5 混合并行結(jié)構(gòu)
根據(jù)混合并行結(jié)構(gòu)的通用性[8]可以建立通用編碼模型,因?yàn)槠渌?種結(jié)構(gòu)都是混合并行結(jié)構(gòu)的特例。例如串行結(jié)構(gòu)就是混合并行結(jié)構(gòu)中外部和內(nèi)部并行度都為1,并且內(nèi)部并行結(jié)構(gòu)不經(jīng)過異或的特例,可以將其按照混合并行結(jié)構(gòu)描述成外部并行的信息元x1~xk-1全部為0,并且內(nèi)部并行信息的1~l-1位為0的情況。通用模型可以在芯片運(yùn)行的情況下功能重置,只需要輸入?yún)?shù)控制,當(dāng)然這種方式是以引入冗余,適當(dāng)增加資源消耗為前提的。也可以根據(jù)通用模型建立重配置的軟核,這樣重配置需要重新編譯,但是可以剔除資源冗余。
CCSDS標(biāo)準(zhǔn)中LDPC(2 048,1 024)的生成矩陣分塊循環(huán)子矩陣的尺寸為128×128,校驗(yàn)部分共有8×8個(gè)這樣的子矩陣;LDPC(1 536,1 024)的生成矩陣分塊循環(huán)子矩陣的尺寸為64×64,校驗(yàn)部分共有8×16個(gè)這樣的子矩陣;LDPC(1 280,1 024)的生成矩陣分塊循環(huán)子矩陣的尺寸為32×32,校驗(yàn)部分共有8×32個(gè)這樣的子矩陣。由上文可知1/2,2/3,4/5碼率的生成矩陣的校驗(yàn)部分都可以分解為8×x的形式,且生成矩陣都具有分塊循環(huán)特征,因此三者可共用的通用資源有如下4個(gè)模塊化單元[8],也是實(shí)現(xiàn)功能重構(gòu)的關(guān)鍵所在。
子編碼單元為整個(gè)可重配置編碼器的核心部分。子編碼單元由與異或、循環(huán)移位和時(shí)序控制3部分組成。子編碼單元中共用32位異或門,這是編碼過程中用的最多的邏輯門,32位異或邏輯可以在LDPC(1 536,1 024)和LDPC(2 048,1 024)拼接成64和128位異或門。從速率的角度考慮這里可以引入冗余,即不同編碼的異或單獨(dú)配置,同樣循環(huán)移位也采用冗余,即每個(gè)步調(diào)循環(huán)右移1 bit。時(shí)序控制部分在不同的編碼器之間通用,只是計(jì)數(shù)值可以根據(jù)不同編碼進(jìn)行配置。
生成矩陣寄存單元由一塊塊RAM和時(shí)序控制單元組成。塊RAM的位寬為128,時(shí)序控制單元根據(jù)不同的編碼選擇將這128位數(shù)據(jù)按照128/64/32位的方式輸出,根據(jù)校驗(yàn)矩陣的特點(diǎn)每次輸出8次即可將一行的校驗(yàn)比特全部輸出完畢。
狀態(tài)控制單元中存在著空閑、編碼和發(fā)送3種狀態(tài)。三者的區(qū)別在于編碼狀態(tài)向發(fā)送狀態(tài)以及發(fā)送狀態(tài)向空閑狀態(tài)轉(zhuǎn)移的控制不相同。如在串行結(jié)構(gòu)中,編碼狀態(tài)到發(fā)送狀態(tài)分別用接收比特計(jì)數(shù)Rcv_Cnt_Bits=128/64/32控制,且接受符號(hào)計(jì)數(shù)Rcv_Cnt_Syms=8/16/32指示。
時(shí)序控制單元控制編碼和輸出校驗(yàn)位的步調(diào),例如LDPC(2 048,1 024)碼有模128計(jì)數(shù)器和模8計(jì)數(shù)器,這里的2個(gè)參數(shù)128和8可以作為寄存器值通過重設(shè)置進(jìn)行改變,從而符合3種不同編碼器的實(shí)現(xiàn)要求。
綜上所述,圖6為可重配置編碼器結(jié)構(gòu)圖。
選擇Xilinx硬件v595t芯片,在ISE12.1軟件平臺(tái)[10]上設(shè)計(jì)了CCSDS標(biāo)準(zhǔn)的2/3碼率的LDPC(1 536,1 024)編碼器的不同編碼速率重配置的FPGA程序,并在Modelsim6.5中分別進(jìn)行仿真,仿真結(jié)果見圖7和圖8。
圖6 可重配置編碼器結(jié)構(gòu)圖
圖7為采用子矩陣外部并行結(jié)構(gòu)的8倍速率編碼器的時(shí)序,編碼需要1 024個(gè)時(shí)鐘,因?yàn)樯删仃嚨姆謮K循環(huán)子矩陣尺寸為64×64,所以每64個(gè)時(shí)鐘內(nèi)需要下載一次生成矩陣的首行。由于CCSDS標(biāo)準(zhǔn)的生成矩陣行長(zhǎng)總是分塊循環(huán)子矩陣行長(zhǎng)的8倍,故需要下載8次才能將生成矩陣的一行全部下載結(jié)束。生成矩陣寄存單元的時(shí)序控制單元根據(jù)全局時(shí)序控制單元和狀態(tài)轉(zhuǎn)移單元控制生成矩陣下載和傳遞。在這64個(gè)時(shí)鐘內(nèi)前63個(gè)時(shí)鐘生成矩陣首行寄存器循環(huán)右移,第64個(gè)時(shí)鐘傳遞新的生成矩陣首行。
圖8為采用混合結(jié)構(gòu)的64倍速率編碼器的時(shí)序,因?yàn)樽泳仃噧?nèi)部并行度為8,所以每64/8=8個(gè)周期下載一次生成矩陣首行,從而編碼需要1 024/8=128個(gè)時(shí)鐘。因?yàn)樯删仃囀仔邢螺d需要8個(gè)時(shí)鐘周期,而每個(gè)矩陣首行需要循環(huán)8次,所以二者消耗相同的時(shí)間,在子矩陣編碼和下載生成矩陣首行時(shí)二者都沒有等待另一方。這個(gè)過程中前7個(gè)時(shí)鐘周期內(nèi)下載生成矩陣首行,第8個(gè)時(shí)鐘周期將臨時(shí)寄存的前7個(gè)首行數(shù)據(jù)和此時(shí)下載的首行數(shù)據(jù)傳遞給首行數(shù)據(jù)寄存器。
根據(jù)2.2節(jié)中對(duì)子矩陣內(nèi)部并行結(jié)構(gòu)的分析,內(nèi)部并行會(huì)犧牲編碼器的頻率特性,同時(shí)并行都是以資源的增加為前提的,在兩種并行結(jié)構(gòu)中,并行都會(huì)造成異或邏輯的開銷成倍增加,對(duì)應(yīng)于FPGA中的查找表(LUT)的增加,表1是編譯后的資源消耗對(duì)比和工作頻率報(bào)告。
表1 外部并行結(jié)構(gòu)和混合結(jié)構(gòu)對(duì)比
通過表1可以看到混合結(jié)構(gòu)在提高編碼速率的情況下,資源使用情況并沒有成倍增長(zhǎng),但是其最高工作頻率有所下降。這是因?yàn)榛旌辖Y(jié)構(gòu)中的內(nèi)部并行結(jié)構(gòu)相對(duì)外部并行結(jié)構(gòu)消耗更少的資源,但是編碼時(shí)延增大了,最高工作頻率自然就下降了。
為了實(shí)現(xiàn)LDPC編碼器碼率重構(gòu)和功能重構(gòu)的目的,同時(shí)降低編碼器的硬件實(shí)現(xiàn)復(fù)雜度,本文選用CCSDS標(biāo)準(zhǔn)的LDPC生成矩陣,采用可重構(gòu)體系結(jié)構(gòu),通過少量狀態(tài)控制單元和時(shí)序控制單元,使得編碼速率提高的情況下資源使用情況并沒有成倍增長(zhǎng),仿真結(jié)果和綜合結(jié)果進(jìn)一步驗(yàn)證了設(shè)計(jì)預(yù)期,結(jié)果與理論分析一致,如何進(jìn)一步降低編碼時(shí)延是今后研究需要解決的問題。
:
[1]GALLAGER R G.Low density parity check codes[EB/OL].[2012-05-02].http://www.rle.mit.edu/rgallager/documents/ldpc.pdf.
[2]MACKAY D J C,NEAL R M.Near shannon limit performance of low density parity check codes[J].Electronics Letters,1996,32(8):1645-1646.
[3]DARABIHA A,CARUSONE A C,KSCHISCHANG F R.Multigbit/sec low density parity check decoders with reduced interconnect complexity[C]//Proc.ISCAS 2005.[S.l.]:IEEE Press,2005:5194-5197.
[4]陳智雄,苑津莎.基于多重置換陣的滿秩結(jié)構(gòu)化LDPC碼構(gòu)造方法[J].電子學(xué)報(bào),2012,40(2):314-318.
[5]王新梅,肖國(guó)鎮(zhèn).糾錯(cuò)碼—原理與方法[M].西安:西安電子科技大學(xué)出版社,2001.
[6]萬哲先.代數(shù)導(dǎo)引[M].北京:科學(xué)出版社,2004.
[7]許幫保,劉春江,郭沛宇,等.LDPC編碼中大矩陣求逆及存儲(chǔ)的一些方法[J].電視技術(shù),2010,34(9):4-6.
[8]王剛,李冰,劉勇,等.一種可重構(gòu)LDPC編碼器的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2010,26(12):168-170.
[9]楊光,黃正興.LU分解法的LDPC碼編碼器的FPGA實(shí)現(xiàn)[J].電視技術(shù),2011,35(23):55-58.
[10]田耘,徐文波.Xilinx FPGA開發(fā)實(shí)用教程[M].北京:清華大學(xué)出版社,2008.