数字电子课程设计实例.docx
- 文档编号:24479390
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:17
- 大小:89.86KB
数字电子课程设计实例.docx
《数字电子课程设计实例.docx》由会员分享,可在线阅读,更多相关《数字电子课程设计实例.docx(17页珍藏版)》请在冰豆网上搜索。
数字电子课程设计实例
数字电子技术课程设计——“梁祝乐曲发生器”
模拟及数字电子课程设计及实验2010-01-0312:
00:
09阅读436评论0 字号:
大中小 订阅
封面请自行设计,仅供参考!
设计题目:
“梁祝乐曲发生器”
一、 设计任务及要求:
利用EDA/SOPC实验开发平台提供的16*16点阵LED以及EP2C35核心板,实现“梁祝”乐曲发生器。
1、查阅相关资料,明确设计步骤;
2、采用VerilogHDL编程语言设计程序;
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
F3
扩张接口JP3-80
程序实现如下:
module song(clk,speaker);
input clk;
outputspeaker;
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;
regclk_1mhz,clk_4hz;
wire carry;
always@(posedgeclk)//分频器设计1
begin
if(count1<=49)
begin
count1<=count1+1;
clk_1mhz<=0;
end
else
begin
count1<=0;
clk_1mhz<=1;
end
end
always@(posedgeclk)//分频器设计2
begin
if(count2<=12499999)
begin
count2<=count2+1;
clk_4hz<=0;
end
else
begin
count2<=0;
clk_4hz<=1;
end
end
assigncarry=(divider==2047);
always@(posedgeclk_1mhz)
beginif(carry)divider=origin;
elsedivider=divider+1;
end
always@(posedgecarry)
begin
speaker=~speaker;//2分频产生方波信号
end
always@(posedgeclk_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@(posedgeclk_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,m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电子 课程设计 实例