基于vhdl的函數信號發(fā)生器的設計畢業(yè)設計_第1頁
已閱讀1頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢</b></p><p><b>  業(yè)</b></p><p><b>  論</b></p><p><b>  文</b></p><p>  學 院: </p>

2、<p>  專業(yè)班級: </p><p>  學 號: </p><p>  姓 名: </p><p>  指導教師: </p><p>  輔導教師:

3、 </p><p>  ________~________學年</p><p>  ________年____月 至 ________年____月</p><p>  基于 VHDL 的函數信號發(fā)生器的仿真設計</p><p>  【摘 要】數字技術和計算機技術已經廣泛運用于工業(yè)、農業(yè)、醫(yī)學、教育、軍事、生活等各個領域,其應用之深之廣令人

4、驚嘆。電子設計自動化技術已日趨成為現代電子設計技術的核心,這種技術又稱為 EDA(Electronic Design Automation)技術。EDA 技術基于硬件描述語言 HDL。VHDL 是 HDL 的一種,并廣泛應用在電子設計中。鋸齒波、三角波、方波、正弦波等多種波形均可以從函數信號發(fā)生器中產生。我們在電路實驗中也廣泛運用到函數信號發(fā)生器。本文基于 VHDL 語言設計各個波形產生模塊,然后在 QUARTUS II 軟件上實現波形

5、的編譯及仿真,通過四選一數據選擇器選擇輸出三角波、鋸齒波、矩形波或正弦波中的一種規(guī)定波形,并采用調頻模塊和調幅模塊進行調頻調幅,可以產生多種波形。</p><p>  【關鍵詞】:函數信號發(fā)生器;EDA 技術;VHDL;QUARTUS II 軟件</p><p><b>  目錄</b></p><p>  1 基于VHDL的函數信號發(fā)生器的設

6、計 …………………………………………</p><p>  1.1信號發(fā)生器的發(fā)展現狀……………………………………………………</p><p>  1.2研究信號發(fā)生器目的和意義………………………………………………</p><p>  1.3主要研究設計內容、關鍵問題及解決思路………………………………</p><p>  1.3.1主要研究內容

7、…………………………………………………………</p><p>  1.3.2關鍵問題………………………………………………………………</p><p>  1.3.3解決思路………………………………………………………………</p><p>  2系統(tǒng)設計 ………………………………………………………………………</p><p>  2.1設計要求

8、與任務……………………………………………………………</p><p>  2.2設計方案……………………………………………………………………</p><p>  2.3相關模塊介紹………………………………………………………………</p><p>  2.3.1時鐘脈沖與復位………………………………………………………</p><p>  2.3

9、.2調頻與調幅……………………………………………………………</p><p>  2.4相關組合對應關系…………………………………………………………</p><p>  3 系統(tǒng)仿真 ………………………………………………………………………</p><p>  3.1相關工具簡介………………………………………………………………</p><p>

10、  3.2波形數據產生模塊…………………………………………………………</p><p>  3.2.1鋸齒波…………………………………………………………………</p><p>  3.2.2三角波…………………………………………………………………</p><p>  3.2.3方波……………………………………………………………………</p><p

11、>  3.2.4正弦波…………………………………………………………………</p><p>  4 調控模塊 ………………………………………………………………………</p><p>  4.1波形輸入控制模塊…………………………………………………………</p><p>  4.2波形輸出控制模塊…………………………………………………………</p>

12、<p>  4.3頻率控制模塊………………………………………………………………</p><p>  4.4幅度控制模塊………………………………………………………………</p><p>  5 結果分析………………………………………………………………………</p><p>  6 結論 ……………………………………………………………………………</p&

13、gt;<p><b>  前言</b></p><p>  信號發(fā)生器也被稱為信號源或振蕩器,被廣泛應用于生產實踐與科學技術。設計方面,函數波形發(fā)生器分為模擬及數字合成式。</p><p>  函數發(fā)生器,又稱波形發(fā)生器。它能產生某些特定的周期性時間函數波形(主</p><p>  是正弦波、方波、三角波、鋸齒波和脈沖波等)信號。

14、頻率范圍可從幾毫赫甚幾微赫的超低頻直到幾十兆赫。除供通信、儀表和自動控制系統(tǒng)測試用外,還泛用于其他非電測量領域。函數信號發(fā)生器實物圖如圖 1 所示。</p><p>  本設計基于 VHDL 來設計制作多功能函數信號發(fā)生器。該信號發(fā)生器可以生鋸齒波、三角波、方波、正弦波形中的任意一種。同時具有幅度、頻率可的功能,其中調幅分為 1、1/2、1/4、1/8 調幅,調頻分為 2、4、8、16 分頻。</p>

15、<p>  圖 1 函數信號發(fā)生器</p><p>  1 信號發(fā)生器的了解 </p><p>  1.1信號發(fā)生器的發(fā)展現狀</p><p>  信號發(fā)生器也叫波形發(fā)生器,它是一種信號源。需用到波形發(fā)生器的地方很多,包括電參數的測量。信號發(fā)生器在通信、雷達和現代儀器儀表等方面應用普及,在電子測量設備中需提供準確技術要求,是最普通、最基本也是應用最廣

