EDA電子琴課程設(shè)計(jì)_第1頁(yè)
EDA電子琴課程設(shè)計(jì)_第2頁(yè)
EDA電子琴課程設(shè)計(jì)_第3頁(yè)
EDA電子琴課程設(shè)計(jì)_第4頁(yè)
EDA電子琴課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于VHDL文本輸入法的電子琴電路設(shè)計(jì)EDA課程設(shè)計(jì)基于VHDL文本輸入法的電子琴電路設(shè)計(jì)摘 要:本課程設(shè)計(jì)主要采用EDA技術(shù)設(shè)計(jì)一個(gè)簡(jiǎn)易的八音符電子琴,它可通過按鍵輸入來(lái)控制音響從而演奏出已存入的樂曲。在課程設(shè)計(jì)中,系統(tǒng)開發(fā)平臺(tái)為Windows 8,程序設(shè)計(jì)采用VHDL語(yǔ)言,程序運(yùn)行平臺(tái)為Quartus。然后編寫程序?qū)崿F(xiàn)電子琴的各項(xiàng)功能,使不同的音階對(duì)應(yīng)不同頻率的正弦波,按下不同的鍵時(shí)發(fā)出對(duì)應(yīng)頻率的聲音。程序通過調(diào)試運(yùn)行,時(shí)序仿真,電路功能驗(yàn)證,順利地實(shí)現(xiàn)了設(shè)計(jì)目標(biāo)。關(guān)鍵詞 :電子琴,EDA,VHDL,音階,頻率1 引 言 隨著信息科學(xué)的進(jìn)步,現(xiàn)代電子產(chǎn)品的性能越來(lái)越高,復(fù)雜度越來(lái)越大,更新

2、步伐也越來(lái)越快,電子技術(shù)的發(fā)展進(jìn)入了劃時(shí)代的階段。其中電子技術(shù)的核心便是電子設(shè)計(jì)自動(dòng)化EDA(Electronic Design Automatic)技術(shù)。EDA是指以計(jì)算機(jī)為工作平臺(tái),融合了應(yīng)用電子技術(shù)、計(jì)算機(jī)技術(shù)、智能化技術(shù)的最新成果而開發(fā)出的電子CAD通用軟件包,它根據(jù)硬件描述語(yǔ)言HDL完成的設(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è)很好的例子。1.1 課程設(shè)計(jì)目的 本課程設(shè)計(jì)主要是基于VHDL文本輸

3、入法設(shè)計(jì)樂曲演奏電路,該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,采用自頂向下的設(shè)計(jì)方法來(lái)實(shí)現(xiàn),通過按鍵輸入來(lái)控制音響或者自動(dòng)演奏已存入的歌曲。系統(tǒng)由樂曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三個(gè)部分組成。系統(tǒng)實(shí)現(xiàn)是用硬件描述語(yǔ)言VHDL按模塊化方式進(jìn)行設(shè)計(jì),然后進(jìn)行編程、時(shí)序仿真、電路功能驗(yàn)證,奏出美妙的樂曲。該設(shè)計(jì)最重要的一點(diǎn)就是通過按鍵控制不同的音調(diào)發(fā)生,每一個(gè)音調(diào)對(duì)應(yīng)不同的頻率,從而輸出對(duì)應(yīng)頻率的聲音。1.2 課程設(shè)計(jì)內(nèi)容(1)設(shè)計(jì)一個(gè)簡(jiǎn)易的八音符電子琴,它可通過按鍵輸入來(lái)控制音響。(2)系統(tǒng)演奏時(shí)可以選擇是手動(dòng)演奏(由鍵盤輸入)還是自動(dòng)演奏已存入的樂曲。(3)能夠自動(dòng)演奏多首樂曲,且樂曲可

