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

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

  本文分析了交織器在Turbo碼中的作用,以及分組交織器[2]存在的缺陷,提出一種改進(jìn)型的分組交織器,即交織深度和寬度可控的分組交織器的設(shè)計(jì)方法。該交織器可根據(jù)數(shù)字通信中信道的實(shí)際特性,做到交織矩陣深度和寬度可控,能夠更好的滿(mǎn)足不同幀長(zhǎng)度數(shù)據(jù)傳輸?shù)囊螅瑥亩_(dá)到最佳的抗突發(fā)連續(xù)錯(cuò)誤的目的。

  交織器設(shè)計(jì)采用Altera公司生產(chǎn)的Cyclone系列FPGA芯片,利用其內(nèi)部嵌入式存儲(chǔ)資源,用雙端口存儲(chǔ)器實(shí)現(xiàn)。

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

  1.1 交織器的作用

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

  另外,交織器作為T(mén)urbo碼編碼器中的重要組成部分,對(duì)提高Turbo碼的性能起著至關(guān)重要的作用。文獻(xiàn)[3]指出,Turbo碼作為線性碼,其糾錯(cuò)譯碼性能主要由碼字的重量分布決定,而交織器實(shí)際上正是決定了Turbo碼的重量分布。所以,Turbo碼的性能很大程度上由交織器所決定。

  1.2 分組交織器的原理

  分組交織是一種簡(jiǎn)單的交織方式,其原理是在發(fā)送端將待交織的輸入數(shù)據(jù)均勻分成m個(gè)碼組,每個(gè)碼組由n段數(shù)據(jù)組成,這樣便構(gòu)成一個(gè)n×m的交織矩陣,其中,m為交織深度,n為交織約束長(zhǎng)度或?qū)挾?。待交織?shù)據(jù)以公式的順序進(jìn)入交織矩陣,再以公式的順序從交織矩陣中送出,這樣就完成了對(duì)輸入數(shù)據(jù)的分組交織。

  1.3 分組交織器存在的缺陷

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

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

  2 改進(jìn)分組交織器的FPGA設(shè)計(jì)與實(shí)現(xiàn)

  2.1 FPGA選取及總體實(shí)現(xiàn)

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

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

FPGA實(shí)現(xiàn)交織器的原理框圖

  2.2 讀地址序列產(chǎn)生算法及設(shè)計(jì)

  2.2.1 交織器讀地址產(chǎn)生算法

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

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

算法流程圖

 ?、偈紫雀鶕?jù)信道實(shí)際情況及數(shù)據(jù)幀長(zhǎng),選定合適的交織

  將計(jì)數(shù)變量i,j清零;

 ?、趯?duì)計(jì)數(shù)變量j進(jìn)行判斷:如果j<m,則j++;

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

  ③對(duì)計(jì)數(shù)變量i進(jìn)行判斷:如果i<n,則i++并將j清零之后跳回第2步;如果i=n,則跳回第1步,開(kāi)始新一輪循環(huán)。

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

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

 

  2.2.2 讀地址序列產(chǎn)生器設(shè)計(jì)

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

讀地址序列產(chǎn)生器

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

  2.3 寫(xiě)地址序列產(chǎn)生器設(shè)計(jì)

  交織器采用“順序?qū)懭?rdquo;的寫(xiě)地址方式,即產(chǎn)生“0,1,2 …,mn-1”的順序地址序列。因此寫(xiě)地址序列產(chǎn)生器的實(shí)現(xiàn)可由乘法器,比較器和計(jì)數(shù)器等宏單元模塊構(gòu)成(如圖4所示),寫(xiě)地址具體產(chǎn)生說(shuō)明如下:

寫(xiě)地址序列產(chǎn)生器

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

  2.4 讀寫(xiě)使能控制設(shè)計(jì)

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

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

讀寫(xiě)使能控制電路

  2.5 設(shè)計(jì)中的遇到的問(wèn)題及解決辦法

  交織器的設(shè)計(jì)中包含的運(yùn)算有相乘和相加,相乘會(huì)造成字長(zhǎng)的變化。這便會(huì)帶來(lái)數(shù)據(jù)位數(shù)匹配的問(wèn)題,下面我們以讀地址電路(圖4)為例給出解決辦法:

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

  3 QuartusⅡ仿真結(jié)果及分析

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

Quartus

  從QuartusⅡ波形仿真結(jié)果看到當(dāng)交織矩陣的m,n值為5和3時(shí),雙口RAM的輸出數(shù)據(jù)為“0、5、10、1、6…”;當(dāng)m,n調(diào)整為8和6后,雙口RAM的輸出為“0、8、16、24…”??梢钥闯?,在任意選取不同的m值和n值后,交織器能夠根據(jù)分組交織的原理將輸入RAM的數(shù)據(jù)字或比特位流進(jìn)行交織,輸出所需的數(shù)據(jù)序列,達(dá)到了交織矩陣深度和寬度可控的目的。

  4 小結(jié)

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

 

  本文作者創(chuàng)新點(diǎn):對(duì)傳統(tǒng)分組交織器進(jìn)行了改進(jìn),實(shí)現(xiàn)了分組交織器的交織矩陣深度和寬度可控,能夠很好的滿(mǎn)足不同數(shù)據(jù)幀傳輸?shù)囊螅哂懈玫目剐诺劳话l(fā)錯(cuò)誤的能力。

  參考文獻(xiàn):

  [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]趙光玲 吳樂(lè)南.幾種用于Turbo碼的交織器分析[J].應(yīng)用科學(xué)學(xué)報(bào),2002,20(1):38—41

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

  [4]褚振勇 齊亮.FPGA設(shè)計(jì)及應(yīng)用(第二版). 西安:西安電子科技大學(xué)出版社,2006

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

  [6]高有堂.EDA技術(shù)及應(yīng)用實(shí)踐[M].北京:清華大學(xué)出版社,2006

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。