基于CMMB系統(tǒng)的LDPC譯碼器的設(shè)計與實現(xiàn)
2.5 中間結(jié)果存儲單元(R_Mem和Q_Mem)
由于兩種碼率時,校驗矩陣第1個子矩陣中非零元素的位置不一樣。故在水平更新時,RAM的初始化地址也不一樣,需要用兩組初始地址值。對兩種碼率來說,第1個行子矩陣非零元素的個數(shù)都為108(18x6或9x12)。事實上,第1個列子矩陣非零元素的個數(shù)同樣為108(3x36)。第1個行子矩陣和第1個列子矩陣非零元素位置有著潛在的一一對應的關(guān)系。舉例來說,第1行(下標從0開始)6個1的列位置(下標從0開始)分別為0,7,19,26,31,5664。若分析第5664列可以發(fā)現(xiàn)5664=157x36+12,即5664列是第12列的移位。第12列中非零位置對應的行號為0,119,1783=99x18+1。第5664列中非零位置對應的行號為1,826,2945。于是非零位置(1783,12)的映射為(1,5664)。這樣,通過挖掘行子矩陣和列子矩陣中每一個非零位置的對應關(guān)系,就能準確地得出VNU和CNU運算單元數(shù)據(jù)之間的對應關(guān)系。把這種對應關(guān)系體現(xiàn)到memory的調(diào)度上來,就能準確地從R_Mem和Q_Mem中取值以進行水平和垂直更新。表1所列是中間結(jié)果存儲單元和寫地址的對應關(guān)系。本文引用地址:http://m.butianyuan.cn/article/191280.htm
這里分別用了108個深度為256、寬度為6bits的單口RAM作為R_Mem和Q_Mem。當進行變量節(jié)點運算時,VNU輸入可從Q_Mem中讀取,讀數(shù)時,首地址為0,VNU輸出寫入R_Mem中,寫順序首地址為黑體數(shù)字,運算周期為256;當所有變量節(jié)點更新后,接著是校驗節(jié)點的運算,同時
可進行檢驗方程運算。此時,CNU輸入從R_Mem中讀取,讀數(shù)的首地址為0,CNU輸出寫入Q_Mem中,寫入順序首地址為黑體數(shù)字,運算周期同樣為256。如此交替,便可完成迭代過程。上述例子中,(1,5664)和(1783,1)的對應關(guān)系反映在存儲單元上,正如表1中的第2列所示。
3 譯碼器的性能分析及FPGA實現(xiàn)
作者通過C語言模型和MATLAB模型對譯碼器進行了浮點和定點仿真。為了達到性能和面積的平衡,位寬的取值為6 bits,而譯碼器性能只比浮點模型損失了約0.15 dB。在AWGN信道和BPSK的調(diào)制解調(diào)方式下,當碼率為1/2,信噪比SNR為1.6 dB時,誤碼率已經(jīng)降至10-5以下。而在信噪比SNR為1.7 dB時,誤碼率已經(jīng)降至10-7以下;當碼率為3/4時,在信噪比SNR為3.0 dB時,誤碼率可以降至10-6以下。
本文按照上面所描述的硬件結(jié)構(gòu),采用XILINX的VirtexIV-XC4VLX80器件實現(xiàn)了CMMB標準中兩種碼率的LDPC譯碼,并且達到了和C定點模型同樣的性能。在ISE開發(fā)工具上對其進行編譯時,其具體的資源利用情況如表2所列。
從表2中可以看出,此結(jié)構(gòu)不僅完全地復用了存儲器資源,而且最大限度地復用了邏輯運算單元。正是因為兩種碼率可復用RAM資源,使memory消耗較少,從而剩下大量的RAM資源可以用作CMMB其余部分(如解交織模塊)使用。LUT資源相對來說用得較多,這是由于并行結(jié)構(gòu)造成的,它有36個VNU和9個CNU交替進行運算。
4 結(jié)束語
本文設(shè)計的部分并行結(jié)構(gòu)的LDPC譯碼器能夠兼容不同碼率和不同校驗矩陣行重的LDPC碼。運用該譯碼結(jié)構(gòu)在XILINX的VirtexIVC4VLX80器件上可實現(xiàn)CMMB標準中兩種碼率的LDPC譯碼。事實上,針對校驗矩陣的特點,采用一種獨特的存儲器控制策略,可以最大限度地復用硬件資源,從而大大減少了譯碼器的資源消耗。
評論