4、重復(fù)演奏。1.3 課程設(shè)計(jì)原理本課程設(shè)計(jì)目的在于靈活運(yùn)用EDA技術(shù)編程實(shí)現(xiàn)一個(gè)簡(jiǎn)易電子琴的樂曲演奏,它要求在實(shí)驗(yàn)箱上構(gòu)造一個(gè)電子琴電路,不同的音階對(duì)應(yīng)不同頻率的正弦波。按下每個(gè)代表不同音階的按鍵時(shí),能夠發(fā)出對(duì)應(yīng)頻率的聲音。故系統(tǒng)可分為樂曲自動(dòng)演奏模塊(AUTO)、音調(diào)發(fā)生模塊(TONE)和數(shù)控分頻模塊(FENPIN)三部分。系統(tǒng)的整體組裝設(shè)計(jì)原理圖如圖1-1所示。 圖1-1 系統(tǒng)的整體組裝設(shè)計(jì)原理圖由于設(shè)計(jì)分模塊組成,每個(gè)單獨(dú)的模塊都是一個(gè)完整的源程序,分別實(shí)現(xiàn)不同性質(zhì)的功能,但是每個(gè)模塊又是緊密關(guān)聯(lián)的,前一個(gè)模塊的輸出很可能是后一模塊的輸入。如AUTO模塊的音符信號(hào)輸出就是TONE模塊的音符

5、信號(hào)輸入。另外,時(shí)鐘脈沖信號(hào)在本課程設(shè)計(jì)中用的最多,用處也最大,一般情況下時(shí)鐘信號(hào)處上升沿有效,判斷和控制各個(gè)計(jì)數(shù)器計(jì)數(shù)多少。2 EDA、VHDL簡(jiǎn)介 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ǔ)言便是用于編寫源程序所需的最常見的硬件描述語(yǔ)言(HDL)之一。2.1 EDA技術(shù) EDA是電子設(shè)計(jì)自動(dòng)化(Electronic Design Automation)縮寫,是90年代初從CAD、CAM、CAT和CAE的概念發(fā)

6、展而來(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)用范圍已涉及模擬、微波等多個(gè)領(lǐng)域,可以實(shí)現(xiàn)各個(gè)領(lǐng)域電子系統(tǒng)設(shè)計(jì)的測(cè)試、設(shè)計(jì)方針和布局布線等。 現(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ì)。2.2 VHDL語(yǔ)言常用硬件描述語(yǔ)言有VHDL、Verilog和ABEL語(yǔ)言,而VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有

7、硬件特征的語(yǔ)句外,VHDL的結(jié)構(gòu)特點(diǎn)是將設(shè)計(jì)實(shí)體的內(nèi)部功能和算法完成部分。相對(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ǔ)句和子程序調(diào)用等功能,對(duì)于完成的設(shè)計(jì),在不改變?cè)闯绦虻臈l件下,只需改變類屬參量和函數(shù),就能輕易地改變?cè)O(shè)計(jì)的規(guī)模和結(jié)構(gòu)。3 簡(jiǎn)易電子琴的設(shè)計(jì)過程根據(jù)系統(tǒng)設(shè)計(jì)要求,系統(tǒng)該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,設(shè)計(jì)采用自頂向下的設(shè)計(jì)方法,通過按鍵輸入來(lái)控制音響或者自動(dòng)演奏已存入的歌曲。它由樂曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三

8、部分組成。3.1 樂曲自動(dòng)演奏模塊樂曲自動(dòng)演奏模塊的作用是產(chǎn)生8位發(fā)生控制輸入信號(hào)。當(dāng)進(jìn)行自動(dòng)演奏時(shí),由存儲(chǔ)在此模塊的8位二進(jìn)制數(shù)作為發(fā)聲控制輸入,從而自動(dòng)演奏樂曲。該模塊的VHDL源程序主要由3個(gè)工作進(jìn)程組成,分別為PULSE0,MUSIC和COM1。PULSE0的作用是根據(jù)鍵盤輸入(自動(dòng)演奏)的值(0或1)來(lái)判斷計(jì)數(shù)器COUNT以及脈沖CLK2的輸出值。部分源程序如下: PULSE0:PROCESS(CLK,AUTO) -工作進(jìn)程開始 VARIABLE COUNT:INTEGER RANGE 0 TO 8; -定義計(jì)數(shù)器變量,值從0到8 IF AUTO='1'THEN -鍵

