基于FPGA的FIR濾波器設(shè)計_第1頁
基于FPGA的FIR濾波器設(shè)計_第2頁
基于FPGA的FIR濾波器設(shè)計_第3頁
基于FPGA的FIR濾波器設(shè)計_第4頁
基于FPGA的FIR濾波器設(shè)計_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于fpga的fir濾波器設(shè)計一 、設(shè)計目的為了幫助學(xué)生深入理解和消化基本理論、進一步提高綜合應(yīng)用能力并且鍛煉獨立解決問題的能力,我們將數(shù)字信號處理、集成電路原理與應(yīng)用和fpga系統(tǒng)設(shè)計與應(yīng)用幾門課程融合在一起開設(shè)的fpga綜合實驗課程設(shè)計。本次完成的是利用fpga來完成fir濾波器的設(shè)計、程序設(shè)計和實驗調(diào)試任務(wù)。二、設(shè)計要求(1)基本要求利用所學(xué)知識,采用vhdl語言完成fir濾波器的設(shè)計仿真。要求用vhdl編程設(shè)計底層文件,頂層文件可任意(可用原理圖方式或文本方式);完成仿真文件(包括matlab和quartusii兩種仿真)并對其結(jié)果比較。具體設(shè)計指標(biāo)如下:(1)采樣頻率;(2)截止頻率

2、;(3)輸入序列為10位(最高位為符號位);(4)窗口類型為kaiser窗,=0.5 ;(5)濾波器長度為16 ;(6)輸出結(jié)果保留10位。(2)提高部分 根據(jù)所學(xué)知識,設(shè)計出一個具有頻率控制功能dds,要求輸出頻率分別為10khz和100khz,將輸出的兩路數(shù)字信號進行疊加,并通過所設(shè)計的fir濾波器進行濾波,將濾波輸出的數(shù)字信號通過d/a轉(zhuǎn)換電路輸出波形,并用示波器觀察輸出波形,并完成測試結(jié)果分析。結(jié)構(gòu)框圖如圖1-1所示。 圖2-1 整體結(jié)構(gòu)框圖三、設(shè)計原理3.1 fir濾波器由線性系統(tǒng)理論可知,在某種適度條件下,輸入到線性系統(tǒng)的一個沖擊完全可以表征系統(tǒng)。當(dāng)我們處理有限的離散數(shù)據(jù)時,線形系

3、統(tǒng)的響應(yīng)(包括對沖擊的響應(yīng))也是有限的。若線性系統(tǒng)僅是一個空間濾波器,則通過簡單地觀察它對沖擊的響應(yīng),我們就可以完全確定該濾波器。通過這種方式確定的濾波器稱為有限沖擊響應(yīng)(fir)濾波器。3.2 線性fir濾波器原理fir濾波器響應(yīng)(簡稱fir)系統(tǒng)的單位脈沖響應(yīng)為有限長序列,系統(tǒng)函數(shù)在有限z平面上不存在極點,其運算結(jié)構(gòu)中不存在反饋支路,即沒有環(huán)路。如果的長度為n,則它的系統(tǒng)函數(shù)和差分方程一般具有如下形式:根據(jù)差分方程直接畫出fir濾波器的結(jié)構(gòu),稱為直接型結(jié)構(gòu)。如圖3-1所示: 圖3-1 fir濾波器直接結(jié)構(gòu)fir濾波器的特點:單位脈沖響應(yīng)序列為有限個;可快速實現(xiàn);可得到線性相位;濾波器階數(shù)較

4、高。對線性時不變系統(tǒng)保持線性相位的條件是:單位脈沖響應(yīng)為偶對稱或奇對稱。即:為設(shè)計線性濾波器,應(yīng)保證h(n)為對稱的。 若n為偶數(shù),其線性相位fir濾波器的對稱結(jié)構(gòu)流圖如圖3-2所示:圖3-2 若n為偶數(shù)線性相位fir濾波器的對稱結(jié)構(gòu)流圖圖中:“ +1 ” 對應(yīng)偶對稱情況,“ -1 ” 對應(yīng)奇對稱情況。當(dāng)n為奇數(shù)時,支路斷開。 若n為奇數(shù),其線性相位fir濾波器的對稱結(jié)構(gòu)流圖如圖3-3:圖3-3 n為奇數(shù)線性相位fir濾波器的對稱結(jié)構(gòu)流圖其中y(n)和x(n)分別是輸出和輸入序列。有限沖激響應(yīng)濾波器的一種直接型實現(xiàn),可由式(2)生成,m=5的情況如圖3-4(a)所示。其轉(zhuǎn)置,如圖3-4(b)所

