eda課程設(shè)計VHDL 音樂播放器

上傳人:e****s 文檔編號:54892986 上傳時間:2022-02-16 格式:DOC 頁數(shù):19 大?。?43.50KB
收藏 版權(quán)申訴 舉報 下載
eda課程設(shè)計VHDL 音樂播放器_第1頁
第1頁 / 共19頁
eda課程設(shè)計VHDL 音樂播放器_第2頁
第2頁 / 共19頁
eda課程設(shè)計VHDL 音樂播放器_第3頁
第3頁 / 共19頁

下載文檔到電腦,查找使用更方便

16 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《eda課程設(shè)計VHDL 音樂播放器》由會員分享,可在線閱讀,更多相關(guān)《eda課程設(shè)計VHDL 音樂播放器(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、子信息科學(xué)與技術(shù)專業(yè)課程設(shè)計任務(wù)書 學(xué)生姓名 專業(yè)班級 學(xué)號 題 目 樂曲自動播放器 課題性質(zhì) 工程設(shè)計 課題來源 自擬課題 指導(dǎo)教師 同組姓名 主要內(nèi)容 自行選擇一首自己喜愛的經(jīng)典樂曲,用FPGA設(shè)計實現(xiàn)一個該曲目的自動演奏電路。 任務(wù)要求 (1)根據(jù)設(shè)計題目要求編寫相應(yīng)程序代碼 (2)對編寫的VHDL程序代碼進行編譯和仿真 (3)利用實驗箱完成硬件驗證 (4)總結(jié)設(shè)計內(nèi)容,完成課程設(shè)計說明書 參考文獻 [1]曹昕燕. <>.北京: 清華大學(xué)出版社,2004年 [2]焦素敏. <<

2、EDA 應(yīng)用技術(shù) >>. 北京: 清華大學(xué)出版社,2005年 [3]焦素敏. <>. 河南工業(yè)大學(xué),2008年 [4]黃智偉. <>. 電子工業(yè)出版社,2005年 [5]劉昌華. <<數(shù)字邏輯EDA設(shè)計與實踐>>. 國防工業(yè)出版社,2005年 審查意見 指導(dǎo)教師簽字: 教研室主任簽字: 2011年月日 一、 設(shè)計任務(wù)及要求: (1)根據(jù)設(shè)計題目要求編寫相應(yīng)程序代碼。 (2)對編寫的VHDL程序代碼進行編譯和仿真。 (3)利用實驗箱完成硬件驗證。 (4)總結(jié)設(shè)

3、計內(nèi)容,完成課程設(shè)計說明書。 用VHDL語言設(shè)計樂音的節(jié)拍與音符產(chǎn)生電路;用VHDL語言設(shè)計可控分頻器電路;最后能夠采用FPGA芯片進行音樂播放。 二、 設(shè)計原理及總體框圖: 音調(diào)發(fā)生 音調(diào)編碼 數(shù)控分頻 總體框圖 產(chǎn)生音樂的兩個因素是音樂頻率和音樂的持續(xù)時間,以純硬件完成演奏電路比利用微處理器(CPU)來實現(xiàn)樂曲演奏要復(fù)雜的多,如果不借助于功能強大的EDA工具和硬件描述語言,憑借傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實現(xiàn)。根據(jù)設(shè)計要求,樂曲硬件演奏電路系統(tǒng)主要由數(shù)控分頻器和樂曲存儲模塊組成。數(shù)控分頻器對FPGA的基準(zhǔn)頻率進行分頻,得到與各個音階對應(yīng)的頻率

4、輸出。樂曲存儲模塊產(chǎn)生節(jié)拍控制和音階選擇信號,即在此模塊中可存放一個樂曲曲譜真值表,由一個計數(shù)器來控制此真值表的輸出,而由計數(shù)器的計數(shù)時鐘信號作為樂曲節(jié)拍控制信號。 1、音名與頻率的關(guān)系 音樂的十二平均率規(guī)定:每兩個八度音(如簡譜中的中音1與高音1)之間的頻率相差一倍.在兩個八度音之間,又可分為十二個半音,每兩個半音的頻率比為4。另外,音名A(簡譜中的低音6)的頻率為440Hz,音名B到C之間,E到F之間為半音,其余為全音,由此可以計算出簡譜中從低音1到高音1之間每個音名的頻率如表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è)計應(yīng)綜合考慮兩方面的因素,在盡量減小頻率誤差的前提下取舍合適的基準(zhǔn)頻率。本例中選取