16、泛的電子儀器之一。</p><p>  在現代的電子測量中,我們之所以不會選用傳統(tǒng)的信號發(fā)生器,是因為它們獲得所需頻率主要依靠諧振法。它們具有較寬的頻率范圍,并且結構簡單。這種信號發(fā)生器無法生成任意波形,其頻率穩(wěn)定性和準確度差。</p><p>  在這現代電子技術飛速發(fā)展的時代,波形發(fā)生器不僅要求能產生鋸齒波,方波,三角波,正弦波等標準波形,還可根據要求產生任意波形,要求輸出波形的質量好

17、,準確度、穩(wěn)定度及分辨率高,頻率轉換速度快,輸出頻率范圍寬且波形相位連續(xù)等。這些高性能要求的提出,促進了設計者對信號發(fā)生器的進一步研制。當前信號發(fā)生器的總趨勢是向著寬頻率,高精度,多功用,自動化和智能化發(fā)展的。</p><p>  我國已經開始研制函數信號發(fā)生器,并取得了可喜的成績。但總的來說,我國的函數信號發(fā)生器還沒有形成真正的產業(yè)。就目前國內的成熟產品來看,多為一些PC儀器插卡,獨立的儀器和VXI系統(tǒng)的模塊很

18、少,并且我國目前在函數信號發(fā)生器的種類和性能與國外同類產品存在較大的差距,因此加緊對函數信號發(fā)生器的研制顯得迫在眉睫。</p><p>  1.2 研究信號發(fā)生器目的和意義</p><p>  函數信號發(fā)生器作為一種常見的電子儀器設備,既能夠構成獨立的信號源,也是高性能的網絡分析儀,頻譜儀以及自動測試裝備的組成部分。函數信號發(fā)生器是各種測試和實驗過程中不可缺少的工具,在通信,測量,雷達,控

19、制等領域應用十分廣泛。不論是在生產,科研和教學上,函數信號發(fā)生器都是電子工程師信號仿真實驗的最佳工具。而且,函數信號發(fā)生器的設計方法越來越多,設計技術也越來越先進,隨著我國經濟和科技的飛速發(fā)展,對相應的測試儀器和測試手段也提出了更高的要求,因此開發(fā)研究函數信號發(fā)生器具有重大的意義。</p><p>  在如今的社會,電子科技發(fā)展迅猛,傳統(tǒng)的模擬振蕩電路已經滿足不了現代電子技術的需求,由純粹物理器件構成的傳統(tǒng)的設計

20、方法存在許多弊端,如:體積較大,重量較沉,移動不方便,信號失真大,波形較為單一,波形形狀調節(jié)過于死板,無法滿足用戶對精度,便攜性,穩(wěn)定性等的要求。研究設計出具有頻率穩(wěn)定,準確,波形質量好,輸出頻率范圍寬,便攜性好的函數信號發(fā)生器具有更好的市場前景。</p><p>  目前市場上的信號發(fā)生器大多由純硬件搭接而成,通常是單函數發(fā)生器,而且頻率不高,失真大,工作不穩(wěn)定,不易調試,用集成電路芯片的函數信號發(fā)生器,可以達

21、到很高的頻率,而且可以產生多種波形的信號,但是電路復雜不易調試,本次設計基于VHDL語言,利用QuartusII開發(fā)環(huán)境,完成信號發(fā)生器的編譯與仿真,可以通過四選一數據選擇器選擇輸出四種波形中的任意一種,并具有一定的調頻調幅功能。</p><p>  1.3 主要研究(設計)內容,關鍵問題及解決思路</p><p>  1.3.1 主要研究內容</p><p>  

22、基于VHDL語言設計完成出一個函數信號發(fā)生器,通過對輸入信號的選擇,則確定輸出鋸齒波,三角波,方波,正弦波四種信號中的任意一種。這種數據選擇可以通過四選一數據選擇器來實現。設計中加入調頻調幅模塊,形成頻率,幅度可控的函數信號發(fā)生器。波形選擇及頻率,幅度選擇采用產生高低電平的撥碼開關來控制。本次設計通過QuartusII軟件進行波形的仿真,從而完成整個設計。</p><p><b>  本次設計的任務:&

23、lt;/b></p><p>  (1)對函數信號發(fā)生器完成VHDL語言描述;</p><p>  (2)利用EDA開發(fā)系統(tǒng)及QuartusII軟件實現函數信號發(fā)生器的設計;</p><p> ?。?)根據整體電路的工作原理,完成各個子模塊的設計與實現;</p><p>  (4)該函數信號發(fā)生器能夠產生鋸齒波,三角波,方波,正弦波四種

24、信號;</p><p> ?。?)波形之間的轉換及波形信號的頻率和幅度可以通過按鍵進行調節(jié)。</p><p>  本次設計的函數信號發(fā)生器系統(tǒng)主要分為輸入部分,頻率調節(jié)部分,幅度調節(jié)部分和波形轉換部分。系統(tǒng)原理框圖如下圖2所示:</p><p><b>  圖2</b></p><p>  1.3.2 關鍵問題</

