版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)電實(shí)驗(yàn)報(bào)告題 目 基于FPGA的八音符電子琴電路設(shè)計(jì) 時(shí) 間 2011年6月25日 第一章 實(shí)驗(yàn)任務(wù)與原理一、實(shí)現(xiàn)功能基于FPGA開發(fā)辦設(shè)計(jì)一個(gè)八音符電子琴,由鍵盤輸入控制音響或自動(dòng)演奏。用戶可以將自己編制的樂(lè)曲存入電子琴,演奏時(shí)可以選擇鍵盤輸入樂(lè)曲或者自動(dòng)演奏已存入的樂(lè)曲。二、原理闡述1、系統(tǒng)設(shè)計(jì)方案:采用VHDL語(yǔ)言編程來(lái)實(shí)現(xiàn)電子琴的各項(xiàng)功能。系統(tǒng)主要由電子琴發(fā)聲模塊、選擇控制模塊和儲(chǔ)存器模塊組成。分頻器NOTETABSTONETABASPEAKERA揚(yáng)聲器譯碼器 八音符電子琴設(shè)計(jì)總體框圖該系統(tǒng)由三個(gè)模塊:Songer、Div和SEG7(7段譯碼器)組成。(1) Songer模塊:此模塊
2、包括3個(gè)小模塊,分別是NoteTabs模塊,ToneTab模塊和Speakera模塊。此外,還需建立一個(gè)名為“music”的LPM_ROM模塊與NoteTabs模塊連接。(2) NoteTabs模塊:該模塊的功能就是定義音符數(shù)據(jù)ROM“music”隨著該模塊中的計(jì)數(shù)器控制時(shí)鐘頻率速率作加法計(jì)數(shù)時(shí),即地址值遞增時(shí),音符數(shù)據(jù)ROM中的音符數(shù)據(jù)。將從ROM中通過(guò)ToneIndex3.0端口輸向ToneTaba模塊,演奏采茶舞曲。(3) ToneTaba模塊:是樂(lè)曲簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查找表電路,其中設(shè)置了樂(lè)曲的全部音符所對(duì)應(yīng)的分頻置數(shù),每一音符的停留時(shí)間由音樂(lè)節(jié)拍和音調(diào)發(fā)生器模塊NoteTabs的
3、CLK的輸入頻率決定,這些值由對(duì)應(yīng)于ToneTaba的4位輸入值Index3.0確定,最多有16種可選值。輸向ToneTaba中Index3.0的值ToneIndex3.0的輸出值與持續(xù)的時(shí)間由模塊NoteTabs決定。(4) Speakera模塊:是一個(gè)數(shù)控分頻器,音符的頻率可由此模塊獲得。由CLK端輸入一具有較高頻率的信號(hào),通過(guò)Speakera分頻后由SPKOUT輸出。由于直接從數(shù)控分頻器中出來(lái)的輸出信號(hào)是脈寬極窄的脈沖式信號(hào)。為了利用驅(qū)動(dòng)揚(yáng)聲器,需加一個(gè)D觸發(fā)器以均衡其占空比,頻率將是原來(lái)的1/2。Speakera對(duì)CLK輸入信號(hào)的分頻比由預(yù)置數(shù)Tone決定。SPKOUT的輸出頻率將決定
4、每一音符的音調(diào)。(5) Div模塊:由于所使用的硬件設(shè)備不能滿足設(shè)計(jì)所需要的兩個(gè)CLK輸出 的頻率,所以使用一個(gè)分頻器來(lái)實(shí)現(xiàn)把一個(gè)50MHz的晶體振蕩頻率分成一個(gè)12MHz,一個(gè)8Hz兩個(gè)分頻率,再把兩個(gè)頻率分別給所需的兩個(gè)模塊。(6)EG7模塊:SEG7 模塊是一個(gè)七段譯碼器,作用是在硬件上顯示音頻的高低,用0到7分別對(duì)應(yīng)空節(jié)拍do、ri、mi、fa、suo、la、xi,高音時(shí),LED燈亮,數(shù)碼管顯示對(duì)應(yīng)數(shù)字。2、發(fā)音原理:(1) 樂(lè)曲演奏的原理組成樂(lè)曲的每個(gè)音符的頻率值(音調(diào))及其持續(xù)時(shí)間(音長(zhǎng))是樂(lè)曲能連續(xù)演奏所需的兩個(gè)基本數(shù)據(jù),因此只要控制輸出到揚(yáng)聲器的激勵(lì)信號(hào)的頻率的高低和持續(xù)時(shí)間,
5、就可以使揚(yáng)聲器發(fā)出連續(xù)的樂(lè)曲聲。(2)音調(diào)的控制: 頻率的高低決定了音調(diào)的高低。(4)基準(zhǔn)頻率f0的選取 所有不同頻率的信號(hào)都是從同一個(gè)基準(zhǔn)頻率f0分頻而得到的。由于音節(jié)頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),因此必須將計(jì)算所得的分頻數(shù)四舍五入取整。若基準(zhǔn)頻率過(guò)高,則分頻比太小,取整后誤差較大。若基準(zhǔn)頻率過(guò)高,雖然誤差減小,但分頻數(shù)變大。綜合這兩方面因素,在盡量減小頻率誤差的前提下取合適的基準(zhǔn)頻率,在此取f0=12MHz。(5)分頻系數(shù),二進(jìn)制計(jì)數(shù)器計(jì)數(shù)的容量N和預(yù)置數(shù)的選取 分頻系數(shù)A=f0/音名頻率分頻系數(shù)n=f0/音名頻率/2N=MAX分頻系數(shù)n 由表1可得最大分頻系數(shù)為1274,因此N
6、=2048為2的11次方。因此二進(jìn)制計(jì)數(shù)器設(shè)為11位二進(jìn)制加法計(jì)數(shù)器,其計(jì)數(shù)容量為2048,計(jì)數(shù)的最大值為2047。預(yù)置數(shù)=N-分頻系數(shù)n表1為各音階的頻率、對(duì)應(yīng)的分頻系數(shù)及預(yù)置數(shù):(6)音長(zhǎng)的控制:音符的持續(xù)時(shí)間須根據(jù)樂(lè)曲的速度及每個(gè)音符的節(jié)拍數(shù)來(lái)確定的。采茶舞曲中最短的音符為四分音符,如果全音符的持續(xù)時(shí)間為1s,則四分音符的持續(xù)時(shí)間為0.25s,二分音符持續(xù)的時(shí)間為0.5s等等,只需再提供一個(gè)4Hz的時(shí)鐘頻率。每來(lái)一個(gè)脈沖計(jì)一次數(shù),每一計(jì)數(shù)值的停留時(shí)間為0.25s,即要輸入一個(gè)全音符時(shí)需要計(jì)四次數(shù)才行,則應(yīng)在Rom表格中輸出相應(yīng)音符四次,表示一個(gè)全音符的持續(xù)時(shí)間。第二章 FPGA模塊程序設(shè)
7、計(jì)與仿真1、Songer模塊Songer模塊由三個(gè)模塊組成:NoteTabs模塊,ToneTaba模塊和Speakera模塊。Notetabs模塊類似于彈琴人的手指,Tonetaba類似于琴鍵,Speakera類似于琴弦或音調(diào)發(fā)生器。(1)NoteTabs模塊:原理:在這個(gè)模塊中設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器,作為音符數(shù)據(jù)ROM的地址發(fā)生器。這個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率選為4HZ,即每一計(jì)數(shù)值的停留時(shí)間為0.25秒,當(dāng)全音符設(shè)為1秒時(shí),4分音符持續(xù)時(shí)間為0.25s, 2分音符持續(xù)的時(shí)間為0.5s等等。每來(lái)一個(gè)脈沖計(jì)一次數(shù),每一計(jì)數(shù)值的停留時(shí)間為0.25s,即要輸入一個(gè)全音符時(shí)需要計(jì)數(shù)4次才行,則應(yīng)在Rom
8、表格中輸出相應(yīng)音符四次,表示一個(gè)全音符的持續(xù)時(shí)間,要輸入一個(gè)2分音符則需要計(jì)數(shù)2次,依次類推。程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee。Std_logic_arith.all;entity notetabs is port(clk1:in std_logic; toneindex:out std_logic_vector(3 downto 0);End notetabs;architecture one of notetabs iscomponent music po
9、rt(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);begincnt8:process(clk1,counter) begin if counter=336 then counter<="00000000" elsif(clk1'event and clk1='1')then coun
10、ter<=counter+1; end if; end process;u1:music port map(address=>counter,q=>toneindex,clock=>clk1);end;NoteTabs模塊波形仿真圖:(注:每來(lái)一個(gè)時(shí)鐘clk,輸出一個(gè)相應(yīng)的數(shù),每個(gè)音符的拍子不一樣所記次數(shù)也不一樣)圖5 Notetabs的波形仿真圖采茶舞曲簡(jiǎn)譜如圖6圖6 采茶舞曲簡(jiǎn)譜下表7是Rom表格:(即為此程序中調(diào)用的music模塊)。表7 Rom表格(2)ToneTaba模塊:原理:ToneTaba是樂(lè)曲簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查表電路。音符的持續(xù)時(shí)間需要根據(jù)樂(lè)曲的
11、速度及每個(gè)音符的節(jié)拍數(shù)來(lái)確定,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ù),共16 個(gè),每一音符的停留時(shí)間由音樂(lè)節(jié)拍和音調(diào)發(fā)生器模塊Notetabs的clk的輸入頻決定,在此為4Hz。這16個(gè)值得輸出由對(duì)應(yīng)于Tonetaba的4位輸入值Index3.0確定。輸向Tonetaba中Index3.0的值,ToneIndex3.0的輸出值與持續(xù)的時(shí)間由模塊Notetabs決定。程序library ieee;u
12、se ieee.std_logic_1164.all;use ieee,std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ToneTaba isport( 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 ToneTaba;architecture one of ToneTaba i
13、s beginSearch: process(Index)begincase Index is When "0001"=>tone<="01100000101"code<="0001"high<='0'-773When "0010"=>tone<="01110010000"code<="0010"high<='0'-912When others => null; end case;end p
14、rocess;end;(注:每一個(gè)index的值都對(duì)應(yīng)一個(gè)code,tone值,index的值從0000到0111對(duì)應(yīng)的,high為低電,從1000到1111對(duì)應(yīng)的high為高電。)ToneTaba模塊波形仿真圖如圖10:圖10 Tonetaba的波形仿真圖(3)Speakera(數(shù)控分頻器)模塊:原理:數(shù)控分頻器的功能是當(dāng)在輸入端給定不同的輸入數(shù)時(shí),將對(duì)輸入的時(shí)鐘信號(hào)有不同的分頻比,數(shù)控分頻器是用計(jì)數(shù)值可并行預(yù)置的加法計(jì)數(shù)器來(lái)完成的。在此,音符的頻率可由數(shù)控分頻器Speakera獲得。由其clk端輸入一具有較高頻率的信號(hào),通過(guò)Speakera分頻后由 Spkout 輸出,由于直接從數(shù)控分頻器
15、中出來(lái)的輸出信號(hào)是脈寬極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)揚(yáng)聲器,需加一個(gè)D觸發(fā)器以均衡其占空比,但這時(shí)的頻率將是原來(lái)的1/2。Speakera對(duì)clk輸入信號(hào)的分頻比由11位預(yù)置數(shù)Tone10.0決定。Spkout 的輸出頻率將決定每一音符的音調(diào),這樣分頻計(jì)數(shù)器的預(yù)置值Tone10.0與Spkout的輸出頻率就有了對(duì)應(yīng)關(guān)系。程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity speakera is port(clk2:in s
16、td_logic; tone:in std_logic_vector(10 downto 0); spks:out std_logic);end speakera;architecture one of speakera is signal preclk,fullspks:std_logic;begin divideclk:process(clk2) variable count4:std_logic_vector(3 downto 0); begin preclk<='0' if count4>11 then preclk<='1' coun
17、t4:="0000" elsif clk2'event and clk2='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'
18、; 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
19、if; end process;end;Speakera(數(shù)控分頻器)模塊仿真波形如圖12:圖12 Speakera的波形仿真圖2、Div模塊:原理:由于我們所使用的硬件設(shè)備不能滿足我們所需要的兩個(gè)CLK輸出的頻率,所以我們使用一個(gè)分頻器來(lái)實(shí)現(xiàn)把一個(gè)50MHz的晶體振蕩頻率分成一個(gè)12MHz,一個(gè)8Hz兩個(gè)分頻率,再把兩個(gè)頻率分別給所需的兩個(gè)模塊。程序:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;ENTITY div IS PORT(
20、clk :IN STD_LOGIC; CLK12MHz,CLK8Hz: OUT std_logic);END div;ARCHITECTURE one of div is begin u1:process(clk) variable cnt:integer range 0 to 2; variable tmp:std_logic; begin if(clk'event and clk='1')then if cnt>=1 then cnt:=0; tmp:=not tmp; else cnt:=cnt+1; end if; end if; CLK12MHz<
21、=tmp; end process u1; u2:process(clk) variable cnt:integer range 0 to 3125000; variable tmp:std_logic; begin if(clk'event and clk='1')then if cnt>=3124999 then cnt:=0; tmp:=not tmp; else cnt:=cnt+1; end if; end if; CLK8Hz<=tmp; end process u2;end one;Div模塊波形仿真圖如圖14: 圖14 Div的波形仿真圖(注
22、:由50MHz的時(shí)鐘信號(hào)分頻得到CLK12MHz,CLK12MHz)3、SEG7模塊:原理: SEG7 模塊是一個(gè)七段譯碼器,作用是在硬件上顯示音頻的高低,用0到7分別對(duì)應(yīng)空節(jié)拍do、ri、mi、fa、suo、la、xi,高音時(shí),LED燈亮,數(shù)碼管顯示對(duì)應(yīng)數(shù)字。VGA為0010。 程序:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee std_logic_arith.all;ENTITY SEG7 IS PORT(num:IN std_logic_vector(3 downto
23、0); A:OUT std_logic; B:OUT std_logic; C:OUT std_logic; D:OUT std_logic; E:OUT std_logic; F:OUT std_logic; G:OUT std_logic; DP:OUT std_logic );END SEG7;ARCHITECTURE fun OF SEG7 ISsignal led:std_logic_vector(6 downto 0);BEGIN A<=led(6); B<=led(5); C<=led(4); D<=led(3); E<=led(2); F<=
24、led(1); G<=led(0); DP<='0' led<="1111110"when num="0000"else "0110000"when num="0001"else "1101101"when num="0010"else "1111001"when num="0011"else "0110011"when num="0100"else "
25、1011011"when num="0101"else "1011111"when num="0110"else "1110000"when num="0111"else "1111111"when num="1000"else "1111011"when num="1001"else "1110111"when num="1010"else "001111
26、1"when num="1011"else "1001110"when num="1100"else "0111101"when num="1101"else "1001111"when num="1110"else "1000111"when num="1111"END fun;SEG7模塊波形仿真如圖17: 圖17 Seg7的波形仿真圖(0000-1000)( 注:當(dāng)nums輸入0000-1000時(shí),A
27、-H輸出0-8的相應(yīng)值) 圖17 Seg7的波形仿真圖1001-1111)(nums輸入1001-1111時(shí),A-H輸出916的相應(yīng)值)4、 總體設(shè)計(jì)電路圖(1)頂層設(shè)計(jì)的電路原理圖如圖18:圖18 頂層設(shè)計(jì)的電路原理圖原理:Notetabs中按Rom表格中已填好的樂(lè)曲輸出一譜子,轉(zhuǎn)化為相應(yīng)的二進(jìn)制數(shù)輸出,再將輸出的二進(jìn)制數(shù)輸入Tonetaba中,轉(zhuǎn)化為相應(yīng)的預(yù)置數(shù)輸入數(shù)控分頻器Speakera中進(jìn)行分頻并輸出,輸出接揚(yáng)聲器用于發(fā)音。從Notetabs中輸出的二進(jìn)制數(shù)也將對(duì)應(yīng)于Tonetaba中的二進(jìn)制數(shù),輸出接數(shù)碼顯示管用于顯示所發(fā)音的簡(jiǎn)碼,還有一個(gè)高低音的輸出連接一個(gè)Led燈,燈亮表示高音
28、,燈暗表示低音。Songer模塊就是頂層設(shè)計(jì)文件,所有的模塊都由它調(diào)用。Songer模塊的程序?yàn)?library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity songer is port(clk8HZ,clk12MHZ:in std_logic; num:out std_logic_vector(3 downto 0); high1:out std_logic; spkout:out std_logic);end entity songer;architecture one of songer i
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國(guó)集群通信系統(tǒng)行業(yè)發(fā)展?fàn)顩r及投資商業(yè)模式分析報(bào)告版
- 2024年房地產(chǎn)新紀(jì)元:分銷合作協(xié)議
- 2024年技術(shù)研發(fā)合作框架協(xié)議
- 2024年新個(gè)人租車合同協(xié)議
- 2024年房產(chǎn)共有權(quán)轉(zhuǎn)換及分配協(xié)議
- 2024年拍賣會(huì)保密協(xié)議
- 老年人居住環(huán)境疫情防控應(yīng)急預(yù)案
- 工業(yè)園區(qū)高溫作業(yè)風(fēng)險(xiǎn)防范方案
- 智能家居工程咨詢服務(wù)合同
- 校外學(xué)習(xí)小組安全協(xié)議預(yù)案
- 安保方案模板
- 體育室內(nèi)課《籃球ppt課件》
- 安裝培訓(xùn)方案
- 2023邊緣物聯(lián)代理技術(shù)要求
- 航空航天類專業(yè)大學(xué)生職業(yè)生涯規(guī)劃書
- 餐廳小票打印模板
- 腹脹護(hù)理課件
- 水稻栽培技術(shù)-水稻常規(guī)栽培技術(shù)
- 常見(jiàn)營(yíng)養(yǎng)相關(guān)慢性疾病的營(yíng)養(yǎng)指導(dǎo)
- 標(biāo)準(zhǔn)報(bào)價(jià)單模板(二)
- 《mc入門教程》課件
評(píng)論
0/150
提交評(píng)論