?

一種基于FPGA的多通道復用Viterbi譯碼器的設計與實現

2017-11-15 22:08龐志鋒劉欣欣王曉君
電腦知識與技術 2017年28期
關鍵詞:卷積碼

龐志鋒+劉欣欣+王曉君

摘要:衛星定位接收機中的卷積碼譯碼即Viterbi譯碼,在處理器中面臨著占有資源比較多、處理時間太長等問題,為了減少處理器中資源占用和提高它的處理速度,采用了多通道復用和串行加比選蝶形單元的方法,在FPGA平臺上用硬件描述語言設計出一種高性能Viterbi譯碼器,大大減少資源占用,提高了接收機的處理速度。

關鍵詞:卷積碼;Viterbi算法;FPGA;資源占用

中圖分類號:TN919 文獻標識碼:A 文章編號:1009-3044(2017)28-0251-03

Abstract: Satellite positioning receiver decoding convolutional code Viterbi decoder, facing the problem of share more resources and processing time in the processor, the processor in order to reduce the occupied resources and improve the processing speed, using multi channel multiplexing and serial plus selection butterfly unit method, using hardware description language to design a high performance Viterbi decoder FPGA platform, greatly reduce the resource utilization, improve the processing speed of the receiver.

Key words: convolutional code; Viterbi algorithm; FPGA; resource consumption

卷積碼是廣泛應用于無線通信、衛星通信等多種通信系統中的信道編碼方式。Viterbi算法是卷積碼的最大似然譯碼算法,該算法譯碼速度快、性能好,并且實現硬件結構也比較簡單,是最優的卷積碼譯碼算法[1]。在現代通信系統中,要使信號能夠更可靠地在信道中傳輸,往往需要在信道編碼中采用糾錯碼來降低信號受噪聲的影響,以降低傳輸的誤碼率。卷積碼及其Viterbi譯碼是比較常用的信道編碼方案。

1 卷積編碼及Viterbi算法基本原理

卷積碼是由移位寄存器和n個模2加法器組成,當前狀態的輸入進來的數據和寄存器組中的數據共同決定著編碼器的輸出結果。(2,1,7)卷積碼的生成多項式為G=(171,133),電路圖如圖1所示[2]。(2,1,7)卷積碼編碼器由6個延時器(圖1中的q-1模塊,可用寄存器實現)和兩個模2加法器組成,它的編碼約束度為7,碼率為1/2,即輸入端輸入1b信息,輸出端輸出2b編碼信息,并分為上、下兩路并行輸出。

