謝天嬌, 李波, 楊懋, 閆中江
(1.西北工業(yè)大學(xué) 電子信息學(xué)院, 陜西 西安 710072; 2.中國(guó)空間技術(shù)研究院西安分院, 陜西 西安 710010)
近年來(lái)由于誤碼率(bit error rate,BER)性能非常接近香農(nóng)極限和內(nèi)在的并行譯碼特性,低密度奇偶校驗(yàn)(low density parity check codes,LDPC)碼[1]引起了極大的關(guān)注。作為L(zhǎng)DPC的一個(gè)特殊子類,準(zhǔn)循環(huán)LDPC(quasi-cyclic LDPC,QC-LDPC)碼不僅具有與隨機(jī)LDPC相比擬的性能,而且可以方便地采用移位寄存器編碼[2],有效地采用部分并行譯碼器架構(gòu)進(jìn)行譯碼[3-11]。因此,QC-LDPC碼已被作為最近的先進(jìn)通信和存儲(chǔ)系統(tǒng)的前向糾錯(cuò)編碼標(biāo)準(zhǔn),如數(shù)字視頻廣播(DVB-S2)、中國(guó)移動(dòng)多媒體廣播(CMMB)、廣義無(wú)線接入網(wǎng)(WIMAX)、無(wú)線局域網(wǎng)(WiFi)及空間通信(CCSDS)等標(biāo)準(zhǔn)。
由于準(zhǔn)循環(huán)結(jié)構(gòu)的LDPC碼在硬件實(shí)現(xiàn)復(fù)雜度和譯碼吞吐量之間具有好的折衷性,現(xiàn)階段有許多關(guān)于QC-LDPC譯碼器的研究,其中對(duì)存儲(chǔ)有效的部分并行架構(gòu)的研究尤其多(見(jiàn)文獻(xiàn)[3-11])。然而,一般來(lái)說(shuō),LDPC碼要具有優(yōu)異的譯碼性能其碼長(zhǎng)一般較長(zhǎng)(例如幾千比特),且需要采用基于置信度傳播的迭代軟判決譯碼算法,在譯碼迭代過(guò)程中必須使用存儲(chǔ)器存儲(chǔ)大量的中間運(yùn)算數(shù)據(jù),因此,需占據(jù)大量的硬件資源,這將極大地限制譯碼器的吞吐量性能,為了降低存儲(chǔ)資源且不損失誤碼性能,現(xiàn)階段提出了許多有效的架構(gòu)[3-11]。文獻(xiàn)[3]采用多個(gè)運(yùn)算單元同時(shí)處理來(lái)自不同m個(gè)行塊的(或n個(gè)列塊)的信息,需要m×n個(gè)存儲(chǔ)器來(lái)存儲(chǔ)判決信息,文獻(xiàn)[4]中,在PCU(parity computer unit)階段,可以觀察到硬判決存儲(chǔ)器僅為讀模式,采用雙端口存儲(chǔ)器將硬判決存儲(chǔ)器個(gè)數(shù)可以減半,即「m/2?×n個(gè)。文獻(xiàn)[5]采用的譯碼架構(gòu)沒(méi)有考慮伴隨式為零提前終止譯碼的情況,會(huì)消耗大量功耗且不利于空閑時(shí)序的充分利用[6],文獻(xiàn)[7-9]均采用BRAM來(lái)實(shí)現(xiàn)譯碼器架構(gòu),而這些考慮提前終止譯碼器的文章中均需要額外的存儲(chǔ)器來(lái)存儲(chǔ)硬判決碼字,一般來(lái)說(shuō),這些硬判決碼字占整個(gè)譯碼器存儲(chǔ)塊比例較大,本文作者在文獻(xiàn)[10-11]中計(jì)算了這部分存儲(chǔ)資源占總資源的比例,并給出了中低速Q(mào)C-LDPC譯碼器如何來(lái)節(jié)省這部分資源的存儲(chǔ)方法。
以前期工作[10-11]的研究為基礎(chǔ),本文提出了硬判決碼字與外信息共享存儲(chǔ)器和硬判決待輸出碼字信息緊縮的2種存儲(chǔ)方法及其對(duì)應(yīng)的高速譯碼器架構(gòu),可無(wú)存儲(chǔ)訪問(wèn)沖突地應(yīng)用于任意并行度的QC-LDPC譯碼器。本文提出的這種緊縮性存儲(chǔ)策略不僅需要的存儲(chǔ)塊資源更少,而且能節(jié)省訪問(wèn)多個(gè)存儲(chǔ)器的地址資源,這就保證了本架構(gòu)的QC-LDPC譯碼器能在有限的FPGA資源中實(shí)現(xiàn)更高的譯碼吞吐量。
LDPC碼可以用一個(gè)M×N的稀疏校驗(yàn)矩陣H來(lái)描述,H矩陣中大部分元素是0,只有少部分1。M表示校驗(yàn)方程的個(gè)數(shù),也表示校驗(yàn)節(jié)點(diǎn)的個(gè)數(shù)。而N表示碼長(zhǎng)及變量節(jié)點(diǎn)的個(gè)數(shù)。矩陣行中1的個(gè)數(shù)為行重dc,列中1的個(gè)數(shù)為列重dv。當(dāng)dc和dv為常數(shù)時(shí)LDPC碼為規(guī)則LDPC碼,否則為非規(guī)則LDPC碼。
最常用的LDPC碼是QC-LDPC碼,QC-LDPC碼的H矩陣結(jié)構(gòu)可以被分為m×n個(gè)子矩陣,即基矩陣,每個(gè)基矩陣均為L(zhǎng)×L的方陣,即M=m×L和N=n×L?;仃噈×n中的每個(gè)1元素均可由一個(gè)L×L的單位矩陣向右循環(huán)移位來(lái)擴(kuò)展。這種結(jié)構(gòu)的校驗(yàn)矩陣使硬件設(shè)計(jì)時(shí)很容易確定非零元素的位置,它使Tanner圖的隨機(jī)連接變得有規(guī)律易處理。因此,QC-LDPC碼的這些特性使它非常適合硬件實(shí)現(xiàn)。
(1)
這里引入歸一化因子α來(lái)補(bǔ)償MSA簡(jiǎn)化SPA的損失。Qmn是變量節(jié)點(diǎn)到校驗(yàn)節(jié)點(diǎn)的信息(V2C),N(m)表示與校驗(yàn)節(jié)點(diǎn)m相連的變量節(jié)點(diǎn)集合。N(m) 表示不包括變量節(jié)點(diǎn)n與校驗(yàn)節(jié)點(diǎn)m相連的變量節(jié)點(diǎn)集合。
(2)
(3)
M(n)表示與變量節(jié)點(diǎn)n相連的校驗(yàn)節(jié)點(diǎn)集合,即H矩陣第n列中1對(duì)應(yīng)的校驗(yàn)節(jié)點(diǎn);同理M(n)m表示從集合M(n)中去掉元素m之后的子集。Cn表示連接變量節(jié)點(diǎn)n的信道信息(或內(nèi)信息)。
Cn=ln(P(xn=0|yn)/P(xn=1|yn))
(4)
這里C2V和V2C均為外信息。譯碼將一直重復(fù)迭代直到校驗(yàn)方程(由校驗(yàn)方程計(jì)算模塊(PCU)來(lái)判斷)滿足或達(dá)到預(yù)先設(shè)定的最大迭代次數(shù)為止。
對(duì)于一個(gè)規(guī)則QC-LDPC碼的校驗(yàn)矩陣,它由m×n個(gè)行列重均為1的L×L子矩陣構(gòu)成。類似于文獻(xiàn)[3-4]中典型的部分并行譯碼器架構(gòu),如圖1所示。
圖1 傳統(tǒng)的QC-LDPC譯碼器結(jié)構(gòu)框圖
m個(gè)n輸入CNUs,n個(gè)m+1輸入VNUs和m個(gè)n輸入PCUs聯(lián)合完成譯碼器的處理過(guò)程。這里PCUs表示校驗(yàn)方程判決單元,來(lái)進(jìn)行校驗(yàn)方程計(jì)算和迭代判決功能。CNUs,VNUs和PCUs統(tǒng)稱為處理單元PUs。除了PUs,本架構(gòu)還需要m×n個(gè)RAMM存儲(chǔ)器Ms,t(1≤s≤m,1≤t≤n)用來(lái)存儲(chǔ)VNUt和CNUs處理過(guò)程中交換的外信息。n個(gè)RAMF存儲(chǔ)塊Ft(1≤t≤n)用來(lái)存儲(chǔ)信道信息。m×n個(gè)RAMC存儲(chǔ)器Cs,t(1≤s≤m,1≤t≤n)用來(lái)存儲(chǔ)判決信息。這里,Q表示采用Qbits量化。為了避免數(shù)據(jù)訪問(wèn)沖突,所有的存儲(chǔ)塊均采用雙端口RAM,一個(gè)端口讀另外一個(gè)端口寫。每個(gè)存儲(chǔ)塊包含L個(gè)存儲(chǔ)單元。
對(duì)于QC-LDPC碼,存儲(chǔ)器RAMM的地址產(chǎn)生器可以簡(jiǎn)化,在VNU階段,地址產(chǎn)生器連續(xù)產(chǎn)生地址0,1,…,L。在CNU和PCU階段,地址產(chǎn)生器順序產(chǎn)生地址βs,t,βs,t+1,…0,1,…βs,t-1。這里βs,t為QC-LDPC碼的循環(huán)移位值。因此,地址產(chǎn)生器可以簡(jiǎn)單地用模L計(jì)數(shù)器來(lái)實(shí)現(xiàn)。每個(gè)RAMM存儲(chǔ)器連接一個(gè)模L計(jì)數(shù)器來(lái)產(chǎn)生相應(yīng)的存儲(chǔ)器地址。
PCU用來(lái)做校驗(yàn)方程計(jì)算,顯然,PCUs和CNUs 是同時(shí)進(jìn)行工作的,因?yàn)楫?dāng)VNUs為CNUs產(chǎn)生外信息時(shí),它同時(shí)產(chǎn)生校驗(yàn)方程所需要的硬判決信息(見(jiàn)公式(3))。為了匹配 CNUs和VNUs的并行度,類似于CNUs,m個(gè)PCUs同時(shí)對(duì)m個(gè)行塊的校驗(yàn)方程進(jìn)行計(jì)算,而m個(gè)行塊內(nèi)的校驗(yàn)方程串行進(jìn)行計(jì)算。每個(gè)PCUs需要n個(gè)硬判決信息,所以在一個(gè)時(shí)鐘周期需要從存儲(chǔ)器中同時(shí)讀出m×n個(gè)硬判決信息。為了避免上面描述的存儲(chǔ)器訪問(wèn)沖突,一個(gè)直接的方法[3]是采用m×n個(gè)Cs,t(1≤s≤m,1≤t≤n)來(lái)存儲(chǔ)判決信息,每個(gè)存儲(chǔ)單元存儲(chǔ)位寬為1 b,深度為L(zhǎng)。在Xilinx FPGA中,一個(gè)18 kb block RAM構(gòu)成一個(gè)存儲(chǔ)塊。所以僅PCU就需要m×n個(gè)存儲(chǔ)器,按照傳統(tǒng)的QC-LDPC譯碼器架構(gòu),譯碼器共需要2m×n+n個(gè)存儲(chǔ)器。
在前期研究的文獻(xiàn)[4]中,也考慮了降低硬判決存儲(chǔ)塊的方法,在PCU階段,可以觀察到硬判決存儲(chǔ)器僅采用讀模式,因?yàn)椴捎昧穗p端口存儲(chǔ)器,所以硬判決存儲(chǔ)器個(gè)數(shù)可以減半,即「m/2?×n個(gè)。這種改進(jìn)方法將譯碼器總存儲(chǔ)個(gè)數(shù)降為m×n+「m/2?×n+n個(gè)。
在FPGA實(shí)現(xiàn)時(shí),另外一種采用長(zhǎng)位寬的移位寄存器來(lái)存儲(chǔ)硬判決信息,不僅占用大量的邏輯資源,而且導(dǎo)致極大的關(guān)鍵路徑延遲,這對(duì)高速設(shè)計(jì)是很不利的。
然而,我們觀察到當(dāng)CNU和PCU同時(shí)工作時(shí),相應(yīng)的m×n個(gè)外信息(確切來(lái)說(shuō)是變量節(jié)點(diǎn)到校驗(yàn)節(jié)點(diǎn)的信息,即V2C)和m×n個(gè)硬判決信息需要從Ms,t和Cs,t中分別讀出。同時(shí),很關(guān)鍵的一點(diǎn)是CNU所需的外信息和PCU所需的判決信息來(lái)自于相同的行,所以CNU和PCU需要從存儲(chǔ)器的同一個(gè)地址βs,t,βs,t+1,…,L-1,0,1,…,βs,t-1中讀取數(shù)據(jù)。
從上面的分析,與傳統(tǒng)的分開(kāi)存儲(chǔ)外信息和硬判決信息的方法不同,我們采用將2種外信息和判決信息封裝到同一個(gè)存儲(chǔ)單元,取決于它們的地址相同,所以可以避免存儲(chǔ)器訪問(wèn)沖突。外信息和硬判決信息合并的存儲(chǔ)器RAMMC定義為MCs,t,如圖2所示。當(dāng)并行度p>1時(shí),MCs,t的位寬為p×(Q+1),深度為「L/p?。因此,合并的存儲(chǔ)器RAMMC占用了m×n個(gè)18 kb BRAM。
更進(jìn)一步,這種方法的另外一個(gè)優(yōu)點(diǎn)是,CNUs和PCUs可以共享同一組地址產(chǎn)生器,可以節(jié)省m×n個(gè)?!窵/p?的計(jì)數(shù)器資源。
圖2 提出新的存儲(chǔ)外信息和判決信息的存儲(chǔ)器MCs,t
然而,上面的硬判決和外信息共享的存儲(chǔ)策略會(huì)導(dǎo)致一個(gè)問(wèn)題,當(dāng)校驗(yàn)方程滿足或預(yù)先設(shè)定的最大迭代次數(shù)到達(dá)時(shí),硬判決信息將作為最終的譯碼結(jié)果輸出。而RAMMC存儲(chǔ)器的2個(gè)端口總是同時(shí)被CNU(PCU)或VNU的輸入輸出占據(jù)著,如果想從RAMMC存儲(chǔ)器提取硬判決輸出,會(huì)導(dǎo)致存儲(chǔ)器訪問(wèn)沖突。為了解決這個(gè)問(wèn)題,在VNU階段,在處理器的輸出寫入RAMMC的同時(shí),n個(gè)硬判決信息應(yīng)寫入存儲(chǔ)器RAMC。這個(gè)存儲(chǔ)器RAMC在輸出時(shí)僅為讀模式,定義為C,它采用了緊縮性存儲(chǔ)方法。然而,與RAMMC合并封裝外信息和硬判決信息不同,RAMC將n個(gè)硬判決信息封裝到同一個(gè)存儲(chǔ)單元中,如圖3所示。在輸出階段,從存儲(chǔ)塊C可以同時(shí)取出n個(gè)硬判決信息。所有的碼字(硬判決信息)通過(guò)分別選擇每個(gè)列塊的n個(gè)硬判決信息來(lái)實(shí)現(xiàn)每個(gè)時(shí)鐘周期pb的輸出。在并行度為p>1的情況下,存儲(chǔ)器C的位寬為p×n,深度為「m/2?。因此在Xilinx FPGA,RAMC僅需要1~2塊18 kb BRAM。加上m×n個(gè)RAMM存儲(chǔ)塊,本文的譯碼器需要m×n+n+1≈m×n+n個(gè)存儲(chǔ)塊,可以減少m×n個(gè)存儲(chǔ)塊。
圖3 新的存儲(chǔ)硬判決信息的存儲(chǔ)器C
本節(jié)采用上文提出的存儲(chǔ)器緊縮策略,在Xilinx FPGA Virtex 5 XC5VLX330上來(lái)實(shí)現(xiàn)CCSDS標(biāo)準(zhǔn)中近地QC-LDPC(8 176,7 156)碼作為一個(gè)實(shí)例。
CCSDS標(biāo)準(zhǔn)中近地QC-LDPC(8 176,7 156)的校驗(yàn)矩陣是一個(gè)規(guī)則碼,其列重為4,行重為32[14],該校驗(yàn)矩陣由m×n=2×16個(gè)循環(huán)基矩陣Ai,j構(gòu)成,這里L(fēng)=511,Ai,j的每行每列中均有2個(gè)非零元素,即Ai,j的行列重均為2,校驗(yàn)矩陣如公式(5)所示,校驗(yàn)矩陣的分布圖如圖4所示,圖4中的每個(gè)點(diǎn)表示校驗(yàn)矩陣中的一個(gè)1。
(5)
圖4 校驗(yàn)矩陣分布圖
為了提高吞吐量,采用p>1的并行度,該架構(gòu)可以簡(jiǎn)單地應(yīng)用到p=1的低并行度情況。這個(gè)并行度p表示每個(gè)處理單元PUs同時(shí)對(duì)校驗(yàn)矩陣1元素對(duì)應(yīng)的p行(或p列)進(jìn)行處理。
圖5給出了緊縮性存儲(chǔ)的QC-LDPC譯碼器架構(gòu),外信息與硬判決信息的位寬為(Q+1)pb,及H矩陣p列硬判決信息封裝在一起對(duì)應(yīng)的信息位寬為npb,分別存儲(chǔ)于存儲(chǔ)單元RAMMC和RAMC中。為了將數(shù)據(jù)緊縮或從緊縮的數(shù)據(jù)中恢復(fù)出各自的外信息和硬判決信息,引入合并/拆分模塊。每個(gè)RAMF用來(lái)存儲(chǔ)H矩陣p個(gè)列塊對(duì)應(yīng)的信道信息。在提出的架構(gòu)中,精確來(lái)說(shuō)有2種外信息:變量節(jié)點(diǎn)到校驗(yàn)節(jié)點(diǎn)的信息(V2C)和校驗(yàn)節(jié)點(diǎn)到變量節(jié)點(diǎn)的信息(C2V)。但只有V2C合并硬判決信息存儲(chǔ)于RAMMC。本文提出的譯碼器處理步驟如下:
初始化:
將從信道接收到的一幀信道信息存儲(chǔ)到存儲(chǔ)塊Ft,將所有的存儲(chǔ)塊MCs,t里面的內(nèi)容初始化為零。數(shù)據(jù)是按列的順序存儲(chǔ)在Ft,C和MCs,t中,這里先進(jìn)行變量節(jié)點(diǎn)的更新,因?yàn)榇鎯?chǔ)塊MCs,t里面的內(nèi)容初始化為零。同樣的,如果初始化存儲(chǔ)塊MCs,t=Ft,則校驗(yàn)節(jié)點(diǎn)就先進(jìn)行更新。初始化迭代次數(shù)i=1。
圖5 提出的緊縮性QC-LDPC譯碼器架構(gòu)
迭代譯碼:
變量節(jié)點(diǎn)的更新:在VNU階段,來(lái)至存儲(chǔ)器RAMMC的Qpb的C2V信息和存儲(chǔ)器RAMF的Qpb信道信息同時(shí)發(fā)送給VNUs,經(jīng)過(guò)VNU計(jì)算處理后,更新的Qpb的V2C信息和來(lái)至于后驗(yàn)概率符號(hào)的p比特的硬判決信息,經(jīng)合并/拆分模塊合并為(Q+1)pb后寫回至與讀同樣地址的存儲(chǔ)器RAMMC中,地址順序?yàn)?,1,…,「L/p?。
校驗(yàn)節(jié)點(diǎn)的更新和校驗(yàn)方程的計(jì)算(CNU-PCU):PCU與CNU是同時(shí)進(jìn)行工作的。類似地,在PCU和CNU階段,(Q+1)pb的緊縮信息同時(shí)從存儲(chǔ)器RAMMC中讀出,并通過(guò)合并/拆分模塊恢復(fù)出2種信息,Qpb的V2C信息和pb的硬判決信息,分別送入CNU和PCU進(jìn)行計(jì)算,更新的Qpb的V2C寫回至與讀同樣地址的存儲(chǔ)器,地址順序?yàn)椤甫聅,t/p?,「βs,t+1/p?,…,「βs,t-1/p?。同時(shí),PCU計(jì)算出來(lái)的伴隨式送入停止準(zhǔn)則。
判決:如果停止準(zhǔn)則滿足或者到達(dá)預(yù)先設(shè)定的最大迭代次數(shù),跳轉(zhuǎn)出迭代譯碼并將npb的硬判決信息輸出;否則,繼續(xù)迭代譯碼。
文獻(xiàn)中有很多關(guān)于處理模塊的實(shí)現(xiàn)技術(shù),如文獻(xiàn)[3-11]。類似這些實(shí)現(xiàn)方法,均采用降低關(guān)鍵路徑延遲來(lái)提高時(shí)鐘頻率fclk,在CNU和VNU中需要插入多級(jí)流水線。在本文中,假設(shè)CNU和VNU分別插入c級(jí)和v級(jí)流水線。當(dāng)關(guān)鍵路徑延遲相同時(shí),行重dc越重,c越大,同理,列重dv越重,v越大。從上面的譯碼過(guò)程中可以看到,本文的譯碼器一次迭代共需要v+c+2「L/p?個(gè)時(shí)鐘周期。
本節(jié)通過(guò)實(shí)現(xiàn)CCSDS標(biāo)準(zhǔn)近地QC-LDPC譯碼器來(lái)驗(yàn)證我們提出的緊縮性譯碼器架構(gòu)的優(yōu)勢(shì),采用NMSA譯碼算法,硬件平臺(tái)采用Xilinx XC4VLX160 FPGA,綜合和實(shí)現(xiàn)均采用ISE 14.7工具。
對(duì)于LDPC譯碼器,CNUs更新行對(duì)應(yīng)的信息,行重為32,m=2,所以譯碼器需要2p個(gè)32輸入的CNUs,p為譯碼器的并行度,本設(shè)計(jì)中的譯碼器p=8。同理,VNUs更新列對(duì)應(yīng)的信息,列重為4,n=16,所以譯碼器需要16p個(gè)(4+1)輸入的VNUs。
如圖5所示,本文的譯碼器包括3種存儲(chǔ)器,分別是RAMF用來(lái)存儲(chǔ)信道信息,RAMMC用來(lái)存儲(chǔ)外信息和硬判決信息,RAMC用來(lái)存儲(chǔ)待輸出的硬判決信息。在本文的架構(gòu)中,存儲(chǔ)器的深度均為2「L/p?=128,采用2倍的「L/p?深度使譯碼器接收信道信息的同時(shí)可以進(jìn)行譯碼,而CNUs和VNUs對(duì)不同幀的數(shù)據(jù)交替處理。采用這種方法,譯碼器可以同時(shí)接收信道信息、譯碼和輸出譯碼結(jié)果。量化比特?cái)?shù)Q=6 b,這3種存儲(chǔ)器的位寬卻不同,RAMF為Qp=48 b,RAMMC為(Q+1)p=56 b,RAMCnp=128 b。綜上,需要n=16個(gè)位寬為48 b深度為128的存儲(chǔ)器用來(lái)存儲(chǔ)信道信息,共16×48×128=96 kb。1個(gè)位寬為128 b深度為128的存儲(chǔ)器用來(lái)存儲(chǔ)信道信息,共128×128=16 kb。而外信息存儲(chǔ)器的個(gè)數(shù)與校驗(yàn)矩陣基矩陣中非零的個(gè)數(shù)64成正比,共64×56×128=448 kb。因此,存儲(chǔ)器總數(shù)為96+16+448=560 kb。本文的譯碼器共使用了16+64+2=82個(gè)存儲(chǔ)塊,占用164個(gè)18 kb雙端口BRAMs。
為了提高硬件利用率,2類處理單元采用重疊交替對(duì)2幀數(shù)據(jù)進(jìn)行譯碼[4],CNU和VNU均采用c=v=7級(jí)流水線,所以譯碼器在一次迭代中總共需要v+c+2「L/p?=142個(gè)時(shí)鐘,當(dāng)信道信息并行4路輸入時(shí),接收完整的1幀需要8 176/4=2 044個(gè)時(shí)鐘,所以,最大迭代次數(shù)為Im=「2 044/142?=14次?,F(xiàn)階段,LDPC一般與QPSK等二維調(diào)制方式相結(jié)合,此時(shí)譯碼器同時(shí)接收2路數(shù)據(jù)(I,Q)對(duì)應(yīng)的幀。本文采用計(jì)算機(jī)仿真的方法對(duì)量化譯碼性能進(jìn)行分析,使用2.2節(jié)的NMSA譯碼算法,其中歸一化因子α=0.75,采用AWGN信道,QPSK調(diào)制方式,最大迭代次數(shù)為14次和50次。采用圖中Init(6,2)表示初始信道信息采用(6,2) bits量化,Mid(6,2)表示外信息采用(6,2)b量化。從圖6的仿真曲線中可以看出,信道信息和外信息均采用6 b量化,其中小數(shù)位2 b,整數(shù)位3 b,性能已經(jīng)非常接近浮點(diǎn)譯碼情況,而且迭代14次的定點(diǎn)量化譯碼性能與迭代50
圖6 量化及迭代次數(shù)對(duì)CCSDS近地QC-LDPC碼誤比特率的影響
次的精確SPA譯碼誤比特性能相差小于0.15 dB。
由于本文譯碼器處理單元采用重疊交替對(duì)I,Q2幀數(shù)據(jù)進(jìn)行譯碼,且內(nèi)部并行8路譯碼,信道信息并行4路輸入。所以本文所設(shè)計(jì)的譯碼器的吞吐量為fclk×4×2=8fclk,這里fclk表示譯碼器的最高工作頻率。經(jīng)過(guò)布局布線和上板驗(yàn)證后我們的譯碼器最高工作頻率為250 MHz,對(duì)應(yīng)2 Gb/s譯碼吞吐量,最大迭代14次。
本文采用提出的設(shè)計(jì)方法對(duì)2種不同的LDPC碼進(jìn)行了譯碼器實(shí)現(xiàn),其中實(shí)現(xiàn)的CCSDS LDPC(8 176,7 154)譯碼器與文獻(xiàn)[3,5,7]的實(shí)現(xiàn)結(jié)果進(jìn)行了比較,實(shí)現(xiàn)的譯碼器的碼長(zhǎng)均為8 176,度分布(dv,dc)均為(4,8),均采用6 b量化,如表1所示;實(shí)現(xiàn)的LDPC(1 296,648)譯碼器與文獻(xiàn)[8-9]的實(shí)現(xiàn)結(jié)果進(jìn)行了比較,實(shí)現(xiàn)的譯碼器的迭代次數(shù)均為20次,如表2所示。
表1 本文的譯碼器與現(xiàn)有的LDPC(8 176,7 154)譯碼器資源對(duì)比
注:表格中括號(hào)里的百分比表示譯碼器所耗費(fèi)資源占FPGA總資源的比例。
從表1可見(jiàn),采用本文提出的譯碼器架構(gòu)在FPGA Virtex 4上實(shí)現(xiàn)的CCSDS LDPC(8 176,7 154)譯碼器,當(dāng)吞吐量為2 Gb/s時(shí),占用的硬件資源為164個(gè)18 kb BRAM(或560 kb存儲(chǔ)空間)、56 778個(gè)查找表(LUT)和86 942個(gè)寄存器(FF)。
文獻(xiàn)[3]采用FPGA Virtex 2實(shí)現(xiàn)了相同功能的譯碼器,在時(shí)鐘頻率為193.4 MHz時(shí),吞吐量為193 Mb/s,占用的資源總量為128個(gè)18 kb BRAM、28 229個(gè)LUT和26 926個(gè)FF。Virtex 4與Virtex 2 的LTU資源同為4輸入LTU,BRAM和FF的結(jié)構(gòu)也大致相同,由表1的比較結(jié)果可見(jiàn),本文譯碼器的吞吐量約為文獻(xiàn)[3]的10倍,但從資源的使用情況上看,本文的譯碼器的邏輯資源占用量?jī)H為文獻(xiàn)[3]譯碼器的2倍多,其實(shí)現(xiàn)效率更高。這主要是由于文獻(xiàn)[3]譯碼器避免存儲(chǔ)器沖突的方法占用了大量的硬件資源,而本文譯碼器的緊縮性存儲(chǔ)及架構(gòu)更有效,同時(shí)文獻(xiàn)[3]采用原始的F-SPA譯碼算法,比本文采用的NMSA譯碼算法更復(fù)雜,實(shí)現(xiàn)處理模塊所需的硬件資源也更多。
文獻(xiàn)[7]中采用的BP-based算法實(shí)際與本文采用的歸一化最小和譯碼算法相同,只是不同文獻(xiàn)中表述不一致,該譯碼器在FPGA EP2S180上實(shí)現(xiàn),時(shí)鐘頻率為200 MHz,吞吐量為640 Mb/s,ALUs使用量為3.8×104個(gè),FF為3×104個(gè),存儲(chǔ)器資源共使用1 300 kb。與文獻(xiàn)[8]相比,本文譯碼器在存儲(chǔ)器資源使用量上具有明顯的優(yōu)勢(shì),且其余資源的利用效率也更高。
文獻(xiàn)[5]與本文使用了完全相同的譯碼算法和FPGA器件。當(dāng)時(shí)鐘頻率為212 MHz時(shí),該譯碼器吞吐量可達(dá)到714 Mb/s,使用的硬件資源LUT為27 046,FF為27 210,18 kb BRAM存儲(chǔ)器為80個(gè)。由于文獻(xiàn)[5]采用的譯碼架構(gòu)沒(méi)有考慮伴隨式為零提前終止譯碼的情況,不僅消耗大量的功耗而且不利于空閑時(shí)序的充分利用[6]。與文獻(xiàn)[5]相比,雖然本文譯碼器的資源翻了一番多,但譯碼吞吐量約為文獻(xiàn)[5]的3倍,實(shí)現(xiàn)效率更高。另外,本文譯碼器在BRAM的使用數(shù)量上優(yōu)勢(shì)不是特別明顯,但在存儲(chǔ)空間使用總量上比文獻(xiàn)[5]要少得多,這使得本文的譯碼器結(jié)構(gòu)在ASIC實(shí)現(xiàn)上更具優(yōu)勢(shì)。
采用本文提出的架構(gòu),在FPGA Virtex 6上,我們還實(shí)現(xiàn)了碼長(zhǎng)為1 296,L=54的規(guī)則(3,6)QC-LDPC譯碼器,設(shè)計(jì)時(shí)信道信息并行8路輸入,所以接收完整的1幀需要1 296/8=162個(gè)時(shí)鐘。譯碼器內(nèi)部并行度p=18,CNU和VNU均采用c=v=1級(jí)流水線,一次迭代共需v+c+2「L/p?=8個(gè)時(shí)鐘周期,迭代次數(shù)可設(shè)計(jì)為Im=「162/8?=20次。由于規(guī)則(3,6)碼的循環(huán)矩陣的個(gè)數(shù)為18,對(duì)于Vertex 6,2個(gè)18 kb BRAMs自動(dòng)合并為一個(gè)36 kb BRAMs,所以按照本文提出的架構(gòu)占用的36 kb BRAM存儲(chǔ)器的個(gè)數(shù)為m×n+n+1=6+18+1=25。對(duì)應(yīng)譯碼器的吞吐量為fclk×8×2=16fclk,經(jīng)過(guò)布局布線和上板驗(yàn)證后本文譯碼器的最高工作頻率為230 MHz,對(duì)應(yīng)3.68 Gb/s譯碼吞吐量,最大迭代20次。
表2 提出的譯碼器與現(xiàn)有的LDPC(1296,648)譯碼器資源對(duì)比
文獻(xiàn)[8]采用I-OMS,即帶偏移量的最小和算法,采用相同的FPGA Virtex 6,當(dāng)時(shí)鐘頻率為223 MHz時(shí),吞吐量為2.41Gb/s,LUT為90 872,FF為23 352,存儲(chǔ)器資源為96個(gè)36 kb BRAM和24個(gè)18 kb BRAM。該譯碼器的BRAM資源使用量遠(yuǎn)大于本文譯碼器的25個(gè)36 kb BRAM,邏輯資源比本文稍多,而本文譯碼器的吞吐量更高。
文獻(xiàn)[9]與文獻(xiàn)[3]采用相同的F-SPA譯碼算法,比本文采用的NMSA的譯碼算法更復(fù)雜,采用FPGA Virtex 7對(duì)LDPC(1 296,648)碼進(jìn)行實(shí)現(xiàn),當(dāng)時(shí)鐘頻率為233 MHz時(shí),吞吐量為3.35 Gb/s,LUT-FF共使用78 299。與文獻(xiàn)[9]相比,本文譯碼器吞吐量和邏輯資源利用效率稍高。但在BRAM存儲(chǔ)資源的利用效率上,本文譯碼器具有明顯優(yōu)勢(shì),在3.68 Gb/s吞吐量下本文譯碼器僅占用25個(gè)36 kb的BRAM存儲(chǔ)資源,較文獻(xiàn)[9]的104個(gè)36 kb BRAM有明顯優(yōu)勢(shì)。另外,如果減少量化比特?cái)?shù),使用與文獻(xiàn)[9]相同的3 b量化,本文譯碼器的資源可以進(jìn)一步減少。
通過(guò)上面的對(duì)比分析,可以看到本文設(shè)計(jì)的高速譯碼器在吞吐量、邏輯資源和存儲(chǔ)器資源與現(xiàn)有設(shè)計(jì)相比具有一定優(yōu)勢(shì),這主要是由于本文在設(shè)計(jì)譯碼器時(shí),采用硬判決碼字與外信息共享存儲(chǔ)器和硬判決待輸出碼字信息緊縮的2種存儲(chǔ)方法及其對(duì)應(yīng)的高速譯碼器架構(gòu),對(duì)于任意并行度的QC-LDPC譯碼器,均可避免存儲(chǔ)訪問(wèn)沖突問(wèn)題。這種緊縮性存儲(chǔ)策略不僅需要更少的存儲(chǔ)塊資源,而且CNUs和PCUs能共享同一組地址產(chǎn)生器,可以節(jié)省訪問(wèn)多個(gè)存儲(chǔ)器的地址計(jì)數(shù)器資源。另外,本文譯碼器采用NMSA算法,該算法無(wú)非線性運(yùn)算,更易于硬件實(shí)現(xiàn)。與現(xiàn)有文獻(xiàn)相比,本文提出的譯碼器架構(gòu),存儲(chǔ)器和邏輯資源消耗更少,同時(shí)這種設(shè)計(jì)僅需要提高塊內(nèi)的并行路數(shù),即可以進(jìn)一步提高LDPC譯碼器的吞吐量,可以靈活地調(diào)節(jié)LDPC譯碼器的設(shè)計(jì)并行度,滿足不同硬件平臺(tái)不同吞吐量的需求。
對(duì)于部分并行QC-LDPC譯碼器架構(gòu),多種信息均需要內(nèi)部存儲(chǔ)器,包括信道信息,外信息和硬判決信息,這3種信息通常被分別存儲(chǔ)。然而,本文提出兩種緊縮的存儲(chǔ)方法,第一種采用將p個(gè)相鄰行的外信息和硬判決信息合并存儲(chǔ)來(lái)節(jié)省存儲(chǔ)塊數(shù),另一種同樣將p個(gè)相鄰列的硬判決信息合并存儲(chǔ)來(lái)避免處理和輸出的訪問(wèn)沖突。采用我們的架構(gòu),在Xilinx XC4VLX160 FPGA實(shí)現(xiàn)的CCSDS標(biāo)準(zhǔn)近地LDPC譯碼器,時(shí)鐘頻率為250 MHz時(shí),吞吐量可達(dá)2 Gb/s,對(duì)應(yīng)的最大迭代次數(shù)為14次。
西北工業(yè)大學(xué)學(xué)報(bào)2019年3期