FPGA設(shè)計(jì)簡易電子琴_第1頁
FPGA設(shè)計(jì)簡易電子琴_第2頁
FPGA設(shè)計(jì)簡易電子琴_第3頁
FPGA設(shè)計(jì)簡易電子琴_第4頁
FPGA設(shè)計(jì)簡易電子琴_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

簡易電子琴電路設(shè)計(jì)一、設(shè)計(jì)要求:(1)設(shè)計(jì)一個(gè)簡易電子琴。(2)利用實(shí)驗(yàn)箱的脈沖源產(chǎn)生1,2,3,……共7個(gè)或14個(gè)音階信號。(3)用指示燈顯示節(jié)拍。(4)能產(chǎn)生顫音效果。二、原理說明:簡易電子琴實(shí)現(xiàn)自動播放和手動彈奏兩種模式,由一個(gè)開頭選擇。自動播放功能可以預(yù)置多首樂曲,可以通過手動選擇,本設(shè)計(jì)預(yù)置了兩首樂曲《梁?!泛汀秲芍焕匣ⅰ?。手動彈奏設(shè)置了7個(gè)按鍵做琴鍵,分別對應(yīng)7個(gè)音階。系統(tǒng)由8個(gè)模塊組成,圖1是頂層設(shè)計(jì)文件,其內(nèi)部有7個(gè)功能模塊:Speakera.v(例2)和ToneTaba.v(例3),NoteTabs.v(例4),div_27.v,div-50.v,Keyboard.v,Dir.v。模塊ToneTaba音階發(fā)生器,當(dāng)4位發(fā)聲控制輸入Index中某一位為高電平時(shí),則對應(yīng)某一音階的數(shù)值將從端口Tone輸出,作為獲得該音階的分頻預(yù)置值;同時(shí)由Code輸出對應(yīng)該音階簡譜的LED顯示,音階越高,LED亮的數(shù)目越多。模塊Speakera中的主要電路是一個(gè)數(shù)控分頻器,它由一個(gè)初值可預(yù)置的加法計(jì)數(shù)器構(gòu)成,當(dāng)模塊Speakera由端口Tone獲得一個(gè)2進(jìn)制數(shù)后,將以此值為計(jì)數(shù)器的預(yù)置數(shù),對端口Clk12MHZ輸入的頻率進(jìn)行分頻,之后由Spkout向揚(yáng)聲器輸出發(fā)聲。模塊NoteTabs用于產(chǎn)生節(jié)拍控制(Index數(shù)據(jù)存留時(shí)間)和音階選擇信號,即在NoteTabs模塊放置兩個(gè)樂曲曲譜真值表,通過song來選擇播放的音樂,00代表復(fù)位,01選樂曲《梁?!罚?0選《兩只老虎》,由一個(gè)計(jì)數(shù)器的計(jì)數(shù)值來控制此真值表的輸出,而由此計(jì)數(shù)器的計(jì)數(shù)時(shí)鐘信號作為樂曲節(jié)拍控制信號,從而可以設(shè)計(jì)出一個(gè)純硬件的樂曲自動演奏電路。模塊div-27和div_50是分頻模塊,通過計(jì)數(shù)的方式進(jìn)行分頻。div_27是由板上27M時(shí)鐘分頻產(chǎn)生4Hz的頻率用于節(jié)拍控制,div_50是板上50M時(shí)鐘產(chǎn)生12.5MHz用于Sperkera模塊。模塊Keyboard是鍵盤輸入模塊,檢測到一個(gè)按鍵按下,輸出一個(gè)對應(yīng)的按鍵值。模塊Dir是模式選擇模塊,用于選擇系統(tǒng)自動播放模式和鍵盤輸入模式。當(dāng)Dir為1時(shí),為鍵盤輸入模式,當(dāng)Dir為0時(shí)為自動播放模式。圖1硬件電子琴電路結(jié)構(gòu)頂層模塊說明:時(shí)鐘模塊為數(shù)控分頻器和節(jié)拍發(fā)生器提供基準(zhǔn)時(shí)鐘;當(dāng)Dir選擇鍵盤輸入時(shí),通過按鍵輸入得到按鍵編碼,再經(jīng)發(fā)聲模塊輸出相應(yīng)的頻率的矩形波到蜂鳴器發(fā)出相應(yīng)的琴音;當(dāng)Dir選擇自動播放時(shí),系統(tǒng)自動播放預(yù)置的樂曲,并通過開關(guān)來選擇預(yù)置的曲目,系統(tǒng)將預(yù)置的樂曲編碼經(jīng)過節(jié)拍發(fā)生器輸入到發(fā)聲模塊中發(fā)出相應(yīng)的樂曲。三、電路與仿真1、頂層電路圖Verilog代碼:modulesonger(Clk_50MHZ,Clk_27MHZ,Led,Spkout,song,Dir1,keyboard);input Clk_50MHZ,Clk_27MHZ,Dir1; //Dir=1,手動彈奏input[1:0] song; //Choosesong,00:clear,01:梁祝,10:兩只老虎input[6:0] keyboard;output[11:0] Led;output Spkout;wire[10:0] Tone;wire[3:0] ToneIndex,music,keyinput,Dirout;wire Q1,Q2;//模塊例化NoteTabs u0( .Clk(Q2), .song(song), .ToneIndex(ToneIndex) );ToneTaba u1( .Index(Dirout), .Code(Led), .Tone(Tone) );Speakera u2( .Clk(Q1), .Tone(Tone), .SpkS(Spkout) );div_50 u3( .inclk2(Clk_50MHZ), .outclk2(Q1) );div_27 u4( .inclk1(Clk_27MHZ), .outclk1(Q2) );Keyboard u5(.key(keyboard), .keyout(keyinput) );Dir u6(.Dir(Dir1), .music(ToneIndex), .keyboard(keyinput), .Dirout(Dirout));endmodule仿真圖:2、SperkeraVerilog代碼:moduleSpeakera(Clk,Tone,SpkS);inputClk;input[10:0]Tone;outputSpkS;regPreClk;regFullSpkS;reg[3:0]Count4=0;reg[10:0]Count11=0;regCount2=0;regSpkS;//12Mmz->1Mhzalways@(posedgeClk) begin if(Count4>11)begin PreClk<=1'b1; Count4<=1; end elsebegin PreClk<=1'b0; Count4<=Count4+1; end end//accordingtoTone,fininshtherightnumbercounteralways@(posedgePreClk)beginif(Count11==11'h7FF)begin//11111111111Count11<=Tone;FullSpkS<=1'b1;endelsebeginCount11<=Count11+1;FullSpkS<=0;endend//doublecycle,getrightfrequency,anditsratio:50:50always@(posedgeFullSpkS)beginCount2<=~Count2;if(Count2==1'b1) SpkS<=1'b1;elseSpkS<=1'b0;endendmodule功能仿真波形:3、ToneTabaVerilog代碼:moduleToneTaba(Index,Code,Tone);input[3:0]Index;output[11:0]Code;output[10:0]Tone;reg[11:0]Code;reg[10:0]Tone;alwaysbegincase(Index)4'b0000:beginTone<=11'b11111111111;Code<=12'b000000000000;end//20474'b0001:beginTone<=11'b01100000101;Code<=12'b000000000001;end//7734'd0010:beginTone<=11'b01110010000;Code<=12'b000000000011;end//9124'd0011:beginTone<=11'b10000001100;Code<=12'b000000000111;end//10364'd0101:beginTone<=11'b10010101101;Code<=12'b000000001111;end//11974'd0110:beginTone<=11'b10100001010;Code<=12'b000000011111;end//12904'd0111:beginTone<=11'b10101011100;Code<=12'b000000111111;end//1372;4'd1000:beginTone<=11'b10110000010;Code<=12'b000001111111;end//1410;4'd1001:beginTone<=11'b10111001000;Code<=12'b000011111111;end//1480;4'd1010:beginTone<=11'b11000000110;Code<=12'b000111111111;end//1542;4'd1100:beginTone<=11'b11001010110;Code<=12'b001111111111;end//1622;4'd1101:beginTone<=11'b11010000100;Code<=12'b011111111111;end//1668;4'd1111:beginTone<=11'b11011000000;Code<=12'b111111111111;end//1728;endcaseendendmodule功能仿真波形:4、時(shí)鐘模塊Verilog代碼://50MHZ--->12.5MHZmodulediv_50(inclk2,outclk2);input inclk2;output outclk2;reg outclk2;reg[5:0] count;always@(posedgeinclk2) begin if(count==3) count<=0; else count<=count+1; endalways@(count) begin if(count==3) outclk2<=1; else outclk2<=0; endendmodule//27M--->4HZmodulediv_27(inclk1,outclk1);input inclk1;output outclk1;reg outclk1;reg[25:0] count;always@(posedgeinclk1) begin if(count==6749999) //if(count==99) count<=0; else count<=count+1; endalways@(count) begin if(count==6749999) //if(count==99) outclk1<=1; else outclk1<=0; endendmodule波形仿真:5、NotaTabsVerilog代碼:moduleNoteTabs(Clk,ToneIndex,song);input Clk;input[1:0] song;output[3:0] ToneIndex;reg[7:0] Counter;reg[3:0] ToneIndex;always@(posedgeClk) begin if(song==00) //Reset Counter<=8'b00000000; elseif(song==01) begin if(Counter>=138)Counter<=0; else Counter<=Counter+8'b1; case(Counter) //梁祝 0:ToneIndex<=4'b0011; 1:ToneIndex<=4'b0011; 2:ToneIndex<=4'b0011; . . . 138:ToneIndex<=4'b0000; default:ToneIndex<=4'b0000; endcase end elseif(song==10) begin if(Counter>=36)Counter<=0; else Counter<=Counter+8'b1; case(Counter)//TwoTiger 0:ToneIndex<=4'b0001;//1 1:ToneIndex<=4'b0010;//2 2:ToneIndex<=4'b0011;//3 . . . 36:ToneIndex<=4'b0000; default:ToneIndex<=4'b0000; endcase end end endmodule功能仿真:6、鍵盤輸入Verilog代碼:moduleKeyboard(key,keyout);input[6:0] key;output[3:0] keyout;reg[3:0] keyout;always begin case(key) 7'b0000001:keyout=4'b0001;//1 7'b0000010:keyout=4'b0010;//2 7'b0000100:keyout=4'b0011;//3 7'b0001000:keyout=4'b0100;//4 7'b0010000:keyout=4'b0101;//5 7'b0100000:keyout=4'b0110;//6 7'b1000000:keyout=4'b0111;//7 default:keyout=4'b0000; endcase endendmodule功能仿真:

7、模式選擇DirVerilog代碼:moduleDir(Dir,music,keyboard,Dirout);input Dir

溫馨提示

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

最新文檔

評論

0/150

提交評論