梁祝樂(lè)曲-樂(lè)曲硬件演奏電路的VHDL設(shè)計(jì)-eda課程設(shè)計(jì)報(bào)告_第1頁(yè)
梁祝樂(lè)曲-樂(lè)曲硬件演奏電路的VHDL設(shè)計(jì)-eda課程設(shè)計(jì)報(bào)告_第2頁(yè)
梁祝樂(lè)曲-樂(lè)曲硬件演奏電路的VHDL設(shè)計(jì)-eda課程設(shè)計(jì)報(bào)告_第3頁(yè)
梁祝樂(lè)曲-樂(lè)曲硬件演奏電路的VHDL設(shè)計(jì)-eda課程設(shè)計(jì)報(bào)告_第4頁(yè)
梁祝樂(lè)曲-樂(lè)曲硬件演奏電路的VHDL設(shè)計(jì)-eda課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩8頁(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、 樂(lè)曲硬件演奏電路的VHDL設(shè)計(jì) 姓名:張哲銘班級(jí):12微電子 一、設(shè)計(jì)題目:樂(lè)曲硬件演奏電路的VHDL設(shè)計(jì)二、設(shè)計(jì)目標(biāo):了解一般樂(lè)曲演奏電路設(shè)計(jì)設(shè)計(jì)方法,學(xué)習(xí)VHDL語(yǔ)言,熟悉EDA設(shè)計(jì)軟件QuartusII和MAX+plus,加強(qiáng)獨(dú)立完成電子設(shè)計(jì)的能力。 (1)能夠播放“梁?!睒?lè)曲。(2)能夠通過(guò)LED顯示音階。(3)(選作)具有“播放/停止”功能,并在此基礎(chǔ)上實(shí)現(xiàn)“按鍵演奏”的電子琴功能。主芯片型號(hào)為FLEX10K10LC84-4三、實(shí)驗(yàn)電路的工作原理:(演奏電路邏輯圖)組成樂(lè)曲的每個(gè)音符的發(fā)音頻率值及其持續(xù)的時(shí)間是樂(lè)曲能夠連續(xù)演奏所需的兩個(gè)基本要素,設(shè)計(jì)演奏電路的關(guān)鍵就是獲得這兩個(gè)要素

2、所對(duì)應(yīng)的數(shù)值以及通過(guò)純硬件的手段來(lái)利用這些數(shù)值實(shí)現(xiàn)所希望樂(lè)曲的演奏效果。演奏電路邏輯圖有三部分:音樂(lè)節(jié)拍和音調(diào)發(fā)生器、簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查表電路、數(shù)控分頻與演奏發(fā)生器。演奏電路邏輯圖:四、設(shè)計(jì)內(nèi)容:1.完成程序的編輯工作。2.將音樂(lè)數(shù)據(jù)制作成LMP_ROM文件.3.將程序加載到MAX+plus中進(jìn)行編譯、仿真,并保存仿真結(jié)果。4.到實(shí)驗(yàn)室進(jìn)行下載驗(yàn)證。引腳進(jìn)行鎖定,然后下載到實(shí)驗(yàn)芯片中觀察實(shí)驗(yàn)結(jié)果。五、仿真結(jié)果:1.音樂(lè)節(jié)拍和音調(diào)發(fā)生器(NoteTabs.VHD)notetabs模塊中設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器(計(jì)數(shù)最大值138),作為音符數(shù)據(jù)ROM的地址發(fā)生器。這個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率選為4

3、Hz,即每一個(gè)計(jì)數(shù)值的停留時(shí)間為0.25秒,恰為當(dāng)全音符設(shè)為1秒時(shí),四四拍的4分音符持續(xù)時(shí)間。隨著notetabs模塊中的計(jì)數(shù)器按4Hz的時(shí)鐘速率作為加法計(jì)數(shù)時(shí),即隨地址值遞增時(shí),音符數(shù)據(jù)ROM中的音符數(shù)據(jù)將從ROM中通過(guò)ToneIndex3.0端口輸向ToneTaba模塊,“梁?!睒?lè)曲就開(kāi)始連續(xù)自然的演奏起來(lái)了。Notetabs模塊仿真圖:2.簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查表電路(ToneTaba.VHD)音符的持續(xù)時(shí)間需根據(jù)樂(lè)曲的速度及每個(gè)音符的節(jié)拍數(shù)來(lái)確定,tonetaba模塊的功能首先是為speakera提供決定所發(fā)音符的預(yù)置數(shù),而此數(shù)在speakera輸入口停留的時(shí)間即為此音符的節(jié)拍值。T