25、p><p>  本次設計是基于VHDL的函數信號發(fā)生器的設計,因此,波形數據產生模塊和波形輸入控制模塊的設計及流程圖在本系統(tǒng)中具有相當重要的地位,波形數據產生模塊和波形輸入控制模塊設計的不合理將會增加開發(fā)的難度和復雜度,甚至整個設計失敗。所以,如何設計出合理的波形數據產生模塊和波形輸入控制模塊,是研究本系統(tǒng)的關鍵。</p><p>  在波形數據產生模塊和波形輸入控制模塊的設計之前,就需要了解

26、各個功能模塊之間的關系,通過各個模塊之間的關系來設計合理的波形數據產生模塊和波形數據輸入模塊。我們所需的四種波形信號通過VHDL語言編譯設計出來,并設計出合理的波形輸入控制模塊。</p><p>  1.3.3 解決思路</p><p>  波形數據產生模塊利用VHDL語言編譯設計出我們所需要的四種波形,鋸齒波,三角波,方波,正弦波,通過QuaryusII軟件編譯調試,調試成功后下載至實驗

27、裝置的芯片上。</p><p>  波形輸入控制模塊由一個四選一的數據選擇器端組成。其設計流程圖如下圖3:</p><p><b>  圖3</b></p><p><b>  2 系統(tǒng)設計</b></p><p>  2.1 設計要求與任務</p><p>  2.1.1本

28、次設計的要求:</p><p>  通過對輸入信號的選擇,則確定輸出鋸齒波、三角波、方波、正弦波四種信號中的任意一種。</p><p>  設計中加入調頻調幅模塊,形成幅度、頻率可控的函數信號發(fā)生器數據,選擇可以通過 4 選 1 數據選擇器來實現。</p><p>  波形選擇及頻率、幅度選擇采用產生高低電平的撥碼開關來控制。</p><p>

29、;  通過 Altera 公司的 Quartus I 9.1 軟件進行波形的仿真,從而完成整個設計。</p><p>  2.1.2本次設計的任務:</p><p> ?。?)對函數信號發(fā)生器完成 VHDL 語言描述;</p><p> ?。?)利用 EDA 開發(fā)系統(tǒng)及 Quartus I 9.1 軟件實現函數信號發(fā)生器的設計;</p><p&g

30、t; ?。?)根據整體電路的工作原理,完成各個子模塊的設計與實現;</p><p> ?。?)該函數信號發(fā)生器能夠產生鋸齒波、三角波、方波、正弦波四種信號;</p><p>  (5)波形之間的轉換及波形信號的頻率和幅度可通過按鍵進行調節(jié)。</p><p><b>  2.2 設計方案</b></p><p>  函數信

31、號發(fā)生器有多種實現方法,但我們要選擇一種精度高且易于實現的方</p><p>  法,以此來提高本次設計的實用性。</p><p>  方案一:用分立元件組成的函數發(fā)生器。</p><p>  方案二:可以由晶體管、運放 IC 等通用器件制作,更多的則是用專門的函數信號發(fā)生器 IC 產生。</p><p>  方案三:通過單片機控制 D/A,

32、輸出四種波形。</p><p>  方案四:利用專用直接數字合成 DS 芯片的函數發(fā)生器,能產生任意波形并達到很高的頻率。</p><p>  方案五:用 VHDL 語言編寫程序,調試成功后下載至實驗裝置的芯片上。此種方案完全可以生成設計要求的 4 種波形,而且通過軟件仿真可以直觀的觀測到輸出的波參數,方便調試和更改波形參數,外圍電路簡單,減少器件損耗,精度高。因此在本次設計中我們選擇了

33、VHDL。本次設計基于 VHDL 語言來設計制作一個函數信號發(fā)生器,利用 Quartus II開發(fā)環(huán)境進行編譯仿真,使該信號發(fā)生器可以產生鋸齒波、三角波方波、正弦波形中的任意一種。同時具有幅度、頻率可調的功能,其中調幅分為 1、1/2、1/4、1/8 調幅,調頻分為 2、4、8、16 分頻。因此,本次設計的函數信號發(fā)生器系統(tǒng)主要分為輸入部分、頻率調節(jié)部分、幅度調節(jié)部分和波形轉換部分。</p><p>  2.3

34、相關模塊介紹</p><p>  2.3.1 時鐘脈沖與復位</p><p>  時鐘脈沖(clk):脈沖信號是一個按一定電壓幅度,一定時間隔連續(xù)發(fā)出的脈沖信號。此信號在同步電路當中,扮演計時器的角色,并組成電路的電子組件。只有當同步信號到達時,相關的觸發(fā)器才按輸入信號改變輸出狀態(tài),因此使得相關的電子組件得以同步運作[8,9]。復位(rest):在電路中有時會有清空數據的需要,此時復位鍵就

35、可以使其回到某種狀態(tài)。</p><p>  2.3.2 調頻與調幅</p><p>  調頻(FM),就是高頻載波的頻率不是一個常數,是隨調制信號而在一定范圍內變化的調制方式,其幅值則是一個常數。與其對應的,調幅(AM)就是載頻的頻率是不變的,其幅值隨調制信號而變[10]。本次設計中調幅分為1、/2、1/4、1/8調幅,調頻分為2、4、8、16分頻。</p><p>

