版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 樂(lè)曲演奏電路的設(shè)計(jì)</b></p><p> 摘 要 本課程設(shè)計(jì)主要采用EDA技術(shù)設(shè)計(jì)一個(gè)簡(jiǎn)易的八音符電子琴,它可通過(guò)按鍵輸入來(lái)控制音響從而演奏出已存入的樂(lè)曲。在課程設(shè)計(jì)中,系統(tǒng)開(kāi)發(fā)平臺(tái)為Windows XP,程序設(shè)計(jì)采用VHDL語(yǔ)言,程序運(yùn)行平臺(tái)為QuartusⅡ5.1。然后編寫(xiě)程序?qū)崿F(xiàn)電子琴的各項(xiàng)功能,使不同的音階對(duì)應(yīng)不同頻率的正弦波,按下不同的鍵時(shí)發(fā)
2、出對(duì)應(yīng)頻率的聲音。程序通過(guò)調(diào)試運(yùn)行,時(shí)序仿真,電路功能驗(yàn)證,順利地實(shí)現(xiàn)了設(shè)計(jì)目標(biāo)。</p><p> 關(guān)鍵詞 電子琴;EDA;VHDL;音階;頻率</p><p> Abstract The main use of this curriculum design EDA technology to design a simple eight-note organ, it can be
3、 key to control the audio input so as to have been deposited in a concert of music. In the course design, system development platform for Windows 2000, the procedures VHDL design language, platform for running QuartusⅡ5.
4、1. And then program to achieve the various functions of the organ, so that different scale corresponds to a different frequency sine wave, press different keys when the v</p><p> Key Words Electric piano;
5、EDA; VHDL; scale; frequency</p><p><b> 1 引 言</b></p><p> 隨著信息科學(xué)的進(jìn)步,現(xiàn)代電子產(chǎn)品的性能越來(lái)越高,復(fù)雜度越來(lái)越大,更新步伐也越來(lái)越快,電子技術(shù)的發(fā)展進(jìn)入了劃時(shí)代的階段。其中電子技術(shù)的核心便是電子設(shè)計(jì)自動(dòng)化EDA(Electronic Design Automatic)技術(shù)。EDA是指以計(jì)算機(jī)為
6、工作平臺(tái),融合了應(yīng)用電子技術(shù)、計(jì)算機(jī)技術(shù)、智能化技術(shù)的最新成果而開(kāi)發(fā)出的電子CAD通用軟件包,它根據(jù)硬件描述語(yǔ)言VHDL完成的設(shè)計(jì)文件,自動(dòng)完成邏輯編譯、化簡(jiǎn)、分割、綜合、優(yōu)化、布局布線及仿真,直至完成對(duì)于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。本課程設(shè)計(jì)就是采用EDA技術(shù)描述語(yǔ)言VHDL編程實(shí)現(xiàn)簡(jiǎn)易電子琴的各項(xiàng)功能,是EDA技術(shù)應(yīng)用于實(shí)際的一個(gè)很好的例子。</p><p> 1.1 課程設(shè)計(jì)目的&l
7、t;/p><p> 本課程設(shè)計(jì)主要是基于VHDL文本輸入法設(shè)計(jì)樂(lè)曲演奏電路,該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,采用自頂向下的設(shè)計(jì)方法來(lái)實(shí)現(xiàn),通過(guò)按鍵輸入來(lái)控制音響或者自動(dòng)演奏已存入的歌曲。系統(tǒng)由樂(lè)曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三個(gè)部分組成。系統(tǒng)實(shí)現(xiàn)是用硬件描述語(yǔ)言VHDL按模塊化方式進(jìn)行設(shè)計(jì),然后進(jìn)行編程、時(shí)序仿真、電路功能驗(yàn)證,奏出美妙的樂(lè)曲。該設(shè)計(jì)最重要的一點(diǎn)就是通過(guò)按鍵控制不同的音調(diào)發(fā)生,每一個(gè)
8、音調(diào)對(duì)應(yīng)不同的頻率,從而輸出對(duì)應(yīng)頻率的聲音。</p><p> 1.2 課程設(shè)計(jì)內(nèi)容</p><p> ?。?)設(shè)計(jì)一個(gè)簡(jiǎn)易的八音符電子琴,它可通過(guò)按鍵輸入來(lái)控制音響。</p><p> ?。?)系統(tǒng)演奏時(shí)可以選擇是手動(dòng)演奏(由鍵盤(pán)輸入)還是自動(dòng)演奏已存入的樂(lè)曲。</p><p> ?。?)能夠自動(dòng)演奏多首樂(lè)曲,且樂(lè)曲可重復(fù)演奏。</
9、p><p> 1.3 課程設(shè)計(jì)原理</p><p> 本課程設(shè)計(jì)目的在于靈活運(yùn)用EDA技術(shù)編程實(shí)現(xiàn)一個(gè)簡(jiǎn)易電子琴的樂(lè)曲演奏,它要求在實(shí)驗(yàn)箱上構(gòu)造一個(gè)電子琴電路,不同的音階對(duì)應(yīng)不同頻率的正弦波。按下每個(gè)代表不同音階的按鍵時(shí),能夠發(fā)出對(duì)應(yīng)頻率的聲音。故系統(tǒng)可分為樂(lè)曲自動(dòng)演奏模塊(AUTO)、音調(diào)發(fā)生模塊(TONE)和數(shù)控分頻模塊(FENPIN)三部分。系統(tǒng)的整體組裝設(shè)計(jì)原理圖如圖1-1所示。&
10、lt;/p><p> 圖1-1 系統(tǒng)的整體組裝設(shè)計(jì)原理圖</p><p> 由于設(shè)計(jì)分模塊組成,每個(gè)單獨(dú)的模塊都是一個(gè)完整的源程序,分別實(shí)現(xiàn)不同性質(zhì)的功能,但是每個(gè)模塊又是緊密關(guān)聯(lián)的,前一個(gè)模塊的輸出很可能是后一模塊的輸入。如AUTO模塊的音符信號(hào)輸出就是TONE模塊的音符信號(hào)輸入。另外,時(shí)鐘脈沖信號(hào)在本課程設(shè)計(jì)中用的最多,用處也最大,一般情況下時(shí)鐘信號(hào)處上升沿有效,判斷和控制各個(gè)計(jì)數(shù)器
11、計(jì)數(shù)多少。</p><p> 2 EDA、VHDL簡(jiǎn)介</p><p> EDA技術(shù)是以計(jì)算機(jī)為工作平臺(tái),融合了應(yīng)用電子技術(shù)、計(jì)算機(jī)技術(shù)、信息處理及智能化技術(shù)的最新成果,進(jìn)行電子產(chǎn)品的自動(dòng)設(shè)計(jì)。EDA可提供文本輸入以及圖形編輯的方法將設(shè)計(jì)者的意圖用程序或者圖形方式表達(dá)出來(lái),而我們經(jīng)常用到的VHDL語(yǔ)言便是用于編寫(xiě)源程序所需的最常見(jiàn)的硬件描述語(yǔ)言(HDL)之一。</p>&
12、lt;p><b> 2.1 EDA技術(shù)</b></p><p> EDA是電子設(shè)計(jì)自動(dòng)化(Electronic Design Automation)縮寫(xiě),是90年代初從CAD、CAM、CAT和CAE的概念發(fā)展而來(lái)的。EDA技術(shù)是電子設(shè)計(jì)的發(fā)展趨勢(shì),利用EDA工具可以代替設(shè)計(jì)者完成電子系統(tǒng)設(shè)計(jì)中的大部分工作。EDA工具從數(shù)字系統(tǒng)設(shè)計(jì)的單一領(lǐng)域,發(fā)展到今天,應(yīng)用范圍已涉及模擬、微波等多
13、個(gè)領(lǐng)域,可以實(shí)現(xiàn)各個(gè)領(lǐng)域電子系統(tǒng)設(shè)計(jì)的測(cè)試、設(shè)計(jì)方針和布局布線等。</p><p> 現(xiàn)在對(duì)EDA的概念或范疇用得很寬,包括在機(jī)械、電子、通信、航空航天、化工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事等各個(gè)領(lǐng)域,都有EDA的應(yīng)用。目前EDA主要輔助進(jìn)行三個(gè)方面的設(shè)計(jì)工作:IC設(shè)計(jì)、電子電路設(shè)計(jì)和PCB設(shè)計(jì)。</p><p> 2.2 VHDL語(yǔ)言</p><p> 常用硬件描述
14、語(yǔ)言有VHDL、Verilog和ABEL語(yǔ)言,而VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語(yǔ)句外,VHDL的結(jié)構(gòu)特點(diǎn)是將設(shè)計(jì)實(shí)體的內(nèi)部功能和算法完成部分。</p><p> 相對(duì)于其他硬件語(yǔ)言,VHDL有許多優(yōu)點(diǎn)。比如VHDL的行為描述能力更強(qiáng),而且具有豐富的仿真語(yǔ)句和庫(kù)函數(shù),隨時(shí)可對(duì)系統(tǒng)進(jìn)行仿真模擬,使設(shè)計(jì)者對(duì)整個(gè)工程的結(jié)構(gòu)和功能可行性做出判斷;另外,由于具有類屬描述語(yǔ)句
15、和子程序調(diào)用等功能,對(duì)于完成的設(shè)計(jì),在不改變?cè)闯绦虻臈l件下,只需改變類屬參量和函數(shù),就能輕易地改變?cè)O(shè)計(jì)的規(guī)模和結(jié)構(gòu)。</p><p> 3 簡(jiǎn)易電子琴的設(shè)計(jì)過(guò)程</p><p> 根據(jù)系統(tǒng)設(shè)計(jì)要求,系統(tǒng)該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,設(shè)計(jì)采用自頂向下的設(shè)計(jì)方法,通過(guò)按鍵輸入來(lái)控制音響或者自動(dòng)演奏已存入的歌曲。它由樂(lè)曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三部分組成。</p&
16、gt;<p> 3.1 樂(lè)曲自動(dòng)演奏模塊</p><p> 樂(lè)曲自動(dòng)演奏模塊的作用是產(chǎn)生8位發(fā)生控制輸入信號(hào)。當(dāng)進(jìn)行自動(dòng)演奏時(shí),由存儲(chǔ)在此模塊的8位二進(jìn)制數(shù)作為發(fā)聲控制輸入,從而自動(dòng)演奏樂(lè)曲。</p><p> 該模塊的VHDL源程序主要由3個(gè)工作進(jìn)程組成,分別為PULSE0,MUSIC和COM1。PULSE0的作用是根據(jù)鍵盤(pán)輸入(自動(dòng)演奏)的值(0或1)來(lái)判斷計(jì)數(shù)器C
17、OUNT以及脈沖CLK2的輸出值。部分源程序如下:</p><p> PULSE0:PROCESS(CLK,AUTO) --工作進(jìn)程開(kāi)始</p><p> VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定義計(jì)數(shù)器變量,值從0到8</p><p> IF AUTO='1'
18、;THEN --鍵盤(pán)輸入為1</p><p> COUNT:=0;CLK2<='0'; --計(jì)數(shù)器值指0,時(shí)鐘信號(hào)為0</p><p> ELSIF(CLK'EVENT AND CLK='1')THEN --時(shí)鐘輸入信號(hào)為1</p>
19、;<p> COUNT:=COUNT+1; --計(jì)數(shù)器加1</p><p> 當(dāng)確定了時(shí)鐘信號(hào)輸出的值后,在第二個(gè)PROCESS中就可以由它控制8位發(fā)聲控制輸入信號(hào)了。即CLK2的值為0時(shí),COUNT0為1。最后的COM1便是由前兩個(gè)PROCESS所確定的COUNT0、AUTO和鍵盤(pán)輸入信號(hào)值INDEX2將8位的二進(jìn)制數(shù)轉(zhuǎn)化為音符信號(hào)的輸出,達(dá)到自動(dòng)演
20、奏的目的。部分源程序如下:</p><p> IF AUTO='0'THEN</p><p> CASE COUNT0 IS</p><p> WHEN 0=>INDEX0<="00000100"; --3</p><p> WHEN 4=>INDEX0<="00
21、010000"; --5</p><p> 該模塊最主要的用途就是將輸入二進(jìn)制數(shù)轉(zhuǎn)化為發(fā)聲控制輸入,是產(chǎn)生音符的重要步驟, AUTO模塊的源程序符號(hào)編輯圖如圖3-1。</p><p> 圖3-1 AUTO模塊的符號(hào)編輯圖</p><p> 3.2 音調(diào)發(fā)生模塊</p><p> 音調(diào)發(fā)生模塊的作用是產(chǎn)生音階的分頻預(yù)置值。
22、當(dāng)8位發(fā)聲控制輸入信號(hào)中的某一位為高電平時(shí),則對(duì)應(yīng)某一音階的數(shù)值將輸出,該數(shù)值即為該音階的分頻預(yù)置值,分頻預(yù)置值控制數(shù)控分頻模塊進(jìn)行分頻,由此得到每個(gè)音階對(duì)應(yīng)的頻率。</p><p> 該模塊的唯一輸入信號(hào)INDEX對(duì)應(yīng)就是自動(dòng)模塊中最后的輸出INDEX0,音符顯示信號(hào)CODE,高低音顯示信號(hào)HIGH和音符分頻系數(shù)都是根據(jù)音符輸入確定的。比如我們自定義INDEX第8位為高電平時(shí),它的分頻系數(shù)則為773Hz,音符
23、顯示信號(hào)為1001111,即是773的二進(jìn)制表示,此時(shí)高低音顯示1表示高音。部分源程序如下:</p><p> CASE INDEX IS</p><p> WHEN"00000010"=>TONE0<=912;CODE<="0010010";HIGH<='1'; </p><p>
24、; --音符第7位為1,分頻數(shù)912Hz,音符顯示為0010010,屬高音</p><p> WHEN"01000000"=>TONE0<=1372;CODE<="0001111";HIGH<='0';</p><p> WHEN OTHERS =>TONE0<=2047;CODE<
25、="0000001";HIGH<='0';</p><p> 顯然,該模塊最主要的作用就是給音符輸入預(yù)設(shè)頻率值,因?yàn)椋娮忧僮罱K實(shí)現(xiàn)樂(lè)曲演奏就是輸出不同頻率的正弦波,此模塊就是將二進(jìn)制發(fā)聲信號(hào)轉(zhuǎn)化為對(duì)應(yīng)的頻率。</p><p> TONE模塊的源程序符號(hào)編輯圖如圖3-2</p><p> 3-2 TONE模塊的源程序符
26、號(hào)編輯圖</p><p> 3.3 數(shù)控分頻模塊</p><p> 數(shù)控分頻模塊是對(duì)時(shí)基脈沖進(jìn)行分頻,得到與0、1、2、3、4、5、6、7八個(gè)音符相對(duì)應(yīng)的頻率。</p><p> 該模塊主要由4個(gè)工作進(jìn)程組成。首先,根據(jù)系統(tǒng)時(shí)鐘信號(hào)的輸入得到時(shí)基脈沖以及計(jì)數(shù)器的值,而時(shí)鐘信號(hào)在AUTO模塊中便已給出,兩者之間的設(shè)置關(guān)系類似于AUTO模塊中第一個(gè)工作進(jìn)程的設(shè)置。
27、第二個(gè)PROCESS是此模塊的核心,即由時(shí)基脈沖值轉(zhuǎn)化為音符的頻率。部分源程序如下:</p><p> VARIABLE COUNT11:INTEGER RANGE 0 TO 2047; </p><p> --定義頻率計(jì)數(shù)器,從0到2047Hz</p><p> IF(PRECLK'EVENT AND PRECLK='1')THEN
28、 --時(shí)基脈沖為1時(shí)</p><p> IF COUNT11<TONE1 THEN --頻率計(jì)數(shù)器小于音符分頻系數(shù)</p><p> COUNT11:=COUNT11+1;FULLSPKS<='1'; --計(jì)數(shù)加1,揚(yáng)聲器音頻為1</p><p><b> ELSE</b>&
29、lt;/p><p> COUNT11:=0;FULLSPKS<='0';</p><p> 最后一個(gè)PROCESS則是用來(lái)設(shè)置揚(yáng)聲器輸出信號(hào)的,揚(yáng)聲器信號(hào)由0和1控制,當(dāng)且僅當(dāng)前一個(gè)PROCESS中的FULLSPKS輸出為1時(shí),揚(yáng)聲器才有輸出,再根據(jù)計(jì)數(shù)器取值來(lái)確定輸出是1還是0。部分源程序如下:</p><p> IF(FULLSPKS
30、39;EVENT AND FULLSPKS='1')THEN --揚(yáng)聲器音頻信號(hào)為1</p><p> COUNT2:=NOT COUNT2;</p><p> IF COUNT2='1'THEN</p><p> SPKS<='1'; --揚(yáng)聲器輸出為1</p>
31、;<p> ELSE SPK<=’0’; </p><p> FENPIN模塊的源程序符號(hào)編輯圖如圖3-3</p><p> 3-3 FENPIN模塊的源程序符號(hào)編輯圖</p><p><b> 3.4 頂層設(shè)計(jì)</b></p><p> 該DIANZIQIN模塊是整個(gè)電子琴設(shè)計(jì)的核心,也
32、是VHDL程序的主程序,前面3個(gè)源程序都是作為子程序分別實(shí)現(xiàn)電子琴的某一功能,而DIANZIQIN模塊則通過(guò)調(diào)用子程序最終實(shí)現(xiàn)樂(lè)曲演奏的目的,奏出美妙的樂(lè)曲。利用VHDL語(yǔ)言COMPONENT將三個(gè)模塊組合起來(lái),其中3個(gè)模塊和DIANZIQIN模塊的輸入輸出是一一對(duì)應(yīng)的,比如AUTO對(duì)應(yīng)HANDTOAUTO,TONE0對(duì)應(yīng)TONE2,SPKS對(duì)應(yīng)SPKOUT等,該模塊的符號(hào)編輯圖如圖3-4。</p><p>
33、圖3-4 DIANZIQIN模塊的符號(hào)編輯圖</p><p> 該圖描述的是DIANZIQIN模塊輸入輸出的變量表示,整個(gè)系統(tǒng)的整體組裝設(shè)計(jì)原理圖就是這4幅編輯圖按輸入輸出關(guān)系順序連接而成的。</p><p><b> 4 系統(tǒng)仿真</b></p><p> 系統(tǒng)仿真是在實(shí)際系統(tǒng)上進(jìn)行實(shí)驗(yàn)研究比較困難時(shí)適用的必不可少的工具,它是指通過(guò)系
34、統(tǒng)模型實(shí)驗(yàn)去研究一個(gè)已經(jīng)存在或正在設(shè)計(jì)的系統(tǒng)的過(guò)程,通俗地講,就是進(jìn)行模型實(shí)驗(yàn)。因而,系統(tǒng)仿真的結(jié)果決定整個(gè)課程設(shè)計(jì)任務(wù)完成的到位程度。</p><p><b> 4.1 時(shí)序仿真</b></p><p> 編譯完成后,可以對(duì)所進(jìn)行的設(shè)計(jì)進(jìn)行仿真,下面簡(jiǎn)單介紹一下仿真的步驟。</p><p> 本課程設(shè)計(jì)的仿真平臺(tái)是QuartusⅡ5.1
35、,通過(guò)對(duì)VHDL源程序進(jìn)行編譯檢錯(cuò),然后創(chuàng)建波形文件(后綴名為.swf),加入輸入輸出變量,選擇適用的芯片(ACEX1K-EP1K100QC208-3)以及設(shè)定仿真結(jié)束時(shí)間(100us),設(shè)置好輸入初值進(jìn)行仿真,得到仿真波形圖。由于電子琴4個(gè)模塊都是獨(dú)立的程序,可分別對(duì)各個(gè)程序仿真,驗(yàn)證輸入輸出的正確性,但在最終能演奏出樂(lè)曲的則是頂層設(shè)計(jì)模塊。</p><p> 樂(lè)曲自動(dòng)演奏模塊的仿真如圖4-1所示。</
36、p><p> 圖4-1 樂(lè)曲自動(dòng)演奏模塊的仿真圖</p><p> 該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK周期200ns,自動(dòng)演奏AUTO設(shè)為0,鍵盤(pán)輸入信號(hào)INDEX2為00000010,INDEX0為音符信號(hào)輸出。</p><p> 音調(diào)發(fā)生模塊的仿真如圖4-2所示。</p><p> 圖4-2 音調(diào)發(fā)生模塊的仿真圖</p>&
37、lt;p> 該圖輸入音符信號(hào)INDEX初值為00000001,輸出是音符顯示信號(hào)CODE為1001111,高低音顯示信號(hào)為1,音符的分頻系數(shù)為1100000101即773Hz。</p><p> 數(shù)控分頻模塊的仿真如圖4-3所示。</p><p> 圖4-3 數(shù)控分頻模塊的仿真圖</p><p> 該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK1(各輸出值都是在時(shí)鐘信號(hào)
38、的下降沿有效),音符分頻系數(shù)TONE1為00100000,驅(qū)動(dòng)揚(yáng)聲器的音頻信號(hào)SPKS輸出為1。</p><p> 簡(jiǎn)易電子琴整個(gè)系統(tǒng)的仿真如圖4-4所示。</p><p> 圖4-3 簡(jiǎn)易電子琴整個(gè)系統(tǒng)的仿真圖</p><p> 該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK32MHZ,自動(dòng)演奏信號(hào)HANDTOAUTO初值為0,鍵盤(pán)輸入信號(hào)INDEX1為10000000;輸出
39、音符信號(hào)CODE1則為0000000,高低音節(jié)信號(hào)HIGH1變?yōu)?,即高音,音頻信號(hào)SPKOUT即輸出0,輸出為1時(shí)CODE1變?yōu)?000110。</p><p> 4.2 電路功能驗(yàn)證</p><p> 如果說(shuō)前面的過(guò)程都是理論上進(jìn)行軟件設(shè)計(jì)制作,那么電路驗(yàn)證則是硬件產(chǎn)生實(shí)際結(jié)果的必要步驟,它是軟件編程導(dǎo)入硬件系統(tǒng)得到最終設(shè)計(jì)目標(biāo)的一個(gè)過(guò)程。此課程設(shè)計(jì)中主要用到的硬件設(shè)施有ACEX1
40、K-EP1K100QC208-3芯片、一個(gè)12MHz的頻率元件、揚(yáng)聲器、脈沖開(kāi)關(guān)、發(fā)光二極管等,硬件和軟件系統(tǒng)相連接的樞紐就是芯片引腳和VHDL主程序中所有輸入輸出之間對(duì)應(yīng)的關(guān)系,它們滿足:CLK→79引腳、HANDTOAUTO→45、INDEX10→46、INDEX11→47、INDEX12→53、INDEX13→54、INDEX14→55、INDEX15→56、INDEX16→57、HIGH1→19、SPKOUT→68引腳。<
41、/p><p> 在選擇好芯片以及設(shè)置引腳值后,下載源程序(后綴名.sof)到此芯片上,確認(rèn)編程器硬件是否已安裝好。按如下步驟打開(kāi)編程器窗口:在Tool菜單中選擇Programmer項(xiàng),再次對(duì)源程序進(jìn)行編譯導(dǎo)入程序然后運(yùn)行,揚(yáng)聲器發(fā)出初設(shè)的音符3,5音即報(bào)警。手按鍵盤(pán)或撥脈沖開(kāi)關(guān)改變輸入信號(hào)則揚(yáng)聲器發(fā)出對(duì)應(yīng)的頻率的聲音,鍵盤(pán)(開(kāi)關(guān))是與芯片引腳對(duì)應(yīng)相連的。</p><p><b>
42、 4.3 問(wèn)題分析</b></p><p> 在整個(gè)課程設(shè)計(jì)中,不可避免遇到很多難于解決的問(wèn)題,一來(lái)是對(duì)EDA技術(shù)的不太了解,初涉VHDL語(yǔ)言以致很多語(yǔ)法和語(yǔ)言基本結(jié)構(gòu)、算法生疏,運(yùn)用不靈活,在編寫(xiě)源程序上遇到很大難題,而且在編譯運(yùn)行程序時(shí)對(duì)出錯(cuò)的語(yǔ)句理解不到位,難于下手修改錯(cuò)誤語(yǔ)句,這使得在設(shè)計(jì)程序時(shí)遇到很阻礙。</p><p> 在完成電路驗(yàn)證這一步時(shí),對(duì)頻率的選擇也是
43、一大難點(diǎn),有的設(shè)計(jì)項(xiàng)目對(duì)頻率的要求很高,需要大頻率元件才能滿足設(shè)計(jì)需求,若頻率元件選擇不恰當(dāng),將嚴(yán)重影響設(shè)計(jì)結(jié)果甚至沒(méi)有結(jié)果輸出。對(duì)于設(shè)計(jì)電子琴時(shí),由于要求輸出不同頻率的聲音,頻率變化范圍大,故需要一個(gè)12MHz的元件,對(duì)于小于這一值的頻率不足以滿足電路需求,仿真時(shí)只有一堆雜音輸出。</p><p> 在對(duì)于設(shè)計(jì)時(shí)遇到的不同問(wèn)題時(shí),首先應(yīng)該理解問(wèn)題關(guān)鍵所在,因?yàn)橛谜Z(yǔ)言編寫(xiě)程序需要仔細(xì)認(rèn)真的態(tài)度,一點(diǎn)點(diǎn)錯(cuò)誤漏洞將
44、導(dǎo)致整個(gè)源程序無(wú)法編譯運(yùn)行,阻礙下一步工作完成進(jìn)度。</p><p><b> 5 結(jié)束語(yǔ)</b></p><p> 通過(guò)這次VHDL課程設(shè)計(jì),不僅增強(qiáng)了我們的實(shí)踐動(dòng)手能力,也讓我們對(duì)課堂上所學(xué)到的理論知識(shí)的理解加深了許多,這給我們提供了一個(gè)在學(xué)習(xí)生活中很難得的理論聯(lián)系實(shí)際的機(jī)會(huì)。能夠借此機(jī)會(huì)了解到部分EDA技術(shù)的知識(shí)和學(xué)習(xí)運(yùn)用其中一種硬件描述語(yǔ)言VHDL編程實(shí)現(xiàn)
45、各種常用器件的功能,這是在哪堂講課上都得不到的一筆財(cái)富。</p><p> 另一方面我們也發(fā)現(xiàn)了在平時(shí)學(xué)習(xí)過(guò)程中難于發(fā)現(xiàn)的許多缺點(diǎn)跟不足。比如實(shí)踐機(jī)會(huì)過(guò)少,所學(xué)的理論知識(shí)不能靈活運(yùn)用,在遇到實(shí)際的問(wèn)題時(shí)無(wú)法正確處理;再者在課堂上獲得的專業(yè)知識(shí)過(guò)于淺顯,很多的有關(guān)基本操作原理、操作方法都理解不了;課外知識(shí)了解的也過(guò)少,導(dǎo)致在課程設(shè)計(jì)初期,面對(duì)完全陌生的設(shè)計(jì)課題無(wú)從下手,不知所措。這就提醒我們?cè)谄綍r(shí)的學(xué)習(xí)生活中不能
46、一味埋頭于面前的課本知識(shí),畢竟當(dāng)今社會(huì)競(jìng)爭(zhēng)越發(fā)激烈,而學(xué)校能教授的東西有限,要想在人才市場(chǎng)中脫穎而出就只能靠我們自己。當(dāng)然,在學(xué)習(xí)之余我們更應(yīng)該積極參加各種有關(guān)專業(yè)知識(shí)的實(shí)踐活動(dòng)和比賽,鞏固所學(xué)理論,多注意培養(yǎng)初步的實(shí)際工作能力和專業(yè)技術(shù)能力,這樣在以后的工作崗位上不會(huì)顯得那么倉(cāng)促與生疏。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 辛春
47、艷. VHDL硬件描述語(yǔ)言. 北京:國(guó)防工業(yè)出版社,2002</p><p> [2] 甘歷. VHDL應(yīng)用與開(kāi)發(fā)實(shí)踐. 北京:科學(xué)出版社,2003</p><p> [3]VHDL Language Reference Guide ,Alde Inc . Henderson NV USA ,1999</p><p> [4] 齊洪喜,陸穎. VHDL電路設(shè)
48、計(jì)實(shí)用教程. 北京:清華大學(xué)出版社,2004</p><p> [5]潘松,黃繼業(yè). EDA技術(shù)實(shí)用教程. 北京:科學(xué)出版社,2002</p><p> 附錄1:樂(lè)曲自動(dòng)演奏源程序清單</p><p> --程序名稱:AUTO.VHD</p><p> --程序功能:采用VHDL語(yǔ)言編程產(chǎn)生8位發(fā)聲控制輸入信號(hào)。</p>
49、<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_UNSIGNED.ALL;</p><p> ENTITY AUTO I
50、S</p><p> PORT(CLK: IN STD_LOGIC; --系統(tǒng)時(shí)鐘信號(hào)</p><p> AUTO: IN STD_LOGIC; --鍵盤(pán)輸入/自動(dòng)演奏</p><p> CLK2: BUFFER STD_LOGIC;
51、 --時(shí)鐘輸出</p><p> INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --鍵盤(pán)輸入信號(hào)</p><p> INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --音符信號(hào)輸出</p><p><b> END AUTO;</b></p>
52、<p> ARCHITECTURE BEHAVIORAL OF AUTO IS</p><p> SIGNAL COUNT0:INTEGER RANGE 0 TO 31; --定義信號(hào)計(jì)數(shù)器,有32個(gè)信號(hào)元素</p><p><b> BEGIN</b></p><p> PULSE0:PROCESS(CLK,AUTO)
53、 --PULSE0工作進(jìn)程開(kāi)始</p><p> VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定義變量計(jì)數(shù)器,從0到8</p><p><b> BEGIN</b></p><p> IF AUTO='1'THEN
54、 --鍵盤(pán)輸入為1</p><p> COUNT:=0;CLK2<='0'; --計(jì)數(shù)器值為0,時(shí)鐘信號(hào)2幅值為0</p><p> ELSIF(CLK'EVENT AND CLK='1')THEN --輸入的時(shí)鐘信號(hào)為其他值</p><p> COUNT:=COUNT+1
55、; --計(jì)數(shù)器加1即為1</p><p> IF COUNT=4 THEN </p><p> CLK2<='1';</p><p> ELSIF COUNT=8 THEN</p><p> CLK2<='0';COUNT:=0;
56、</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> MUSIC:PROCESS(CLK2) --MUSIC工作進(jìn)程開(kāi)始</p>
57、<p><b> BEGIN</b></p><p> IF(CLK2'EVENT AND CLK2='1')THEN --時(shí)鐘信號(hào)2為1</p><p> IF(COUNT0=31)THEN --計(jì)數(shù)器值為31</p><p> COUNT0<=
58、0; --計(jì)數(shù)器清0</p><p><b> ELSE</b></p><p> COUNT0<=COUNT0+1;</p><p><b> END IF;</b></p><p><b> END IF;</b>
59、</p><p> END PROCESS;</p><p> COM1:PROCESS(COUNT0,AUTO,INDEX2)</p><p><b> BEGIN</b></p><p> IF AUTO='0'THEN --鍵盤(pán)輸入為0</
60、p><p> CASE COUNT0 IS --由計(jì)數(shù)器從0到31的取值判斷音符信號(hào)的8位二進(jìn)制數(shù)</p><p> WHEN 0=>INDEX0<="00000100"; --3</p><p> WHEN 1=>INDEX0<="00000100"; --3</
61、p><p> WHEN 2=>INDEX0<="00000100"; --3</p><p> WHEN 3=>INDEX0<="00000100"; --3</p><p> WHEN 4=>INDEX0<="00010000"; --5</p
62、><p> WHEN 5=>INDEX0<="00010000"; --5</p><p> WHEN 6=>INDEX0<="00010000"; --5</p><p> WHEN 7=>INDEX0<="00100000"; --6</p&
63、gt;<p> WHEN 8=>INDEX0<="10000000"; --8</p><p> WHEN 9=>INDEX0<="10000000"; --8</p><p> WHEN 10=>INDEX0<="10000000"; --8</p&g
64、t;<p> WHEN 11=>INDEX0<="00000100"; --3</p><p> WHEN 12=>INDEX0<="00000010"; --2</p><p> WHEN 13=>INDEX0<="00000010"; --2</p>
65、;<p> WHEN 14=>INDEX0<="00000001"; --1</p><p> WHEN 15=>INDEX0<="00000001"; --1</p><p> WHEN 16=>INDEX0<="00010000"; --5</p>
66、<p> WHEN 17=>INDEX0<="00010000"; --5</p><p> WHEN 18=>INDEX0<="00001000"; --4</p><p> WHEN 19=>INDEX0<="00001000"; --4</p>
67、<p> WHEN 20=>INDEX0<="00001000"; --4</p><p> WHEN 21=>INDEX0<="00000100"; --3</p><p> WHEN 22=>INDEX0<="00000010"; --2</p>
68、<p> WHEN 23=>INDEX0<="00000010"; --2</p><p> WHEN 24=>INDEX0<="00010000"; --5</p><p> WHEN 25=>INDEX0<="00010000"; --5</p>&
69、lt;p> WHEN 26=>INDEX0<="00001000"; --4</p><p> WHEN 27=>INDEX0<="00001000"; --4</p><p> WHEN 28=>INDEX0<="00000100"; --3</p>&l
70、t;p> WHEN 29=>INDEX0<="00000100"; --3</p><p> WHEN 30=>INDEX0<="00000010"; --2</p><p> WHEN 31=>INDEX0<="00000010"; --2</p><
71、;p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p> ELSE INDEX0<=INDEX2; --將音符信號(hào)0的值賦給音符信號(hào)2</p><p><b> END IF;</b></p&
72、gt;<p> END PROCESS;</p><p> END BEHAVIORAL;</p><p> 附錄2:音調(diào)發(fā)生源程序清單</p><p> --程序名稱:TONE.VHD</p><p> --程序功能:采用VHDL語(yǔ)言編程產(chǎn)生音階的分頻預(yù)置值。</p><p> LIBRAR
73、Y 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 TONE IS</p><p&
74、gt; PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --音符輸入信號(hào)</p><p> CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --音符顯示信號(hào)</p><p> HIGH: OUT STD_LOGIC; --高低音顯示信號(hào)</p>&
75、lt;p> TONE0:OUT INTEGER RANGE 0 TO 2047); --音符的分頻系數(shù)</p><p><b> END TONE;</b></p><p> ARCHITECTURE ART OF TONE IS</p><p><b> BEGIN</b></p>
76、<p> SEARCH:PROCESS(INDEX) </p><p><b> BEGIN</b></p><p> CASE INDEX IS</p><p> WHEN"00000001"=>TONE0<=773;CODE<="1001111";HIGH&l
77、t;='1'; </p><p> --分頻系數(shù)773Hz,音符顯示1001111,顯示低音</p><p> WHEN"00000010"=>TONE0<=912;CODE<="0010010";HIGH<='1';</p><p> WHEN"000
78、00100"=>TONE0<=1036;CODE<="0000110";HIGH<='1';</p><p> WHEN"00001000"=>TONE0<=1116;CODE<="1001100";HIGH<='1';</p><p>
79、 WHEN"00010000"=>TONE0<=1197;CODE<="0100100";HIGH<='1';</p><p> WHEN"00100000"=>TONE0<=1290;CODE<="0100000";HIGH<='0';</p&g
80、t;<p> WHEN"01000000"=>TONE0<=1372;CODE<="0001111";HIGH<='0';</p><p> WHEN"10000000"=>TONE0<=1410;CODE<="0000000";HIGH<='0
81、';</p><p> WHEN OTHERS =>TONE0<=2047;CODE<="0000001";HIGH<='0';</p><p><b> END CASE;</b></p><p> END PROCESS;</p><p>
82、<b> END ART;</b></p><p> 附錄3:數(shù)控分頻源程序清單</p><p> --程序名稱:FENPIN.VHD</p><p> --程序功能:采用VHDL語(yǔ)言編程對(duì)時(shí)基脈沖進(jìn)行分頻,得到8個(gè)音符相對(duì)應(yīng)的頻率。</p><p> LIBRARY IEEE;</p><
83、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 FENPIN IS</p><p> PORT(CLK1: IN S
84、TD_LOGIC;</p><p> TONE1: IN INTEGER RANGE 0 TO 2047; --系統(tǒng)時(shí)鐘信號(hào)</p><p> SPKS: OUT STD_LOGIC); --音符分頻系數(shù)</p><p> END ENTITY FENPIN; --驅(qū)動(dòng)揚(yáng)聲器的音頻信號(hào)&
85、lt;/p><p> ARCHITECTURE ART OF FENPIN IS</p><p> SIGNAL PRECLK:STD_LOGIC; --定義時(shí)基脈沖信號(hào)</p><p> SIGNAL FULLSPKS:STD_LOGIC;</p><p><b> BEGIN</b>&
86、lt;/p><p> PROCESS(CLK1)</p><p> VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定義變量計(jì)數(shù)器,從0到8</p><p><b> BEGIN</b></p><p> IF(CLK1'EVENT AND CLK1='1'
87、;)THEN --據(jù)時(shí)鐘信號(hào)為1時(shí) </p><p> COUNT:=COUNT+1; --判斷計(jì)數(shù)器取值為1</p><p> IF COUNT=2 THEN</p><p> PRECLK<='1';</p><p> ELSIF COUNT=
88、4 THEN --若計(jì)數(shù)器計(jì)4</p><p> PRECLK<='0';COUNT:=0; --時(shí)基脈沖為0,計(jì)數(shù)器清零</p><p><b> END IF;</b></p><p><b> END IF;</b
89、></p><p> END PROCESS;</p><p> PROCESS(PRECLK,TONE1)</p><p> VARIABLE COUNT11:INTEGER RANGE 0 TO 2047; --定義變量頻率計(jì)數(shù)器11,從0</p><p><b> 到2047Hz</b><
90、/p><p><b> BEGIN</b></p><p> IF(PRECLK'EVENT AND PRECLK='1')THEN --PRECLK脈沖上升沿觸發(fā)</p><p> IF COUNT11<TONE1 THEN --若計(jì)數(shù)器11值小于音符信號(hào)1&
91、lt;/p><p> COUNT11:=COUNT11+1;FULLSPKS<='1'; --計(jì)數(shù)器加1,音頻信號(hào)為1</p><p><b> ELSE</b></p><p> COUNT11:=0;FULLSPKS<='0';</p><p><b>
92、 END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(FULLSPKS) --音頻信號(hào)輸出進(jìn)程開(kāi)始</p><p> VARIABLE COUNT2:
93、STD_LOGIC:='0'; --定義變量計(jì)數(shù)器2,初值為0</p><p><b> BEGIN</b></p><p> IF(FULLSPKS'EVENT AND FULLSPKS='1')THEN --音頻信號(hào)輸出上升沿有效時(shí)</p><p> COUNT2:
94、=NOT COUNT2;</p><p> IF COUNT2='1'THEN</p><p> SPKS<='1';</p><p><b> ELSE</b></p><p> SPKS<='0';</p><p><b
95、> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END ART;</b></p><p> 附錄4:頂層設(shè)計(jì)源程序清單</p><p> --程序
96、名稱:DIANZIQIN.VHD</p><p> --程序功能:采用VHDL語(yǔ)言編寫(xiě)主程序調(diào)用3個(gè)子程序,實(shí)現(xiàn)樂(lè)曲演奏的功能。</p><p> LIBRARY IEEE; </p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LO
97、GIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY DIANZIQIN IS</p><p> PORT(CLK 8HZ:IN STD_LOGIC;</p><p> CLK12MHZ: IN STD_LOGIC;
98、 --系統(tǒng)時(shí)鐘信號(hào)</p><p> HANDTOAUTO: IN STD_LOGIC; --鍵盤(pán)輸入/自動(dòng)演奏信號(hào)</p><p> CODE1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --音符顯示信號(hào)</p><p> INDEX1: IN STD_LOGIC_VECTOR(
99、7 DOWNTO 0); --鍵盤(pán)輸入信號(hào)</p><p> HIGH1: OUT STD_LOGIC; --高低音節(jié)信號(hào)</p><p> SPKOUT: OUT STD_LOGIC); --音頻信號(hào)</p><p><b> END;</b&
100、gt;</p><p> ARCHITECTURE ART OF DIANZIQIN IS</p><p> COMPONENT AUTO --引用 AUTO元件</p><p> PORT(CLK: IN STD_LOGIC; </p
101、><p> AUTO: IN STD_LOGIC; --輸入自動(dòng)演奏信號(hào)</p><p> INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --輸入8位控制信號(hào)</p><p> INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
102、 --輸出8位的音符</p><p> END COMPONENT;</p><p> COMPONENT TONE --引用TONE元件</p><p> PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p>
103、 CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> HIGH: OUT STD_LOGIC;</p><p> TONE0: OUT INTEGER RANGE 0 TO 2047);</p><p> END COMPONENT;</p><p> COMPONENT FENPI
104、N --引用FENPIN元件</p><p> PORT(CLK1: IN STD_LOGIC;</p><p> TONE1: IN INTEGER RANGE 0 TO 2047;</p><p> SPKS: OUT STD_LOGIC);</p><p>
105、END COMPONENT;</p><p> SIGNAL TONE2:INTEGER RANGE 0 TO 2047; --定義主程序音調(diào)頻率信號(hào)</p><p> SIGNAL INDX:STD_LOGIC_VECTOR(7 DOWNTO 0); --定義8位的音符信號(hào)</p><p><b> BEGIN</b&g
106、t;</p><p> U0:AUTO PORT MAP(CLK=>CLK8HZ,INDEX2=>INDEX1,INDEX0=>INDX,AUTO=>HANDTOAUTO); --調(diào)用自動(dòng)演奏模塊</p><p> U1:TONE PORT</p><
107、p> MAP(INDEX=>INDX,TONE0=>TONE2,CODE=>CODE1,HIGH=>HIGH1); --調(diào)用音調(diào)發(fā)</p><p><b> 生模塊</b></p><p> U2:FENPIN PORT MAP(CLK1=>CLK12MHZ,TONE1=>TONE2,SPKS=>SPKOUT);&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)硬件電子琴及自動(dòng)演奏
- eda課程設(shè)計(jì)---樂(lè)曲硬件演奏電路
- eda課程設(shè)計(jì)---自動(dòng)電子琴
- eda課程設(shè)計(jì)--具有自動(dòng)演奏功能的電子琴
- eda課程設(shè)計(jì)--樂(lè)曲硬件演奏電路設(shè)計(jì)
- eda課程設(shè)計(jì)---樂(lè)曲硬件演奏電路的vhdl設(shè)計(jì)
- 樂(lè)曲硬件演奏電路的vhdl設(shè)計(jì) eda課程設(shè)計(jì)
- 樂(lè)曲演奏課程設(shè)計(jì)報(bào)告---樂(lè)曲演奏電路的設(shè)計(jì)
- eda電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)---電子琴的設(shè)計(jì)與實(shí)現(xiàn)
- 電子琴課程設(shè)計(jì)
- 課程設(shè)計(jì)--電子琴
- 電子琴課程設(shè)計(jì)
- 電子電路cad課程設(shè)計(jì)--簡(jiǎn)易電子琴
- 電子琴的課程設(shè)計(jì)
- 電子琴的設(shè)計(jì) 課程設(shè)計(jì)
- eda樂(lè)曲硬件演奏電路設(shè)計(jì)
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)電子琴
- 接口課程設(shè)計(jì)電子琴
評(píng)論
0/150
提交評(píng)論