專利名稱:基于fpga的準(zhǔn)循環(huán)低密度校驗(yàn)碼譯碼器及譯碼方法
技術(shù)領(lǐng)域:
本發(fā)明屬于通信技術(shù)領(lǐng)域,涉及信道糾錯碼譯碼器,特別是一種基于FPGA的準(zhǔn)循環(huán)低密度校驗(yàn)碼譯碼器及譯碼方法,可用于基于LDPC碼的物理層信息傳輸糾錯。
背景技術(shù):
傳統(tǒng)準(zhǔn)循環(huán)低密度校驗(yàn)QC-LDPC碼譯碼器主要由變量節(jié)點(diǎn)計(jì)算模塊VNU、校驗(yàn)節(jié)點(diǎn)計(jì)算模塊CNU、校驗(yàn)方程計(jì)算模塊PCU和若干存儲模塊組成,其中存儲模塊包括三部分,分別是信道初始信息存儲模塊RAM_F、迭代外信息存儲模塊RAM_M和譯碼碼字存儲模塊RAM_C,如圖I所示。對于基矩陣分塊數(shù)為mXn的QC-LDPC碼譯碼器,VNU模塊包含n 個(gè)具體的變量節(jié)點(diǎn)計(jì)算單元VNU」,I ^ j ^ n, CNU模塊包含m個(gè)變量節(jié)點(diǎn)計(jì)算單元CNUi, I彡i彡m,RAM_F模塊包含n塊RAM存儲塊F」,I彡j彡n,RAM_M模塊包含mXn ±夾RAM存儲塊Mi,」,I < i < m,I < j < n。每塊Fj含有一個(gè)與CNUi相連的只讀端口,每塊Mi^含有兩個(gè)讀寫端口,兩個(gè)端口均與VNUj和CNUi相連。RAM_M中的外信息和RAM_F中的信道信息均使用靜態(tài)地址管理方式,即每個(gè)節(jié)點(diǎn)對應(yīng)的外信息和信道信息的讀寫地址為固定值。若 LDPC校驗(yàn)陣的子矩陣分塊大小為zXz,QC-LDPC碼譯碼器迭代譯碼的具體工作過程如下
(I)初始化將接收的信道信息序列等分為n個(gè)分塊分別存儲到RAM_F中的n個(gè)。存儲塊中,將RAM_M中的外信息存儲塊Mm,I ^ i ^ m, I ^ j ^ n初始化為全零,將初始化迭代次數(shù)iter置為0次;(2)變量節(jié)點(diǎn)更新每個(gè)變量節(jié)點(diǎn)計(jì)算單元VN%順序更新與其相連的Mi, ^中的z個(gè)外信息,每更新一個(gè)外信息,VN%分別從&和Mm的讀端口中讀取一個(gè)信道信息和一個(gè)外信息,進(jìn)行變量節(jié)點(diǎn)的更新計(jì)算和本次譯碼碼字的判決,將新的外信息和譯碼碼字分別寫入和RAM_C中。每個(gè)節(jié)點(diǎn)信息的讀出、計(jì)算和寫入以流水線方式完成;(3)校驗(yàn)節(jié)點(diǎn)更新每個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi順序更新與其相連的My中的z個(gè)外信息,每更新一個(gè)外信息CNUi從與之相連的My的讀端口中讀取一個(gè)外信息,進(jìn)行校驗(yàn)節(jié)點(diǎn)的更新計(jì)算后將新的外信息回入到% _中。每個(gè)校驗(yàn)節(jié)點(diǎn)信息的讀出、計(jì)算和寫入以流水線方式完成。 同時(shí),PCU從RAM_C中取出譯碼碼字信息,將碼字與校驗(yàn)矩陣相乘,產(chǎn)生伴隨式向量;⑷將迭代次數(shù)iter累加I。如果計(jì)算得到的伴隨式向量為全零,表示此次判決得到的譯碼碼字為合法碼字,又或者iter已達(dá)到最大迭代次數(shù)MAX_ITER,那么轉(zhuǎn)入步驟(5)將譯碼結(jié)果輸出,否則,返回到步驟(2)繼續(xù)進(jìn)行下一輪的迭代計(jì)算;(5)將RAM_ C存儲模塊中的譯碼碼字讀出作為最終譯碼結(jié)果輸出。在存儲器的訪問上,VNU和CNU對RAM_M的讀寫是一種開關(guān)切換式的訪問方法,在 VNU工作時(shí)RAM_M的訪問權(quán)由VNU模塊控制,在CNU工作時(shí)RAM_M的訪問權(quán)則由CNU模塊控制。存儲器中的數(shù)據(jù)讀寫采用靜態(tài)地址管理方式,即每個(gè)外信息數(shù)據(jù)的存儲地址為固定值。每個(gè)校驗(yàn)矩陣子分塊的z個(gè)外信息數(shù)據(jù)存儲在與其對應(yīng)的Mi, ^中,z為校驗(yàn)子矩陣的維數(shù),i,j分別為校驗(yàn)子矩陣的行分塊序號和列分塊序號。在步驟(2)中VNUj需要按列順序讀寫中的z個(gè)外信息,該子矩陣第一列到第z列的外信息訪問地址固定為0 z, 讀寫數(shù)據(jù)時(shí)其起始訪問地址為0,每下一個(gè)外信息的讀寫地址累加I ;在步驟(3)中CNUi按行順序讀寫中的z個(gè)外信息數(shù)據(jù),若第i行第j列校驗(yàn)子矩陣的循環(huán)偏移量為a u,那么該子矩陣第X行的外信息數(shù)據(jù)的訪問地址為(a ij+Wmodz,讀寫數(shù)據(jù)時(shí)起始訪問地址為 a u,每下一個(gè)讀寫地址為上一個(gè)地址加I后對z取模的值,這種靜態(tài)地址管理方式的讀寫地址示意圖如圖2所示。由于LDPC碼的迭代譯碼過程是一個(gè)變量節(jié)點(diǎn)與校驗(yàn)節(jié)點(diǎn)交替?zhèn)鬟f外信息的過程,VNU和CNU互為輸入和輸出,在傳統(tǒng)的LDPC碼譯碼器的工作過程中VNU和CNU同時(shí)只有一方在工作,譯碼器中的大部分處理電路在一半譯碼時(shí)間里處于空閑狀態(tài),因此導(dǎo)致FPGA 硬件資源的利用效率較低,圖3給出了兩者在迭代譯碼過程中的工作時(shí)序。針對傳統(tǒng)LDPC碼譯碼器硬件資源利用效率較低的問題,一種兩幀數(shù)據(jù)同時(shí)譯碼、 譯碼計(jì)算單元交替處理兩幀不同外信息的譯碼器設(shè)計(jì)方法被提出。譯碼器的變量節(jié)點(diǎn)計(jì)算單元VNU和校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNU同時(shí)連接兩幀譯碼數(shù)據(jù),RAM_F1和RAM_F2分別存儲兩數(shù)據(jù)幀的信道信息,RAM_M1和RAM_M2分別存儲兩數(shù)據(jù)幀的外信息,RAM_C1和RAM_C2則分別存儲兩數(shù)據(jù)幀的判決碼字,其譯碼過程如下(I)初始化將兩幀信道信息序列分別存儲到RAM_F1和RAM_F2中,將RAM_M1和RAM_M2中的外信息初始化為全零,兩數(shù)據(jù)幀的迭代處理次數(shù)設(shè)為0次;(2)第一幀的變量節(jié)點(diǎn)更新首先VNU處理單元完成第一幀數(shù)據(jù)的變量節(jié)點(diǎn)更新,此時(shí)CNU處理單元暫時(shí)空閑;(3)第一幀的校驗(yàn)節(jié)點(diǎn)和第二幀的變量節(jié)點(diǎn)并行更新CNU處理單元完成第一幀數(shù)據(jù)的校驗(yàn)節(jié)點(diǎn)更新,同時(shí)VNU處理單元跳轉(zhuǎn)到第二幀上完成第二幀數(shù)據(jù)的變量節(jié)點(diǎn)更新;(4)交換兩幀數(shù)據(jù)進(jìn)行處理如果在上一輪更新中,CNU更新第一幀數(shù)據(jù),VNU更新第二幀數(shù)據(jù),則CNU轉(zhuǎn)到第二幀上完成校驗(yàn)節(jié)點(diǎn)的更新,VNU轉(zhuǎn)到第一幀上完成變量節(jié)點(diǎn)的更新;否則,CNU完成第一幀數(shù)據(jù)的校驗(yàn)節(jié)點(diǎn)更新,VNU完成第二幀數(shù)據(jù)的變量節(jié)點(diǎn)更新;(5)如果兩幀的伴隨式向量均為全零,或已達(dá)到最大迭代次數(shù),則轉(zhuǎn)入步驟(6)將譯碼結(jié)果輸出,否則,轉(zhuǎn)入步驟(4)繼續(xù)進(jìn)行兩幀數(shù)據(jù)的交換迭代處理;(6)將 RAM_C1和RAM_C2兩存儲模塊的譯碼碼字讀出作為最終譯碼結(jié)果輸出。這種改進(jìn)的兩幀并行譯碼方法的VPU和CPU更新時(shí)序如圖4所示。由于VPU和 CPU交替處理不同的兩數(shù)據(jù)幀,該方法設(shè)計(jì)得到的譯碼器吞吐量接近傳統(tǒng)設(shè)計(jì)方法的兩倍, 但由于FPGA中每個(gè)RAM端口每次只能讀寫一個(gè)地址上的數(shù)據(jù),采用傳統(tǒng)的靜態(tài)地址管理方法,每個(gè)外信息的讀出和寫入需要占用不同的兩個(gè)端口,每塊RAM資源的端口數(shù)量最多為2 個(gè),因此譯碼器的兩幀數(shù)據(jù)必需分別存儲在不同的兩塊RAM中,該譯碼器的RAM資源需求數(shù)量是傳統(tǒng)方法的兩倍。另外,由于譯碼器在譯碼開始階段只有VNU處于工作狀態(tài),CNU存在空閑時(shí)隙,該方法沒有做到VNU和CNU兩處理單元的完全并行工作。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對上述已有技術(shù)的不足,提供一種基于FPGA的準(zhǔn)循環(huán)低密度校驗(yàn)碼譯碼器及譯碼方法,以減少FPGA存儲資源的占用數(shù)量,提高譯碼器中邏輯資源和 RAM資源的利用效率,并提高譯碼器的譯碼吞吐量。為實(shí)現(xiàn)上述目的,本發(fā)明的校驗(yàn)碼譯碼器,包括變量節(jié)點(diǎn)計(jì)算模塊VNU,用于對譯碼的變量節(jié)點(diǎn)外信息更新計(jì)算,其中包含n個(gè)變量節(jié)點(diǎn)計(jì)算單元VNUj, I < j < n, n為基矩陣的列分塊數(shù)量;校驗(yàn)節(jié)點(diǎn)計(jì)算模塊CNU,用于對譯碼的校驗(yàn)節(jié)點(diǎn)外信息更新計(jì)算,其中包含m個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi, I < i < m, m為基矩陣的行分塊數(shù)量;校驗(yàn)方程計(jì)算模塊PCU,用于校驗(yàn)譯碼結(jié)果是否為合法碼字;信道初始信息存儲模塊RAM_F,用于存儲接收的信道似然比信息,其中包含n塊 RAM存儲塊F」,I ^ j ^ n ;迭代外信息存儲模塊RAM_M,用于存儲迭代譯碼過程中變量節(jié)點(diǎn)和校驗(yàn)節(jié)點(diǎn)相互傳遞的迭代外信息,其中包含mXn塊RAM存儲塊Mi,」,I彡i彡m,I彡j彡n ;譯碼碼字存儲模塊RAM_C,用于存儲譯碼得到的碼字結(jié)果;其特征在于所述RAM_F、RAM_M和RAM_C三個(gè)模塊中的每塊RAM均存儲不同的兩幀譯碼數(shù)據(jù);所述每塊存儲塊&中含有兩個(gè)只讀端口,這兩個(gè)只讀端口均與校驗(yàn)節(jié)點(diǎn)計(jì)算單元 CNUi相連,分別負(fù)責(zé)兩幀不同的信道初始信息的讀取;所述每塊存儲塊中含有兩個(gè)讀寫端口,其讀寫模式為“先讀后寫模式”,每個(gè)讀寫端口均與變量節(jié)點(diǎn)計(jì)算單元VNUj和校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi相連,每個(gè)端口各負(fù)責(zé)一巾貞迭代外信息的讀寫。為實(shí)現(xiàn)上述目的,本發(fā)明的校驗(yàn)碼譯碼方法,包括如下步驟I)初始化將接收到的兩幀信道似然比信息按照校驗(yàn)矩陣H的列分塊分段存入信道初始信息存儲模塊RAM_F的各存儲塊Fi中,兩幀數(shù)據(jù)的地址范圍分別為0 z-1和z 2z-l,z為校驗(yàn)子矩陣的維數(shù);將迭代外信息存儲模塊RAM_M中的第一巾貞外信息初始化為全零,第二幀外信息初始化為信道接收似然比信息;將迭代次數(shù)iter初始化為0次;2)對第一幀數(shù)據(jù)的變量節(jié)點(diǎn)和第二幀數(shù)據(jù)的校驗(yàn)節(jié)點(diǎn)進(jìn)行更新2a)變量節(jié)點(diǎn)計(jì)算模塊中的每個(gè)變量節(jié)點(diǎn)計(jì)算單元VN%以列順序逐個(gè)更新與之相連的中的第一幀的z個(gè)外信息,其中VNUj為VNU中進(jìn)行第j列變量節(jié)點(diǎn)更新計(jì)算的變量節(jié)點(diǎn)計(jì)算單元,Mijj為RAM_M中存儲第i行第j列校驗(yàn)子矩陣外信息的存儲塊;2b)校驗(yàn)節(jié)點(diǎn)計(jì)算模塊中的每個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi以行順序逐個(gè)更新與之相連的中的第二幀的z個(gè)外信息,其中CNUi為CNU中進(jìn)行第i行校驗(yàn)節(jié)點(diǎn)更新計(jì)算的校驗(yàn)節(jié)點(diǎn)計(jì)算單元,Mijj為RAM_M中存儲第i行第j列校驗(yàn)子矩陣外信息的存儲塊;3)對第一幀數(shù)據(jù)的校驗(yàn)節(jié)點(diǎn)和第二幀數(shù)據(jù)的變量節(jié)點(diǎn)進(jìn)行更新3a)校驗(yàn)節(jié)點(diǎn)計(jì)算模塊中的每個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi以行順序逐個(gè)更新與之相連的中的第一幀的z個(gè)外信息;3b)變量節(jié)點(diǎn)計(jì)算模塊中的每個(gè)變量節(jié)點(diǎn)計(jì)算單元VN%以列順序逐個(gè)更新與之相連的中的第二幀的z個(gè)外信息;4)將迭代次數(shù)iter加1,計(jì)算第一幀譯碼結(jié)果的伴隨式向量S1和第二幀譯碼結(jié)果的伴隨式向量S2,若S1 = S2 = 0或iter等于最大迭代次數(shù)MAX_ITER,執(zhí)行步驟5),否則轉(zhuǎn)到步驟2)繼續(xù)進(jìn)行迭代譯碼計(jì)算;5)從譯碼碼字存儲模塊RAM_C中分別讀出兩幀譯碼判決結(jié)果作為譯碼結(jié)果輸出。本發(fā)明由于在譯碼器的數(shù)據(jù)初始化階段將第一幀數(shù)據(jù)的外信息值置為全0,將第二幀數(shù)據(jù)的外信息值設(shè)為信道接收似然比信息,可使校驗(yàn)節(jié)點(diǎn)處理單元在譯碼過程的開始階段就可以與變量節(jié)點(diǎn)處理單元一起并行進(jìn)行兩幀譯碼數(shù)據(jù)的迭代更新處理,有效縮短了處理兩譯碼數(shù)據(jù)幀所需的工作時(shí)鐘周期,從而提高了整個(gè)譯碼器的譯碼吞吐量;同時(shí)由于本發(fā)明在外信息的訪問上采用了動態(tài)的地址訪問管理方法,使得變量節(jié)點(diǎn)處理單元和校驗(yàn)節(jié)點(diǎn)處理單元只需一個(gè)RAM端口就可以完成一幀外信息數(shù)據(jù)的讀寫,從而能夠在單塊RAM 中同時(shí)實(shí)現(xiàn)兩幀譯碼數(shù)據(jù)的存儲與訪問,與傳統(tǒng)設(shè)計(jì)方法相比,譯碼器的BRAM資源利用率
能夠提高一倍。 實(shí)現(xiàn)結(jié)果表明,本發(fā)明能夠在QC-LDPC碼譯碼器使用的FPGA硬件資源數(shù)量基本不變的情況下,將傳統(tǒng)譯碼器的總譯碼吞吐量提高近一倍。
圖I是傳統(tǒng)LDPC碼譯碼器結(jié)構(gòu)示意圖;圖2是現(xiàn)有靜態(tài)地址管理方式的讀寫地址示意圖;圖3是傳統(tǒng)譯碼器中VNU和CNU的迭代工作時(shí)序圖;圖4是現(xiàn)有改進(jìn)的兩幀并行譯碼的VI3U和CPU更新時(shí)序圖;圖5是本發(fā)明提供的低存儲量高速譯碼器結(jié)構(gòu)圖;圖6是本發(fā)明提供的低存儲量高速譯碼方法的流程圖;圖7是本發(fā)明譯碼方法中的外信息動態(tài)地址訪問示意圖;圖8是本發(fā)明的譯碼性能仿真圖。
具體實(shí)施例方式參照圖5,本發(fā)明提供的低存儲量高速譯碼器結(jié)構(gòu)主要包括6部分,分別為變量節(jié)點(diǎn)計(jì)算模塊VNU、校驗(yàn)節(jié)點(diǎn)計(jì)算模塊CNU、校驗(yàn)方程計(jì)算模塊PCU、信道初始信息存儲塊RAM_ F、迭代外信息存儲塊RAM_M和譯碼碼字存儲塊RAM_C。其中,變量節(jié)點(diǎn)計(jì)算模塊VNU,用于完成譯碼的變量節(jié)點(diǎn)外信息更新計(jì)算,它包含n個(gè)變量節(jié)點(diǎn)計(jì)算單元VNUj, I < j < n,n為基矩陣的列分塊數(shù)量;校驗(yàn)節(jié)點(diǎn)計(jì)算模塊CNU,用于完成譯碼的校驗(yàn)節(jié)點(diǎn)外信息更新計(jì)算, 它包含m個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi, I < i <m,m為基矩陣的行分塊數(shù)量;校驗(yàn)方程計(jì)算模塊PCU,用于校驗(yàn)譯碼結(jié)果是否為合法碼字;信道初始信息存儲模塊RAM_F,用于存儲接收的信道似然比信息,它包含n塊RAM存儲塊匕,I彡j彡n ;迭代外信息存儲模塊RAM_M,用于存儲迭代譯碼過程中變量節(jié)點(diǎn)和校驗(yàn)節(jié)點(diǎn)相互傳遞的迭代外信息,它包含mXn塊RAM存儲塊Mm,I ^ i ^ m, I ^ j ^ n ;譯碼碼字存儲模塊RAM_C,用于存儲譯碼得到的碼字結(jié)果。 其中,RAM_F、RAM_M和RAM_C中的每個(gè)RAM存儲塊中均存有不同兩幀的譯碼數(shù)據(jù),它們分別是RAM_F中存儲的譯碼數(shù)據(jù)為不同的兩幀信道接收似然比值;RAM_C中存儲的譯碼數(shù)據(jù)為不同的兩幀譯碼判決結(jié)果;RAM_M中存儲的兩幀譯碼數(shù)據(jù)為外信息初始值,該第一幀數(shù)據(jù)存儲的初始外信息為校驗(yàn)節(jié)點(diǎn)外信息,其值為全0,該第二幀數(shù)據(jù)存儲的初始外信息為變量節(jié)點(diǎn)外信息,其值為信道接收的似然比值。譯碼器中各模塊的連接關(guān)系如下RAM_F中的每塊存儲塊匕中含有兩個(gè)只讀端口,這兩個(gè)只讀端口均與校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi相連,分別負(fù)責(zé)兩幀不同的信道初始信息的讀取;RAM_M*的每塊存儲塊Mm中含有兩個(gè)讀寫端口,其讀寫模式為“先讀后寫模式”,每個(gè)讀寫端口均與變量節(jié)點(diǎn)計(jì)算單元 VNUj和校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi相連,每個(gè)端口各負(fù)責(zé)一幀迭代外信息的讀出和寫入。RAM_C 的寫端口和讀端口分別與VNU和P⑶相連,VNU從寫端口將判決碼字存入RAM_C中,P⑶則
8從讀端口將判決碼字讀出檢驗(yàn)其是否為合法碼字。參照圖6,本發(fā)明提供的低存儲量高速譯碼方法,其步驟如下步驟I,初始化將接收到的兩幀信道似然比信息按照校驗(yàn)矩陣H的列分塊分段存入信道初始信息存儲模塊RAM_F的各存儲塊。中,兩幀數(shù)據(jù)的地址范圍分別為0 z-1和 z 2z-l,Fj為RAM_M中存儲第j列校驗(yàn)子矩陣信道初始信息的存儲塊,z為校驗(yàn)子矩陣的維數(shù);將迭代外信息存儲模塊RAM_M中的第一幀外信息初始化為全零,第二幀外信息初始化為信道接收似然比信息;將迭代次數(shù)iter初始化為0次;步驟2,對第一幀數(shù)據(jù)的變量節(jié)點(diǎn)和第二幀數(shù)據(jù)的校驗(yàn)節(jié)點(diǎn)進(jìn)行更新變量節(jié)點(diǎn)計(jì)算模塊中的每個(gè)變量節(jié)點(diǎn)計(jì)算單元VNUj以列順序逐個(gè)更新與之相連的中的第一幀的z個(gè)外信息;同時(shí),校驗(yàn)節(jié)點(diǎn)計(jì)算模塊中的每個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi 以行順序逐個(gè)更新與之相連的Mi, j中的第二幀的z個(gè)外信息,其中VNUj為VNU中進(jìn)行第j 列變量節(jié)點(diǎn)更新計(jì)算的變量節(jié)點(diǎn)計(jì)算單元,CNUi為CNU中進(jìn)行第i行校驗(yàn)節(jié)點(diǎn)更新計(jì)算的校驗(yàn)節(jié)點(diǎn)計(jì)算單元,Mijj為RAM_M中存儲第i行第j列校驗(yàn)子矩陣外信息的存儲塊;所述變量節(jié)點(diǎn)計(jì)算單元VNUj對每個(gè)外信息的更新分為三步-.VNUj先分別從和 Fj中讀取更新計(jì)算所需的外信息和信道似然比信息;VN%再根據(jù)讀出的外信息和信道似然比信息進(jìn)行變量節(jié)點(diǎn)的更新計(jì)算,并完成該節(jié)點(diǎn)的譯碼比特判決-,VNUj最后將更新計(jì)算得到的外信息數(shù)據(jù)和譯碼判決比特分別寫入和譯碼碼字存儲模塊RAM_C中。所述校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi對每個(gè)外信息的更新也分為三步=CNUi先從Mm中讀取更新計(jì)算所需的外信息KNUi再根據(jù)讀出的外信息進(jìn)行變量節(jié)點(diǎn)的更新計(jì)算KNUi最后將更新計(jì)算得到的外信息回寫到中;所述變量節(jié)點(diǎn)計(jì)算單元VNUj和校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi對每個(gè)外信息的更新,需要對中的外信息數(shù)據(jù)進(jìn)行讀出和寫入,其中中的外信息數(shù)據(jù)的讀寫采用一種動態(tài)的地址訪問管理方法,每進(jìn)行一次外信息的更新,各變量節(jié)點(diǎn)和校驗(yàn)節(jié)點(diǎn)的外信息存儲地址將改變,其地址分配方法如下a)將Mi, j中的第一幀數(shù)據(jù)的z個(gè)外信息初始存儲地址分別設(shè)為0 z_l,將第二幀數(shù)據(jù)的z個(gè)外信息初始存儲地址分別設(shè)為z 2z_l,z為校驗(yàn)子矩陣的維數(shù);b)每次變量節(jié)點(diǎn)外信息更新計(jì)算完畢后,該外信息數(shù)據(jù)的存儲地址將從新分配, 若其讀出地址為4,其寫入地址將被設(shè)為(dv+Lv)modz,Lv是VNU對一個(gè)外信息數(shù)據(jù)進(jìn)行變量節(jié)點(diǎn)更新的流水線計(jì)算長度;c)每次校驗(yàn)節(jié)點(diǎn)外信息更新計(jì)算完畢后,該外信息數(shù)據(jù)的存儲地址將從新分配, 若其讀出地址為dh,其寫入地址將被設(shè)為(dh+Lh)modz,Lh是CNU對一個(gè)外信息數(shù)據(jù)進(jìn)行校驗(yàn)節(jié)點(diǎn)更新的流水線計(jì)算長度。例如,對第一幀的一個(gè)變量節(jié)點(diǎn),若其外信息的初始存儲地址為1,且有 (l+2Lv+Lh)modz < z,其外信息迭代更新的地址訪問過程如下第一次變量節(jié)點(diǎn)更新,該外信息的讀出和寫入地址分別為I和1+LV ;第一次校驗(yàn)節(jié)點(diǎn)更新,該外信息的讀出和寫入地址分別為1+1^和1+Lv+Lh,第二次變量節(jié)點(diǎn)更新,該外信息的讀出和寫入地址分別為1+Lv+Lh 和1+2LV+Lh,以后,每次校驗(yàn)節(jié)點(diǎn)更新的寫入地址為其讀出地址加Lh后對z取模的結(jié)果,每次變量節(jié)點(diǎn)更新的寫入地址為其讀出地址加Lv后對z取模的結(jié)果,如圖7所示。該地址分配方法使得當(dāng)前需要讀出的節(jié)點(diǎn)外信息的地址和更新完畢需要寫入的節(jié)點(diǎn)外信息的地址完全相同,通過將讀寫端口的讀寫模式設(shè)置為“先讀后寫模式”,可以在單個(gè)讀寫端口上同時(shí)完成兩個(gè)變量節(jié)點(diǎn)外信息或兩個(gè)校驗(yàn)節(jié)點(diǎn)外信息的讀出和寫入。步驟3,對第一幀數(shù)據(jù)的校驗(yàn)節(jié)點(diǎn)和第二幀數(shù)據(jù)的變量節(jié)點(diǎn)進(jìn)行更新校驗(yàn)節(jié)點(diǎn)計(jì)算模塊中的每個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi以行順序逐個(gè)更新與之相連的Mi, j中的第一幀的z個(gè)外信息,同時(shí)變量節(jié)點(diǎn)計(jì)算模塊中的每個(gè)變量節(jié)點(diǎn)計(jì)算單元VNUj 以列順序逐個(gè)更新與之相連的中的第二幀的z個(gè)外信息;步驟4,將迭代次數(shù)iter加1,計(jì)算第一幀譯碼結(jié)果的伴隨式向量S1和第二幀譯碼結(jié)果的伴隨式向量S2,若S1 = S2 = 0或iter等于最大迭代次數(shù)MAX_ITER,執(zhí)行步驟5, 否則轉(zhuǎn)到步驟2繼續(xù)進(jìn)行迭代譯碼計(jì)算;步驟5,從譯碼碼字存儲模塊RAM_C中分別讀出兩幀譯碼判決結(jié)果作為譯碼結(jié)果輸出。本發(fā)明的譯碼器效果可以通過以下理論分析和實(shí)現(xiàn)結(jié)果進(jìn)一步說明I.本發(fā)明的迭代外信息存儲模塊中存儲的兩幀初始節(jié)點(diǎn)外信息數(shù)據(jù)分別為變量節(jié)點(diǎn)外信息和校驗(yàn)節(jié)點(diǎn)外信息,使得變量節(jié)點(diǎn)處理單元和校驗(yàn)節(jié)點(diǎn)處理單元在整個(gè)譯碼過程中能夠完全并行交替處理兩數(shù)據(jù)幀,在譯碼器工作時(shí)鐘相同的情況下,其譯碼的吞吐量為傳統(tǒng)譯碼器的兩倍,比改進(jìn)的兩幀并行譯碼器的譯碼吞吐量更高。本發(fā)明在外信息的訪問上采用了動態(tài)的地址訪問管理方法,能夠在單塊RAM中同時(shí)實(shí)現(xiàn)兩幀譯碼數(shù)據(jù)的存儲與訪問,與改進(jìn)的兩幀并行譯碼器相比,譯碼器所需的BRAM資源可以減少一半。2.本發(fā)明的譯碼器和譯碼方法在Xilinx公司的XC4VLX80FPGA上進(jìn)行了實(shí)現(xiàn)。該譯碼器基于碼率為5/6,碼長為2304的QC-LDPC碼,譯碼算法為歸一化最小和算法,圖8是該QC-LDPC碼在AWGN信道、BPSK調(diào)制條件下的譯碼性能。傳統(tǒng)的譯碼器、改進(jìn)的兩幀并行譯碼器和本發(fā)明的低存儲量高速譯碼器在 ISE10. I平臺上的實(shí)現(xiàn)結(jié)果數(shù)據(jù)如下表所示。表IXilinx FPGAXC4VLX80上的實(shí)現(xiàn)結(jié)果統(tǒng)計(jì)
結(jié)構(gòu)Slice資源RAM資源時(shí)鐘頻率吞吐量傳統(tǒng)譯碼器6412108116MHz99Mbps改進(jìn)的兩幀并行譯碼器6795216105 MHz181Mbps本發(fā)明的低存儲量高速譯碼器6802108105 MHz190Mbps從表I可見,本發(fā)明的低存儲量高速譯碼器的譯碼吞吐量為190Mbps,接近傳統(tǒng)譯碼器吞吐量的兩倍,較改進(jìn)的兩幀并行譯碼器的吞吐量略高,本發(fā)明的譯碼器譯碼吞吐量沒有完全達(dá)到傳統(tǒng)譯碼器的兩倍,是因?yàn)樵撟g碼器的運(yùn)行時(shí)鐘頻率較傳統(tǒng)譯碼器略低。在硬件資源的使用數(shù)量上,本發(fā)明的譯碼器所需的Slice資源較傳統(tǒng)譯碼器略高,與改進(jìn)的兩幀并行譯碼器基本相當(dāng),本發(fā)明的譯碼器所需的RAM資源與傳統(tǒng)譯碼器的相同,為改進(jìn)的兩幀并行譯碼器的RAM資源的一半。本發(fā)明未詳細(xì)描述內(nèi)容為本領(lǐng)域的公知技術(shù)。
權(quán)利要求
1.一種基于FPGA的低存儲量高速Q(mào)C-LDPC碼譯碼器,包括變量節(jié)點(diǎn)計(jì)算模塊VNU,用于對譯碼的變量節(jié)點(diǎn)外信息更新計(jì)算,其中包含n個(gè)變量節(jié)點(diǎn)計(jì)算單元VNUj, I < j < n, n為基矩陣的列分塊數(shù)量;校驗(yàn)節(jié)點(diǎn)計(jì)算模塊CNU,用于對譯碼的校驗(yàn)節(jié)點(diǎn)外信息更新計(jì)算,其中包含m個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi, I < i < m, m為基矩陣的行分塊數(shù)量;校驗(yàn)方程計(jì)算模塊PCU,用于校驗(yàn)譯碼結(jié)果是否為合法碼字;信道初始信息存儲模塊RAM_F,用于存儲接收的信道似然比信息,其中包含n塊RAM存儲塊F」,I ^ j ^ n ;迭代外信息存儲模塊RAM_M,用于存儲迭代譯碼過程中變量節(jié)點(diǎn)和校驗(yàn)節(jié)點(diǎn)相互傳遞的迭代外信息,其中包含mXn塊RAM存儲塊Mi,」,I彡i彡m,I彡j彡n ;譯碼碼字存儲模塊RAM_C,用于存儲譯碼得到的碼字結(jié)果;其特征在于所述RAM_F、RAM_M和RAM_C三個(gè)模塊中的每塊RAM均存儲不同的兩幀譯碼數(shù)據(jù);所述每塊存儲塊。中含有兩個(gè)只讀端口,這兩個(gè)只讀端口均與校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi 相連,分別負(fù)責(zé)兩幀不同的信道初始信息的讀??;所述每塊存儲塊中含有兩個(gè)讀寫端口,其讀寫模式為“先讀后寫模式”,每個(gè)讀寫端口均與變量節(jié)點(diǎn)計(jì)算單元VNUj和校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi相連,每個(gè)端口各負(fù)責(zé)一巾貞迭代外信息的讀寫。
2.根據(jù)權(quán)利要求I所述的譯碼器,其特征在于,迭代外信息存儲模塊RAM_M中存儲的兩幀譯碼數(shù)據(jù)為外信息初始值,其中第一幀數(shù)據(jù)存儲的初始外信息為校驗(yàn)節(jié)點(diǎn)外信息,其值為全0,第二幀數(shù)據(jù)存儲的初始外信息為變量節(jié)點(diǎn)外信息,其值為信道接收的似然比值。
3.根據(jù)權(quán)利要求I所述的譯碼器,其特征在于,信道初始信息存儲模塊RAM_F中存儲的譯碼數(shù)據(jù)為不同的兩幀信道接收似然比值。
4.根據(jù)權(quán)利要求I所述的譯碼器,其特征在于,譯碼碼字存儲模塊RAM_C中存儲的譯碼數(shù)據(jù)為不同的兩幀譯碼判決結(jié)果。
5.一種基于FPGA的低存儲量高速Q(mào)C-LDPC碼譯碼方法,包括如下步驟1)初始化將接收到的兩幀信道似然比信息按照校驗(yàn)矩陣H的列分塊分段存入信道初始信息存儲模塊RAM_F的各存儲塊匕中,兩幀數(shù)據(jù)的地址范圍分別為0 z-1和z 2z-l, Fj為RAM_M中存儲第j列校驗(yàn)子矩陣信道初始信息的存儲塊,z為校驗(yàn)子矩陣的維數(shù);將迭代外信息存儲模塊RAM_M中的第一幀外信息初始化為全零,第二幀外信息初始化為信道接收似然比信息;將迭代次數(shù)iter初始化為0次;2)對第一幀數(shù)據(jù)的變量節(jié)點(diǎn)和第二幀數(shù)據(jù)的校驗(yàn)節(jié)點(diǎn)進(jìn)行更新2a)變量節(jié)點(diǎn)計(jì)算模塊中的每個(gè)變量節(jié)點(diǎn)計(jì)算單元VNUj以列順序逐個(gè)更新與之相連的 Mi, j中的第一幀的z個(gè)外信息,其中VNUj為VNU中進(jìn)行第j列變量節(jié)點(diǎn)更新計(jì)算的變量節(jié)點(diǎn)計(jì)算單元,Mi,」為RAM_M中存儲第i行第j列校驗(yàn)子矩陣外信息的存儲塊;2b)校驗(yàn)節(jié)點(diǎn)計(jì)算模塊中的每個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi以行順序逐個(gè)更新與之相連的 Mi, j中的第二幀的z個(gè)外信息,其中CNUi為CNU中進(jìn)行第i行校驗(yàn)節(jié)點(diǎn)更新計(jì)算的校驗(yàn)節(jié)點(diǎn)計(jì)算單元,Mi,」為RAM_M中存儲第i行第j列校驗(yàn)子矩陣外信息的存儲塊;3)對第一幀數(shù)據(jù)的校驗(yàn)節(jié)點(diǎn)和第二幀數(shù)據(jù)的變量節(jié)點(diǎn)進(jìn)行更新3a)校驗(yàn)節(jié)點(diǎn)計(jì)算模塊中的每個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi以行順序逐個(gè)更新與之相連的 Mi,」中的第一幀的z個(gè)外信息;3b)變量節(jié)點(diǎn)計(jì)算模塊中的每個(gè)變量節(jié)點(diǎn)計(jì)算單元VNUj以列順序逐個(gè)更新與之相連的 Mi,」中的第二幀的z個(gè)外信息;4)將迭代次數(shù)iter加1,計(jì)算第一幀譯碼結(jié)果的伴隨式向量S1和第二幀譯碼結(jié)果的伴隨式向量S2,若S1 = S2 = 0或iter等于最大迭代次數(shù)MAX_ITER,執(zhí)行步驟5),否則轉(zhuǎn)到步驟2)繼續(xù)進(jìn)行迭代譯碼計(jì)算;5)從譯碼碼字存儲模塊RAM_C中分別讀出兩幀譯碼判決結(jié)果作為譯碼結(jié)果輸出。
6.根據(jù)權(quán)利要求5所述的譯碼方法,其中步驟2a)所述的變量節(jié)點(diǎn)計(jì)算模塊中的每個(gè)變量節(jié)點(diǎn)計(jì)算單元VNUj以列順序逐個(gè)更新與之相連的Mi,」中的第一巾貞的z個(gè)外信息,按如下步驟進(jìn)行首先,由VNUj分別從和。中讀取更新計(jì)算所需的外信息和信道似然比信息My中的第一巾貞數(shù)據(jù)的z個(gè)外信息初始存儲地址分別為0 z-1,每次外信息更新完畢后其存儲地址將改變;再次,由VNUj根據(jù)讀出的外信息和信道似然比信息進(jìn)行變量節(jié)點(diǎn)的更新計(jì)算,并完成該節(jié)點(diǎn)的譯碼比特判決;最后,由VNUj將更新計(jì)算得到的外信息數(shù)據(jù)和譯碼判決比特分別寫入和譯碼碼字存儲模塊RAM_C中,若該變量節(jié)點(diǎn)的外信息在中的讀出地址為dv,則將寫入地址設(shè)置為 (dv+Lv)modz, Lv是VNUj對一個(gè)外信息數(shù)據(jù)進(jìn)行變量節(jié)點(diǎn)更新計(jì)算的流水線長度,符號mod 代表取模運(yùn)算。
7.根據(jù)權(quán)利要求5所述的譯碼方法,其中步驟2b)所述的校驗(yàn)節(jié)點(diǎn)計(jì)算模塊中的每個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi以行順序逐個(gè)更新與之相連的中的第二幀的z個(gè)外信息,按如下步驟進(jìn)行首先,由CNUi從Mi, j中讀取更新計(jì)算所需的外信息;第二幀數(shù)據(jù)的z個(gè)外信息初始存儲地址分別為z 2z-l,每次外信息更新完畢后其存儲地址將改變;再次,由CNUi根據(jù)讀出的外信息進(jìn)行變量節(jié)點(diǎn)的更新計(jì)算;最后,由CNUi將更新計(jì)算得到的外信息回寫到Mi, j中;若校驗(yàn)節(jié)點(diǎn)外信息的讀出地址為dh,則將寫入地址設(shè)置為(dh+Lh)modz,Lh是CNU對一個(gè)外信息數(shù)據(jù)進(jìn)行校驗(yàn)節(jié)點(diǎn)更新計(jì)算的流水線長度。
8.根據(jù)權(quán)利要求5所述的譯碼方法,其中步驟3a)所述的校驗(yàn)節(jié)點(diǎn)計(jì)算模塊中的每個(gè)校驗(yàn)節(jié)點(diǎn)計(jì)算單元CNUi以行順序逐個(gè)更新與之相連的Mi,」中的第一巾貞的z個(gè)外信息,按如下步驟進(jìn)行首先,由CNUi從My中讀取更新計(jì)算所需的外信息;再次,由CNUi根據(jù)讀出的外信息進(jìn)行變量節(jié)點(diǎn)的更新計(jì)算;最后,由CNUi將更新計(jì)算得到的外信息回寫到Mi, j中;若校驗(yàn)節(jié)點(diǎn)外信息的讀出地址為dh,則將寫入地址設(shè)置為(dh+Lh)modz,Lh是CNU對一個(gè)外信息數(shù)據(jù)進(jìn)行校驗(yàn)節(jié)點(diǎn)更新計(jì)算的流水線長度。
9.根據(jù)權(quán)利要求5所述的譯碼方法,其中步驟3b)所述的變量節(jié)點(diǎn)計(jì)算模塊中的每個(gè)變量節(jié)點(diǎn)計(jì)算單元以列順序逐個(gè)更新與之相連的中的第二幀的z個(gè)外信息,按如下步驟進(jìn)行首先,由VNUj分別從和。中讀取更新計(jì)算所需的外信息和信道似然比信息; 再次,由VNUj根據(jù)讀出的外信息和信道似然比信息進(jìn)行變量節(jié)點(diǎn)的更新計(jì)算,并完成該節(jié)點(diǎn)的譯碼比特判決;最后,由VNUj將更新計(jì)算得到的外信息數(shù)據(jù)和譯碼判決比特分別寫入和RAM_C中, 若該變量節(jié)點(diǎn)的外信息在Miij中的讀出地址為dv,則將寫入地址設(shè)置為(dv+Lv)modz,Lv是 VNU對一個(gè)外信息數(shù)據(jù)進(jìn)行變量節(jié)點(diǎn)更新計(jì)算的流水線長度。
全文摘要
本發(fā)明公開了一種基于FPGA的低存儲量高速Q(mào)C-LDPC碼譯碼器和譯碼方法,主要解決現(xiàn)有技術(shù)中譯碼器的節(jié)點(diǎn)更新處理單元和RAM存儲資源利用效率不高的問題。該譯碼器同時(shí)處理兩幀譯碼數(shù)據(jù),譯碼器在數(shù)據(jù)初始化階段將第一幀數(shù)據(jù)的外信息值置為全0,將第二幀數(shù)據(jù)的外信息值設(shè)為信道接收似然比信息,使得變量節(jié)點(diǎn)處理單元和校驗(yàn)節(jié)點(diǎn)處理單元在整個(gè)譯碼過程中能夠完全并行交替處理兩數(shù)據(jù)幀,有效縮短了處理兩幀數(shù)據(jù)所需的工作時(shí)鐘周期,其譯碼吞吐量約為傳統(tǒng)設(shè)計(jì)方法的兩倍。本發(fā)明在外信息的訪問上采用了動態(tài)的地址訪問管理方法,能夠在單塊RAM中實(shí)現(xiàn)兩幀譯碼數(shù)據(jù)的并行訪問,與現(xiàn)有的譯碼器相比,其BRAM資源利用效率提高一倍,可用于基于LDPC碼的物理層信息傳輸糾錯。
文檔編號H03M13/11GK102594369SQ201210045900
公開日2012年7月18日 申請日期2012年2月27日 優(yōu)先權(quán)日2012年2月27日
發(fā)明者崔俊云, 施玉晨, 林偉, 王玨, 白寶明, 袁瑞佳 申請人:西安電子科技大學(xué)