FPGA设计简易电子琴.docxVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
标题FPGA设计简易电子琴主体介绍本文旨在简化并概述FPGAFieldProgrammableGateArray设计对于电子琴的简单实现FPGA是一种基于单片机和专用集成电路的计算机硬件,主要用于模拟复杂电路的功能,如处理器存储器和电源管理等设计要求1设计一个易于编程和使用的电子琴2利用实验箱的脉冲源产生1,2,3,…共7个或14个音阶信号3使用指示灯显示节拍4能产生颤音效果原理说明1自动播放和手动弹奏两种模式2

简易电子琴电路设计

一、设计要求:

(1)设计一个简易电子琴。

(2)利用实验箱的脉冲源产生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.v,Keyboard.v,Dir.v。

模块ToneTaba音阶发生器,当4位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的LED显示,音阶越高,LED亮的数目越多。

模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speakera由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout向扬声器输出发声。

模块NoteTabs用于产生节拍控制(Index数据存留时间)和音阶选择信号,即在NoteTabs模块放置两个乐曲曲谱真值表,通过song来选择播放的音乐,00代表复位,01选乐曲《梁祝》,10选《两只老虎》,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。

模块div-27和div_50是分频模块,通过计数的方式进行分频。div_27是由板上27M时钟分频产生4Hz的频率用于节拍控制,div_50是板上50M时钟产生12.5MHz用于Sperkera模块。

模块Keyboard是键盘输入模块,检测到一个按键按下,输出一个对应的按键值。

模块Dir是模式选择模块,用于选择系统自动播放模式和键盘输入模式。当Dir为1时,为键盘输入模式,当Dir为0时为自动播放模式。

图1硬件电子琴电路结构

顶层模块说明:时钟模块为数控分频器和节拍发生器提供基准时钟;当Dir选择键盘输入时,通过按键输入得到按键编码,再经发声模块输出相应的频率的矩形波到蜂鸣器发出相应的琴音;当Dir选择自动播放时,系统自动播放预置的乐曲,并通过开关来选择预置的曲目,系统将预置的乐曲编码经过节拍发生器输入到发声模块中发出相应的乐曲。

三、电路与仿真

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;

文档评论(0)

movie + 关注
实名认证
文档贡献者

喜欢分享的作者

1亿VIP精品文档

相关文档