專利名稱:基于流水線工作方式的ldpc碼譯碼器的制作方法
技術領域:
本發(fā)明涉及電子技術領域,尤其涉及通信數據傳輸與數據存儲技術領域,具體是一種LDPC碼譯碼器結構。
背景技術:
在VLSI設計中,資源和速度總是一對不可調和的矛盾。結構設計工作主要是解決資源和速度的平衡問題。對于LDPC碼的譯碼器,需要平衡的不僅僅是資源和速度,還包括誤碼率性能。也就是說LDPC碼譯碼器的設計,需要從整體上對資源、速度和誤碼率性能做一個平衡。
其中誤碼率性能主要是由兩方面決定的,首先就是譯碼器采用的譯碼算法,例如采用MIN-SUM算法肯定會帶來較BP算法更多的性能損失,但在很多情況下需要通過犧牲一部分性能來換取對資源占用的降低。其次就是譯碼器采用的數據格式,我們知道在計算機仿真中數據采用的是單精度或者雙精度的浮點數,而實際的硬件實現(xiàn)中,必須通過一定長度的二進制數來近似的表示浮點數,采用的二進制數越長,其精度越好,對應的LDPC碼譯碼器的實際性能就能越靠近軟件仿真性能,在某些對性能要求極度苛刻的情況下還可以考慮采用IEEE754標準來設計VLSI中的數據格式。誤碼率性能的設計在一定程度上可以看作是校驗點計算模塊和變量點計算模塊內部結構的設計。
在設計譯碼器整體結構之前需要明確,對于LDPC碼的譯碼器,誤碼率性能主要由譯碼算法決定;而速度與資源的占用主要由譯碼器的結構決定。無論從哪種LDPC碼譯碼算法來看,LDPC碼的譯碼過程主要包括信道信息初始化,校驗點計算,變量點計算,硬判決和輸出結果判斷。在按照LDPC碼譯碼過程的基礎上發(fā)展出了LDPC碼的完全串行譯碼結構,完全串行譯碼結構的主要特點在于只有1個校驗點計算單元(CNU)和1個變量點計算單元(VNU),二者之間通過RAM陣列將所有的計算結果緩存起來,該譯碼器結構簡單,但計算速度慢。
完全并行譯碼結構主要特點是含有m個校驗點計算單元和n個變量點計算單元,基本上不需要對迭代計算過程中的數據進行存儲。其主要優(yōu)點在于具有極高的計算速度,而其主要缺點是由于計算模塊數目過多,將占用過多的資源。其次由于連線數目的龐大,當幀長較長的時候,由于需要連接的數據線過多,基本上會導致布線無法通過。例如本課題組曾經完成的n=20的LDPC碼完全并行譯碼器,在Xilinx Virtex2 3000上布局布線后占用了5334個Slices,占全部Slices(14336個)的37%。同比計算,當n=1000時,采用完全并行譯碼結構的LDPC碼譯碼器將占用超過250,000個Slices,這是任何一款FPGA所無法接受的,而DVB-S2幀長達到6萬。
目前LDPC碼譯碼器最為常用為部分并行譯碼結構。如圖1所示,部分并行譯碼結構在于校驗點計算模塊與變量點計算模塊之間通過了雙口RAM陣列進行了數據緩存;并且需要的CNU和VNU數目分別是校驗點和變量點數目的1/f,折疊系數f是介于[2,M-1]之間的一個正整數,反映的是復用的程度。每個CNU計算后的信息存入雙口RAM陣列,要等一側的計算單元(例如CNU)計算完全結束后,另一側的計算單元(例如VNU)才可以根據更新后的信息進行計算。采用這種譯碼結構,可以將資源的消耗降低至原來的1/f,其缺點在于譯碼速度也將降低為原來的1/f,同時需要一定數目的雙口RAM。
但是,部分并行譯碼結構僅對特定的矩陣是現(xiàn)實的,而這種矩陣的性能表現(xiàn)往往不是相當好。其次,即使經過特定約束的矩陣,在校驗點與變量點的信息傳遞過程中,沖突所引起的阻塞是不可避免的?,F(xiàn)有部分并行譯碼結構,只能通過增加存儲空間以大量的資源消耗為代價或停止譯碼進行數據沖突解決,而不能從根本上解決數據沖突的問題。事實上,通過分析矩陣結構,我們發(fā)現(xiàn)如果能夠合理的進行時序規(guī)劃,并輔之以適量的存儲空間,在譯碼過程中可以避免發(fā)生數據沖突。
發(fā)明內容
為了克服現(xiàn)有LDPC碼譯碼器結構存在的上述缺陷,本發(fā)明所要解決的技術問題是提供一種LDPC碼譯碼器,通過合理的時序規(guī)劃,輔之以適量的存儲空間,在譯碼過程中避免發(fā)生數據沖突。
本發(fā)明的技術方案是設計了一種采用流水工作方式計算變量點與校驗點信息的LDPC碼譯碼器。該譯碼器包括兩個組成部分,一部分由變量點計算單元VNU與校驗點計算單元CNU構成用于以流水線工作方式計算變量點與校驗點信息;另一部分由RAM陣列構成,用于存儲本次迭代與上一次迭代生成的信息。
譯碼器包括一個校驗點計算單元CNU、一系列變量點計算單元VNU以及一系列雙口RAM陣列,每個變量點計算單元分別級聯(lián)雙口RAM陣列,VNU的輸出端連接CNU的輸入端,為CNU提供計算所需要的變量點信息,CNU計算的結果由一系列雙口RAM陣列進行數據緩存,變量點計算單元VNU的數量和雙口RAM陣列的數量由校驗點的度dc確定,每個雙口RAM陣列由一系列物理上獨立的雙口RAM組成,其數量由變量點的度dv確定,雙口RAM陣列分成兩部分,前一部分存儲當前迭代所需信息,后一部分存儲下一次迭代所需信息(即當前CNU生成的信息)。
雙口RAM陣列分別與對應的VNU級聯(lián),VNU為CNU的計算提供所需要的變量點信息,為了使CNU實現(xiàn)流水線方式無阻塞計算,共使用了dc個VNU,使得CNU可以同時得到計算所需要的變量點信息,從而保證CNU實現(xiàn)流水式無阻塞計算,從整體上看,CNU和VNU之間構成了流水線工作模式。
由于VNU與CNU在本譯碼器結構中的地位是對等的,譯碼器也可采用擁有dv個CNU和1個VNU的結構。該譯碼器包括一系列校驗點計算單元分別級聯(lián)對應的雙口RAM陣列,CNU的輸出端連接VNU的輸入端,VNU的輸出由雙口RAM陣列進行數據緩存,由變量點的度確定CNU的數量及雙口RAM陣列的數量,每個雙口RAM陣列由一系列獨立的雙口RAM組成,其數量由校驗點的度確定。
從整體上看,CNU和VNU之間構成了流水線工作模式。對當前迭代,校驗點生成的信息回存雙口RAM,以便進行下一次迭代,由于這是一個一對多的回存過程,也就成功地解決了部分并行譯碼結構面臨的嚴重數據沖突問題??蛇x擇地,為了提高數據吞吐率,在高數據吞吐領域,可以采用多個譯碼器單元同時工作。根據CNU和VNU占用資源的情況確定具體采用哪種譯碼器結構。
通過增加變量點計算次數及存儲量開銷,該結構的工作速度至少是串行譯碼結構的dc倍,并有效解決了LDPC碼矩陣隨機性所帶來的迭代信息實際硬件實現(xiàn)的沖突問題。同時,由于僅需一個CNU、多個VNU或一個VNU、多個CNU,在CNU與VNU資源占用相差較大,如多進制LDPC碼領域,有極高的應用價值。
圖1示出了部分并行譯碼器結構圖2示出了擁有1個CNU和dc個VNU的采用流水工作方式的譯碼器結構具體實施方式
下面針對附圖和具體實施例對本發(fā)明的實施作具體說明。
假設校驗點的度為dc,變量點的度為dv,校驗點計算單元用CNU表示,變量點計算單元用VNU表示。如圖2所示為擁有1個CNU和dc個VNU的采用流水工作方式的譯碼器結構。每個VNU級聯(lián)一個雙口RAM陣列,VNU的輸出端連接CNU的輸入端,CNU計算的結果通過dc個雙口RAM陣列進行數據緩存,而每個雙口RAM陣列都是由dv個物理上獨立的雙口RAM組成。每個雙口RAM分成兩部分,前一部分存儲當前迭代所需的上一次迭代CNU生成的校驗點信息,后一部分存儲下一次迭代所需的當前迭代CNU生成的校驗點信息。
為了使CNU實現(xiàn)流水式無阻塞計算,由校驗點的度dc確定所需VNU的數量,本譯碼器共使用了dc個VNU,VNU為CNU的計算提供所需要的變量點信息,使得CNU計算所需要的變量點信息可以同時得到,從而保證CNU的流水式無阻塞計算。從整體上看,CNU和VNU之間構成了流水線工作模式。
由于每個校驗點最多與dc個變量點關聯(lián),為了保證CNU完成流水式無阻塞計算,在需要進行更新計算時,保證每一個校驗點相關聯(lián)的dc個變量點信息都已經得到更新,這樣就應當有dc個VNU同時計算,并將計算完的結果即時的傳遞給CNU。如果我們按校驗點在矩陣中的先后順序依次在CNU中計算,則應當也按校驗點與變量點中的對應關系依序在VNU中計算變量點信息。
因為每個變量點最多可能關聯(lián)dv個校驗點,因此,每個雙口RAM陣列由dv個物理上獨立的雙口RAM組成,我們預先將完成一次迭代變量點計算所需的校驗點信息分別存入雙口RAM,以此來保證VNU計算過程的無阻塞。
對當前迭代,校驗點生成的信息回存雙口RAM,以便進行下一次迭代,由于這是一個一對多的回存過程,也就成功地解決了部分并行結構的譯碼器結構面臨的嚴重數據沖突問題。在每一次迭代完成后,切換一次雙口RAM。
由于VNU與CNU在本譯碼器結構中的地位是對等的,譯碼器也可采用擁有dv個CNU和1個VNU的結構。該譯碼器包括一個變量點計算單元VNU、一系列校驗點計算單元CNU、以及一系列雙口RAM陣列,一系列校驗點計算單元分別級聯(lián)對應的雙口RAM陣列,CNU的輸出端連接VNU的輸入端,VNU的輸出由雙口RAM陣列進行數據緩存,由變量點的度確定CNU的數量及雙口RAM陣列的數量,每個雙口RAM陣列由一系列獨立的雙口RAM組成,其數量由校驗點的度確定。VNU計算的結果通過dv(變量點的度)個雙口RAM陣列進行數據緩存,而每個雙口RAM陣列都是由dc個物理上獨立的雙口RAM組成,每個雙口RAM分成兩部分,前一部分存儲當前迭代所需信息,后一部分存儲下一次迭代所需信息(即當前VNU生成的信息)。該結構重點放到了VNU上,CNU為VNU的計算提供所需要的變量點信息,為了使VNU實現(xiàn)流水式無阻塞計算,共使用了dv個CNU,使得VNU計算所需要的校驗點信息可以同時得到,從而保證VNU的流水式無阻塞計算。從整體上看,CNU和VNU之間構成了流水線工作模式。對當前迭代,變量點生成的信息存入雙口RAM,以便進行下一次迭代。
接下來以具體的二進制LDPC碼為例對實現(xiàn)本發(fā)明譯碼器的構造作具體說明。二進制LDPC碼的矩陣為10*20的矩陣H,其中,矩陣H的行表示變量點,列表示校驗點。
H=00100100100101000100000011100000001100000100001101000100000110010000100100000010000011000010100000011000000001100001101000101000010100100100010100011000000100011100001000000000110000110000000011001000]]>矩陣中相應行中1的個數即為對應的變量點關聯(lián)的校驗點個數,相應列中1的個數即為對應的校驗點關聯(lián)的變量點個數。校驗點最多關聯(lián)的變量點數為校驗點的度,變量點最多關聯(lián)的校驗點數為變量點的度。
觀察矩陣H可知,每個校驗點最多關聯(lián)6個變量點,而每個變量點最多關聯(lián)3個校驗點。即校驗點的最大度dc=6,變量點的最大度dv=3。可以在譯碼器結構設計中使用一個CNU,六個VNU,(或者使用一個VNU,三個CNU),校驗點按先后順序分別在CNU中計算。
為了計算第1個校驗點,必須有3、6、9、12、14、18六個變量點信息;為了計算第2個校驗點,必須有5、6、7、15、16六個變量點信息;為了計算第3個校驗點,必須有2、7、8、10、14、20六個變量點信息;為了計算第4個校驗點,必須有1、4、9、12、19六個變量點信息;為了計算第5個校驗點,必須有5、6、11、13、20六個變量點信息;為了計算第6個校驗點,必須有1、10、11、16、17、19六個變量點信息;為了計算第7個校驗點,必須有3、5、10、12、15、18六個變量點信息;為了計算第8個校驗點,必須有2、4、8、9、16、20六個變量點信息;為了計算第9個校驗點,必須有1、2、7、17、18六個變量點信息;為了計算第10個校驗點,必須有3、4、13、14、17六個變量點信息;
在第1個VNU中按順序計算3、5、2、1、5、1、3、2、1、3變量點信息;在第2個VNU中按順序計算6、6、7、4、6、10、5、4、2、4變量點信息;在第3個VNU中按順序計算9、7、8、9、11、11、10、8、7、13變量點信息;在第4個VNU中按順序計算12、15、10、12、13、16、12、9、17、14變量點信息;在第5個VNU中按順序計算14、16、14、19、20、17、15、16、18、17變量點信息;在第6個VNU中按順序計算18、*、20、*、*、19、18、20、*、*變量點信息;(*表示補充的信息,由實際算法決定。)對第1個VNU為計算相應的變量點信息需相應的上一次迭代校驗點信息{3,5,2,1,5,1,3,2,1,3}{{7,10}{2,5}{3,8,9}{4,6,9}{2,5}{4,6,9}{7,10}{3,8,9}{4,6,9}{1,10}}從雙口RAM的前一部分存儲器中獲取上一次迭代校驗點生成的信息,當前迭代CNU生成的用于下一次迭代的校驗點信息存儲在雙口RAM后一部分存儲器的同一位置。每開始一次迭代,切換一次存儲器。
上述以一個具體的H矩陣為例說明了本LDPC碼譯碼器的實現(xiàn)方式。顯然,這樣的一種實現(xiàn)方式對于任何的H矩陣都是可行的。通過合理的時序劃分,在同等的資源占用下,能夠獲取較其余譯碼器實現(xiàn)方式更為優(yōu)秀的性能。由于在譯碼器結構設計中VNU與CNU數量的不對稱,在VNU較CNU占用更多資源時使用只有一個VNU的結構,或在CNU較VNU占用更多資源時使用只有一個CNU的結構,相較其余譯碼器結構具有更高的應用價值。由于采用存儲器陣列傳遞信息對校驗矩陣的具體形式不敏感,該譯碼器結構適用于任何類型的矩陣。
如采用4進制LDPC碼,根據計算,CNU占用資源是VNU的18倍。資源占用情況如下表所示
由于CNU資源占用是VNU的18倍,考慮只使用一個CNU的譯碼器結構,可以達到節(jié)約資源的目的,通過實驗驗證,基于部分并行結構譯碼器工作速度較低,遠不能達到要求。而采用基于流水工作方式的譯碼器結構,在同樣的FPGA上,僅使用70%的資源就已達到我們所希望的工作速度。在200MHz的時鐘下,如果最大迭代次數為20,則最低譯碼速度為34.96Mbps。譯碼器最終資源占用情況如下表所示
上述具體實例僅是對本發(fā)明實現(xiàn)方式的一個舉例,并不能作為限定本發(fā)明保護范圍,本領域的技術人員應該清楚,具體實現(xiàn)中還可以作一些細節(jié)性調整,以優(yōu)化譯碼器。但這些調整是具體實現(xiàn)中必然做出的,其仍然以本發(fā)明的核心思想流水工作方式為依托,因此,本發(fā)明的保護范圍以權利要求為準。
權利要求
1.一種基于流水線工作方式的LDPC碼譯碼器,包括,一個校驗點計算單元CNU,一系列變量點計算單元VNU以及一系列雙口RAM陣列,其特征在于,一系列變量點計算單元分別級聯(lián)雙口RAM陣列,VNU的輸出端均連接CNU的輸入端, CNU的輸出連接雙口RAM陣列輸入端,由雙口RAM陣列對CNU的輸出進行數據緩存,由校驗點的度確定VNU的數量及雙口RAM陣列的數量,每個雙口RAM陣列由一系列獨立的雙口RAM組成,其數量由變量點的度確定。
2.根據權利要求1所述的LDPC碼譯碼器,其特征在于,每個雙口RAM陣列分成兩部分,前一部分存儲當前迭代所需信息,后一部分存儲當前CNU生成的信息。
3.根據權利要求1或2所述的LDPC碼譯碼器,其特征在于,所述LDPC碼中矩陣的行表示變量點,列表示校驗點。
4.根據權利要求3所述的LDPC碼譯碼器,其特征在于,所述校驗點的度為校驗點最多關聯(lián)的變量點數,變量點的度為變量點最多關聯(lián)的校驗點數,其數量由矩陣中相應行或列中非零元素的個數確定。
5.一種基于流水線工作方式的LDPC碼譯碼器,包括,一個變量點計算單元VNU、一系列校驗點計算單元CNU、以及一系列雙口RAM陣列,其特征在于,一系列校驗點計算單元分別級聯(lián)對應的雙口RAM陣列,CNU的輸出端均連接VNU的輸入端,VNU的輸出端連接雙口RAM陣列輸入端,由雙口RAM陣列對VNU的輸出信息進行數據緩存,由變量點的度確定CNU的數量及雙口RAM陣列的數量,每個雙口RAM陣列由一系列獨立的雙口RAM組成,其數量由校驗點的度確定。
6.根據權利要求5所述的LDPC碼譯碼器,其特征在于,每個雙口RAM陣列分成兩部分,前一部分存儲當前迭代所需信息,后一部分存儲當前VNU生成的信息。
7.根據權利要求5或6所述的LDPC碼譯碼器,其特征在于,LDPC碼中矩陣的行表示變量點,列表示校驗點。
8.根據權利要求7所述的LDPC碼譯碼器,其特征在于,由矩陣中相應行或列中非零元素的個數確定校驗點的度或變量點的度。
全文摘要
本發(fā)明請求保護一種基于流水線工作方式的LDPC譯碼器,涉及電子技術領域,采用流水線工作方式的設計思想,通過適量的增加計算量和RAM存儲量,以保證VNU與CNU之間的工作。VNU為CNU提供計算所需要的變量點信息,CNU的輸出由一系列雙口RAM陣列進行數據緩存,每個雙口RAM陣列的前一部分存儲當前迭代所需信息,后一部分存儲下一次迭代所需信息,在一次迭代的時序內,有足夠的時間解決沖突,不會發(fā)生阻塞。本發(fā)明在耗費少量的資源代價下,有效提升譯碼器速度,該譯碼器結構適用于任何類型的矩陣。
文檔編號H03M13/00GK101093999SQ20071009247
公開日2007年12月26日 申請日期2007年7月24日 優(yōu)先權日2007年7月24日
發(fā)明者王琳, 謝東福, 徐位凱, 范雷, 張建文 申請人:廈門大學