36、;  2.4 相關組合對應關系</p><p>  本次設計中 K1鍵則為 rest 復位鍵,K2、K3鍵則為頻控按鍵,K4、K5鍵則為幅控按鍵。K6、K7鍵則為波形選擇按鍵。各組合鍵的鍵值與對應波形關系如圖4,圖5,圖6所示:</p><p><b>  圖4 頻控按鍵</b></p><p><b>  圖5 幅控按鍵<

37、/b></p><p><b>  圖6波形選擇按鍵</b></p><p><b>  3 系統(tǒng)仿真</b></p><p>  3.1 相關工具簡介</p><p>  VHDL:一種硬件描述語言,于 1983 年由美國防部(DOD)發(fā)起創(chuàng)建,由 IE(Instiue of Electri

38、alnd Electronics Engiers)進一步發(fā)展,并在 1987 年發(fā)布“IE 標準 1076”版本。自此之后,各種各樣的新的 VHDL 設計環(huán)境相繼推出。VHDL 廣泛應用于電子設計領域,并逐步取代了原有的非標準硬件描述語言。VHDL 支持的設計方法種類多樣,自頂向下(Top to Down)和基于庫(LibrayBased)便是兩種典型的設計方法。VHDL 使用的源代碼簡潔明了,不管是簡單</p><

39、p>  的還是復雜的設計,VHDL 都可以清楚的描述并完整它。隨機電路,同步電路抑或是異步電路,在設計方面使用 VHDL 則顯得方便多了。VHDL 具有功能強大,設計靈活的特點。它可以通過層細化的方式生成不同的模塊,再把各個模塊連接成頂層電路,供以后的設計使用。</p><p>  QUARTUS II:基于 Altera 公司的 Quartus II 軟件。Altera 公司的 Quartus II 是一

40、種可編程邏輯的設計環(huán)境,因為其強大的設計能力和易于使用的直觀的界面,而受到越來越多的數字系統(tǒng)設計人員的歡迎。Quartus II 經過不斷升級,目前最高版本已經升到 12.。然而有的版本的Quartus II 有明顯的漏洞,所以無法深入。本次設計將使用 Quartus II 9.1 版本。</p><p>  Quartus II 開始界面如圖 7 所示。</p><p>  圖7 Qu

41、artusI I 9.1版本</p><p>  3.2 波形數據產生模塊</p><p><b>  3.2.1 鋸齒波</b></p><p>  鋸齒波的設計(這里只設計鋸齒波的遞增波形)是基于 VHDL 語言進行編程,主要使用到 if 語句。clk 為上升沿時,計數器才加1,否則與前一狀態(tài)保持不變。并且對其進行0-25的序列遞增,因此輸

42、出信號周期為時鐘周期的256倍。設計流程圖如圖8所示:</p><p>  圖8 鋸齒波設計流程圖</p><p>  按流程圖進行設計,并對此封裝成塊。封裝圖如圖9所示:</p><p>  圖9 鋸齒波封裝圖塊</p><p>  本文設計的函數信號發(fā)生器的頻率即晶振頻率20MHz,其周期則是50ns。本次設計中設置不同的時鐘周期,以

43、輸出不同頻率的波形,再通過二、四、八、十六分頻來得到更多的波形,便于對輸出波形的仿真及對其周期的清晰觀察。本文設計的函數信號發(fā)生器的幅度由硬件的幅度決定。通過對程序語句的調試,設置時鐘周期為10ns,得到如圖10所示波形圖:</p><p>  圖10 鋸齒波信號仿真</p><p><b>  3.2.2 三角波</b></p><p> 

44、 三角波的設計同樣基于 VHDL 語言,主要使用 if 語句,先進行0-255的序列遞增,然后再對得到的序列進行255-0的序列遞減。而三角波則正好是遞增波形與遞減波形相結合而得到的。程序中 a 為內部節(jié)點信號,同時也作為遞減信號。當 a 為0時,為遞增階段,計數器加1;a 為1時,為遞減階段,計數器減1。</p><p>  設計流程圖如圖11所示:</p><p>  圖11 三角波

45、設計流程圖</p><p>  按流程圖進行設計,并對此封裝成塊。封裝圖如圖12所示:</p><p>  圖12 三角波封裝圖塊</p><p>  三角波程序調試至無語法錯誤后,設時鐘周期為50ns。仿真得到如圖13所示</p><p><b>  波形圖:</b></p><p>  圖1

46、3 三角波信號仿真</p><p><b>  3.2.3 方波</b></p><p>  方波的設計也是基于 VHDL 語言,主要采用 if 語句編寫程序,每次當計數第64次時便翻轉一次,由此產生方波信號,其周期為輸入時鐘信號周期的128倍。程序語句中把 a 同樣設置成內部節(jié)點信號,計數器從0計到15后一個循環(huán),立即對 a 取反,則 a 會在0與1之間變換。&l

47、t;/p><p>  設計流程圖如圖14,圖15所示:</p><p>  圖14 方波設計流程圖(1)</p><p>  圖15方波設計流程圖(2)</p><p>  按流程圖進行設計,并對此封裝成塊。封裝圖如圖16所示:</p><p>  圖16 方波封裝圖塊</p><p>  方波