4、onetaba模塊是樂(lè)曲簡(jiǎn)碼對(duì)應(yīng)的分頻預(yù)置數(shù)查表電路。其中設(shè)置了“梁祝”樂(lè)曲全部音符所對(duì)應(yīng)的分頻預(yù)置數(shù),共13個(gè),每一音符的停留時(shí)間由音樂(lè)節(jié)拍和音調(diào)發(fā)生器模塊NoteTabs的clk的輸入頻率決定。這13個(gè)值的輸出由對(duì)應(yīng)于ToneTaba的4位輸入值Index3.0確定,而Index3.0最多有16種可選值。輸向ToneTaba中Index3.0的值ToneIndex3.0的輸出值與持續(xù)時(shí)間有模塊notetabs決定。Tonetaba仿真圖:4.數(shù)控分頻與演奏發(fā)生器(Speakera.VHD)音符的頻率可由次模塊獲得,這是一個(gè)數(shù)控分頻器,由其clk端輸入一個(gè)具有較高頻率的信號(hào),通過(guò)speake

5、ra分頻后由spkout輸出,由于直接從數(shù)控分頻器中出來(lái)的輸出信號(hào)是脈沖較窄的脈沖信號(hào),為了有助于驅(qū)動(dòng)揚(yáng)聲器,需另加一個(gè)D觸發(fā)器以均衡其占空比,但這時(shí)的頻率是原來(lái)的1/2。Speakera對(duì)clk輸入信號(hào)的分頻的預(yù)置數(shù)Tone10.0與spkout的輸出頻率就有了對(duì)應(yīng)關(guān)系。Sperkera模塊仿真圖:5.梁祝music.vhd(音樂(lè)數(shù)據(jù)):將數(shù)據(jù)保存為.mif格式然后制作成LMP_ROM文件。六、實(shí)驗(yàn)結(jié)果:(程序下載驗(yàn)證是否通過(guò))試驗(yàn)成功!將設(shè)計(jì)出的演奏電路的程序經(jīng)過(guò)編譯(Compiler)后,選擇FLEX10K系列中EPF10K10LC84-4作為目標(biāo)器件(Assign/Device),并進(jìn)

6、行管腳鎖定(Floorplan Editor)。器件編程(Programmer),將編譯生成的*.sof文件下載到目標(biāo)芯片。觀察到數(shù)碼管5顯示出演奏時(shí)的音樂(lè)簡(jiǎn)譜,發(fā)光二極管D5指示音調(diào)高低,同時(shí)實(shí)驗(yàn)箱自帶蜂鳴器(Speaker)奏出“梁?!蹦瞧嗝绖?dòng)人的旋律,實(shí)驗(yàn)成功。七、總結(jié):本次樂(lè)曲硬件演奏電路的VHDL設(shè)計(jì)主要采用數(shù)控分頻原理來(lái)實(shí)現(xiàn),在本次EDA課程設(shè)計(jì)中,我與其他同學(xué)相互交流,相互學(xué)習(xí),提高了用VHDL語(yǔ)言編程的技能及進(jìn)一步加強(qiáng)了MAX+plus對(duì)這種EDA流行軟件的應(yīng)用,通過(guò)這次設(shè)計(jì),我們溫故了已學(xué)的理論知識(shí)和實(shí)踐操作技能,同時(shí)也學(xué)習(xí)了更多的新的知識(shí)和技能,為以后進(jìn)一步的學(xué)習(xí)和工作打下

