基于EDA音樂(lè)播放器的設(shè)計(jì).doc_第1頁(yè)
基于EDA音樂(lè)播放器的設(shè)計(jì).doc_第2頁(yè)
基于EDA音樂(lè)播放器的設(shè)計(jì).doc_第3頁(yè)
基于EDA音樂(lè)播放器的設(shè)計(jì).doc_第4頁(yè)
基于EDA音樂(lè)播放器的設(shè)計(jì).doc_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1 長(zhǎng) 沙 學(xué) 院 課程設(shè)計(jì)說(shuō)明書(shū) 題目 音樂(lè)播放器的設(shè)計(jì) 系 部 電子與通信工程 專業(yè) 班級(jí) 電氣工程及其自動(dòng)化 一班 姓名 學(xué)號(hào) 指導(dǎo)教師 起止日期 2010 11 29 至 2010 12 10 2 EDA 技技術(shù)術(shù)課課程程設(shè)計(jì)設(shè)計(jì)任任務(wù)書(shū)務(wù)書(shū) 系 部 電子與通信工程系 專業(yè) 電氣工程及其自動(dòng)化 指導(dǎo)教師 課題名稱音樂(lè)播放器的設(shè)計(jì) 設(shè) 計(jì) 內(nèi) 容 及 要 求 在 SOPC 開(kāi)發(fā)平臺(tái)上實(shí)現(xiàn)一個(gè)音頻信號(hào)發(fā)生器 編寫(xiě) 3 段音樂(lè) 利用 開(kāi)發(fā)平臺(tái)的蜂鳴器來(lái)播放幾段音樂(lè) 可進(jìn)行自動(dòng)循環(huán)播放和手動(dòng)播放兩個(gè) 模式的選擇 如果為手動(dòng)播放 則通過(guò)撥動(dòng)撥碼開(kāi)關(guān)第 1 2 位選擇 播 放音樂(lè)時(shí) 要求將該音樂(lè)的序號(hào) 分別為 A1 A2 A3 以及該音樂(lè)播放剩 余的時(shí)間 分 秒 顯示在數(shù)碼管上 當(dāng)某首音樂(lè)開(kāi)始播放時(shí) 音樂(lè)序號(hào)閃 爍顯示 3 秒鐘 系統(tǒng)提供 50MHZ 頻率的時(shí)鐘源 完成該系統(tǒng)的硬件和軟件的設(shè)計(jì) 并 制作出實(shí)物裝置 調(diào)試好后并能實(shí)際運(yùn)用 指導(dǎo)教師提供制作所需的器件 最后就課程設(shè)計(jì)本身提交一篇課程設(shè)計(jì)說(shuō)明書(shū) 設(shè) 計(jì) 工 作 量 1 VHDL 語(yǔ)言程序設(shè)計(jì) 2 波形仿真 3 在實(shí)驗(yàn)裝置上進(jìn)行硬件測(cè)試 并進(jìn)行演示 4 提交一份完整的課程設(shè)計(jì)說(shuō)明書(shū) 包括設(shè)計(jì)原理 程序設(shè)計(jì) 程序分 析 仿真分析 硬件測(cè)試 調(diào)試過(guò)程 參考文獻(xiàn) 設(shè)計(jì)總結(jié)等 起止日期 或時(shí)間量 設(shè)計(jì)內(nèi)容 或預(yù)期目標(biāo) 備注 第 1 天課題介紹 答疑 收集材料 第 2 天設(shè)計(jì)方案論證 第 3 天 進(jìn)一步討論方案 對(duì)設(shè)計(jì)方案進(jìn)行必要的 修正 方案確定后開(kāi)始進(jìn)行 VHDL 語(yǔ)言程 序設(shè)計(jì) 第 4 天設(shè)計(jì) VHDL 語(yǔ)言程序 第 5 9 天 在實(shí)驗(yàn)裝置上進(jìn)行硬件測(cè)試 對(duì) VHDL 語(yǔ) 言程序進(jìn)行必要的修正 并進(jìn)行演示 進(jìn) 度 安 排 第 10 天編寫(xiě)設(shè)計(jì)說(shuō)明書(shū) 教研室 意見(jiàn) 年 月 日 系 部 主 管領(lǐng)導(dǎo)意見(jiàn) 年 月 日 3 長(zhǎng)沙學(xué)院課程設(shè)計(jì)鑒定表 姓名學(xué)號(hào)專 業(yè) 電氣工程及其自動(dòng)化班級(jí)一 班 設(shè)計(jì)題目音樂(lè)播放器的設(shè)計(jì)指導(dǎo)教師 指導(dǎo)教師意見(jiàn) 評(píng)定等級(jí) 教師簽名 日期 答辯小組意見(jiàn) 評(píng)定等級(jí) 答辯小組長(zhǎng)簽名 日期 教研室意見(jiàn) 教研室主任簽名 日期 系 部 意見(jiàn) 系主任簽名 日期 說(shuō)明 課程設(shè)計(jì)成績(jī)分 優(yōu)秀 良好 及格 不及格 四類 目錄目錄 4 摘要摘要 5 設(shè)計(jì)原理設(shè)計(jì)原理 5 程序 程序 6 實(shí)驗(yàn)現(xiàn)象 實(shí)驗(yàn)現(xiàn)象 14 引腳分配 引腳分配 14 仿真波形 仿真波形 15 心得體會(huì) 心得體會(huì) 16 參考文獻(xiàn) 參考文獻(xiàn) 16 摘要摘要 5 在 SOPC 開(kāi)發(fā)平臺(tái)上實(shí)現(xiàn)一個(gè)音頻信號(hào)發(fā)生器 編寫(xiě) 3 段音樂(lè) 利用開(kāi)發(fā)平臺(tái)的蜂鳴 器來(lái)播放幾段音樂(lè) 可進(jìn)行自動(dòng)循環(huán)播放和手動(dòng)播放兩個(gè)模式的選擇 如果為手動(dòng)播放 則通過(guò)撥動(dòng)撥碼開(kāi)關(guān)第 1 2 位選擇 播放音樂(lè)時(shí) 要求將該音樂(lè)的序號(hào) 分別為 A1 A2 A3 以及該音樂(lè)播放剩余的時(shí)間 分 秒 顯示在數(shù)碼管上 當(dāng)某首音樂(lè)開(kāi)始播放 時(shí) 音樂(lè)序號(hào)閃爍顯示 3 秒鐘 關(guān)鍵字 關(guān)鍵字 SOPC 音頻信號(hào) 音樂(lè) 蜂鳴器 自動(dòng)循環(huán) 手動(dòng)播放 剩余時(shí)間 分鐘 秒鐘 顯 示 音樂(lè)序號(hào) A1 A2 A3 顯示 設(shè)計(jì)原理設(shè)計(jì)原理 首先采用分塊設(shè)計(jì)法 將設(shè)計(jì)分為分頻模塊 時(shí)間動(dòng)態(tài)掃描顯示模塊 音樂(lè)播放模塊 頂層模塊 其中音樂(lè)播放模塊又可分為音頻模塊 音樂(lè)代碼模塊 預(yù)置數(shù)模塊 利用計(jì)數(shù)的方式將 50MHZ 的頻率分為 12MHz 100Hz 8Hz 1Hz 音樂(lè)播放模塊需要完成以下設(shè)計(jì) 預(yù)置樂(lè)曲 本次設(shè)計(jì)選取了 梁祝 的一段作預(yù)置 在作預(yù)置時(shí) 需要將樂(lè)曲音符 轉(zhuǎn)換成相應(yīng)的代碼 通過(guò)計(jì)算逐一將音符轉(zhuǎn)換成代碼 通過(guò) EDA 開(kāi)發(fā)平臺(tái) quartus 進(jìn)行 樂(lè)曲定制 為了提供樂(lè)曲發(fā)音所需要的發(fā)音頻率 編寫(xiě)數(shù)控分頻器程序 對(duì)單一輸入高頻 進(jìn) 行預(yù)置數(shù)分頻 生成每個(gè)音符發(fā)音的相應(yīng)頻率 為了給分頻提供預(yù)置數(shù) 需要計(jì)算分頻預(yù)置數(shù) 對(duì)每部分結(jié)構(gòu)單元逐一進(jìn)行編譯 生成相應(yīng)的元器件符號(hào) 并對(duì)獨(dú)立結(jié)構(gòu)單元功能進(jìn) 行仿真 音調(diào)的控制 頻率的高低決定了音調(diào)的高低 綜合考慮各因素 本次設(shè)計(jì)中選取 12MHZ 作為 CLK 的 分頻計(jì)數(shù)器的輸入分頻信號(hào) 由于樂(lè)曲都是由一連串的音符組成 因此按照樂(lè)曲的樂(lè)譜依 次輸出這些音符相對(duì)應(yīng)的頻率 就可以在蜂鳴器上連續(xù)地發(fā)出各個(gè)音符的音調(diào) 表 1 簡(jiǎn)譜中的音名與頻率的關(guān)系 音名頻率 Hz音名頻率 Hz音名頻率 Hz 低音 1 261 6 中音 1 523 3 高音 1 1045 5 低音 2 293 7 中音 2 587 3 高音 2 1174 7 低音 3 329 6 中音 3 659 3 高音 3 1318 5 低音 4 349 2 中音 4 698 5 高音 4 1396 9 低音 5 392 中音 5 784 高音 5 1568 低音 6 440 中音 6 880 高音 6 1760 低音 7 493 9 中音 7 987 8 高音 7 1975 5 音長(zhǎng)的控制 這次設(shè)計(jì)中所演奏的樂(lè)曲的最短的音符為四分音符 如果將全音符的持續(xù)時(shí)間設(shè)為 1s 的話 那么一拍所應(yīng)該持續(xù)的時(shí)間為 0 25 秒 則只需要再提供一個(gè) 4Hz 的時(shí)鐘頻率即 可產(chǎn)生四分音符的時(shí)長(zhǎng) 系統(tǒng)工作時(shí)就按 4Hz 的頻率依次讀取簡(jiǎn)譜 當(dāng)系統(tǒng)讀到某個(gè)音符 的簡(jiǎn)譜時(shí)就對(duì)應(yīng)發(fā)這個(gè)音符的音調(diào) 持續(xù)時(shí)間為 0 25 秒 如果在曲譜文件中某個(gè)音符為三 拍音長(zhǎng) 只要將該音符連續(xù)書(shū)寫(xiě)三遍 系統(tǒng)讀樂(lè)曲文件的時(shí)候就會(huì)連續(xù)讀到三次 也就會(huì) 發(fā)三個(gè) 0 25 秒的音長(zhǎng) 這時(shí)我們聽(tīng)上去就會(huì)持續(xù)了三拍的時(shí)間 這樣就可以控制音樂(lè)的 6 音長(zhǎng)了 程序程序 音樂(lè)播放器頂層模塊 library ieee use ieee std logic 1164 all entity songer is port clk50mhz c in std logic led7s buffer std logic vector 6 downto 0 led selout out std logic vector 7 downto 0 spkout out std logic end architecture one of songer is component notetabs port clk in std logic f1s f8 f12 fs out std logic end component component notetabs port clk in std logic toneindex out std logic vector 3 downto 0 end component component tonetaba port index in std logic vector 3 downto 0 tone out std logic vector 10 downto 0 end component component speakera port clk in std logic tone in std logic vector 10 downto 0 spks out std logic end component component daojishi port clk1 clk2 c in std logic led7s buffer std logic vector 6 downto 0 led selout out std logic vector 7 downto 0 end component signal tone std logic vector 10 downto 0 signal toneindex std logic vector 3 downto 0 signal ff1 ff8 ff12 ffs std logic vector begin u1 fp port map clk clk50mhz f1s ff1 f8 ff8 f12 ff12 fs ffs u2 notetabs port map clk ff8 toneindex toneindex 7 u3 tonetaba port map index toneindex tone tone u4 speakera port map clk ff12 tone tone spks spkout u5 daojishi port map clk1 ff1 clk2 ffs c c led7s led7s led selout led selout end 分頻模塊 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity fp is port clk in std logic f1s f8 f12 fs out std logic end architecture bhv of fp is signal a c f std logic signal a2 c2 f2 std logic begin process clk variable cnt24 std logic vector 25 downto 0 variable cnt8 std logic vector 7 downto 0 begin if clk event and clk 1 then if cnt24 01011111010111100001000000 then cnt24 cnt24 1 f1s 0 elsif cnt24 10111110101111000010000000 then cnt24 cnt24 1 f1s 1 else cnt24 00000000000000000000000000 end if if cnt8 1100100 then cnt8 cnt8 1 fs 0 elsif cnt8 11001000 then cnt8 cnt8 1 fs 1 else cnt8 00000000 end if end if 8 end process process clk a variable cnt std logic vector 2 downto 0 begin if clk event and clk 1 then if cnt 111 then cnt 011 a 1 else cnt cnt 1 a 0 end if end if if a event and a 1 then c not c if c 1 then f 1 else f 0 end if end if f12 f end process process clk a2 variable cn std logic vector 22 downto 0 begin if clk event and clk 1 then if cn 10111110101111000010000 then cn 01011111010111100001000 a2 1 else cn cn 1 a 0 end if end if if a2 event and a2 1 then c2 not c2 if c2 1 then f2 1 else f2 0 end if end if f8tone 11111111111 code 0000 hightone 01100000101 code 0001 hightone 01110010000 code 0010 hightone 10000001100 code 0011 hightone 10010101101 code 0101 hightone 10100001010 code 0110 hightone 10101011100 code 0111 hightone 10110000010 code 0001 hightone 10111001000 code 0010 hightone 11000000110 code 0011 hightone 11001010110 code 0101 hightone 11010000100 code 0110 hightone 11011000000 code 0001 highnull end case end process end 模塊 tonetaba 的功能首先是為 speakera 提供決定音符發(fā)音的分頻預(yù)置數(shù) 而此數(shù)在 speakera 輸入口停留時(shí)間即為此音符的節(jié)拍值 模塊 tonetaba 是樂(lè)曲簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù) 置數(shù)查表電路 其中設(shè)置了 梁祝 樂(lè)曲全部音符所對(duì)應(yīng)的分頻預(yù)置數(shù) 共 13 個(gè) 每一個(gè) 音符的停留時(shí)間由音樂(lè)節(jié)拍和音調(diào)發(fā)生器模塊 notetabs 的 clk 輸入頻率決定 在此時(shí)為 4HZ 每一個(gè)計(jì)數(shù)值停留時(shí)間為 0 25 秒 恰為當(dāng)全音符為 1 秒時(shí) 四四拍的 4 分音符持 續(xù)時(shí)間 這 13 個(gè)值的輸出由對(duì)應(yīng)于 tonetaba 的 4 位輸入值 index 3 0 確定 而 index 3 0 最 多有 16 種選擇 輸向 tonetaba 中 index 3 0 的值 toneindex 3 0 的輸出值與持續(xù)的時(shí)間 由模塊 notetabs 決定 音頻模塊 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity speakera is port clk in std logic 10 tone in std logic vector 10 downto 0 spks out std logic end architecture one of speakera is signal preclk fullspks std logic begin divideclk process clk variable count4 std logic vector 3 downto 0 begin preclk11 then preclk 1 count4 0000 elsif clk event and clk 1 then count4 count4 1 end if end process genspks process preclk tone variable count11 std logic vector 10 downto 0 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 delayspks 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 它是由一個(gè)初值可變的加法計(jì)數(shù)器組成 為了得到合適的發(fā)音頻率 在進(jìn)行預(yù)置計(jì)數(shù) 分頻之前需要將本文選擇的 12MHz 初始頻率信號(hào)進(jìn)行十六分頻 采用四位加法計(jì)數(shù)方式 分頻 當(dāng)輸入一個(gè)脈沖信號(hào) 計(jì)數(shù)器做一次加法計(jì)數(shù) 此時(shí)輸入信號(hào)脈寬展寬一倍 即進(jìn) 行一次二分頻 十六分頻后得到 0 75MHz 輸入頻率 由于數(shù)控分頻器輸出的信號(hào)是脈寬 很窄的信號(hào) 為了有利于驅(qū)動(dòng)揚(yáng)聲器發(fā)音 需要加一個(gè) D 觸發(fā)器以均衡占空比 但這樣一 來(lái) 此時(shí)頻率變?yōu)樵瓉?lái)的二分之一即 0 375MHZ 可預(yù)置計(jì)數(shù)分頻器就是將 0 375MHZ 按 照各音符發(fā)音所需要的頻率值進(jìn)行預(yù)置數(shù)分頻 這里計(jì)數(shù)器設(shè)為 11 位 tone 10 0 模 為 2047 若取音符 3 發(fā)音頻率為 659Hz 需要將 0 375MHz 進(jìn)行約 569 次分頻才能得到此 頻率 預(yù)置數(shù)即可用公式 模 分頻系數(shù) 預(yù)置數(shù) tone 10 0 算出 此時(shí)為 11 2047 569 1478 換成 11 位二進(jìn)制計(jì)數(shù)為 10111000110 音樂(lè)代碼模塊 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity notetabs is port clk in std logic toneindex out std logic vector 3 downto 0 end architecture one of notetabs is component music port address in std logic vector 7 downto 0 clock in std logic q out std logic vector 3 downto 0 end component signal counter std logic vector 7 downto 0 begin cnt8 process clk counter begin if counter 138 then counter 00000000 elsif clk event and clk 1 then countercounter q toneindex clock clk end notetabs 中設(shè)置了一個(gè) 8 位二進(jìn)制計(jì)數(shù)器 作為音符數(shù)據(jù)的地址發(fā)生器 隨著 notetabs 中的計(jì)數(shù)器按照 4Hz 的時(shí)鐘速率作加法計(jì)數(shù)時(shí) 每讀一個(gè)數(shù)據(jù) 音符持續(xù)時(shí)間為 0 25 秒 如音符數(shù)據(jù)中的中音 3 為一拍 持續(xù)時(shí)間 1 秒 所以 音符數(shù)據(jù) ROM 中需要重復(fù)寫(xiě)四次 地址 0A 隨著 4Hz 時(shí)鐘速率讀取地址遞增 音符數(shù)據(jù) ROM 中的音符數(shù)據(jù)將通過(guò)模塊 notetabs 中 toneindex 3 0 端口輸向 tonetaba 模塊 梁祝 音符數(shù)據(jù) ROM 以下排列方法是為了節(jié)省空間 實(shí)際文件每一組占一行 width 4 depth 256 address radix dec data radix dec content begin 00 3 01 3 02 3 04 5 05 5 06 5 07 6 08 8 09 8 10 8 11 9 12 6 13 8 14 5 15 5 16 12 17 12 18 12 19 15 20 13 21 12 22 10 23 12 24 9 25 9 26 9 27 9 28 9 29 9 30 9 31 0 32 9 33 9 34 9 35 10 36 7 37 7 38 6 39 6 40 5 41 5 42 5 43 6 44 8 45 8 46 9 47 9 48 3 49 3 50 8 51 8 52 6 53 5 54 6 55 8 56 5 57 5 58 5 59 5 12 60 5 61 5 62 5 63 5 64 10 65 10 66 10 67 12 68 7 69 7 70 9 71 9 72 6 73 8 74 5 75 5 76 5 77 5 78 5 79 5 80 3 81 5 82 3 83 3 84 5 85 6 86 7 87 9 88 6 89 6 90 6 91 6 92 6 93 6 94 5 95 6 96 8 97 8 98 8 99 9 100 12 101 12 103 10 104 9 105 9 106 10 107 9 108 8 109 8 110 6 111 5 112 3 113 3 114 3 115 9 116 8 117 8 118 8 119 8 120 6 121 8 122 6 123 5 124 3 125 5 126 6 127 8 128 5 129 5 130 5 131 5 132 5 133 5 134 5 135 5 136 0 137 0 138 0 end 時(shí)間動(dòng)態(tài)掃描模塊 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity daojishi is port clk1 clk2 c in std logic led7s buffer std logic vector 6 downto 0 led selout out std logic vector 7 downto 0 end architecture one of daojishi is signal f0 f1 f2 fout1 fout2 std logic signal a0 a1 a2 a3 h1 h2 k1 k2 std logic vector 3 downto 0 signal led71s std logic vector 3 downto 0 signal q0 std logic vector 2 downto 0 begin process clk1 begin if c 1 then a0 1000 elsif clk1 event and clk1 1 then if a0 0000 then a0 1001 f0 1 else a0 a0 1 f0 0 end if end if end process process f0 begin if c 1 then a1 0011 elsif f0 event and f0 1 then if a1 0000 then a1 0101 13 f1 1 else a1 a1 1 f1 0 end if end if end process process f1 begin if c 1 then a2 0010 elsif f1 event and f1 1 then if a2 0000 then f2 1 a2 1001 else a2 a2 1 f2 0 end if end if end process process f2 begin if c 1 then a3 0000 elsif f2 event and f2 1 then if a3 0000 then a3 0101 else a3 a3 1 end if end if end process process clk2 begin if clk2 event and clk2 1 then q0led selout 10000000 led71sled selout 01000000 led71sled selout 00100000 led71sled selout 00010000 led71sled selout 00001000 led71sled selout 00000100 led71sled selout 00000010 led71sled

溫馨提示

  • 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ù)網(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)論