48、調試后,設置時鐘周期為50ns,得到波形圖如圖17所示:</p><p><b>  圖17方波信號仿真</b></p><p><b>  3.2.4 正弦波</b></p><p>  正弦波的設計基于 VHDL 語言,編程語句中涉及到 if 語句與 case 語句。由于 VHDL 語言程序仿真結果為數字信號波形,而正

49、弦波是模擬信號波形。因此,實驗中采取對信號進行等間距采樣,來等效正弦信號的波形。程序的采樣點為64個,等效為近似的正弦波形。</p><p>  設計流程圖如圖18所示:</p><p>  圖18 正弦波設計流程圖</p><p>  按流程圖進行設計,并對此封裝成塊。封裝圖如圖19所示:</p><p>  圖19 正弦波封裝圖塊&l

50、t;/p><p>  對正弦波程序進行調試設置時鐘頻率為30ns得到如圖20所示波形圖:</p><p>  圖20 正弦波信號仿真</p><p>  程序根據正弦波采樣取點,得到了以上仿真波形。因為正弦波形仿真中的取點是按照正弦函數圖取得,無法找到準確的規(guī)律,也就不能用循環(huán)來完成,相對于前面鋸齒波、三角波及方波等波形的設計較難一些。因此,程序中還會運用到 case

51、 語句,通過查表的方法來實現輸出正弦波。</p><p><b>  4 調控模塊</b></p><p>  4.1 波形輸入控制模塊</p><p>  波形輸入控制模塊由一個4選1的數據選擇器端組成。</p><p>  設計流程圖如圖21所示:</p><p>  圖21 波形輸入控制設

52、計流程圖</p><p>  按流程圖進行設計,并對此封裝成塊。</p><p>  封裝圖如圖22所示:</p><p>  圖22 波形輸入控制封裝圖塊</p><p>  波形輸入控制模塊經編譯無誤后。</p><p>  得如圖23所示仿真圖:</p><p>  圖23 波形輸入控

53、制模塊波形仿真</p><p>  當 a1010時,選擇 y2。</p><p>  4.2 波形輸出控制模塊</p><p>  在本設計中采用使用軟件編程生成模塊的方式實現數據四選一的功能。程序中,為每一種波形分配一個通道,并為之賦予唯一的代碼,當在 s0,1端輸入不同的代碼時,被選中的通道打開,響應的波形發(fā)生模塊產生波形。</p><p&

54、gt;  設計流程圖如圖24所示:</p><p>  圖24 四選一數據選擇器設計流程圖</p><p>  按流程圖進行設計,并對此封裝成塊。</p><p>  封裝圖如圖25所示:</p><p>  圖25 四選一數據選擇器封裝圖塊</p><p>  波形輸出控制模塊經編譯無誤后得到如圖26所示仿真圖:

55、</p><p>  圖26 波形輸出控制模塊波形圖</p><p>  當 s01=‘0’時,選擇 d0通道。</p><p>  4.3 頻率控制模塊</p><p>  頻率控制單元中包括一個分頻模塊和一個調頻模塊,調頻模塊為四選一數據</p><p>  選擇器,分頻模塊將輸入的時鐘信號進行 2、4 8、16

56、 分頻。</p><p>  設計流程圖如圖27所示:</p><p>  圖27 頻率控制流程圖</p><p>  按流程圖進行設計,并對此封裝成塊。</p><p>  封裝圖如圖28,圖29所示:</p><p>  圖28 分頻封裝圖塊 圖 29 調頻封裝圖塊</p>

57、;<p>  頻率控制模塊經編譯無誤后,得到如圖30所示仿真圖:</p><p>  圖30 分頻模塊波形仿真</p><p>  4.4 幅度控制模塊</p><p>  幅度控制模塊中含有一個除法模塊(這里稱作 tiaofu 模塊),它將輸入的信號進行1、1/2、1/4、1/8調幅;同時包含一個選擇模塊(這里稱作 scope 模塊),是一個四選一

58、數據選擇器。</p><p>  設計流程圖如圖31所示:</p><p>  圖31 幅度控制流程圖</p><p>  按流程圖進行設計,并對此封裝成塊。封裝圖如圖32,圖33所示:</p><p>  圖32 調幅封裝圖塊 圖33 選擇封裝圖塊</p><p&g

59、t;  幅度控制模塊經編譯無誤后,得到如圖34所示仿真圖:</p><p>  圖34 幅度控制模塊波形仿真</p><p>  當 scope_mode1scope_mode0=1時,進行1/8調幅。</p><p><b>  5 結果分析</b></p><p>  將上述各個模塊封裝成為模塊文件,供頂層電路調用

60、??梢缘玫剑?lt;/p><p>  如圖35所示系統(tǒng)頂層電路圖:</p><p>  圖35 系統(tǒng)頂層電路圖</p><p>  本次設計共可產生波形4種,調幅方法4種,調頻方法4種,因此共可仿真出:4* 4=64個圖。 這里每種波形只截取4種仿真圖:</p><p>  1.圖36 為鋸齒波信號仿真圖(設置時鐘周期為4ns)&