9、盤輸入為1 COUNT:=0;CLK2<='0' -計(jì)數(shù)器值指0,時(shí)鐘信號(hào)為0 ELSIF(CLK'EVENT AND CLK='1')THEN -時(shí)鐘輸入信號(hào)為1 COUNT:=COUNT+1; -計(jì)數(shù)器加1當(dāng)確定了時(shí)鐘信號(hào)輸出的值后,在第二個(gè)PROCESS中就可以由它控制8位發(fā)聲控制輸入信號(hào)了。即CLK2的值為0時(shí),COUNT0為1。最后的COM1便是由前兩個(gè)PROCESS所確定的COUNT0、AUTO和鍵盤輸入信號(hào)值INDEX2將8位的二進(jìn)制數(shù)轉(zhuǎn)化為音符信號(hào)的輸出,達(dá)到自動(dòng)演奏的目的。部分源程序如下:IF AUTO='0'TH

10、ENCASE COUNT0 IS WHEN 0=>INDEX0<="00000100" -3 WHEN 4=>INDEX0<="00010000" -5該模塊最主要的用途就是將輸入二進(jìn)制數(shù)轉(zhuǎn)化為發(fā)聲控制輸入,是產(chǎn)生音符的重要步驟, AUTO模塊的源程序符號(hào)編輯圖如圖3-1。圖3-1 AUTO模塊的符號(hào)編輯圖3.2 音調(diào)發(fā)生模塊音調(diào)發(fā)生模塊的作用是產(chǎn)生音階的分頻預(yù)置值。當(dāng)8位發(fā)聲控制輸入信號(hào)中的某一位為高電平時(shí),則對(duì)應(yīng)某一音階的數(shù)值將輸出,該數(shù)值即為該音階的分頻預(yù)置值,分頻預(yù)置值控制數(shù)控分頻模塊進(jìn)行分頻,由此得到每個(gè)音階對(duì)應(yīng)的頻率。

11、該模塊的唯一輸入信號(hào)INDEX對(duì)應(yīng)就是自動(dòng)模塊中最后的輸出INDEX0,音符顯示信號(hào)CODE,高低音顯示信號(hào)HIGH和音符分頻系數(shù)都是根據(jù)音符輸入確定的。比如我們自定義INDEX第8位為高電平時(shí),它的分頻系數(shù)則為773Hz,音符顯示信號(hào)為1001111,即是773的二進(jìn)制表示,此時(shí)高低音顯示1表示高音。部分源程序如下:CASE INDEX ISWHEN"00000010"=>TONE0<=912;CODE<="0010010"HIGH<='1' -音符第7位為1,分頻數(shù)912Hz,音符顯示為0010010,屬高音W

12、HEN"01000000"=>TONE0<=1372;CODE<="0001111"HIGH<='0'WHEN OTHERS =>TONE0<=2047;CODE<="0000001"HIGH<='0'顯然,該模塊最主要的作用就是給音符輸入預(yù)設(shè)頻率值,因?yàn)?,電子琴最終實(shí)現(xiàn)樂曲演奏就是輸出不同頻率的正弦波,此模塊就是將二進(jìn)制發(fā)聲信號(hào)轉(zhuǎn)化為對(duì)應(yīng)的頻率。3.3 數(shù)控分頻模塊數(shù)控分頻模塊是對(duì)時(shí)基脈沖進(jìn)行分頻,得到與0、1、2、3、4、5、6、7八個(gè)音符相對(duì)應(yīng)的頻率

