《FPGA設計及應用》課件第8章_第1頁
《FPGA設計及應用》課件第8章_第2頁
《FPGA設計及應用》課件第8章_第3頁
《FPGA設計及應用》課件第8章_第4頁
《FPGA設計及應用》課件第8章_第5頁
已閱讀5頁,還剩219頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第8章FPGA電路設計實例8.1m序列產生器8.2任意序列產生器8.3數(shù)

8.4漢明距離的電路計算8.5交

8.6直接數(shù)字頻率合成8.7奇偶數(shù)分頻器8.8串并/并串變換器8.9利用IPCore實現(xiàn)FFT和IFFT變換8.10線性時不變FIR濾波器8.11二進制相移鍵控(BPSK)調制器與解調器設計8.12數(shù)字基帶信號傳輸碼型發(fā)生器設計8.1m序列產生器

在擴展頻譜通信系統(tǒng)中,偽隨機序列起著十分關鍵的作用。在直接序列擴頻系統(tǒng)的發(fā)射端,偽隨機序列將信息序列的頻譜擴展,在接收端,偽隨機序列將擴頻信號恢復為窄帶信號,進而完成信息的接收。因此,偽隨機序列產生器是擴頻系統(tǒng)的核心單元。在實際的擴頻通信系統(tǒng)中,偽隨機序列一般用二進制序列表示,每個碼片(即構成偽隨機序列的元素)只有“1”和“0”兩種取值,分別對應電信號的高電平和低電平。

m序列又稱為最長線性反饋移位寄存器序列,該序列具有很好的相關性能,所以在直接序列擴頻系統(tǒng)中應用十分廣泛。m序列的產生比較簡單,可以利用r級移位寄存器產生長度為2r-1的m序列。m序列產生器的結構主要分為兩類,一類被稱為簡單型碼序列發(fā)生器(SSRG,SimpleShiftRegisterGenerator),另一類被稱為模塊型碼序列發(fā)生器(MSRG,ModularShiftRegisterGenerator)。圖8.1給出了這兩種產生器的基本結構,其中(Cr,Cr-1,…,C0)和(D0,D1,…,Dr)為反饋系數(shù),也是特征多項式系數(shù)。這些系數(shù)的取值為“1”或“0”,“1”表示該反饋支路連通,“0”表示該反饋支路斷開。

r級移位寄存器的反饋路徑由m序列的特征多項式?jīng)Q定,對于SSRG結構,m序列特征多項式的一般表達式為

(8-1)對于MSRG結構,m序列特征多項式的一般表達式為:

(8-2)可以看出,SSRG結構的特征多項式系數(shù)(Cr,Cr-1,…,C0)與MSRG結構特征多項式系數(shù)(D0,D1,…,Dr)之間的對應關系為

圖8.1m序列產生器的兩種結構(a)?SSRG結構;(b)?MSRG結構

特征多項式系數(shù)決定了一個m序列的特征多項式,同時也就決定了一個m序列。表8.1給出了部分m序列的反饋系數(shù),這些反饋系數(shù)實際上就是m序列特征多項式系數(shù)的八進制表示。

表8.1m序列產生器反饋系數(shù)表

例如想要產生一個碼長為31的m序列,碼序列產生器的寄存器級數(shù)為5,從表8.1中可查到有“45、67、75”三個反饋系數(shù),可從中選擇反饋系數(shù)“45”來構成m序列產生器。反饋系數(shù)“45”是一個八進制數(shù),轉換為二進制數(shù)為“100101”,這就是特征多項式的系數(shù),對于SSRG結構,特征多項式系數(shù)的取值為

對于MSRG結構,特征多項式系數(shù)的取值為

根據(jù)特征多項式的系數(shù)可以構造出該m序列,圖8.2是采用SSRG結構的m序列產生器電路。在這里,利用D觸發(fā)器級聯(lián)的方式完成移位寄存器的功能。在系統(tǒng)清零后,D觸發(fā)器輸出狀態(tài)均為低電平,為了避免m序列產生器輸出“全0”信號,圖8.2在“模二加”運算后添加了一個“非門”,這與圖8.1中SSRG典型結構稍有不同。圖8.3是該電路的仿真波形,“CLRN”為系統(tǒng)清零端(低電平有效),“CLK”為輸入時鐘,“OUT”為m序列輸出端口。圖中還給出了第1、2、3、4號D觸發(fā)器Q端口處的波形,從這些點均可得到同一m序列,只是序列的初始相位不同。

圖8.2SSRG結構的m序列產生器

圖8.3SSRG結構m序列產生器的仿真波形

圖8.4是采用MSRG結構實現(xiàn)的m序列產生器,圖中在每個D觸發(fā)器的輸出端口上加了一個“非門”,使系統(tǒng)清零后各級D觸發(fā)器的初始狀態(tài)均為高電平,這樣做同樣可以避免輸出“全0”情況的出現(xiàn)。圖8.5是該電路的仿真波形。

m序列雖然有很好的偽隨機性和相關特性,但是數(shù)量太少,而基于m序列產生的Gold碼繼承了m序列的許多優(yōu)點,更重要的是Gold碼序列的數(shù)量較多,因此廣泛應用于擴頻通信系統(tǒng)中。

圖8.4MSRG結構的m序列產生器

圖8.5MSRG結構m序列產生器的仿真波形

8.2任意序列產生器

利用FPGA器件產生任意序列有很多種方法,上面提到的移存型和計數(shù)器型序列產生器的設計方法當然是可行的,但在這里將介紹一種存儲型任意序列產生器的設計方法。在設計存儲型任意序列產生器時,設計人員不需要寫狀態(tài)轉移表,也不需要進行組合邏輯運算,設計十分簡便,而且不會出現(xiàn)邏輯冒險,保證了輸出序列的質量。存儲型任意序列產生器就是將所需的序列事先存儲到序列產生器中,序列產生器在時鐘的激勵下將存儲的序列循環(huán)輸出。它有兩種實現(xiàn)形式,一種是利用移位寄存器實現(xiàn),另一種是基于查找表(利用FPGA內的存儲器)實現(xiàn)。

“00110000011111011010100100010111”是一個長度為32位的偽隨機序列,下面就分別利用移位寄存器和查找表設計該序列的產生器。圖8.6是基于寄存器的32位任意序列產生器電路,它將4個8位并入串出移位寄存器“cshifreg”模塊級聯(lián),構成一個32位循環(huán)移位寄存器。32比特數(shù)據(jù)放在寄存器的輸入端口上,其中“0”接“GND”,為低電平信號,“1”接“VCC”,為高電平信號。當“STLD”為低電平時,時鐘脈沖將32位數(shù)據(jù)并行送入移位寄存器中,當“STLD”保持為高電平狀態(tài)時,在時鐘信號的激勵下,32位數(shù)據(jù)在移位寄存器內循環(huán)移位,同時序列從“DATAOUT”端口輸出。圖8.7給出了仿真波形。

圖8.6基于寄存器的32位任意序列產生器

圖8.7基于寄存器的32位任意序列產生器仿真波形

圖8.8是基于查找表的32位任意序列產生器,整個電路由兩部分組成:地址產生器和基于ROM的查找表。

“l(fā)pm_rom”的參數(shù)設置:輸入輸出數(shù)據(jù)線的寬度為“1”,讀地址線的寬度為“5”,5位“讀地址”為“A[4..0]”,并將32位序列事先寫入“m.mif”文件中。在“m.mif”文件中,從32位序列“00110000011111011010100100010111”的MSB到LSB依次對應地址“00000~11111”。地址產生器由“8count”構成,在時鐘的激勵下,“8count”的“QE~QA”端口循環(huán)產生信號“00000~11111”,將該信號作為地址信息在ROM中尋址,從而將32位序列從查找表中依次讀出。

圖8.8基于查找表的32位任意序列產生器

圖8.9是基于查找表的32位任意序列產生器仿真波形。“A[4..0]”是地址信號,取值區(qū)間是“00000~11111”,它與查找表中的32位數(shù)據(jù)一一對應。

圖8.9基于查找表的32位任意序列產生器仿真波形

8.3數(shù)