61、lt;/p><p>  (a) 鋸齒波信號 2分頻 不調幅 (b) 鋸齒波信號 2分頻 1/2調幅</p><p>  (c) 鋸齒波信號 不調幅 8分頻 (d) 鋸齒波信號 不調幅 16分頻 </p><p>  2.圖37 為三角波信號仿真圖(設置時鐘周期為4ns)</p><p>  (a)

62、 三角波信號 二分頻 不調幅 (b) 三角波信號 二分頻 1/2調幅</p><p>  (c) 三角波信號 不調幅 8分頻 (d) 三角波信號 不調幅 16分頻</p><p>  3.圖38為方波信號仿真圖(設置時鐘周期為80ns)</p><p>  (a) 方波信號 二分頻 不調幅

63、 (b) 方波信號 二分頻 1/2調幅</p><p>  (c) 方波信號 不調幅 8分頻 (d) 方波信號 不調幅 16分頻</p><p>  4.圖39 為正弦波信號仿真圖(設置周期為10ns)</p><p>  (a) 正弦波信號 二分頻 不調幅 (b

64、) 正弦波信號 二分頻 1/2調幅</p><p>  (c) 正弦波信號 不調幅 8分頻 (d) 正弦波信號 不調幅 16分頻</p><p>  為清楚了解波形的調頻調幅情況,特在這里貼出方波信號的三種仿真圖,如</p><p>  圖40 圖41 圖42所示</p><p>  圖40 方波信號

65、2分頻 1/8調幅仿真圖</p><p>  圖41 方波信號 4分頻 1/8調幅仿真圖</p><p>  圖42 方波信號 4分頻 不調幅仿真圖</p><p><b>  6 結 論</b></p><p>  本次設計是基于 VHDL 語言的函數信號發(fā)生器的設計,通過 Quartus I 軟件進行編譯仿真,使

66、函數信號發(fā)生器能夠產生鋸齒波、三角波、方波、正弦波四種波形。基于 VHDL 語言先是描述底層各個獨立的模塊,然后把各個封裝圖塊調用出,設計成頂層電路圖。然后通過4選1數據選擇器的設計,實現對需要波形的選擇。設計分各個模塊,在對一個模塊進行編寫描述時就立即對其進行編譯并修改,以免這個模塊在連接總電路時存在調試困難的情況。并且,VHDL 語言也不得出現語法使用錯誤,否則將影響后期設計的完成,影響設計結果。本次設計按照設計任務的要求總算是設計

67、實現了功能,但是期間也碰到過遺漏的問題。在設計過程當中,遇到了軟件操作不熟練,程序編寫不規(guī)范等諸多問題,通過對問題的總結分析得出,應用軟件的主要功能必須熟練操作,才能提高工作效率,需要規(guī)范操作的地方必須嚴格按照使用說明操作,避免由于軟件使用不當造成的錯誤產生。程序的編寫,包括格式、語句、用法等都需要嚴格遵守要求,對各個模塊、端口、新建的工程名、實體名以及各個信號變量的命名都應當反映實際意義,方便再次檢查時不會混淆。本次設計過程中,我收獲

68、頗多。通過本次設計,</p><p><b>  致 謝</b></p><p>  感謝我的論文指導老師—陳希湘老師對我在學術上的指導和幫助,使我不僅學到了知識,而且學到了做人的準則和嚴謹的治學作風。他嚴肅的科學態(tài)度,嚴謹的治學精神,精益求精的工作風,深地感染和激勵著我。正是由于老師同學的幫助和支持,我才能克服一個一個的困難和疑惑,直至本文的順利完成。在此,我表示衷

69、心的感謝和崇高的敬意!</p><p><b>  附 錄</b></p><p><b>  1 鋸齒波</b></p><p>  libray ie;</p><p>  use ie.std_logic_164.al;</p><p>  use ie.std_log

