應用筆記 算法 V0.0 2015/3/17編程 |
LDPC譯碼器的FPGA實現緩存 |
概述模塊化 |
本文將介紹LDPC譯碼器的FPGA實現,譯碼器設計對應CCSDS131x1o1s文檔中提到的適用於深空通訊任務的LDPC編碼。本文檔將簡述Verilog代碼的基本結構和信號說明。 性能 |
修訂歷史學習 |
如下表格展現了本文檔的修訂過程 編碼
|
簡介 |
本文中FPGA實現特指經過Verilog HDL實現LDPC譯碼器功能,然而對於VHDL來講也似相似的的。Verilog HDL不像MATLAB代碼那樣有很強的通用性,或者說我暫時編不出通用性太好的代碼。所以,這裏的FPGA實現僅針對CCSDS文檔(06版)中1024信息位1/2碼率的適用於深空通訊LDPC碼,採用最小和算法下的實現。因爲在截位補零下最小和算法性能奇差,所以此處不作補零處理,即碼率實際爲0.4。 LDPC相關文檔包括《程序說明:LDPC編碼(CCSDS)算法概述》、《程序說明:LDPC譯碼算法概述》、《學習筆記:LDPC編譯碼基本原理》以及《CCSDS_LDPC_V1》(代碼),同時與本文檔同名的學習筆記將闡述編程過程和思路,都可做爲本文檔的參考。 譯碼器的輸入輸出至少應該包括如下信號 input clk; //時鐘 input rst; //復位信號,高有效 input decode_start; //開始譯碼信號,持續高電平一個clock有效 output output_ready; //開始輸出 output frame_error; //輸出結果不知足校驗矩陣 output data_out; //輸出譯碼後數據 output busy; //譯碼模塊正在譯碼,此時不響應decode_start信號 對應應該有以下的狀態 parameter IDLE = 5'b00001; //空閒狀態,等待譯碼 parameter VML_INIT = 5'b00010; //初始化變量節點取值 parameter UML_UPDATE = 5'b00100; //更新校驗節點,同時計算校驗方程 parameter VML_UPDATE = 5'b01000; //更新變量節點 parameter DECODER_END = 5'b10000; //輸出譯碼結果 下文將具體敘述程序結構和信號說明。 |
程序結構 |
圖 1 程序結構圖
頂層模塊爲decoder_top,如下具體闡述各個模塊和改進思路
圖 2 狀態機
這是decoder_top內惟一有意義的代碼,輸出5個狀態,輸入包括 decode_start vmlram_addra hrowram_addra frame_error MAX_ITER_NUM 這是狀態機跳轉的全部條件,第二、3個是可選擇的,能夠考慮替換掉,但這兩個是很很方便的。
圖 3 信道信息控制模塊
經過state和umlram_addrb控制嘗試inputram_addra對應輸出不一樣的信息。輸入umlram_addrb是必須的,由於須要控制在uml2vml中信道信息的輸出。 顯然這兩個模塊能夠合成一個,不該該直接將InputRam放在decoder_top之下。
圖 4 Vml寄存器寫控制
vmlram寫控制須要即控制vmlram_wea,dina,addra三路信號。針對不一樣階段,vml的輸入是不同的,該模塊起到了一個輸入選擇做用對inputram_douta,vmlram_updae_dina,decoded_data_check三個信號進行處理,同時根據state不一樣產生寫入地址。模塊設計較爲合理。
圖 5 vml2uml模塊
這個模塊還包括了hrowram、vml2uml_caculate和check_data三個部分。模塊完成了decoded_data的校驗和vmlram_doutb到變量節點的更新。輸出的hrowram_addra做爲了state和uml地址生成的控制(挺方便,是否合適,有無更好選擇?),hrowram_douta用於生成uml的寫地址。
圖 6 umlram_write_control模塊
umlram_write_control模塊控制產生uml寫地址,爲何沒有寫數據,由於vml2uml模塊的輸出直接鏈接到ram上面去了。寫地址和使能經過hrowram_addra和hrowram_douta控制產生。
圖 7 uml2vml模塊 變量節點更新模塊技術按vml更新值即vmlram_update_dina和decoded_data_check.
|
信號說明 |
Decoder_top頂層控制模塊
表格 1 decoder_top模塊信號說明
Inputram_control:根據輸入產生inputram的地址控制
表格 2 inputram_control控制模塊信號說明
Vmlram_write_control: vml寄存器寫控制,經過輸入inputram_douta, vmlram_update_dina等信息自動判斷輸出寫地址、寫使能和數據。
表格 3 vmlram_write_control模塊的信號說明
Vml2uml: 接收vml讀出的數據,處理後寫入uml中。同時完成校驗伴隨式的計算 Vml2uml包含了如下幾個模塊:
Vml2uml_calculate.v 校驗節點更新的計算部份內容
check_data.v 計算是否知足校驗方程
Umlram_write_control.v: uml寄存器寫控制
Uml2vml.v: 校驗節點到變量節點更新,同時生成譯碼後結果
|
改進 |
模塊劃分是否合理? 功能實現是否足夠合適? 存儲器設計顯然不夠合理,都是8bit。 參考他人畢業論文的模塊化方法。 瞭解並行、部分並行的方法 完成輸入輸出部分模塊的設計。 完成整個硬件仿真平臺的思路構想。 |
參考 |
|
代碼 |
|