- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
梁祝基于Verilog HDL的演奏设计
设计题目:“梁祝乐曲发生器”
一、??????? 设计任务及要求:
利用EDA/SOPC实验开发平台提供的16*16点阵LED以及EP2C35核心板,实现“梁祝”乐曲发生器。
1、查阅相关资料,明确设计步骤;
2、采用Verilog HDL编程语言设计程序;
3、能够按照设定节拍(每拍持续1s)顺畅的播放“梁祝”乐曲并且听着基本无错;
4、? 扩张要求:自主设计(如快放、倒放、换歌等)。
二、??????? 设计原理及方案
乐曲播放器的基本原理是,一个音符对应一个频率信号。频率的高低决定了音调的高低。音乐的十二个平均率规定:每两个八度音之间的频率相差一倍。在两个八度音之间又可以分为十二个半音,每两个半音的频率比为2.另外,音名A(简谱中的低音6)的频率为440HZ,音名B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率,;利用高低音如下关系可得下表:
低8度音:基本音频率/2 ,? 例如低音1的频率为523/2=261.5;
高8度音:基本音频率×2,例如高音1的频率为523×2=1046
?
音符与频率的对应关系如下
音名 频率(Hz) 音名 频率(Hz) 音名 频率(Hz) 低音1 261.5 中音1 523 高音1 1046 低音2 293.5 中音2 587 高音2 1174 低音3 329.5 中音3 659 高音3 1318 低音4 349 中音4 698 高音4 1396 低音5 392 中音5 784 高音5 1568 低音6 440 中音6 880 高音6 1760 低音7 499 中音7 998 高音7 1996 ?
各音阶频率对应的分频比及预置数
音名 分频比 预置数 音名 分频比 预置数 音名 分频比 预置数 低音1 1912 135 中音1 956 1091 高音1 478 1569 低音2 1704 343 中音2 852 1195 高音2 426 1621 低音3 1517 530 中音3 759 1288 高音3 379 1668 低音4 1433 614 中音4 716 1331 高音4 358 1689 低音5 1276 771 中音5 638 1409 高音5 319 1728 低音6 1136 911 中音6 568 1479 高音6 284 1763 低音7 1002 1045 中音7 501 1546 高音7 250 1797 对于乐曲中的休止符,只要将分频系数设为0,即初始值为1047,此时扬声器不发音。
从上表中可以看出,最大分频系数为1912,所以采用11位二进制计数器分频可满足需要。对于不同的分频系数,只要加载不同的预置数即可。采用加载预置数实现分频的方法比采用反馈复零法节约资源,实现起来也容易一些。
音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。本设计中将全音的持续时间设为1s,提供的4Hz的时钟频率即可产生四分音符的时长。控制音长通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间也就越长。每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,如二分音符,在记谱时将该音名联系记录两次即可。对照以上规则可编制乐谱的程序。
为了减小输出的偶次谐波分量,最后输出到扬声器上的波形应为对称方波,因此在扬声器之前有一个二分频的分频器。
为了使演奏能循环进行,需另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏!
?????? 综上所述编制“梁祝”乐曲发生器需要编制分频器、11为计数器、乐谱等部分,综合以上各功能即可实现乐曲发生器。
三、??????? 电路设计与实现
? 电路原理图如下:
?
1、外部输入脉冲信号时钟源(50Mhz)经分频器输出4Hz、1Mhz的脉冲信号,分别供控制器和受控器使用。
2、控制器根据乐曲的节拍产生受控器所需要的预置值,乐曲的一拍持续1s。
3、受控器在1MHz时钟信号的控制下从11位预置值开始做加1计数。输出并进行二分频将输出信号分频。
4、管脚对应表
信号名称 对应FPGA管脚名 说明 50MHz L1 基准时钟 OU H14 扩张接口 JP3-80 程序实现如下:
module? song (clk,speaker);
input? clk;
output speaker;
reg[3:0] high,med,low;
reg[10:0] divider,origin;
reg[7:0] counter;
reg?? speaker;
reg[5:0]? count1;?
reg[23:0] count2;
reg clk_1mhz,clk_4hz;????
wire? carry;
?
always@(
文档评论(0)