《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA的改進型分組交織器的設計與實現
基于FPGA的改進型分組交織器的設計與實現
摘要: 本文分析了交織器在Turbo碼中的作用,,以及分組交織器[2]存在的缺陷,,提出一種改進型的分組交織器,,即交織深度和寬度可控的分組交織器的設計方法,。該交織器可根據數字通信中信道的實際特性,,做到交織矩陣深度和寬度可控,,能夠更好的滿足不同幀長度數據傳輸的要求,,從而達到最佳的抗突發(fā)連續(xù)錯誤的目的,。
Abstract:
Key words :

  Turbo碼是由法國人Berrou于1993年提出的一種性能優(yōu)越的信道編碼方案[1],,其應用已逐步推廣到衛(wèi)星通信,、移動通信和計算機通信等領域。交織器作為Turbo碼編碼器中的重要組成部分,,在Turbo碼的性能中起著至關重要的作用,,因此交織器的設計成了Turbo碼設計中的一個重要方面,交織器的好壞將直接關系到整個Turbo碼系統(tǒng)的優(yōu)劣,。

  本文分析了交織器在Turbo碼中的作用,,以及分組交織器[2]存在的缺陷,提出一種改進型的分組交織器,,即交織深度和寬度可控的分組交織器的設計方法,。該交織器可根據數字通信中信道的實際特性,做到交織矩陣深度和寬度可控,,能夠更好的滿足不同幀長度數據傳輸的要求,,從而達到最佳的抗突發(fā)連續(xù)錯誤的目的。

  交織器設計采用Altera公司生產的Cyclone系列FPGA芯片,,利用其內部嵌入式存儲資源,,用雙端口存儲器實現。

  1 傳統(tǒng)分組交織器的作用,、原理及缺陷

  1.1 交織器的作用

  在傳統(tǒng)信道編碼中,,交織器的作用是將信源序列打亂,將它們分散到不同的數據序列中,,以消除相鄰碼元之間的相關性,。這樣,,當信號經歷衰落或突發(fā)干擾時,鄰近碼元被噪聲淹沒的可能性會大大降低,,從而增強了抵御長時間突發(fā)噪聲的能力,,同時也有利于接收端的譯碼接收。

  另外,,交織器作為Turbo碼編碼器中的重要組成部分,,對提高Turbo碼的性能起著至關重要的作用。文獻[3]指出,,Turbo碼作為線性碼,,其糾錯譯碼性能主要由碼字的重量分布決定,而交織器實際上正是決定了Turbo碼的重量分布,。所以,,Turbo碼的性能很大程度上由交織器所決定。

  1.2 分組交織器的原理

  分組交織是一種簡單的交織方式,,其原理是在發(fā)送端將待交織的輸入數據均勻分成m個碼組,,每個碼組由n段數據組成,這樣便構成一個n×m的交織矩陣,,其中,,m為交織深度,n為交織約束長度或寬度,。待交織數據以公式的順序進入交織矩陣,,再以公式的順序從交織矩陣中送出,這樣就完成了對輸入數據的分組交織,。

  1.3 分組交織器存在的缺陷

  分組交織器雖然具有原理簡單,,易于硬件實現的特點。但其存在的主要缺點是由于交織矩陣的深度和寬度固定,,不能夠根據信道(特別是變參信道)中突發(fā)誤碼長度、糾錯碼的約束長度,、糾錯能力做出調整,,這樣,信息序列中出現的突發(fā)錯誤就不能夠盡量隨機分布在數據幀內,。交織后,,輸入至編碼器中的消息序列仍有很大的相關性。這就導致了Turbo碼譯碼器在相繼譯碼中不能正確的譯碼,,會產生較高的譯碼錯誤,。

  基于以上原因,希望設計出交織矩陣深度和寬度可控的分組交織器,,以適應不同數據幀長度的需要,。從而更好的適應通信系統(tǒng)的特性要求,,提高系統(tǒng)克服突發(fā)差錯的能力。

  2 改進分組交織器的FPGA設計與實現

  2.1 FPGA選取及總體實現

  交織器的設計采用Altera公司生產的Cyclone系列FPGA實現,。根據系統(tǒng)的總體要求選用了一片EP1C3T100C8芯片,,該系列芯片具有成本低、設計靈活,、系統(tǒng)便于集成等優(yōu)點[4],,因而在數字通信系統(tǒng)設計中得到了廣泛的應用。此外,,Cyclone系列芯片內部具有嵌入式RAM存儲空間,可以實現較為復雜的邏輯功能,,當用作片內存儲器時,其存儲數據的寬度和深度可由設計人員設定,。因而利用存儲器可以方便的設計出交織器,,從而能夠大大減小電路的體積和復雜度。

  FPGA實現交織器的原理框圖如圖1所示,,從圖中可以看出交織器主要由讀,、寫地址序列發(fā)生器,雙端口RAM以及讀寫使能控制幾部分組成,。其中讀寫使能控制主要用來產生雙端口RAM的讀寫控制信號,,并決定讀、寫地址序列發(fā)生器何時啟動工作,。

