收藏 分销(赏)

梁祝基于Verilog-HDL的演奏设计.doc

上传人:丰**** 文档编号:3884940 上传时间:2024-07-23 格式:DOC 页数:15 大小:63.04KB 下载积分:8 金币
下载 相关 举报
梁祝基于Verilog-HDL的演奏设计.doc_第1页
第1页 / 共15页
梁祝基于Verilog-HDL的演奏设计.doc_第2页
第2页 / 共15页


点击查看更多>>
资源描述
设计题目:“梁祝乐曲发生器” 一、        设计任务及要求: 利用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@(posedge clk)//分频器设计1 begin if(count1<=49) begin count1<=count1+1; clk_1mhz〈=0; end else begin count1<=0; clk_1mhz〈=1; end end   always@(posedge clk)//分频器设计2 begin if(count2〈=12499999) begin count2〈=count2+1; clk_4hz〈=0; end else begin count2<=0; clk_4hz〈=1; end end   assign carry=(divider==2047);   always@(posedge clk_1mhz) begin if(carry) divider=origin;       else divider=divider+1; end   always@(posedge carry) begin       speaker=~speaker;//2分频产生方波信号 end   always@(posedge clk_4hz) begin case({high,med,low})//分频比预置 'b000000000000:origin=2047; ’b000000000001:origin=135; ’b000000000010:origin=343; 'b000000000011:origin=530; 'b000000000100:origin=614; 'b000000000101:origin=771; ’b000000000110:origin=911; ’b000000000111:origin=1045; 'b000000010000:origin=1091; ’b000000100000:origin=1195; ’b000000110000:origin=1288; ’b000001000000:origin=1331; ’b000001010000:origin=1409; 'b000001100000:origin=1479; ’b000001110000:origin=1546; ’b000100000000:origin=1569; ’b001000000000:origin=1621; ’b001100000000:origin=1668; 'b010000000000:origin=1689; ’b010100000000:origin=1728; 'b011000000000:origin=1763; ’b011100000000:origin=1797; endcase end   always @(posedge clk_4hz) begin if(counter==214)  counter〈=0;        //计时,以实现循环演奏 else             counter〈=counter+1; case(counter)                       //记谱                  0:    {high,med,low}〈='b000000000000;//休止符 1:    {high,med,low}〈='b000000000000; 2:    {high,med,low}<='b000001110000;//中音7 3:    {high,med,low}〈=’b000001110000; 4:    {high,med,low}〈=’b000001100000;//中音6 5:    {high,med,low}〈='b000001100000; 6:    {high,med,low}<='b000001110000;//中音7 7:    {high,med,low}〈=’b000001110000; 8:    {high,med,low}<=’b000001010000;//中音5,持续3个时钟节拍 9 :    {high,med,low}〈=’b000001010000; 10:   {high,med,low}〈=’b000001010000; 11:   {high,med,low}<=’b000001100000;//中音6 12:   {high,med,low}〈=’b000001000000;//中音4 13:   {high,med,low}<=’b000001000000; 14:   {high,med,low}<='b000000110000;//中音3 15:   {high,med,low}〈=’b000000110000; 16:   {high,med,low}〈=’b000000100000;//中音2 17:   {high,med,low}〈=’b000000110000;//中音3 18:   {high,med,low}<=’b000001000000;//中音4 19:   {high,med,low}〈='b000000110000;//中音3 20:   {high,med,low}<=’b000001010000;//中音5 21:   {high,med,low}<=’b000001010000; 22:   {high,med,low}〈='b000001010000; 23:   {high,med,low}〈=’b000000110000;//中音3 24:   {high,med,low}〈='b000000100000; 25:   {high,med,low}〈=’b000000110000; 26:   {high,med,low}〈=’b000001010000; 27:   {high,med,low}<='b000000100000; 28:   {high,med,low}〈='b000000110000; 29:   {high,med,low}<='b000001000000; 30:   {high,med,low}〈=’b000000110000; 31:   {high,med,low}<='b000000100000; 32:   {high,med,low}〈='b000000010000;//中音1,持续6个时钟节拍 33:   {high,med,low}〈='b000000010000; 34:   {high,med,low}〈=’b000000010000; 35:   {high,med,low}〈=’b000000010000; 36:   {high,med,low}〈=’b000000010000; 37:   {high,med,low}<=’b000000010000; 38:   {high,med,low}〈='b000001010000;//中音5 39:   {high,med,low}〈=’b000001010000; 40:   {high,med,low}〈=’b000000000111;//低音7 41:   {high,med,low}<=’b000000000111; 42:   {high,med,low}<='b000000010000;//中音2 43:   {high,med,low}〈=’b000000010000; 44:   {high,med,low}〈=’b000000000110;//低音6 45:   {high,med,low}〈='b000000000110; 46:   {high,med,low}〈=’b000000010000;//中音1 47:   {high,med,low}〈='b000000010000; 48:   {high,med,low}〈='b000000000101;//低音5,持续6个时钟节拍 49:   {high,med,low}〈=’b000000000101; 50:   {high,med,low}〈='b000000000101; 51:   {high,med,low}〈=’b000000000101; 52:   {high,med,low}〈=’b000000000101; 53:   {high,med,low}〈=’b000000000101; 54:   {high,med,low}<='b000000000110;//低音6 55:   {high,med,low}<=’b000000010000;//中音1 56:   {high,med,low}〈=’b000000000101;//低音5,持续8个时钟节拍 57:   {high,med,low}〈=’b000000000101; 58:   {high,med,low}〈='b000000000101; 59:   {high,med,low}〈='b000000000101; 60:   {high,med,low}<='b000000000101; 61:   {high,med,low}<=’b000000000101; 62:   {high,med,low}<=’b000000000101; 63:   {high,med,low}<=’b000000000101; 64:   {high,med,low}〈='b000000000011;//低音3,无言开始,持续4个时钟节拍 65:   {high,med,low}〈=’b000000000011; 66:   {high,med,low}〈=’b000000000011; 67:   {high,med,low}〈=’b000000000011; 68:   {high,med,low}〈=’b000000000101; 69:   {high,med,low}〈=’b000000000101; 70:   {high,med,low}<=’b000000000101; 71:   {high,med,low}〈=’b000000000110; 72:   {high,med,low}〈=’b000000010000;//中音1发三个时钟节拍 73:   {high,med,low}〈=’b000000010000; 74:   {high,med,low}<=’b000000010000; 75:   {high,med,low}<=’b000000100000; 76:   {high,med,low}〈=’b000000000110; 77:   {high,med,low}<=’b000000010000; 78:   {high,med,low}〈=’b000000000101; 79:   {high,med,low}<='b000000000101; 80:   {high,med,low}〈=’b000001010000;//中音5持续三个时钟节拍 81:   {high,med,low}〈=’b000001010000; 82:   {high,med,low}〈=’b000001010000; 83:   {high,med,low}〈='b000010000000;//高音1 84:   {high,med,low}<='b000001100000; 85:   {high,med,low}〈=’b000001010000; 86:   {high,med,low}〈=’b000000110000; 87:   {high,med,low}〈='b000001010000; 88:   {high,med,low}<='b000000100000;//中音2持续8个时钟节拍 89:   {high,med,low}〈=’b000000100000; 90:   {high,med,low}〈='b000000100000; 91:   {high,med,low}<=’b000000100000; 92:   {high,med,low}<=’b000000100000; 93:   {high,med,low}<=’b000000100000; 94:   {high,med,low}〈='b000000100000; 95:   {high,med,low}〈='b000000100000; 96:   {high,med,low}〈='b000000110000; 97:   {high,med,low}<='b000000000111; 98:   {high,med,low}〈=’b000000000111; 99:   {high,med,low}<=’b000000000110; 100:   {high,med,low}〈='b000000000110; 101:   {high,med,low}<=’b000000000101; 102:   {high,med,low}<=’b000000000101; 103:   {high,med,low}<=’b000000000101; 104:   {high,med,low}〈=’b000000000110; 105:   {high,med,low}<=’b000000010000; 106:   {high,med,low}<='b000000010000; 107:   {high,med,low}<='b000000100000; 108:   {high,med,low}〈=’b000000100000; 109:   {high,med,low}〈='b000000000011; 110:   {high,med,low}〈=’b000000000011; 111:   {high,med,low}<=’b000000010000; 112:   {high,med,low}〈='b000000010000; 113:   {high,med,low}〈='b000000000110; 114:   {high,med,low}<=’b000000000101; 115:   {high,med,low}〈=’b000000000110; 116:   {high,med,low}〈='b000000010000; 117:   {high,med,low}〈='b000000000101;//低音5持续8个时钟节拍 118:   {high,med,low}〈='b000000000101; 119:   {high,med,low}〈=’b000000000101; 120:   {high,med,low}〈=’b000000000101; 121:   {high,med,low}<='b000000000101; 122:   {high,med,low}<=’b000000000101; 123:   {high,med,low}〈=’b000000000101; 124:   {high,med,low}〈='b000000000101; 125:   {high,med,low}〈= ’b000000110000; 126:   {high,med,low}<= ’b000000110000; 127:   {high,med,low}〈= ’b000000110000; 128:   {high,med,low}〈= 'b000001010000; 129:   {high,med,low}〈= ’b000000000111; 130:   {high,med,low}〈= 'b000000000111; 131:   {high,med,low}<= 'b000000100000; 132:   {high,med,low}<= ’b000000100000; 133:   {high,med,low}<= 'b000000000110; 134:   {high,med,low}<= 'b000000010000; 135:   {high,med,low}<= 'b000000000101; 136:   {high,med,low}〈= ’b000000000101; 137:   {high,med,low}〈= ’b000000000101; 138:   {high,med,low}<= ’b000000000101; 139:   {high,med,low}〈= 'b000000000000; 140:   {high,med,low}〈= 'b000000000000; 141:   {high,med,low}〈= ’b000000000011; 142:   {high,med,low}<= 'b000000000101; 143:   {high,med,low}〈= 'b000000000101; 144:   {high,med,low}<= ’b000000000011; 145:   {high,med,low}〈= 'b000000000101; 146:   {high,med,low}〈= ’b000000000110; 147:   {high,med,low}<= ’b000000000111; 148:   {high,med,low}〈= 'b000000100000; 149:   {high,med,low}〈= ’b000000000110; 150:   {high,med,low}〈= 'b000000000110; 151:   {high,med,low}〈= ’b000000000110; 152:   {high,med,low}〈= ’b000000000110; 153:   {high,med,low}<= 'b000000000110; 154:   {high,med,low}〈= 'b000000000110; 155:   {high,med,low}<= ’b000000000101; 156:   {high,med,low}<= ’b000000000110; 157:   {high,med,low}<= 'b000000010000; 158:   {high,med,low}〈= ’b000000010000; 159:   {high,med,low}〈= ’b000000010000; 160:   {high,med,low}<= 'b000000100000; 161:   {high,med,low}<= ’b000001010000; 162:   {high,med,low}<= ’b000001010000; 163:   {high,med,low}〈= ’b000000110000; 164:   {high,med,low}<= 'b000000110000; 165:   {high,med,low}<= 'b000000100000; 166:   {high,med,low}〈= 'b000000100000; 167:   {high,med,low}〈= 'b000000110000; 168:   {high,med,low}〈= 'b000000100000; 169:   {high,med,low}<= 'b000000010000; 170:   {high,med,low}<= ’b000000010000; 171:   {high,med,low}〈= ’b000000000110; 172:   {high,med,low}〈= ’b000000000101; 173:   {high,med,low}〈= ’b000000000011; 174:   {high,med,low}〈= 'b000000000011; 175:   {high,med,low}〈= 'b000000000011; 176:   {high,med,low}〈= ’b000000000011; 177:   {high,med,low}〈= 'b000000010000; 178:   {high,med,low}<= 'b000000010000; 179:   {high,med,low}<= 'b000000010000; 180:   {high,med,low}<= 'b000000010000; 181:   {high,med,low}〈= ’b000000000110; 182:   {high,med,low}<= 'b000000010000; 183:   {high,med,low}〈= 'b000000000110; 184:   {high,med,low}<= 'b000000000101; 185:   {high,med,low}〈= 'b000000000011; 186:   {high,med,low}<= 'b000000000101; 187:   {high,med,low}〈= ’b000000000110; 188:   {high,med,low}〈= 'b000000010000; 189:   {high,med,low}<= ’b000000000101; 190:   {high,med,low}〈= 'b000000000101; 191:   {high,med,low}〈= ’b000000000101; 192:   {high,med,low}〈= ’b000000000101; 193:   {high,med,low}〈= ’b000000000101; 194:   {high,med,low}〈= ’b000000000101; 195:   {high,med,low}<= 'b000000000101; 196:   {high,med,low}<= ’b000000000101; 197:    {high,med,low}〈=’b000000110000; 198:    {high,med,low}〈=’b000001010000; 199:    {high,med,low}〈=’b000000100000; 200:    {high,med,low}〈=’b000000110000; 201:    {high,med,low}<='b000000110000; 202:    {high,med,low}〈=’b000000010000; 203:    {high,med,low}〈='b000000000111; 204:    {high,med,low}〈=’b000000000111; 205:    {high,med,low}<=’b000000000110; 206:    {high,med,low}<=’b000000000110; 207:    {high,med,low}〈=’b000000000101; 208:    {high,med,low}<=’b000000000101; 209:    {high,med,low}〈='b000000000101; 210:    {high,med,low}〈=’b000000000101; 211:    {high,med,low}〈=’b000000000101; 212:    {high,med,low}〈=’b000000000101; 213:    {high,med,low}〈=’b000000000101; 214:    {high,med,low}〈=’b000000000101; endcase end endmodule   四、        分析与讨论 本次实验主要是通过编写梁祝乐曲发生器,锻炼同学们的Verilog的编写能力,以及对Verilog语言的了解,同时也增强了同学们对数字电子以及EDA的了解。实验编程主要包括以下几块:分频器的编写(包括50MHz到1MHz以及50MHz到4Hz以及一个二分频器)对输入波进行分频;计数器的编写(11位计数器通过设定预置数来实现计数功能);乐谱的编写.     经过这一次的课程设计的学习,让我收获多多。但我也发现了自身存在的很多不足。当实验需要一些复杂的程序时时我还不能从容应对;我的探索方式还有待改善,当面对一些复杂的问题时我还不能很快很好的完成。     最后,课程设计让我收获颇丰,让我对Verilog语言有了更深的理解,对数字电子计数的应用有了更深的了解,同时也让我发现了自身很多的不足。 五、        附:资料查阅情况 1、刘润华,任旭虎。电子技术实验与课程设计。石油大学出版社,2005 2、王金明。Verilog HDL程序设计教程。人民邮电出版社,2004 3、张明。Verilog HDL实用教程。电子科技大学出版社,1999 4、潘松,黄继业.EDA技术实用教程.科学出版社,2002 附件(梁祝乐谱图):
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

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

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服