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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1 長 沙 學 院 課程設計說明書 題目 音樂播放器的設計 系 部 電子與通信工程 專業(yè) 班級 電氣工程及其自動化 一班 姓名 學號 指導教師 起止日期 2010 11 29 至 2010 12 10 2 EDA 技技術術課課程程設計設計任任務書務書 系 部 電子與通信工程系 專業(yè) 電氣工程及其自動化 指導教師 課題名稱音樂播放器的設計 設 計 內 容 及 要 求 在 SOPC 開發(fā)平臺上實現(xiàn)一個音頻信號發(fā)生器 編寫 3 段音樂 利用 開發(fā)平臺的蜂鳴器來播放幾段音樂 可進行自動循環(huán)播放和手動播放兩個 模式的選擇 如果為手動播放 則通過撥動撥碼開關第 1 2 位選擇 播 放音樂時 要求將該音樂的序號 分別為 A1 A2 A3 以及該音樂播放剩 余的時間 分 秒 顯示在數(shù)碼管上 當某首音樂開始播放時 音樂序號閃 爍顯示 3 秒鐘 系統(tǒng)提供 50MHZ 頻率的時鐘源 完成該系統(tǒng)的硬件和軟件的設計 并 制作出實物裝置 調試好后并能實際運用 指導教師提供制作所需的器件 最后就課程設計本身提交一篇課程設計說明書 設 計 工 作 量 1 VHDL 語言程序設計 2 波形仿真 3 在實驗裝置上進行硬件測試 并進行演示 4 提交一份完整的課程設計說明書 包括設計原理 程序設計 程序分 析 仿真分析 硬件測試 調試過程 參考文獻 設計總結等 起止日期 或時間量 設計內容 或預期目標 備注 第 1 天課題介紹 答疑 收集材料 第 2 天設計方案論證 第 3 天 進一步討論方案 對設計方案進行必要的 修正 方案確定后開始進行 VHDL 語言程 序設計 第 4 天設計 VHDL 語言程序 第 5 9 天 在實驗裝置上進行硬件測試 對 VHDL 語 言程序進行必要的修正 并進行演示 進 度 安 排 第 10 天編寫設計說明書 教研室 意見 年 月 日 系 部 主 管領導意見 年 月 日 3 長沙學院課程設計鑒定表 姓名學號專 業(yè) 電氣工程及其自動化班級一 班 設計題目音樂播放器的設計指導教師 指導教師意見 評定等級 教師簽名 日期 答辯小組意見 評定等級 答辯小組長簽名 日期 教研室意見 教研室主任簽名 日期 系 部 意見 系主任簽名 日期 說明 課程設計成績分 優(yōu)秀 良好 及格 不及格 四類 目錄目錄 4 摘要摘要 5 設計原理設計原理 5 程序 程序 6 實驗現(xiàn)象 實驗現(xiàn)象 14 引腳分配 引腳分配 14 仿真波形 仿真波形 15 心得體會 心得體會 16 參考文獻 參考文獻 16 摘要摘要 5 在 SOPC 開發(fā)平臺上實現(xiàn)一個音頻信號發(fā)生器 編寫 3 段音樂 利用開發(fā)平臺的蜂鳴 器來播放幾段音樂 可進行自動循環(huán)播放和手動播放兩個模式的選擇 如果為手動播放 則通過撥動撥碼開關第 1 2 位選擇 播放音樂時 要求將該音樂的序號 分別為 A1 A2 A3 以及該音樂播放剩余的時間 分 秒 顯示在數(shù)碼管上 當某首音樂開始播放 時 音樂序號閃爍顯示 3 秒鐘 關鍵字 關鍵字 SOPC 音頻信號 音樂 蜂鳴器 自動循環(huán) 手動播放 剩余時間 分鐘 秒鐘 顯 示 音樂序號 A1 A2 A3 顯示 設計原理設計原理 首先采用分塊設計法 將設計分為分頻模塊 時間動態(tài)掃描顯示模塊 音樂播放模塊 頂層模塊 其中音樂播放模塊又可分為音頻模塊 音樂代碼模塊 預置數(shù)模塊 利用計數(shù)的方式將 50MHZ 的頻率分為 12MHz 100Hz 8Hz 1Hz 音樂播放模塊需要完成以下設計 預置樂曲 本次設計選取了 梁祝 的一段作預置 在作預置時 需要將樂曲音符 轉換成相應的代碼 通過計算逐一將音符轉換成代碼 通過 EDA 開發(fā)平臺 quartus 進行 樂曲定制 為了提供樂曲發(fā)音所需要的發(fā)音頻率 編寫數(shù)控分頻器程序 對單一輸入高頻 進 行預置數(shù)分頻 生成每個音符發(fā)音的相應頻率 為了給分頻提供預置數(shù) 需要計算分頻預置數(shù) 對每部分結構單元逐一進行編譯 生成相應的元器件符號 并對獨立結構單元功能進 行仿真 音調的控制 頻率的高低決定了音調的高低 綜合考慮各因素 本次設計中選取 12MHZ 作為 CLK 的 分頻計數(shù)器的輸入分頻信號 由于樂曲都是由一連串的音符組成 因此按照樂曲的樂譜依 次輸出這些音符相對應的頻率 就可以在蜂鳴器上連續(xù)地發(fā)出各個音符的音調 表 1 簡譜中的音名與頻率的關系 音名頻率 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 音長的控制 這次設計中所演奏的樂曲的最短的音符為四分音符 如果將全音符的持續(xù)時間設為 1s 的話 那么一拍所應該持續(xù)的時間為 0 25 秒 則只需要再提供一個 4Hz 的時鐘頻率即 可產生四分音符的時長 系統(tǒng)工作時就按 4Hz 的頻率依次讀取簡譜 當系統(tǒng)讀到某個音符 的簡譜時就對應發(fā)這個音符的音調 持續(xù)時間為 0 25 秒 如果在曲譜文件中某個音符為三 拍音長 只要將該音符連續(xù)書寫三遍 系統(tǒng)讀樂曲文件的時候就會連續(xù)讀到三次 也就會 發(fā)三個 0 25 秒的音長 這時我們聽上去就會持續(xù)了三拍的時間 這樣就可以控制音樂的 6 音長了 程序程序 音樂播放器頂層模塊 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ā)音的分頻預置數(shù) 而此數(shù)在 speakera 輸入口停留時間即為此音符的節(jié)拍值 模塊 tonetaba 是樂曲簡譜碼對應的分頻預 置數(shù)查表電路 其中設置了 梁祝 樂曲全部音符所對應的分頻預置數(shù) 共 13 個 每一個 音符的停留時間由音樂節(jié)拍和音調發(fā)生器模塊 notetabs 的 clk 輸入頻率決定 在此時為 4HZ 每一個計數(shù)值停留時間為 0 25 秒 恰為當全音符為 1 秒時 四四拍的 4 分音符持 續(xù)時間 這 13 個值的輸出由對應于 tonetaba 的 4 位輸入值 index 3 0 確定 而 index 3 0 最 多有 16 種選擇 輸向 tonetaba 中 index 3 0 的值 toneindex 3 0 的輸出值與持續(xù)的時間 由模塊 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 它是由一個初值可變的加法計數(shù)器組成 為了得到合適的發(fā)音頻率 在進行預置計數(shù) 分頻之前需要將本文選擇的 12MHz 初始頻率信號進行十六分頻 采用四位加法計數(shù)方式 分頻 當輸入一個脈沖信號 計數(shù)器做一次加法計數(shù) 此時輸入信號脈寬展寬一倍 即進 行一次二分頻 十六分頻后得到 0 75MHz 輸入頻率 由于數(shù)控分頻器輸出的信號是脈寬 很窄的信號 為了有利于驅動揚聲器發(fā)音 需要加一個 D 觸發(fā)器以均衡占空比 但這樣一 來 此時頻率變?yōu)樵瓉淼亩种患?0 375MHZ 可預置計數(shù)分頻器就是將 0 375MHZ 按 照各音符發(fā)音所需要的頻率值進行預置數(shù)分頻 這里計數(shù)器設為 11 位 tone 10 0 模 為 2047 若取音符 3 發(fā)音頻率為 659Hz 需要將 0 375MHz 進行約 569 次分頻才能得到此 頻率 預置數(shù)即可用公式 模 分頻系數(shù) 預置數(shù) tone 10 0 算出 此時為 11 2047 569 1478 換成 11 位二進制計數(shù)為 10111000110 音樂代碼模塊 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 中設置了一個 8 位二進制計數(shù)器 作為音符數(shù)據(jù)的地址發(fā)生器 隨著 notetabs 中的計數(shù)器按照 4Hz 的時鐘速率作加法計數(shù)時 每讀一個數(shù)據(jù) 音符持續(xù)時間為 0 25 秒 如音符數(shù)據(jù)中的中音 3 為一拍 持續(xù)時間 1 秒 所以 音符數(shù)據(jù) ROM 中需要重復寫四次 地址 0A 隨著 4Hz 時鐘速率讀取地址遞增 音符數(shù)據(jù) ROM 中的音符數(shù)據(jù)將通過模塊 notetabs 中 toneindex 3 0 端口輸向 tonetaba 模塊 梁祝 音符數(shù)據(jù) ROM 以下排列方法是為了節(jié)省空間 實際文件每一組占一行 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 時間動態(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論