7、了堅(jiān)實(shí)的基礎(chǔ)。本設(shè)計(jì)得到的電路可以作為一個(gè)樂(lè)曲演奏模塊,如果要演奏出另外一首曲子,只需將該曲子出現(xiàn)的簡(jiǎn)譜分頻預(yù)置數(shù)寫(xiě)入ToneTaba.VHD,再將該曲子的節(jié)拍表制作成ROM文件輸入到NoteTabs.VHD中,編譯后,編程下載即可。具體代碼:library ieee;use ieee.std_logic_1164.all;entity songer isport(clk4MHz:in std_logic; clk4Hz:in std_logic; clk:in std_logic; sel:out std_logic_vector(2 downto 0); sm:out std_logic_

8、vector(6 downto 0); spk:out std_logic);end;architecture one of songer iscomponent notetabsport(clk:in std_logic; toneindex:out integer range 0 to 15);end component;component tonetabaport(index:in integer range 0 to 15; low:out std_logic_vector(3 downto 0); mid:out std_logic_vector(3 downto 0); high:

9、out std_logic_vector(3 downto 0); tone:out integer range 0 to 16#1FFF#);end component;component speakeraport(clk:in std_logic; tone:in integer range 0 to 16#1FFF#; spks:out std_logic);end component;signal tone:integer range 0 to 16#1FFF#;signal toneindex:integer range 0 to 15;signal q_s:std_logic_ve

10、ctor(3 downto 0);signal tmp:integer range 0 to 2;signal low1,mid1,high1:std_logic_vector(3 downto 0);beginu1:notetabs port map(clk=clk4Hz,toneindex=toneindex);u2:tonetaba port map(index=toneindex,tone=tone,low=low1,mid=mid1,high=high1);u3:speakera port map(clk=clk4MHz,tone=tone,spks=spk); process(cl

11、k) begin if (clkevent and clk=1)then tmp=tmp+1;end if ; end process;process(tmp)begin if tmp=0 then q_s=low1; sel=001;elsif tmp=1 then q_s=mid1; sel=010;elsif tmp=2 then q_s=high1; selsmsmsmsmsmsmsmsmsmsmsm=;end case;end process;end;音樂(lè)節(jié)拍和音調(diào)發(fā)生器(NoteTabs.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;EN

12、TITY NoteTabs ISPORT (clk:IN STD_LOGIC; ToneIndex : OUT integer range 0 to 15);END;ARCHITECTURE one OF NoteTabs ISSIGNAL Counter :integer range 0 to 138;BEGINCNT8 :PROCESS(clk)BEGIN IF Counter=138 THEN Counter = 0; ELSIF clkEVENT AND clk = 1 THEN Counter toneindextoneindextoneindextoneindextoneindex

13、toneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindexton

14、eindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextonein

15、dextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindex

16、toneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindexton

17、eindexnull; end case;end process;END;簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查表電路(ToneTaba.VHD)library ieee; use ieee.std_logic_1164.all;entity tonetaba isport( index:in integer range 0 to 15; low:out std_logic_vector(3 downto 0); mid:out std_logic_vector(3 downto 0); high:out std_logic_vector(3 downto 0); tone:out integer rang

18、e 0 to 16#1FFF#);end;architecture one of tonetaba isbegin search:process(index) begin case index is when 0=tone=8191;low=0000;mid=0000;hightone=2124;low=0011;mid=0000;hightone=3089;low=0101;mid=0000;hightone=3646;low=0110;mid=0000;hightone=4141;low=0111;mid=0000;hightone=4369;low=0000;mid=0001;hight

19、one=4786;low=0000;mid=0010;hightone=5157;low=0000;mid=0011;hightone=5640;low=0000;mid=0101;hightone=5918;low=0000;mid=0110;hightone=6280;low=0000;mid=0000;highnull; end case;end process;end;數(shù)控分頻與演奏發(fā)生器(Speakera.VHD)library ieee;use ieee.std_logic_1164.all;entity speakera isPORT (clk : IN STD_LOGIC; T

20、one : IN integer range 0 to 16#1FFF#; SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speakera ISSIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGIN DivideCLK : PROCESS(clk) VARIABLE Count4 : integer range 0 to 15 ; BEGIN PreCLK 13 THEN PreCLK = 1; Count4 := 0; ELSIF clkEVENT AND clk = 1 THEN Count4 := Count4 + 1; END IF;END PROCESS;GenSpkS : PROC

溫馨提示

  • 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)論