5、示,是第二個直接型結(jié)構(gòu)。通常一個長度為m的有限沖激響應(yīng)濾波器由m個系數(shù)描述,并且需要m個乘法器和(m-1)個雙輸入加法器來實現(xiàn)。圖3-4(a)直接型一圖3-4(b)直接型二長度為m的線性相位有限沖激響應(yīng)濾波器由對稱的沖激響應(yīng)h(n)=h(m-1-n)或反對稱的沖激響應(yīng)h(n)=-h(m-1-n)描述。利用線性相位有限沖激響應(yīng)濾波器的對稱(或反對稱)性質(zhì),可以將傳輸函數(shù)的直接型實現(xiàn)所需的乘法器總量減少一半。例如,圖3-5顯示了一個具有對稱沖擊響應(yīng)的、長度為7的有限沖激響應(yīng)傳輸函數(shù)的實現(xiàn)。圖3- 5 線性相位有限沖激響應(yīng)結(jié)構(gòu)四、設(shè)計方案因為n=16為偶數(shù),根據(jù)老師上課時所講,可以按照上面第一個原理

6、圖設(shè)計濾波器,如圖4-1所示。圖4-1若n為偶數(shù)線性相位fir濾波器的對稱結(jié)構(gòu)流圖本設(shè)計取為偶對稱的情況,則圖中:應(yīng)取“ +1 ”。由上圖可分析得到,要完成濾波器的設(shè)計,需要設(shè)計的底層文件包括延時單元、加法電路單元、乘以負(fù)一單元、乘法器單元及截取10位數(shù)單元。由各單元vhdl編程后,生成相應(yīng)的符號文件。最后連接成頂層原理圖。整個電路的原理圖設(shè)置方案如圖4-2所示:圖4- 2 濾波器整體設(shè)計方案原理圖五、設(shè)計內(nèi)容及結(jié)果分析首先使用matlab計算出符合設(shè)計要求的濾波器沖激響應(yīng)系數(shù)。后將整個電路規(guī)劃為語言編輯和原理圖編輯兩個單元,其中語言編輯部分負(fù)責(zé)編輯整個濾波器電路中所需用的單元器件,包括寄存器

7、、加法器、減法器以及乘法器幾個單元器件;最后將所有的器件連接成頂層原理圖。在進行編譯及仿真。5.1基于matlab的fir濾波器系數(shù)計算在matlab命令編輯窗口輸入fdatool指令,再點回車即可打開filter design & analysis tool窗口,在該工具的幫助下,我們就可以完成f.i.r.濾波器系數(shù)的計算。fdatool界面總共分兩大部分,一部分是design filter,在界面的下半部分,用來設(shè)置濾波器的設(shè)計參數(shù),另一部分則是特性區(qū),在界面的上半部分,用來顯示濾波器的各種特性。design filter部分主要分為:response type(響應(yīng)類型)選項,包括low

8、pass(低通)、highpass(高通)、bandpass(帶通)、bandstop(帶阻)和特殊的濾波器。根據(jù)本次作業(yè)要求,在該選項中選擇lowpass選項。design method(設(shè)計方法)選項,包括iir濾波器的butterworth(巴特沃思)法、chebyshev type i(切比雪夫i型)法、 chebyshev type ii(切比雪夫ii型) 法、elliptic(橢圓濾波器)法等和window(窗函數(shù))法等多種方法。結(jié)合本次課設(shè)要求,選擇fir濾波器的窗函數(shù)法進行設(shè)計。選定窗函數(shù)法后,會在右側(cè)出現(xiàn)options區(qū)域,進行窗函數(shù)法相關(guān)參量的設(shè)置,根據(jù)作業(yè)要求選擇kais

9、er窗并設(shè)置beta為:0.5。filter order(濾波器階數(shù))選項,定義濾波器的階數(shù),包括specify order(指定階數(shù))和minimum order(最小階數(shù))。在specify order中填入所要設(shè)計的濾波器的階數(shù)(n階濾波器,specify ordern-1),如果選擇minimum order則matlab根據(jù)所選擇的濾波器類型自動使用最小階數(shù)。本次作業(yè)要求設(shè)計16階濾波器,所以選定specify order并填入15。frenquency specifications選項,可以詳細(xì)定義頻帶的各參數(shù),包括采樣頻率fs和頻帶的截止頻率。它的具體選項由response ty

