版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 樂曲演奏電路的設(shè)計(jì)</b></p><p> 摘 要 本課程設(shè)計(jì)主要采用EDA技術(shù)設(shè)計(jì)一個(gè)簡易的八音符電子琴,它可通過按鍵輸入來控制音響從而演奏出已存入的樂曲。在課程設(shè)計(jì)中,系統(tǒng)開發(fā)平臺為Windows XP,程序設(shè)計(jì)采用VHDL語言,程序運(yùn)行平臺為QuartusⅡ5.1。然后編寫程序?qū)崿F(xiàn)電子琴的各項(xiàng)功能,使不同的音階對應(yīng)不同頻率的正弦波,按下不同的鍵時(shí)發(fā)
2、出對應(yīng)頻率的聲音。程序通過調(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)品的性能越來越高,復(fù)雜度越來越大,更新步伐也越來越快,電子技術(shù)的發(fā)展進(jìn)入了劃時(shí)代的階段。其中電子技術(shù)的核心便是電子設(shè)計(jì)自動化EDA(Electronic Design Automatic)技術(shù)。EDA是指以計(jì)算機(jī)為
6、工作平臺,融合了應(yīng)用電子技術(shù)、計(jì)算機(jī)技術(shù)、智能化技術(shù)的最新成果而開發(fā)出的電子CAD通用軟件包,它根據(jù)硬件描述語言VHDL完成的設(shè)計(jì)文件,自動完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局布線及仿真,直至完成對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。本課程設(shè)計(jì)就是采用EDA技術(shù)描述語言VHDL編程實(shí)現(xià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ì)樂曲演奏電路,該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,采用自頂向下的設(shè)計(jì)方法來實(shí)現(xiàn),通過按鍵輸入來控制音響或者自動演奏已存入的歌曲。系統(tǒng)由樂曲自動演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三個(gè)部分組成。系統(tǒng)實(shí)現(xiàn)是用硬件描述語言VHDL按模塊化方式進(jìn)行設(shè)計(jì),然后進(jìn)行編程、時(shí)序仿真、電路功能驗(yàn)證,奏出美妙的樂曲。該設(shè)計(jì)最重要的一點(diǎn)就是通過按鍵控制不同的音調(diào)發(fā)生,每一個(gè)
8、音調(diào)對應(yīng)不同的頻率,從而輸出對應(yīng)頻率的聲音。</p><p> 1.2 課程設(shè)計(jì)內(nèi)容</p><p> ?。?)設(shè)計(jì)一個(gè)簡易的八音符電子琴,它可通過按鍵輸入來控制音響。</p><p> ?。?)系統(tǒng)演奏時(shí)可以選擇是手動演奏(由鍵盤輸入)還是自動演奏已存入的樂曲。</p><p> ?。?)能夠自動演奏多首樂曲,且樂曲可重復(fù)演奏。</
9、p><p> 1.3 課程設(shè)計(jì)原理</p><p> 本課程設(shè)計(jì)目的在于靈活運(yùn)用EDA技術(shù)編程實(shí)現(xiàn)一個(gè)簡易電子琴的樂曲演奏,它要求在實(shí)驗(yàn)箱上構(gòu)造一個(gè)電子琴電路,不同的音階對應(yīng)不同頻率的正弦波。按下每個(gè)代表不同音階的按鍵時(shí),能夠發(fā)出對應(yīng)頻率的聲音。故系統(tǒ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模塊的音符信號輸出就是TONE模塊的音符信號輸入。另外,時(shí)鐘脈沖信號在本課程設(shè)計(jì)中用的最多,用處也最大,一般情況下時(shí)鐘信號處上升沿有效,判斷和控制各個(gè)計(jì)數(shù)器
11、計(jì)數(shù)多少。</p><p> 2 EDA、VHDL簡介</p><p> EDA技術(shù)是以計(jì)算機(jī)為工作平臺,融合了應(yīng)用電子技術(shù)、計(jì)算機(jī)技術(shù)、信息處理及智能化技術(shù)的最新成果,進(jìn)行電子產(chǎn)品的自動設(shè)計(jì)。EDA可提供文本輸入以及圖形編輯的方法將設(shè)計(jì)者的意圖用程序或者圖形方式表達(dá)出來,而我們經(jīng)常用到的VHDL語言便是用于編寫源程序所需的最常見的硬件描述語言(HDL)之一。</p>&
12、lt;p><b> 2.1 EDA技術(shù)</b></p><p> EDA是電子設(shè)計(jì)自動化(Electronic Design Automation)縮寫,是90年代初從CAD、CAM、CAT和CAE的概念發(fā)展而來的。EDA技術(shù)是電子設(shè)計(jì)的發(fā)展趨勢,利用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ì)的測試、設(shè)計(jì)方針和布局布線等。</p><p> 現(xiàn)在對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語言</p><p> 常用硬件描述
14、語言有VHDL、Verilog和ABEL語言,而VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語句外,VHDL的結(jié)構(gòu)特點(diǎn)是將設(shè)計(jì)實(shí)體的內(nèi)部功能和算法完成部分。</p><p> 相對于其他硬件語言,VHDL有許多優(yōu)點(diǎn)。比如VHDL的行為描述能力更強(qiáng),而且具有豐富的仿真語句和庫函數(shù),隨時(shí)可對系統(tǒng)進(jìn)行仿真模擬,使設(shè)計(jì)者對整個(gè)工程的結(jié)構(gòu)和功能可行性做出判斷;另外,由于具有類屬描述語句
15、和子程序調(diào)用等功能,對于完成的設(shè)計(jì),在不改變源程序的條件下,只需改變類屬參量和函數(shù),就能輕易地改變設(shè)計(jì)的規(guī)模和結(jié)構(gòu)。</p><p> 3 簡易電子琴的設(shè)計(jì)過程</p><p> 根據(jù)系統(tǒng)設(shè)計(jì)要求,系統(tǒng)該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,設(shè)計(jì)采用自頂向下的設(shè)計(jì)方法,通過按鍵輸入來控制音響或者自動演奏已存入的歌曲。它由樂曲自動演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三部分組成。</p&
16、gt;<p> 3.1 樂曲自動演奏模塊</p><p> 樂曲自動演奏模塊的作用是產(chǎn)生8位發(fā)生控制輸入信號。當(dāng)進(jìn)行自動演奏時(shí),由存儲在此模塊的8位二進(jìn)制數(shù)作為發(fā)聲控制輸入,從而自動演奏樂曲。</p><p> 該模塊的VHDL源程序主要由3個(gè)工作進(jìn)程組成,分別為PULSE0,MUSIC和COM1。PULSE0的作用是根據(jù)鍵盤輸入(自動演奏)的值(0或1)來判斷計(jì)數(shù)器C
17、OUNT以及脈沖CLK2的輸出值。部分源程序如下:</p><p> PULSE0:PROCESS(CLK,AUTO) --工作進(jìn)程開始</p><p> VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定義計(jì)數(shù)器變量,值從0到8</p><p> IF AUTO='1'
18、;THEN --鍵盤輸入為1</p><p> COUNT:=0;CLK2<='0'; --計(jì)數(shù)器值指0,時(shí)鐘信號為0</p><p> ELSIF(CLK'EVENT AND CLK='1')THEN --時(shí)鐘輸入信號為1</p>
19、;<p> COUNT:=COUNT+1; --計(jì)數(shù)器加1</p><p> 當(dāng)確定了時(shí)鐘信號輸出的值后,在第二個(gè)PROCESS中就可以由它控制8位發(fā)聲控制輸入信號了。即CLK2的值為0時(shí),COUNT0為1。最后的COM1便是由前兩個(gè)PROCESS所確定的COUNT0、AUTO和鍵盤輸入信號值INDEX2將8位的二進(jìn)制數(shù)轉(zhuǎn)化為音符信號的輸出,達(dá)到自動演
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模塊的源程序符號編輯圖如圖3-1。</p><p> 圖3-1 AUTO模塊的符號編輯圖</p><p> 3.2 音調(diào)發(fā)生模塊</p><p> 音調(diào)發(fā)生模塊的作用是產(chǎn)生音階的分頻預(yù)置值。
22、當(dāng)8位發(fā)聲控制輸入信號中的某一位為高電平時(shí),則對應(yīng)某一音階的數(shù)值將輸出,該數(shù)值即為該音階的分頻預(yù)置值,分頻預(yù)置值控制數(shù)控分頻模塊進(jìn)行分頻,由此得到每個(gè)音階對應(yīng)的頻率。</p><p> 該模塊的唯一輸入信號INDEX對應(yīng)就是自動模塊中最后的輸出INDEX0,音符顯示信號CODE,高低音顯示信號HIGH和音符分頻系數(shù)都是根據(jù)音符輸入確定的。比如我們自定義INDEX第8位為高電平時(shí),它的分頻系數(shù)則為773Hz,音符
23、顯示信號為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)?,電子琴最終實(shí)現(xiàn)樂曲演奏就是輸出不同頻率的正弦波,此模塊就是將二進(jìn)制發(fā)聲信號轉(zhuǎn)化為對應(yīng)的頻率。</p><p> TONE模塊的源程序符號編輯圖如圖3-2</p><p> 3-2 TONE模塊的源程序符
26、號編輯圖</p><p> 3.3 數(shù)控分頻模塊</p><p> 數(shù)控分頻模塊是對時(shí)基脈沖進(jìn)行分頻,得到與0、1、2、3、4、5、6、7八個(gè)音符相對應(yīng)的頻率。</p><p> 該模塊主要由4個(gè)工作進(jìn)程組成。首先,根據(jù)系統(tǒng)時(shí)鐘信號的輸入得到時(shí)基脈沖以及計(jì)數(shù)器的值,而時(shí)鐘信號在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則是用來設(shè)置揚(yáng)聲器輸出信號的,揚(yáng)聲器信號由0和1控制,當(dāng)且僅當(dāng)前一個(gè)PROCESS中的FULLSPKS輸出為1時(shí),揚(yáng)聲器才有輸出,再根據(jù)計(jì)數(shù)器取值來確定輸出是1還是0。部分源程序如下:</p><p> IF(FULLSPKS
30、39;EVENT AND FULLSPKS='1')THEN --揚(yáng)聲器音頻信號為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模塊的源程序符號編輯圖如圖3-3</p><p> 3-3 FENPIN模塊的源程序符號編輯圖</p><p><b> 3.4 頂層設(shè)計(jì)</b></p><p> 該DIANZIQIN模塊是整個(gè)電子琴設(shè)計(jì)的核心,也
32、是VHDL程序的主程序,前面3個(gè)源程序都是作為子程序分別實(shí)現(xiàn)電子琴的某一功能,而DIANZIQIN模塊則通過調(diào)用子程序最終實(shí)現(xiàn)樂曲演奏的目的,奏出美妙的樂曲。利用VHDL語言COMPONENT將三個(gè)模塊組合起來,其中3個(gè)模塊和DIANZIQIN模塊的輸入輸出是一一對應(yīng)的,比如AUTO對應(yīng)HANDTOAUTO,TONE0對應(yīng)TONE2,SPKS對應(yīng)SPKOUT等,該模塊的符號編輯圖如圖3-4。</p><p>
33、圖3-4 DIANZIQIN模塊的符號編輯圖</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í)適用的必不可少的工具,它是指通過系
34、統(tǒng)模型實(shí)驗(yàn)去研究一個(gè)已經(jīng)存在或正在設(shè)計(jì)的系統(tǒng)的過程,通俗地講,就是進(jìn)行模型實(shí)驗(yàn)。因而,系統(tǒng)仿真的結(jié)果決定整個(gè)課程設(shè)計(jì)任務(wù)完成的到位程度。</p><p><b> 4.1 時(shí)序仿真</b></p><p> 編譯完成后,可以對所進(jìn)行的設(shè)計(jì)進(jìn)行仿真,下面簡單介紹一下仿真的步驟。</p><p> 本課程設(shè)計(jì)的仿真平臺是QuartusⅡ5.1
35、,通過對VHDL源程序進(jìn)行編譯檢錯,然后創(chuàng)建波形文件(后綴名為.swf),加入輸入輸出變量,選擇適用的芯片(ACEX1K-EP1K100QC208-3)以及設(shè)定仿真結(jié)束時(shí)間(100us),設(shè)置好輸入初值進(jìn)行仿真,得到仿真波形圖。由于電子琴4個(gè)模塊都是獨(dú)立的程序,可分別對各個(gè)程序仿真,驗(yàn)證輸入輸出的正確性,但在最終能演奏出樂曲的則是頂層設(shè)計(jì)模塊。</p><p> 樂曲自動演奏模塊的仿真如圖4-1所示。</
36、p><p> 圖4-1 樂曲自動演奏模塊的仿真圖</p><p> 該圖輸入系統(tǒng)時(shí)鐘信號CLK周期200ns,自動演奏AUTO設(shè)為0,鍵盤輸入信號INDEX2為00000010,INDEX0為音符信號輸出。</p><p> 音調(diào)發(fā)生模塊的仿真如圖4-2所示。</p><p> 圖4-2 音調(diào)發(fā)生模塊的仿真圖</p>&
37、lt;p> 該圖輸入音符信號INDEX初值為00000001,輸出是音符顯示信號CODE為1001111,高低音顯示信號為1,音符的分頻系數(shù)為1100000101即773Hz。</p><p> 數(shù)控分頻模塊的仿真如圖4-3所示。</p><p> 圖4-3 數(shù)控分頻模塊的仿真圖</p><p> 該圖輸入系統(tǒng)時(shí)鐘信號CLK1(各輸出值都是在時(shí)鐘信號
38、的下降沿有效),音符分頻系數(shù)TONE1為00100000,驅(qū)動揚(yáng)聲器的音頻信號SPKS輸出為1。</p><p> 簡易電子琴整個(gè)系統(tǒng)的仿真如圖4-4所示。</p><p> 圖4-3 簡易電子琴整個(gè)系統(tǒng)的仿真圖</p><p> 該圖輸入系統(tǒng)時(shí)鐘信號CLK32MHZ,自動演奏信號HANDTOAUTO初值為0,鍵盤輸入信號INDEX1為10000000;輸出
39、音符信號CODE1則為0000000,高低音節(jié)信號HIGH1變?yōu)?,即高音,音頻信號SPKOUT即輸出0,輸出為1時(shí)CODE1變?yōu)?000110。</p><p> 4.2 電路功能驗(yàn)證</p><p> 如果說前面的過程都是理論上進(jìn)行軟件設(shè)計(jì)制作,那么電路驗(yàn)證則是硬件產(chǎn)生實(shí)際結(jié)果的必要步驟,它是軟件編程導(dǎo)入硬件系統(tǒng)得到最終設(shè)計(jì)目標(biāo)的一個(gè)過程。此課程設(shè)計(jì)中主要用到的硬件設(shè)施有ACEX1
40、K-EP1K100QC208-3芯片、一個(gè)12MHz的頻率元件、揚(yáng)聲器、脈沖開關(guān)、發(fā)光二極管等,硬件和軟件系統(tǒng)相連接的樞紐就是芯片引腳和VHDL主程序中所有輸入輸出之間對應(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)編程器硬件是否已安裝好。按如下步驟打開編程器窗口:在Tool菜單中選擇Programmer項(xiàng),再次對源程序進(jìn)行編譯導(dǎo)入程序然后運(yùn)行,揚(yáng)聲器發(fā)出初設(shè)的音符3,5音即報(bào)警。手按鍵盤或撥脈沖開關(guān)改變輸入信號則揚(yáng)聲器發(fā)出對應(yīng)的頻率的聲音,鍵盤(開關(guān))是與芯片引腳對應(yīng)相連的。</p><p><b>
42、 4.3 問題分析</b></p><p> 在整個(gè)課程設(shè)計(jì)中,不可避免遇到很多難于解決的問題,一來是對EDA技術(shù)的不太了解,初涉VHDL語言以致很多語法和語言基本結(jié)構(gòu)、算法生疏,運(yùn)用不靈活,在編寫源程序上遇到很大難題,而且在編譯運(yùn)行程序時(shí)對出錯的語句理解不到位,難于下手修改錯誤語句,這使得在設(shè)計(jì)程序時(shí)遇到很阻礙。</p><p> 在完成電路驗(yàn)證這一步時(shí),對頻率的選擇也是
43、一大難點(diǎn),有的設(shè)計(jì)項(xiàng)目對頻率的要求很高,需要大頻率元件才能滿足設(shè)計(jì)需求,若頻率元件選擇不恰當(dāng),將嚴(yán)重影響設(shè)計(jì)結(jié)果甚至沒有結(jié)果輸出。對于設(shè)計(jì)電子琴時(shí),由于要求輸出不同頻率的聲音,頻率變化范圍大,故需要一個(gè)12MHz的元件,對于小于這一值的頻率不足以滿足電路需求,仿真時(shí)只有一堆雜音輸出。</p><p> 在對于設(shè)計(jì)時(shí)遇到的不同問題時(shí),首先應(yīng)該理解問題關(guān)鍵所在,因?yàn)橛谜Z言編寫程序需要仔細(xì)認(rèn)真的態(tài)度,一點(diǎn)點(diǎn)錯誤漏洞將
44、導(dǎo)致整個(gè)源程序無法編譯運(yùn)行,阻礙下一步工作完成進(jìn)度。</p><p><b> 5 結(jié)束語</b></p><p> 通過這次VHDL課程設(shè)計(jì),不僅增強(qiáng)了我們的實(shí)踐動手能力,也讓我們對課堂上所學(xué)到的理論知識的理解加深了許多,這給我們提供了一個(gè)在學(xué)習(xí)生活中很難得的理論聯(lián)系實(shí)際的機(jī)會。能夠借此機(jī)會了解到部分EDA技術(shù)的知識和學(xué)習(xí)運(yùn)用其中一種硬件描述語言VHDL編程實(shí)現(xiàn)
45、各種常用器件的功能,這是在哪堂講課上都得不到的一筆財(cái)富。</p><p> 另一方面我們也發(fā)現(xiàn)了在平時(shí)學(xué)習(xí)過程中難于發(fā)現(xiàn)的許多缺點(diǎn)跟不足。比如實(shí)踐機(jī)會過少,所學(xué)的理論知識不能靈活運(yùn)用,在遇到實(shí)際的問題時(shí)無法正確處理;再者在課堂上獲得的專業(yè)知識過于淺顯,很多的有關(guān)基本操作原理、操作方法都理解不了;課外知識了解的也過少,導(dǎo)致在課程設(shè)計(jì)初期,面對完全陌生的設(shè)計(jì)課題無從下手,不知所措。這就提醒我們在平時(shí)的學(xué)習(xí)生活中不能
46、一味埋頭于面前的課本知識,畢竟當(dāng)今社會競爭越發(fā)激烈,而學(xué)校能教授的東西有限,要想在人才市場中脫穎而出就只能靠我們自己。當(dāng)然,在學(xué)習(xí)之余我們更應(yīng)該積極參加各種有關(guān)專業(yè)知識的實(shí)踐活動和比賽,鞏固所學(xué)理論,多注意培養(yǎng)初步的實(shí)際工作能力和專業(yè)技術(shù)能力,這樣在以后的工作崗位上不會顯得那么倉促與生疏。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 辛春
47、艷. VHDL硬件描述語言. 北京:國防工業(yè)出版社,2002</p><p> [2] 甘歷. VHDL應(yīng)用與開發(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:樂曲自動演奏源程序清單</p><p> --程序名稱:AUTO.VHD</p><p> --程序功能:采用VHDL語言編程產(chǎn)生8位發(fā)聲控制輸入信號。</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í)鐘信號</p><p> AUTO: IN STD_LOGIC; --鍵盤輸入/自動演奏</p><p> CLK2: BUFFER STD_LOGIC;
51、 --時(shí)鐘輸出</p><p> INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --鍵盤輸入信號</p><p> INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --音符信號輸出</p><p><b> END AUTO;</b></p>
52、<p> ARCHITECTURE BEHAVIORAL OF AUTO IS</p><p> SIGNAL COUNT0:INTEGER RANGE 0 TO 31; --定義信號計(jì)數(shù)器,有32個(gè)信號元素</p><p><b> BEGIN</b></p><p> PULSE0:PROCESS(CLK,AUTO)
53、 --PULSE0工作進(jìn)程開始</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、 --鍵盤輸入為1</p><p> COUNT:=0;CLK2<='0'; --計(jì)數(shù)器值為0,時(shí)鐘信號2幅值為0</p><p> ELSIF(CLK'EVENT AND CLK='1')THEN --輸入的時(shí)鐘信號為其他值</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)程開始</p>
57、<p><b> BEGIN</b></p><p> IF(CLK2'EVENT AND CLK2='1')THEN --時(shí)鐘信號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 --鍵盤輸入為0</
60、p><p> CASE COUNT0 IS --由計(jì)數(shù)器從0到31的取值判斷音符信號的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; --將音符信號0的值賦給音符信號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語言編程產(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); --音符輸入信號</p><p> CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --音符顯示信號</p><p> HIGH: OUT STD_LOGIC; --高低音顯示信號</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語言編程對時(shí)基脈沖進(jìn)行分頻,得到8個(gè)音符相對應(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í)鐘信號</p><p> SPKS: OUT STD_LOGIC); --音符分頻系數(shù)</p><p> END ENTITY FENPIN; --驅(qū)動揚(yáng)聲器的音頻信號&
85、lt;/p><p> ARCHITECTURE ART OF FENPIN IS</p><p> SIGNAL PRECLK:STD_LOGIC; --定義時(shí)基脈沖信號</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í)鐘信號為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值小于音符信號1&
91、lt;/p><p> COUNT11:=COUNT11+1;FULLSPKS<='1'; --計(jì)數(shù)器加1,音頻信號為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) --音頻信號輸出進(jìn)程開始</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 --音頻信號輸出上升沿有效時(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語言編寫主程序調(diào)用3個(gè)子程序,實(shí)現(xiàn)樂曲演奏的功能。</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í)鐘信號</p><p> HANDTOAUTO: IN STD_LOGIC; --鍵盤輸入/自動演奏信號</p><p> CODE1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --音符顯示信號</p><p> INDEX1: IN STD_LOGIC_VECTOR(
99、7 DOWNTO 0); --鍵盤輸入信號</p><p> HIGH1: OUT STD_LOGIC; --高低音節(jié)信號</p><p> SPKOUT: OUT STD_LOGIC); --音頻信號</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; --輸入自動演奏信號</p><p> INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --輸入8位控制信號</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)頻率信號</p><p> SIGNAL INDX:STD_LOGIC_VECTOR(7 DOWNTO 0); --定義8位的音符信號</p><p><b> BEGIN</b&g
106、t;</p><p> U0:AUTO PORT MAP(CLK=>CLK8HZ,INDEX2=>INDEX1,INDEX0=>INDX,AUTO=>HANDTOAUTO); --調(diào)用自動演奏模塊</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. 本站所有資源如無特殊說明,都需要本地電腦安裝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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)硬件電子琴及自動演奏
- eda課程設(shè)計(jì)---樂曲硬件演奏電路
- eda課程設(shè)計(jì)---自動電子琴
- eda課程設(shè)計(jì)--具有自動演奏功能的電子琴
- eda課程設(shè)計(jì)--樂曲硬件演奏電路設(shè)計(jì)
- eda課程設(shè)計(jì)---樂曲硬件演奏電路的vhdl設(shè)計(jì)
- 樂曲硬件演奏電路的vhdl設(shè)計(jì) eda課程設(shè)計(jì)
- 樂曲演奏課程設(shè)計(jì)報(bào)告---樂曲演奏電路的設(shè)計(jì)
- eda電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)---電子琴的設(shè)計(jì)與實(shí)現(xiàn)
- 電子琴課程設(shè)計(jì)
- 課程設(shè)計(jì)--電子琴
- 電子琴課程設(shè)計(jì)
- 電子電路cad課程設(shè)計(jì)--簡易電子琴
- 電子琴的課程設(shè)計(jì)
- 電子琴的設(shè)計(jì) 課程設(shè)計(jì)
- eda樂曲硬件演奏電路設(shè)計(jì)
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)電子琴
- 接口課程設(shè)計(jì)電子琴
評論
0/150
提交評論