【摘 要】本文討論由Matlab生成VHDL代碼的原理,并介紹了利用System Generator及DSP Builder將Simulink模型轉(zhuǎn)換為VHDL代碼的方法。這樣設(shè)計(jì)者可以利用Simulink高層次的設(shè)計(jì)仿真工具進(jìn)行系統(tǒng)級(jí)設(shè)計(jì),有助于在設(shè)計(jì)早期發(fā)現(xiàn)錯(cuò)誤和應(yīng)對(duì)系統(tǒng)復(fù)雜性不斷增加的挑戰(zhàn),使用集成轉(zhuǎn)換工具能夠方便地進(jìn)行VHDL代碼的生成并進(jìn)行硬件測(cè)試,極大地提高了設(shè)計(jì)效率。
【關(guān)鍵詞】MATLAB;傅里葉變換;頻域分析;VHDL
頻譜分析在生產(chǎn)實(shí)踐和科學(xué)研究中有著廣泛的應(yīng)用。其中,快速傅里葉變換(Fast Fourier Transform,F(xiàn)FT)是數(shù)字信號(hào)處理的最基本技術(shù)之一。近年來(lái),隨著現(xiàn)場(chǎng)可編程門陣列FPGA(Field Programmable Gate Array)技術(shù)的迅猛發(fā)展,利用高并行度、高速度的FPGA芯片來(lái)實(shí)現(xiàn)FFT已成為必然趨勢(shì)。
本文將以MATLAB為工具,對(duì)信號(hào)與系統(tǒng)在聯(lián)系時(shí)間系統(tǒng)的頻域進(jìn)行分析。
一、Matlab編程實(shí)現(xiàn)FFT實(shí)踐頻譜分析
步驟如下:
1.用Matlab產(chǎn)生正弦波,矩形波,以及白噪聲信號(hào),并顯示各自時(shí)域波形圖。
2.進(jìn)行FFT變換,顯示各自頻譜圖,其中采樣率,頻率、數(shù)據(jù)長(zhǎng)度自選。
3.做出上述三種信號(hào)的均方根圖譜,功率圖譜,以及對(duì)數(shù)均方根圖譜。
4.用IFFT傅立葉反變換恢復(fù)信號(hào),并顯示恢復(fù)的正弦信號(hào)時(shí)域波形圖。
正弦波、矩形波以及白噪聲三種信號(hào)的FFT變換(傅里葉變換)及IFFT變換(傅里葉反變換恢復(fù)信號(hào))。
圖1-1 正弦波
圖1-2 矩形波
圖1-3 白噪聲信號(hào)
二、FFT算法在基于VHDL的FPGA下實(shí)現(xiàn)
1.基于VHDL的FPGA設(shè)計(jì)流程
本小節(jié)以Xilinx公司的FPGA系統(tǒng)開發(fā)為實(shí)例,F(xiàn)PGA的設(shè)計(jì)流程一般包括系統(tǒng)功能設(shè)計(jì)定義、設(shè)計(jì)輸入、功能仿真、邏輯綜合、前仿真、設(shè)計(jì)實(shí)現(xiàn)(包括翻譯、映射、布局布線)、時(shí)序仿真與驗(yàn)證、下載配置與器件編程、測(cè)試驗(yàn)證等幾個(gè)步驟。
本設(shè)計(jì)運(yùn)用ISE和ModelSim與Matlab聯(lián)合仿真的設(shè)計(jì)方法。
ISE的簡(jiǎn)稱為集成綜合的環(huán)境,是Xilinx公司的配套設(shè)計(jì)軟件,這種工具可完成上述FPGA/CPLD的整個(gè)開發(fā)過(guò)程
2.FPGA的基本原理和結(jié)構(gòu)
FPGA即現(xiàn)場(chǎng)可編程門陣列,相對(duì)其他可編程器件具有更高的集成度、更強(qiáng)的邏輯實(shí)現(xiàn)能力和更好的設(shè)計(jì)靈活性。
FPGA的基本結(jié)構(gòu)如圖2-1所示。CLB陣列實(shí)現(xiàn)用戶指定的邏輯功能,它們以陣列的形式分布在FPGA中;IOB為內(nèi)部邏輯與器件封裝引腳之間提供了可編程接口,它通常排列在芯片四周;可編程互連資源分布在CLB的空隙,互連資源可以編程配置在模塊之間傳遞的信號(hào)網(wǎng)絡(luò),用于實(shí)現(xiàn)各個(gè)CLB之間、CLB與IOB之間以及全局信號(hào)與CLB和IOB之間的連接。FPGA利用可編程查找表實(shí)現(xiàn)邏輯塊;程序控制多路復(fù)用器實(shí)現(xiàn)其功能選擇。
圖2-1 FPGA的基本結(jié)構(gòu)
3.FFT 處理器的設(shè)計(jì)
本設(shè)計(jì)用于基于IEEE 802.11a協(xié)議的OFDM系統(tǒng)的OFDM調(diào)制,根據(jù)IEEE802.11a協(xié)議規(guī)定,OFDM調(diào)制采用64點(diǎn)FFT變換,采樣速率20M/s,即采樣周期為50ns,即64點(diǎn)FFT數(shù)據(jù)輸入的時(shí)間為64*50ns=3200ns。
本系統(tǒng)采用的時(shí)域抽取算法中要對(duì)輸入的所有數(shù)據(jù)進(jìn)行倒序以后才開始蝶形運(yùn)算,F(xiàn)FT可以分為數(shù)據(jù)輸入、蝶形運(yùn)算兩個(gè)階段,蝶形運(yùn)算結(jié)束后,將最終結(jié)果存儲(chǔ)到另一個(gè)單獨(dú)的結(jié)果存儲(chǔ)器另行讀取,而為了能對(duì)輸入數(shù)據(jù)實(shí)現(xiàn)連續(xù)的FFT變換,就需要蝶形運(yùn)算的總時(shí)間小于3200ns,這樣就可以用兩個(gè)FFT模塊去輪換做FFT,實(shí)現(xiàn)連續(xù)的FFT處理。如圖2-2所示。
64點(diǎn)的基2的時(shí)域抽取FFT算法總共有6級(jí)蝶形運(yùn)算,每級(jí)32次蝶形運(yùn)算,總共需要32*6=192個(gè)蝶形運(yùn)算,如果采用單蝶形設(shè)計(jì),需要192次蝶形運(yùn)算,蝶形運(yùn)算的極限時(shí)鐘周期為3200ns/192=16.67ns,在本設(shè)計(jì)的蝶形運(yùn)算時(shí)鐘周期采用16ns。
開發(fā)環(huán)境:Quartus II 6.0
選擇FPGA芯片:Altera公司Stratix系列中的EP1S10484C5
語(yǔ)言:VHDL
圖2-2 兩個(gè)FFT模塊
三、MATLAB到VHDL轉(zhuǎn)換工具Simulink
Simulink程序包是MathWorks公司提供的一個(gè)非常有吸引力的高水平設(shè)計(jì)、仿真工具。
1.高效地從Simulink到VHDL的轉(zhuǎn)換工具
目前為止,設(shè)計(jì)者經(jīng)常遇到的最大問(wèn)題是怎樣完成從算法設(shè)計(jì)到物理實(shí)現(xiàn)的轉(zhuǎn)換。在這個(gè)問(wèn)題的研究發(fā)展過(guò)程中,設(shè)計(jì)者首先使用的是一種高層次的設(shè)計(jì)仿真工具,最通常的就是Matlab的Simulink。首先利用Mathworks的Matlab/Simulink完成頂層系統(tǒng)設(shè)計(jì),然后通過(guò)轉(zhuǎn)換工具配置Simulink中的IP核,即將靜態(tài)參數(shù)傳遞給基于VHDL的IP,將Simulink模型文件(.md1)轉(zhuǎn)換成VHDL的RTL表述和工具命令語(yǔ)言(Tcl)腳本,同時(shí)還可進(jìn)行RTL級(jí)的功能仿真;然后通過(guò)SOPC設(shè)計(jì)工具進(jìn)行綜合、適配與時(shí)序仿真;最后形成對(duì)指定FPGA進(jìn)行編程配置的POF和SOF文件,實(shí)現(xiàn)硬件系統(tǒng)的仿真測(cè)試。轉(zhuǎn)換的工作可以描述成以下幾步:
(1)分析并確定Simulink模型。
(2)產(chǎn)生VHDL環(huán)境。
(3)生成對(duì)應(yīng)網(wǎng)表文件或示意圖進(jìn)行布局、布線和硬件的下載測(cè)試。
2.從Simulink到VHDL的自動(dòng)轉(zhuǎn)換
為了簡(jiǎn)單化轉(zhuǎn)換程序,在最初的Simulink模塊中設(shè)定一些約束條件(如圖3-1所示):
(1)運(yùn)行高字節(jié)的信號(hào)或變量;
(2)整個(gè)設(shè)計(jì)只有一種取樣率;
(3)系統(tǒng)只由入口、常數(shù)、端口及總線組成。
這些能夠使相關(guān)的VHDL結(jié)構(gòu)描述比較容易地產(chǎn)生。工具箱的下一部分就可以允許不同的變量類型和生成可應(yīng)用的結(jié)構(gòu)和行為的VHDL。
圖3-1 從Simulink到VHDL轉(zhuǎn)換流程
從MDL(主要數(shù)據(jù)程序)模型到VHDL的轉(zhuǎn)換的初步翻譯由定制的Matlab程序完成。由于對(duì)Simulink描述的分析比較困難,生成的VHDL代碼需要額外的編輯。例如,一些基本模塊如標(biāo)準(zhǔn)邏輯門和雙相位時(shí)鐘等的行為描述被手動(dòng)設(shè)計(jì)成標(biāo)準(zhǔn)模塊庫(kù)中的一部分。
四、Matlab/Simulink到VHDL代碼的轉(zhuǎn)換研究
1.Xilinx System Generator
Matlab中的Simulink是一種對(duì)動(dòng)態(tài)系統(tǒng)進(jìn)行建模、仿真及分析的交互式工具。Xilinx公司新推出的System Generator是一種高性能的設(shè)計(jì)工具,他可以嵌入作為Simulink的一部分運(yùn)行。在Simulink中System Generator打包為Xilinx Blockset,從Simulink的庫(kù)中可以瀏覽。System Generator設(shè)計(jì)流程圖如圖4-1所示。
轉(zhuǎn)換的操作也很簡(jiǎn)單,在System Generator的模型參數(shù)設(shè)置對(duì)話框,選擇一個(gè)輸出路徑并選擇“Create Test bench”,單擊“Generate”就可以生成VHDL代碼和設(shè)計(jì)的testbench變量。當(dāng)選擇生成testbench變量后,Simulink將重新運(yùn)行剛才的仿真。這次由于將經(jīng)歷代碼生成過(guò)程,他將在testbench變量中保存所有輸入和輸出信息供VHDL和post-PAR仿真調(diào)用。
圖4-1 System generator設(shè)計(jì)流程圖
2.基于System Generator的FFT算法的實(shí)現(xiàn)
System Generator for DSP是Xilinx公司開發(fā)的基于Simulink圖形環(huán)境的DSP開發(fā)工具。利用System Generator工具,即使是沒(méi)有多少FPGA設(shè)計(jì)經(jīng)驗(yàn)的設(shè)計(jì)人員也能夠快速開發(fā)出高性能的FPGA來(lái)實(shí)現(xiàn)DSP算法。
FFT算法實(shí)現(xiàn)流程:
根據(jù)FFT算法的原理以及System Generator工具的特點(diǎn),可以在System Generator中完成FFT算法的設(shè)計(jì),然后自動(dòng)生成HDL代碼,通過(guò)ISE軟件生成位流文件下載到FPGA中,從而完成整個(gè)設(shè)計(jì)。
實(shí)驗(yàn)環(huán)境:matlab 2010b、ISE 12.3、System Generator for DSP 12.3
(1)系統(tǒng)模型設(shè)計(jì)
在Simulink環(huán)境中建立一個(gè)mdl模型文件,用圖形方式調(diào)用System Generator和其它的Simulink原圖形模塊,構(gòu)成系統(tǒng)級(jí)或算法級(jí)設(shè)計(jì)框圖如圖4-2所示。
圖4-2 設(shè)計(jì)框圖
Gateway in和Gateway out模塊:用于雙浮點(diǎn)精度數(shù)據(jù)和定點(diǎn)數(shù)據(jù)之間的轉(zhuǎn)換。
System Generator模塊:提供Matlab和硬件設(shè)計(jì)環(huán)境ISE的接口,可在指定目錄中產(chǎn)生可在ISE軟件下實(shí)現(xiàn)的硬件描述語(yǔ)言。
Delay模塊:構(gòu)成一個(gè)時(shí)延環(huán)節(jié),可以配置其延遲時(shí)鐘周期的整數(shù)倍。
FIFO模塊:用于實(shí)現(xiàn)一組FIFO列。
FFT v3_2模塊:為離散傅立葉變換(DFT)提供了一種有效算法。該模塊根據(jù)不同的結(jié)構(gòu)和實(shí)現(xiàn)方式有三種模式可供選擇:1)流水線,Streaming I/O結(jié)構(gòu);2)基4,BurstI/O結(jié)構(gòu);3)基2,Burst I/O結(jié)構(gòu)。
(2)驗(yàn)證與仿真
為了證明模型設(shè)計(jì)的正確性,需要對(duì)模型進(jìn)行測(cè)試試驗(yàn),將FFT模型的仿真結(jié)果與MATLAB的理論計(jì)算結(jié)果進(jìn)行比較,完成對(duì)所建立模型的測(cè)試工作。
1)信號(hào)在MATLAB中的處理
系統(tǒng)的輸入函數(shù)為,點(diǎn)數(shù)N=512,采樣周期為1s,在MATLAB中實(shí)現(xiàn)FFT處理的程序描述如下:
n=512;
n=0:511;
t=1*n;
k=n;
x=sin(2*pi/25*t);
y=fft(x,N);
r=real(y);
i=imag(y);
subplot(1,1,1);
plot(k,r);
subplot(1,1,1);
plot(k,i);
通過(guò)以上程序得到正弦信號(hào)通過(guò)512點(diǎn)FFT處理后的MATLAB理論計(jì)算結(jié)果如圖4-3所示。
a)實(shí)部結(jié)果 b)虛部結(jié)果
圖4-3 MATLAB理論計(jì)算結(jié)果
2)信號(hào)在FFT模型中的處理
在仿真前先對(duì)Gateway in模塊和FFT v3_2模塊進(jìn)行一下參數(shù)配置:
Gateway in模塊
Output type:Signed
Number of bits:16
Binary point:15
Quantization:Round
Overflow:Saturate
Sample period:1
FFT v3_2模塊:
Impliment:Pipelined Streaming I/O
Number of sample points:512
Output ordering:Natural order
Scaling:Unscaled
Rounding mode:Truncation
Phase factor bit width:8
將參數(shù)配置好后在Simulink的FFT模型的輸入端輸入正弦信號(hào),然后選擇simulink/start,待仿真結(jié)束后查看scope模塊所顯示的仿真結(jié)果如圖4-4所示。
a)實(shí)部結(jié)果 b)虛部結(jié)果
圖4-4 FFT模型仿真結(jié)果
比較圖5-3和圖5-4的波形,可以看出FFT模型處理后的結(jié)果和Matlab的理論計(jì)算結(jié)果的波形基本一致,得到的都是頻率單一的實(shí)部和虛部。
需要說(shuō)明的是:在圖5-5中實(shí)部和虛部的輸出都是從橫坐標(biāo)的1118點(diǎn)開始的,這是因?yàn)镕FT模型中的FFT v3_2模塊參數(shù)選擇的是Pipelined Streaming I/O模式,在該模式下輸出需要延遲一段處理時(shí)間然后才能連續(xù)輸出,這里橫坐標(biāo)的1118點(diǎn)實(shí)際上就是輸出的起始點(diǎn),也就是輸出的的k=0的位置。
3.自動(dòng)代碼生成
通過(guò)上面的測(cè)試實(shí)驗(yàn),證明所建立的FFT模型是滿足要求的,下面就需要將FFT模型轉(zhuǎn)換成HDL代碼。雙擊打開System Generator模塊的系統(tǒng)設(shè)定對(duì)話框,在該對(duì)話框中設(shè)定好目標(biāo)器件的型號(hào)(Virtex6 xc6vsx315t-3ff1156)、綜合工具(XST)、產(chǎn)生語(yǔ)言種類(VHDL)等參數(shù)(如圖4-5所示),并且選中“Createtest bench”選項(xiàng),之后啟動(dòng)System Generator模塊,將在指定目錄中產(chǎn)生可在ISE軟件下實(shí)現(xiàn)的硬件描述語(yǔ)言,并且自動(dòng)生成設(shè)計(jì)的測(cè)試代碼。
圖4-5 System generator的參數(shù)設(shè)置
Gateway in模塊的參數(shù)設(shè)置如圖4-6所示:
圖4-6 Gateway in模塊的參數(shù)設(shè)置
五、總結(jié)
本文的研究工作主要是以下幾個(gè)部分:
1.介紹了傅里葉變換及其在頻譜分析中的應(yīng)用;
2.研究了利用MATLAB實(shí)現(xiàn)譜分析的傅里葉變換,其中包括基于MATLAB的連續(xù)信號(hào)與離散信號(hào)的頻域分析;另外,本文實(shí)現(xiàn)了基于MATLAB的快速傅里葉變換(FFT)以及信號(hào)的采樣——重構(gòu)操作;
3.探討FPGA的結(jié)構(gòu),其中主要涉及基于VHDL的FPGA設(shè)計(jì)流程;
4.討論了由Matlab生成VHDL代碼的原理,并介紹了利用System Generator及DSP Builder將Simulink模型轉(zhuǎn)換為VHDL代碼的方法。
下一步的研究工作在于對(duì)轉(zhuǎn)換研究進(jìn)行細(xì)化和拓展,其中細(xì)化部分集中于調(diào)試優(yōu)化,而拓展部分在于各種功能器件的轉(zhuǎn)換實(shí)現(xiàn)。
參考文獻(xiàn):
[1]石海,毛哲.基于DSP實(shí)現(xiàn)RFID實(shí)時(shí)信號(hào)頻譜分析[J].武漢工業(yè)學(xué)院學(xué)報(bào),2008,9(3):69-72.
[2]Agilent Technologies Inc,Agilent N9340A Handheld Spectrum Analyzer TechnicalOverview.
[3]劉樹堂.2006.數(shù)字信號(hào)處理——使用MATLAB.西安:西安交通大學(xué)出版社,252-255.
[4]胡廣書著.數(shù)字信號(hào)處理——理論、算法與實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2003,2:93-210.
[5]Joyce Van de Vegte著.侯正信,王國(guó)安等譯.數(shù)字信號(hào)處理基礎(chǔ)[M].北京:電子工業(yè)出版社,2004.249-255,328-361.
[6]程佩青著.數(shù)字信號(hào)處理教程[M].北京:清華大學(xué)出版社,2001,2:117-122,138-141.
[7]吳繼華,王誠(chéng)編著.Altera FPGA/CPLD設(shè)計(jì)(基礎(chǔ)篇)[M].北京:人民郵電出版社,2005:3-7.