13、。FENPIN模塊的源程序符號(hào)編輯圖如圖3-3。該模塊主要由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è)置。第二個(gè)PROCESS是此模塊的核心,即由時(shí)基脈沖值轉(zhuǎn)化為音符的頻率。部分源程序如下:VARIABLE COUNT11:INTEGER RANGE 0 TO 2047; -定義頻率計(jì)數(shù)器,從0到2047Hz IF(PRECLK'EVENT AND PRECLK='1')THEN -時(shí)基脈沖為1時(shí) IF COUNT11<TONE1 THEN

14、-頻率計(jì)數(shù)器小于音符分頻系數(shù) COUNT11:=COUNT11+1;FULLSPKS<='1' -計(jì)數(shù)加1,揚(yáng)聲器音頻為1 ELSE COUNT11:=0;FULLSPKS<='0'最后一個(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。部分源程序如下:IF(FULLSPKS'EVENT AND FULLSPKS='1')THEN -揚(yáng)聲器音頻信號(hào)為1COUNT2:=NOT COUNT2;IF

15、COUNT2='1'THENSPKS<='1' -揚(yáng)聲器輸出為1ELSE SPK<=0; 3.4 頂層設(shè)計(jì)該DIANZIQIN模塊是整個(gè)電子琴設(shè)計(jì)的核心,也是VHDL程序的主程序,前面3個(gè)源程序都是作為子程序分別實(shí)現(xiàn)電子琴的某一功能,而DIANZIQIN模塊則通過調(diào)用子程序最終實(shí)現(xiàn)樂曲演奏的目的,奏出美妙的樂曲。利用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。圖3-

16、4 DIANZIQIN模塊的符號(hào)編輯圖該圖描述的是DIANZIQIN模塊輸入輸出的變量表示,整個(gè)系統(tǒng)的整體組裝設(shè)計(jì)原理圖就是這4幅編輯圖按輸入輸出關(guān)系順序連接而成的。4 系統(tǒng)仿真系統(tǒng)仿真是在實(shí)際系統(tǒng)上進(jìn)行實(shí)驗(yàn)研究比較困難時(shí)適用的必不可少的工具,它是指通過系統(tǒng)模型實(shí)驗(yàn)去研究一個(gè)已經(jīng)存在或正在設(shè)計(jì)的系統(tǒng)的過程,通俗地講,就是進(jìn)行模型實(shí)驗(yàn)。因而,系統(tǒng)仿真的結(jié)果決定整個(gè)課程設(shè)計(jì)任務(wù)完成的到位程度。4.1 時(shí)序仿真編譯完成后,可以對(duì)所進(jìn)行的設(shè)計(jì)進(jìn)行仿真,下面簡(jiǎn)單介紹一下仿真的步驟。(1) 打開波形編輯器,列出所有的信號(hào),選擇所需要的信號(hào),然后畫出輸入信號(hào)的波形,最后將該文件以.scf的擴(kuò)展名存盤。 (2

17、) 在Quartus菜單中打開仿真器窗口,單擊Start按鈕,當(dāng)仿真器結(jié)束工作時(shí),單擊Open SCF按鈕,就可以看到仿真的結(jié)果。本課程設(shè)計(jì)的仿真平臺(tái)是Quartus,通過對(duì)VHDL源程序進(jìn)行編譯檢錯(cuò),然后創(chuàng)建波形文件(后綴名為.scf),加入輸入輸出變量,設(shè)置好輸入初值進(jìn)行仿真,得到仿真波形圖。由于電子琴4個(gè)模塊都是獨(dú)立的程序,可分別對(duì)各個(gè)程序仿真,驗(yàn)證輸入輸出的正確性,但在最終能演奏出樂曲的則是頂層設(shè)計(jì)模塊。(1) 樂曲自動(dòng)演奏模塊的仿真如圖4-1所示。圖4-1 樂曲自動(dòng)演奏模塊的仿真圖該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK初值設(shè)為0,自動(dòng)演奏AUTO設(shè)為1,鍵盤輸入信號(hào)INDEX2為00,INDEX

18、0為音符信號(hào)輸出,是8位的二進(jìn)制代碼它根據(jù)COUNT0的值改變而改變。(2) 音調(diào)發(fā)生模塊的仿真如圖4-2所示。圖4-2 音調(diào)發(fā)生模塊的仿真圖 該圖輸入音符信號(hào)INDEX初值為00,輸出是音符顯示信號(hào)CODE為01,高低音顯示信號(hào)為0,音符的分頻系數(shù)為11111111即2047Hz。(3) 數(shù)控分頻模塊的仿真如圖4-3所示。圖4-3 數(shù)控分頻模塊的仿真圖該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK1初值為0(各輸出值都是在時(shí)鐘信號(hào)的下降沿有效),音符分頻系數(shù)TONE1為00100000即1290Hz,驅(qū)動(dòng)揚(yáng)聲器的音頻信號(hào)SPKS輸出為1。(4) 簡(jiǎn)易電子琴整個(gè)系統(tǒng)的仿真如圖4-4所示。 圖4-3 簡(jiǎn)易電子琴整個(gè)

19、系統(tǒng)的仿真圖該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK32MHZ初值為0,自動(dòng)演奏信號(hào)HANDTOAUTO初值為0,鍵盤輸入信號(hào)INDEX1為00000000;輸出音符信號(hào)CODE1則為0110000,高低音節(jié)信號(hào)HIGH1變?yōu)?,即高音,音頻信號(hào)SPKOUT即輸出0,輸出為1時(shí)CODE1變?yōu)?110100,這時(shí)出現(xiàn)10ns的延時(shí)。在仿真時(shí)由于系統(tǒng)各方面原因影響,出現(xiàn)延時(shí)屬于正?,F(xiàn)象。4.2 電路功能驗(yàn)證 如果說前面的過程都是理論上進(jìn)行軟件設(shè)計(jì)制作,那么電路驗(yàn)證則是硬件產(chǎn)生實(shí)際結(jié)果的必要步驟,它是軟件編程導(dǎo)入硬件系統(tǒng)得到最終設(shè)計(jì)目標(biāo)的一個(gè)過程。此課程設(shè)計(jì)中主要用到的硬件設(shè)施有cycloneEP2C8T144C

20、8 芯片、信號(hào)源、揚(yáng)聲器、鍵盤或脈沖開關(guān)、發(fā)光二極管等,硬件和軟件系統(tǒng)相連接的樞紐就是芯片引腳和VHDL主程序中所有輸入輸出之間對(duì)應(yīng)的關(guān)系,它們滿足:CLK7引腳、HANDTOAUTO45、INDEX1046、INDEX1147、INDEX1253、INDEX1354、INDEX1455、INDEX1556、INDEX1657、HIGH119、SPKOUT68引腳。在選擇好芯片以及設(shè)置引腳值后,下載源程序(后綴名.sof)到此芯片上,確認(rèn)編程器硬件是否已安裝好。按如下步驟打開編程器窗口:在quartus菜單中選擇Programmer項(xiàng),點(diǎn)擊Configure項(xiàng)將配置數(shù)據(jù)下載到一個(gè)FLEX器件中

21、。再次對(duì)源程序進(jìn)行編譯導(dǎo)入程序然后運(yùn)行,揚(yáng)聲器發(fā)出初設(shè)的音符3,5音即報(bào)警。手按鍵盤或撥脈沖開關(guān)改變輸入信號(hào)則揚(yáng)聲器發(fā)出對(duì)應(yīng)的頻率的聲音,鍵盤(開關(guān))是與芯片引腳對(duì)應(yīng)相連的。4.3 問題分析在整個(gè)課程設(shè)計(jì)中,不可避免遇到很多難于解決的問題,一來(lái)是對(duì)EDA技術(shù)的不太了解,初涉VHDL語(yǔ)言以致很多語(yǔ)法和語(yǔ)言基本結(jié)構(gòu)、算法生疏,運(yùn)用不靈活,在編寫源程序上遇到很大難題,而且在編譯運(yùn)行程序時(shí)對(duì)出錯(cuò)的語(yǔ)句理解不到位,難于下手修改錯(cuò)誤語(yǔ)句,這使得在設(shè)計(jì)程序時(shí)遇到很大的阻礙,此外,VHDL語(yǔ)言的數(shù)據(jù)類型很容易造成混淆,比如IN STD_LOGIC_VECTOR(7 DOWNTO 0)語(yǔ)句,它有時(shí)既可以認(rèn)為是從

22、7下降到0,也可認(rèn)為是從0上升到7,當(dāng)輸入有多位時(shí),這就容易造成在讀懂仿真波形圖時(shí)讀位數(shù)倒置,使仿真現(xiàn)象與理論結(jié)果相出入。5 結(jié)束語(yǔ)通過這次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)各種常用器件的功能,這是在哪堂講課上都得不到的一筆財(cái)富。另一方面我們也發(fā)現(xiàn)了在平時(shí)學(xué)習(xí)過程中難于發(fā)現(xiàn)的許多缺點(diǎn)跟不足。比如實(shí)踐機(jī)會(huì)過少,所學(xué)的理論知識(shí)不能靈活運(yùn)用,在遇到實(shí)際的問題時(shí)無(wú)法正確處理;再者在課堂上獲得的專業(yè)知

