版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計(jì)(論文)</b></p><p> 課程: EDA基 礎(chǔ) 課 程 設(shè) 計(jì) </p><p> 題目: 信 號(hào) 發(fā) 生 器 </p><p><b> 2015 年7 月</b></p><p>
2、<b> 信號(hào)發(fā)生器</b></p><p><b> 摘要</b></p><p> 隨著EDA技術(shù)以及大規(guī)模集成電路技術(shù)的迅猛發(fā)展,波形發(fā)生器的各方面性能指標(biāo)都達(dá)到了一個(gè)新的水平。Altera,Xilinx,AMD等公司都推出了比較好的CPLD和FPGA產(chǎn)品,并為這些產(chǎn)品的設(shè)計(jì)配備了設(shè)計(jì)、下載軟件,這些軟件除了支持圖形方式設(shè)計(jì)數(shù)字系統(tǒng)外
3、,還支持設(shè)計(jì)多種數(shù)字系統(tǒng)的語言,使數(shù)字系統(tǒng)設(shè)計(jì)起來更加容易。SOPC-NIOS EDA/SOPC實(shí)驗(yàn)開發(fā)系統(tǒng)是根據(jù)現(xiàn)代電子發(fā)展的方向,集EDA和SOPC系統(tǒng)開發(fā)為一體的綜合性實(shí)驗(yàn)開發(fā)系統(tǒng),除了滿足高校專、本科生和研究生的SOPC教學(xué)實(shí)驗(yàn)開發(fā)之外,也是電子設(shè)計(jì)和電子項(xiàng)目開發(fā)的理想工具。整個(gè)開發(fā)系統(tǒng)由核心板SOPC-NIOSII-EP2C35、SOPC開發(fā)平臺(tái)和擴(kuò)展板構(gòu)成,根據(jù)用戶不同的需求配置成不同的開發(fā)系統(tǒng)。采用CPLD/FPGA器件在
4、QuartuesII設(shè)計(jì)環(huán)境中用VHDL語言完成的波形發(fā)生器具有頻率穩(wěn)定性高,可靠性高,輸出波形穩(wěn)定等特點(diǎn)。本文介紹了基于EDA技術(shù)的波形發(fā)生器的研究與設(shè)計(jì)。</p><p> 在本課程設(shè)計(jì)中使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35開發(fā)板高速AD/DA轉(zhuǎn)換模塊等資源,運(yùn)用LPM-ROM制定的方法設(shè)計(jì)的波形發(fā)生器,利用4×4鍵盤陣列實(shí)現(xiàn)了正弦波,方波
5、,三角波,以及鋸齒波四種波形的輸出及頻率和幅度的控制,并利用液晶顯示模塊實(shí)現(xiàn)信號(hào)頻率、波形和幅度的顯示,經(jīng)過實(shí)際下載到FPGA實(shí)驗(yàn)板上,設(shè)計(jì)要求已經(jīng)完全實(shí)現(xiàn)。</p><p> 關(guān)鍵字:FPGA;VHDL;EDA;QUARUS2;多功能信號(hào)發(fā)生器</p><p><b> 目 錄</b></p><p> 1.信號(hào)發(fā)生器設(shè)計(jì)目的與設(shè)計(jì)的
6、意義……………………………………………1</p><p> 1.1信號(hào)發(fā)生器設(shè)計(jì)目的…………………………………………………………1</p><p> 1.2信號(hào)發(fā)生器設(shè)計(jì)的……………………………………………………………1</p><p> 2.信號(hào)發(fā)生器課程設(shè)計(jì)的內(nèi)容及相關(guān)要求………………………………………1</p><p> 3.信
7、號(hào)發(fā)生器設(shè)計(jì)的方案以及相關(guān)原理…………………………………………2</p><p> 3.1. 信號(hào)發(fā)生器設(shè)計(jì)的原理框圖……………………………………………2</p><p> 3.2 信號(hào)發(fā)生器的實(shí)現(xiàn)的方案………………………………………………2</p><p> 3.21 頻率產(chǎn)生模塊…………………………………………………………3</p>
8、<p> 3.22 鍵盤控制模塊…………………………………………………………3 </p><p> 3.23 波形控制模塊…………………………………………………………4</p><p> 3.24 16*16點(diǎn)陣顯示模塊和數(shù)碼管顯示模塊……………………………4</p><p> 3.25 用LPM-ROM制定的波形數(shù)據(jù)的文件模塊……………
9、………………5</p><p> 4.信號(hào)發(fā)生器的仿真結(jié)果及波形…………………………………………………5</p><p> 5 信號(hào)發(fā)生器設(shè)計(jì)的心得體會(huì)……………………………………………………8</p><p> 6. 信號(hào)發(fā)生器設(shè)計(jì)的參考文獻(xiàn)……………………………………………………9</p><p> 附錄A 信號(hào)發(fā)生器的原理總框
10、圖……………………………………………10</p><p> 附錄B 各個(gè)模塊的相關(guān)程序…………………………………………………11</p><p> B.1 頻率控制模塊的程序……………………………………………11</p><p> B.2 鍵盤控制模塊程序………………………………………………12</p><p> B.3
11、 波形控制模塊程序………………………………………………14</p><p> B.4 16*16點(diǎn)陣與數(shù)碼管顯示模塊…………………………………15</p><p> B.5 波形數(shù)據(jù)文件程序及數(shù)據(jù)………………………………………19</p><p> 1.多功能發(fā)生器設(shè)計(jì)目的與設(shè)計(jì)的意義</p><p><b>
12、; 1.1 設(shè)計(jì)目的</b></p><p> ?。?)掌握方波—三角波——正弦波函多功能發(fā)生器的原理及設(shè)計(jì)方法。</p><p> ?。?)掌握用VHDL語言來編寫相關(guān)程序。</p><p> ?。?)了解并熟悉EDA/SOPC系統(tǒng)開發(fā)平臺(tái)。</p><p> ?。?)能夠使用電路仿真軟件進(jìn)行電路調(diào)試。</p>
13、<p><b> 1.2 設(shè)計(jì)意義</b></p><p> 多功能信號(hào)發(fā)生器作為一種常用的信號(hào)源,是現(xiàn)代測(cè)試領(lǐng)域內(nèi)應(yīng)用最為廣泛的通用儀器之一。</p><p> 在研制、生產(chǎn)、測(cè)試和維修各種電子元件、部件以及整機(jī)設(shè)備時(shí),都學(xué)要有信號(hào)源,由它產(chǎn)生不同頻率不同波形的電壓、電流信號(hào)并加到被測(cè)器件或設(shè)備上,用其他儀器觀察、測(cè)量被測(cè)儀器的輸出響應(yīng),以分析確定它
14、們的性能參數(shù)。信號(hào)發(fā)生器是電子測(cè)量領(lǐng)域中最基本、應(yīng)用最廣泛的一類電子儀器。它可以產(chǎn)生多種波形信號(hào),如正弦波,三角波,方波等,因而廣泛用于通信、雷達(dá)、導(dǎo)航、宇航等領(lǐng)域。</p><p> 2. 信號(hào)發(fā)生器課程設(shè)計(jì)的內(nèi)容及相關(guān)要求</p><p> 在本課程設(shè)計(jì)中我們這組使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35開發(fā)板利用鍵盤,液晶顯示及
15、數(shù)碼管顯示模塊、信號(hào)源模塊等資源,來實(shí)現(xiàn)一個(gè)多功能信號(hào)發(fā)生器。主要的要求是能實(shí)現(xiàn)以下幾種功能:</p><p> 1利用4×4鍵盤陣列實(shí)現(xiàn)鍵盤頻率、波形和幅度的控制</p><p> 2 利用液晶顯示模塊實(shí)現(xiàn)信號(hào)頻率、波形和幅度的顯示</p><p> 3 利用16*16點(diǎn)陣顯示實(shí)現(xiàn)信號(hào)幅度級(jí)別的顯示</p><p> 4
16、利用8位動(dòng)態(tài)七段碼管顯示實(shí)現(xiàn)信號(hào)頻率的顯示</p><p> 5 利用信號(hào)源模塊實(shí)現(xiàn)頻率、波形和幅度的控制</p><p> 3.設(shè)計(jì)方案的提出以及相關(guān)原理</p><p> 3.1信號(hào)發(fā)生器的流程框圖</p><p> 圖4.1 信號(hào)發(fā)生器就成圖流程圖</p><p> 3.2 信號(hào)信號(hào)發(fā)生器的實(shí)現(xiàn)的方案&
17、lt;/p><p> 在本課程設(shè)計(jì)中我們組將使用Altera公司的EP2C35系列的FPGA芯片,該芯片的EP2C35核心板為基于Altera Cyclone器件的嵌入式系統(tǒng)開發(fā)提供了一個(gè)很好的硬件平臺(tái),在這個(gè)平臺(tái)上我們?cè)谠摵诵陌迳习凑毡菊n程的要求將使用頻率產(chǎn)生模塊、鍵盤控制模塊,波形類型控制模塊,一個(gè)顯示在16*16點(diǎn)陣顯示波形在數(shù)碼管顯示頻率模塊,以及一個(gè)用LPM-ROM制定的波形數(shù)據(jù)的文件模塊共5個(gè)模塊來實(shí)現(xiàn)
18、用鍵盤及撥碼開關(guān)來實(shí)現(xiàn)波形的控制,及頻率和幅度的控制,并在16*16的點(diǎn)陣上顯示鍵盤所控制的我們?cè)O(shè)計(jì)的三角波,正弦波,鋸齒波、方波這4種波形,以及可以看到它的幅度在按照我們的設(shè)計(jì)思路在發(fā)生變化,在數(shù)碼管上則顯示其頻率按照我們的控制逐步變大和變小的功能。這5個(gè)模塊的簡單介紹以及相關(guān)原理如下:</p><p> 3.21 頻率產(chǎn)生模塊</p><p> 圖4.2 頻率產(chǎn)生模塊結(jié)構(gòu)框圖&l
19、t;/p><p> 頻率控制模塊主要是通過對(duì)信號(hào)源模塊過來的頻率進(jìn)行分頻的原理來實(shí)現(xiàn)波形頻率增加以及減少的控制,本模塊通過撥碼開關(guān)的接入來分別實(shí)現(xiàn)頻率的復(fù)位,頻率增加以及減少的功能。</p><p> 3.22 鍵盤控制模塊</p><p> 圖4.3 鍵盤控制模塊的原理框圖</p><p> 鍵盤控制模塊主要是通過4*4矩陣鍵盤掃描的方
20、法來識(shí)別是那個(gè)鍵被按下,來實(shí)現(xiàn)相對(duì)應(yīng)的功能。我們給大家介紹的是比較常用的行掃描法,行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法,具體介紹介紹過程如下:</p><p> 1、判斷鍵盤中有無鍵按下 將全部行線Y0-Y3置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。 &l
21、t;/p><p> 2、判斷閉合鍵所在的位置 在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。</p><p> 3.23 波形控制模塊</p><p> 圖4.4 波
22、形控制模塊的原理框圖如下</p><p> 波形控制模塊主要是通過按鍵來轉(zhuǎn)換用來波形查表的地址,通過查詢到的地址來輸出相應(yīng)的波形,來達(dá)到按鍵控制波形的目的。</p><p> 3.24 16*16點(diǎn)陣顯示模塊和數(shù)碼管顯示模塊</p><p><b> ?。?lt;/b></p><p> 圖4.5 16*16點(diǎn)陣顯示模塊
23、和數(shù)碼管顯示模塊結(jié)構(gòu)框圖 </p><p> 7段數(shù)碼管顯示的主要利用的動(dòng)態(tài)掃描的原理,具體如下:即在某一時(shí)刻,只讓某一位的位選線處于導(dǎo)通狀態(tài),而其它各位的位選線處于關(guān)閉狀態(tài)。同時(shí),段線上輸出相應(yīng)位要顯示字符的字型碼。這樣在同一時(shí)刻,只有選通的那一位顯示出字符,而其它各位則是熄滅的,如此循環(huán)下去,就可以使各位數(shù)碼管顯示出將要顯示的字符。 16*16掃描LED點(diǎn)陣的工作原理與8位掃描數(shù)碼管類似,只是顯示的方式與結(jié)
24、果不一樣而已.</p><p> 3.45 用LPM-ROM制定的波形數(shù)據(jù)的文件模塊</p><p> 圖4.6 LPM-ROM制定的波形數(shù)據(jù)的文件模塊結(jié)構(gòu)框圖</p><p> 在這個(gè)課程設(shè)計(jì)中,我們制作一個(gè) LPM-ROM波形數(shù)據(jù)文件,把4種波形數(shù)據(jù)均放在該數(shù)據(jù)文件中。這4中波形的產(chǎn)生原理我們都是用查表的原理來實(shí)現(xiàn)的,其中正弦表值可以用Matalab,C
25、 語言等程序語言生成。在一個(gè)周期中取樣點(diǎn)越多則輸出的波形失真度越少,但是點(diǎn)越多存儲(chǔ)正弦波表值所需要的空間就越大,編寫越復(fù)雜。在要求不是很嚴(yán)格的情況下取64個(gè)點(diǎn)就可以了。</p><p> 4.信號(hào)發(fā)生器的仿真結(jié)果及波形</p><p> 我們首先新建一個(gè)波形文件,然后設(shè)置下仿真的時(shí)間,我們就開始進(jìn)行仿真,經(jīng)過仿真得到的結(jié)果如下:</p><p><b>
26、; ,</b></p><p><b> 圖4.1 仿真圖</b></p><p><b> 圖4.2 三角波</b></p><p><b> 圖4.3 方波</b></p><p><b> 圖4.4 正弦波</b></p&
27、gt;<p> 5.課程設(shè)計(jì)心得體會(huì)</p><p> 在小規(guī)模的數(shù)字集成電路淘汰的今天,作為一個(gè)電子技術(shù)工程技術(shù)人員不懂VHDL語言和CPLD、FPGA器件設(shè)計(jì)就像在計(jì)算機(jī)時(shí)代不懂電腦一樣可怕。FPGA的EP2C35核心板為基于Altera Cyclone器件的嵌入式系統(tǒng)開發(fā)提供了一個(gè)很好的硬件平臺(tái),它為我們這樣的開發(fā)人員提供很多資源,也為我們以后的繼續(xù)學(xué)習(xí)打下比較堅(jiān)實(shí)的基礎(chǔ)。這次EDA課程設(shè)
28、計(jì)歷時(shí)兩個(gè)星期,在整整兩個(gè)星期的日子里,可以說是苦多于甜,但是可以學(xué)的到很多很多的東西,同時(shí)不僅可以鞏固以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次設(shè)計(jì),進(jìn)一步加深了對(duì)EDA的了解,讓我對(duì)它有了更加濃厚的興趣。特別是當(dāng)每一個(gè)子模塊編寫調(diào)試成功時(shí),心里特別的開心。但是在編寫頂層文件的程序時(shí),遇到了不少問題,特別是各元件之間的連接,以及信號(hào)的定義,總是有錯(cuò)誤,在細(xì)心的檢查下,終于找出了錯(cuò)誤和警告,排除困難后,程序編譯
29、就通過了,心里終于舒了一口氣。在波形仿真時(shí),也遇到了一點(diǎn)困難,想要的結(jié)果不能在波形上得到正確的顯示,后來,在數(shù)十次的調(diào)試之后,才發(fā)現(xiàn)是因?yàn)檩斎氲臅r(shí)鐘信號(hào)對(duì)于器件的延遲時(shí)間來說太短了。經(jīng)過屢次調(diào)試,終于找到了比較合適的輸</p><p> 其次,在連接各個(gè)模塊的時(shí)候一定要注意各個(gè)輸入、輸出引腳的線寬,因?yàn)槊總€(gè)線寬是不一樣的,只要讓各個(gè)線寬互相匹配,才能得出正確的結(jié)果,否則,出現(xiàn)任何一點(diǎn)小的誤差就會(huì)導(dǎo)致整個(gè)文件系統(tǒng)
30、的編譯出現(xiàn)錯(cuò)誤提示,在器件的選擇上也有一定的技巧,只有選擇了合適當(dāng)前電路所適合的器件,編譯才能得到完滿成功。</p><p> 通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到過各種各樣的問
31、題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固。</p><p> 總的來說,這次設(shè)計(jì)的多功能發(fā)生器還是比較成功的,在設(shè)計(jì)中遇到了很多問題,最后在老師的辛勤的指導(dǎo)下,終于游逆而解,有點(diǎn)小小的成就感,終于覺得平時(shí)所學(xué)的知識(shí)有了實(shí)用的價(jià)值,達(dá)到了理論與實(shí)際相結(jié)合的目的,不僅學(xué)到了不少知識(shí),而且鍛煉了自己的能力,使自己對(duì)以后的路有了更好的了解。</p>&l
32、t;p><b> 參考文獻(xiàn)</b></p><p> [1] SOPCIIEDA實(shí)驗(yàn)指導(dǎo)書(第二版)[M].</p><p> [2] SOPCII使用手冊(cè)(第二版)[M].</p><p> [3] 譚會(huì)生.EDA技術(shù)基礎(chǔ)[M].湖南:湖南大學(xué)出版社,2004</p><p> [4] 潘松,黃繼業(yè).E
33、DA技術(shù)實(shí)用教程[M].北京:科學(xué)出版社, 2010</p><p> 附錄A 信號(hào)發(fā)生器的原理總框圖</p><p> 附錄B 各個(gè)模塊的相關(guān)程序</p><p> B.1 頻率控制模塊的程序</p><p> library ieee;</p><p> use ieee.std_logic_1
34、164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity ert is</p><p> port( Clk : in std_logic; --時(shí)鐘輸入<
35、/p><p> Rst : in bit; --復(fù)位輸入</p><p> NU,ND : in bit; --輸入:控制頻率的改變</p><p> --keyout1 : in std_logic_vector(3 downto 0); --輸入:控制波形的改變</p><p>
36、 Fout : out std_logic --時(shí)鐘輸出</p><p><b> ); </b></p><p><b> end ert;</b></p><p> architecture behave of ert is</p><p> signal
37、 M_Buffer : std_logic_vector(19 downto 0);</p><p> signal N_Count :std_logic_vector(14 downto 0);</p><p> signal clkin : std_logic;</p><p> signal Clk_Count : std_logic_vector(2
38、2 downto 0); --產(chǎn)生一個(gè)低速時(shí)鐘,用于按鍵判斷</p><p><b> begin</b></p><p> process(Clk) --計(jì)數(shù)器累加</p><p><b> begin</b></p><p> if(Clk'event and Clk
39、='1') then</p><p> if(N_Count=M_Buffer+M_Buffer) then</p><p> N_Count<="000000000000000";</p><p><b> else</b></p><p> N_Count<=N
40、_Count+1;</p><p><b> end if;</b></p><p> end if; </p><p> end process;</p><p> process(Clk) --波形判斷</p><p><b> begin</
41、b></p><p> if(Clk'event and Clk='1') then</p><p> if(N_Count<M_Buffer) then</p><p> Fout<='1';</p><p> elsif(N_Count>M_Buffer and N_
42、Count<M_Buffer+M_Buffer) then</p><p> Fout<='0';</p><p><b> end if;</b></p><p> end if; </p><p> end process;</p><p>
43、 process(Clk)</p><p><b> begin</b></p><p> if(Clk'event and Clk='1') then</p><p> Clk_Count<=Clk_Count+1;</p><p><b> end if;</b&
44、gt;</p><p> clkin<=Clk_Count(22);</p><p> end process;</p><p> process(clkin) --頻率及占空比的改變1</p><p><b> begin</b></p><p> if(clkin'
45、event and clkin='0') then</p><p> if(Rst='0') then</p><p> M_Buffer<="00000000000000100000";</p><p> --N_Buffer<="000010000000000";</
46、p><p> elsif(NU='0') then</p><p> --N_Buffer<=N_Buffer+1; </p><p> M_Buffer<=M_Buffer+1 ;</p><p> elsif(ND='0') then</p><p> --N_Bu
47、ffer<=N_Buffer-1;</p><p> M_Buffer<=M_Buffer-1;</p><p> end if; </p><p><b> end if;</b></p><p> end process;</p><p> end b
48、ehave;</p><p> B.2鍵盤控制模塊程序</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic
49、_unsigned.all;</p><p> entity aaa is</p><p> port( Clk : in std_logic; --時(shí)鐘信號(hào)</p><p> Kr : in std_logic_vector(3 downto 0); --鍵盤行</p
50、><p> Kc : buffer std_logic_vector(3 downto 0); --鍵盤列</p><p> keyout : out std_logic_vector(3 downto 0)</p><p><b> );</b></p><
51、;p><b> end aaa;</b></p><p> architecture behave of aaa is</p><p> signal keyr,keyc : std_logic_vector(3 downto 0);</p><p> signal kcount : std_logic_v
52、ector(2 downto 0);</p><p> signal dcount : std_logic_vector(1 downto 0);</p><p> signal kflag1,kflag2 : std_logic;</p><p> signal buff8 : std_logic_vector(3 downto 0);<
53、/p><p> signal Disp_Temp : integer range 0 to 15;</p><p> signal Disp_Decode : std_logic_vector(6 downto 0);</p><p><b> begin</b></p><p> process(Clk
54、) --掃描鍵盤 </p><p><b> begin</b></p><p> if(Clk'event and Clk='1') then </p><p> if(Kr="1111") then</p><p> kflag1<='0
55、9;;</p><p> kcount<=kcount+1;</p><p> if(kcount=0) then</p><p> kc<="1110";</p><p> elsif(kcount=1) then</p><p> kc<="1101&quo
56、t;;</p><p> elsif(kcount=2) then</p><p> kc<="1011";</p><p><b> else</b></p><p> kc<="0111"; </p><p><b> e
57、nd if;</b></p><p><b> else</b></p><p> kflag1<='1';</p><p><b> keyr<=Kr;</b></p><p><b> keyc<=Kc;</b><
58、/p><p><b> end if;</b></p><p> kflag2<=kflag1;</p><p><b> end if; </b></p><p> end process; </p><p> process(Clk)
59、 -- 獲取鍵值</p><p><b> begin</b></p><p> if(Clk'event and Clk='1') then</p><p> if(kflag1='1' and kflag2='0') then</p><p> if(k
60、eyr="0111") then</p><p> case keyc is</p><p> when "0111"=>buff8<="0001"; </p><p> when "1011"=>buff8<="0100"; <
61、/p><p> when "1101"=>buff8<="0111"; </p><p> when "1110"=>buff8<="1110"; </p><p> when others=>buff8<=buff8; --no cha
62、nge</p><p><b> end case;</b></p><p> elsif(keyr="1011") then</p><p> case keyc is</p><p> when "0111"=>buff8<="0010"
63、; </p><p> when "1011"=>buff8<="0101"; </p><p> when "1101"=>buff8<="1000"; </p><p> when "1110"=>buff8<=&q
64、uot;0000"; </p><p> when others=>buff8<=buff8; --no change</p><p><b> end case;</b></p><p> elsif(keyr="1101") then</p><p>
65、case keyc is</p><p> when "1110"=>buff8<="1111"; </p><p> when "1101"=>buff8<="1001"; </p><p> when "1011"=>buf
66、f8<="0110"; </p><p> when "0111"=>buff8<="0011";</p><p> when others=>buff8<=buff8; --no change</p><p><b> end case;</
67、b></p><p> elsif(keyr="1110") then</p><p> case keyc is</p><p> when "1110"=>buff8<="1101"; </p><p> when "1101"=&
68、gt;buff8<="1100"; </p><p> when "1011"=>buff8<="1011"; </p><p> when "0111"=>buff8<="1010";</p><p> when others=
69、>buff8<=buff8; --no change</p><p><b> end case;</b></p><p><b> end if;</b></p><p> end if; </p><p><b> end
70、if; </b></p><p> keyout<=buff8;</p><p> end process;</p><p> end behave;</p><p> B.3 波形控制模塊程序</p><p> library ieee;</p><p> use
71、 ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use ieee.std_logic_arith.all;</p><p> entity bbb is </p><p> port(clk :in std_logic
72、;</p><p> key :in std_logic_vector(3 downto 0);</p><p> dout :out integer range 1023 downto 0);</p><p><b> end bbb;</b></p><p> archite
73、cture behave of bbb is</p><p> signal q1: integer range 255 downto 0;</p><p> signal q2: integer range 511 downto 256;</p><p> signal q3: integer range 767 downto 51
74、2;</p><p> signal q4: integer range 1023 downto 768;</p><p><b> begin</b></p><p> process(clk,key,q1,q2,q3,q4)</p><p><b> begin </b><
75、/p><p> if key="0000" then</p><p> if(clk'event and clk='1')then</p><p> if q1=255 then</p><p><b> q1<=0;</b></p><p
76、><b> else</b></p><p> q1 <= q1+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> dout<=q1;</b>&l
77、t;/p><p> elsif key="0001" then</p><p> if(clk'event and clk='1')then</p><p> if q2=511 then</p><p><b> q2<=256;</b></p>
78、<p><b> else</b></p><p> q2 <= q2+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> dout<=q2;</
79、b></p><p> elsif key="0010" then</p><p> if(clk'event and clk='1')then</p><p> if q3=767 then</p><p><b> q3<=512;</b><
80、;/p><p><b> else</b></p><p> q3 <= q3+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> dout<=q
81、3;</b></p><p> elsif key="0011" then</p><p> if(clk'event and clk='1')then</p><p> if q4=1023 then</p><p><b> q4<=768;</
82、b></p><p><b> else</b></p><p> q4 <= q4+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> do
83、ut<=q4;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end ;</b></p><p> B.4 16*16點(diǎn)陣與數(shù)碼管顯示模塊</p><p> lib
84、rary ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity qwe is</p><
85、;p> port( clk : in std_logic; --時(shí)鐘輸入</p><p> swich : in std_logic_vector(7 downto 0); </p><p> SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);</p><p> keyc : out std_l
86、ogic_vector(15 downto 0); --點(diǎn)陣列控制</p><p> keyr : out std_logic_vector(15 downto 0) --點(diǎn)陣行顯示</p><p><b> ); </b></p><p><b> end qwe;</b></p&
87、gt;<p> architecture behave of qwe is</p><p> signal cdount : std_logic_vector(3 downto 0);</p><p> signal dount : std_logic_vector(8 downto 0);</p><p> signal s:std_log
88、ic_vector(4 downto 0);</p><p> signal lout4:std_logic_vector(3 downto 0);</p><p> signal xt:std_logic;</p><p><b> begin</b></p><p> process (clk)</p&
89、gt;<p><b> begin</b></p><p> if (clk'event and clk='1')then</p><p> if (s="10111") then</p><p> s<="00000";</p><
90、p> else s<=s+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process (s)</p><p><b>
91、 begin</b></p><p><b> case s is</b></p><p> when "00000"=>lout4<="1111"; sel<="000"; keyc<="0000000000000000";xt<='
92、1';</p><p> when "00001"=>lout4<="1111"; sel<="001"; keyc<="0000000000000000";xt<='1';</p><p> when "00010"=>lou
93、t4<="1111"; sel<="010"; keyc<="0000000000000000";xt<='1';</p><p> when "00011"=>lout4<="1111"; sel<="011"; keyc
94、<="0000000000000000"; xt<='1';</p><p> when "00100"=>lout4<="0000"; sel<="100"; keyc<="0000000000000000";xt<='1';<
95、;/p><p> when "00101"=>lout4<="0000"; sel<="101"; keyc<="0000000000000000";xt<='1';</p><p> when "00110"=>lout4<=&qu
96、ot;1111"; sel<="110"; keyc<="0000000000000000";xt<='1';</p><p> when "00111"=>lout4<="1111"; sel<="111"; keyc<="00000
97、00000000000";xt<='1';</p><p> when "01000"=>keyc<="0000000000000001";sel<="000";xt<='0';--列選擇(lg7088Ah)</p><p> when "010
98、01"=>keyc<="0000000000000010";sel<="000";xt<='0';</p><p> when "01010"=>keyc<="0000000000000100";sel<="000";xt<='0&
99、#39;;</p><p> when "01011"=>keyc<="0000000000001000";sel<="000";xt<='0';</p><p> when "01100"=>keyc<="0000000000010000&qu
100、ot;;sel<="000";xt<='0';</p><p> when "01101"=>keyc<="0000000000100000";sel<="000";xt<='0';</p><p> when "01110&qu
101、ot;=>keyc<="0000000001000000";sel<="000";xt<='0';</p><p> when "01111"=>keyc<="0000000010000000";sel<="000";xt<='0';
102、</p><p> when "10001"=>keyc<="0000001000000000";sel<="000";xt<='0';</p><p> when "10010"=>keyc<="0000010000000000";s
103、el<="000";xt<='0';</p><p> when "10011"=>keyc<="0000100000000000";sel<="000";xt<='0';</p><p> when "10100"=&
104、gt;keyc<="0001000000000000";sel<="000";xt<='0';</p><p> when "10101"=>keyc<="0010000000000000";sel<="000";xt<='0';</
105、p><p> when "10110"=>keyc<="0100000000000000";sel<="000";xt<='0';</p><p> when "10111"=>keyc<="1000000000000000";sel<
106、;="000";xt<='0';</p><p> when others=>keyc<="0000000000000000"; sel<="000";xt<='0';</p><p><b> end case;</b></p>
107、<p> if xt='1' then</p><p> case lout4 is</p><p> when "0000"=>keyr<="0011111111111100";</p><p> when "0001"=>keyr<="
108、;0000011001100000";</p><p> when "0010"=>keyr<="0101101111011010";</p><p> when "0011"=>keyr<="0100111111110010";</p><p>
109、 when "0100"=>keyr<="0110011001100110";</p><p> when "0101"=>keyr<="0110110110110110";</p><p> when "0110"=>keyr<="0111
110、110110111110";</p><p> when "0111"=>keyr<="0000011111100000";</p><p> when "1000"=>keyr<="0111111111111110";</p><p> when
111、 "1001"=>keyr<="0110011111100110";</p><p> when "1010"=>keyr<="0011111111111100";</p><p> when "1111"=>keyr<="010000000
112、0000010";</p><p> when others=> null;</p><p><b> end case;</b></p><p><b> else</b></p><p> if swich="0000000" then</p
113、><p> case cdount is</p><p> when "0000"=>keyr<="1001111111111111"; --列顯示三角波</p><p> when "0001"=>keyr<="1100111111111111";</p
114、><p> when "0010"=>keyr<="1111001111111111";</p><p> when "0011"=>keyr<="1111110011111111";</p><p> when "0100"=>key
115、r<="1111111001111111";</p><p> when "0101"=>keyr<="1111111110011111";</p><p> when "0110"=>keyr<="1111111111001111";</p>
116、<p> when "0111"=>keyr<="1111111111100111";</p><p> when "1000"=>keyr<="1111111111110011";</p><p> when "1001"=>keyr<
117、="1111111111111001";</p><p> when "1010"=>keyr<="1111111111100111";</p><p> when "1011"=>keyr<="1111111110011111";</p><
118、p> when "1100"=>keyr<="1111111001111111";</p><p> when "1101"=>keyr<="1111110011111111";</p><p> when "1110"=>keyr<=&quo
119、t;1111100111111111";</p><p> when "1111"=>keyr<="11110011111111111";</p><p> when others=>keyr<="1100111111111111";</p><p> end cas
120、e; </p><p> elsif swich="0000001" then </p><p> case cdount is</p><p> when "0000"=>keyr<="1011111111111111"; --列顯示鋸齒波</p><p>
121、 when "0001"=>keyr<="1110111111111111";</p><p> when "0010"=>keyr<="1111110111111111";</p><p> when "0011"=>keyr<="111
122、1111110111111";</p><p> when "0100"=>keyr<="1111111111110111";</p><p> when "0101"=>keyr<="1111111111111110";</p><p> whe
123、n "0110"=>keyr<="1111111111110111";</p><p> when "0111"=>keyr<="1111111101111111";</p><p> when "1000"=>keyr<="11111011
124、11111111";</p><p> when "1001"=>keyr<="1101111111111111";</p><p> when "1010"=>keyr<="0111111111111111";</p><p> when &qu
125、ot;1011"=>keyr<="1110111111111111";</p><p> when "1100"=>keyr<="1111110111111111";</p><p> when "1101"=>keyr<="1111111111011
126、111";</p><p> when "1110"=>keyr<="1111111111111011";</p><p> when "1111"=>keyr<="1111111111111110";</p><p> when others=&
127、gt;keyr<="1111111111110111";</p><p><b> end case;</b></p><p> elsif swich="0000010" then</p><p> case cdount is</p><p> when &q
128、uot;0000"=>keyr<="0000000000000000"; --列顯示方波</p><p> when "0001"=>keyr<="1111111111111110";</p><p> when "0010"=>keyr<="1111
129、111111111110";</p><p> when "0011"=>keyr<="1111111111111110";</p><p> when "0100"=>keyr<="1111111111111110";</p><p> when
130、 "0101"=>keyr<="1111111111111110";</p><p> when "0110"=>keyr<="0000000000000000";</p><p> when "0111"=>keyr<="011111111
131、1111111";</p><p> when "1000"=>keyr<="0111111111111111";</p><p> when "1001"=>keyr<="0111111111111111";</p><p> when &quo
132、t;1010"=>keyr<="0111111111111111";</p><p> when "1011"=>keyr<="0111111111111111";</p><p> when "1100"=>keyr<="00000000000000
133、00";</p><p> when "1101"=>keyr<="1111111111111110";</p><p> when "1110"=>keyr<="1111111111111110";</p><p> when "111
134、1"=>keyr<="1111111111111110";</p><p> when others=>keyr<="1111111111111110";</p><p><b> end case;</b></p><p> elsif swich="
135、;00000011" then</p><p> case cdount is</p><p> when "0000"=>keyr<="1001111111111111"; --列顯示正弦波</p><p> when "0001"=>keyr<="11
136、00011111111111";</p><p> when "0010"=>keyr<="1111000111111111";</p><p> when "0011"=>keyr<="1111111100011111";</p><p> wh
137、en "0100"=>keyr<="1111111111100001";</p><p> when "0101"=>keyr<="1111111111100011";</p><p> when "0110"=>keyr<="1111111
138、100011111";</p><p> when "0111"=>keyr<="1111100011111111";</p><p> when "1000"=>keyr<="1100011111111111";</p><p> when &q
139、uot;1001"=>keyr<="1001111111111111";</p><p> when "1010"=>keyr<="1111000111111111";</p><p> when "1011"=>keyr<="111111110001
140、1111";</p><p> when "1100"=>keyr<="1111111111000011";</p><p> when "1101"=>keyr<="1111111110001111";</p><p> when "1
141、110"=>keyr<="1111100011111111";</p><p> when "1111"=>keyr<="1000111111111111";</p><p> when others=>keyr<="1110001111111111";<
142、/p><p> end case; </p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> end behave;</p><p>
143、 B.5波形數(shù)據(jù)文件程序(ROM)數(shù)據(jù)</p><p> LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY wave ISPORT(address : IN STD_LOGIC_VECTOR
144、;(9 DOWNTO 0);clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END wave;ARCHITECTURE SYN OF wave ISSIGNAL sub_wire0 :
145、;STD_LOGIC_VECTOR (7 DOWNTO 0);COMPONENT altsyncramGENERIC (address_aclr_a : STRING;init_file : STRING;intended_device_family : STRING;lpm_hint : STRING;lpm_type :
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)-簡易信號(hào)發(fā)生器
- eda課程設(shè)計(jì)--dds信號(hào)發(fā)生器
- eda設(shè)計(jì)實(shí)驗(yàn)課程設(shè)計(jì)-函數(shù)信號(hào)發(fā)生器
- eda課程設(shè)計(jì)---函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)
- eda課程設(shè)計(jì)-多功能波形信號(hào)發(fā)生器
- eda音樂發(fā)生器課程設(shè)計(jì)
- eda課程設(shè)計(jì)--基于cpld的信號(hào)發(fā)生器設(shè)計(jì)
- eda課程設(shè)計(jì)——基于dds的正弦信號(hào)發(fā)生器設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)----函數(shù)信號(hào)發(fā)生器
- eda課程設(shè)計(jì)--基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)
- eda課程設(shè)計(jì)--任意波形發(fā)生器
- eda課程設(shè)計(jì)報(bào)告---正弦函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)
- 基于vhdl語言信號(hào)發(fā)生器的設(shè)計(jì)--eda課程設(shè)計(jì)
- eda課程設(shè)計(jì)報(bào)告--樂曲發(fā)生器
- 信號(hào)發(fā)生器課程設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)
- eda信號(hào)發(fā)生器的課程設(shè)計(jì)說明書
- eda課程設(shè)計(jì)報(bào)告--音樂發(fā)生器設(shè)計(jì)
- 課程設(shè)計(jì)--信號(hào)發(fā)生器設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告--函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論