FPGA设计简易电子琴

上传人:汽*** 文档编号:563640717 上传时间:2022-08-13 格式:DOCX 页数:8 大小:160.88KB
返回 下载 相关 举报
FPGA设计简易电子琴_第1页
第1页 / 共8页
FPGA设计简易电子琴_第2页
第2页 / 共8页
FPGA设计简易电子琴_第3页
第3页 / 共8页
FPGA设计简易电子琴_第4页
第4页 / 共8页
FPGA设计简易电子琴_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《FPGA设计简易电子琴》由会员分享,可在线阅读,更多相关《FPGA设计简易电子琴(8页珍藏版)》请在金锄头文库上搜索。

1、简易电子琴电路设计、设计要求:(1) 设计一个简易电子琴。 利用实验箱的脉冲源产生1, 2, 3,共7个或14个音阶信号。(3) 用指示灯显示节拍。(4) 能产生颤音效果。、原理说明: 简易电子琴实现自动播放和手动弹奏两种模式,由一个开头选择。自动 播放功能可以预置多首乐曲, 可以通过手动选择, 本设计预置了两首乐曲 梁 祝和两只老虎。手动弹奏设置了 7 个按键做琴键,分别对应 7 个音阶。系统由 8个模块组成,图 1 是顶层设计文件,其内部有 7 个功能模块: Speakera.v例 2)和 ToneTaba.v 例 3), NoteTabs.v 例 4), div_27.v, div-50

2、.v, Keyboard.v,Dir.v。模块ToneTaba音阶发生器,当4位发声控制输入Index中某一位为高电 平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的LED显示,音阶越高,LED亮的 数目越多。模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的 加法计数器构成,当模块 Speakera由端口 Tone获得一个2进制数后,将以此 值为计数器的预置数, 对端口 Clk12MHZ 输入的频率进行分频, 之后由 Spkout 向扬声器输出发声。模块NoteTabs用于产生节拍控制(Index数据存留时间)

3、和音阶选择信号, 即在NoteTabs模块放置两个乐曲曲谱真值表,通过 song来选择播放的音乐, 00代表复位, 01选乐曲梁祝 , 10选两只老虎,由一个计数器的计数值 来控制此真值表的输出, 而由此计数器的计数时钟信号作为乐曲节拍控制信号, 从而可以设计出一个纯硬件的乐曲自动演奏电路。模块 div-27 和 div_50 是分频模块,通过计数的方式进行分频。 div_27 是 由板上27M时钟分频产生4Hz的频率用于节拍控制,div_50是板上50M时钟 产生12.5MHz用于Sperkera模块。模块Keyboard是键盘输入模块,检测到一个按键按下,输出一个对应 的按键值。模块Dir

