eda課程設(shè)計(jì)VHDL 音樂播放器
《eda課程設(shè)計(jì)VHDL 音樂播放器》由會員分享,可在線閱讀,更多相關(guān)《eda課程設(shè)計(jì)VHDL 音樂播放器(19頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、子信息科學(xué)與技術(shù)專業(yè)課程設(shè)計(jì)任務(wù)書
學(xué)生姓名
專業(yè)班級
學(xué)號
題 目
樂曲自動播放器
課題性質(zhì)
工程設(shè)計(jì)
課題來源
自擬課題
指導(dǎo)教師
同組姓名
主要內(nèi)容
自行選擇一首自己喜愛的經(jīng)典樂曲,用FPGA設(shè)計(jì)實(shí)現(xiàn)一個(gè)該曲目的自動演奏電路。
任務(wù)要求
(1)根據(jù)設(shè)計(jì)題目要求編寫相應(yīng)程序代碼
(2)對編寫的VHDL程序代碼進(jìn)行編譯和仿真
(3)利用實(shí)驗(yàn)箱完成硬件驗(yàn)證
(4)總結(jié)設(shè)計(jì)內(nèi)容,完成課程設(shè)計(jì)說明書
參考文獻(xiàn)
[1]曹昕燕. <
2、EDA 應(yīng)用技術(shù) >>. 北京: 清華大學(xué)出版社,2005年
[3]焦素敏. <
3、計(jì)內(nèi)容,完成課程設(shè)計(jì)說明書。 用VHDL語言設(shè)計(jì)樂音的節(jié)拍與音符產(chǎn)生電路;用VHDL語言設(shè)計(jì)可控分頻器電路;最后能夠采用FPGA芯片進(jìn)行音樂播放。 二、 設(shè)計(jì)原理及總體框圖: 音調(diào)發(fā)生 音調(diào)編碼 數(shù)控分頻 總體框圖 產(chǎn)生音樂的兩個(gè)因素是音樂頻率和音樂的持續(xù)時(shí)間,以純硬件完成演奏電路比利用微處理器(CPU)來實(shí)現(xiàn)樂曲演奏要復(fù)雜的多,如果不借助于功能強(qiáng)大的EDA工具和硬件描述語言,憑借傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實(shí)現(xiàn)。根據(jù)設(shè)計(jì)要求,樂曲硬件演奏電路系統(tǒng)主要由數(shù)控分頻器和樂曲存儲模塊組成。數(shù)控分頻器對FPGA的基準(zhǔn)頻率進(jìn)行分頻,得到與各個(gè)音階對應(yīng)的頻率
4、輸出。樂曲存儲模塊產(chǎn)生節(jié)拍控制和音階選擇信號,即在此模塊中可存放一個(gè)樂曲曲譜真值表,由一個(gè)計(jì)數(shù)器來控制此真值表的輸出,而由計(jì)數(shù)器的計(jì)數(shù)時(shí)鐘信號作為樂曲節(jié)拍控制信號。 1、音名與頻率的關(guān)系 音樂的十二平均率規(guī)定:每兩個(gè)八度音(如簡譜中的中音1與高音1)之間的頻率相差一倍.在兩個(gè)八度音之間,又可分為十二個(gè)半音,每兩個(gè)半音的頻率比為4。另外,音名A(簡譜中的低音6)的頻率為440Hz,音名B到C之間,E到F之間為半音,其余為全音,由此可以計(jì)算出簡譜中從低音1到高音1之間每個(gè)音名的頻率如表1所示. 表1 簡譜中的音名與頻率的關(guān)系 音名 頻率/Hz 音名 頻率/Hz 音名 頻率/Hz
5、 低音1 中音1 高音1 低音2 中音2 高音2 低音3 中音3 高音3 低音4 中音4 高音4 低音5 中音5 高音5 低音6 440 中音6 880 高音6 1760 低音7 中音7 高音7 由于音階頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將得到的分頻數(shù)四舍五入取整。若基準(zhǔn)頻率過低,則由于分頻系數(shù)過小,四舍五入取整后的誤差較大,若基準(zhǔn)頻率過高,雖然誤碼差變小,但分頻結(jié)構(gòu)將變大。實(shí)際的設(shè)計(jì)應(yīng)綜合考慮兩方面的因素,在盡量減小頻率誤差的前提下取舍合適的基準(zhǔn)頻率。本例中選取
6、4MHz的基準(zhǔn)頻率,若無4MHz的時(shí)鐘頻率,實(shí)際上,只要各個(gè)音名間的相對品頻率關(guān)系不變,C作1與D作1演奏出的音樂聽起來都不會“走調(diào)”。 各音階頻率及相應(yīng)的分頻系數(shù)如表2所示。為了減少輸出的偶次諧波分量,最后輸出到揚(yáng)聲器的波形應(yīng)為對稱方波,因此在到達(dá)揚(yáng)聲器之前,有一個(gè)二分頻的分頻器。表2中的分頻系數(shù)就是從4MHZ頻率二分頻得到的2MHZ頻率基礎(chǔ)上計(jì)算得出的。 表2 各音階頻率對應(yīng)的分頻值 音名 分頻系數(shù) 初始值 音名 分頻系數(shù) 初始值 音名 分頻系數(shù) 初始值 低音1 7644 547 中音1 3822 4369 高音1 1911 6280 低音2 6
7、810 1381 中音2 3405 4786 高音2 1270 6921 低音3 6067 2124 中音3 3034 5157 高音3 1517 6674 低音4 5727 2464 中音4 2864 5327 高音4 1432 6759 低音5 5102 3089 中音5 2551 5640 高音5 1256 6935 低音6 4545 3646 中音6 2273 5918 高音6 1137 7054 低音7 4050 4141 中音7 2025 6166 高音7 1013 7178
8、由于最大的分頻系數(shù)為7644,故采用13位二進(jìn)制計(jì)數(shù)器已能滿足分頻要求。在表2,除給出了分頻比以外,給出了對應(yīng)于各個(gè)音階頻率時(shí)計(jì)數(shù)器不同的初始值,對于樂曲中的休止符,要將分頻系數(shù)設(shè)為0,即初始值為8191即可,此時(shí)揚(yáng)聲器將不會發(fā)聲。對于不同的分頻系數(shù),加載不同的初始值即可。用加載初始值而不是將分頻輸出譯碼反饋,可以有效地減少本設(shè)計(jì)占用可編程邏輯器件的資源,也是同步計(jì)數(shù)器的一個(gè)常用設(shè)計(jì)技巧。 當(dāng)一個(gè)4Hz的時(shí)鐘脈沖來到時(shí),樂譜發(fā)生器模塊輸出一個(gè)音符數(shù)據(jù)給分頻系數(shù)模塊,分頻系數(shù)模塊輸出此音符相應(yīng)的分頻系數(shù),將分頻系數(shù)送給數(shù)控分頻器模塊,當(dāng)12MHz的時(shí)鐘脈沖來到時(shí),數(shù)控分頻器就根據(jù)分頻系數(shù)輸出相
9、應(yīng)的頻率(即此音符所對應(yīng)的發(fā)生頻率)給揚(yáng)聲器,揚(yáng)聲器就可發(fā)出對應(yīng)音符的聲音來.連續(xù)的4Hz的時(shí)鐘脈沖就將樂譜發(fā)生器里所存儲的音符數(shù)據(jù)一個(gè)接一個(gè)的送給了分頻系數(shù)模塊,再經(jīng)過數(shù)控分頻模塊,最后揚(yáng)聲器一個(gè)接一個(gè)的發(fā)出音符數(shù)據(jù)所對應(yīng)的聲音來。曲子也就流暢的播放出來了. 樂曲演奏頂層原理圖 三、 程序設(shè)計(jì): 1、NOTETABS模塊 LIBRARY IEEE; .ALL; ENTITY notetabs IS PORT(clk :IN STD_LOGIC; toneindex: OUT INTEGER RANGE 0 TO 15); END; ARCHITECT
10、URE one OF notetabs IS SIGNAL counter:INTEGER RANGE 0 TO 139; BEGIN CNT8:PROCESS(clk) BEGIN IF counter=127 THEN counter<=0; ELSIF(clk'EVENT AND clk='1') THEN counter<=counter+1; END IF; END PROCESS; SEARCH:PROCESS(counter) BEGIN CASE counter IS
11、WHEN 00 => toneindex<=10; WHEN 01 => toneindex<=10; WHEN 02 => toneindex<=12; WHEN 03 => toneindex<=12; WHEN 04 => toneindex<=15; WHEN 05 => toneindex<=15; WHEN 06 => toneindex<=15; WHEN 07 => toneindex<=15; WHEN 08 => toneindex<=15; WHEN 09 => toneindex<=15; WHEN 10 =>
12、toneindex<=15; WHEN 11 => toneindex<=15; WHEN 12 => toneindex<=15; WHEN 13 => toneindex<=15; WHEN 14 => toneindex<=15; WHEN 15 => toneindex<=15; WHEN 16 => toneindex<=13; WHEN 17 => toneindex<=13; WHEN 18 => toneindex<=12; WHEN 19 => toneindex<=12; WHEN 20 => to
13、neindex<=13; WHEN 21 => toneindex<=13; WHEN 22 => toneindex<=15; WHEN 23 => toneindex<=15; WHEN 24 => toneindex<=10; WHEN 25 => toneindex<=10; WHEN 26 => toneindex<=9; WHEN 27 => toneindex<=9; WHEN 28 => toneindex<=8; WHEN 29 => toneindex<=8; WHEN 30 => toneinde
14、x<=8; WHEN 31 => toneindex<=8; WHEN 32 => toneindex<=8; WHEN 33 => toneindex<=8; WHEN 34 => toneindex<=8; WHEN 35 => toneindex<=8; WHEN 36 => toneindex<=8; WHEN 37 => toneindex<=8; WHEN 38 => toneindex<=15; WHEN 39 => toneindex<=15; WHEN 40 => toneindex<=15; WHEN
15、 41 => toneindex<=15; WHEN 42 => toneindex<=13; WHEN 43 => toneindex<=13; WHEN 44 => toneindex<=12; WHEN 45 => toneindex<=12; WHEN 46 => toneindex<=10; WHEN 47 => toneindex<=10; WHEN 48 => toneindex<=9; WHEN 49 => toneindex<=9; WHEN 50 => toneindex<=8; WHEN 51 => t
16、oneindex<=9; WHEN 52 => toneindex<=9; WHEN 53 => toneindex<=9; WHEN 54 => toneindex<=9; WHEN 55 => toneindex<=9; WHEN 56 => toneindex<=9; WHEN 57 => toneindex<=9; WHEN 58 => toneindex<=9; WHEN 59 => toneindex<=9; WHEN 60 => toneindex<=10; WHEN 61 => toneindex<=10;
17、 WHEN 62 => toneindex<=12; WHEN 63 => toneindex<=12; WHEN 64 => toneindex<=15; WHEN 65 => toneindex<=15; WHEN 66 => toneindex<=15; WHEN 67 => toneindex<=15; WHEN 68 => toneindex<=15; WHEN 69 => toneindex<=15; WHEN 70 => toneindex<=15; WHEN 71 => toneindex<=15; WHE
18、N 72 => toneindex<=15; WHEN 73 => toneindex<=15; WHEN 74 => toneindex<=15; WHEN 75 => toneindex<=15; WHEN 76 => toneindex<=13; WHEN 77 => toneindex<=13; WHEN 78 => toneindex<=12; WHEN 79 => toneindex<=12; WHEN 80 => toneindex<=13; WHEN 81 => toneindex<=13; WHEN 82 => t
19、oneindex<=15; WHEN 83 => toneindex<=15; WHEN 84 => toneindex<=10; WHEN 85 => toneindex<=10; WHEN 86 => toneindex<=9; WHEN 87 => toneindex<=9; WHEN 88 => toneindex<=8; WHEN 89 => toneindex<=8; WHEN 90 => toneindex<=8; WHEN 91 => toneindex<=8; WHEN 92 => toneindex<=8;
20、 WHEN 93 => toneindex<=8; WHEN 94 => toneindex<=8; WHEN 95 => toneindex<=8; WHEN 96 => toneindex<=8; WHEN 97 => toneindex<=8; WHEN 98 => toneindex<=15; WHEN 99 => toneindex<=15; WHEN 100 => toneindex<=15; WHEN 101 => toneindex<=15; WHEN 102 => toneindex<=13; WHE
21、N 103 => toneindex<=13; WHEN 104 => toneindex<=12; WHEN 105 => toneindex<=12; WHEN 106 => toneindex<=10; WHEN 107 => toneindex<=10; WHEN 108 => toneindex<=9; WHEN 109 => toneindex<=9; WHEN 110 => toneindex<=8; WHEN 111 => toneindex<=8; WHEN 112 => toneindex<=8;
22、 WHEN 113 => toneindex<=8; WHEN 114 => toneindex<=8; WHEN 115 => toneindex<=8; WHEN 116 => toneindex<=8; WHEN 117 => toneindex<=8; WHEN 118 => toneindex<=8; WHEN 119 => toneindex<=8; WHEN 120 => toneindex<=10; WHEN 121 => toneindex<=10; WHEN 122 => toneindex<=12;
23、 WHEN 123 => toneindex<=12; WHEN 124 => toneindex<=15; WHEN 125 => toneindex<=15; WHEN 126 => toneindex<=15; WHEN 127 => toneindex<=15; WHEN 128 => toneindex<=15; WHEN 129 => toneindex<=15; WHEN 130 => toneindex<=15; WHEN 131 => toneindex<=15; WHEN 132 => toneindex<=14; WHEN 133 =>
24、toneindex<=14; WHEN 134 => toneindex<=14; WHEN 135 => toneindex<=14; WHEN 136 => toneindex<=13; WHEN 137 => toneindex<=13; WHEN 138 => toneindex<=12; WHEN 139 => toneindex<=12; WHEN OTHERS=>NULL; END CASE; END PROCESS; END; 2、TONETABA模塊 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164
25、.ALL; ENTITY Tonetaba IS PORT(index : IN INTEGER RANGE 0 TO 15; code : OUT INTEGER RANGE 0 TO 15; high : OUT STD_LOGIC ; tone : OUT INTEGER RANGE 0 TO 16#7FF# ); END; ARCHITECTURE one OF Tonetaba IS BEGIN SEARCH: PROCESS(index) BEGIN CASE index
26、 IS WHEN 0 => tone<=2047;code<=0;high<='0'; WHEN 1 => tone<=773;code<=1;high<='0'; WHEN 2 => tone<=912;code<=2;high<='0'; WHEN 3 => tone<=1036;code<=3;high<='0'; WHEN 5 => tone<=1197;code<=5;high<='0'; WHEN 6 => tone<=1290;code<=6;high<='0'; WHEN 7 => tone<=
27、1372;code<=7;high<='0'; WHEN 8 => tone<=1410;code<=1;high<='1'; WHEN 9 => tone<=1480;code<=2;high<='1'; WHEN 10=> tone<=1542;code<=3;high<='1'; WHEN 12 => tone<=1622;code<=5;high<='1'; WHEN 13 => tone<=1668;code<=6;high<='1'; WHEN 15 => tone<=1728;code<=1;high<='1
28、'; WHEN OTHERS => NULL; END CASE; END PROCESS; END; 3、SPEAKERA模塊 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY speakera IS PORT(clk :IN STD_LOGIC; tone:IN INTEGER RANGE 0 TO 16#7FF#; spks: OUT STD_LOGIC); END; ARCHITECTURE one OF speakera IS SIGNAL pre
29、clk:STD_LOGIC; SIGNAL fullspks:STD_LOGIC; BEGIN divideclk:PROCESS(clk) VARIABLE count4:INTEGER RANGE 0 TO 15; BEGIN preclk<='0'; IF count4>11 THEN preclk<='1';count4:=0; ELSIF clk'EVENT AND clk='1' THEN count4:=count4+1; END IF; END PROCESS; genspks:PROCESS(preclk,ton
30、e) VARIABLE count11: INTEGER RANGE 0 TO 16#7FF#; BEGIN IF preclk'EVENT AND preclk='1' THEN IF count11=16#7FF# THEN count11:= tone; fullspks<='1'; ELSE count11:=count11+1; fullspks<='0'; END IF; END IF; END PROCESS
31、; delaysks:PROCESS(fullspks) VARIABLE count2:STD_LOGIC; BEGIN IF fullspks 'EVENT AND fullspks='1' THEN count2:= NOT count2; IF count2='1' THEN spks<='1'; ELSE spks<='0'; END IF; END IF; END PROCESS; END; 4、SONGER LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.AL
32、L; ENTITY SONGER IS PORT(CLK12MHZ : IN STD_LOGIC; CLK8HZ: IN STD_LOGIC; CODE1 : OUT INTEGER RANGE 0 TO 15 ; HIGH1: OUT STD_LOGIC; SPKOUT: OUT STD_LOGIC ); END; ARCHITECTURE ONE OF SONGER IS COMPONENT NOTETABS PORT(CLK:IN STD_LOGIC;
33、 TONEINDEX: OUT INTEGER RANGE 0 TO 15); END COMPONENT; COMPONENT TONETABA PORT(INDEX: IN INTEGER RANGE 0 TO 15 ; CODE: OUT INTEGER RANGE 0 TO 15 ; HIGH: OUT STD_LOGIC; TONE: OUT INTEGER RANGE 0 TO 16#7FF#); END COMPONENT;
34、 COMPONENT SPEAKERA PORT(CLK:IN STD_LOGIC; TONE:IN INTEGER RANGE 0 TO 16#7FF#; SPKS:OUT STD_LOGIC); END COMPONENT; SIGNAL TONE: INTEGER RANGE 0 TO 16#7FF#; SIGNAL TONEINDEX: INTEGER RANGE 0 TO 15; BEGIN U1:NOTETABS PORT MAP(CLK=>CLK8HZ,TONEINDEX=>TONEINDEX); U2
35、:TONETABA PORT MAP(INDEX=>TONEINDEX,TONE=>TONE,CODE=>CODE1,HIGH=>HIGH1); U3:SPEAKERA PORT MAP(CLK=>CLK12MHZ,TONE=>TONE,SPKS=>SPKOUT); END; 四、編譯及仿真: NOTETABS模塊的仿真 TONETABA模塊的仿真 SPEAKERA模塊的仿真 頂層文件仿真圖 五、硬件調(diào)試及結(jié)果分析 頂層文件編譯仿真好之后,通過電腦連接到硬件上,下載頂層文件到FPGA里,下載完畢之后,輸入clk12MHz與clock9相接,接收12MHz時(shí)鐘頻
36、率,輸入clk8Hz與clock2相接,接收4Hz的時(shí)鐘頻率。發(fā)音輸出SPKOUT接speaker,HIGH是高八度音指示,code1輸出是演奏發(fā)音相對應(yīng)的簡譜碼。然后 就能聽到對應(yīng)的樂曲。
六、參考文獻(xiàn):
[1]曹昕燕. <
- 溫馨提示:
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. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《筍芽兒》課件
- 高速鐵路同相供電
- 二年級語文下冊-第4單元-13《激光的話》課件4-語文S版
- 《一枚金幣》課件
- 1441單項(xiàng)式乘以多項(xiàng)式(課件)PPT
- 12分式的乘法和除法
- 常見蔬菜分類
- 保險(xiǎn)客戶經(jīng)營1361法則
- 現(xiàn)場目視管理與看板管理
- 高中政治-4.2文化在繼承中發(fā)展課件1-新人教版必修3PPT文檔
- 八年級生物上冊 181 微生物在生物圈中的作用(第2課時(shí))課件(2)(新版)北師大版
- 人生的夢想
- 動物生理學(xué)-第六章課件
- IE經(jīng)典管理基礎(chǔ)
- AfternoonandEvening課件