數(shù)字相關器在通信信號處理中實質上是起到數(shù)字匹配濾波器的作用,它可對特定碼序列進行相關處理,從而完成信號的解碼,恢復出傳送的信息。數(shù)字相關器與模擬相關器相比,其靈活性強、功耗低、易于集成,廣泛用于幀同步字檢測、擴頻接收機、誤碼校正以及模式匹配等領域。數(shù)字相關器一般包括:輸入序列移位寄存器、參考序列移位寄存器、相關運算陣列和相關求和網(wǎng)絡。圖8.10給出了數(shù)字相關器的結構框圖。

圖8.10數(shù)字相關器結構框圖

一般情況下,相關求和網(wǎng)絡輸出的相關值還需要與一個檢測門限做比較,判斷是否出現(xiàn)相關峰。當求和網(wǎng)絡計算出的相關值高于檢驗門限時,就認為出現(xiàn)了相關峰。因此,檢測門限的高低決定了相關峰虛警檢測概率和漏警檢測概率的大小。所謂虛警是指沒有相關峰時,相關器誤認為此時有相關峰出現(xiàn),而漏警則是指當相關峰出現(xiàn)時,相關器誤認為此時沒有相關峰。最理想的情況是相關峰檢測的虛警概率和漏警概率都較小,這樣就能得到可靠的判決結果,但是虛警概率和漏警概率不會同時減小。如果把檢測門限設置得較低,漏警概率降低,但虛警概率增大,反之,如果提高檢測門限,虛警概率降低,但漏警概率卻增大了。例如相關數(shù)據(jù)長度為32位,如果把門限設為32,則不會發(fā)生虛警,但是如果這32位中任意一位數(shù)據(jù)在傳輸中發(fā)生差錯,即使有相關峰出現(xiàn),由于此時的相關峰值低于32,就會誤認為此時沒有相關峰,以至于發(fā)生漏警。

合理設置檢測門限,在相關器的虛警概率與漏警概率之間取一個折衷值是十分必要的,這樣既不會明顯降低相關器性能,又使得通信系統(tǒng)能夠容忍少量的傳輸錯誤。在實際應用中,數(shù)字相關器前端一般都有一個預處理電路,如完成對接收信號的數(shù)字化處理、防混疊濾波、下采樣等,進入到數(shù)字相關器中的樣點值是用一定字長的二進制數(shù)表示的。本地參考序列如果包含有幅度信息的話,它的各個樣點也是用一定字長的二進制數(shù)來表示的。輸入數(shù)據(jù)序列與本地參考序列做相關運算,實際上就是這兩個序列的對應位做乘法運算,然后再利用求和網(wǎng)絡得到相關值。最簡單的一種情況是序列中的各個樣點都用一位二進制數(shù)表示,這樣就可以用邏輯運算(如模二加)來取代復雜的乘法運算。

我們知道,幀同步字用于指示幀的起始位置或結束位置,在典型的數(shù)字通信系統(tǒng)中,接收機需要在已解調的數(shù)據(jù)流中搜尋幀同步字,以確定幀的位置和幀定時信息。將數(shù)字相關器用于幀同步字檢測的方法,特別適用于突發(fā)通信協(xié)議,如TDM。數(shù)字相關器是實現(xiàn)快速同步和鎖定數(shù)據(jù)突發(fā)的關鍵。下面以一次群信號的幀同步字檢測為例,討論數(shù)字相關器的基本設計方法。