70、ic_unsigned.al;</p><p>  entiy juchis</p><p>  port (clk,rest:in std_logic;</p><p>  q:out sd_logic_vector(7 downto 0);</p><p>  end entiy juchi;</p><p>  

71、architecure bhav of juchis</p><p><b>  begin</b></p><p>  proces(clk,rest)</p><p>  varible tmp: std_logic_vector(7 downto 0);</p><p><b>  begin</b

72、></p><p>  if rest='1 then</p><p>  tmp:="00000000";</p><p><b>  else</b></p><p>  tmp:=tmp+1;</p><p><b>  end if;</b

73、></p><p><b>  end if;</b></p><p><b>  q<=tmp;</b></p><p>  end proces;</p><p>  end behav;</p><p><b>  2 三角波</b>&

74、lt;/p><p>  libray ie;</p><p>  use ie.std_logic_164.al;</p><p>  use ie.std_logic_unsigned.al;</p><p>  entiy sanjiao is</p><p>  port(clk,rest:in std_logic;

75、</p><p>  q: out sd_logic_vector(7 downto 0);</p><p>  end sanjiao;</p><p>  architecure bhav of sanjiao is</p><p><b>  begin</b></p><p>  proc

76、es(clk,rest)</p><p>  varible tmp : std_logic_vector(7 downto 0);</p><p>  varible a : std_logic;</p><p><b>  begin</b></p><p>  if(rest='1) then</p&

77、gt;<p>  tmp:="00000000";</p><p>  elsif clk'evnt and clk='1 then</p><p>  if a='0 then</p><p>  if tmp="11111110" then</p><p>  

78、tmp:="11111111";</p><p><b>  a:='1;</b></p><p><b>  else</b></p><p>  tmp:=tmp+1;</p><p><b>  end if;</b></p>&

79、lt;p><b>  else</b></p><p>  if tmp="0001"then</p><p>  tmp:="000";</p><p><b>  a:='0;</b></p><p><b>  els</b

80、></p><p>  tmp:=tmp-1;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  q&l

81、t;=tmp;</b></p><p>  end proces;</p><p>  end behav;</p><p><b>  3 方波</b></p><p>  libray ie;</p><p>  use ie.std_logic_164.al;</p>

82、<p>  use ie.std_logic_arith.al;</p><p>  use ie.std_logic_unsigned.al;</p><p>  entiy fangbo is</p><p>  port(clk,rest : in std_logic;</p><p>  q : out sd_logic

83、_vector(7 downto 0);</p><p>  end fangbo;</p><p>  architecure bhav ofangbo is</p><p>  signal: std_logic;</p><p><b>  begin</b></p><p>  proce

84、s(clk,rest)</p><p>  varible tmp: std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  if (rest='1) then</p><p><b>  a<='0;</b&g

85、t;</p><p>  elsif clk'evnt and clk='1 then</p><p>  if (tmp="1111")then</p><p>  tmp:="0000";</p><p><b>  els</b></p><

86、;p>  tmp:=tmp+1;</p><p><b>  end if;</b></p><p>  if (tmp<="1000")then</p><p><b>  a<='1;</b></p><p><b>  els</b

87、></p><p><b>  a<='0;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end proces;</p><p>  proces

88、(clk,a)</p><p><b>  begin</b></p><p>  if clk'evnt and clk='1 th</p><p>  if a='1then</p><p>  q<="11111111";</p><p>&

89、lt;b>  els</b></p><p>  q<="00000000";</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end proces;</p><

90、;p>  end behav;</p><p><b>  4 正弦波</b></p><p>  libray ie;</p><p>  use ie.std_logic_164.al;</p><p>  use ie.std_logic_unsigned.al;</p><p>  

91、entiy zhengxian is</p><p>  port(clk,rest:in std_logic;</p><p>  d_out: out inegrange 0 to 25);</p><p>  end zhengxian ;</p><p>  architecure bhav of zhengxian is</p

92、><p><b>  begin</b></p><p>  proces(rest,clk)</p><p>  varible tmp: integrange 0 to 63;</p><p><b>  begin</b></p><p>  if rest='1t

93、hen</p><p><b>  d_out<=0;</b></p><p>  elsif clk'evnt and clk='1then</p><p>  if tmp=63 then</p><p><b>  tmp:=0;</b></p><p

94、><b>  els</b></p><p>  tmp:=tmp+1;</p><p><b>  end if;</b></p><p>  case tmp is</p><p>  when 0=>d_out<=178;when 01=>d_out<=17;wh

95、en 02=>d_out<=176;</p><p>  when 03=>d_out<=175;when 04=>d_out<=173;when 05=>d_out<=170;</p><p>  when 06=>d_out<=167;when 07=>d_out<=163;when 08=>d_out<

96、;=159;</p><p>  when 09=>d_out<=154;when 10=>d_out<=149;when 1=>d_out<=143;</p><p>  when 12=>d_out<=137;when 13=>d_out<=13;when 14=>d_out<=125;</p>&l

97、t;p>  when 15=>d_out<=17;when 16=>d_out<=12;when 17=>d_out<=106;</p><p>  when 18=>d_out<=10;when 19=>d_out<=94; when 20=>d_out<=8;</p><p>  when 21=>d_

98、out<=82; when 2=>d_out<=7; when 23=>d_out<=72;</p><p>  when 24=>d_out<=67; when 25=>d_out<=63; when 26=>d_out<=60;</p><p>  when 27=>d_out<=57; when 28=&g

99、t;d_out<=54; when 29=>d_out<=52;</p><p>  when 30=>d_out<=51; when 31=>d_out<=50; when 32=>d_out<=50;</p><p>  when 3=>d_out<=51; when 34=>d_out<=52; when

100、35=>d_out<=54;</p><p>  when 36=>d_out<=57; when 37=>d_out<=60; when 38=>d_out<=63;</p><p>  when 39=>d_out<=67; when 40=>d_out<=72; when 41=>d_out<=7;&

101、lt;/p><p>  when 42=>d_out<=82; when 43=>d_out<=8; when 4=>d_out<=94;</p><p>  when 45=>d_out<=10;when 46=>d_out<=106;when 47=>d_out<=12;</p><p>  w

102、hen 48=>d_out<=19;when 49=>d_out<=125;when 50=>d_out<=13;</p><p>  when 51=>d_out<=137;when 52=>d_out<=143;when 53=>d_out<=149;</p><p>  when 54=>d_out<

103、=154;when 5=>d_out<=159;when 56=>d_out<=163;</p><p>  when 57=>d_out<=167;when 58=>d_out<=170;when 59=>d_out<=173;</p><p>  when 60=>d_out<=175;when 61=>d_

104、out<=176;when 62=>d_out<=17;</p><p>  when 63=>d_out<=178;when others=>nul;</p><p><b>  end case;</b></p><p><b>  end if;</b></p>&l

105、t;p>  end proces;</p><p>  end behav;</p><p>  5 波形輸入控制模塊</p><p>  libray ie;</p><p>  use ie.std_logic_164.al;</p><p>  use ie.std_logic_unsigned.al;&l

106、t;/p><p>  entiy xuanze is</p><p>  port(a0,1s:in std_logic;</p><p>  y0,1y2,3:out sd_logic);</p><p>  end xuanze;</p><p>  architecure bhav of xuanze is</

107、p><p>  signal:std_logic_vector(1 downto 0);</p><p>  signal cout:sd_logic;</p><p>  signal q:std_logic_vector(2 downto 0);</p><p><b>  begin</b></p>&l

108、t;p><b>  a<=a1&a0;</b></p><p><b>  proces()</b></p><p>  varible y:std_logic_vector(7 downto 0);</p><p><b>  begin</b></p><p

109、>  if(s='1)then</p><p><b>  q<=q+1;</b></p><p><b>  end if;</b></p><p>  if q="1" then</p><p><b>  cout<='1;<

110、;/b></p><p><b>  q<="0";</b></p><p><b>  els</b></p><p><b>  cout<='0;</b></p><p><b>  end if;</b>

111、;</p><p><b>  end if;</b></p><p>  end proces;</p><p><b>  proces(a)</b></p><p><b>  begin</b></p><p><b>  case a

112、 is</b></p><p>  when"0"=>y0<=cout;</p><p>  when"01"=>y1<=cout;</p><p>  when"10"=>y2<=cout;</p><p>  when"1

113、=>y3<=cout;</p><p>  when others=>nul;</p><p><b>  end case;</b></p><p>  end proces;</p><p>  end behav;</p><p>  6 4 選 1 數據選擇器</p

114、><p>  libray ie;</p><p>  use ie.std_logic_164.al;</p><p>  entiy mux41 is</p><p>  port(s0,1:in std_logic;</p><p>  d0,1d2,3:in std_logic_vector(7 downto 0)

115、;</p><p>  q:out sd_logic_vector(7 downto 0);</p><p>  end mux41;</p><p>  architecure bhav of mux41 is</p><p>  signal se:td_logic_vector(1 downto 0);</p><p

116、><b>  begin</b></p><p>  sel<=s1&s0;</p><p>  proces(s1,s0,d0,d1d2,d3)</p><p><b>  begin</b></p><p>  case sel is</p><p>

117、  when"0"=>q<=d0;</p><p>  when"01"=>q<=d1;</p><p>  when"10"=>q<=d2;</p><p>  when"1=>q<=d3;</p><p>  when o

118、thers=>nul;</p><p><b>  end case;</b></p><p>  end proces;</p><p>  end behav;</p><p><b>  7 分頻模塊</b></p><p>  libray ie;</p&

119、gt;<p>  use ie.std_logic_164.al;</p><p>  use ie.std_logic_arith.al;</p><p>  use ie.std_logic_unsigned.al;</p><p>  entiy fenpis</p><p>  port(clk : in std_log

120、ic;</p><p>  clk_div2 : out sd_logic;</p><p>  clk_div4 : out sd_logic;</p><p>  clk_div8 : out sd_logic;</p><p>  clk_div16 : out sd_logic);</p><p>  end

121、fenpi;</p><p>  architecure bhav ofenpis</p><p>  signal count : std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  proces(clk)</p><p&g

122、t;<b>  begin</b></p><p>  if (clk'evnt and clk='1) then</p><p>  if (count="11") then</p><p>  count <= (others =>'0);</p><p>&l

123、t;b>  els</b></p><p>  count <= count +1;</p><p><b>  end if ;</b></p><p><b>  end if ;</b></p><p>  end proces;</p><p>

124、;  clk_div2 <= count(0);</p><p>  clk_div4 <= count(1);</p><p>  clk_div8 <= count(2);</p><p>  clk_div16 <= count(3);</p><p>  end behav;</p><p&

125、gt;<b>  8 調頻選擇模塊</b></p><p>  libray ie;</p><p>  use ie.std_logic_164.al;</p><p>  entiy tiaopins</p><p>  port(s1,0: in std_logic;</p><p>  a

126、,bc,d: in std_logic;</p><p>  y: out sd_logic);</p><p>  end tiaopin;</p><p>  architecure bhav of tiaopins</p><p>  signal s:td_logic_vector(1 downto 0);</p>&l

127、t;p>  signal y_temp: std_logic;</p><p><b>  begin</b></p><p><b>  s<=s1&s0;</b></p><p>  proces(1,s0a,bc,d)</p><p><b>  begin<

128、;/b></p><p><b>  case is</b></p><p>  when "0"=>y_temp<=a;</p><p>  when "01"=>y_temp<=b;</p><p>  when "10"=&g

溫馨提示

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

評論

0/150

提交評論