《乐曲硬件演奏电路设计(共14页).doc》由会员分享,可在线阅读,更多相关《乐曲硬件演奏电路设计(共14页).doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上EDA技术及创新实践(设计报告)题 目: 乐曲硬件演奏电路设计 姓 名: 漩涡鸣人 学 院: 数理与信息工程学院 专 业: 电子科学与技术 班 级: 112 学 号: 1886*20 指导教师: 汤大智 2014年6 月专心-专注-专业1、 设计目的及要求实验目的:1、 理解音乐演奏的原理及分频器的原理与使用。2、 了解怎样控制音调的高低变化和音长,从而完成乐曲的自动循环演奏。3、 培养自主学习、正确分析和解决问题的能力 。要求:利用分频器设计硬件乐曲演奏电路;能通过数码管显示动态效果;通过一个开关实现两首乐曲的切换;在音乐播放的同时,会有led流水灯的闪烁。二、设计
2、原理乐曲演奏的原理是这样的:组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声。图1、顶层模块图其中,乐谱产生电路用来控制音乐的音调和音长。控制音调通过设置计数器的预置数来实现,预置不同的数值可以使计数器产生不同频率的信号,从而产生不同的音调。控制音长是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,如2分音符,在记谱时将该音名连续记录两次即可。1、音调的控制频率的高
3、低决定了音调的高低。音乐的十二平均率规定:每两个8度音(如简谱中的中音1与高音1)之间的频率相差一倍。在两个8度音之间,又可分为12个半音,每两个半音的频率比为122。另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音4。由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率,如表2所示:表2简谱中的音名与频率的关系音名频率/Hz音名频率/Hz音名频率/Hz低音1261.6中音1523.3高音11046.5低音2293.7中音2587.3高音21174.7低音3329.6中音3659.3高音31318.5低音4349.2中音4698.5高音413
4、96.9低音5392中音5784高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.5所有不同频率的信号都是从同一个基准频率分频得到的。由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;若基准频率过高,虽然误差变小,但分频数将变大。实际的设计综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。本例中选取6MHz为基准频率。若无6MHz的基准频率,则可以先分频得到6MHz,或换一个新的基准频率。实际上,只要各个音名间的相对频率关系不变,演
5、奏出的乐曲听起来都不会走调。本例需要演奏的是梁祝乐曲,该乐曲各音阶频率及相应的分频比如表2所示。为了减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。表2中的分频比就是从6MHz频率二分频得到的3MHz频率基础上计算得出的。由于最大的分频系数为9102,故采用14位二进制计数器分频可满足需要。在表2中,除给出了分频比以外,还给出了对应于各个音阶频率时计数器不同的预置数。对于不同的分频系数,只要加载不同的预置数即可。采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来也容易一些,如表3所示:表3各音阶频率对应的分频比及预置数音名分频
6、比预置数音名分频比预置数低音391027281中音2511111272低音576538730中音3455211831低音668189565中音5382712556低音7607310310中音6340912974中音1573610647高音1286713516此外,对于乐曲中的休止符,只要将分频系数设为0,即初始值为2141=16383即可,此时扬声器将不会发声。音长的控制音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。本例演奏的梁祝片段,最短的音符为4分音符,如果将全音符的持续时间设为1s的话,则只需要再提供一个4Hz的时钟频率即可产生4分音符的时长。三、底层模块设计由顶层模块图可以
7、看到本方案分成8个模块。1、48MHz分频成12MHz波形分频器,源代码和顶层模块如下/48mhz分成12mhz的分频模块module div_clk12mhz(clk_48mhz,clk_12mhz);input clk_48mhz;output clk_12mhz;reg clk_12mhz;reg 21:0 cnt;always (posedge clk_48mhz)if(cnt1) cnt=cnt+1; / (48mhz/12mhz=4,cnt4/2-1=1)else begin cnt=0; clk_12mhz =!clk_12mhz; endendmodule2、12MHz分频成6
8、MHz波形分频器,源代码和顶层模块如下:/12mhz分成6mhz的分频模块,提供给song模块module div_clk6mhz(clk_12mhz,clk_6mhz);input clk_12mhz;output clk_6mhz;reg clk_6mhz;reg cnt;always (posedge clk_12mhz)clk_6mhz=!clk_6mhz; endmodule 3、12MHz分频成4Hz波形分频器,源代码和顶层模块如下:/12mhz分成4hz的分频模块,提供给song模块module div_clk4hz(clk_12mhz,clk_4hz);input clk_12
9、mhz;output clk_4hz;reg clk_4hz;reg 21:0 cnt;always (posedge clk_12mhz)if(cnt) cnt=cnt+1; / (12mhz/4hz=,cnt/2-1=)else begin cnt=0; clk_4hz =! clk_4hz; endendmodule 4、12MHz分频成1mhz波形分频器,源代码和顶层模块如下:/12mhz分成1mhz的分频模块,提供给quma模块module div_clk1mhz(clk_12mhz,clk_1mhz);input clk_12mhz;output clk_1mhz;reg clk_
10、1mhz;reg 21:0 cnt;always (posedge clk_12mhz)if(cnt5) cnt=cnt+1; / (12mhz/1mhz=12,cnt12/2-1=5)else begin cnt=0; clk_1mhz =! clk_1mhz; endendmodule 5、12MHz分频成1khz波形分频器,源代码和顶层模块如下:/12mhz分成1khz的分频模块,提供给quma模块module div_clk1khz(clk_12mhz,clk_1khz);input clk_12mhz;output clk_1khz;reg clk_1khz;reg 21:0 cnt
11、;always (posedge clk_12mhz)if(cnt5999) cnt=cnt+1; / (12mhz/1khz=12000,cnt12000/2-1=5999)else begin cnt=0; clk_1khz =! clk_1khz; endendmodule6、 song模块源代码和顶层模块如下:/音乐产生模块module song(clk_6mhz,clk_4hz,speaker,high,med,low,k); input clk_6mhz,clk_4hz; input k; output speaker; output3:0 high,med,low; reg3:0
12、 high,med,low; reg13:0 divider,origin; reg9:0 counter; reg speaker; wire carry;assign carry=(divider=16383); always (posedge clk_6mhz) begin if(carry) divider=origin; else divider=divider+1; endalways (posedge carry) begin speaker=speaker;end always (posedge clk_4hz) begin case(high,med,low) b1:orig
13、in=7281; /低音3 b1:origin=8730; /低音5 b0:origin=9565; /低音6 b1:origin=10310; /低音7 b0:origin=10647; /中音1 b0:origin=11272; /中音2 b0:origin=11831; /中音3 b0:origin=12556; /中音5 b0:origin=12974; /中音6 b0:origin=13347; /中音7 b0:origin=13516; /高音1 b0:origin=16383; /休止符endcase endalways (posedge clk_4hz) if (k=0) be
14、gin if(counter=149) counter=0; else counter=counter+1; case(counter) /记谱 0: high,med,low=b1; /低音3 1: high,med,low=b1; /持续4个时钟节拍 2: high,med,low=b1; 3: high,med,low=b1; 4: high,med,low=b1; /低音5 5: high,med,low=b1; /发3个时钟节拍 6: high,med,low=b1; 7: high,med,low=b0; /低音6 8: high,med,low=b0; /中音1 9: high,
15、med,low=b0; /发3个时钟节拍 10: high,med,low=b0; 11: high,med,low=b0; /中音2 12: high,med,low=b0; /低音6 13: high,med,low=b0; /中音1 14: high,med,low=b1; /低音5 15: high,med,low=b1; 16: high,med,low=b0; /中音5 17: high,med,low=b0; /发3个时钟节拍 18: high,med,low=b0; 19: high,med,low=b0; /高音1 20: high,med,low=b0; /中音6 21:
16、high,med,low=b0; /中音5 22: high,med,low=b0; /中音3 23: high,med,low=b0; /中音5 24: high,med,low=b0; /中音2 25: high,med,low=b0; /持续11个时钟节拍 26: high,med,low=b0; 27: high,med,low=b0; 28: high,med,low=b0; 29: high,med,low=b0; 30: high,med,low=b0; 31: high,med,low=b0; 32: high,med,low=b0; 33: high,med,low=b0;
17、34: high,med,low=b0; 35: high,med,low=b0; /中音3 36: high,med,low=b1; /低音7 37: high,med,low=b1; 38: high,med,low=b0; /低音6 39: high,med,low=b0; 40: high,med,low=b1; /低音5 41: high,med,low=b1; 42: high,med,low=b1; 43: high,med,low=b0; /低音6 44: high,med,low=b0; /中音1 45: high,med,low=b0; 46: high,med,low=b
18、0; /中音2 47: high,med,low=b0; 48: high,med,low=b1; /低音3 49: high,med,low=b1; 50: high,med,low=b0; /中音1 51: high,med,low=b0; 52: high,med,low=b0; /低音6 53: high,med,low=b1; /低音5 54: high,med,low=b0; /低音6 55: high,med,low=b0; /中音1 56: high,med,low=b1; /低音5 57: high,med,low=b1; /持续8个时钟节拍 58: high,med,low
19、=b1; 59: high,med,low=b1; 60: high,med,low=b1; 61: high,med,low=b1; 62: high,med,low=b1; 63: high,med,low=b1; 64: high,med,low=b0; /中音3 65: high,med,low=b0; /发3个时钟节拍 66: high,med,low=b0; 67: high,med,low=b0; /中音5 68: high,med,low=b1; /低音7 69: high,med,low=b1; 70: high,med,low=b0; /中音2 71: high,med,l
20、ow=b0; 72: high,med,low=b0; /低音6 73: high,med,low=b0; /中音1 74: high,med,low=b1; /低音5 75: high,med,low=b1; /持续4个时钟节拍 76: high,med,low=b1; 77: high,med,low=b1; 78: high,med,low=b0; /休止符 79: high,med,low=b0; 80: high,med,low=b1; /低音3 81: high,med,low=b1; /低音5 82: high,med,low=b1; 83: high,med,low=b1; /
21、低音3 84: high,med,low=b1; /低音5 85: high,med,low=b0; /低音6 86: high,med,low=b1; /低音7 87: high,med,low=b0; /中音2 88: high,med,low=b0; /低音6 89: high,med,low=b0; /持续6个时钟节拍 90: high,med,low=b0; 91: high,med,low=b0; 92: high,med,low=b0; 93: high,med,low=b0; 94: high,med,low=b1; /低音5 95: high,med,low=b0; /低音6
22、 96: high,med,low=b0; /中音1 97: high,med,low=b0; /发3个时钟节拍 98: high,med,low=b0; 99: high,med,low=b0; /中音2 100: high,med,low=b0; /中音5 101: high,med,low=b0; 102: high,med,low=b0; /中音3 103: high,med,low=b0; 104: high,med,low=b0; /中音2 105: high,med,low=b0; 106: high,med,low=b0; /中音3 107: high,med,low=b0;
23、/中音2 108: high,med,low=b0; /中音1 109: high,med,low=b0; 110: high,med,low=b0; /低音6 111: high,med,low=b1; /低音5 112: high,med,low=b1; /低音3 113: high,med,low=b1; /持续4个时钟节拍 114: high,med,low=b1; 115: high,med,low=b1; 116: high,med,low=b0; /中音1 117: high,med,low=b0; /持续4个时钟节拍 118: high,med,low=b0; 119: hig
24、h,med,low=b0; 120: high,med,low=b0; /低音6 121: high,med,low=b0; /中音1 122: high,med,low=b0; /低音6 123: high,med,low=b1; /低音5 124: high,med,low=b1; /低音3 125: high,med,low=b1; /低音5 126: high,med,low=b0; /低音6 127: high,med,low=b0; /中音1 128: high,med,low=b1; /低音5 129: high,med,low=b1; /持续6个时钟节拍 130: high,m
25、ed,low=b1; 131: high,med,low=b1; 132: high,med,low=b1; 133: high,med,low=b1; 134: high,med,low=b0; /中音3 135: high,med,low=b0; /中音5 136: high,med,low=b0; /中音2 137: high,med,low=b0; /中音3 138: high,med,low=b0; /中音2 139: high,med,low=b0; /中音1 140: high,med,low=b1; /低音7 141: high,med,low=b1; 142: high,me
26、d,low=b0; /低音6 143: high,med,low=b0; 144: high,med,low=b1; /低音5 145: high,med,low=b1; /持续8个时钟节拍 146: high,med,low=b1; 147: high,med,low=b1; 148: high,med,low=b1; 149: high,med,low=b1;endcaseendelse if( k=1)begin if(counter=149) counter=0; /计时,以实现循环演奏 else counter=counter+1; case(counter) /记谱 0: high
27、,med,low=b0; /中音3 1: high,med,low=b0; /持续2个时钟节拍 2: high,med,low=b0; /中音2 3: high,med,low=b0; /持续2个时钟节拍 4: high,med,low=b0; /中音3 5: high,med,low=b0; /发10个时钟节拍 6: high,med,low=b0; 7: high,med,low=b0; 8: high,med,low=b0; 9: high,med,low=b0; 10: high,med,low=b0; 11: high,med,low=b0; 12: high,med,low=b0;
28、 13: high,med,low=b0; 14: high,med,low=b0; /中音2 15: high,med,low=b0; /持续2个时钟节拍 16: high,med,low=b0; /中音3 17: high,med,low=b0; /发2个时钟节拍 18: high,med,low=b0; /中音2 19: high,med,low=b0; /中音2 20: high,med,low=b0; /中音1 21: high,med,low=b0; 22: high,med,low=b0; 23: high,med,low=b0; 24: high,med,low=b0; 25:
29、 high,med,low=b0; 26: high,med,low=b0; 27: high,med,low=b0; 28: high,med,low=b0; 29: high,med,low=b0; 30: high,med,low=b0; 31: high,med,low=b0; 32: high,med,low=b0;/低6 33: high,med,low=b0; 34: high,med,low=b0; /中音1 35: high,med,low=b0; 36: high,med,low=b0; /中2 有6个 37: high,med,low=b0; 38: high,med,l
30、ow=b0; 39: high,med,low=b0; 40: high,med,low=b0; 41: high,med,low=b0; 42: high,med,low=b0; /中音3 43: high,med,low=b0; 44: high,med,low=b0; /中音2 45: high,med,low=b0; 46: high,med,low=b0; /中音1 47: high,med,low=b0; 48: high,med,low=b0; /低音6 49: high,med,low=b0; 50: high,med,low=b0; /中音1 51: high,med,low
31、=b0; 52: high,med,low=b1; /低音5 53: high,med,low=b1; /低音5 54: high,med,low=b1; 55: high,med,low=b1; 56: high,med,low=b1; /低音5 57: high,med,low=b1; 58: high,med,low=b1; 59: high,med,low=b1; 60: high,med,low=b1; 61: high,med,low=b1; 62: high,med,low=b1; 63: high,med,low=b1; 64: high,med,low=b1; 65: high,med,low=b1; 66: high,med,low=b1; 67: high,med,low=b1; 68: high,med,low=b0; /中音3 69: high,med,low=b0; 70: high,med,low=b0; /中音2 71: high,med,low=b0; 72: high,med,low=b0; /中音3 73: high,med,low=b0; /中音3 74: high,med,low=b0; /中音3 75: high,med,low=b0; /中音3 76: high,med,low=b0; /中音3 77:
限制150内