6、4MHz的基準(zhǔn)頻率,若無4MHz的時鐘頻率,實際上,只要各個音名間的相對品頻率關(guān)系不變,C作1與D作1演奏出的音樂聽起來都不會“走調(diào)”。 各音階頻率及相應(yīng)的分頻系數(shù)如表2所示。為了減少輸出的偶次諧波分量,最后輸出到揚聲器的波形應(yīng)為對稱方波,因此在到達揚聲器之前,有一個二分頻的分頻器。表2中的分頻系數(shù)就是從4MHZ頻率二分頻得到的2MHZ頻率基礎(chǔ)上計算得出的。 表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位二進制計數(shù)器已能滿足分頻要求。在表2,除給出了分頻比以外,給出了對應(yīng)于各個音階頻率時計數(shù)器不同的初始值,對于樂曲中的休止符,要將分頻系數(shù)設(shè)為0,即初始值為8191即可,此時揚聲器將不會發(fā)聲。對于不同的分頻系數(shù),加載不同的初始值即可。用加載初始值而不是將分頻輸出譯碼反饋,可以有效地減少本設(shè)計占用可編程邏輯器件的資源,也是同步計數(shù)器的一個常用設(shè)計技巧。 當(dāng)一個4Hz的時鐘脈沖來到時,樂譜發(fā)生器模塊輸出一個音符數(shù)據(jù)給分頻系數(shù)模塊,分頻系數(shù)模塊輸出此音符相應(yīng)的分頻系數(shù),將分頻系數(shù)送給數(shù)控分頻器模塊,當(dāng)12MHz的時鐘脈沖來到時,數(shù)控分頻器就根據(jù)分頻系數(shù)輸出相

9、應(yīng)的頻率(即此音符所對應(yīng)的發(fā)生頻率)給揚聲器,揚聲器就可發(fā)出對應(yīng)音符的聲音來.連續(xù)的4Hz的時鐘脈沖就將樂譜發(fā)生器里所存儲的音符數(shù)據(jù)一個接一個的送給了分頻系數(shù)模塊,再經(jīng)過數(shù)控分頻模塊,最后揚聲器一個接一個的發(fā)出音符數(shù)據(jù)所對應(yīng)的聲音來。曲子也就流暢的播放出來了. 樂曲演奏頂層原理圖 三、 程序設(shè)計: 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時鐘頻

36、率,輸入clk8Hz與clock2相接,接收4Hz的時鐘頻率。發(fā)音輸出SPKOUT接speaker,HIGH是高八度音指示,code1輸出是演奏發(fā)音相對應(yīng)的簡譜碼。然后 就能聽到對應(yīng)的樂曲。 六、參考文獻: [1]曹昕燕. <>.北京: 清華大學(xué)出版社,2004年 [2]焦素敏. <>. 北京: 清華大學(xué)出版社,2009年 [3]焦素敏. <>. 河南工業(yè)大學(xué),2008年 [4]黃智偉. <>. 電子工業(yè)出版社,2005年 [5]劉昌華. <<數(shù)字邏輯EDA設(shè)計與實踐>>. 國防工業(yè)出版社,2005年 七、心得體會: 通過這次課程設(shè)計,我的EDA得到了很大的提高。剛開始沒有思路,也是參考網(wǎng)絡(luò)和書籍,還有同學(xué)的幫助,才能完成。當(dāng)然中間也有很多的問題。例如以前對LPM_ROM不是很熟悉,通過音樂播放器對它有了進一步的了解。也大大的鍛煉了我們的動手能力。團結(jié)的力量是巨大的。

展開閱讀全文
溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!