根據(jù)CCITTG.732建議,A律30/32路(一次群)TDM-PCM傳輸標準的一個復幀包含16幀,一幀長為125(s,每一幀含256位,分成32個時隙(時隙0~時隙31),每個時隙包含8位數(shù)據(jù)。幀分為奇數(shù)幀和偶數(shù)幀,偶數(shù)幀時隙0的后7位為幀定位信號(FAS,F(xiàn)rameAlignmentSignal)“0011011”。也就是說,相鄰的兩個幀有一個幀同步碼,相鄰兩個幀定位信號間距為512位。對一次群進行分接,首先要實現(xiàn)幀頭的捕獲,幀頭捕獲電路采用的數(shù)字相關檢測方法,是數(shù)字相關器的一個典型作用。圖8.11是一次群幀同步碼檢測電路,其中與“VCC”相連的線處于高電平,為“1”;與“GND”相連的線處于低電平,為“0”。表8.2給出了一次群幀同步碼檢測電路的引腳說明。

圖8.11一次群幀同步碼檢測電路

表8.2一次群幀同步碼檢測電路引腳

該電路可以有效地檢測出一次群信號數(shù)據(jù)流中的特殊碼字“0011011”。輸入一次群數(shù)據(jù)流首先進入7位移位寄存器中,然后與本地參考序列“0011011”的對應位進行“異或”邏輯運算,然后再統(tǒng)計7位輸出結果中“1”和“0”的數(shù)目。需要指出的是,在二進制數(shù)據(jù)傳輸中,高電平信號“1”與低電平信號“0”只是一個相對的概念。如果相關結果全部為“1”,表明出現(xiàn)了相關峰;如果相關結果全部為“0”,同樣也表明出現(xiàn)了相關峰,只不過是極性發(fā)生了翻轉。認識到這一點,對于檢測門限的設置是十分重要的。

為了簡便起見,這里將相關峰檢測門限設為7,也就是說只有在輸入數(shù)據(jù)流中出現(xiàn)“0011011”或“1100100”字段時,才會判決輸出正或負的相關峰。因此在圖8.11中用一個七輸入的“與門”完成正極性相關峰的檢測,用一個七輸入的“或非門”完成負極性相關峰的檢測。輸出引腳“SIG1”和“SIG0”分別表示相關峰的極性,當出現(xiàn)正相關峰時,“SIG1”為高電平;當出現(xiàn)負相關峰時,“SIG0”為高電平。一次群幀同步碼檢測電路的波形仿真結果如圖8.12所示,其中分別仿真了輸入數(shù)據(jù)流中出現(xiàn)“0011011”和“1100100”字段時檢測電路的輸出結果。為了消除組合邏輯產生的毛刺,在三個輸出端分別加入了D觸發(fā)器。

圖8.12一次群幀同步碼檢測電路仿真波形

8.4漢明距離的電路計算

漢明距離是編碼理論中的一個重要概念,它的定義是兩個長為N的二元序列S和U之間對應位不相同的位數(shù),用d(S,U)來表示。在擴頻通信和數(shù)字突發(fā)通信(如TDMA)系統(tǒng)中,接收機進行的數(shù)字相關檢測或獨特碼(UW)檢測,實際上就是計算本地一組確定序列與接收到的未知序列之間漢明距離的過程。將漢明距離與事先確定的門限相比較,就可以得到檢測結果,檢測器結構如圖8.13所示。設檢測的序列長度為N,本地碼型確定的序列為U=(U1,U2,…,UN)接收機將接收到的數(shù)據(jù)連續(xù)不斷地送入N位串行移位寄存器中,任一瞬間移位寄存器的內容為

S=(S1,S2,…,SN)S與U的對應位進行模二加,當S與U的對應位相同時結果為“0”,不同時結果為“1”,最后得到

D=(D1,D2,···,DN)其中

Di=Si

Ui(i=1,2,…,N)(8-3)序列D中“1”的數(shù)目就是S與U之間的漢明距離,可表示為:

(8-4)圖8.13檢測器結構框圖

8.4.1計數(shù)法在某一時刻,我們得到了一個二元序列D=(D1,D2,…,DN),它存在的時間基本上為一個時鐘周期,在下一個時鐘到來時,由于序列S發(fā)生了變化,從而將序列D更新。為了計算出每一個時鐘周期內序列D中“1”的數(shù)目,首先將序列D并行送入一個“并入串出”的N位移位寄存器中,然后用一個高速時鐘將數(shù)據(jù)送出,同時利用計數(shù)器來統(tǒng)計“1”的數(shù)目,最后用清洗脈沖將計數(shù)器清零,為下一周期的計數(shù)做好準備,參見圖8.14。

圖8.14計數(shù)法原理圖

假設接收到的數(shù)據(jù)速率為R0,每一位時間寬度為T0,則有

(8-5)由此可以確定計數(shù)時鐘的最低速率為

R=N·R0

(8-6)周期為

(8-7)計數(shù)法的實現(xiàn)電路比較簡單,但是當數(shù)據(jù)速率R0較高或N值較大時,計數(shù)時鐘的速率R會很大,導致電路難以實現(xiàn)。因此,這種方法適合于低速數(shù)據(jù),碼序列不宜很長,而且需要有高速率的時鐘和高速器件。

8.4.2邏輯函數(shù)法將序列D作為邏輯函數(shù)的輸入變量,漢明距離作為輸出變量,則輸出變量的個數(shù)I為:

I=INT(log2N)+1(8-8)這里,N為序列D的長度,INT(X)表示取X的整數(shù)部分。根據(jù)輸入變量值寫出對應的輸出變量值,得到其真值表,從而建立邏輯函數(shù)表達式。但它不是最簡的,通常采用公式法或卡諾圖法對其進行簡化,得到最簡的邏輯計算電路。在N值較大的情況下可采用系統(tǒng)簡化法(又稱Q-M法),這種方法適用于化簡任意多變量的函數(shù),并且具有較嚴格的算法,可以將此函數(shù)的簡化問題編程,借助于計算機進行化簡。

8.4.3查找表法所謂查找表法,就是將存儲器做成一個查找表,把序列D作為地址信號,從表中查找出其對應的漢明距離。圖8.15說明了這種方法。序列D的長度為N,存儲單元的數(shù)據(jù)寬度為P,則

P=INT(log2N)+1(8-9)從而要求存儲器的容量M為:

M=2N×P

(8-10)

可見,隨著序列長度N的增加,存儲器容量成幾何級數(shù)增長,當N(30時,存儲量將超過5Gb,實際電路難以實現(xiàn)。所以,在碼序列較短的情況下,使用查找表法比較方便。此方法的計算速度與存儲器的尋址時間有關,選用高速器件,可以達到較高的計算速度。

圖8.15查找表法原理圖

8.4.4求和網(wǎng)絡法求和網(wǎng)絡法的原理圖見圖8.16所示,它的工作原理很簡單,即將序列D中的各項逐個加在一起,最終累加結果便是漢明距離。求和網(wǎng)絡法在網(wǎng)絡結構上可分為并行求和網(wǎng)絡和串行求和網(wǎng)絡兩種,這兩種結構所需加法器的數(shù)目J是一樣的,均為

J=N-1(8-11)在一般情況下,為了保證計算結果的可靠性,需要將序列D用N位寄存器鎖存。在求和網(wǎng)絡中,信號每經(jīng)過一次加法運算,就引入一定的延遲。但是,串行求和網(wǎng)絡與并行求和網(wǎng)絡的信號總延遲τ是不同τ的,顯然:

τ串行>τ并行

(8-12)因為信號總的延遲時間不能超過數(shù)據(jù)碼元周期T0,即有

T0>τ串行>τ并行

(8-13)圖8.16求和網(wǎng)絡法原理圖(a)并行求和網(wǎng)絡;(b)串行求和網(wǎng)絡

8.4.5組合應用以上介紹了四種計算漢明距離的方法,它們各有優(yōu)缺點,在具體應用中,如果將幾種方法組合使用,計算電路會更加合理、高效。圖8.17給出了計數(shù)—求和網(wǎng)絡法的原理框圖,在這里,我們重點討論圖8.18所示的查找表—求和網(wǎng)絡法。

圖8.17計數(shù)-求和網(wǎng)絡法原理圖

在查找表—求和網(wǎng)絡法中,需要解決的問題是怎樣才能使存儲器總容量與求和網(wǎng)絡中加法器的數(shù)目達到最佳。如圖8.18所示,可將查找表分解成若干個子查找表,分別由存儲器1~K構成。首先將長度為N的序列D等間距地分成K段,為了便于分析并不失一般性,令

N=2m,K=2n,且m≥n≥0,m,n均為整數(shù)那么存儲器的地址線寬度為2m-n,每個存儲單元的數(shù)據(jù)寬度為(m-n+1),則存儲器1~K的容量均為(8-14)圖8.18查找表—求和網(wǎng)絡法原理圖

進而可以計算出存儲器的總容量為

(8-15)顯然,與(8-10)式相比,將一個大的查找表分割成若干個子查找表,可以減少存儲器的容量。同樣,由(8-11)式可知,求和網(wǎng)絡中加法器的總數(shù)目為

J總=K-1=2n-1(8-16)

在上述討論中,我們曾令{N=2m,K=2n,且m≥n≥0,m,n均為整數(shù)},當{2m≥N≥2m-1,2n≥K≥2n-1,且m≥n≥1,m,n均為整數(shù)}時,經(jīng)同樣分析可知,(8-11)、(8-16)式給出了此時存儲器容量和加法器數(shù)目的上限。

由(8-15)和(8-16)式可知,當n=m時,M總=2n,J總=2m-1,原方法等效為求和網(wǎng)絡法;當n=0時,M總=2N×(m+1),J總=0,原方法等效為查找表法。我們將(8-15)和(8-16)式結合起來,繪成m-J總-log2M總關系曲線,如圖8.19所示。值得注意的是,在序列長度確定的條件下(即m確定),M總與J總的大小是可以相互轉換的,這個特點對于采用可編程邏輯器件計算漢明距離尤為重要。因為可編程邏輯器件的存儲單元和邏輯單元屬于兩種不同的芯片資源,它們是有限的。加法器一般可由邏輯單元構成。在較復雜的專用集成電路設計中,其它功能模塊可能已經(jīng)占用了較多的存儲單元,或者占用了較多的邏輯單元,而漢明距離的計算電路則可根據(jù)有效的芯片資源,恰當?shù)剡x擇M總與J總值,使整個系統(tǒng)的資源利用率達到最佳。

圖8.19m-J總-log2M總關系曲線

在某通信系統(tǒng)的檢測單元中,需要實時計算出長度為32位的接收序列與本地序列之間的漢明距離,同時要求實際電路能夠充分利用Altera公司EPF10K10芯片內的存儲單元,盡量節(jié)省邏輯單元以容納其它的功能模塊。EPF10K10芯片的存儲單元由三個EAB塊組成,每個EAB塊的存儲容量為2048比特,可以配置成512×4的查找表,其中地址線寬度為9,數(shù)據(jù)線寬度為4。設序列D=(D1,D2,…,D32),分別將(D6,D7,…,D14),(D15,D16,…,D23),(D24,D25,…,D32)作為查找表的地址線,由此可以計算出序列(D6,D7,…,D32)的漢明距離。序列(D1,D2,…,D5)的漢明距離可以采用邏輯函數(shù)法獲得。圖8.20給出了32位序列漢明距離電路計算原理圖。圖8.2032位序列漢明距離計算電路原理圖

由(8-8)式可知,邏輯計算電路有三個二進制輸出變量,由最高有效位到最低有效位依次設為A、B、C,其邏輯表達式為

圖8.21是32位漢明距離計算的電路圖,其中用三個“l(fā)pm_rom”模塊構建查找表,用“c5in3out”模塊完成邏輯電路計算功能,最后用三個加法器將各項相加,就得到最終計算結果。整個計算電路使用了芯片100%的存儲單元和5%的邏輯單元,其中,邏輯計算電路占2%,加法器占3%。如果完全采用邏輯函數(shù)法,則需要占用芯片15%的邏輯單元,因此圖8.21所示的漢明距離計算電路為該通信系統(tǒng)的檢測單元節(jié)省了10%的邏輯單元。

圖8.2132位序列漢明距離計算電路圖

圖8.22給出了部分電路仿真波形,其中序列D從端口“DATAIN[31..0]”輸入,用十六進制數(shù)表示,計算結果從“OUT[3..0]”輸出,用十進制數(shù)表示。

圖8.2232位序列漢明距離計算電路仿真波形

8.5交

8.5.1交織編碼的原理數(shù)字通信系統(tǒng)進行數(shù)據(jù)傳輸時,不可避免地會在接收端產生差錯。在這種情況下,如果單純通過改進信道的性能來降低誤碼率,在某些情況下是不切實際或不經(jīng)濟的。因此,數(shù)字通信系統(tǒng)通常采用前向糾錯編碼的方法來糾正在傳輸過程中產生的誤碼。目前常用的糾錯碼包括分組碼和卷積碼,它們都是按一定規(guī)律在原始信息序列中有意加上一些不含信息的多余比特,其作用是監(jiān)督所有碼組經(jīng)過信道傳輸后是否有差錯,以便在接收端根據(jù)碼組中規(guī)定的監(jiān)督關系對出現(xiàn)差錯的碼組進行糾錯。

每一種糾錯碼都只具備有限的糾錯能力。當連續(xù)誤碼個數(shù)超過它的糾錯能力之后,接收端的糾錯譯碼便不能有效地降低信道誤碼率,甚至還會造成某種程度的惡化。為了克服信道中出現(xiàn)突發(fā)性差錯,需要使用交織編碼技術,其作用就是將連續(xù)誤碼分散成非連續(xù)誤碼,增大糾錯碼的約束長度。數(shù)字通信系統(tǒng)采用糾錯碼和交織編碼,就具有了既能糾正隨機差錯,又能克服突發(fā)性差錯的功能,大大提高了通信質量。此外,交織編碼器在Turbo碼設計中也起著十分重要的作用。圖8.23是糾錯編碼與交織編碼電路連接關系圖。交織編碼根據(jù)交織圖案形式的不同,可分為線性交織、卷積交織和偽隨機交織。其中線性交織編碼是一種比較常見的形式,在這里,我們主要向大家講述線性交織編碼器的FPGA設計。

圖8.23糾錯編碼與交織編碼的連接關系

如果只包含一個數(shù)據(jù)比特,稱為按位交織;如果包含多個數(shù)據(jù)比特,則稱為按字交織。接收端的交織譯碼同交織編碼過程相類似,也是通過圖8.24的交織矩陣來完成,它們的結構是一樣。在這里,我們只討論交織編碼器,當然它也可以用來做交織譯碼。

圖8.24n×m

交織矩陣

8.5.2利用移位寄存器實現(xiàn)交織編碼圖8.25所示為利用移位寄存器實現(xiàn)4×4交織編碼器(m=n=4)工作原理方框圖,輸入移位寄存器和輸出移位寄存器的容量均為16比特,該交織器每次完成16比特數(shù)據(jù)的交織編碼。圖8.26為4×4交織編碼器的交織矩陣。設“0~15”為輸入16比特數(shù)據(jù)的編號,輸入數(shù)據(jù)在時鐘的作用下,按照“0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15”的順序進入“輸入移位寄存器”,在時序控制單元的控制下,經(jīng)過交織網(wǎng)絡,進入“輸出移位寄存器”,然后以“0、4、8、12、1、5、9、13、2、6、10、14、3、7、11、15”的順序輸出,從而完成交織編碼。

圖8.25基于移位寄存器的交織編碼器工作原理方框圖

圖8.264×4交織矩陣

圖8.27是利用移位寄存器所實現(xiàn)的交織編碼器電路圖,表8.3給出了交織編碼器的引腳關系。“輸入移位寄存器”由兩個“74164”級聯(lián)實現(xiàn),“輸出移位寄存器”由兩個“cshifreg”級聯(lián)實現(xiàn)。表8.4為輸入數(shù)據(jù)和輸出數(shù)據(jù)編號的對應關系,利用對應關系將相應編號的端口相連接,就構成了“交織網(wǎng)絡”。時序控制單元是一個模16同步計數(shù)器,當“輸入移位寄存器”讀入16比特數(shù)據(jù)后,時序控制單元產生一個脈沖信號,將這些數(shù)據(jù)通過“交織網(wǎng)絡”送入“輸出移位寄存器”,此時該移位寄存器內的數(shù)據(jù)已經(jīng)按照交織編碼后的順序排列。在時鐘的驅動下,將“輸出移位寄存器”內數(shù)據(jù)順序送出,即為交織編碼后的數(shù)據(jù)。

圖8.27利用移位寄存器實現(xiàn)的交織編碼器表8.3基于移位寄存器的交織編碼器引腳

表8.4輸入數(shù)據(jù)和輸出數(shù)據(jù)編號的對應關系

圖8.28是該交織編碼器的仿真波形,第20號D觸發(fā)器Q輸出端口處的脈沖信號每16個時鐘周期出現(xiàn)一次,“輸入移位寄存器”中的數(shù)據(jù)在脈沖信號控制下被送入“輸出移位寄存器”,同時在交織網(wǎng)絡中完成交織編碼。時鐘“CLKOUT”是輸入時鐘“CLK”的反相時鐘,其上升沿對應著數(shù)據(jù)信號的中間位置,這樣可以保證數(shù)據(jù)的可靠讀取?!癉ATAIN”是數(shù)據(jù)輸入端,系統(tǒng)清零后輸入的前16個數(shù)據(jù)比特為“1101010001001110”,經(jīng)交織后,“DATAOUT”輸出的數(shù)據(jù)比特為“1001111100011000”。

圖8.28交織編碼器仿真波形(一)8.5.3利用存儲器實現(xiàn)交織編碼

FPGA器件中的EAB可以實現(xiàn)復雜的邏輯功能,當用作存儲器時,其存儲數(shù)據(jù)的寬度和深度可由設計人員任意指定,甚至還可以把若干個EAB連接起來組成容量更大的存儲單元。因此利用存儲器可以方便地構造出交織深度很大的交織編碼器。圖8.29是利用雙端口RAM實現(xiàn)的交織編碼器工作原理方框圖,由圖可看出,交織編碼器設計的關鍵在于“讀/寫地址”的產生。一般說來,有兩種設計“讀/寫地址”的方法:一種方法是“順序寫入、亂序讀出”,即輸入數(shù)據(jù)以順序地址寫入存儲器,然后再以交織地址從存儲器中讀出;另一種方法是“亂序寫入、順序讀出”,即輸入數(shù)據(jù)以交織地址寫入存儲器,然后再以順序地址從存儲器中讀出。這兩種方法是等效的,在下面的例子中,我們采用“順序寫入,亂序讀出”的方法。

圖8.29基于存儲器的交織編碼器工作原理方框圖

圖8.30是4×4交織編碼器的電路圖,雙端口RAM由“l(fā)pm_ram_dp”宏模塊構成,該模塊的邏輯參數(shù)為:輸入輸出數(shù)據(jù)線的寬度為“1”,讀/寫地址線的寬度為“5”,5位“寫地址”為“WRADDRESS[4..0]”,5位“讀地址”為“RDADDRESS[4..0]”,總尋址空間為“32”比特。

圖8.30利用雙端口RAM實現(xiàn)的交織編碼器

“寫地址”的低4位“WRADDRESS[3..0]”由計數(shù)器“4count”的輸出端口“QA~QD”產生。“讀地址線”的產生比較復雜,需要通過狀態(tài)轉移圖得到。我們已經(jīng)知道,交織器編碼數(shù)據(jù)按照“0、4、8、12、1、5、9、13、2、6、10、14、3、7、11、15”的順序輸出,其地址(低4位地址)狀態(tài)轉移圖為由狀態(tài)轉移圖可以得到“讀地址”的低4位“RDADDRESS[3..0]”與數(shù)據(jù)時鐘之間有表8.5所述的對應關系。因此,可以很容易地用分頻器得到“讀地址”。

表8.5“讀地址”與時鐘對應關系

“讀/寫地址”的最高位“RDADDRESS4/WRADDRESS4”是反相關系,使存儲器在“00000~01111”和“10000~11111”兩段地址空間內交替“讀/寫”操作。這兩段空間交替“讀/寫”一次對應32個數(shù)據(jù)時鐘周期,所以“RDADDRESS4/WRADDRESS4”可由數(shù)據(jù)時鐘的32分頻得到。圖8.30用5個D觸發(fā)器構成了一個32分頻器,從各級D觸發(fā)器輸出端可得到5位“讀地址”以及“寫地址”的最高位“WRADDRESS4”。

表8.6給出了基于RAM結構的交織編碼器的引腳關系,為了便于測試,將“讀/寫地址”和“模16計數(shù)信號”也用輸出管腳引出。“CLKOUT”是時鐘“CLK”的反相信號。“讀/寫”地址轉換的時候會出現(xiàn)許多“毛刺”信號,用“CLKOUT”作為存儲器“讀/寫”時鐘可以避免“毛刺”的影響,保證數(shù)據(jù)的可靠讀取。

表8.6基于RAM的交織編碼器引腳

圖8.31交織編碼器仿真波形(二)8.6直接數(shù)字頻率合成

圖8.32是DDS的基本原理框圖,頻率控制字M和相位控制字分別控制DDS輸出正(余)弦波的頻率和相位。DDS系統(tǒng)的核心是相位累加器,它由一個累加器和一個N位相位寄存器組成。每來一個時鐘脈沖,相位寄存器以步長M增加。相位寄存器的輸出與相位控制字相加,其結果作為正(余)弦查找表的地址。圖8.32中正(余)弦查找表由ROM構成,內部存有一個完整周期正弦波的數(shù)字幅度信息,每個查找表的地址對應正弦波中0(~360(范圍的一個相位點。查找表把輸入的地址信息映射成正(余)弦波幅度信號,同時輸出到數(shù)模轉換器(DAC)的輸入端,DAC輸出的模擬信號經(jīng)過低通濾波器(LPF),可得到一個頻譜純凈的正(余)弦波。

圖8.32DDS基本原理框圖

相位寄存器每經(jīng)過個fc時鐘周期后回到初始狀態(tài),相應地正(余)弦查找表經(jīng)過一個循環(huán)回到初始位置,DDS輸出一個正(余)弦波。輸出的正(余)弦波周期為,頻率為。DDS的最小分辨率為,當 時,DDS最高的基波合成頻率為。圖8.32中虛方框內的部分是DDS的核心單元,它可以采用FPGA器件來實現(xiàn),圖8.33給出了DDS核心單元的FPGA電路設計圖,其中字長N=10。為了便于大家理解,圖8.33中各個功能單元的名稱已在圖中標明,其中在輸出引腳“out_c[7..0]”和“out_s[7..0]”前分別放置了一個8位D觸發(fā)器。

圖8.33DDS核心單元的FPGA電路設計圖

圖8.34是DDS電路的波形仿真結果。實際上,從波形仿真結果中我們很難直觀地看出DDS輸出正(余)弦波的情況。為了便于調試設計電路,我們可以利用計算機高級語言將波形仿真結果轉換為波形曲線,這就需要借助表格文件(TBL文件)。

圖8.34DDS電路的波形仿真結果

Altera設計軟件中的TBL文件是純文本文件,MAX+PLUSⅡ軟件產生的TBL文件包含了SCF文件或WDF文件中的所有信息,而QuartusⅡ軟件產生的TBL文件則包含了當前VEC文件或VWF文件中所有輸入矢量和輸出邏輯電平值。

TBL文件的生成很簡單,只需要打開波形文件,然后從“File”菜單中選擇“Saveas”(另存為)TBL格式(基于QuartusⅡ軟件),或者從“File”菜單中選擇“CreateTableFiles”選項,就可產生TBL文件(基于MAX+PLUSⅡ軟件)。

表8.7TBL文件基本格式

圖8.35TBL文件的部分內容

下面給出了一段用Matlab語言編寫的程序,它首先讀取“dds.tbl”文件,將輸入引腳“CLK=0”時的輸出數(shù)據(jù)抽取出來并轉換為十進制數(shù),然后繪出DDS電路的仿真波形曲線,該曲線如圖8.36所示。將此程序的第2、9、11~14行做適當修改,可用于其它TBL文件的數(shù)據(jù)抽取和轉換。需要注意的是,波形仿真文件中各個I/O端口的前后排列順序與TBL文件中各數(shù)據(jù)的排列順序是一致的,對程序的9和11~14行進行修改,就是為了能夠正確地讀出TBL文件中的數(shù)據(jù)。

圖8.36Matlab繪出的DDS電路仿真波形

clearall;fid=fopen('e:\work\dds.tbl','r');%讀取.tbl文件data=fscanf(fid,'%s');%把.tbl文件中的內容以字符形式傳遞給變量datafclose(fid);b=find(data=='=');%把data中所有“=”字符的位置傳遞給變量bnumber=length(b);%統(tǒng)計data中“=”字符的數(shù)目,并傳遞給變量numberj=0;fori=1:number-1ifdata(b(i)-1)=='0'%判斷給一個“=”前的字符是否為0j=j+1;

c_c(j,1)=data(b(i)+1);%讀取out_c引腳數(shù)據(jù)的第一位

c_c(j,2)=data(b(i)+2);%讀取out_c引腳數(shù)據(jù)的第二位

c_s(j,1)=data(b(i)+3);%讀取out_s引腳數(shù)據(jù)的第一位

c_s(j,2)=data(b(i)+4);%讀取out_s引腳數(shù)據(jù)的第二位

endendd_c=hex2dec(c_c);%將十六進制數(shù)轉換為十進制數(shù),d_c是out_c引腳上的數(shù)據(jù)d_s=hex2dec(c_s);%將十六進制數(shù)轉換為十進制數(shù),d_s是out_s引腳上的數(shù)據(jù)figure(1);subplot(2,1,1);plot(d_c);%DDS輸出的余弦波subplot(2,1,2);plot(d_s);%DDS輸出的正弦波

8.7奇偶數(shù)分頻器

FPGA的時序電路設計中,時鐘網(wǎng)絡的設計是一個很重要的環(huán)節(jié)。一般情況下,F(xiàn)PGA工作時鐘由片外的晶振提供,并以此時鐘為基準產生系統(tǒng)所需的多種頻率的時鐘。這就需要FPGA芯片中提供的鎖相環(huán)模塊對工作時鐘進行鎖相處理調整,以得到設計中要用到的不同頻率的時鐘。FPGA芯片中固化的鎖相環(huán)模塊的數(shù)量是極其有限的,如果在實際設計中芯片提供的鎖相環(huán)數(shù)量不夠用,就必須利用其它方法進行時鐘的操作。一般地,利用鎖相環(huán)對外部輸入時鐘進行的操作就是分頻和倍頻,其中時鐘的倍頻相對而言比較復雜,而時鐘的分頻比較容易實現(xiàn),所以在FPGA設計中,應盡量把鎖相環(huán)資源用于時鐘的倍頻,同時利用計數(shù)器或觸發(fā)器來進行時鐘的分頻操作。

D觸發(fā)器或T觸發(fā)器可以完成時鐘的二分頻,電路結構如圖8.37和圖8.38所示。

圖8.37基于D觸發(fā)器的二分頻電路

圖8.38基于T觸發(fā)器的二分頻電路

圖8.39T觸發(fā)器組成的16分頻器

圖8.40模16計數(shù)器的原理框圖

圖8.41計數(shù)器分頻的原理波形

以上的分頻都為2N分頻,下面重點討論奇數(shù)分頻器的設計方法。奇數(shù)分頻中,計數(shù)器模數(shù)的選擇可以根據(jù)下式計算:(8-17)我們以七分頻為例,由上式可知計數(shù)器模值應為4,圖8.42和圖8.43分別給出了七分頻器的電路原理框圖和仿真波形。

圖8.42七分頻電路原理框圖

圖8.43七分頻電路仿真波形

在復雜的數(shù)字系統(tǒng)中,由于各個組成部分所用的外部時鐘源的頻率穩(wěn)定性不同,為了保證各部分的時鐘與基準時鐘保持同步,就需要微調系統(tǒng)各個組成部分的時鐘頻率,這一工作可通過“可變模計數(shù)器”來完成。其操作流程為:首先把本地時鐘利用鎖相環(huán)進行2N倍頻,得到一個高倍頻時鐘,然后利用可變模計數(shù)器對此高倍頻時鐘進行2N分頻,并把計數(shù)器的最高位的輸出作為調整后的同步時鐘。如果本地時鐘與基準時鐘相位不同步,當超過一定的門限時,就通過改變計數(shù)器的模值來對其相位進行修正,使其始終保持與基準時鐘同頻同相。這樣,利用可變模計數(shù)器不斷對本地時鐘進行閉環(huán)微調,就可得到一個均勻的、緩慢變化的、頻率穩(wěn)準度較高的同步時鐘。

下面以N=4為例討論時鐘的調整過程,仿真波形如圖8.44所示。

(1)如果本地時鐘的快慢在允許的變化范圍之內,計數(shù)器正常工作,完成對高倍頻時鐘的2N分頻,得到一個與基準時鐘同步的輸出時鐘。此時計數(shù)器模值為16,仿真波形如圖8.44(a)所示。

(2)如果發(fā)現(xiàn)本地時鐘慢于系統(tǒng)基準時鐘,使計數(shù)器的計數(shù)值多加一,進行增量為二的計數(shù)(此時計數(shù)器模值為15),相當于提高了本地時鐘頻率。調整后,計數(shù)器恢復正常的模16計數(shù)狀態(tài)。仿真波形如圖8.44(b)所示。

(3)如果發(fā)現(xiàn)本地時鐘快于系統(tǒng)基準時鐘,使計數(shù)器停止計數(shù),保持不變(此時計數(shù)器模值為17),相當于降低了本地時鐘頻率。調整后,計數(shù)器恢復正常的模16計數(shù)狀態(tài)。仿真波形如圖8.44(c)所示。

圖8.44時鐘調整的仿真波形(a)正常的時鐘;(b)本地時鐘慢;(c)本地時鐘快

(a)(b)圖8.44時鐘調整的仿真波形(a)正常的時鐘;(b)本地時鐘慢;(c)本地時鐘快

(c)其中,local_clk為外部時鐘源引入的時鐘,clock為24倍頻后的時鐘,counter為工作在時鐘clock下的計數(shù)器,counter[3]為調整后的時鐘。由上圖可知,對外部時鐘源進行的調整,并非是直接插入或扣除clock的一個時鐘脈沖,而是根據(jù)本地時鐘的快慢把時鐘脈沖相應的延遲或提前clock的一個時鐘周期。所以,本地時鐘的調整精度為倍頻后時鐘的一個周期,倍頻值N越大,時鐘每次調整的量就越小,精度就越高。

可變模計數(shù)器“mod_counter”的VHDL語言源程序如下:LIBRARYIEEE;USEIEEE.std_logic_1164.all;USEIEEE.std_logic_arith.all;USEIEEE.std_logic_unsigned.all;

ENTITYmod_counterISPORT(clk,clk_en:INSTD_LOGIC; aset:INSTD_LOGIC; flag:INSTD_LOGIC_VECTOR(1DOWNTO0); counter:OUTSTD_LOGIC_VECTOR(1DOWNTO0));ENDmod_counter;ARCHITECTUREsynOFmod_counterISSIGNALscounter :STD_LOGIC_VECTOR(1DOWNTO0);BEGINPROCESS(clk,aset)BEGINIF(aset='1')THENscounter<=(others=>'1');ELSIF(clk'EVENTANDclk='1')THENIF(clk_en='1')THENIFflag="01"THEN --flag=01表示本地時鐘慢

scounter<=scounter+2; --此時計數(shù)器加2,提高時鐘頻率

ELSIFflag=“11”THEN--flag=11表示本地時鐘快

scounter<=scounter;--此時計數(shù)器不計數(shù),相當于降低時鐘頻率

ELSEscounter<=scounter+1;--本地時鐘正常,計數(shù)器正常計數(shù)

ENDIF;ENDIF;ENDIF;ENDPROCESS;counter<=scounter;ENDsys;8.8串并/并串變換器

串并變換和并串變換在很多電路系統(tǒng)中都有廣泛的應用,在不同的存儲器件之間進行數(shù)據(jù)傳送、不同位寬的總線之間的通信、通信系統(tǒng)中的編碼等電路都能見到它們的身影。本節(jié)以設計實例的形式來討論串并變換和并串變換電路的設計。先來介紹串并變換電路的設計,設輸入數(shù)據(jù)為8bit位寬,期望將其轉換為連續(xù)并行輸出且位寬為32bit的數(shù)據(jù)流。圖8.45為串并變換的電路結構。

圖8.45串并變換的電路結構

圖中的模塊freqdiv為時鐘的分頻電路,在串并變換電路中,由于輸出數(shù)據(jù)的位寬比輸入數(shù)據(jù)的位寬大,且輸出數(shù)據(jù)的位寬是輸入數(shù)據(jù)位寬的4倍,所以數(shù)據(jù)的輸入時鐘頻率和數(shù)據(jù)的輸出時鐘頻率之比為4:1,這就需要對輸入時鐘進行4分頻,得到輸出數(shù)據(jù)的工作時鐘。模塊lpm_ff0是位寬為8bit的D觸發(fā)器,在時鐘上升沿對數(shù)據(jù)操作。在本例中需要4個模塊lpm_ff0,第一個lpm_ff0的輸出為qo[31..24],是輸入數(shù)據(jù)data[7..0]延時一個clock時鐘周期的輸出;第二個lpm_ff0的輸出為qo[23..16],是輸入數(shù)據(jù)data[7..0]延時兩個clock時鐘周期的輸出;第三個lpm_ff0的輸出為qo[15..8],是輸入數(shù)據(jù)data[7..0]延時三個clock時鐘周期的輸出;第四個lpm_ff0的輸出為qo[7..0],是輸入數(shù)據(jù)data[7..0]延時四個clock時鐘周期的輸出。這4個D觸發(fā)器的輸出并置后,就組成了位寬為32的輸出數(shù)據(jù)qo[31..0]。模塊lpm_ff1是位寬為32bit的D觸發(fā)器,它所工作的時鐘頻率為輸入時鐘的clock的1/4,在時鐘上升沿,對數(shù)據(jù)qo[31..0]進行觸發(fā)輸出,得到并串變換后的輸出數(shù)據(jù)q[31..0]。圖8.46為串并變換的仿真波形。

圖8.46串并變換的仿真波形

圖8.47并串變換的電路結構

圖中的模塊p2s_mux是四選一的復用器,工作時鐘為clock。模塊p2s_counter是工作在時鐘clock下的模為4的計數(shù)器,計數(shù)器的輸出端與復用器的選擇控制端相連,復用器按照計數(shù)器的計數(shù)值選擇復用器中四個輸入端的數(shù)據(jù)輸出。這里要注意的就是輸入的位寬為32bit的數(shù)據(jù)的周期為工作時鐘clock周期的4倍。圖8.48為并串變換電路的仿真波形。

圖8.48并串變換的仿真波形

為了進一步驗證串并轉換和并串轉換兩個模塊的工作都正常,把串并轉換模塊s_to_p和并串轉換模塊p_to_s兩個模塊連接起來進行聯(lián)調測試,以驗證它們工作的正確性和可靠性,如圖8.49所示。

圖8.49串并變換和并串變換器的聯(lián)調結構框圖

在聯(lián)調中要注意對并串轉換模塊p_to_s的時鐘使能控制。圖8.50是兩者聯(lián)調的仿真波形結果。

圖8.50聯(lián)調的仿真波形

8.9利用IPCore實現(xiàn)FFT和IFFT變換

傳統(tǒng)的FFT/IFFT一般是通過軟件編程和專用芯片ASIC這兩種方法來實現(xiàn)。近年來,F(xiàn)PGA市場發(fā)展十分迅速,F(xiàn)PGA器件廣泛應用于通信、自動控制、信息處理等諸多領域,這給FFT/IFFT設計又提供了一個新的思路。而且大多數(shù)FPGA廠家及其第三方已經(jīng)開發(fā)出具有自主知識產權的功能模塊(即IP模塊),其中就有實現(xiàn)FFT/IFFT的IP模塊。本節(jié)介紹了利用Altera公司及其第三方合作伙伴(AMPP,AlteraMegafunctionPartnersProgram)所提供的含有布局布線信息的軟件IP模塊(即固件IP模塊)來實現(xiàn)FFT/IFFT的簡單方法,用QuartusⅡ軟件進行仿真,并通過Matlab的FFT/IFFT函數(shù)驗證了該設計的正確性。

Altera公司的FFTMegaCore是一個高性能、高參數(shù)化的快速傅立葉變換處理器,可以高效地完成FFT和IFFT運算,支持Altera公司StratixⅡ、StratixGX、Stratix和Cyclone系列器件,采用基2/4頻域抽取FFT算法,運算長度最小不低于64,最大不超過16384,使用嵌入式內存且系統(tǒng)最大時鐘頻率大于300MHz。該運算是對數(shù)據(jù)塊進行處理,使得數(shù)據(jù)在處理過程中保持最大的動態(tài)范圍。FFT處理器包括兩種引擎結構:四輸出和單輸出,其結構分別如圖8.51和圖8.52所示。四輸出和單輸出是指內部蝶形算法的吞吐量,若要使運算時間最短則選用前一種引擎結構,若要使耗費資源最少則選用后一種。I/O數(shù)據(jù)流結構包括:數(shù)據(jù)流型,緩沖突發(fā)型和突發(fā)型。數(shù)據(jù)流型保證數(shù)據(jù)處理過程的連續(xù)性;緩沖突發(fā)型比數(shù)據(jù)流型耗費的內存資源要少,其代價是數(shù)據(jù)塊平均吞吐量的減少;突發(fā)型與緩沖突發(fā)型類似,但是其耗費的內存資源比緩沖突發(fā)型的少。

圖8.51四輸出FFT引擎結構

圖8.52單輸出FFT引擎結構

用QUARTUSⅡ仿真軟件設計時產生的FFTMegaCore模塊如圖8.53所示:

圖8.53FFT模塊

本模塊選用的目標器件為Altera公司的Stratix系列芯片,變換域長度選擇為64,數(shù)據(jù)量化精度為24bit,旋轉因子量化精度也為24bit,設計者可以根據(jù)實際情況方便地改變參數(shù)設置。選用的引擎結構為四輸出,I/O數(shù)據(jù)流結構為數(shù)據(jù)流型。該模塊主要是完成復數(shù)乘法運算??紤]兩個復數(shù)、的乘積結果,得到下式

(8-18)由以上兩式可以看出,若在一個時鐘周期內完成復數(shù)乘法,需要四次實數(shù)乘法和兩次實數(shù)加法。我們通過數(shù)學變換得到如下等式

(8-19)由以上兩式可以看出,完成一次復數(shù)乘法需要三次實數(shù)乘法和五次實數(shù)加法,這種變換的代價是增加三個加法器來減少一個乘法器。在FPGA硬件設計中,一個乘法器所占用的資源要遠大于一個加法器占用的資源,例如實現(xiàn)一個8位的加法器需要18個邏輯單元,而實現(xiàn)一個8位的有符號數(shù)的乘法需要169個邏輯單元,因此在選擇乘法器結構時為了節(jié)省資源選用的是3個乘法器和2個加法器這種結構。該模塊占用資源如圖8.54所示。

圖8.54實現(xiàn)FFT/IFFT資源占用情況

1.輸入接口

clk:FFT系統(tǒng)工作時鐘;

reset:同步復位信號,高復位,低時FFT模塊工作;

master_sink_dav:指示到達輸入端的數(shù)據(jù)是否有效;

master_sink_sop:指示FFT運算的數(shù)據(jù)塊起始位置,在本設計中該信號每隔64個時鐘周期出現(xiàn)一個周期寬度的高電平;

inv_i:低有效時模塊做FFT運算,高有效時模塊做IFFT運算;

data_real_in[23..0]和data_imag_in[23..0]:輸入的實部和虛部數(shù)據(jù),位寬根據(jù)設置的數(shù)據(jù)精度來確定;

master_source_dav:指示FFT模塊接收到的數(shù)據(jù)是否有效。

2.輸出接口

master_sink_ena:指示數(shù)據(jù)是否寫入輸入緩存中;

fft_real_out[23..0]和fft_imag_out[23..0]:輸出的實部和虛部數(shù)據(jù),位寬根據(jù)設置的數(shù)據(jù)精度來確定;

master_source_ena:指示輸出數(shù)據(jù)是否有效;

master_source_sop:指示輸出數(shù)據(jù)塊的起始位置,在本設計中該信號每隔64個時鐘周期出現(xiàn)一個周期寬度的高電平;

master_source_eop:指示輸出數(shù)據(jù)塊的結束位置,在本設計中該信號每隔64個時鐘周期出現(xiàn)一個周期寬度的高電平;

exponent_out[5..0]:每一個數(shù)據(jù)塊輸出時的一個比例因子,用來保持數(shù)據(jù)精度和內部的最大信噪比。為了觀察QuartusⅡ仿真數(shù)據(jù)與Matlab理論仿真數(shù)據(jù)的關系,在進行波形仿真的時候對輸入數(shù)據(jù)做特殊化處理,即取實部數(shù)據(jù)為一個滿足精度要求的常數(shù),虛部為0,這樣相當于一個常數(shù)乘以。我們知道理論情況下的傅立葉變換為,但是由于受有效字長的影響,得到的數(shù)據(jù)與理論值可能會有較小的偏差。本試驗取輸入數(shù)據(jù)大小為4194304,仿真波形如圖8.55所示。

圖8.55FPGA實現(xiàn)FFT的輸入和輸出數(shù)據(jù)

利用Matlab的FFT函數(shù)分析得到的結果除第一個值為268435456(4194304×64)以外,其余63個值均為0。同理我們也可以對IFFT的FPGA實現(xiàn)進行類似試驗,仿真波形如圖8.56所示。

圖8.56FPGA實現(xiàn)IFFT的輸入和輸出數(shù)據(jù)

利用Matlab的IFFT函數(shù)分析得到的結果除第一個值為4194304以外,其余63個值均為0。通過試驗發(fā)現(xiàn)該模塊輸出的數(shù)據(jù)要與Matlab產生的FFT/IFFT數(shù)據(jù)一致,就需要根據(jù)輸出的比例因子做相應調整,具體情況如下:

(1)模塊進行FFT運算時:

(8-20)(2)模塊進行IFFT運算時:

(8-21)其中N為IFFT運算的點數(shù),本例中;N=64;value_fft_matlab為Matlab做FFT運算輸出結果,value_ifft_matlab為Matlab做IFFT運算輸出結果,value_fft_megacore為FPGA實現(xiàn)FFT的仿真結果,value_ifft_megacore為FPGA實現(xiàn)IFFT的仿真結果。exponent_out為比例因子,是IPCore通過每一次參數(shù)的設定自動計算出來的,例如當為64時,則每64個數(shù)據(jù)為一個數(shù)據(jù)塊做FFT運算,對應有一個exponent_out的值輸出,但是對于每個數(shù)據(jù)塊來講,它產生的exponent_out的值是不同的。由于FPGA的處理數(shù)據(jù)受有效字長的影響,所以FPGA計算得到的數(shù)據(jù)與Matlab理論值之間會存在有較小的偏差。

8.10線性時不變FIR濾波器

數(shù)字濾波器在信號處理領域應用十分廣泛,通常都是通信系統(tǒng)的基本模塊,它分為FIR濾波器和IIR濾波器兩種。對于濾波器我們同樣可以借用IPCore來實現(xiàn),但是對于一些階數(shù)較低的線性時不變FIR濾波器來講,利用IPCore來實現(xiàn)反而使得原本簡單的設計復雜化,增加資源消耗和設計成本。因此,在這里我們介紹一種適用于階數(shù)很低的線性時不變FIR濾波器的FPGA設計方法。

FIR濾波器的特點有以下幾個方面:

(1)系統(tǒng)單位沖激響應h(n)在有限個n值處不為零。

(2)系統(tǒng)函數(shù)H(Z)在|Z|>0處收斂,在|Z|>0處只有零點,有限Z平面只有零點,而全部極點都在處(因果系統(tǒng))。

(3)結構上主要是非歸規(guī)結構,沒有輸出到輸入的反饋,但有些結構中(例如頻率抽樣結構)也包含反饋的遞歸部分。設FIR濾波器的單位沖激響應h(n)為一個N點序列,0≤n≤N-1,則濾波器的差分方程為

(8-22)其直接實現(xiàn)形式如圖8.57所示。

圖8.57FIR濾波器直接實現(xiàn)形式

FIR濾波器的線性相位也是非常重要的,如果FIR濾波器單位沖激響應h(n)為實數(shù),0≤n≤N-1,且滿足以下兩個條件:偶對稱:h(n)=h(N-1-n)奇對稱:h(n)=-h(huán)(N-1-n)即h(n)關于對稱,則這種FIR濾波器具有嚴格的線性相位。濾波器的線性時不變是指濾波器的系數(shù)不隨時間變化,實現(xiàn)該FIR濾波器算法的基本元素就是存儲單元、乘法器、加法器、延遲單元等。其設計流程如圖8.58所示。線性時不變的數(shù)字FIR濾波器不用考慮通用可編程濾波器結構,我們利用數(shù)字濾波器設計軟件如Matlab中的fdatool直接生成FIR濾波器的系數(shù),通過仿真圖來判斷設計的濾波器是否達到設計要求,如果沒有達到,則修改濾波器參數(shù)重新生成滿足要求的濾波器系數(shù)。將生成的濾波器常系數(shù)量化后導出,存入FPGA的ROM宏模塊中,然后通過程序中的讀寫控制將系數(shù)讀出并與相應的數(shù)值相乘后累加,便得到了濾波以后的結果。

圖8.58線性時不變FIR濾波器設計流程

(1)首先打開Matlab軟件,在CommandWindow鍵入fdatool,彈出圖8.59所示窗口。在彈出的窗口中根據(jù)需要設計的濾波器要求設置相應參數(shù),然后點擊按鈕designfilter,通過窗口右上方的按鈕可以觀察設計濾波器的幅頻特性和相頻特性等,用來判斷設計濾波器是否滿足要求。如果不滿足要求,則修改濾波器的參數(shù)重新設計濾波器,直到滿足要求為止。然后點擊file菜單中的export可以將濾波器系數(shù)導入Workspace中,設計者將系數(shù)以量化后將其存儲下來,通過下列Matlab程序生成filter.mif文件。

圖8.59fdatool彈出窗口

filter.mif文件的生成程序(Matlab語言)clearall;clc;loadE:\experiment\fiter_coef\coef; %文件存儲路徑width=常數(shù)M;%量化后的濾波器系數(shù)位寬depth=常數(shù)N;%濾波器階數(shù)fpn=fopen('E:\filter_fpga_design\filter.mif','w'); %filter.mif文件存儲路徑fprintf(fpn,'\nWIDTH=%d;',width);fprintf(fpn,'\nDEPTH=%d;',depth);fprintf(fpn,'\nADDRESS_RADIX=DEC;');fprintf(fpn,'\nDATA_RADIX=DEC;');fprintf(fpn,'\nCONTENTBEGIN');forn=1:depthfprintf(fpn,'\n%d:',n-1);fprintf(fpn,'%d',round(coef(n)));fprintf(fpn,';');endfprintf(fpn,'\nEND;');state=fclose('all');ifstate~=0disp('Filecloseerror!');end

(2)打開QuartusⅡ,生成一個Project,在這個工程中利用宏模塊altsyncram或者是lpm_rom生成ROM模塊,然后將filter.mif文件放入該ROM塊中。

(3)設計一個地址發(fā)生器,產生該ROM塊的讀地址。該地址發(fā)生器其實就是一個模為前面定義的常數(shù)N的計數(shù)器,該計數(shù)器可由宏模塊lpm_counter產生。

(4)將地址發(fā)生器生成的讀地址輸出端口與ROM的讀地址輸入端相連,按照順序讀出濾波器系數(shù),然后再根據(jù)時序關系跟對應的需要濾波的數(shù)據(jù)相乘后疊加便可以得到濾波以后的結果。假設濾波器階數(shù)為常數(shù)M,則一般情況下需要的乘法器個數(shù)為M個,加法器個數(shù)為M-1個。圖8.60FIR時域波形

圖中從左到右對應的濾波器系數(shù)分別為:-3、-28、44、528、921、528、44、-28、-3。將這些系數(shù)存入ROM中,為了讓ROM塊一次讀出所有系數(shù),可將filter.mif文件的數(shù)據(jù)存儲格式從圖8.61轉換為圖8.62所示的形式。其轉換過程依次如圖8.63中(a)、(b)、(c)、(d)4個子圖所示。

圖8.61數(shù)據(jù)存儲格式(一)圖8.62數(shù)據(jù)存儲格式(二)圖8.63數(shù)據(jù)存儲格式轉換

(a)第一步

(b)第二步

(c)第三步

(d)第四步

根據(jù)圖8.57所示的結構,可以很容易地得到9階FIR濾波器的電路設計圖,如圖8.64所示。該電路包含移位寄存器、權值輸出、系數(shù)加權以及求和網(wǎng)絡等部分組成。

圖8.649階FIR濾波器頂層文件

8.11二進制相移鍵控(BPSK)調制器與解調器設計8.11.1BPSK原理數(shù)字信號對載波相位調制稱為相移鍵控(相位鍵控)PSK(Phase-ShiftKeying)。是用數(shù)字基帶信號控制載波的相位,使載波的相位發(fā)生跳變的一種調制方式。二進制相移鍵控用同一個載波的兩種相位來代表數(shù)字信號。由于PSK系統(tǒng)抗噪聲性能優(yōu)于ASK和FSK,而且頻帶利用率較高,所以,在中、高速數(shù)字通信中被廣泛采用。相移鍵控分為絕對調相和相對調相。絕對調相,記為CPSK;相對調相,記為DPSK。對于二進制的絕對調相記為2CPSK,相對調相記為2DPSK。

1.絕對調相CPSK所謂絕對調相即CPSK,是利用載波的不同相位去直接傳送數(shù)字信息的一種方式。對二進制CPSK,若用相位π代表“0”碼,相位0代表“1”碼,即規(guī)定數(shù)字基帶信號為“0”碼時,已調信號相對于載波的相位為π;數(shù)字基帶信號為“1”碼時,已調信號相對于載波相位為同相。按此規(guī)定,2CPSK信號的數(shù)學表示式為式中θ0為載波的初相位。受控載波在0、π兩個相位上變化。

2.相對調相(DPSK)相對調相(相對移相),即DPSK,也稱為差分調相,這種方式用載波相位的相對變化來傳送數(shù)字信號,即利用前后碼之間載波相位的變化表示數(shù)字基帶信號的。在絕對碼出現(xiàn)“1”碼時,DPSK的載波初相位即前后兩碼元的初相位相對改變π。出現(xiàn)“0”碼時,DPSK的載波相位即前后兩碼元的初相位相對不變。由以上分析可以看出,絕對移相波形規(guī)律比較簡單,而相對移相波形規(guī)律比較復雜。絕對移相是用已調載波的不同相位來代表基帶信號的,在解調時,必須要先恢復載波,然后把載波與CPSK信號進行比較,才能恢復基帶信號。由于接收端恢復載波常常要采用二分頻電路,它存在相位模糊,即用二分頻電路恢復的載波有時與發(fā)送載波同相,有時反相,而且還會出現(xiàn)隨機跳變,這樣就給絕對移相信號的解調帶來困難。而相對移相,基帶信號是由相鄰兩碼元相位的變化來表示,它與載波相位無直接關系,即使采用同步解調,也不存在相位模糊問題,因此在實際設備中,相對移相得到了廣泛運用。

DPSK信號應用較多,但由于它的調制規(guī)律比較復雜,難以直接產生,目前DPSK信號的產生較多地采用碼變換加CPSK調制而獲得。

3.?CPSK調制信號的產生

CPSK調制有直接調相法和相位選擇法兩種方法。直接調相法的電路采用一個環(huán)形調制器。在CPSK調制中,當基帶信號為正時,輸出載波與輸入同相,當基帶信號為負時,輸出載波與輸入載波反相,從而實現(xiàn)了CPSK調制。相位選擇法電路如圖8.65所示,設振蕩器產生的載波信號為Acos(2πfct),它加到與門1,同時該振蕩信號經(jīng)倒相器變?yōu)锳cos(2πfct?+π),加到與門2,基帶信號

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論