Viterbi譯碼算法是找最大度量的最大似然路徑,即找出局部最優的幸存信息就等效于找到最優幸存信息,它將比較進入每一狀態下的所有路徑,然后得出最優路徑并存儲,即幸存路徑,步驟為:(1)從某一時間單位[l=m]開始,將每個路徑中的分支度量值計算出來,然后將所有狀態的分支度量值和幸存路徑存儲下來;(2)[l]增加l,[l=m+1],累加更新后的分支度量值和之前的分支度量值,然后計算出來最大度量的路徑,然后把更新后的幸存路徑及其度量值存儲下來,并刪掉其他路徑;(3)若[l

2 基于硬件描述語言的Viterbi算法

由Viterbi譯碼算法可以得出Viterbi譯碼器的結構框圖,圖2是Viterbi譯碼器結構框圖,一個Viterbi譯碼器,一般都會包括圖2所示的幾個基本部分:控制模塊、分支度量計算模塊、加比選模塊、幸存路徑管理模塊和一些必要的存儲模塊。

2.1 仲裁邏輯設計

仲裁寫控制,首先輪詢一遍所有通道,將通道使能轉為寫信號暫存在寫使能寄存器中,并且在此輪詢中將數據也暫存,并將寫使能與暫存數據例化進相應的FIFO中。

通道FIFO數據向緩存FIFO中導入控制,判斷每一個FIFO中的數據是否滿足了譯碼的條件的數量,若滿足了譯碼條件的數量,并且緩存FIFO的空信號有效時,則可以將數據從滿足條件的通道FIFO中導入到緩存FIFO中,此時通道FIFO的讀使能與緩存FIFO的寫使能信號的高電平長短應該為486個主鐘,這樣控制輸入到緩存FIFO中的數據為486,當導入到緩存FIFO中的數據達到了486個時,將產生Decode_start信號與相應的通道號。

仲裁讀控制,當譯碼模塊處于忙狀態,然后譯碼模塊的讀使能有效,并且FIFO不空時,則將啟動FIFO讀使能,再利用讀使能將FIFO中數據進行輸出。仲裁邏輯模塊的原理圖如圖3所示。

2.2 控制模塊

控制模塊主要的任務是產生系統內部各個模塊的各種控制信號,這些內部的控制信號保證了各個功能模塊的協調工作。因此,控制模塊對于系統有序高效的運行非常重要,是整個Viterbi譯碼系統的核心模塊[3]。

當Decode_start信號有效時,譯碼控制模塊中的Control_vaild信號置高電平,在主鐘和Control_vaild信號有效下主鐘計數器Clk_cnt加1,每當Clk_cnt為0時,RD_FIFO置高電平持續1個鐘,蝶形狀態計數器Status_num根據當前Clk_cnt的計數值減1處理,在Status_num輸出延遲2個主鐘后輸出Butter_select(為了匹配距離計算模塊的節奏)將每對蝶形單元的輸出送譯碼計算模塊,當Clk_cnt為32時,Status_num保持31不變,當Clk_cnt計數值達到37時,清零重新開始計數,每當Clk_cnt清零時,送存儲模塊的Ping_Pang信號翻轉,同時譯碼控制模塊的Bit_cnt計數器加一,當Bit_cnt計數為242時,輸出Frame_over信號送仲裁模塊,當Bit_cnt計數值為242且Clk_cnt計數值為35時,輸出Combine_result_enable信號送譯碼輸出模塊進行最后64位結果的拼接。當Bit_cnt計數值為134且Clk_cnt計數值為0時,輸出ID_bit_enable信號送譯碼輸出模塊進行ID號輸出??刂颇K的時序圖如圖4所示。

2.3 加比選(ACS)模塊

ACS單元把前一狀態的度量值,與當前輸入信號的分支度量相加得到該分支的度量值,比較不同分支路徑度量的大小,選擇最小的度量值,更新當前狀態的新度量值,并存儲到RAM中,當更新完所有狀態的度量值,將讀出RAM中的數據給ACS模塊使用。所以可以得出,加比選模塊由加法器、比較器和選擇器組成。加比選模塊將度量值保存到距離存儲單元,更新距離度量值。同時將最優路徑存到路徑存儲單元,更新最優路徑。

加法器是距離計算模塊得出的分支度量值和存儲單元得到的累加度量值相加;比較器是0狀態下輸入為0時相加的結果和1狀態下輸入為0時相加的結果作比較。0狀態下輸入為32相加的結果和1狀態下輸入為32時相加的結果作比較,上面兩個結果作比較得出最優路徑;選擇器是比較選出較小的一個度量值輸出給存儲單元,選擇出的最優路徑也存入存儲單元。

3 仿真及接收機測試結果

整個系統使用Verilog HDL完成了設計,在Modelsim SE 6.6d平臺上進行了仿真,將Matlab生成的數據寫入一個Modelsim待讀的存儲器中,然后利用測試激勵文件來讀取數據,數據經過頂層模塊后,數據主要經過仲裁復用模與譯碼模塊還有中斷模塊中進行仲裁復用、譯碼和叫中斷,在Modelsim中產生最后輸出的數據。利用Modelsim產生的數據與Matlab仿真生成的數據進行對比,Modelsim仿真出來的誤碼個數和誤碼的位置都和Matlab一一對應,兩種仿真的數據都嚴格對應,并且在Xilinx ISE Design Suite 13.2平臺上進行了綜合。仿真結果如圖5所示。

誤碼性能圖6是根據Matlab仿真出來的RD維特比譯碼case列表畫出來的,該表格的數據與誤比特率理論值都一一對應。

4 結束語

本文通過研究(2,1,7)卷積碼Viterbi譯碼的FPAG(Field Programmable Gate Array現場可編程門陣列)實現算法,設計了采用多通道情況下使用仲裁邏輯、雙口RAM、加比選單元選擇最優路徑的軟判決Viterbi譯碼器。該譯碼器既滿足了譯碼速度,又比并行算法節省了約50%的硬件資源,而且還便于和其他系統模塊結合。

參考文獻:

[1] 傅民倉,馮立杰,李文波.基于FPGA的高速Viterbi譯碼器優化設計和實現[J].現代電子技術,2006,29(7):52-54.

[2] 蔡志龍,馮文江,楊洋.一種基于FPGA的Viterbi譯碼器優化算法[J].現代電子技術,2008,31(17):105-107.

[3] 丘磊,張巖.基于FPGA的高性能Viterbi譯碼器的設計[J].微電子學與計算機,2010,27(7):246-249.

[4] 韓可,鄧中亮,施樂寧.(2,1,7)卷積碼Viterbi譯碼器FPGA實現方案[J].現代電子技術,2007,30(15):90-96.

[5] 牛晨曦,張輝.一種基于FPGA的Viterbi譯碼器[J].現代電子技術,2005,28(3):56-57.

[6] 王連成.基于FPGA的Viterbi譯碼器設計[J].電子元器件應用,2010,12(5):39-40.

[7] 王新梅,肖國鎮.糾錯碼—原理與方法:修訂版[M].西安:西安電子科技大學出版社,2001:443-460.

[8] 吳厚航.深入淺出玩轉FPGA[M].北京:北京航空航天大學出版社,2010.

[9] 張傳達,李小文.卷積碼編碼及其Viterbi譯碼器的實現[J].無線電工程,2006,36(07).

[10] 樊昌信,曹麗娜.通信原理[M].北京:國防工業出版社,2008.

[11] Scllegel C.Fundamentals of Digital Communication and Blocking Coding, Chapter 4: Convolutional Codes[M].IEEE Press, 2002.endprint

猜你喜歡
卷積碼
卷積編碼的識別技術研究
有限域上兩類卷積碼的構造
(n,1,L)卷積碼的邏輯運算譯碼方法
擴展卷積碼生成矩陣的統一表述*
一種改進的時不變LDPC卷積碼構造方法*
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合