簡易電子琴的HDL仿真與實現_第1頁
簡易電子琴的HDL仿真與實現_第2頁
簡易電子琴的HDL仿真與實現_第3頁
簡易電子琴的HDL仿真與實現_第4頁
簡易電子琴的HDL仿真與實現_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VHDL設計與實現一.設計課題與任務要求:設計制作一個簡易電子琴演奏器。原理概述:依據聲樂學問,產生音樂的兩個因素是音樂頻率的持續(xù)時間,音樂的十二平均率規(guī)定,每兩個八音度之間的頻率相差一倍,在兩個八音度之間,又可分為12個半音。每兩個半音的頻率比為4。另外,音名A〔樂譜中的低音6〕的頻率為440HZ,音名B到C之間,E到F之間為半音,其余為全音。由此可以計算出樂譜中從低音1到高音1之間每個音名的頻率如下表所示。表1簡譜中的音名與頻率的關系音名頻率〔Hz〕音名頻率〔Hz〕音名頻率〔Hz〕低音1261.63中音1523.25高音11046.50低音2293.67中音2587.33高音21174.66低音3329.63中音3659.25高音31318.51低音4349.23中音4698.46高音41396.92低音5391.99中音5783.99高音51567.98低音6440中音6880高音61760低音7493.88中音7987.76高音71975.52根本要求:1 2 3 4 5 6 71、用8×8點陣顯示“1234567”七個音符構成的電子琴鍵盤。其中點陣的第一列用一個D1D示。1 2 3 4 5 6 7圖12、用BTN1~BTN7七個按鍵模擬電子琴手動演奏時的“1234567”七個音符。當某BTN3圖23、 由撥碼開關切換選擇高、中、低音,并用數碼管進展相應的顯示。4、 通過按鍵BTN0進展復位,把握點陣顯示圖1的初始狀態(tài)。提高要求:1、 可通過一個撥碼開關進展手動/自動演奏的切換,并與點陣顯示協(xié)作增加自動演奏樂曲的功能。2、 增加手動演奏的音符存儲、播放功能。二.系統(tǒng)設計〔包括設計思路、總體框圖、分塊設計〕設計思路說明:電子琴的設計包括七個模塊:彈奏模塊keyplay、自動演奏模塊autoplay、tablefenpinstore、七段數碼管顯示模seg7lattice。彈奏模塊keyplay依據按鍵動作key,和高中低模式選擇mode產生指示音調index_key。autoplay50MHzindex_auto。storestore1index_key,并將其傳index_store,作為錄音存儲的數據。查表及顯示模塊 table依據按鍵 button,replay選擇承受 index_key或查分頻系數表輸出分頻系數tone對于tone的編碼,承受了五位編碼方式,高2位存儲高中低音對應的11、01、00編碼,低3位存儲相應輸入音調對應的二進制編碼。buzz7nyindex_autoindex_store,分別對應不同的數碼管顯示輸出。點陣的顯示模塊lattice依據對應的按鍵button,replay選擇承受index_key或index_autoindex_store,分別對應不同的數碼管顯示輸出。這樣可以保證在不同的模式下點陣以及數碼管都可以對應顯示輸出??傮w框圖與流程圖12分塊設計系統(tǒng)總體設計:3Keyplay7所使用。autoplay把50MHz的輸入時鐘分頻為 16Hz,作為節(jié)拍。將要自動演奏的歌曲預先寫為index_auto的格式〔index_auto格式與index_key格式一樣。以16Hz的頻率將index_auto輸出。這里需要用到計數器,此計數器的長度由演奏的歌曲長度而定。5autoplaytablebutton,replaybuttonbutton1replay0index_autoxn為0且y為0則把yn0且1index_storeindextone,輸出。index6tablefenpintone。設置內部信號i用于計數,clk_data作為分頻結果。,每次clk上升沿檢測itoneiclk_datai1。clk_databuzzbuzz7fenpin(1buttonreplayindex_keyindex_autoindex_storeindex(1)index圖8seg7模塊設計數碼管模塊設計:(1buttonreplayindex_keyindex_autoindex_storeindex(1)index9latticereplay應的播放。10storelattice這里我只選擇性地選取了鍵盤輸入的對應點陣顯示,首先鍵盤輸入時button信號為低電平,所以可以從仿真圖中看到button信號為低電平,且此時的復位信號無效,為低電平,此時key輸入信號有效。在對應的時鐘時鐘信號輸入下,當鍵盤輸入信號key對應相應的輸入時,點陣的行列也會有對應的應下一行的低電平輸出。而對應列掃描,依據key輸入的狀況,分別對應列掃描的電平輸出。dolie11011111,row01100000。fenpin可以看到,2〔tone+1〕代表的是分頻系數,所以對應仿真如上圖有,當tone02buzztone2〔1。所以在計算每個音調對應的頻率時,使用1。Keyplay如圖,對應著不同的keymodeindex_key。比方mode=00,key=0000001時,有index_key譯碼為00001,mode=00,key=0001000index_key00100autoplay可以看出,對應前三個節(jié)拍的為音調mi,接下來有一拍的停頓,接下來又是三mijunglebellsauto-playstore有對應的賦值,表示有效的按鍵信息已經被存儲??梢钥吹揭罁謩愉浫氲膇ndex-key 情況,對應 replay 時的 index_store 輸出分別為10001,10110,01011……Seg7如圖所示,對應的 cat 輸出為時鐘掃描信號,所著時鐘變化,cat0,cat1,cat2,cat3,cat4,cat5依次消滅低電平,表示對應的選通管有效,而依據輸入的key而變,可以看到,對應mi的輸入的時候,恰好可以顯示數碼管上的3字樣。四、源程序〔要有注釋〕electrorgan.vhl--頂層文件libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;entityelectrorganis--作為頂層文件,它包含實現功能用到的全部端口port(clk:instd_logic;key:instd_logic_vector(6downto0);mode:instd_logic_vector(1downto0);cat:outstd_logic_vector(5downto0);clr:instd_logic;button:instd_logic;replay:instd_logic;spkout:outstd_logic;store1:instd_logic;Atop:OUTstd_logic;Btop:OUTstd_logic;Ctop:OUTstd_logic;Dtop:OUTstd_logic;Etop:OUTstd_logic;Ftop:OUTstd_logic;Gtop:OUTstd_logic;lietop:outstd_logic_vector(7downto0);--列endelectrorgan;architecturebehaveofelectrorganiscomponentautoplay--這里聲明白頂層文件中包含的各模塊clr:instd_logic;endcomponent;componentstoreisclk:instd_logic;clr:instd_logic;replay:instd_logic;endcomponent;componentfenpinport(clk:instd_logic;buzz:outstd_logic);endcomponent;componentlatticeport(clk:instd_logic;lie:outstd_logic_vector(7downto0);--列index_auto:instd_logic_vector(4downto0);clr:instd_logic;replay:instd_logic;button:instd_logic);Endcomponent;index_key:i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論