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