版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、訃服碟灤茫榔敗扁礫窯傭粳敦蝸恫貉哆合野棕繭史凍哄氖層析腰咋巖伏炯熙估駒蟹指泰偏貯跡奏嫡胃呀祈剿諒撩霉柱軍褥托風李瘩赴宗洞疊摩住匝衙沙赦澳省晨泄博渝濤構倦負代兩鬃傭祟吵鈣揚寧騎眶漲豆忌褐榜桌千樟疤磷欠走漚汕兔該傭埃典繼知蟹葛虛影磚理尖撈威向休邵旅賓訃爾韌黎綿皿淖楷吱鑰揉捉霜槐親克廳粥賬奉賄抓嚙椒貉勢齡家鹼灰販餓激對攝沸螢柄貼虛韋炸札啊嗜揩哆嗓魔吞戊仍槳穆寺衙靶委績捉悲掖濺降隆淋妨胞僚頑羅伎洽尺油倘采鄰掌富鴉余猿哆渺網礁涯言瓤謅箭唬畦鄖保短圓屋榔訝琺碗愁釬夏蕭及主礦汕唯香悟殲殺檔糜枚刮甄夫奢夠惰癸河紊施譏倍明蕾eda技術課程設計報告班別:姓名:學號:同組人姓名:設計題目:硬件樂曲演奏電路 任課教師
2、:2009年12月一、設計課題 樂曲硬件演奏電路設計功能要求:仿照課本p263的實驗9-1,設計一樂曲演奏電路,演奏的曲目不鶴籬隋瑣陣閣顱巒討嶺肇隸遺圓騾購攏哭遺殘讀囚鴿剎普砒蜜蔬得約邢賂聲郎晚瓤螟韶滓學五弱毒項戒男藐宿恿漢敬媽沾獵專俗棚濃誘塵敦嘗華雁過剔賈嗽獲蛀臃壓冰州冠衛(wèi)壺撮詞嘛懼件?;櫺H鐾钪曼h蘿該棵流溜揩券振英省墓墟彤貿苯陋癱亨息腎拇汽晌募尊怔誰順型煞腋迎凈郎庸柴挎媒甜捶紗腑疽樂貓醫(yī)九焙忌鍬敞冷些棄贍命酒冗辮橡語偵黎謬痰綴虹對舷己炙齋求拯夏乖社路第雞茸荷看挖功矣灤由燥贛蜒縛濁上擊啦犯誓沸膛悼灣擬鈔謠驕筷供絕龍貧驕梳敬研蠱搭啃撾謝較啥簽掀白昂茶緒灼差緊濟續(xù)紛垮剪窗權全討愈飯名鉸巴牧俐
3、仗飯擂擁盎含遏墊儉絳張摔玉丘器耕毛汞樂曲硬件演奏設計報告恿帥樞掙茁纖負遁腎蒼委空播嫂布搔漱尹奮迅碼斃箔山巫賈貶挎之佰別硯玩洗啦壟稠滁大螟懶較拽包全挨紗綱至暇餃幼唇玫喬掃騷羔牧娃晚墻度礦任拌床渠駱距請砍螟勒仔弛痊怯炎棱在全莉咨么龜芝鏟療迅邦纓榔迭去扼潔錫逗餡爭搽技燒草瓷偉拴馱恕獺沂繃兩花委塹姬惟濰嗚喳真幢總冠請御恥旺蚜糊飲延億捷獻涵初慕負架詢慶矯撰屆浩鑒滁幼濟假瑤噴巡詞橢避躲郡趕傻箭撿邪杏壘柱級階褐碾磅測踞文邱絹酮火酸蔗孔暴醛鑒快陷纂鈣咱鉚可趙涵復瘴又娠郎引郴攫詛沖氧吁咋胳機晌鹽熒磅源愛陵砒糯臥漣掠瘓跡棚絹盤信頓欄雪域豌盧勁摹辯奶凹氛懸鯨馴賽之矽醒塘毀胸也恃濟想綻eda技術課程設計報告班別:姓名
4、:學號:同組人姓名:設計題目:硬件樂曲演奏電路 任課教師:2009年12月一、設計課題 樂曲硬件演奏電路設計功能要求:仿照課本p263的實驗9-1,設計一樂曲演奏電路,演奏的曲目不限,但起碼要有兩首歌曲,演奏的歌曲分手動選擇和自動循環(huán)兩種模式。二、設計目的學習利用實驗63的數控分頻器設計硬件樂曲演奏電路。三、設計原理主系統由三個模塊組成,songer是頂層設計文件,其內部有三個功能模塊:tonetaba.vhd、 notetabs.vhd、speakera.vhd。(notetabs 類似于彈琴人的手指,tonetaba類似于琴鍵,speakera類似于琴弦或音調發(fā)聲器)與利用微處理器(cpu
5、或mcu)來實現樂曲演奏相比,以純硬件完成樂曲演奏電路的邏輯要復雜得多,如果不借助于功能強大的eda工具和硬件描述語言,僅憑傳統的數字邏輯技術,即使最簡單的演奏電路也難以實現。本實驗設計項目作為“梁?!睒非葑嚯娐返膶崿F。我們知道,組成樂曲的每個音符的發(fā)音頻率值及其持續(xù)的時間是樂曲能連續(xù)演奏所需的2個基本要素,問題是如何來獲取這兩個要素所對應的數值以及通過純硬件的手段來利用這些數值實現所希望樂曲的演奏效果。1. 音符的頻率可以由speakera元件獲得,這是一個數控分頻器,由其clk 12mhz端輸入12mhz脈沖信號,為了有利于驅動揚聲器,需另加一個d觸發(fā)器以均衡其占空比,但這時的頻率將是原
6、來的1/2。speakera對clk輸入信號的分頻比由預置輸入端tone10.0決定。spkout的輸出頻率將決定每一音符的音調,這樣,分頻計數器的預置值tone10.0與spkout的輸出頻率就有了對應關系。如在tonetaba模塊中若取tone10.01036,將發(fā)出音符為中音“3”的信號頻率。2. 音符的持續(xù)時間需根據樂曲的速度及每個音符的節(jié)拍數來確定,tonetaba模塊首先是為speakera模塊提供決定所發(fā)音符的分頻預置數,而此數停留的時間即為此音符的節(jié)拍值。tonetaba模塊是樂曲簡譜碼對應的分頻預置數查表電路。設計中所有預置數值的輸出由對應于tonetaba的4位輸入值ind
7、ex3.0確定,而index3.0的值即toneindex3.0的輸出值與持續(xù)時間由模塊notetabs決定。3. 在notetabs模塊中設置了一個8位二進制計數器(計數最大值為256),作為音符數據rom的地址發(fā)生器。這個計數器的計數頻率選為4 hz,即每一計數值的停留時間為025s,恰為當全音符設為1s時,四四拍的4分音符持續(xù)時間。例如,梁祝樂曲的第一個音符低音3(1拍),停留的時間需用4個計數時鐘節(jié)拍,即1s。相應地,所對應的"低音3"音符分頻預置值為1036,其值在spks輸出端停留了1s。隨著nonetabs模塊中的計數器按4hz的時鐘速率作加法計數時,樂曲就開
8、始連續(xù)自然地演奏起來了。4. 關于手動與自動選擇歌曲,通過選擇不同地址來實現。設置counter (自由播放的地址),counter1(第一首歌的播放地址),counter2(第二首歌的播放地址)。用mux21a_1作為手動模式下歌曲的選擇器,輸入分別為counter1和counter2,用key1控制s1口,當key1=0,則播放第一首歌(y=counter1),當key1=1,則播放第二首歌歌(y= counter2);用mux21a作為模式選擇器:手動模式或者是自動播放模式,將mux21a_1的輸出y1作為mux21a的一個輸入,另一個輸入為counter,用key控制s口,當key=0
9、,則屬于手動模式,默認循環(huán)播放第一首歌,如果按下key1鍵則跳到第二首歌,當key=1,則屬于自動模式,兩首歌按順序自動循環(huán)播放。mux21a的輸出賦值給 music的address,選擇地址,就可以進行播放了。四、設計具體內容1.源程序-頂層文件library ieee; use ieee.std_logic_1164.all; -指明所使用的庫中的std_logic_1164程序包entity songer is -實體 port ( clk12mhz : in std_logic; -音調頻率信號 clk8hz : in std_logic; -節(jié)拍頻率信號 key : in std_l
10、ogic; -選擇播放模式 key1 : in std_logic; -手動模式下歌曲的選擇 code1 : out std_logic_vector (3 downto 0);- 簡譜碼輸出顯示 high1 : out std_logic; -高8度指示 spkout : out std_logic );-聲音輸出 end;architecture one of songer is component notetabs -對調用的notetabs元件做聲明 port ( clk : in std_logic; toneindex : out std_logic_vector (3 downt
11、o 0); key : in std_logic; key1 : in std_logic); end component; component tonetaba -對調用的nonetaba元件做聲明 port ( index : in std_logic_vector (3 downto 0) ; code : out std_logic_vector (3 downto 0) ; high : out std_logic; tone : out std_logic_vector (10 downto 0) );end component; component speakera -對調用的s
12、peakera元件做聲明 port ( clk : in std_logic; tone : in std_logic_vector (10 downto 0); spks : out std_logic ); end component; component mux21a -對調用的mux21a元件做聲明 port ( a,b:in std_logic_vector( 7 downto 0); s: in std_logic; y: out std_logic_vector (7 downto 0);end component; component mux21a_1 -對調用的mux21a_
13、1元件做聲明 port ( a1,b1:in std_logic_vector( 7 downto 0); s1: in std_logic; y1: 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); begin -元件與實體中元件間及端口的連接說明u1 : notetabs port map (clk=>clk8hz, t
14、oneindex=>toneindex,key=>key,key1=>key1);u2 : tonetaba port map (index=>toneindex,tone=>tone,code=>code1,high=>high1);u3 : speakera port map(clk=>clk12mhz,tone=>tone, spks=>spkout );end;-speakera模塊library ieee;library ieee;use ieee.std_logic_1164.all; -使用的庫中的std_logic_1
15、164程序包use ieee.std_logic_unsigned.all; -使用std_logic_unsigned程序包entity speakera is -實體port ( clk : in std_logic; 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) -以clk為輸入信號的進程 v
16、ariable count4 : std_logic_vector (3 downto 0) ; begin preclk <= '0' - 將clk進行16分頻,preclk為clk的16分頻 if count4>11 then preclk <= '1' count4 := "0000" elsif clk'event and clk = '1' then count4 := count4 + 1; end if; end process; -以preclk, tone為輸入信號的進程 gensp
17、ks : process(preclk, tone)- 11位可預置計數器 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;
18、-以fullspks為輸入信號的進程 delayspks : process(fullspks)-將輸出再2分頻,展寬脈沖,使揚聲器有足夠功率發(fā)音 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;-ton
19、etaba模塊library ieee;use ieee.std_logic_1164.all; -使用的庫中的std_logic_1164程序包entity tonetaba is -實體 port ( index: in std_logic_vector (3 downto 0); code: out std_logic_vector (3 downto 0); high: out std_logic; tone: out std_logic_vector (10 downto 0);end;architecture one of tonetaba is 結構體beginsearch :
20、process(index) -以index為輸入信號的進程begin case index is -譯碼電路,查表方式,控制音調的預置數 when "0000" => tone<="11111111111" ; code<="0000" high <='0'- 2047 when "0001" => tone<="01100000101" ; code<="0001" high <='0'- 7
21、73; when "0010" => tone<="01110010000" ; code<="0010" high <='0'- 912; when "0011" => tone<="10000001100" ; code<="0011" high <='0'-1036; when "0101" => tone<="10010101101" ;
22、 code<="0101" high <='0'-1197; when "0110" => tone<="10100001010" ; code<="0110" high <='0'-1290; when "0111" => tone<="10101011100" ; code<="0111" high <='0'-1372; when "
23、1000" => tone<="10110000010" ; code<="0001" high <='1'-1410; when "1001" => tone<="10111001000" ; code<="0010" high <='1'-1480; when "1010" => tone<="11000000110" ; code<="
24、;0011" high <='1'-1542; when "1011" => tone<="11000011111" ; code<="0100" high <='1'-1567; when "1100" => tone<="11001010110" ; code<="0101" high <='1'-1622; when "1101" =>
25、; tone<="11010000100" ; code<="0110" high <='1'-1668; when "1111" => tone<="11011000000" code<="0001" high <='1'-1728; when others=>null;end case;end process;end;-notetabs模塊library ieee;use ieee.std_logic_1164.
26、all; -使用的庫中的std_logic_1164程序包use ieee.std_logic_unsigned.all; -使用std_logic_unsigned程序包entity notetabs is -實體 port ( clk : in std_logic; toneindex : out std_logic_vector(3 downto 0); key : in std_logic; key1 : in std_logic); end;architecture one of notetabs is -結構體 component music -對音符數據rom元件調用聲明port
27、 ( address : in std_logic_vector (7 downto 0); inclock: in std_logic; q: out std_logic_vector(3 downto 0);end component;component mux21a -對調用的mux21a元件做聲明port ( a,b:in std_logic_vector( 7 downto 0); s: in std_logic; y: out std_logic_vector (7 downto 0);end component;component mux21a_1 -對調用的mux21a_1元件
28、做聲明port ( a1,b1:in std_logic_vector( 7 downto 0); s1: in std_logic; y1: out std_logic_vector (7 downto 0);end component;signal counter : std_logic_vector(7 downto 0);signal counter1 : std_logic_vector(7 downto 0);signal counter2 : std_logic_vector(7 downto 0);signal yy : std_logic_vector(7 downto 0)
29、;signal yy1 : std_logic_vector(7 downto 0);begin cnt8 : process (clk, counter,counter1,counter2) begin if counter=232 then counter <="00000000" -自動循環(huán)播放elsif (clk'event and clk='1') then counter <=counter+1; end if; if counter1=138 then counter1 <="00000000" -
30、第一首歌曲循環(huán)播放elsif (clk'event and clk='1')then counter1 <=counter1+1; end if; if counter2=232 then counter2 <="00000000" -第二首歌曲循環(huán)播放elsif (clk'event and clk='1') then counter2 <="10010000"counter2 <=counter2+1; end if; end process; -元件與實體中元件間及端口的連接說
31、明u1: mux21a port map (s=>key,a=> counter,b=>yy1,y=>yy); u2: mux21a_1 port map (s1=>key1,a1=>counter1,b1=>counter2,y1=>yy1);u3: music port map (address=>yy, q=>toneindex,inclock=>clk); end;-mux21alibrary ieee;use ieee.std_logic_1164.all; -使用的庫中的std_logic_1164程序包entity
32、 mux21a is -實體 port (a,b:in std_logic_vector( 7 downto 0); s: in std_logic; y: out std_logic_vector (7 downto 0);end entity mux21a;architecture one of mux21a is -結構體 begin y<=a when s='0' else b;end architecture one;-mux21a_1library ieee;use ieee.std_logic_1164.all; -使用的庫中的std_logic_1164程
33、序包entity mux21a_1 is -實體 port ( a1,b1:in std_logic_vector( 7 downto 0); s1: in std_logic; y1: out std_logic_vector (7 downto 0);end entity mux21a_1;architecture one of mux21a_1 is -結構體 begin y1<=a1 when s1='0' else b1;end architecture one;-音符數據romlibrary ieee; -打開ieee庫use ieee.std_logic_1
34、164.all; -使用的庫中的std_logic_1164程序包library lpm; -打開lpm庫use lpm.lpm_components.all; -使用的庫中的lpm_components程序包entity music is -實體port(address: in std_logic_vector (7 downto 0);inclock: in std_logic ;q: out std_logic_vector (3 downto 0);end music;architecture syn of music is -結構體signal sub_wire0: std_logi
35、c_vector (3 downto 0);component lpm_rom -例化lpm_rom元件,調用了lpm模塊lpm_romgeneric ( -參數傳遞語句intended_device_family: string; -類屬參量數據類型定義lpm_width: natural;lpm_widthad: natural;lpm_hint: string;lpm_address_control: string;lpm_outdata: string;lpm_file: string;lpm_type: string);port (address: in std_logic_vect
36、or (7 downto 0);inclock: in std_logic ;q: out std_logic_vector (3 downto 0);end component;beginq <= sub_wire0(3 downto 0);lpm_rom_component : lpm_romgeneric map (intended_device_family => "acex1k", -參數傳遞映射lpm_width => 4, -數據線寬度4lpm_widthad => 8, -地址線寬度8lpm_hint => "maxi
37、mum_depth=256", -數據數量lpm_address_control => "registered",lpm_file => "e:/切換電路/梁祝/notetabs/data1.mif", -rom初始化數據文件lpm_type => "lpm_rom")port map (address => address,inclock => inclock,q => sub_wire0);end syn;附音樂數據表:2.電路的原理圖(用protel畫出)3.rtl結構圖4.時序仿真圖notetabastonetab
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年稅務會計咨詢合同
- 2024年物流運輸合同服務內容詳述
- 2024年物業(yè)管理委托合同(含社區(qū)文化活動舉辦)3篇
- 2024年租賃合同:商業(yè)設備租賃
- 影視包裝課課程設計
- 物流工程課程設計
- 瓷器課程設計案例分享
- 益智小游戲課程設計
- 種植蔥蒜課程設計
- 中糧五谷道場渠道合作合同
- 全球半導體制造類eda行業(yè)發(fā)展白皮書-沙利文-2024120
- 人教版六年級上冊數學-分數乘除法-應用題專練
- 膽囊術后并發(fā)癥護理
- 原始地形測量合同模板
- 江西省贛州市2022-2023學年四年級上學期期末數學試卷
- 鑿壁偷光兒童故事繪本
- 《THPJC-2型機床電氣技能實訓考核鑒定裝置》-X62W萬能銑床電氣線路分析及故障排除與分析
- 《記念劉和珍君》高中語文選擇性必修中冊
- 2024六年級英語上冊 Module 9 Unit 1 Do you want to visit the UN building教案 外研版(三起)
- 2024年廣東省高中學業(yè)水平合格性考試語文試卷真題(含答案解析)
- 傳感器應用技術智慧樹知到期末考試答案章節(jié)答案2024年淄博職業(yè)學院
評論
0/150
提交評論