10、pe選項和design metho選項決定。我們要求的 lowpass(低通)濾波器只需要定義fs=80 khz、fc=10 khz。本次課設(shè)中的參數(shù)全部設(shè)定后的結(jié)果如圖5-1所示。圖5-1 參數(shù)全部設(shè)定后圖參數(shù)設(shè)定完畢,單擊工具窗口下方的design filter按鈕,就開始進行相關(guān)參數(shù)計算。在計算結(jié)果中可以看到該濾波器的一些相關(guān)曲線,如幅頻響應(yīng)(如圖5-2)、相頻響應(yīng)(如圖5-3)、沖激響應(yīng)(如圖5-4)等。圖形如下:圖5-2 幅頻響應(yīng)曲線圖5-3 相頻響應(yīng)曲線圖5-4 沖激響應(yīng)計算的結(jié)果可通過file下拉菜單中的export命令取出,點擊export打開export對話框(如圖5-5),

11、點擊export按鈕可將濾波器系數(shù)數(shù)據(jù)存放到當(dāng)前工作空間,并以num命名。圖5-5 沖激系數(shù)輸出對話框保存并關(guān)閉濾波器設(shè)計分析工具回到matlab主窗口,在命令編輯區(qū)輸入num可得到工具的計算結(jié)果(如圖5-6)。圖 5-6 輸出在matlab的沖激系數(shù)對fir濾波器的系數(shù)進行調(diào)整,做整數(shù)化操作。可得到濾波器整數(shù)化的系數(shù)為-31 -88 -106 -54 70 239 401 499 499 401 239 70 -54 -106 -88 -31,如圖 5-7所示:圖5-7 整數(shù)化后的沖激系數(shù)5.2 單元器件的編輯及仿真5.2.1、寄存器模塊在本次課設(shè)中延遲單元可用寄存器來替代,寄存器用于寄存一

12、組二值代碼,只要求它們具有置1、置0的功能即可。在本設(shè)計中使用帶異步復(fù)位rst端的d觸發(fā)器,當(dāng)rst=1時,輸出信號q=0,當(dāng)rst=0且上升沿脈沖到達時q=d,即延遲了一個在周期。其程序代碼如下:library ieee; use ieee.std_logic_1164.all;entity jicunqi isport (rst,clk: in std_logic; d:in std_logic_vector (9 downto 0); q:out std_logic_vector (9 downto 0);end jicunqi;architecture dff16 of jicunqi

13、 isbegin process (rst,clk) begin if(rst=1)then q0); elsif(clkevent and clk=1)then q=d; end if; end process;end dff16;程序編譯后就可進行仿真,仿真結(jié)果如圖5-8所示:圖5-8 寄存器模塊仿真結(jié)果由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-9 所示。圖 5-9 寄存器元件圖5.2.2、加法器模塊即實現(xiàn)兩個有符號數(shù)的相加運算。即將輸入的兩數(shù),在時鐘脈沖到來時相加運算,輸出結(jié)果。在本設(shè)計中共有8個:兩個10位有符號數(shù)相加產(chǎn)生一個11位有符號數(shù)的

