【正文】
ctor(255,8)。 WHEN 02=d=conv_std_logic_vector(252,8)。 WHEN 04=d=conv_std_logic_vector(245,8)。 WHEN 06=d=conv_std_logic_vector(233,8)。 WHEN 08=d=conv_std_logic_vector(217,8)。 WHEN 10=d=conv_std_logic_vector(197,8)。 WHEN 12=d=conv_std_logic_vector(174,8)。 WHEN 14=d=conv_std_logic_vector(150,8)。 WHEN 16=d=conv_std_logic_vector(124,8)。 WHEN 18=d=conv_std_logic_vector(99,8)。 WHEN 20=d=conv_std_logic_vector(75,8)。 WHEN 22=d=conv_std_logic_vector(53,8)。 WHEN 24=d=conv_std_logic_vector(34,8)。 WHEN 26=d=conv_std_logic_vector(19,8)。 WHEN 28=d=conv_std_logic_vector(8,8)。 WHEN 30=d=conv_std_logic_vector(1,8)。 WHEN 32=d=conv_std_logic_vector(0,8)。 WHEN 34=d=conv_std_logic_vector(4,8)。 WHEN 36=d=conv_std_logic_vector(13,8)。 WHEN 38=d=conv_std_logic_vector(26,8)。 WHEN 40=d=conv_std_logic_vector(43,8)。 WHEN 42=d=conv_std_logic_vector(64,8)。 WHEN 44=d=conv_std_logic_vector(87,8)。 WHEN 46=d=conv_std_logic_vector(112,8)。 WHEN 48=d=conv_std_logic_vector(137,8)。 WHEN 50=d=conv_std_logic_vector(162,8)。 WHEN 52=d=conv_std_logic_vector(186,8)。 WHEN 54=d=conv_std_logic_vector(207,8)。 WHEN 56=d=conv_std_logic_vector(225,8)。 WHEN 58=d=conv_std_logic_vector(239,8)。 WHEN 60=d=conv_std_logic_vector(249,8)。 WHEN 62=d=conv_std_logic_vector(254,8)。 WHEN OTHERS=NULL。 END IF。END rtl。圖32 正弦波信號發(fā)生器的RTL圖 方波信號發(fā)生器的設(shè)計 方波的VHDL描述:設(shè)定一個變量t,每到一個脈沖,檢測它是否小于31,若小于31,則把高電平送到輸出,并對t+1,否則就輸出低電平,并賦值t為0,生成了方波信號。 square .vhd(方波) LIBRARY IEEE。ENTITY square IS PORT(clk,clr:IN std_logic。 END。BEGIN PROCESS(clk,clr) VARIABLE t:integer RANGE 0 TO 31。039。039。event AND clk=39。 THEN IF t31 THEN t:=t+1。 a=NOT a。 END IF。 PROCESS(clk,a) BEGIN IF clk39。139。139。 ELSE q=00000000。 END IF。END rtl。圖33 方波信號發(fā)生器的RTL圖 波形選擇模塊的設(shè)計 波形選擇模塊的VHDL描述LIBRARY IEEE。USE 。 三角波,方波,正弦波選擇信號 dlta,sqra,sina:IN std_logic_vector(7 DOWNTO 0)。 輸出信號END。 VARIABLE a,b:std_logic_vector(9 DOWNTO 0)。 BEGIN tmp:=dltamp。sin。 選擇三角波輸出 WHEN010=q=sqra。 選擇正弦波輸出 WHEN110=a:=00amp。 q=a(8 DOWNTO 1)。dlta+sina。 三角波與正弦波的線性組合 WHEN011=a:=00amp。 q=a(8 DOWNTO 1)。dlta+sqra。 c:=00amp。 d:=0000amp。 e:=000000amp。 a:=c+d。 q=b(7 DOWNTO 0)。 END CASE。END。圖34 波形選擇模塊的RTL圖 頂層模塊的設(shè)計 頂層模塊的VHDL描述LIBRARY IEEE。USE 。 dlt,sqr,sin:IN std_logic。 輸出信號END top。 y:OUT std_logic_vector(7 DOWNTO 0))。ponent sin is PORT(clk,clr:in std_logic。end ponent sin。 q:OUT std_logic_vector(7 DOWNTO 0))。ponent chpro31 is PORT(dlt,sqr,sin:IN std_logic。 q:OUT std_logic_vector(7 DOWNTO 0))。signal wave1 :std_logic_vector(7 downto 0)。signal wave3 :std_logic_vector(7 downto 0)。 U1:sin port map(clk,clr,wave2)。 U3:chpro31 port map(dlt,sqr,sin,wave1,wave2,wave3,q)。END rtl。圖35 頂層模塊的RTL圖4 函數(shù)信號發(fā)生器的仿真結(jié)果及分析 三角波信號發(fā)生器的仿真結(jié)果及分析 (1)當(dāng)脈沖f從0變?yōu)?時,n由11111000跳變?yōu)?1111111,并且執(zhí)行減8的操作,然后把改變后的n送到輸出y,三角波信號的仿真結(jié)果如圖4-1所示。圖42 三角波仿真圖二 正弦波信號發(fā)生器的仿真結(jié)果及分析正弦波信號發(fā)生器是通過定義正弦數(shù)據(jù)表,每到一個脈沖,逐次查找并輸出相應(yīng)的正弦數(shù)據(jù),生成了正弦波形。如果tmp達到63時則清0,否則tmp就做加1的操作。圖43 正弦波仿真圖 方波信號發(fā)生器的仿真結(jié)果及分析方波信號發(fā)生器是通過設(shè)定一個變量t,每到一個脈沖,檢測它是否小于31,若小于31,則把高電平送到輸出,并對t+1,否則就輸出低電平,并賦值t為0,生成了方波信號。圖44 方波仿真圖一(2)當(dāng)a由0變?yōu)?時,q為最大值,其仿真結(jié)果如圖4-5所示。本設(shè)計運用VHDL語言提供了每個模塊的程序代碼,從而實現(xiàn)了函數(shù)信號發(fā)生器的設(shè)計及通過一個開關(guān)控制波形的輸出。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。一開始對設(shè)計課題不理解,以及對設(shè)計軟件和硬設(shè)計語言的不熟練,導(dǎo)致了整個設(shè)計時間上的延長。于是就去問老師和同學(xué),在老師的指導(dǎo)下和同學(xué)們的幫助下,漸漸地也就對設(shè)計開始熟悉起來。完全體現(xiàn)出了用Quartus II軟件設(shè)計電子器件的快遞、方便等等優(yōu)勢。因此,采用基于FPGA的Quartus II設(shè)計的函數(shù)信號發(fā)生器簡單快捷且方便可調(diào),其修改和擴充功能強大,設(shè)計達到所需要的函數(shù)信號發(fā)生器,其開發(fā)及生產(chǎn)價值很大。并且在做畢業(yè)設(shè)計的過程中,不斷指導(dǎo)我程序地編寫規(guī)則與注意事項,以及論文格式上的要求等,讓我避免了設(shè)計過程中的許多錯誤。感謝一起學(xué)習(xí)奮斗的同學(xué),在學(xué)習(xí)與討論的過程中,讓我感受到了你們學(xué)習(xí)的細心與耐心。再次感謝你們,感謝老師的悉心指導(dǎo)和同學(xué)們的熱心幫