專利名稱::一種基于fpga的ldpc譯碼器的譯碼碼字的高效存儲方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種LDPC譯碼器的譯碼碼字的存儲方法,具體地說是將譯碼碼字和外信息(或信道信息)共用同一個存儲塊的方法,是一種FPGA資源占用少,譯碼吞吐量高的有效存儲解決方法。
背景技術(shù):
:在現(xiàn)代數(shù)字通信系統(tǒng)中,為保證各種數(shù)據(jù)能夠可靠、有效地傳輸,往往要利用糾錯編碼技術(shù)。近年來,隨著數(shù)字通信的發(fā)展及各種高速率數(shù)據(jù)業(yè)務(wù)的出現(xiàn),研究并利用糾錯編碼技術(shù)就顯得越來越重要。理論研究表明LDPC碼是目前已知最優(yōu)秀的糾錯編碼技術(shù),研究結(jié)果顯示,碼率為1/2、碼長為107的非規(guī)則LDPC碼在AWGN信道上,其性能距容量限只差0.04dB,是迄今為止最接近Shannon限的糾錯碼,Gallager在上世紀(jì)六十年代初發(fā)明LDPC碼時,由于受到當(dāng)時硬件水平的限制并沒有得到應(yīng)用,隨著大規(guī)模集成電路技術(shù)的發(fā)展,LDPC碼已經(jīng)從理論研究進(jìn)入了實用發(fā)展的階段。雖然LDPC碼具有線性譯碼復(fù)雜度,但采用FPGA對LDPC譯碼器進(jìn)行實現(xiàn)時,不僅需要占用了大量的FPGA資源而且譯碼吞吐量低,不能滿足高速數(shù)據(jù)傳輸?shù)男枨蟆T谀壳暗?br>背景技術(shù):
中,有大量的關(guān)于LDPC碼譯碼器的文獻(xiàn),但譯碼碼字的存儲采用單獨的blockRAM(代表文獻(xiàn)K.Shimizu,etc.,"Partially-parallelLDPCdecoderbasedonhigh-efficiencymessage-passingalgorithm,"in/Voc.Co"/Com/wterDes/gw(ICCD),Oct.2005,pp.503—510.),distributedRAM(表文獻(xiàn)Y.ChenandD.Hocevar,"AFPGAandASICimplementationofrate1/2,8088-birregularlowdensityparitycheckdecoder,"iniVoc.7E五五GXO朋COM,2003,pp.113-117)或者registermemory(代表文獻(xiàn)ZhongfengWang,ZhiqiangCui,"Low-ComplexityHigh-SpeedDecoderDesignforQuasi-CyclicLDPCCodes,"(9"KLS7^sfems,vol.15,no.1,Jan.2007.pp.104-114)。registermemory和distributedRAM均要占用FPGA芯片的邏輯資源,即slices資源。
發(fā)明內(nèi)容本發(fā)明的技術(shù)解決問題是克服現(xiàn)有LDPC譯碼器內(nèi)部信息存儲技術(shù)的不足,提出了一種提高LDPC譯碼器的存儲資源利用率的存儲方法,本發(fā)明不僅可以節(jié)省大量的用于單獨存儲譯碼碼字的資源和產(chǎn)生PCU所需地址的邏輯資源。本發(fā)明進(jìn)一步的技術(shù)解決問題是通過采用內(nèi)部細(xì)化流水線的設(shè)計方法提高了譯碼器的吞吐量。本發(fā)明的技術(shù)解決方案一是一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,所述的LDPC譯碼器結(jié)構(gòu)包括存儲位寬均為(Q+1)bits的存儲塊RAM—f和RAM_m,變量節(jié)點處理單元VNU,4交驗節(jié)點處理單元CNU,校驗方程計算單元PCU;方法步驟如下(1)初始化步驟LDPC譯碼器將接收到的位寬為Qbits的信道信息擴(kuò)展為(Q+1)bits后存儲到RAM—f中,將RAM—m初始化為全零,初始化迭代次數(shù)iter-O,最大迭代次數(shù)iter=MAX_ITER;(2)變量節(jié)點的更新步驟a)從存儲塊RAM—f和RAM—m中分別讀出(Q+1)bits的數(shù)據(jù)A和B;b)將數(shù)據(jù)A和B分別拆分為Qbits的數(shù)據(jù)和1bit的數(shù)據(jù);其中,數(shù)據(jù)A拆分成Qbits的信道信息A1和1bit的碼字信息AO;凄t據(jù)B拆分成Qbits的外信息B1和1bit的碼字信息BO;c)將信道信息A1和外信息B1輸入給變量節(jié)點處理單元VNU,變量節(jié)點處理單元VNU對輸入的信息進(jìn)行處理后得到更新的信道信息A1—new,外信息B1—new及本次迭代產(chǎn)生的譯碼碼字CO—new;d)將更新的信道信息A1—new與譯碼碼字C0_new合并成一個(Q+1)bits的A—new并按照讀出數(shù)據(jù)A的地址寫回到存儲塊RAMJ中,更新的外信息B1_new與譯碼碼字C0—new合并成一個(Q+1)bits的B—new,并將B_new按照讀出數(shù)據(jù)B的地址寫回存儲塊RAM—m中,做為RAM一m中存儲的新的數(shù)據(jù)B;(3)校驗節(jié)點的更新步驟i,從存儲塊RAM—m中讀出(Q+1)bits的數(shù)據(jù)B,將數(shù)據(jù)B拆分成Qbits的外信息B1和1bit的碼字信息BO;ii,將步驟i的外信息B1輸入給4交驗節(jié)點處理單元CNU,將碼字信息BO輸入給校驗方程計算單元PCU;校驗節(jié)點處理單元CNU進(jìn)行處理后得到更新的Qbits外信息B1—new,將更新的Qbits的外信息B1—new擴(kuò)展為一個(Q+1)bits的B—new,并將該B—new按照讀出數(shù)據(jù)B的地址寫回RAM_m中,做為RAM—m中存儲的新的數(shù)據(jù)B;校驗方程計算單元PCU對碼字信息BO進(jìn)行計算處理后得到伴隨式向量s;本次迭代結(jié)束,迭代次數(shù)iter加1;iii,判斷伴隨式向量s是否為零或者迭代次數(shù)是否達(dá)到MAXJTER;若s=0,則表示此次更新的譯碼碼字為許用碼字,轉(zhuǎn)步驟iv;若s#0且iter=MAXJTER,則停止迭代,譯碼失敗,轉(zhuǎn)步驟iv;否則,從步驟(2)開始繼續(xù)迭代;iv,從存儲塊RAM—f中讀出數(shù)據(jù)A一new,將A_new的最高位拆分出來即為需要輸出的譯碼碼字。本發(fā)明的技術(shù)解決方案二是一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,所述的LDPC譯碼器結(jié)構(gòu)包括存儲位寬均為(Q+1)bits的存儲塊RAM—f和RAM—m,變量節(jié)點處理單元VNU,4交驗節(jié)點處理單元CNU,校驗方程計算單元PCU;方法步驟如下(1)初始化步驟LDPC譯碼器將接收到的位寬為Qbits的信道信息擴(kuò)展為(Q+1)bits后存儲到RAM_f中,將RAM—m按照LDPC譯碼器校驗矩陣的非零位置初始化為上述(Q+1)bits信息,初始化迭代次數(shù)iter=0,最大迭代次數(shù)iter=MAX」TER;(2)校驗節(jié)點的更新步驟i,從存儲塊RAM_m中讀出(Q+1)bits的數(shù)據(jù)B,將數(shù)據(jù)B拆分成Qbits的外信息B1和1bit的碼字信息BO;ii,將步驟i的外信息B1輸入給校驗節(jié)點處理單元CNU,將碼字信息BO輸入給校驗方程計算單元PCU;4t驗節(jié)點處理單元CNU進(jìn)行處理后得到更新的外信息B1_new,將更新的Qbits的外信息B1—new擴(kuò)展為一個(Q+1)bits的B—new,并將該B—new按照讀出數(shù)據(jù)B的地址寫回RAM—m中,做為RAM—m中存儲的新的數(shù)據(jù)B;校驗方程計算單元PCU進(jìn)行計算處理后得到伴隨式向量s;本次迭代結(jié)束,迭代次數(shù)iter加1;iii,判斷伴隨式向量s是否為零或者迭代次數(shù)是否達(dá)到MAXJTER;若s=0,則表示此次更新的譯碼碼字為許用碼字,轉(zhuǎn)步驟iv;若s#0且iter-MAXJTER,則停止迭代,譯碼失敗,轉(zhuǎn)步驟iv;否則,轉(zhuǎn)步驟(3);iv,從存儲塊RAM一f中讀出數(shù)據(jù)A,將A的最高位拆分出來即為需要輸出的譯碼碼字;(3)變量節(jié)點的更新步驟a)從存儲塊RAM—f和RAM—m中分別讀出(Q+1)bits的數(shù)據(jù)A和B;b)將數(shù)據(jù)A和B分別拆分為Qbits的數(shù)據(jù)和1bit的數(shù)據(jù);其中,數(shù)據(jù)A拆分成Qbits的信道信息A1和1bit的碼字信息AO;數(shù)據(jù)B拆分成Qbits的外信息B1和1bit的碼字信息BO;c)將信道信息A1和外信息B1輸入給變量節(jié)點處理單元VNU,變量節(jié)點處理單元VNU對輸入的信息進(jìn)行處理后得到更新的信道信息A1一new,外信息B1—new及本次迭代產(chǎn)生的譯碼碼字CO一new;d)將更新的信道信息A1_new與譯碼碼字COjiew合并成一個(Q+1)bits的A—new并按照讀出數(shù)據(jù)A的地址寫回到存儲塊RAM一f中,更新的外信息B1—new與譯碼碼字CO—new合并成一個(Q+1)bits的B—new,并將該B—new按照讀出數(shù)據(jù)B的地址寫回RAM—m中,做為RAM_m中存儲的新的數(shù)據(jù)B,轉(zhuǎn)步驟(2)繼續(xù)執(zhí)行。上述兩個方案中的變量節(jié)點處理單元VNU、校驗節(jié)點處理單元CNU、校驗方程計算單元PCU均采用逐級細(xì)化流水線的方法實現(xiàn)。其中,變量節(jié)點處理單元VNU采用5級流水線實現(xiàn),第1級流水線將輸入的外信息和信道信息原碼轉(zhuǎn)換為補(bǔ)碼,并將輸入的外信息延遲;第2級流水線繼續(xù)將外信息延遲,并將外信息和信道信息求和;第3級流水線將所述的和值延遲,并將該和值與所述的外信息分別求差;第4級流水線對上述差值進(jìn)行截位處理,并繼續(xù)將上述的和值延遲;第5級流水線將截位處理后的數(shù)據(jù)由補(bǔ)碼轉(zhuǎn)換為原碼輸出,并取出和值的符號作為碼字信息輸出。當(dāng)一個時鐘周期內(nèi)需要完成求兩個以上數(shù)據(jù)的和時,會導(dǎo)致關(guān)鍵路徑延遲,為了降低關(guān)鍵路徑延遲,在第2級流水線中再插入流水線。所述的校驗節(jié)點處理單元CNU采用5級流水線實現(xiàn),第1級流水線用來分離出輸入的外信息的符號位和絕對值,第2級流水線求輸入的外信息的符號位的和及將所述的符號位進(jìn)行延遲,并求出第1級流水線分離出的絕對值的最小值和次小值,及將所述的絕對值進(jìn)行延遲;第3級流水線繼續(xù)將上述符號位、絕對值、符號位的和值、最小值及次小值分別進(jìn)行延遲,并求出最小值、次小值分別與歸一化修正因子alpha相乘的結(jié)果;第4級流水線對第3級流水線輸出的所有符號位分別與符號位的和值求和,并將第3級流水線輸出的所有絕對值與最小值進(jìn)行比較并選擇輸出;第5級流水線將第4級流水線的所有輸出進(jìn)行合并后輸出。所述的第4級流水線將第3級流水線輸出的所有絕對值與最小值進(jìn)行比較并選擇過程為當(dāng)?shù)?級流水線輸出的絕對值為最小值時,輸出次小值與歸一化修正因子alpha的積,否則,輸出為最小值與歸一化修正因子alpha的積。所述的校驗方程計算單元PCU采用1級流水線實現(xiàn),輸入的碼字信息在該流水線中求異或得到伴隨式向量s,通過延遲將伴隨式向量s中的所有元素相加,得到和V,當(dāng)V二0時,伴隨式向量s為零。本發(fā)明與現(xiàn)有技術(shù)相比有益效果為(1)本發(fā)明提出了一種提高LDPC譯碼器的存儲資源利用率的存儲方法,這種方法不僅不需要額外的blockRAM存儲塊來存儲譯碼碼字,而且不使用slices資源來存儲譯碼碼字,有效地減少了譯碼器系統(tǒng)對存儲資源數(shù)量的需求。在本方法中譯碼碼字和外信息(或信道信息)共用同一個存儲塊,有效地減少了譯碼器系統(tǒng)對存儲資源數(shù)量的需求,而且采用這種存儲方式后,讀取存儲塊的同時可以取出譯碼碼字和外信息。所以,校驗方程計算單元PCU可以與校驗節(jié)點更新單元CNU共享同一組地址信息,PCU不需要額外的地址產(chǎn)生器單元。另外,本發(fā)明的方法,對于全并行譯碼器,可以有效地改善路由擁擠,并可以節(jié)省訪問寄存器的地址資源。對于部分并行譯碼器和串行譯碼器來說,可以降低存儲塊的個數(shù)或者節(jié)省FPGA的邏輯資源。(2)本發(fā)明處理單元VNU,CNU,PCU均采用逐級細(xì)化流水線的設(shè)計方法來實現(xiàn),有效地降低了譯碼器的關(guān)鍵路徑延遲,為提高LDPC譯碼器的吞吐量提供了必要的保障。對于本文提出的方法采用FPGA進(jìn)行實現(xiàn)時,不僅可以節(jié)省大量的用于單獨存儲譯碼碼字的資源和產(chǎn)生PCU所需地址的邏輯資源,而且通過采用內(nèi)部細(xì)化流水線的設(shè)計方法提高了譯碼器的吞吐量。(3)本發(fā)明采用合并/拆分比特的方法來分別獲取LDPC迭代譯碼過程三種信息信道信息,外信息和譯碼碼字信息,譯碼碼字和外信息(或信道信息)共用同一個存儲塊,有效地減少了譯碼器系統(tǒng)對存儲資源數(shù)量的需求。(4)還提出了資源占用少且高速的實現(xiàn)PCU的結(jié)構(gòu),這種結(jié)構(gòu)不需要采用寄存器資源來存儲長位寬的伴隨式向量s,也不需要進(jìn)行長位寬數(shù)據(jù)與零向量的比較(造成很大的延遲)。圖1為本發(fā)明提出的高效存儲方法的LDPC譯碼器結(jié)構(gòu);圖2為LDPC(8176,7154)的校驗矩陣非零元素的分布圖;圖3為歸一化最小和量化譯碼與和積譯碼算法的性能比較;圖4為本發(fā)明5-輸入VNU的流水線結(jié)構(gòu);圖5為本發(fā)明32-輸入CNU的流水線結(jié)構(gòu);圖6為本發(fā)明求32個輸入數(shù)據(jù)的最小值和次小值的流水線結(jié)構(gòu);圖7為本發(fā)明PCU的實現(xiàn)結(jié)構(gòu)。具體實施例方式如圖1所示,本發(fā)明一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,所述的LDPC譯碼器結(jié)構(gòu)包括存儲位寬均為(Q+1)bits的存儲塊RAM—f和RAM—m,變量節(jié)點處理單元VNU,校驗節(jié)點處理單元CNU,校驗方程計算單元PCU;方法步驟如下(1)初始化譯碼器將接收到的位寬為Qbits的信道信息擴(kuò)展為(Q+1)bits(通過合并單元將高位補(bǔ)'0,或者補(bǔ)'1,)存儲到RAM—f中,將RAM—m初始化為全零,初始化迭代次數(shù)iter-O,最大迭代次數(shù)iter=MAXJTER;(2)變量節(jié)點的更新a)從存儲塊RAM_f和RAM_m中分別讀出(Q+1)bits的數(shù)據(jù)A和B;b)將數(shù)據(jù)A和B分別拆分為Qbits的數(shù)據(jù)(A和B的低Q位,分別用A1和B1來表示)和化it的數(shù)據(jù)(A和B最高位,分別用AO和BO來表示),本專利的存儲結(jié)構(gòu)中A1和B1才分別是信道信息和外信息,AO和BO里面存儲的是碼字信息;c)將信道信息和外信息作為VNU的輸入,VNU對輸入進(jìn)行計算處理后得到更新的信道信息A1_new,外信息B1—new及本次迭代產(chǎn)生的譯碼碼字CO—new。d)將Qbits的A1_new與CO—new合并成一個(Q+1)bits的A_new并按照讀出A的地址寫回RAM_f中,Qbits的B1_new與COnew合并成一個(Q+1)bits的Bnew,并將該Bnew按,照讀出數(shù)據(jù)B的地址寫回RAM_m中,做為RAM_m中存儲的新的數(shù)據(jù)B。(3)校驗節(jié)點的更新a)從存儲塊RAM_m中讀出(Q+1)bits的數(shù)據(jù)B,從RAM—m中取出的數(shù)據(jù)即為LDPC碼校驗矩陣非零行所在位置的數(shù)據(jù);b)將B拆分為Qbits的數(shù)據(jù)(B的低Q位,用B1來表示)和1bit的數(shù)據(jù)(B最高位,用BO來表示),可見BO即碼字信息,B1即為外信息;c)將外信息B1作為CNU的輸入,CNU進(jìn)行計算處理后得到更新的外信息B1—new,并將更新的Qbits的外信息B1—new擴(kuò)展為一個(Q+1)bits的B—new(高位補(bǔ)'0,或者補(bǔ)T)按照讀出數(shù)據(jù)B的地址寫回RAM—m中,作為RAM—m中存儲的新的數(shù)據(jù)B。同時將碼字信息BO作為PCU的輸入,PCU進(jìn)^f亍計算處理后得到伴隨式向量s。完成(3)后,迭代次數(shù)iter加1;(4)如果伴隨式向量s為零,則表示此次更新的i爭碼碼字為許用碼字,即可等待輸出,或者,如果iter=MAXJTER,則停止迭代,顯示譯碼失敗標(biāo)示,并等待輸出這些糾正了一些錯誤的碼字。否則,返回(2)繼續(xù)迭代。輸出最終的譯碼碼字時,即從RAM一f依次讀出數(shù)據(jù)A,將A的最高位拆分出來即為需要輸出的譯碼碼字。當(dāng)(1)初始化步驟中將存儲塊RAM一m初始化為RAM一f中信息時,需要先進(jìn)行校驗節(jié)點更新,然后進(jìn)行變量節(jié)點的更新。方法中的VNU(變量節(jié)點處理單元),CNU"t驗節(jié)點處理單元)和PCU(校驗方程計算單元)均采用逐級細(xì)化流水線的設(shè)計方法實現(xiàn),有效地降低了譯碼器的關(guān)鍵路徑延遲,為提高LDPC譯碼器的吞吐量提供了必要的保障。關(guān)于本發(fā)明方法中的歸一化修正因子,譯碼過程更新信息的量化比特數(shù)Q,及最大迭代次數(shù)MAXJTER在譯碼器譯碼算法確定的情況下,對于本領(lǐng)域技術(shù)人員來講,采用編譯碼系統(tǒng)仿真的方法,就能得到這些參數(shù),為本領(lǐng)域4支術(shù)人員公知的常識,這里不再進(jìn)行詳細(xì)說明。下面以LDPC(8176,7154)為例來詳細(xì)說明本發(fā)明。如圖2,LDPC(8176,7154)是一個QC-LDPC碼(即準(zhǔn)循環(huán)移位LDPC碼),它的校驗矩陣是由2x16個"丄(£=511)的循環(huán)矩陣構(gòu)成的,該校驗矩陣大小為Mx7V=1022x8176,4.,是一個511x511的循環(huán)矩陣,」,;的每行每列中均有兩個非零元素,即《的行重為2,所以該校驗矩陣的行重為2><16=32,列重為^2=4。校驗矩陣結(jié)構(gòu)如下LDPC碼的譯碼通常采用的是和積算法,但其中的非線性運算較復(fù)雜,需要采用查找表結(jié)構(gòu),這樣在硬件上必須用ROM來存儲這些表格。最小和算法避免了查找表的出現(xiàn),減少了硬件存儲資源的占用,且經(jīng)過歸一化改進(jìn)后的歸一化最小和算法可以非常接近和積算法的性能(可以參考丄H.Chenetc.,"Reduced-complexitydecodingofLDPCcodes,"IEEETrans,onCommun.vol.53,no.8,Aug.2005,pp.1288-1299.)。而且歸一化最小和算法內(nèi)部主要進(jìn)行比較運算,所以不需要信道估計,而信道估計的偏差會對和積譯碼算法造成性能上的損失,而且信道估計也需要占用大量的FPGA資源來實現(xiàn),所以本實施例中采用歸一化最小和算法的譯碼算法,對于歸一化最小和算法需要確定它的歸一化修正因子。在進(jìn)##碼器設(shè)計之前需要確定歸一化修正因子,譯碼過程更新信息的量化比特數(shù)Q,及最大迭代次數(shù)MAXJTER。對LDPC(8176,7154)編譯碼的性能進(jìn)行了編譯碼系統(tǒng)仿真,可以得到如圖3所示的曲線圖。從圖3的仿真曲線可以看到,對于和積譯碼,迭代10次和迭代50次譯碼性能僅損失不到0.2dB,在工程實現(xiàn)時,采用10次迭代就足夠了;選擇alpha-0.75(本發(fā)明中alpha等于丄H.Chen文章中公式(9)的i/")的歸一化最小和譯碼算法和對譯碼器中的數(shù)據(jù)進(jìn)行量化(信道信息和中間傳遞的外信息均采用7bits量化,這兩種信息的小數(shù)位均占2bits)與和積譯碼算法進(jìn)行比較,譯碼性能相對于同樣迭代次數(shù)的和積算法損失不到0.1dB,大約損失0.05dB。最終,本發(fā)明采用了歸一化修正因子為0.75的歸一化最小和譯碼算法,量化比特數(shù)Q=7,最大迭代次數(shù)MAXJTER-10。對于這個QC-LDPC(8176,7154)譯碼器,需要16個RAM—f存儲系列(RAM—f1,……,RAM—f16)和16x2x2-64個RAM—m存儲系列,每個存儲器的位寬均為(Q+1)bits,即8bits。16個變量節(jié)點處理單元(VNU1,……,VNU16),2個校驗節(jié)點處理單元(CNU1,CNU2)和2個校驗方程計算單元(PCU,PCU2)。具體實現(xiàn)過程按照上面
發(fā)明內(nèi)容給出的(4)步。下面重點144422人介紹步驟(2)(3)中的VNU(變量節(jié)點處理單元),CNU(校驗節(jié)點處理單元)和PCU(校驗方程計算單元)的逐級細(xì)化流水線的設(shè)計方法;上述結(jié)構(gòu)屬于部分并行譯碼器的結(jié)構(gòu)。當(dāng)變量節(jié)點處理單元VNU、校驗節(jié)點處理單元CNU、校^r方程計算單元PCU都為1個時,為串^"^碼器結(jié)構(gòu);當(dāng)變量節(jié)點處理單元VNU為8176個、校驗節(jié)點處理單元CNU、校驗方程計算單元PCU為1022個為全并行譯碼器結(jié)構(gòu)。從上面LDPC(8176,7154)校驗矩陣結(jié)構(gòu)可以看到,它的校驗矩陣的行重為32,列重為4。變量節(jié)點處理單元VNU有5個輸入(4個外信息in1,……,in4和1個信道信息f)和5個輸出(4個外信息out1,,out4和1個碼字信息c),而校驗節(jié)點處理單元CNU有32個輸入(32個外信息in1,……,in32)和32個輸出(32個外信息out1,……,out32),校驗方程計算單元PCU具有32個輸入(32個碼字信息in1,……,in32)和1個輸出(伴隨式向量s)。LDPC所采用的譯碼算法不同,只是VNU,CNU的運算處理單元不同,其他的都相同,可見本發(fā)明的這種高效存儲譯碼碼字的結(jié)構(gòu)適合于任何LDPC碼的迭代譯碼算法。例如,當(dāng)不采用歸一化最小和算法而采用和積算法時,CNU的運算處理單元中包含非線性運算,需要采用查找表的方法來實現(xiàn)。對于本發(fā)明釆用的歸一化最小和算法(請參考上面提到的丄H.Chen的文章),VNU主要是加減運算采用補(bǔ)碼表示比較方便,CNU需要求絕對值和比較大小采用原碼來運算比較方便,考慮到VNU僅處理4個數(shù)據(jù)而CNU需要處理32個數(shù)據(jù),在VNU中,加入原碼轉(zhuǎn)換為補(bǔ)碼的操作。可見RAM—m中存儲的是原碼形式的數(shù)據(jù),又因為只有VNU才需要從RAM—f中讀取數(shù)據(jù),所以RAM一f中存儲補(bǔ)碼形式的數(shù)據(jù)。上述轉(zhuǎn)換具體表述為正數(shù)的補(bǔ)碼等于原碼,而負(fù)數(shù)的補(bǔ)碼等于原碼取反加1。同樣正數(shù)的原碼等于補(bǔ)碼,而負(fù)數(shù)的原碼等于補(bǔ)碼取反加1。VNU的輸出與輸入的關(guān)系為out/=sum-in/,,'=1,2,3,4,其中SUm為輸入的5個數(shù)的和。實現(xiàn)VNU的流水線結(jié)構(gòu)如圖4所示,為了降低VNU的關(guān)4泉路徑延遲大體需要插入5級流水線,圖4中的虛線表示流水線,VNU的所有輸入和輸出均采用原碼來表示,圖4中,f和c分別表示信道信息和碼字信息,in1,……,in4表示外信息,加法器陣列的主要功能是求出5個輸入數(shù)據(jù)的和sum,減法器陣列是sum分別減去4個輸入外信息數(shù)據(jù)。為了避免精度丟失,中間處理數(shù)據(jù)的位寬比輸入輸出的位寬寬,為了得到輸出數(shù)據(jù),必須采用截位才莫塊對中間數(shù)據(jù)進(jìn)行截位(截位處理方法請見文獻(xiàn)G.Montorsi,S.Benedetto,"Designoffixed-pointiterativedecodersforconcatenatedcodeswithinterleavers,"IEEE丄onSelectedAreasinCommun.,vol.19,no.5,May2001,pp.871-882.)。對于求多于兩個數(shù)據(jù)的和時,為了進(jìn)一步降低關(guān)4建路徑延遲,需要再細(xì)化流水線,即在第2級流水線中再插入流水線。n"g"(in力xalphaxminmin#|in/1CNU的輸出與輸入的關(guān)系為out/=/)xalphaxsub—minmin=|in/1sign(x)表示求x的符號,alpha為歸一化修正因子,為一常數(shù),min表示所有輸入數(shù)據(jù)絕對值的最小值,sub一min表示所有輸入數(shù)據(jù)絕對值的次小值。實現(xiàn)CNU的流水線結(jié)構(gòu)如圖5所示,可以看到CNU的結(jié)構(gòu)由上下兩部分組成,上部分主要是對輸入數(shù)據(jù)的符號進(jìn)行運算,下部分主要是對輸入數(shù)據(jù)的絕對值(即數(shù)值大小)進(jìn)行運算,CNU總體上插入了5級流水線,第1級流水線用來分離出輸入數(shù)據(jù)的符號位和絕對值,第2級流水線求32個符號位的和sign32(對于求化it數(shù)據(jù)的和在硬件實現(xiàn)時采用異或xor操作),及將32個符號位進(jìn)行延遲,并求出32個絕對值的最小值和次小值,及將32個絕對值進(jìn)行延遲;第3級流水線繼續(xù)將32個符號位、32個絕對值、sign32、最小值及次小值分別進(jìn)行延遲,并求出最小值、次小值分別與alpha相乘的結(jié)果;第4級流水線對sign32與32個符號位分別進(jìn)行求和得到32個輸出,并根據(jù)32個絕對值與最小值的關(guān)系得到32個輸出(如果輸入是最小值,則輸出為次小值與alpha的積,否則,輸出為最小值與alpha的積);第5級流水線將對32個符號位運算的輸出與對32個絕對值位運算的輸出分別進(jìn)行合并(符號位作為高位,絕對值作為其他位)得到32個CNU的輸出為了進(jìn)一步提高處理速度,需要再細(xì)化流水線,即在第2級和第3級流水線中再插入流水線。第二級流水線,需要求出32個非負(fù)數(shù)的最小值和次小值,又采用了再細(xì)化流水線的方法,將其劃分為具有4級流水線的求4個lt的最小值和次小值的方法,如圖6所示。第三級流水線,處理的是將data與alpha相乘,本實施例選擇的alpha=0.75,data*0.75=(data/2)+(data/4),即data*0.75等價于將data右移一位的值與data右移二位的值相加。這樣在FPGA中通過移位運算和加法運算就可以實現(xiàn)定點數(shù)與浮點數(shù)的乘法了。即可以在第三級流水線中插入兩級流水線來提高CNU的總體處理速度。PCU的功能是將碼字與校驗矩陣相乘,產(chǎn)生伴隨式向量s,LDPC(8176,7154)的伴隨式向量s的長度為1022,考慮到校驗矩陣的分塊特性,可以將長度為1022的s向量分塊成2個長度為/_=511的向量,最終需要判斷的是向量s是否為零,因為當(dāng)一個向量的所有的分量為零時,它才是零向量,所以,在實現(xiàn)時可以將向量s中的所有元素加起來,得到結(jié)果V,如圖7所示,顯然,只有當(dāng)V-0時,伴隨式向量s才為零。圖7的這種實現(xiàn)方法不需要采用寄存器資源來存儲長位寬的伴隨式向量s,也不需要進(jìn)行長位寬數(shù)據(jù)與零向量的比較(造成很大的延遲)。對于圖7中的32個數(shù)求異或xor的操作,可以進(jìn)一步細(xì)化流水線。為了比較的公平性,本發(fā)明采用與ZhongfengWang文章(ZhongfengWang,ZhiqiangCui,"Low-ComplexityHigh-SpeedDecoderDesignforQuasi-CyclicLDPCCodes,"frara.O"FLS7vol.15,no.1,Jan.2007.pp.104-114)中同樣的碼QC-LDPC(8176,7154)碼、同樣的FPGA-XilinxVertexIIxc2v6000-6,如表1所示。本文這種譯碼器的實現(xiàn)方法比ZhongfengWang的譯碼器在slices資源和BRAM都具有很大的優(yōu)勢,本專利實現(xiàn)的譯碼器的資源能比ZhongfengWang的譯碼器P爭低一半多,這主要取決于它所采用的這種高效的LDPC譯碼器的譯碼碼字的存儲解決方法。而ZhongfengWang的譯碼器中則采用slices資源來存儲譯碼碼字時,消耗了大量的slices資源。ZhongfengWang的譯碼器釆用的是和積算法,其中的非線性運算較復(fù)雜,需要采用查找表結(jié)構(gòu),這樣在硬件上必須用ROM來存儲這些表格,需要占用FPGA大量的BRAM資源。而本發(fā)明采用的這種歸一化最小和算法可以不消耗這部分BRAM資源。本發(fā)明譯碼器的低關(guān)鍵路徑延遲和高吞吐量主要取決于a)VNU,CNU,PCU的逐級細(xì)化流水線的設(shè)計方法和資源占用少且高速的實現(xiàn)PCU的結(jié)構(gòu)。b)本實施例的譯碼器最大迭代次數(shù)為10次,而ZhongfengWang的譯碼器最大迭代次數(shù)為15次,但從本發(fā)明的附圖3和ZhongfengWang的文章的圖21中可以看到,本實施例的QC-LDPC(8176,7154)譯碼性能相對于ZhongfengWang的譯碼器的損失僅為0.1dB左右。在工程應(yīng)用中可以忽略。表lXilinxFPGAXC2V6000-6實現(xiàn)統(tǒng)計<table>tableseeoriginaldocumentpage18</column></row><table>本發(fā)明未詳細(xì)描述內(nèi)容為本領(lǐng)域技術(shù)人員公知技術(shù)。權(quán)利要求1、一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,其特征在于所述的LDPC譯碼器結(jié)構(gòu)包括存儲位寬均為(Q+1)bits的存儲塊RAM_f和RAM_m,變量節(jié)點處理單元VNU,校驗節(jié)點處理單元CNU,校驗方程計算單元PCU;方法步驟如下(1)初始化步驟LDPC譯碼器將接收到的位寬為Qbits的信道信息擴(kuò)展為(Q+1)bits后存儲到RAM_f中,將RAM_m初始化為全零,初始化迭代次數(shù)iter=0,最大迭代次數(shù)iter=MAX_ITER;(2)變量節(jié)點的更新步驟a)從存儲塊RAM_f和RAM_m中分別讀出(Q+1)bits的數(shù)據(jù)A和B;b)將數(shù)據(jù)A和B分別拆分為Qbits的數(shù)據(jù)和1bit的數(shù)據(jù);其中,數(shù)據(jù)A拆分成Qbits的信道信息A1和1bit的碼字信息A0;數(shù)據(jù)B拆分成Qbits的外信息B1和1bit的碼字信息B0;c)將信道信息A1和外信息B1輸入給變量節(jié)點處理單元VNU,變量節(jié)點處理單元VNU對輸入的信息進(jìn)行處理后得到更新的信道信息A1_new,外信息B1_new及本次迭代產(chǎn)生的譯碼碼字C0_new;d)將更新的信道信息A1_new與譯碼碼字C0_new合并成一個(Q+1)bits的A_new并按照讀出數(shù)據(jù)A的地址寫回到存儲塊RAM_f中,更新的外信息B1_new與譯碼碼字C0_new合并成一個(Q+1)bits的B_new,并將B_new按照讀出數(shù)據(jù)B的地址寫回存儲塊RAM_m中,做為RAM_m中存儲的新的數(shù)據(jù)B;(3)校驗節(jié)點的更新步驟i,從存儲塊RAM_m中讀出(Q+1)bits的數(shù)據(jù)B,將數(shù)據(jù)B拆分成Qbits的外信息B1和1bit的碼字信息B0;ii,將步驟i的外信息B1輸入給校驗節(jié)點處理單元CNU,將碼字信息B0輸入給校驗方程計算單元PCU;校驗節(jié)點處理單元CNU進(jìn)行處理后得到更新的Qbits外信息B1_new,將更新的Qbits的外信息B1_new擴(kuò)展為一個(Q+1)bits的B_new,并將該B_new按照讀出數(shù)據(jù)B的地址寫回RAM_m中,做為RAM_m中存儲的新的數(shù)據(jù)B;校驗方程計算單元PCU對碼字信息B0進(jìn)行計算處理后得到伴隨式向量s;本次迭代結(jié)束,迭代次數(shù)iter加1;iii,判斷伴隨式向量s是否為零或者迭代次數(shù)是否達(dá)到MAX_ITER;若s=0,則表示此次更新的譯碼碼字為許用碼字,轉(zhuǎn)步驟iv;若s≠0且iter=MAX_ITER,則停止迭代,譯碼失敗,轉(zhuǎn)步驟iv;否則,從步驟(2)開始繼續(xù)迭代;iv,從存儲塊RAM_f中讀出數(shù)據(jù)A_new,將A_new的最高位拆分出來即為需要輸出的譯碼碼字。2、一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,其特征在于所述的LDPC譯碼器結(jié)構(gòu)包括存儲位寬均為(Q+1)bits的存儲塊RAM_f和RAM—m,變量節(jié)點處理單元VNU,一交^r節(jié)點處理單元CNU,纟交驗方程計算單元PCU;方法步驟如下(1)初始化步驟LDPC譯碼器將接收到的位寬為Qbits的信道信息擴(kuò)展為(Q+1)bits后存儲到RAM—f中,將RAM—m按照LDPC譯碼器校驗矩陣的非零位置初始化為上述(Q+1)bits信息,初始化迭代次數(shù)iter-0,最大迭代次數(shù)iter=MAX—ITER;(2)校驗節(jié)點的更新步驟i,從存儲塊RAM—m中讀出(Q+1)bits的數(shù)據(jù)B,將數(shù)據(jù)B拆分成Qbits的外信息B1和1bit的碼字信息BO;ii,將步驟i的外信息B1輸入給校驗節(jié)點處理單元CNU,將碼字信息BO輸入給校驗方程計算單元PCU;校驗節(jié)點處理單元CNU進(jìn)行處理后得到更新的外信息B1_new,將更新的Qbits的外信息B1—new擴(kuò)展為一個(Q+1)bits的B—new,并將該B—new按照讀出數(shù)據(jù)B的地址寫回RAM—m中,做為RAM—m中存儲的新的數(shù)據(jù)B;校驗方程計算單元PCU進(jìn)行計算處理后得到伴隨式向量s;本次迭代結(jié)束,迭代次數(shù)iter力口1;iii,判斷伴隨式向量s是否為零或者迭代次數(shù)是否達(dá)到MAXJTER;若s=0,則表示此次更新的譯碼碼字為許用碼字,轉(zhuǎn)步驟iv;若s#0且iter=MAXJTER,則停止迭代,譯碼失敗,轉(zhuǎn)步驟iv;否則,轉(zhuǎn)步驟(3);iv,從存儲塊RAM—f中讀出數(shù)據(jù)A,將A的最高位拆分出來即為需要輸出的譯碼碼字;(3)變量節(jié)點的更新步驟a)從存儲塊RAM—f和RAM—m中分別讀出(Q+1)bits的數(shù)據(jù)A和B;b)將數(shù)據(jù)A和B分別拆分為Qbits的數(shù)據(jù)和1bit的數(shù)據(jù);其中,數(shù)據(jù)A拆分成Qbits的信道信息A1和1bit的碼字信息AO;數(shù)據(jù)B拆分成Qbits的外信息B1和1bit的碼字信息BO;c)將信道信息A1和外信息B1輸入給變量節(jié)點處理單元VNU,變量節(jié)點處理單元VNU對輸入的信息進(jìn)行處理后得到更新的信道信息A1—new,外信息B1—new及本次迭代產(chǎn)生的譯碼碼字CO—new;d)將更新的信道信息A1—new與譯碼碼字CO—new合并成一個(Q+1)bits的A—new并按照讀出數(shù)據(jù)A的地址寫回到存儲塊RAM_f中,更新的外信息B1—new與譯碼碼字CO—new合并成一個(Q+1)bits的B—new,并將該B—new按照讀出數(shù)據(jù)B的地址寫回RAM—m中,做為RAM—m中存儲的新的數(shù)據(jù)B,轉(zhuǎn)步驟(2)繼續(xù)執(zhí)行。3、根據(jù)權(quán)利要求1或2所述的一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,其特征在于所述的變量節(jié)點處理單元VNU、纟交-驗節(jié)點處理單元CNU、校驗方程計算單元PCU均采用逐級細(xì)化流水線的方法實現(xiàn)。4、根據(jù)權(quán)利要求3所述的一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,其特征在于所述的變量節(jié)點處理單元VNU釆用5級流水線實現(xiàn),第1級流水線將輸入的外信息和信道信息原碼轉(zhuǎn)換為補(bǔ)碼,并將輸入的外信息延遲;第2級流水線繼續(xù)將外信息延遲,并將外信息和信道信息求和;第3級流水線將所述的和值延遲,并將該和值與所述的外信息分別求差;第4級流水線對上述差值進(jìn)行截位處理,并繼續(xù)將上述的和值延遲;第5級流水線將截位處理后的數(shù)據(jù)由補(bǔ)碼轉(zhuǎn)換為原碼輸出,并取出和值的符號作為碼字信息輸出。5、根據(jù)權(quán)利要求4所述的一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,其特征在于當(dāng)一個時鐘周期內(nèi)需要完成求兩個以上數(shù)據(jù)的和時,在第2級流水線中再插入流水線。6、根據(jù)權(quán)利要求3所述的一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,其特征在于所述的校驗節(jié)點處理單元CNU釆用5級流水線實現(xiàn),第1級流水線用來分離出輸入的外信息的符號位和絕對值,第2級流水線求輸入的外信息的符號位的和及將所述的符號位進(jìn)行延遲,并求出第1級流水線分離出的絕對值的最小值和次小值,及將所述的絕對值進(jìn)行延遲;第3級流水線繼續(xù)將上述符號位、絕對值、符號位的和值、最小值及次小值分別進(jìn)行延遲,并求出最小值、次小值分別與歸一化修正因子alpha相乘的結(jié)果;第4級流水線對第3級流水線輸出的所有符號位分別與符號位的和值求和,并將第3級流水線輸出的所有絕對值與最小值進(jìn)行比較并選擇輸出;第5級流水線將第4級流水線的所有輸出進(jìn)行合并后輸出。7、根據(jù)權(quán)利要求6所述的一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,其特征在于所述的第4級流水線將第3級流水線輸出的所有絕對值與最小值進(jìn)行比較并選擇過程為當(dāng)?shù)?級流水線輸出的絕對值為最小值時,輸出次小值與歸一化修正因子alpha的積,否則,輸出為最小值與歸一化修正因子alpha的積。8、根據(jù)權(quán)利要求3所述的一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,其特征在于所述的校^^方程計算單元PCU采用1級流水線實現(xiàn),輸入的碼字信息在該流水線中求異或得到伴隨式向量s,通過延遲將伴隨式向量s中的所有元素相加,得到和V,當(dāng)V-0時,伴隨式向量s為零。全文摘要一種基于FPGA的LDPC譯碼器的譯碼碼字的高效存儲方法,在該方法中譯碼碼字和外信息(或信道信息)共用同一個存儲塊,有效地減少了譯碼器系統(tǒng)對存儲資源數(shù)量的需求;而且讀取存儲塊的同時可以取出譯碼碼字和外信息。所以,校驗方程計算單元PCU可以與校驗節(jié)點更新單元CNU共享同一組地址信息,PCU不需要額外的地址產(chǎn)生器單元;最后,對于處理單元VNU,CNU,PCU均采用逐級細(xì)化流水線的設(shè)計方法來實現(xiàn),有效地降低了譯碼器的關(guān)鍵路徑延遲,為提高LDPC譯碼器的吞吐量提供了必要的保障。對于本文提出的方法采用FPGA進(jìn)行實現(xiàn)時,不僅可以節(jié)省大量的用于單獨存儲譯碼碼字的資源和產(chǎn)生PCU所需地址的邏輯資源,而且提高了譯碼器的吞吐量。文檔編號H03M13/00GK101599302SQ20091008966公開日2009年12月9日申請日期2009年7月23日優(yōu)先權(quán)日2009年7月23日發(fā)明者穎宋,立李,楊新權(quán),王菊花,謝天嬌申請人:西安空間無線電技術(shù)研究所