FPGA實現交織器的原理框圖

  2.2 讀地址序列產生算法及設計

  2.2.1 交織器讀地址產生算法

  交織器設計的關鍵部分在于“讀/寫地址”的產生,。設交織器的交織矩陣為n m矩陣,根據分組交織原理,,輸入數據以0,1,2…,mn-1的順序地址方式寫入存儲器,,交織后輸出為:0,n,2n,…, (m-1)n,1,n+1,2n+1, …,(m-1)n+1,2,…,mn-1.

  地址產生算法采用雙重循環(huán)的方式(算法流程如圖2所示),,算法流程說明如下:

算法流程圖

 ?、偈紫雀鶕诺缹嶋H情況及數據幀長,選定合適的交織

  將計數變量i,,j清零,;

  ②對計數變量j進行判斷:如果j<m,,則j++,;

  如果j=m,則跳到第3步,;

 ?、蹖τ嫈底兞縤進行判斷:如果i<n,則i++并將j清零之后跳回第2步,;如果i=n,,則跳回第1步,,開始新一輪循環(huán)。

  在整個循環(huán)過程中,,讀地址變量add不斷輸出“亂序”的交織地址add=j n+i,,以達到設計的要求。

  通過上述分析可以看出,,算法中運用了加法,、乘法、比較,、計數等算術邏輯運算,,則地址生成的FPGA設計過程中,需要運用加法器,,乘法器,,比較器,計數器等器件以實現相應功能,。在設計過程中,,這些器件采用由QuartusⅡ軟件為設計人員提供的參數化宏單元模塊LPM(library of parameterized modules),使用它不僅可以簡化電路復雜度,而且大大提高了設計速度,。

 

  2.2.2 讀地址序列產生器設計

  讀地址是整個交織器設計部分的關鍵,,采用“亂序讀出”的方式。電路設計主要由加法,、乘法器,,計數器和比較器模塊構成,其地址序列產生流程在算法分析中已作過詳細說明,,這里只作簡單介紹:計數器Ⅰ相當于變量j,,首先在時間脈沖cp的驅動下從初始狀態(tài)“00000000”開始遞增計數,當等于設定交織深度m時,,產生一個時鐘脈沖信號來驅動計數器Ⅱ,,此時計數器Ⅱ的計數加一,同時與另一設定數據n進行比較,,當相等時計數器Ⅰ,、Ⅱ同時清0,重新開始計數,。

讀地址序列產生器

  讀地址產生結果由數據n與計數器Ⅰ每次的輸出數據相乘,,再與計數器Ⅱ的計數數據相加而得到,。產生的序列依次為:0,,n,2n,…,(m-1)n,1,n+1,2n+1,…,(m-1)n+1,2,…,mn-1.

  2.3 寫地址序列產生器設計

  交織器采用“順序寫入”的寫地址方式,即產生“0,1,2 …,mn-1”的順序地址序列,。因此寫地址序列產生器的實現可由乘法器,,比較器和計數器等宏單元模塊構成(如圖4所示),,寫地址具體產生說明如下:

寫地址序列產生器

  首先8位計數器在時鐘脈沖cp的驅動下由初始狀態(tài)“00000000”開始遞增計數,產生的計數數據分成兩路:一路送到雙端口RAM的寫地址端,,作為交織器的寫地址產生信號,;另一路則送到比較器的一個輸入端,同乘法器輸出的結果進行比較:當計數器累計計數值小于乘法器計算結果時,,計數器繼續(xù)累加計數,;而當計數值等于乘法器的計算結果時,比較器產生中斷控制信號使得計數器清0,,并重新開始計數,。

  2.4 讀寫使能控制設計

  考慮到雙端口RAM對其內部同一單元地址不能同時進行讀寫操作,因此,,整個交織器設計需用讀寫使能控制電路用來對雙端口RAM的地址讀寫進行控制,,并同時決定讀寫發(fā)生器何時開始工作。由于雙端口RAM的讀,、寫實現都是從零地址開始的,,因而RAM內的每個存儲單元的讀操作都應在寫操作之后,從而保證每個讀出數據的有效性,。

  讀寫使能控制電路如圖5所示,,讀寫控制電路采用類似于分頻器原理[4]的工作方式,電路主要由計數器,、比較器和D觸發(fā)器來實現:計數器與n m比較的結果作為D觸發(fā)器的時鐘脈沖信號,,當計數器的計數值等于n m時,觸發(fā)器的輸出狀態(tài)進行一次反轉,,即相當于構成了一個n m的分頻器電路,。觸發(fā)器的輸出結果分成兩路:一路送到雙端口RAM的寫地址使能端;另一路經過反相后送給讀地址使能端,。這樣便可以使存儲器RAM在“n m”的地址空間范圍內交替進行“讀/寫”數據的操作,。

讀寫使能控制電路

  2.5 設計中的遇到的問題及解決辦法

  交織器的設計中包含的運算有相乘和相加,相乘會造成字長的變化,。這便會帶來數據位數匹配的問題,,下面我們以讀地址電路(圖4)為例給出解決辦法:

  進入乘法器的兩路數據均為8位,經過乘法運算后,,數據位數會增加到16位,,同時需要與來自計數器Ⅱ的8位數據進行加法運算。通常情況下多采取舍入或截尾的方法,,即將16位數據的高8位字節(jié)舍去,,這種方法的不足是當m、n的乘積大于256(11111111H)時,數據的高8位不全為0,,舍去會帶來輸出結果的錯誤,,因而可能造成交織器輸出碼字的錯誤。因此,,可采用“補位”的辦法,,將輸入加法器的8位數據補成16位(在8位數據前補8位0),以增長位寬從而達到數位匹配的目的,。

  3 QuartusⅡ仿真結果及分析

       交織器的仿真波形如圖6所示(其中“clk”為驅動時鐘,,“rden”、“wren”為讀,、寫使能,,“data”、“result”為輸入,、輸出雙端口RAM的數據序列):

Quartus

  從QuartusⅡ波形仿真結果看到當交織矩陣的m,,n值為5和3時,雙口RAM的輸出數據為“0,、5,、10、1,、6…”,;當m,n調整為8和6后,雙口RAM的輸出為“0,、8,、16、24…”,??梢钥闯觯谌我膺x取不同的m值和n值后,,交織器能夠根據分組交織的原理將輸入RAM的數據字或比特位流進行交織,,輸出所需的數據序列,達到了交織矩陣深度和寬度可控的目的,。

  4 小結

  本文介紹了可針對不同交織需要的改進型分組交織器FPGA設計,,該交織器的主要特點是可根據信道中突發(fā)誤碼的長度、出現的頻率以及糾錯碼的約束長度,、糾錯能力設定合適的交織深度和寬度(m,n),,需要指出的是,m,n選得越大,,信道編碼的約束長度越大,,從而對付信道中長突發(fā)差錯的能力也就越強,,但m,n選得越大,也就需要越大的存儲空間,,同時會引入更長的延時,所以應根據數字通信系統(tǒng)的實際情況選擇合適的m值和n值,。

 

  本文作者創(chuàng)新點:對傳統(tǒng)分組交織器進行了改進,,實現了分組交織器的交織矩陣深度和寬度可控,能夠很好的滿足不同數據幀傳輸的要求,,具有更好的抗信道突發(fā)錯誤的能力,。

  參考文獻:

  [1]BERROU C, GLAVIEUX A, THITIMAJSHIMA P. Near Shannon limit error-correcting coding and decoding: turbo-codes [A]. Proceedings of ICC’93 [C]. Geneva, Switzerland, May 1993. 1064—1070

  [2]趙光玲 吳樂南.幾種用于Turbo碼的交織器分析[J].應用科學學報,2002,,20(1):38—41

  [3]崔曉峰.《Turbo碼交織器的應用研究》,。天津大學碩士論文,2003,,25—31

  [4]褚振勇 齊亮.FPGA設計及應用(第二版). 西安:西安電子科技大學出版社,,2006

  [5]邱金剛 焦耀斌. Turbo編碼中交織器的設計應用[J].微計算機信息,2004,,20-12:138-139,。

  [6]高有堂.EDA技術及應用實踐[M].北京:清華大學出版社,2006

此內容為AET網站原創(chuàng),,未經授權禁止轉載,。