23、識(shí)過于淺顯,很多的有關(guān)基本操作原理、操作方法都理解不了;課外知識(shí)了解的也過少,導(dǎo)致在課程設(shè)計(jì)初期,面對(duì)完全陌生的設(shè)計(jì)課題無(wú)從下手,不知所措。這就提醒我們?cè)谄綍r(shí)的學(xué)習(xí)生活中不能一味埋頭于面前的課本知識(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)促與生疏。附錄1:樂曲自動(dòng)演奏源程序清單-程序名稱:AUTO.VHD-程序功能:采用VHDL語(yǔ)言編程產(chǎn)生8位發(fā)聲控制輸入信號(hào)。LIBRARY IE

24、EE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY AUTO IS PORT(CLK: IN STD_LOGIC; -系統(tǒng)時(shí)鐘信號(hào) AUTO: IN STD_LOGIC; -鍵盤輸入/自動(dòng)演奏 CLK2: BUFFER STD_LOGIC; -時(shí)鐘輸出 INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -鍵盤輸入信號(hào) INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -音符信號(hào)輸出EN

25、D AUTO;ARCHITECTURE BEHAVIORAL OF AUTO IS SIGNAL COUNT0:INTEGER RANGE 0 TO 31; -定義信號(hào)計(jì)數(shù)器,有32個(gè)信號(hào)元素BEGINPULSE0:PROCESS(CLK,AUTO) -PULSE0工作進(jìn)程開始 VARIABLE COUNT:INTEGER RANGE 0 TO 8; -定義變量計(jì)數(shù)器,從0到8BEGIN IF AUTO='1'THEN -鍵盤輸入為1 COUNT:=0;CLK2<='0' -計(jì)數(shù)器值為0,時(shí)鐘信號(hào)2幅值為0 ELSIF(CLK'EVENT AND

26、CLK='1')THEN -輸入的時(shí)鐘信號(hào)為其他值 COUNT:=COUNT+1; -計(jì)數(shù)器加1即為1 IF COUNT=4 THEN CLK2<='1' ELSIF COUNT=8 THEN CLK2<='0'COUNT:=0;END IF;END IF;END PROCESS;MUSIC:PROCESS(CLK2) -MUSIC工作進(jìn)程開始BEGIN IF(CLK2'EVENT AND CLK2='1')THEN -時(shí)鐘信號(hào)2為1 IF(COUNT0=31)THEN -計(jì)數(shù)器值為31 COUNT0<=

27、0; -計(jì)數(shù)器清0ELSE COUNT0<=COUNT0+1;END IF;END IF;END PROCESS;COM1:PROCESS(COUNT0,AUTO,INDEX2)BEGINIF AUTO='0'THEN -鍵盤輸入為0CASE COUNT0 IS -由計(jì)數(shù)器從0到31的取值判斷音符信號(hào)的8位二進(jìn)制數(shù) WHEN 0=>INDEX0<="00000100" -3 WHEN 1=>INDEX0<="00000100" -3 WHEN 2=>INDEX0<="00000100&q

28、uot; -3 WHEN 3=>INDEX0<="00000100" -3 WHEN 4=>INDEX0<="00010000" -5 WHEN 5=>INDEX0<="00010000" -5 WHEN 6=>INDEX0<="00010000" -5 WHEN 7=>INDEX0<="00100000" -6 WHEN 8=>INDEX0<="10000000" -8 WHEN 9=>INDEX

29、0<="10000000" -8 WHEN 10=>INDEX0<="10000000" -8 WHEN 11=>INDEX0<="00000100" -3 WHEN 12=>INDEX0<="00000010" -2 WHEN 13=>INDEX0<="00000010" -2 WHEN 14=>INDEX0<="00000001" -1 WHEN 15=>INDEX0<="000000

30、01" -1 WHEN 16=>INDEX0<="00010000" -5 WHEN 17=>INDEX0<="00010000" -5 WHEN 18=>INDEX0<="00001000" -4 WHEN 19=>INDEX0<="00001000" -4 WHEN 20=>INDEX0<="00001000" -4 WHEN 21=>INDEX0<="00000100" -3 WHEN 2

31、2=>INDEX0<="00000010" -2 WHEN 23=>INDEX0<="00000010" -2 WHEN 24=>INDEX0<="00010000" -5 WHEN 25=>INDEX0<="00010000" -5 WHEN 26=>INDEX0<="00001000" -4 WHEN 27=>INDEX0<="00001000" -4 WHEN 28=>INDEX0<=&

32、quot;00000100" -3 WHEN 29=>INDEX0<="00000100" -3 WHEN 30=>INDEX0<="00000010" -2 WHEN 31=>INDEX0<="00000010" -2WHEN OTHERS=>NULL;END CASE;ELSE INDEX0<=INDEX2; -將音符信號(hào)0的值賦給音符信號(hào)2END IF;END PROCESS;END BEHAVIORAL;附錄2:音調(diào)發(fā)生源程序清單-程序名稱:TONE.VHD-程序功能:

33、采用VHDL語(yǔ)言編程產(chǎn)生音階的分頻預(yù)置值。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TONE ISPORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -音符輸入信號(hào) CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -音符顯示信號(hào) HIGH: OUT STD_LOGIC; -高低音顯示信號(hào) TONE0:OUT INTEGER RANGE 0 TO 204

34、7); -音符的分頻系數(shù)END TONE;ARCHITECTURE ART OF TONE ISBEGINSEARCH:PROCESS(INDEX) BEGINCASE INDEX ISWHEN"00000001"=>TONE0<=773;CODE<="1001111"HIGH<='1' -分頻系數(shù)773Hz,音符顯示1001111,顯示低音WHEN"00000010"=>TONE0<=912;CODE<="0010010"HIGH<='1&#

35、39;WHEN"00000100"=>TONE0<=1036;CODE<="0000110"HIGH<='1'WHEN"00001000"=>TONE0<=1116;CODE<="1001100"HIGH<='1'WHEN"00010000"=>TONE0<=1197;CODE<="0100100"HIGH<='1'WHEN"00100000&qu

36、ot;=>TONE0<=1290;CODE<="0100000"HIGH<='0'WHEN"01000000"=>TONE0<=1372;CODE<="0001111"HIGH<='0'WHEN"10000000"=>TONE0<=1410;CODE<="0000000"HIGH<='0'WHEN OTHERS =>TONE0<=2047;CODE<=&quo

37、t;0000001"HIGH<='0'END CASE;END PROCESS;END ART;附錄3:數(shù)控分頻源程序清單-程序名稱:FENPIN.VHD-程序功能:采用VHDL語(yǔ)言編程對(duì)時(shí)基脈沖進(jìn)行分頻,得到8個(gè)音符相對(duì)應(yīng)的頻率。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FENPIN ISPORT(CLK1: IN STD_LOGIC; TONE1: IN INTEGER RANGE 0

38、 TO 2047; -系統(tǒng)時(shí)鐘信號(hào) SPKS: OUT STD_LOGIC); -音符分頻系數(shù)END ENTITY FENPIN; -驅(qū)動(dòng)揚(yáng)聲器的音頻信號(hào)ARCHITECTURE ART OF FENPIN IS SIGNAL PRECLK:STD_LOGIC; -定義時(shí)基脈沖信號(hào) SIGNAL FULLSPKS:STD_LOGIC;BEGINPROCESS(CLK1)VARIABLE COUNT:INTEGER RANGE 0 TO 8; -定義變量計(jì)數(shù)器,從0到8BEGINIF(CLK1'EVENT AND CLK1='1')THEN -據(jù)時(shí)鐘信號(hào)為1時(shí) COUNT

39、:=COUNT+1; -判斷計(jì)數(shù)器取值為1IF COUNT=2 THENPRECLK<='1'ELSIF COUNT=4 THEN -若計(jì)數(shù)器計(jì)4PRECLK<='0'COUNT:=0; -時(shí)基脈沖為0,計(jì)數(shù)器清零END IF;END IF;END PROCESS;PROCESS(PRECLK,TONE1)VARIABLE COUNT11:INTEGER RANGE 0 TO 2047; -定義變量頻率計(jì)數(shù)器11,從0到2047HzBEGIN IF(PRECLK'EVENT AND PRECLK='1')THEN -PRECL

40、K脈沖上升沿觸發(fā) IF COUNT11<TONE1 THEN -若計(jì)數(shù)器11值小于音符信號(hào)1 COUNT11:=COUNT11+1;FULLSPKS<='1' -計(jì)數(shù)器加1,音頻信號(hào)為1 ELSE COUNT11:=0;FULLSPKS<='0'END IF;END IF;END PROCESS;PROCESS(FULLSPKS) -音頻信號(hào)輸出進(jìn)程開始VARIABLE COUNT2:STD_LOGIC:='0' -定義變量計(jì)數(shù)器2,初值為0BEGINIF(FULLSPKS'EVENT AND FULLSPKS='1')THEN -音頻信號(hào)輸出上升沿有效時(shí)COUNT2:=NOT COUNT2;IF COUNT2='1'THENSPKS<='1'ELSE SPKS<='0'END IF;END IF;END PROCESS

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論