4、是模式选择模块,用于选择系统自动播放模式和键盘输入模式 当Dir为1时,为键盘输入模式,当Dir为0时为自动播放模式。图1硬件电子琴电路结构顶层模块说明:时钟模块为数控分频器和节拍发生器提供基准时钟;当 Dir 选择键盘输入时,通过按键输入得到按键编码,再经发声模块输出相应的频率的 矩形波到蜂鸣器发出相应的琴音;当 Dir选择自动播放时,系统自动播放预置的 乐曲,并通过开关来选择预置的曲目,系统将预置的乐曲编码经过节拍发生器输 入到发声模块中发出相应的乐曲。三、电路与仿真1、顶层电路图Verilog 代码:module son ger(Clk_50M HZ, Clk_27MHZ,Led,Spk

5、out,so ng,Dir1,keyboard);in putin put1:0in put6:0 output11:0 outputClk_50MHZ,Clk_27MHZ,Dir1;/Dir = 1,手动弹奏song;/Choose song,00:clear,01:梁祝,10:两只老虎keyboard;Led;Spkout;wire10:0 Tone;wire3:0 Toneln dex,music,key in put,Dirout;wire Q1,Q2;/模块例化NoteTabs u0( .CIk(Q2), .song(song), .Tonelndex(Tonelndex);Ton

6、eTaba u1( .In dex(Dirout), .Code(Led),.Ton e(T one);Speakera u2( .Clk(Q1), .Tone(Tone), .SpkS(Spkout);div_50u3( .inclk2(Clk_50MHZ),.outclk2(Q1);div_27u4( .inclk1(Clk_27MHZ),.outclk1(Q2);Keyboard u5( .key(keyboard), .keyout(key in put);.Dirout(Dirout);Diru6( .Dir(Dir1), .music(T oneln dex), .keyboard

7、(key in put), en dmodule仿真图:tfO 4 ini# Jikxjn o 3& 6 titn ma iia t* a smp KiMO ItaMdl JWF| 1 4CU_EUIK13DirlS和hqrtul ?1Htij-J012、Sperkera Verilog代码: module Speakera(Clk,T on e,SpkS);in put Clk;in put1O:O Tone;output SpkS;reg PreClk;reg FullSpkS;reg3:0 Cou nt4=O;reg10:0Cou nt11=O;reg Cou nt2=0;reg Spk

8、S;/12Mmz -1Mhzalways(posedge Clk)beginif(Cou nt411)beg in PreClk=1b1; Cou nt4=1;endelse begi nPreClk=1bO;Cou nt4=Cou nt4+1;endend/according to Tone,fininsh the right number coun teralways(posedge PreClk)beg inif(Cou nt11=11h7FF)begi n/11111111111Cou nt11=To ne;FullSpkS=1b1;endelse begi nCou nt11=Cou

9、 nt11+1;FullSpkS=0;endend/double cycle ,get right frequency, and itsratio :50:50always(posedge FullSpkS)beg inCou nt2=Cou nt2;en dmoduleif(Cou nt2=1b1)SpkS=1b1;else SpkS=1b0;end功能仿真波形:3、ToneTaba Verilog代码:module Ton eTaba (In dex,Code,T on e); input3:0 Index;output11:0 Code;output10:0 Tone;reg11:0 C

10、ode;reg10:0 Tone;alwaysbegincase(I ndex)4b0000 :begin Tone=11b11111111111;Code=12b000000000000;end/20474b0001 :begin Ton e=11b01100000101;Code=12b000000000001;e nd/7734d0010 :begin Tone=11b01110010000;Code=12b000000000011;end/9124d0011 :begin Ton e=11b10000001100;Code=12b000000000111;e nd/10364d0101

11、 :begin Ton e=11b10010101101;Code=12b000000001111;e nd/11974d0110 :begin Tone=11b10100001010;Code=12b000000011111;end/12904d0111 :begin To ne=11b10101011100;Code=12b000000111111;e nd/1372;4d1000 :begin To ne=11b10110000010;Code=12b000001111111;e nd/1410;4d1001 :begin Ton e=11b10111001000;Code=12b000

12、011111111;e nd/1480;4d1010 :begin Ton e=11b11000000110;Code=12b000111111111;e nd/1542;4d1100 :begin Tone=11b11001010110;Code=12b001111111111;end/1622;4d1101 :begin To ne=11b11010000100;Code=12b011111111111;e nd/1668;4d1111 :begin To ne=11b11011000000;Code 12.5MHZmodule div_50(i nclk2,outclk2);in put

13、in clk2;outputoutclk2;regoutclk2;reg5:0 count;always(posedge in clk2)beginif(co unt = 3)count = 0;elsecount = count + 1;endalways(co unt)beginif(co unt = 3)outclk2 = 1;elseoutclk2 4HZmodule div_27( in clk1,outclk1);in putin clk1;outputoutclk1;regoutclk1;reg25:0 count;always(posedge in clk1)beginif(cou nt = 6749999)/if(co unt = 99)count = 0;elsecount = count + 1;endalways(co unt)beginif(cou nt = 6749999)/if(co unt = 99)outclk1 = 1;elseoutclk1 t ETU vuc JL1 1口页回DDL niillu.i t .tni ILHlit1|iTE111 ji|!L /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 文学论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号