畢業(yè)論文——基于FPGA的FFT窗函數(shù)計(jì)算
《畢業(yè)論文——基于FPGA的FFT窗函數(shù)計(jì)算》由會(huì)員分享,可在線閱讀,更多相關(guān)《畢業(yè)論文——基于FPGA的FFT窗函數(shù)計(jì)算(60頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、本科畢業(yè)設(shè)計(jì)(論文) 基于FPGA的FFT窗函數(shù)計(jì)算學(xué) 院 物理與光電工程學(xué)院專 業(yè) 光信息科學(xué)與技術(shù)年級班別 學(xué) 號 學(xué)生姓名 xxx 指導(dǎo)教師 年 月基于FPGA的FFT窗函數(shù)計(jì)算xxx物理與光電工程學(xué)院54摘 要在實(shí)際工程設(shè)計(jì)中常常需要對數(shù)字信號進(jìn)行傅里葉變換,而傅里葉變換的定義是對無限長的連續(xù)時(shí)域信號所進(jìn)行的頻域分析。由于計(jì)算機(jī)無法對無限長的時(shí)間信號進(jìn)行處理和計(jì)算,因而需要對輸入系統(tǒng)的信號進(jìn)行截短。但是,信號的截短操作會(huì)導(dǎo)致頻譜能量的泄露,從而造成信號的不完整性分析。雖然理論上頻譜能量泄露是不能完全消除的,但通過本課題提出的窗函數(shù)法可以對它們的影響進(jìn)行抑制。本課題運(yùn)用高性能FPGA硬件
2、加速,結(jié)合MATLAB輔助分析,對海明窗、矩形窗、漢寧窗和布萊克曼窗的特性進(jìn)行剖析以及研究它們對設(shè)計(jì)的影響。在用FPGA設(shè)計(jì)窗函數(shù)的過程中運(yùn)用合理的方案來減少設(shè)計(jì)的資源以及提高設(shè)計(jì)的速度。測試結(jié)果表明,采用窗函數(shù)法可以很好地減少頻譜能量的泄露。最后運(yùn)用AXI4協(xié)議將設(shè)計(jì)接口封裝為AXI4-Lite接口和AXI4-Stream接口,并用主控器MicroBlase進(jìn)行控制。關(guān)鍵詞:頻譜能量泄露,窗函數(shù),現(xiàn)場可編程門陣列,矩陣實(shí)驗(yàn)室,AXI4協(xié)議AbstractIn actual engineering design often need to the Fourier transform of di
3、gital signal, and the Fourier transform is defined as the infinite long continuous time domain to frequency domain signal analysis. As the computer cant infinitely long time signal processing and calculation, so it is necessary to the system input signal was truncated. However, shortened operation w
4、ill lead to frequency spectrum of signal energy leak, causing the signal integrity analysis. Although spectrum energy leakage cannot be totally eliminated, but through this topic proposed window function method can affects their suppression. This topic using high-performance FPGA hardware accelerati
5、on, auxiliary analysis combined with MATLAB, the hamming window, rectangular window and hanning window and analyzes the characteristics of blackman window and study their impact on design. In the process of using FPGA to design a window function using rational scheme to reduce the design resources,
6、and improve the speed of the design. Test results show that the window function method is a good way to reduce the frequency spectrum energy leakage. Finally using the AXI4 protocol will design interface encapsulation for AXI4 - Lite interface and AXI4 - Stream interface, and the host controller Mic
7、roBlase control.Key words:Spectrum Energy Leakage, Window Function, FPGA, MATLAB, AXI4 Protocal目 錄1 緒論11.1 課題背景及目的11.2 課題研究內(nèi)容12 基礎(chǔ)知識(shí)22.1 Verilog HDL22.2 FPGA22.3 MATLAB32.4 AXI4協(xié)議33 窗函數(shù)83.1 基本概念83.2 窗函數(shù)幅頻特性分析93.2.1 矩形窗函數(shù)93.2.2 漢寧窗函數(shù)103.2.3 海明窗函數(shù)113.2.4 布萊克曼窗函數(shù)113.3 窗函數(shù)選擇124 CORDIC算法134.1 圓周旋轉(zhuǎn)模式135 系
8、統(tǒng)設(shè)計(jì)165.1 系統(tǒng)概述165.2 角度生成模塊195.2.1 設(shè)計(jì)精度分析195.2.2 設(shè)計(jì)實(shí)現(xiàn)205.3 CORDIC算法模塊225.3.1 設(shè)計(jì)精度分析225.3.2 設(shè)計(jì)實(shí)現(xiàn)235.4 余弦值輸出模塊275.5 窗函數(shù)系數(shù)生成模塊295.6 窗函數(shù)結(jié)果計(jì)算模塊305.7 數(shù)據(jù)與窗函數(shù)相乘模塊315.8 系統(tǒng)的性能分析335.9 AXI4接口封裝346 系統(tǒng)優(yōu)化356.1 資源優(yōu)化356.1.1 資源共享356.1.2 位寬選擇386.1.3 迭代次數(shù)選擇386.2 速度優(yōu)化38總結(jié)40參考文獻(xiàn)41致謝42附錄A CORDIC算法模塊的設(shè)計(jì)實(shí)現(xiàn)43縮略語對照表481 緒論1.1 課題
9、背景及目的在現(xiàn)實(shí)生活中,我們經(jīng)常需要用示波器、頻譜分析儀等對信號進(jìn)行頻譜分析,然后根據(jù)其頻譜特性設(shè)計(jì)一個(gè)系統(tǒng)從信號中提取我們感興趣的信號或去除沒用的信號。隨著傅里葉變換算法的提出,使得我們對信號的頻譜分析變得更加簡單。傅里葉變換的定義是對連續(xù)信號進(jìn)行的,在理論上具有無限的完美性。但在實(shí)際工程中FFT(快速傅里葉變換)只能對有限個(gè)點(diǎn)的離散信號進(jìn)行計(jì)算,就是說,我們要從連續(xù)信號中截取一段有效的信號來進(jìn)行處理。信號的截短操作會(huì)導(dǎo)致頻譜能量的泄露,從而造成對信號的頻譜分析不正確1-4。頻譜能量泄露的表現(xiàn)形式就是測量頻譜在真實(shí)頻譜的兩側(cè)頻帶上擴(kuò)展開來的現(xiàn)象,即有一些幅值較小的假譜出現(xiàn)在真實(shí)頻譜的兩側(cè)。造
10、成頻譜能量泄露的一個(gè)很重要原因是截取的時(shí)域周期信號不是周期的整數(shù)倍5。理論上,頻譜能量泄露是不能完全消除的,但我們通過本課題提出的窗函數(shù)法可以抑制它們對設(shè)計(jì)的影響。窗函數(shù)的類型很多,對信號加不同的窗函數(shù)處理后,信號頻譜能量的泄露可以大大減少,但減少的程度是不一樣的。因此本課題將針對頻譜能量泄露的改善進(jìn)行窗函數(shù)的分析、選擇和設(shè)計(jì)。1.2 課題研究內(nèi)容本課題主要利用MATLAB工具研究不同窗函數(shù)的特性以及它們對頻譜能量泄露的抑制效果,然后根據(jù)輸入信號的性質(zhì)和特征來選擇合適的窗函數(shù)。接著運(yùn)用高性能FPGA硬件加速,采用Verilog HDL硬件描述語言在Xilinx ISE軟件平臺(tái)上對矩形窗、海明窗
11、、漢寧窗和布萊克曼窗四個(gè)窗函數(shù)進(jìn)行設(shè)計(jì)并利用modelsim仿真工具對其進(jìn)行仿真驗(yàn)證。最后,使用AXI4協(xié)議將設(shè)計(jì)接口封裝為AXI4-Lite接口和AXI4-Stream接口,并由主控器MicroBlase進(jìn)行控制。2 基礎(chǔ)知識(shí)本章將對這次課題所涉及到的一些基本概念進(jìn)行介紹,其中包括Verilog HDL、FPGA、MATLAB以及AXI4協(xié)議。2.1 Verilog HDLVerilog HDL(簡稱Verilog)是一種以文本的方式描述數(shù)字電路結(jié)構(gòu)和行為的硬件描述語言6-7。自從有了Verilog,對數(shù)字系統(tǒng)的設(shè)計(jì)就簡單容易多了,對數(shù)字電路的描述可以從算法級、寄存器傳輸級、門級和開關(guān)級四個(gè)
12、抽象層次上進(jìn)行。下面是四個(gè)抽象層次的特點(diǎn):(1) 算法級:只需關(guān)注設(shè)計(jì)實(shí)現(xiàn)的算法,而硬件實(shí)現(xiàn)方面可不必關(guān)心。(2) 寄存器傳輸級:只需關(guān)心數(shù)據(jù)在寄存器間的流動(dòng)以及處理數(shù)據(jù)的方式。(3) 門級:利用邏輯門電路對功能模塊進(jìn)行設(shè)計(jì)。(4) 開關(guān)級:利用開關(guān)、存儲(chǔ)節(jié)點(diǎn)對功能模塊進(jìn)行設(shè)計(jì)。Verilog還具有以下的優(yōu)點(diǎn):(1) Verilog的語法很像C語言,只要有C語言基礎(chǔ)就可以容易入門。(2) 使用Verilog對數(shù)字電路進(jìn)行設(shè)計(jì)與電路工藝無關(guān)。(3) 使用Verilog對設(shè)計(jì)進(jìn)行功能驗(yàn)證,可在設(shè)計(jì)前期發(fā)現(xiàn)各種漏洞并進(jìn)行修復(fù),從而縮短了設(shè)計(jì)周期。(4) Verilog的使用令電路的升級更加容易。此外
13、,Verilog還具有一個(gè)特點(diǎn)就是對數(shù)字電路的設(shè)計(jì)同時(shí)支持自底向上和自頂向下兩種設(shè)計(jì)方法。2.2 FPGAFPGA(即現(xiàn)場可編程門陣列)是在PAL、GAL、CPLD等基礎(chǔ)上發(fā)展起來的,作為ASIC領(lǐng)域中的一種半定制電路,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)8-9。FPGA內(nèi)部有豐富的邏輯資源,包括CLB塊、塊RAM、DCM、乘法器硬核、可編程I/O塊等。利用FPGA進(jìn)行數(shù)字電路的設(shè)計(jì)具有以下優(yōu)點(diǎn):(1) 大多數(shù)FPGA基于SRAM工藝,理論上可以對其進(jìn)行無次數(shù)擦除并重新設(shè)計(jì)。(2) 由于FPGA豐富的邏輯資源,因此可以設(shè)計(jì)非常復(fù)雜的組合或時(shí)序邏輯電路。(3) 利用F
14、PGA進(jìn)行設(shè)計(jì)可以大大縮短設(shè)計(jì)周期。隨著技術(shù)的不斷進(jìn)步,F(xiàn)PGA的優(yōu)勢越來越突出,也越來越多的工程師對它的青睞度不斷增加。同時(shí),F(xiàn)PGA技術(shù)也正在快速發(fā)展著,總體來說具有以下幾個(gè)趨勢:(1) 隨著器件工藝越來越小,F(xiàn)PGA正向著大容量、低功耗的方向發(fā)展。(2) FPGA向著SoC方向發(fā)展。(3) FPGA內(nèi)部集成ASIC,從而克服體積大、功耗大、能力有限的缺點(diǎn)。(4) FPGA可動(dòng)態(tài)重構(gòu)。2.3 MATLABMATLAB是一款集數(shù)值計(jì)算、建模仿真、數(shù)據(jù)可視化等于一身的超強(qiáng)軟件10。由于它的強(qiáng)大功能,MATLAB被運(yùn)用于廣泛的領(lǐng)域中,包括工業(yè)設(shè)計(jì)、通訊、圖像處理、工程計(jì)算等等。MATLAB具有以
15、下幾個(gè)優(yōu)點(diǎn):(1) MATLAB友好的界面使用戶更加容易掌握軟件的使用方法。(2) MATLAB是一門簡單易用的語言,可以很快入門MATLAB并進(jìn)行程序設(shè)計(jì)。(3) MATLAB擁有強(qiáng)大的數(shù)據(jù)處理能力以及出色的圖形處理能力。(4) MATLAB中集成了各種工具箱,使用戶開發(fā)更加簡單。善于運(yùn)用MATLAB將對我們的設(shè)計(jì)和分析有非常大的幫助。2.4 AXI4協(xié)議AXI4協(xié)議是Xilinx公司和ARM公司共同為下一代FPGA定制IP的一種總線協(xié)議11。AXI4協(xié)議中具有五個(gè)獨(dú)立的通道,并且都是單向通道結(jié)構(gòu)。此外,AXI4協(xié)議還支持猝發(fā)操作,提高了數(shù)據(jù)吞吐量。圖2.1和圖2.2分別為讀通道和寫通道的結(jié)
16、構(gòu)示意圖,其中包含地址、數(shù)據(jù)和寫響應(yīng)五個(gè)通道。地址通道用來傳輸?shù)刂泛涂刂菩盘枺粩?shù)據(jù)通道用來傳輸數(shù)據(jù);寫響應(yīng)通道用來指示寫數(shù)據(jù)完成。五個(gè)通道信號的傳輸需要依賴于握手信號VALID和READY。通過VALID信號來指示信息發(fā)送源的數(shù)據(jù)和控制信號何時(shí)有效;通過READY信號來指示信息接收源何時(shí)可以接收數(shù)據(jù)。此外,還有LAST信號用來指示最后一個(gè)數(shù)據(jù)的傳輸。圖2.1 讀通道結(jié)構(gòu)圖2.2 寫通道結(jié)構(gòu)AXI4協(xié)議中有三種突發(fā)讀寫時(shí)序,下面將一一介紹。首先是突發(fā)式讀,如圖2.3所示。當(dāng)?shù)刂吠ǖ郎铣霈F(xiàn)有效地址后,讀數(shù)據(jù)通道上將出現(xiàn)準(zhǔn)備傳輸?shù)臄?shù)據(jù)。當(dāng)RVALID信號和RREADY信號為高電平時(shí),每個(gè)時(shí)鐘讀取一次
17、數(shù)據(jù)。另外,當(dāng)RLAST信號為高電平時(shí),表示傳輸最后一個(gè)數(shù)據(jù),即代表一次突發(fā)式讀即將完成。圖2.3 突發(fā)式讀波形圖其次是重疊突發(fā)式讀,如圖2.4所示。當(dāng)完成一次突發(fā)式讀時(shí),才能接著處理再一次的突發(fā)式讀。波形圖中主機(jī)為從機(jī)傳輸了兩個(gè)地址,只有完成第一次突發(fā)式讀后才能處理第二次突發(fā)式讀。圖2.4 重疊突發(fā)式讀波形圖最后是突發(fā)式寫,如圖2.5所示。如果地址通道上出現(xiàn)有效地址,那么當(dāng)WVALID信號和WREADY信號同時(shí)為高電平時(shí),每個(gè)時(shí)鐘寫一次數(shù)據(jù)。另外,當(dāng)WLAST信號為高電平時(shí),表示傳輸最后一個(gè)數(shù)據(jù)。當(dāng)一次突發(fā)式寫完成時(shí),寫響應(yīng)信號BVALID將拉高。圖2.5 突發(fā)式寫波形圖由圖2.3圖2.5可
18、以看出,只有當(dāng)信號VALID和READY同時(shí)為高電平時(shí)才進(jìn)行數(shù)據(jù)的傳輸。但是信號VALID和READY出現(xiàn)高電平的情況有三種。圖2.6為VALID信號先于READY信號為高電平,即主機(jī)發(fā)送有效數(shù)據(jù)并等待從機(jī)可以接收數(shù)據(jù)為止。圖2.7為READY信號先于VALID信號為高電平,即從機(jī)已經(jīng)準(zhǔn)備好接收數(shù)據(jù)但等待主機(jī)發(fā)送有效的數(shù)據(jù)為止。圖2.8為VALID信號和READY信號同時(shí)為高電平,即主機(jī)發(fā)送有效數(shù)據(jù)的同時(shí)從機(jī)可以接收數(shù)據(jù)。數(shù)據(jù)的傳輸發(fā)生在圖中的箭頭所指向的時(shí)鐘上升沿處。圖2.6 VALID信號早于READY信號圖2.7 READY信號早于VALID信號圖2.8 VALID信號與READY信號同
19、時(shí)最后介紹一下讀寫事務(wù)握手信號的依賴關(guān)系。圖2.9為讀事務(wù)握手信號依賴關(guān)系,它有以下兩點(diǎn)關(guān)系:(1) ARVALID信號可以先于或后于ARREADY信號有效。(2) 只有當(dāng)ARVALID和ARREADY信號同時(shí)有效時(shí),RVALID信號才能開始有效,才能開始傳輸數(shù)據(jù)。圖2.9 讀事務(wù)握手信號依賴關(guān)系圖2.10為寫事務(wù)握手信號依賴關(guān)系,它有以下三點(diǎn)關(guān)系:(1) AWVALID信號或WVLAID信號有效的同時(shí)或之后,AWREADY信號或WREADY信號才能有效。(2) 只要AWVALID和WVALID信號兩者有一個(gè)有效后,AWREADY信號才能有效。(3) 只要AWVALID和WVALID信號兩者有
20、一個(gè)有效后,WREADY信號才能有效。圖2.10 寫事務(wù)握手信號依賴關(guān)系3 窗函數(shù)3.1 基本概念信號的截短操作會(huì)導(dǎo)致頻譜能量的泄露,為了減少頻譜能量的泄露,可以為信號加上窗函數(shù)。所謂窗函數(shù)就是一種除給定區(qū)間之外均為零的實(shí)函數(shù),如圖3.1所示。使用窗函數(shù)使截短的信號在其邊界上收斂,或通過窗函數(shù)抑制DFT的等效濾波器振幅特性的旁瓣的方法來減少信號頻譜能量的泄露。圖3.2和圖3.3分別為信號加窗之前和加窗之后的頻譜分析。通過對比它們的頻譜圖,可以發(fā)現(xiàn)加窗之前有嚴(yán)重的頻譜泄露,加窗之后頻譜泄露改善。這就是本課題所要達(dá)到的目的。圖3.1 窗函數(shù)示意圖圖3.2 原始信號頻譜分析圖3.3 加窗信號頻譜分析
21、3.2 窗函數(shù)幅頻特性分析本課題需要設(shè)計(jì)的窗函數(shù)包括海明窗、矩形窗、漢寧窗和布萊克曼窗。接下來將對這四個(gè)窗函數(shù)的DFT等效濾波器的幅頻特性進(jìn)行分析,從而確定這四個(gè)窗函數(shù)改善頻譜能量泄露的性能。3.2.1 矩形窗函數(shù)矩形窗的時(shí)域表達(dá)式為: (31)其頻域特性為: (32)矩形窗的幅頻特性如圖3.4所示(矩形窗長度為40,其他窗函數(shù)長度一樣)。加矩形窗實(shí)際上就是不加窗。矩形窗的主瓣能量相對集中,但是旁瓣幅值較高,其中最大的旁瓣幅值要比主瓣幅值低13dB。因此使用矩形窗容易帶來高頻干擾和頻譜泄露。圖3.4 矩形窗及其幅頻特性3.2.2 漢寧窗函數(shù)漢寧窗的時(shí)域表達(dá)式為: (33)其頻域特性為: (34
22、)漢寧窗的幅頻特性如圖3.5所示:圖3.5 漢寧窗及其幅頻特性漢寧窗的主瓣寬度比矩形窗要寬一些,旁瓣寬度比矩形窗要小很多,其中最大的旁瓣幅值要比主瓣幅值低31dB。從頻譜能量泄露減少的角度出發(fā),漢寧窗要比矩形窗好。3.2.3 海明窗函數(shù)海明窗的時(shí)域表達(dá)式為: (35)其頻域特性為: (36)海明窗的頻譜特性如圖3.6所示。圖3.6 海明窗及其幅頻特性海明窗的主瓣寬度跟漢寧窗的一樣,主瓣加寬旁瓣減少,其中最大的旁瓣幅值要比主瓣幅值低42dB,比漢寧窗還要小。但海明窗旁瓣的衰減速度要比漢寧窗慢一些。3.2.4 布萊克曼窗函數(shù)布萊克曼窗的時(shí)域表達(dá)式為: (37)其頻域特性為: (38)布萊克曼窗的幅
23、頻特性如圖3.7所示:圖3.7 布萊克曼窗及其幅頻特性與其他三個(gè)窗相比較,布萊克曼窗的主瓣寬度是最大的,但其最大的旁瓣幅值是最小的,比主瓣幅值低58dB。同時(shí)布萊克曼窗的旁瓣衰減速度也很快。3.3 窗函數(shù)選擇窗函數(shù)頻譜的兩側(cè)旁瓣決定了頻譜能量泄露的程度,于是,為了減少頻譜能量的泄露,我們對窗函數(shù)的選擇應(yīng)遵循兩個(gè)原則:(1) 選擇能量主要集中在主瓣的窗函數(shù)10,12-13。(2) 選擇旁瓣幅值小、衰減速度快的窗函數(shù)。但很多時(shí)候這兩個(gè)條件是不能同時(shí)滿足的,因此我們要根據(jù)信號的特性折中選擇窗函數(shù)。例如,當(dāng)對讀取信號頻率精度要求高而幅值精度要求不高時(shí),可用矩形窗;當(dāng)分析帶有較強(qiáng)干擾噪聲的窄帶信號或未知
24、信號時(shí),可用漢寧窗;當(dāng)對讀取信號幅值精度要求高而頻率精度要求不高時(shí),可用布萊克曼窗。窗函數(shù)的適當(dāng)選擇對信號的正確分析有著非常大的幫助。4 CORDIC算法CORDIC(Coordinate Rotation Digital Computer)算法是坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算機(jī)算法的簡稱14-15。它利用逼近實(shí)值的方法將一些復(fù)雜的算法(如開方、三角函數(shù)等)轉(zhuǎn)換成簡單的算法(移位相加減)。CORDIC算法包含圓周、線性和雙曲三種系統(tǒng),每種系統(tǒng)包括旋轉(zhuǎn)和向量兩種模式。也就是說,CORDIC算法總共有六種算法模式。而本課題將采用CORDIC算法中的圓周旋轉(zhuǎn)模式來計(jì)算窗函數(shù)中的余弦函數(shù)。下面對該模式進(jìn)行介紹。4.
25、1 圓周旋轉(zhuǎn)模式在直角坐標(biāo)系中,將向量逆時(shí)針旋轉(zhuǎn)角得到向量,如圖4.1所示:圖4.1 CORDIC算法圓周旋轉(zhuǎn)模式向量旋轉(zhuǎn)圖由圖4.1可得方程組如式(4-1)所示: (41)提取因數(shù),可將式(4-1)轉(zhuǎn)化為式(4-2): (42)去除,可得到偽旋轉(zhuǎn)方程式(4-3): (43)由于,故模值會(huì)增大倍。但是,旋轉(zhuǎn)的角度是正確的。假設(shè)為第次的旋轉(zhuǎn)角度,則第次偽旋轉(zhuǎn)方程組如式(4-4)所示: (44)現(xiàn)在對旋轉(zhuǎn)角度進(jìn)行限制,使正切函數(shù)可由代替,這樣復(fù)雜的三角函數(shù)計(jì)算就變成了簡單的移位運(yùn)算,如式(4-5)所示: (45)表4.1顯示的是CORDIC算法中每次迭代所對應(yīng)的旋轉(zhuǎn)角度:表4.1 CORDIC算法
26、中每次迭代所對應(yīng)的旋轉(zhuǎn)角度i0110.520.2530.12540.0625旋轉(zhuǎn)角度的總和為,其中。當(dāng)為+1時(shí),代表向量逆時(shí)針旋轉(zhuǎn);當(dāng)為-1時(shí),代表向量順時(shí)針旋轉(zhuǎn)。而旋轉(zhuǎn)的方向會(huì)影響累積角度的大小。只要在的范圍內(nèi)的任意角度都可以旋轉(zhuǎn),滿足所有角度的總和為。如果角度不在這個(gè)范圍內(nèi),則可以通過三角恒等式變換將角度轉(zhuǎn)換到這個(gè)范圍。如果再增加一個(gè)追蹤角度累加結(jié)果的方程式可得式(4-6): (46)其中,是一個(gè)判決算子,即,用來確定旋轉(zhuǎn)的方向。令,其中為比例因子,表征每次旋轉(zhuǎn)時(shí)向量模長發(fā)生的變化。若總的旋轉(zhuǎn)次數(shù)為n,則總的比例因子如式(4-7)所示。 (47)當(dāng)時(shí),。在圓周旋轉(zhuǎn)模式中,經(jīng)過n次迭代后得到
27、式(4-8): (48)當(dāng)時(shí),。通過設(shè)置和就可以計(jì)算三角函數(shù)和了。5 系統(tǒng)設(shè)計(jì)5.1 系統(tǒng)概述本課題“基于FPGA的FFT窗函數(shù)計(jì)算”,以MATLAB為輔助軟件,以FPGA為設(shè)計(jì)平臺(tái),設(shè)計(jì)了海明窗、矩形窗、漢寧窗和布萊克曼窗四個(gè)窗函數(shù)。用FPGA實(shí)現(xiàn)本課題的設(shè)計(jì),主要實(shí)現(xiàn)基于CORDIC算法的點(diǎn)數(shù)為256點(diǎn)到16M點(diǎn)動(dòng)態(tài)可調(diào)、窗函數(shù)類型可選的窗函數(shù)控制器。本設(shè)計(jì)頂層模塊框圖如圖5.1所示,圖5.2所示為縮略的頂層模塊內(nèi)部結(jié)構(gòu),表5.1為頂層模塊的端口定義。圖5.1 頂層模塊框圖圖5.2 頂層模塊內(nèi)部結(jié)構(gòu)表5.1 頂層模塊的端口信號名列表信號名信號方向位寬含義sys_clkinput1系統(tǒng)時(shí)鐘r
28、st_ninput1全局復(fù)位信號,低電平有效point_numinput24信號長度輸入,point_num范圍為28-1224-1theta_factorinput25角度因子輸入,由225/point_num決定window_modelinput2窗函數(shù)類型選擇變量dininput8無符號整數(shù)輸入din_eninput1輸入數(shù)據(jù)使能信號,高電平有效ndinput1從設(shè)備是否準(zhǔn)備好接收數(shù)據(jù)標(biāo)志位,高電平有效dout_by_windowoutput16無符號數(shù)輸出,數(shù)據(jù)格式為8位整數(shù),8位小數(shù)dout_by_window_enoutput1輸出數(shù)據(jù)使能信號,高電平有效rdyoutput1主設(shè)備
29、是否準(zhǔn)備好接收數(shù)據(jù)標(biāo)志位,高電平有效本課題“基于FPGA的FFT窗函數(shù)計(jì)算”需要實(shí)現(xiàn)的矩形窗、海明窗、漢寧窗和布萊克曼窗四個(gè)窗函數(shù)的通用公式為,不同的窗函數(shù)對應(yīng)不同的系數(shù)A、B、C。為了計(jì)算窗函數(shù),首先需要計(jì)算余弦函數(shù)中的相位,然后是求解相位的余弦值,再是窗函數(shù)結(jié)果的計(jì)算,最后還要計(jì)算窗函數(shù)結(jié)果與輸入的8位無符號整數(shù)的乘積。一個(gè)好的設(shè)計(jì),需要根據(jù)設(shè)計(jì)的功能進(jìn)行模塊間的劃分,這樣不僅可以做到資源利用率的提高,還可以提升設(shè)計(jì)的速度。為了使本課題的設(shè)計(jì)更加合理,將本設(shè)計(jì)進(jìn)行了功能上的劃分,各模塊在Xilinx ISE軟件中的組織架構(gòu)如圖5.3所示,表5.2所示為各模塊的含義。圖5.3 本設(shè)計(jì)在ISE
30、中的組織架構(gòu)表5.2 系統(tǒng)功能模塊劃分序號模塊名含義1windows_func頂層模塊,用來例化各功能模塊2u_theta_generator相位生成模塊,產(chǎn)生角度和3u_delay_tap延時(shí)模塊,對相關(guān)信號進(jìn)行延時(shí)4u_cordic_topCORDIC算法頂層模塊,完成余弦值的計(jì)算5u_window_param窗函數(shù)系數(shù)生成模塊6u_window_calc窗函數(shù)結(jié)果計(jì)算模塊7u_window_mult_din數(shù)據(jù)與窗函數(shù)相乘模塊8u_mult_theta乘法器模塊,計(jì)算角度和9u_cordic_1計(jì)算的余弦絕對值10u_cordic_2計(jì)算的余弦絕對值11u_cos_result計(jì)算和的余
31、弦值12u_mult_param_cos1窗函數(shù)系數(shù)與的余弦值相乘13u_mult_param_cos2窗函數(shù)系數(shù)與的余弦值相乘14u_mult_window_filter數(shù)據(jù)與窗函數(shù)相乘模塊另外,在實(shí)際工程中,精度對于我們的設(shè)計(jì)來說是至關(guān)重要的。一個(gè)不符合精度要求的設(shè)計(jì)是不能拿出來用的。那么什么是精度?精度就是測量值與真實(shí)值的接近程度。在數(shù)字化的世界里,數(shù)值只能以有限位寬的二進(jìn)制數(shù)表示,與真實(shí)值之間存在偏差。在數(shù)字信號處理電路中,經(jīng)常需要進(jìn)行算術(shù)運(yùn)算,隨著每一次的計(jì)算,其結(jié)果的位寬會(huì)越來越大。如果不進(jìn)行合理的舍位處理,最終結(jié)果的位寬可能是非常大的,自然設(shè)計(jì)會(huì)消耗更多的資源,但是舍位處理會(huì)引入
32、誤差。為了使設(shè)計(jì)的精度滿足要求又不浪費(fèi)多余的資源,我們可以為設(shè)計(jì)選擇合適的運(yùn)算結(jié)構(gòu)同時(shí)采用合適的位寬。當(dāng)然位寬越大精度越高,但是設(shè)計(jì)要占用更多的資源。為了讓設(shè)計(jì)更加地優(yōu)化,我們要對精度和資源進(jìn)行一個(gè)權(quán)衡。后面會(huì)對本課題的設(shè)計(jì)精度進(jìn)行分析,以了解最終結(jié)果的誤差來源。接下來將詳細(xì)介紹各功能模塊在設(shè)計(jì)中的地位及實(shí)現(xiàn)的具體功能。有一點(diǎn)是需要注意的,本設(shè)計(jì)所提到的相位應(yīng)理解為的系數(shù),如所對應(yīng)的系數(shù)為,但為了方便理解,還是給出。5.2 角度生成模塊5.2.1 設(shè)計(jì)精度分析我們要提前知道的是本設(shè)計(jì)中CORDIC算法模塊的輸入相位范圍為,24位二進(jìn)制位寬表示(詳見CORDIC算法模塊),其中最高位為符號位。窗
33、函數(shù)表達(dá)式中的余弦和的最大角度分別為和,得分別用26位和27位的二進(jìn)制位寬表示,其中最高位為符號位,始終為0。為了能夠進(jìn)行無符號運(yùn)算,只要利用三角恒等變換關(guān)系把輸入相位限制在之間,然后輸入CORDIC算法模塊,但是其輸出的結(jié)果還只是余弦函數(shù)的絕對值,還要根據(jù)其相位所在的區(qū)間給予它正值或負(fù)值。這樣,和只要分別用25位和26位的二進(jìn)制位寬表示就可以了。確定了這種關(guān)系后,現(xiàn)在就可以開始對角度生成模塊精度進(jìn)行分析。本課題“基于FPGA的FFT窗函數(shù)計(jì)算”中需要進(jìn)行余弦函數(shù)和的計(jì)算,在進(jìn)行余弦函數(shù)計(jì)算之前要對相位和進(jìn)行計(jì)算,其中N為256點(diǎn)到16M點(diǎn)動(dòng)態(tài)可調(diào),n為0N-1。仔細(xì)觀察角度和,我們可以提取和
34、兩個(gè)參數(shù),這兩個(gè)參數(shù)分別稱為相位因子和信號長度,由模塊外部的AXI4_Lite接口提供。這樣做的目的一方面可以節(jié)省大量由于除法器和其他一些邏輯電路所消耗的那一部分的邏輯資源,另一方面由MicroBlase主控器為設(shè)計(jì)提供所需的動(dòng)態(tài)可調(diào)的參數(shù)很方便。對于角度生成器,其位寬選取理由為:(1) 由于信號長度N為256點(diǎn)到16M點(diǎn)動(dòng)態(tài)可調(diào),為了使二進(jìn)制位寬能夠表示最大點(diǎn)數(shù)16M,將位寬確定為24。(2) 當(dāng)信號長度N取16M點(diǎn)時(shí),可獲得本設(shè)計(jì)的最小相位因子。為了能夠?qū)⒃撟钚∠辔挥枚M(jìn)制數(shù)表示出來并盡可能減少誤差,可將相位因子左移24位即放大倍,故相位因子位寬為25位。(3) 由于點(diǎn)數(shù)n與相位因子的乘積
35、最大為,可以用25位二進(jìn)制位寬表示。另外,兩者乘積結(jié)果位寬為49,故只需取低25位就可以了。由于相位因子用25位二進(jìn)制位寬無法完全表示,故引入了誤差。但此誤差小于,非常小,對設(shè)計(jì)精度的影響不大。5.2.2 設(shè)計(jì)實(shí)現(xiàn)本課題“基于FPGA的FFT窗函數(shù)計(jì)算”中實(shí)現(xiàn)的四個(gè)窗函數(shù)設(shè)計(jì)里含有兩項(xiàng)余弦函數(shù)和,在計(jì)算余弦函數(shù)之前需要求解余弦函數(shù)的相位,因此本課題中設(shè)計(jì)了一個(gè)相位生成器,負(fù)責(zé)產(chǎn)生對應(yīng)時(shí)刻的相位。相位生成器的模塊框圖如圖5.4所示,表5.3所示為相位生成器的端口定義。圖5.4 相位生成器表5.3 角度生成模塊的端口信號名列表信號名信號方向位寬含義sys_clkinput1系統(tǒng)時(shí)鐘rst_ninp
36、ut1全局復(fù)位信號,低電平有效point_numinput24信號長度輸入,point_num范圍為28-1224-1theta_factorinput25相位因子輸入,由225/point_num決定din_eninput1輸入數(shù)據(jù)使能信號,高電平有效ndinput1從設(shè)備是否準(zhǔn)備好接收數(shù)據(jù)標(biāo)志位,高電平有效theta_out1output24角度輸出,0pi/2sign1output1符號標(biāo)志位1,1表示負(fù)數(shù),0表示整數(shù)theta_out2output24角度輸出,0pi/2sign2output1符號標(biāo)志位2,1表示負(fù)數(shù),0表示整數(shù)rdyoutput1主設(shè)備是否準(zhǔn)備好接收數(shù)據(jù)標(biāo)志位,高有
37、電平效在該模塊中,要做的事情就是根據(jù)信號長度point_num和相位因子theta_factor算出相應(yīng)時(shí)刻的相位。為了算出這個(gè)相位,調(diào)用了乘法器IP核,其例化代碼如程序清單5.1所示:程序清單5.1 產(chǎn)生余弦函數(shù)相位/ 調(diào)用乘法器,產(chǎn)生相應(yīng)的相位wire DATA2_WIDTH-1:0 theta;/ 輸出相位,02*piwire rst;/ 乘法器復(fù)位信號,高電平有效assign rst = rst_n;mult_theta u_mult_theta ( .clk ( sys_clk ), / 系統(tǒng)時(shí)鐘 .sclr ( rst ),/ 復(fù)位信號,高電平有效 .a ( theta_facto
38、r ), / 相位因子,位寬25 .b ( point_cnt ), / 輸入第n點(diǎn),位寬24 .p ( theta ) / 輸出相應(yīng)相位,位寬25);有一點(diǎn)是需要我們注意的,在乘法器中相位因子theta_factor和點(diǎn)數(shù)point_cnt的位寬分別為25和24,輸出相位theta的位寬應(yīng)為49。這里只取其中的低25位,但這并沒有造成數(shù)據(jù)的損失。原因是相位因子theta_factor和點(diǎn)數(shù)point_cnt的乘積最大值為,用25位二進(jìn)制位寬完全可以表示輸出相位。為了將送入CORDIC算法模塊(詳見下一小節(jié))的相位和限制在范圍之內(nèi),我們需要對乘法器輸出的相位theta進(jìn)行處理。這里有兩件事要做
39、,第一,判斷該相位屬于直角坐標(biāo)系中的哪個(gè)象限,并根據(jù)三角恒等變換關(guān)系將相位轉(zhuǎn)換到第一象限;第二,根據(jù)相位原在的象限,給它一個(gè)標(biāo)志位,標(biāo)志其余弦值的正負(fù)極性,即當(dāng)為1時(shí)代表余弦值為負(fù)數(shù),當(dāng)為0時(shí)代表余弦值為正數(shù)。為了更好理解相位是如何轉(zhuǎn)換到第一象限的,下面結(jié)合直角坐標(biāo)系來進(jìn)行解釋,如圖5.5所示。以相位為例,其范圍為,用25位無符號二進(jìn)制數(shù)據(jù)表示。當(dāng)theta24:23為2b00時(shí),表示該相位在第一象限,如(a)所示。此時(shí)的相位已在第一象限,不用轉(zhuǎn)換,相當(dāng)于已限制到第一象限,即輸出相位theta_out1為theta23:0,其余弦值為正數(shù),即正負(fù)標(biāo)志位sign1為1b0。當(dāng)theta24:23
40、為2b01時(shí),表示該相位在第二象限,如(b)所示。如果要將該相位轉(zhuǎn)換到第一象限,則轉(zhuǎn)換后的相位為即輸出相位theta_out1為(24)1b1 - theta23:0 + 1b1,其余弦值為負(fù)數(shù),即正負(fù)標(biāo)志位sign1為1b1。當(dāng)theta24:23為2b10時(shí),表示該相位在第三象限,如(c)所示,如果要將該相位轉(zhuǎn)換到第一象限,則轉(zhuǎn)換后的相位為即輸出相位theta_out1為theta23:0,其余弦值為負(fù)數(shù),即正負(fù)標(biāo)志位sign1為1b1。當(dāng)theta24:23為2b11時(shí),表示該相位在第四象限,如(d)所示,如果要將該相位轉(zhuǎn)換到第一象限,則轉(zhuǎn)換后的相位為即輸出相位theta_out1為(2
41、4)1b1 - theta23:0 + 1b1,其余弦值為正數(shù),即正負(fù)標(biāo)志位sign1為1b0。相位在直角坐標(biāo)中象限的轉(zhuǎn)換類似,這里就不再贅述了。(a)相位在第一象限(b)相位在第二象限(c)相位在第三象限(d)相位在第四象限圖5.5 直角坐標(biāo)系相位旋轉(zhuǎn)示意圖5.3 CORDIC算法模塊5.3.1 設(shè)計(jì)精度分析本課題“基于FPGA的FFT窗函數(shù)計(jì)算”中需要計(jì)算余弦函數(shù),而余弦函數(shù)的計(jì)算是基于CORDIC迭代算法的。迭代次數(shù)越多,數(shù)據(jù)表示位寬越大,所獲得的結(jié)果精度越高,但付出的代價(jià)是消耗更多的資源。但是并不是說精度越高對設(shè)計(jì)就越好。我們既要考慮到設(shè)計(jì)的精度,也要考慮到設(shè)計(jì)消耗的資源,即設(shè)計(jì)精度與
42、資源的均衡。為了獲得所希望的精確度,需要確定迭代的次數(shù)和數(shù)據(jù)的位寬。為了在不浪費(fèi)多余的資源下確定合適的迭代次數(shù),應(yīng)該定位于CORDIC算法第n次迭代所對應(yīng)的旋轉(zhuǎn)相位要小于本設(shè)計(jì)的最小相位。當(dāng)信號長度為16M點(diǎn)時(shí),可獲得本設(shè)計(jì)的最小相位。表5.4所示為CORDIC算法每一次迭代所對應(yīng)的相位。表5.4 CORDIC迭代過程中的旋轉(zhuǎn)相位i012122由表5.4可以看出,在23次迭代時(shí)旋轉(zhuǎn)相位小于本系統(tǒng)的最小相位,因此CORDIC算法模塊的迭代次數(shù)確定為23。此外,為了能夠用二進(jìn)制數(shù)比較精確地表示相位和余弦值,同時(shí)還要考慮資源的消耗,需要選擇合適的二進(jìn)制位寬。位寬越大,精度越高,但資源消耗越大;位寬越
43、小,精度越小,但資源消耗越少。經(jīng)過MATLAB仿真結(jié)果分析,最后決定用24位的二進(jìn)制位寬表示相位和余弦值。5.3.2 設(shè)計(jì)實(shí)現(xiàn)本課題“基于FPGA的FFT窗函數(shù)計(jì)算”中需要計(jì)算兩項(xiàng)余弦函數(shù)和,這里我們可以采用CORDIC迭代算法實(shí)現(xiàn)余弦函數(shù)的計(jì)算。于是在本設(shè)計(jì)中需要設(shè)計(jì)CORDIC算法模塊,其模塊框圖如圖5.6所示,表5.5所示為CORDIC算法模塊的端口定義。其中,變量theta_in是一個(gè)范圍為的相位輸入,即最高位為符號位。變量cos_data是24位的余弦函數(shù)結(jié)果絕對值輸出,其值相對于原值的絕對值放大了倍。為了統(tǒng)一,將輸入相位限制在之間,其值為原值的絕對值,必須根據(jù)其正負(fù)符號標(biāo)志位求出真
44、正的余弦值(詳見相位生成模塊)。圖5.6 CORDIC算法模塊表5.5 CORDIC算法模塊的端口信號名列表信號名信號方向位寬含義sys_clkinput1系統(tǒng)時(shí)鐘rst_ninput1全局復(fù)位信號,低電平有效theta_ininput24角度輸入, cos_dataoutput24余弦值絕對值輸出為了將本課題“基于FPGA的FFT窗函數(shù)計(jì)算”中復(fù)雜的三角函數(shù)運(yùn)算轉(zhuǎn)化成簡單的移位相加減運(yùn)算,需要限制旋轉(zhuǎn)相位,使得,即。在用FPGA對CORDIC算法模塊進(jìn)行設(shè)計(jì)之前,需要將這些旋轉(zhuǎn)相位計(jì)算出來。為了確保設(shè)計(jì)的精確度,在對CORDIC算法模塊設(shè)計(jì)時(shí)進(jìn)行了23次迭代?,F(xiàn)在利用MATLAB將這些旋轉(zhuǎn)相
45、位計(jì)算出來,其MATLAB代碼如程序清單5.2所示:程序清單5.2 求解旋轉(zhuǎn)角度的MATLAB實(shí)現(xiàn)fid = fopen(rot.txt,w);% 打開一個(gè)文件for i = 0:22 x = atan(2(-i)*224/pi;% 計(jì)算每級迭代的旋轉(zhuǎn)角度 rot_angle = atan(2(-i)*180/pi;% 將角度轉(zhuǎn)換成弧度 y = dec2bin(x,24);% 將十進(jìn)制轉(zhuǎn)換成二進(jìn)制fprintf(fid,localparam Rot%-2d = 24b,i+1);% 以下三行將弧度以符合Verilog HDLfwrite(fid,y);%語法寫進(jìn)文件 fprintf(fid,;
46、t/%9.6fdegrn,rot_angle); endfclose(fid) 由于每次旋轉(zhuǎn)都會(huì)使向量模長增大,n次旋轉(zhuǎn)后模長將增大 。為了糾正向量模長,最后得乘以因子。該因子可由程序清單5.3所示的MATLAB程序?qū)崿F(xiàn):程序清單5.3 求解向量模長糾正因子的MATLAB實(shí)現(xiàn)Init_1 = 1;fid = fopen(Init.txt,w);% 打開一個(gè)文件for i = 0:22% 計(jì)算K=1/cos(0)*1/cos(1)*.*1/cos(n-1) cos_data = cos(atan(2(-i); Init_1 = Init_1*cos_data;endInit_expand = I
47、nit_1*223;% 將K左移23位即放大223倍以用整數(shù)表示Init_data = dec2bin(Init_expand,24);% 將十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)fprintf(fid,localparam Init = 24b);% 以下三行將Init_data以符合Verilog HDL語法fwrite(fid,Init_data);% 寫進(jìn)文件fprintf(fid,; /%9.7f*2%d,Init_1,i);fclose(fid)% 關(guān)閉文件接著,根據(jù)第四章中的式(4-5)和式(4-6)就可以開始CORDIC算法模塊的FPGA設(shè)計(jì)了,圖5.7所示為CORDIC算法模塊每次迭代所對應(yīng)
48、的硬件結(jié)構(gòu)。經(jīng)過23迭代之后就可以將得到的余弦函數(shù)結(jié)果的絕對值輸出了。圖5.7 CORDIC算法每次迭代所對應(yīng)的硬件結(jié)構(gòu)到此,CORDIC算法模塊已經(jīng)設(shè)計(jì)好了。接下來,驗(yàn)證CORDIC算法模塊的功能是否正確,精度是否滿足設(shè)計(jì)。以驗(yàn)證1M點(diǎn)的為例,將modelsim仿真值和MATLAB理論值進(jìn)行比較,如圖5.8所示。(a)理論值(b)實(shí)值(c)誤差值圖5.8 CORDIC算法模塊實(shí)值與理論值的比較經(jīng)過MATLAB仿真,CORDIC算法模塊實(shí)值和理論值之間最大的誤差為。該誤差值很小,那么該誤差值對本設(shè)計(jì)最終結(jié)果的精度有沒有影響呢?首先,對本設(shè)計(jì)的數(shù)據(jù)格式要求為輸入8位的無符號整數(shù),輸出16位無符號
49、數(shù)據(jù),其中8位整數(shù)、8位小數(shù)。如果用二進(jìn)制數(shù)表示,則該誤差值在小數(shù)點(diǎn)后第17位開始。此外,該誤差來自于余弦函數(shù)。在窗函數(shù)的計(jì)算過程中,余弦函數(shù)還要和一個(gè)小于1的系數(shù)相乘,也就說窗函數(shù)的結(jié)果實(shí)值與理論值的誤差小于。窗函數(shù)的結(jié)果最后還要跟輸入的8位無符號整數(shù)相乘,說理論上本設(shè)計(jì)的誤差值將在二進(jìn)制小數(shù)點(diǎn)后第9位開始。但本設(shè)計(jì)只保留8位小數(shù),也就是說最終的誤差值將會(huì)被舍去。故該CORDIC算法模塊的功能是正確的,而且精度非常高,滿足設(shè)計(jì)要求。另外,除了滿足功能和精度上的需求,還要對CORDIC算法模塊所消耗的資源以及速度進(jìn)行分析,該分析是在Xilinx公司的Kintex-7 XC7K160T平臺(tái)下進(jìn)行
50、(本課題凡是涉及到資源和速度的分析都是在這個(gè)平臺(tái)下進(jìn)行的)。本課題對速度的要求是使設(shè)計(jì)跑到200MHz以上。本設(shè)計(jì)也是某系統(tǒng)的一個(gè)小模塊,一般情況下,為了本設(shè)計(jì)所在的系統(tǒng)可以跑到200MHz以上,應(yīng)該讓本設(shè)計(jì)至少通過250MHz的時(shí)序約束。為了分析本設(shè)計(jì)的性能,應(yīng)該找一個(gè)參照的對象。于是設(shè)計(jì)了一個(gè)調(diào)用IP核的CORDIC模塊,它的參數(shù)跟純邏輯設(shè)計(jì)的CORDIC算法模塊一樣,如器件型號、數(shù)據(jù)位寬、迭代次數(shù)和時(shí)序約束一樣。通過布局布線后兩個(gè)模塊的資源消耗情況如表5.6和表5.7所示,時(shí)序分析情況如表5.8和表5.9所示。表5.6 純邏輯CORDIC算法模塊的資源消耗邏輯資源使用已使用寄存器1567
51、查找表1657表5.7 IP核CORDIC模塊的資源消耗邏輯資源使用已使用寄存器1957查找表2069表5.8 純邏輯CORDIC算法模塊時(shí)序分析周期占空比周期裕量時(shí)鐘約束4ns50%布局布線后2.158ns1.842ns表5.9 IP核CORDIC IP模塊時(shí)序分析周期占空比周期裕量時(shí)鐘約束4ns50%布局布線后2.278ns1.722ns通過對數(shù)據(jù)的分析,純邏輯設(shè)計(jì)的CORDIC算法模塊相對于IP核CORDIC模塊不僅資源消耗小一些,速度也快了。綜上所示,本設(shè)計(jì)的CORDIC算法模塊不僅精度高、資源消耗合理、速度也通過了250MHz的時(shí)序約束,故該CORDIC算法模塊的設(shè)計(jì)是非常合理的。5
52、.4 余弦值輸出模塊本課題“基于FPGA的FFT窗函數(shù)計(jì)算”中CORDIC算法模塊求出的余弦值是對應(yīng)相位的余弦值的絕對值?,F(xiàn)在,我們要根據(jù)相位生成模塊輸出的余弦值正負(fù)符號標(biāo)志位對從CORDIC算法模塊輸出的余弦值的絕對值進(jìn)行還原。由數(shù)學(xué)的知識(shí)可知,正數(shù)的絕對值是其本身,負(fù)數(shù)的絕對值是其相反數(shù)。在這里,設(shè)計(jì)了一個(gè)余弦值輸出模塊,其模塊框圖如圖5.9所示,表5.10所示為余弦值輸出模塊的端口定義。圖5.9 余弦值輸出模塊表5.10 余弦值輸出模塊的端口信號名列表信號名信號方向位寬含義sys_clkinput1系統(tǒng)時(shí)鐘rst_ninput1全局復(fù)位信號,低電平有效cordic_cos_abs1inp
53、ut24余弦函數(shù)的絕對值cordic_sign1_dly25input1余弦函數(shù)正負(fù)標(biāo)志位cordic_cos_abs2input24余弦函數(shù)的絕對值cordic_sign2_dly25input1余弦函數(shù)正負(fù)標(biāo)志位cordic_cos1output25余弦函數(shù)的余弦值cordic_cos2output25余弦函數(shù)的余弦值在進(jìn)行余弦值的還原之前,由于從相位生成模塊輸出的相位經(jīng)過CORDIC算法模塊處理到余弦值的絕對值輸出需要25個(gè)時(shí)鐘周期,為了同步,需要對從相位生成模塊輸出的余弦值正負(fù)符號標(biāo)志位進(jìn)行25個(gè)時(shí)鐘周期的延時(shí),最后得到經(jīng)過延時(shí)后的信號為cordic_sign1_dly25和cordi
54、c_sign2_dly25。另外,由數(shù)路基礎(chǔ)知識(shí)可道,正數(shù)的補(bǔ)碼是它本身,負(fù)數(shù)的補(bǔ)碼是除符號位之外的數(shù)取反再加1。為了還原余弦值,得增加一位符號位,故輸出的余弦值是一個(gè)25位位寬的有符號數(shù)據(jù)。最后根據(jù)該原理,對本模塊進(jìn)行Verilog HDL設(shè)計(jì)如程序清單5.4所示:程序清單5.4 余弦值的還原/ 根據(jù)正負(fù)標(biāo)志位cordic_sign1_dly26完成cos(2*pi*n/(N-1)絕對值的復(fù)原always (posedge sys_clk or negedge rst_n)begin if(rst_n=1b0) cordic_cos1 = #1 (DATA2_WIDTH)1b0; else
55、begin if(cordic_sign1_dly26=1b1) cordic_cos1 = #1 1b1,cordic_cos_abs1+1b1; else cordic_cos1 = #1 1b0,cordic_cos_abs1; endend/ 根據(jù)正負(fù)標(biāo)志位cordic_sign2_dly26完成cos(4*pi*n/(N-1)絕對值的復(fù)原always (posedge sys_clk or negedge rst_n)begin if(rst_n=1b0) cordic_cos2 = #1 (DATA2_WIDTH)1b0; else begin if(cordic_sign2_dl
56、y26=1b1) cordic_cos2 = #1 1b1,cordic_cos_abs2+1b1; else cordic_cos2 = #1 1b0,cordic_cos_abs2;endend5.5 窗函數(shù)系數(shù)生成模塊本課題“基于FPGA的FFT窗函數(shù)計(jì)算”中需要設(shè)計(jì)矩形窗、海明窗、漢寧窗和布萊克曼窗四個(gè)窗函數(shù)。為了實(shí)現(xiàn)資源共享(詳見第五章資源共享),節(jié)省大量寶貴的資源,通過窗函數(shù)的類型對窗函數(shù)的系數(shù)進(jìn)行選擇,故這里設(shè)計(jì)了窗函數(shù)系數(shù)生成模塊。該模塊的模塊框圖如圖5.10所示,表5.11所示為該模塊的端口定義。圖5.10 窗函數(shù)系數(shù)生成模塊表5.11 窗函數(shù)系數(shù)生成模塊的端口信號名列表信號名信號方向位寬含義window_modelinput2窗函數(shù)類型選擇變量paramAoutput43窗函數(shù)第一系數(shù)paramBoutput16窗函數(shù)第二系數(shù)paramCoutput16窗函數(shù)第三系數(shù)其中,變量window_model決定窗函數(shù)的類型,即當(dāng)window_model為2b00時(shí),設(shè)計(jì)選擇海明窗;
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案