該文通過對(duì)低密度校驗(yàn)(LDPC)碼的編譯碼過程進(jìn)行分析,提出了一種基于FPGA 的LDPC 碼編譯碼器聯(lián)合設(shè)計(jì)方法,該方法使編碼器和譯碼器共用同一校驗(yàn)計(jì)算電路和復(fù)用相同的RAM 存儲(chǔ)塊,有效減少了硬件資源的消耗量。該方法適合于采用校驗(yàn)矩陣進(jìn)行編碼和譯碼的情況,不僅適用于全并行的編譯碼器結(jié)構(gòu),同時(shí)也適用于目前廣泛采用的部分并行結(jié)構(gòu),且能夠使用和積、最小和等多種譯碼算法。采用該方法對(duì)兩組不同的LDPC 碼進(jìn)行部分并行結(jié)構(gòu)的編譯碼器聯(lián)合設(shè)計(jì),在Xilinx XC4VLX80 FPGA 上的實(shí)現(xiàn)結(jié)果表明,設(shè)計(jì)得到的編碼器和譯碼器可并行工作,且僅占用略多于單個(gè)譯碼器的硬件資源,提出的設(shè)計(jì)方法能夠在不降低吞吐量的同時(shí)有效減少系統(tǒng)對(duì)硬件資源的需求。
1 引言
在數(shù)字通信系統(tǒng)中,采用前向糾錯(cuò)編碼(FEC)技術(shù)可大幅提高數(shù)據(jù)傳輸?shù)目煽啃?。其中,LDPC碼憑借其優(yōu)異的糾錯(cuò)性能、較低的譯碼復(fù)雜度和可并行實(shí)現(xiàn)的譯碼結(jié)構(gòu),已被數(shù)字衛(wèi)星廣播(DVBS2)、無線局域網(wǎng)(WLAN)和全球微波互聯(lián)接入(WIMAX)等多個(gè)通信標(biāo)準(zhǔn)采納。
如何在大規(guī)模集成電路上實(shí)現(xiàn)高速的LDPC 編譯碼器一直是LDPC 碼應(yīng)用研究的一個(gè)焦點(diǎn)。理論上,可根據(jù)二部圖中的所有節(jié)點(diǎn)及邊線實(shí)現(xiàn)全并行結(jié)構(gòu)的LDPC 碼譯碼器,但隨著碼長的增長,過高的布線復(fù)雜度及龐大的資源需求量將導(dǎo)致全并行結(jié)構(gòu)的譯碼器難以實(shí)現(xiàn)。采用串行結(jié)構(gòu)雖然可以減少硬件資源的消耗量,但譯碼器所需的存儲(chǔ)空間會(huì)隨著碼長的增長而迅速增加,并且其較低的譯碼吞吐量通常不能滿足實(shí)際應(yīng)用的需求。2001 年Kou 等人[1]提出了準(zhǔn)循環(huán)結(jié)構(gòu)的LDPC 碼,由于其校驗(yàn)矩陣的準(zhǔn)循環(huán)特性,譯碼器可以采用部分并行結(jié)構(gòu)進(jìn)
行實(shí)現(xiàn),從而使得基于長碼的高吞吐量LDPC 碼譯碼器得以實(shí)用化?,F(xiàn)階段部分并行結(jié)構(gòu)QC-LDPC譯碼器實(shí)現(xiàn)的研究工作已全面展開,文獻(xiàn)[2-8]給出了幾種有效的基于FPGA的譯碼器實(shí)現(xiàn)方法。在編碼器的實(shí)現(xiàn)上,如果直接采用生成矩陣編碼,那么算法復(fù)雜度將隨著碼長的增加以平方速度遞增,2001 年Richardson 等人[9]提出了一種簡化的編碼算法,但其所需的存儲(chǔ)和運(yùn)算量依然過于龐大。此后,學(xué)者們提出了一些結(jié)構(gòu)化的編碼方法,其中一種是設(shè)計(jì)生成矩陣也具備準(zhǔn)循環(huán)性質(zhì)的LDPC 碼,利用生成矩陣進(jìn)行編碼,文獻(xiàn)[10]給出了該方法的編碼電路;另一種方法是采用特殊結(jié)構(gòu)的準(zhǔn)循環(huán)校驗(yàn)矩陣進(jìn)行編碼,例如IEEE 802.16e (WiMAX),IEEE 802.11n(WLAN)等標(biāo)準(zhǔn)采用了一種雙對(duì)角結(jié)構(gòu)的準(zhǔn)循環(huán)校驗(yàn)矩陣進(jìn)行編碼,針對(duì)該結(jié)構(gòu),文獻(xiàn)[11]提出了一種快速遞歸編碼算法及該算法的并行硬件實(shí)現(xiàn)架構(gòu)。但現(xiàn)有的LDPC 碼編譯碼器設(shè)計(jì)方法都只針對(duì)編碼器或譯碼器單獨(dú)設(shè)計(jì),并各自優(yōu)化其吞吐量和FPGA資源,而實(shí)際的應(yīng)用系統(tǒng)多數(shù)屬于全雙工通信系統(tǒng),系統(tǒng)需要編碼器和譯碼器兩者同時(shí)工作,采用分離式設(shè)計(jì)將使得編碼器和譯碼器的硬件資源無法得到有效復(fù)用,導(dǎo)致FPGA資源的利用率不高。
本文針對(duì)IEEE 802.16e, IEEE 802.11n 等標(biāo)準(zhǔn)建議的LDPC 碼,提出了一種編碼器與譯碼器聯(lián)合設(shè)計(jì)方法,該方法使得編碼器能夠利用譯碼器在垂直運(yùn)算時(shí)閑置的校驗(yàn)計(jì)算電路進(jìn)行編碼。提出的實(shí)現(xiàn)結(jié)構(gòu)中,待編碼數(shù)據(jù)、待譯碼數(shù)據(jù)和譯碼碼字共用相同的存儲(chǔ)塊,編譯碼器的各處理單元共享同一組地址信息,有效減少了編譯碼系統(tǒng)對(duì)硬件資源的需求。
2 基于H 矩陣的LDPC 編碼
個(gè)矩陣與向量相乘的結(jié)果相加,且共有mb 個(gè)bi 向量需要求解,即便由于矩陣的結(jié)構(gòu)特性使得矩陣乘法可以使用向量的循環(huán)移位代替,其計(jì)算量仍然較大。而其它式子均為2~3 個(gè)向量的加和,其計(jì)算量實(shí)際較少,因此整個(gè)編碼器的計(jì)算復(fù)雜度主要集中于式(2)。通過對(duì)式(2)分析可知,bi 實(shí)際由H 矩陣每行對(duì)應(yīng)位為1 的各信息位相加得到,顯然,如果將碼字序列的校驗(yàn)位部分全部置零后利用H 矩陣求解其伴隨式,那么得到的伴隨式與bi 等效。因此可以利用系統(tǒng)中現(xiàn)存且閑置的校驗(yàn)計(jì)算電路,通過把校驗(yàn)位置零后計(jì)算伴隨式的方法將其復(fù)用到對(duì)信息位的編碼上。本文的編譯碼器資源復(fù)用方案即利用了這種校驗(yàn)計(jì)算電路編碼的思想進(jìn)行設(shè)計(jì)。
3 LDPC 碼的譯碼過程分析
下面以歸一化最小和算法為例,分析LDPC 碼的譯碼過程及常見的譯碼器實(shí)現(xiàn)方式,結(jié)果表明:常規(guī)LDPC 碼譯碼器實(shí)現(xiàn)中包含一校驗(yàn)計(jì)算電路,且由于譯碼算法本身的交替迭代性質(zhì)導(dǎo)致該校驗(yàn)計(jì)算電路在譯碼過程中有一半的時(shí)間處于空閑狀態(tài)。
現(xiàn)有的LDPC 碼譯碼器實(shí)現(xiàn)通常被劃分為3 個(gè)主要工作模塊[5?12] ,其中變量節(jié)點(diǎn)處理單元(VNU)完成垂直運(yùn)算,校驗(yàn)節(jié)點(diǎn)處理單元(CNU)完成水平運(yùn)算,校驗(yàn)方程計(jì)算單元(PCU)完成譯碼判決。從上面的譯碼過程可知,垂直運(yùn)算和水平運(yùn)算不能同時(shí)進(jìn)行,每次迭代中垂直運(yùn)算需要以水平運(yùn)算產(chǎn)生的作為輸入,水平運(yùn)算反過來又需要垂直運(yùn)算的結(jié)果,因此在同一時(shí)間里VNU與CNU必有一方空閑。另外,PCU 的校驗(yàn)處理必需安排在VNU 對(duì)信息更新完畢之后,但其與CNU 沒有數(shù)據(jù)處理交集,因此PCU 與CNU 通常被設(shè)計(jì)為并行工作。對(duì)于部分并行結(jié)構(gòu)的譯碼器,各模塊的并行度一般按照校驗(yàn)矩陣的分塊來劃分。對(duì)于子矩陣大小為z×z的校驗(yàn)陣,每輪迭代的前半部分各個(gè)VNU 對(duì)其對(duì)應(yīng)分塊的z 列變量節(jié)點(diǎn)順序進(jìn)行更新,若VNU 數(shù)據(jù)更新處理的流水線長度為Lv ,那么VNU 模塊在一次迭代中的工作總時(shí)長為z+Lv個(gè)系統(tǒng)時(shí)鐘周期。而PCU 則在CNU 處理的同時(shí)順序?qū) 行的校驗(yàn)和進(jìn)行加和,另外還需要Lp 個(gè)時(shí)鐘周期檢查伴隨式的各分量是否全部為0,因此CNU 模塊在一次迭代中的工作總時(shí)長為z+Lp 個(gè)系統(tǒng)時(shí)鐘周期。對(duì)于大部分校驗(yàn)陣,z 比Lv ,Lc 和Lp 要大得多,而且Lv ,Lc 和Lp 通常大小相近,或可以被設(shè)計(jì)為完全相等。比如為了運(yùn)算方便VNU 和CNU 通常需要用不同的數(shù)據(jù)形式(補(bǔ)碼和原碼)表示,而在實(shí)際設(shè)計(jì)中,可以選擇將原碼和補(bǔ)碼間的轉(zhuǎn)換安排在VNU或CNU 部分來達(dá)到兩者流水線長度的平衡。譯碼器各模塊的工作時(shí)序如圖1 所示。
由圖1 的工作時(shí)序可以看到,負(fù)責(zé)譯碼判決的PCU 只有在每次迭代的后半部分處于工作狀態(tài),而PCU 模塊主要由校驗(yàn)計(jì)算電路組成,根據(jù)第1節(jié)的討論,我們可以利用該校驗(yàn)計(jì)算電路在垂直運(yùn)算的空閑時(shí)間對(duì)信息位進(jìn)行編碼,從而提高整個(gè)編譯碼系統(tǒng)的資源利用率,達(dá)到減少硬件資源消耗量的目的。以上討論基于歸一化最小和算法,但對(duì)其它LDPC 譯碼算法其迭代過程類似,只有水平運(yùn)算和垂直運(yùn)算的計(jì)算處理有所變化,因此該資源共享的設(shè)計(jì)思路對(duì)一般譯碼算法具有通用性。
4 編譯碼器的聯(lián)合設(shè)計(jì)
4.1 編譯碼器復(fù)合結(jié)構(gòu)
本文利用編碼器和譯碼器在碼字校驗(yàn)計(jì)算上的可協(xié)作特性,針對(duì)二者的數(shù)據(jù)流向復(fù)用存儲(chǔ)資源,提出了如圖2 所示的編譯碼器復(fù)合結(jié)構(gòu)。該結(jié)構(gòu)包含3 個(gè)處理單元,其中變量節(jié)點(diǎn)處理單元(VNU)和校驗(yàn)節(jié)點(diǎn)處理單元(CNU)只作譯碼處理,校驗(yàn)方程計(jì)算單元/編碼校驗(yàn)位計(jì)算單元(PCU/ENC)被設(shè)計(jì)為一個(gè)時(shí)分復(fù)用模塊,在一半的處理時(shí)間里,它作為校驗(yàn)方程計(jì)算單元(PCU)檢查譯碼結(jié)果的合法性,另一半處理時(shí)間里,它作為編碼校驗(yàn)位計(jì)算單元(ENC)計(jì)算編碼產(chǎn)生的各校驗(yàn)位。存儲(chǔ)單元分為4 部分,分別是位寬為Q bit 的信道初始信息存儲(chǔ)塊RAM_F,位寬為Q+T+1 bit 的混合信息存儲(chǔ)塊RAM_M,位寬為kb bit 的譯碼碼字存儲(chǔ)塊RAM_C 和位寬為mb bit 的編碼校驗(yàn)位存儲(chǔ)塊RAM_P,其中Q 是譯碼器處理數(shù)據(jù)的量化比特?cái)?shù),T 是譯碼器最大迭代次數(shù)。
本文提出的復(fù)合編譯碼系統(tǒng)工作過程如下:
(1)初始化:將Q bit 的信道接收信息存儲(chǔ)到RAM_F 中,將T bit 的待編碼數(shù)據(jù)補(bǔ)零后擴(kuò)展為Q+T+1 bit 存入RAM_M,初始化迭代次數(shù)為0次。RAM_M存儲(chǔ)塊中的數(shù)據(jù)由3 部分組成,其中包括Q bit 的譯碼迭代外信息(即的更新結(jié)果),T bit 的待編碼數(shù)據(jù)和1 bit 的譯碼判決結(jié)果。初始化完成后RAM_M 中的迭代外信息和譯碼判決位均為全零。
?。?) 變量節(jié)點(diǎn)更新及編碼處理: 分別從RAM_F 和RAM_M中取出Q bit 的信道信息和迭代外信息送入VNU 處理,然后將更新得到的Q bit迭代外信息和1 bit 的譯碼碼字回寫到RAM_M中。其中譯碼碼字被重復(fù)存儲(chǔ)到RAM_M 和RAM_C 中,采用這樣的存儲(chǔ)結(jié)構(gòu)需要額外的一塊
RAM 資源作為RAM_C 的碼字輸出緩存,但它可以使得PCU 能夠從RAM_M 中迅速讀取判決所需的譯碼比特,且有效降低了電路的布線復(fù)雜度,從而提高運(yùn)行時(shí)鐘頻率,增大系統(tǒng)的編譯碼吞吐量。在變量節(jié)點(diǎn)更新的同時(shí), PCU/ENC 單元從RAM_M 讀出的數(shù)據(jù)中取出1 bit 待編碼信息進(jìn)行編碼,計(jì)算得到的校驗(yàn)比特存入RAM_P。需要說明的是系統(tǒng)編碼幀數(shù)是譯碼幀數(shù)的T 倍,T 是譯碼器的總迭代次數(shù),RAM_M中總共存儲(chǔ)T組信息序列,每次迭代中PCU/ENC 取出的待編碼比特對(duì)應(yīng)T 組不同的信息序列。如果需要等吞吐量的編譯碼系統(tǒng),可以通過屏蔽部分編碼處理得到。
?。?)校驗(yàn)節(jié)點(diǎn)更新及譯碼判決:從RAM_M 中取出Q bit 迭代外信息送入CNU 處理,處理結(jié)果回寫入RAM_M。同時(shí)從RAM_M 中取出變量節(jié)點(diǎn)更新得到的譯碼碼字,送入PCU/ENC 進(jìn)行碼字的合法性校驗(yàn)。如果校驗(yàn)滿足或達(dá)到最大迭代次數(shù),將RAM_C中的判決碼字作為譯碼結(jié)果輸出,否則轉(zhuǎn)到(2)繼續(xù)下一輪迭代處理。
這種結(jié)構(gòu)中待編碼數(shù)據(jù),待譯碼數(shù)據(jù)和譯碼碼字共用同一存儲(chǔ)塊,可以有效減少編譯碼器對(duì)存儲(chǔ)資源數(shù)量的要求,而且讀取一個(gè)存儲(chǔ)塊可以同時(shí)獲得編碼和譯碼所需的數(shù)據(jù),使得VNU, CNU 和PCU/ENC 3 個(gè)模塊可以共享相同的地址信息,避免了ENC 獨(dú)立產(chǎn)生讀寫地址所需的大量邏輯資源,這樣的設(shè)計(jì)同時(shí)也有效降低了運(yùn)算單元和存儲(chǔ)單元之間的布線復(fù)雜度。最后,T 路信息序列在不同迭代中分時(shí)復(fù)用ENC 進(jìn)行校驗(yàn)位的計(jì)算,能有效提高硬件資源的利用率和編碼器的吞吐量。
通過改變VNU, CNU 和PCU/ENC 運(yùn)算單元的數(shù)量,該復(fù)合結(jié)構(gòu)可以實(shí)現(xiàn)不同并行度的編譯碼器。當(dāng)VNU, CNU 和PCU/ENC 只設(shè)置一個(gè)運(yùn)算單元時(shí),整個(gè)編譯碼系統(tǒng)為串行架構(gòu),此時(shí)系統(tǒng)占用的硬件資源少,但編譯碼吞吐量也較低,適合硬件資源十分緊缺且對(duì)數(shù)據(jù)速率要求不高的實(shí)現(xiàn)平臺(tái)。當(dāng)VNU 運(yùn)算單元個(gè)數(shù)與碼長相等、CNU 和PCU/ENC 運(yùn)算單元數(shù)量為校驗(yàn)位個(gè)數(shù)時(shí),編譯碼系統(tǒng)為全并行架構(gòu),此時(shí)架構(gòu)中的存儲(chǔ)單元應(yīng)采用邏輯資源表示,系統(tǒng)的編譯碼吞吐量大,但要求大量的硬件資源,適合于短碼的實(shí)現(xiàn)。當(dāng)VNU 運(yùn)算單元個(gè)數(shù)與檢驗(yàn)矩陣的列分塊數(shù)一致,CNU 和PCU/ENC 運(yùn)算單元個(gè)數(shù)與行分塊數(shù)一致時(shí),編譯碼器為部分并行架構(gòu),此時(shí)系統(tǒng)可以達(dá)到硬件資源需求量和吞吐量的折中,適合于吞吐量較大的長LDPC 碼編譯碼器實(shí)現(xiàn)。
4.2 編譯碼器的碼長碼率兼容設(shè)計(jì)
在編譯碼器采用完全相同的校驗(yàn)矩陣進(jìn)行編譯碼的情況下,本文提出的復(fù)合結(jié)構(gòu)能夠?qū)⒄麄€(gè)PCU 的校驗(yàn)電路資源復(fù)用到編碼器的碼字計(jì)算上,從而節(jié)省編碼器所需的大部分硬件資源。典型的應(yīng)用有中繼通信和對(duì)等的點(diǎn)對(duì)點(diǎn)通信等,尤其在衛(wèi)星中繼通信中,由于低軌道中繼衛(wèi)星需要通過譯碼再生對(duì)高軌道衛(wèi)星的數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā),同時(shí)還需要將自身觀測(cè)得到的數(shù)據(jù)回傳到地面站,其要求的編碼吞吐量比譯碼吞吐量高,是該編譯碼器聯(lián)合設(shè)計(jì)方法應(yīng)用的一個(gè)理想場(chǎng)景。但在更多的實(shí)際應(yīng)用中,由于信道條件不對(duì)稱、設(shè)備的尺寸及功耗的約束不對(duì)等以及上下行業(yè)務(wù)需求不同等原因,通信系統(tǒng)的收發(fā)兩端很難采用完全一致的編譯碼體制。下面討論提出的復(fù)合結(jié)構(gòu)在編譯碼矩陣的碼長和碼率上的兼容設(shè)計(jì)。
當(dāng)編譯碼采用不同的校驗(yàn)矩陣時(shí),需要根據(jù)兩矩陣的差異性對(duì)復(fù)合結(jié)構(gòu)進(jìn)行修正,需要考慮的矩陣差異主要包括4 個(gè)方面:(1)矩陣對(duì)應(yīng)分塊的偏移量不相同;(2)對(duì)應(yīng)各分塊的行重列重不同及分布不一致;(3)矩陣的分塊數(shù)不相等;(4)子矩陣的大小不同。假設(shè)不同的兩校驗(yàn)矩陣H1 和H2 ,其中兩矩陣的公共部分標(biāo)記為A,矩陣H1 中獨(dú)立于H2 的部分標(biāo)記為B, H2 中獨(dú)立于H1 的部分標(biāo)記為C,如圖3所示。
首先,由于矩陣的偏移量不同并且各分塊間的偏移量差值不可能完全一致,這將導(dǎo)致對(duì)應(yīng)分塊的編碼和譯碼信息無法共用相同的RAM 和地址發(fā)生器。針對(duì)這一問題,可以對(duì)初始化編碼信息的存儲(chǔ)地址作一定的偏移來達(dá)到數(shù)據(jù)訪問的一致性。對(duì)于兩矩陣相同的情況,在數(shù)據(jù)初始化階段,RAM_M中對(duì)應(yīng)各矩陣分塊的各塊RAM 均從0 地址開始順序存入各編碼信息,而在譯碼迭代階段,編譯碼器則以公共偏移量作為初始地址順序讀寫子矩陣中的信息進(jìn)行計(jì)算。而對(duì)于兩矩陣不相同的情況,若編譯碼校驗(yàn)陣在同一位置的兩個(gè)子矩陣的向右循環(huán)移位次數(shù)分別為σ1 和σ2 ,那么在數(shù)據(jù)初始化階段,該分塊的RAM 可以將編碼矩陣和譯碼矩陣的地址差值作為初始地址對(duì)編碼信息進(jìn)行存儲(chǔ),具體操作時(shí)考慮到地址的循環(huán)移位性質(zhì),還需要對(duì)分塊大小進(jìn)行取模運(yùn)算, 即信息存儲(chǔ)首地址應(yīng)為(σ1?σ2)?modz ,這樣在譯碼迭代時(shí)就可以將譯碼矩陣的地址偏移量σ2 作為公共地址來讀取編譯碼信息。由于RAM 共用,改變編碼信息的寫入順序顯然需要同時(shí)更改初始譯碼外信息的存儲(chǔ)順序, 但是由于RAM_M 存儲(chǔ)塊中的各外信息部分的初始值均為0,因此信息位存儲(chǔ)的初始順序的改變實(shí)際并不擾亂譯碼初始信息的讀寫順序;其次,兩校驗(yàn)陣在行重和列重上的差異也會(huì)產(chǎn)生一些問題,在垂直運(yùn)算階段,由于VNU 和ENC 同時(shí)工作,相同列分塊的列重不同和分布不一致將使得編譯碼數(shù)據(jù)的訪問不一致,造成RAM 資源共用困難。而在水平運(yùn)算階段,由于CNU 和PCU 使用的同為譯碼矩陣,因此不存在矩陣差異對(duì)數(shù)據(jù)讀寫帶來的影響。另外,在垂直和水平運(yùn)算間需要復(fù)用校驗(yàn)計(jì)算電路,而行重不相同則會(huì)引起校驗(yàn)計(jì)算電路不通用。在具體的電路實(shí)現(xiàn)中,由于存儲(chǔ)的編譯碼數(shù)據(jù)是經(jīng)過拆分和組合后讀出或?qū)懭氲?,因此并非必須相同位置的矩陣分塊才能共享RAM 存儲(chǔ),實(shí)際上只要在垂直運(yùn)算階段兩矩陣在同一列分塊的列重相等即可組合共用相同的RAM,而兩矩陣對(duì)應(yīng)列分塊的列重不同則可以通過列分塊的交換來緩解,這是由于校驗(yàn)陣的列交換不改變碼本空間,對(duì)于最后無法通過列分塊解決的列重不相等則需要放棄RAM 共用。對(duì)于行重不同引起的校驗(yàn)計(jì)算電路不通用,可以在校驗(yàn)計(jì)算電路中實(shí)現(xiàn)較大的行重,在處理行重較小的校驗(yàn)矩陣時(shí)作屏蔽處理來解決問題;還有,矩陣的分塊數(shù)不相等會(huì)對(duì)資源復(fù)用帶來較大的影響,顯然只有兩個(gè)矩陣的交集部分(區(qū)域A)能夠采用資源復(fù)用設(shè)計(jì),其余各矩陣的獨(dú)立部分(區(qū)域B 和區(qū)域C)則需要分開設(shè)計(jì),需要注意的是,考慮編碼矩陣的區(qū)域范圍時(shí)只需考慮系統(tǒng)位部分,因?yàn)榫幋a時(shí)校驗(yàn)位部分本身就需要通過置零的方式進(jìn)行屏蔽,而對(duì)于編碼矩陣中與譯碼矩陣不重合的部分在校驗(yàn)計(jì)算電路上可以直接舍去校驗(yàn)位的加和;最后,對(duì)于子矩陣大小不同的情況,雖然也可以通過資源復(fù)用來達(dá)到節(jié)約資源的目的,但從圖1 的時(shí)序分析可以知道,子矩陣的大小不同將引起各模塊計(jì)算時(shí)間的不相等,造成時(shí)隙等待,從而增加控制上的復(fù)雜度,并且會(huì)造成吞吐量的降低。而從碼構(gòu)造上看,矩陣的分塊大小并不會(huì)對(duì)碼性能構(gòu)成大的約束,因此子矩陣大小差異的問題通過構(gòu)造分塊大小相等的編譯碼矩陣來解決顯然更加合適。
5 硬件實(shí)現(xiàn)結(jié)果
采用提出的編譯碼器聯(lián)合設(shè)計(jì)方法對(duì)兩組不同的LDPC 碼編譯碼器進(jìn)行部分并行結(jié)構(gòu)的實(shí)現(xiàn),第1 組編譯碼均采用碼長為2304 bit,碼率為5/6 的LDPC 碼;第2 組編譯碼采用不同的校驗(yàn)矩陣,兩矩陣的分塊大小相同,其中譯碼采用16800 bit 的1/2 碼率LDPC 碼,編碼采用8400 bit 的3/4 碼率LDPC 碼。芯片使用Xilinx 公司的XC4VLX80FPGA,在ISE 10.1 平臺(tái)上進(jìn)行邏輯綜合和布局布線,在ModelSim 6.2 上進(jìn)行功能仿真和時(shí)序仿真。兩個(gè)譯碼器均采用4 bit 均勻量化,譯碼算法采用歸一化最小和算法,歸一化修正因子α 選擇為0.75,最大迭代次數(shù)均為10 次。圖4 是在AWGN信道,BPSK調(diào)制條件下,沒有量化的50 次和積迭代譯碼和量化后的歸一化最小和譯碼的性能對(duì)比。
對(duì)于兩組編譯碼器實(shí)現(xiàn),表1 分別列出了單個(gè)編碼器、單個(gè)譯碼器和聯(lián)合設(shè)計(jì)的編譯碼器三者的資源使用情況及系統(tǒng)的信息吞吐量。除了采用提出的編譯碼復(fù)合結(jié)構(gòu)以外,聯(lián)合設(shè)計(jì)的編譯碼器和單個(gè)編譯碼器實(shí)現(xiàn)使用的設(shè)計(jì)優(yōu)化技術(shù)均相同。對(duì)于碼率為5/6 的第1 組實(shí)現(xiàn),獨(dú)立設(shè)計(jì)和聯(lián)合設(shè)計(jì)兩種情況下編譯碼器均滿足5 ns 的布局布線約束,工作時(shí)鐘頻率為200 MHz。從表1 的數(shù)據(jù)可見,聯(lián)合設(shè)計(jì)的編譯碼器消耗的系統(tǒng)資源僅略多于單個(gè)譯碼器實(shí)現(xiàn),其中邏輯資源多0.1%, BRAM 資源多2塊,而在編譯碼器分開設(shè)計(jì)的情況下,單獨(dú)設(shè)計(jì)一個(gè)編碼器需要消耗6.6%的芯片邏輯資源及14 塊BRAM資源,采用復(fù)合結(jié)構(gòu)設(shè)計(jì)可以節(jié)省約30%的
邏輯資源和10%的BRAM 資源。對(duì)于編譯碼矩陣不同的第2 組實(shí)現(xiàn),獨(dú)立設(shè)計(jì)時(shí)編譯碼器的工作時(shí)鐘頻率分別可達(dá)222 MHz 和200 MHz,聯(lián)合設(shè)計(jì)時(shí)系統(tǒng)工作主頻稍有降低,為196 MHz。聯(lián)合設(shè)計(jì)的編譯碼器消耗的系統(tǒng)邏輯資源比單個(gè)譯碼器多0.3%, BRAM 資源多2 塊,與分開設(shè)計(jì)的情況相比可節(jié)省約25%的邏輯資源和12%的BRAM 資源。在本文提出的編譯碼器復(fù)合結(jié)構(gòu)中,編碼器的絕大部分資源由譯碼器共享得到,因而減少了編碼器對(duì)硬件資源的額外需求,從而顯著提高了FPGA資源的利用率。
該復(fù)合結(jié)構(gòu)主要從工作時(shí)序上對(duì)編碼器和譯碼器的各組成部分作資源復(fù)用,除了要求RAM 的位寬較一般的譯碼器位寬寬以外,其它主要的譯碼模塊的設(shè)計(jì)與現(xiàn)有的設(shè)計(jì)技術(shù)不沖突,多數(shù)的其它設(shè)計(jì)優(yōu)化方法都可以應(yīng)用到本結(jié)構(gòu)中,該設(shè)計(jì)僅利用了譯碼工作時(shí)的空閑時(shí)序進(jìn)行額外計(jì)算。從設(shè)計(jì)原理上看,對(duì)各模塊增加資源復(fù)用設(shè)置只需要在原有電路上增加一些選通開關(guān),對(duì)譯碼電路的布線復(fù)雜度影響較少,因此對(duì)整個(gè)編譯碼系統(tǒng)的工作頻率及吞吐量影響也較少,具體的實(shí)現(xiàn)結(jié)果也表明了這一點(diǎn)。該資源復(fù)用方案適用于一般的編譯碼系統(tǒng),能夠達(dá)到節(jié)省系統(tǒng)資源而基本不降低編譯碼吞吐量的目的,其資源復(fù)用程度只與編碼和譯碼采用的校驗(yàn)矩陣的相似度有關(guān),而與系統(tǒng)具體使用的LDPC 碼的碼長和碼率等參數(shù)沒有關(guān)系。從兩組編譯碼器的實(shí)現(xiàn)結(jié)果可以看到,對(duì)于第1 組高碼率短幀長LDPC 碼和第2 組碼率較低的LDPC 長碼,提出的聯(lián)合設(shè)計(jì)方法都能夠在節(jié)省資源的同時(shí)實(shí)現(xiàn)與獨(dú)立設(shè)計(jì)的編譯碼器相當(dāng)?shù)耐掏铝?,而? 組實(shí)現(xiàn)由于使用完全相同的校驗(yàn)矩陣進(jìn)行編譯碼,其資源節(jié)約百分比明顯要高于編譯碼矩陣不同的第2 組實(shí)現(xiàn)。需要說明的是,編譯碼器所能夠?qū)崿F(xiàn)的吞吐量大小只與采用的LDPC 碼結(jié)構(gòu)和具體模塊的設(shè)計(jì)有關(guān),而該資源復(fù)用結(jié)構(gòu)僅提供一種不降低吞吐量的資源復(fù)用設(shè)計(jì),正如給出的兩個(gè)實(shí)現(xiàn)例子中,第1 組實(shí)現(xiàn)的吞吐量明顯要高于第2 組,但并不表明該方法更適合于高碼率短碼的編譯碼器設(shè)計(jì),也不表明該方法能夠使高碼率譯碼器的吞吐量做得更高,這是由于編譯碼系統(tǒng)本身選用的參數(shù)不同而導(dǎo)致吞吐量大小的差異,第1 組實(shí)現(xiàn)的編碼并行度本身要高于第2 組,且計(jì)算信息吞吐量時(shí),高碼率LDPC 碼的信息位比例要較低碼率情況時(shí)高,因此在相同的幀處理速度下,高碼率碼可實(shí)現(xiàn)的信息吞吐量也高。綜上所述,與分離式設(shè)計(jì)相比,本文提出的聯(lián)合設(shè)計(jì)方法能夠在不降低系統(tǒng)吞吐量的前提下減少硬件資源的需求量,特別適用于資源受限的硬件平臺(tái)。
6 結(jié)論
本文分析了準(zhǔn)循環(huán)雙對(duì)角結(jié)構(gòu)LDPC 碼的編譯碼過程,利用譯碼器在垂直運(yùn)算時(shí)閑置的校驗(yàn)計(jì)算電路,通過把校驗(yàn)位置零后計(jì)算伴隨式的方法將其復(fù)用到編碼器的碼字計(jì)算中,提出了一種利用校驗(yàn)矩陣編譯碼的編譯碼器聯(lián)合設(shè)計(jì)方法。該方法使得編譯碼器共享相同的RAM 存儲(chǔ)塊及地址產(chǎn)生器,有效減少了實(shí)現(xiàn)所需的存儲(chǔ)資源和邏輯資源。在Xilinx XC4VLX80 FPGA 上的實(shí)現(xiàn)結(jié)果表明,聯(lián)合設(shè)計(jì)的編譯碼器能夠進(jìn)行高速編譯碼,且僅占用略多于單個(gè)譯碼器的硬件資源,提出的設(shè)計(jì)方法能夠在不降低系統(tǒng)吞吐量的同時(shí)減少對(duì)硬件資源的需求量。
評(píng)論