14、加法器、一個18位和19位有符號數(shù)相加產(chǎn)生20位有符號數(shù)的加法器、一個兩個20位有符號數(shù)相加產(chǎn)生一個21位有符號數(shù)的加法器、一個兩個19位有符號數(shù)相加產(chǎn)生一個20位有符號位數(shù)的加法器、一個20位和21位有符號數(shù)相加產(chǎn)生22位有符號數(shù)的加法器,以及一個20位和22位有符號數(shù)相加產(chǎn)生23位有符號數(shù)的加法器電路。具體如下: 兩個10位有符號數(shù)相加產(chǎn)生一個11位有符號數(shù)的加法器設(shè)計:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity add101011 is port(a,b:

15、in signed(9 downto 0); clk: in std_logic; s:out signed(10 downto 0);end add101011;architecture sum101011 of add101011 isbegin process(clk) begin if(clkevent and clk=1)then s=(a(9)&a)+(b(9)&b); end if; end process;end sum101011;程序編譯后就可進行仿真,仿真結(jié)果如圖5-10所示:圖5-10 兩個10位有符號數(shù)相加結(jié)果波形圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個

16、元件以便后來調(diào)用,其生成圖如圖5-11所示圖5-11 兩個10位有符號數(shù)相加元件圖2 18位和19位有符號數(shù)相加產(chǎn)生20位有符號數(shù)的加法器設(shè)計:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity add181920 is port(a: in signed(17 downto 0); b: in signed(18 downto 0); clk: in std_logic; s:out signed(19 downto 0);end add181920;architect

17、ure sum7023918 of add181920 isbegin process(clk) begin if(clkevent and clk=1)then s=(a(17)&a(17)&a)+(b(18)&b); end if; end process;end sum7023918;程序編譯后就可進行仿真,仿真結(jié)果如圖5-12所示:圖5-12 18位和19位有符號數(shù)相加結(jié)果波形圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-13 所示圖5-13 18位和19位有符號數(shù)相加元件圖3 兩個20位有符號數(shù)相加產(chǎn)生一個21位有符號數(shù)的加法器設(shè)計:由分析可

18、寫出如下程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity add202021 is port(a: in signed(19 downto 0); b: in signed(19 downto 0); clk: in std_logic; s:out signed(20 downto 0);end add202021;architecture sum40149919 of add202021 isbegin process(clk) begin if(clkevent and clk

19、=1)then s=(a(19)&a)+(b(19)&b); end if; end process;end sum40149919;程序編譯后就可進行仿真,仿真結(jié)果如圖5-14所示:圖 5-14 兩個20位有符號數(shù)相加結(jié)果波形圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-15所示圖 5-15 兩個20位有符號數(shù)相加元件圖 兩個19位有符號數(shù)相加產(chǎn)生一個20位有符號位數(shù)的加法器設(shè)計:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entit

20、y add191920 is port(a: in signed(18 downto 0); b: in signed(18 downto 0); clk: in std_logic; s:out signed(19 downto 0);end add191920;architecture sum181819 of add191920 isbegin process(clk) begin if(clkevent and clk=1)then s=(a(18)&a)+(b(18)&b); end if; end process;end sum181819;程序編譯后就可進行仿真,仿真結(jié)果如圖5-

21、16所示:圖 5-16 兩個19位有符號數(shù)相加結(jié)果波形圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-17所示圖 5-17 兩個19位有符號數(shù)相加元件圖 20位和21位有符號數(shù)相加產(chǎn)生22位有符號數(shù)的加法器:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity add202122 is port(a: in signed(19 downto 0); b: in signed(20 downto 0); clk: in std_logi

22、c; s:out signed(21 downto 0);end add202122;architecture sum192021 of add202122 isbegin process(clk) begin if(clkevent and clk=1)then s=(a(19)&a(19)&a)+(b(20)&b); end if; end process;end sum192021;程序編譯后就可進行仿真,仿真結(jié)果如圖5-18所示:圖 5-18 20位和21位有符號數(shù)相加結(jié)果波形圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-19 所示圖5-19

23、20位和21位有符號數(shù)相加元件圖 20位和22位有符號數(shù)相加產(chǎn)生23位有符號數(shù)的加法器電路設(shè)計(最后一級帶舍位):在此加法器電路中在引入低位舍去功能只保留最終10位輸出,最終保留10位輸出采用了直接取輸出23位數(shù)的高十位的方法,因此在輸出中近似等于除掉了213即8192以后的結(jié)果。為了比較,特又引出了一個23位全輸出引腳(quan)。其程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity add202223 is port(a: in signed(19 downto 0); b: i

24、n signed(21 downto 0); quan: out signed(22 downto 0); clk: in std_logic; s:out signed(9 downto 0);end add202223;architecture sum192110 of add202223 isbegin process(clk) variable c:signed(22 downto 0); begin if(clkevent and clk=1)then c:=(a(19)&a(19)&a(19)&a)+(b(21)&b); end if; s=c(22 downto 13); qua

25、n0);begin process(din1,din2,clk) begin if clkevent and clk=1 then dout0);begin process(din1,din2,clk) begin if clkevent and clk=1 then dout=s2-din1-s1; end if; end process;end sub1065417;程序編譯后就可進行仿真,仿真結(jié)果如圖5-24 所示:圖 5-24 -106和-54的減法器結(jié)果仿真圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-25 所示;圖 5-25 -106和-5

26、4的減法器元件圖5.2.4、乘法器模塊:實現(xiàn)輸入帶符號數(shù)據(jù)與固定數(shù)據(jù)兩個二進制數(shù)的乘法運算。當(dāng)?shù)竭_時鐘上升沿時,將兩數(shù)輸入,運算并輸出結(jié)果。從資源和速度方面考慮,常系數(shù)乘法運算可用移位相加來實現(xiàn)。將常系數(shù)分解成幾個2的冪的和形式,然后再分別進行運算。濾波器系數(shù)分別為-31、-88、-106、-54、70、239、401、499、499、401、239、70、-54、-106、-88、-31。算法:其中帶負(fù)號數(shù)先乘去負(fù)號的整數(shù)部分,在后面的求和中做減法運算。編碼方式如下:31被編碼為25-20、88被編碼為26+24+23、106被編碼為26+25+23+21、54被編碼為26-23-21、70

27、被編碼為26+22+21、239被編碼為28-24-20、401被編碼為29-27+24+20、499被編碼為29-23-22-20。具體如下:乘31電路設(shè)計: 由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mult31 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out signed (15 downto 0);end mult31;architecture mul31 of

28、mult31 issignal s1 : signed (15 downto 0);signal s2 : signed (10 downto 0);signal s3 : signed (15 downto 0);begin a1:process(din,s1,s2,s3) begin s1=din&00000; s2=din; if (din(10)=0) then s3=(0&s1(14 downto 0)-(00000&s2(10 downto 0); else s3=(1&s1(14 downto 0)-(11111&s2(10 downto 0); end if; end proc

29、ess; a2: process(clk,s3) begin if clkevent and clk=1 then dout=s3; end if; end process;end mul31;程序編譯后就可進行仿真,仿真結(jié)果如圖5-26 所示:圖 5-26 乘31電路結(jié)果仿真圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-27所示;圖5-27 乘31電路元件圖乘88電路設(shè)計:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mu

30、lt88 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out signed (17 downto 0);end mult88;architecture mult88 of mult88 issignal s1 : signed (16 downto 0);signal s2 : signed (14 downto 0);signal s3 : signed (13 downto 0);signal s4 : signed (17 downto 0);begin a1:process(din,s1,s2,s3

31、) begin s1=din&000000; s2=din&0000; s3=din&000; if (din(10)=0) then s4=(0&s1(16 downto 0)+(000&s2(14 downto 0)+(0000&s3(13 downto 0); else s4=(1&s1(16 downto 0)+(111&s2(14 downto 0)+(1111&s3(13 downto 0); end if; end process; a2: process(clk,s4) begin if clkevent and clk=1 then dout=s4; end if; end

32、process;end mult88;程序編譯后就可進行仿真,仿真結(jié)果如圖5-28所示:圖 5-28 乘88電路結(jié)果仿真圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-29所示;圖 5-29 乘88電路元件圖乘106電路設(shè)計:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mult106 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out s

33、igned (17 downto 0);end mult106;architecture mult106 of mult106 issignal s1 : signed (16 downto 0);signal s2 : signed (15 downto 0);signal s3 : signed (13 downto 0);signal s4 : signed (11 downto 0);signal s5 : signed (17 downto 0);begin a1:process(din,s1,s2,s3,s4) begin s1=din&000000; s2=din&00000;

34、s3=din&000; s4=din&0; if (din(10)=0) then s5=(0&s1(16 downto 0)+(00&s2(15 downto 0)+(0000&s3(13 downto 0)+(000000&s4(11 downto 0); else s5=(1&s1(16 downto 0)+(11&s2(15 downto 0)+(1111&s3(13 downto 0)+(111111&s4(11 downto 0); end if; end process; a2: process(clk,s5) begin if clkevent and clk=1 then d

35、out=s5; end if; end process;end mult106;程序編譯后就可進行仿真,仿真結(jié)果如圖5-30所示:圖 5-30 乘106電路結(jié)果仿真圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-31所示;圖 5-31 乘106電路元件圖 乘54電路設(shè)計:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mult54 isport( clk : in std_logic; din : in signed (10 d

36、ownto 0); dout : out signed (16 downto 0);end mult54;architecture mult54 of mult54 issignal s1 : signed (16 downto 0);signal s2 : signed (13 downto 0);signal s3 : signed (11 downto 0);signal s4 : signed (16 downto 0);begin a1:process(din,s1,s2,s3) begin s1=din&000000; s2=din&000; s3=din&0; if (din(1

37、0)=0) then s4=(0&s1(15 downto 0)-(00&s2(13 downto 0)-(0000&s3(11 downto 0); else s4=(1&s1(15 downto 0)-(11&s2(13 downto 0)-(1111&s3(11 downto 0); end if; end process; a2: process(clk,s4) begin if clkevent and clk=1 then dout=s4; end if; end process;end mult54;程序編譯后就可進行仿真,仿真結(jié)果如圖5-32所示:圖 5-32 乘54電路結(jié)果仿

38、真圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-33所示;圖 5-33 乘54電路元件圖 乘70電路設(shè)計:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mult70 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out signed (17 downto 0);end mult70;architecture mult70 of mult70

39、 issignal s1 : signed (16 downto 0);signal s2 : signed (12 downto 0);signal s3 : signed (11 downto 0);signal s4 : signed (17 downto 0);begin a1:process(din,s1,s2,s3) begin s1=din&000000; s2=din&00; s3=din&0; if (din(10)=0) then s4=(0&s1(16 downto 0)+(00000&s2(12 downto 0)+(000000&s3(11 downto 0); el

40、se s4=(1&s1(16 downto 0)+(11111&s2(12 downto 0)+(111111&s3(11 downto 0); end if; end process; a2: process(clk,s4) begin if clkevent and clk=1 then dout=s4; end if; end process;end mult70;程序編譯后就可進行仿真,仿真結(jié)果如圖5-34所示:圖5-34 乘70電路結(jié)果仿真圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-35所示;圖5-35 乘70電路元件圖 乘239電路設(shè)計:

41、由分析可寫出如下程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mult239 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out signed (18 downto 0);end mult239;architecture mult239 of mult239 issignal s1 : signed (18 downto 0);signal s2 : signed (14 downto 0);

42、signal s3 : signed (10 downto 0);signal s4 : signed (18 downto 0);begin a1:process(din,s1,s2,s3) begin s1=din&00000000; s2=din&0000; s3=din; if (din(10)=0) then s4=(0&s1(17 downto 0)-(0000&s2(14 downto 0)-(00000000&s3(10 downto 0); else s4=(1&s1(17 downto 0)-(1111&s2(14 downto 0)-(11111111&s3(10 dow

43、nto 0); end if; end process; a2: process(clk,s4) begin if clkevent and clk=1 then dout=s4; end if; end process;end mult239;程序編譯后就可進行仿真,仿真結(jié)果如圖5-36所示:圖 5-36 乘239電路結(jié)果仿真圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-37所示;圖5-37 乘239電路元件圖乘401電路設(shè)計:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.s

44、td_logic_arith.all;entity mult401 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out signed (19 downto 0);end mult401;architecture mult401 of mult401 issignal s1 : signed (19 downto 0);signal s2 : signed (17 downto 0);signal s3 : signed (14 downto 0);signal s4 : signed (10 downto

45、0);signal s5 : signed (19 downto 0);begin a1:process(din,s1,s2,s3,s4) begin s1=din&000000000; s2=din&0000000; s3=din&0000; s4=din; if (din(10)=0) then s5=(0&s1(18 downto 0)-(00&s2(17 downto 0)+(00000&s3(14 downto 0)+(000000000&s4(10 downto 0); else s5=(1&s1(18 downto 0)-(11&s2(17 downto 0)+(11111&s3

46、(14 downto 0)+(111111111&s4(10 downto 0); end if; end process; a2: process(clk,s5) begin if clkevent and clk=1 then dout=s5; end if; end process;end mult401;程序編譯后就可進行仿真,仿真結(jié)果如圖5-38所示:圖 5-38 乘401電路結(jié)果仿真圖由上圖可知,與預(yù)期相符,即設(shè)計正確,再將其生成為一個元件以便后來調(diào)用,其生成圖如圖5-39所示;圖5-39 乘401電路元件圖 乘499電路設(shè)計:由分析可寫出如下程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mult499 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out signed (19 downto 0);end mult499;architecture mult499 of mult499 issignal s1 : signed (19 downto 0);signal s2 : signed (13 downto 0);signal s3 : signed (12

溫馨提示

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

評論

0/150

提交評論