EDA乐曲硬件演奏电路设计Word下载.docx
- 文档编号:17292854
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:264.20KB
EDA乐曲硬件演奏电路设计Word下载.docx
《EDA乐曲硬件演奏电路设计Word下载.docx》由会员分享,可在线阅读,更多相关《EDA乐曲硬件演奏电路设计Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低,因此计数器的时钟信号应为4Hz。
(3)乐谱的发生
本设计将乐谱中的音符数据存储在LPM-ROM中,若某音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,该音符就要在LPM-ROM中连续的四个地址上都存储。
当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。
2.2系统原理
2.2.1总体框图
时钟
该工程由是由上图所示的几个模块构成
①输入的时钟20MHZ通过锁相环后输出2KHZ和1KHZ的时钟分别输送给分频器FDIV和计数器CNT138;
FDIV将1MHZ的时钟分频成4HZ的时钟。
②计数器CNT138T完成计数功能,138进制,每来个时钟沿加一。
③乐谱ROM记录了1首歌的乐谱。
根据上一模块计数器所计的数读取相应地址里的数据传递给下一模块。
④译码器F_CODE将选择器所选择的歌曲rom里的地址的数据翻译成可预置计数器SPKER和简谱码显示DECL7S所需的数据。
⑤分频驱动器也就是一个数控分频器,完成分频的功能,并驱动蜂鸣器。
2.2.2工作过程
当一个4Hz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数所需的初始值,将初始值送给数控分频器模块,当1MHz的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的4Hz的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。
曲子也就流畅的播放出来了。
同时led数码管会随着音乐显示相应的乐谱。
当乐曲一遍演奏完成后,乐曲发生器能自动从头开始循环演奏。
2.2.3乐曲演奏的原理图
3系统实现
3.1.分频器(FDIV)
将锁相环的2KHZ的时钟分频4Hz的时钟,供计数器使用。
(1)模块程序
moduleFDIV(CLK,PM);
inputCLK;
outputPM;
reg[8:
0]Q1;
regFULL;
wireRST;
always@(posedgeCLKorposedgeRST)
begin
if(RST)
begin
Q1<
=0;
FULL<
=1;
end
else
=Q1+1;
end
assignRST=(Q1==449);
assignPM=FULL;
assignDOUT=Q1;
endmodule
(2)模块图形
3.2.计数器CNT138T
它是一个8位二进制计数器,内部设置计数最大值为139,作为音符数据ROM的地址发生器。
每来一个时钟信号,计数器就计数一次,ROM文件中的地址也随着增加,音符数据ROM中的音符也就一个一个的取出来。
3.2.1计数器CNT138T的设计
这个计数器的计数频率即为4Hz。
即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。
例如,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间,相应地,所对应的“3”音符分频预置值为11'
H40C,在SPKER的输入端停留了1秒。
随着计数器CNT138T按4Hz的时钟速率作加法计数时,即随地址值递增时,音符数据ROM模块MUSIC中的音符数据将从ROM中通过q[3..0]端口输向F_CODE模块,“梁祝”乐曲就开始连续自然地演奏起来了。
CNT138T的节拍是139,正好等于ROM中的简谱码数,所以可以确保循环演奏。
对于其他乐曲,此计数最大值要根据情况更改。
moduleCNT138T(CLK,CNT8);
output[7:
0]CNT8;
reg[7:
0]CNT;
wireLD;
always@(posedgeCLKorposedgeLD)
if(LD)
CNT<
=8'
b00000000;
else
=CNT+1;
assignCNT8=CNT;
assignLD=(CNT==138);
endmodule
3.3.分频预置数译码器F_CODE模块
模块F_CODE的功能首先是为模块SPKER(11位分频器)提供决定所发音符的分频预置数,而此数在SPKER
输入口停留的时间即为此音符的节拍周期,模块F_CODE是乐曲简谱码对应的分频预置数查表电路。
3.3.1F_CODE模块的设计
程序中设置了“梁祝”乐曲全部音符所对应的分频预置数,共14个,每一音符的停留时间则由音乐节拍和音调发生查表模块MUSIC中简谱码和工作时钟inclock的频率决定,在此为4Hz。
模块F_CODE的14个值的输出由对应于MUSIC模块输出的q[3..0]及4位输入值INX[3..0]确定,而INX[3..0]最多有16种可选值。
输向模块F_CODE中INX[3..0]的值在SPKER中对应的输出频率值与持续的时间由模块MUSIC决定。
moduleF_CODE(INX,CODE,H,TO);
input[3:
0]INX;
output[3:
0]CODE;
outputH;
output[10:
0]TO;
reg[10:
reg[3:
regH;
always@(INX)
begin
case(INX)
0:
beginTO<
=11'
H7FF;
CODE<
H<
end
1:
H305;
2:
H390;
=2;
3:
H40C;
=3;
4:
H45C;
=4;
5:
H4AD;
=5;
6:
H50A;
=6;
7:
H55C;
=7;
8:
H582;
9:
H5C8;
10:
H606;
11:
H640;
12:
H656;
13:
H684;
14:
H69A;
15:
H6C0;
default:
H6c0;
endcase
3.4数字分频器SPKER模块
音符的频率由SPKER获得,这是一个数控分频器。
3.4.1数字分频器SPKS模块设计
它的CLK端输入一具有较高频率(1MHz)的时钟,由于直接从分频器中出来的输出信号是脉宽极窄的信号,为了有利于驱动扬声器,需另加一个D触发器分频以均衡其占空比,但这时的频率将是原来的1/2。
SPKER对CLK输入信号的分频比由输入的11位预置数TN[10..0]决定。
扬声器的输出频率将决定每一音符的音调;
这样,分频计数器的预置值TN[10..0]与输出频率就有了对应关系,而输出的频率又与音乐音符的发声有对应关系,例如在F_CODE模块中若TN[10..0]=11'
H40C,将由扬声器发出音符为“3”音的信号频率。
(1)程序模块1
moduleSPKER(CLK,TN,SPKS);
input[10:
0]TN;
outputSPKS;
regSPKS;
0]CNT11;
always@(posedgeCLK)
begin:
CNT11B_LOAD
if(CNT11==11'
h7FF)
CNT11=TN;
SPKS<
=1'
b1;
CNT11=CNT11+1;
b0;
(2)程序模块2
input[2:
reg[2:
0]CNT3;
if(CNT3==3'
h7)
CNT3=TN;
CNT3=CNT3+1;
3.5选择器choice
选择器完成选择歌曲的功能:
当a的信号为1时将Q1的信号输出
当a的信号为0时将Q2的信号输出
modulechoice(a,b,Q1,Q2,INX);
inputa;
outputb;
input[3:
0]Q2;
output[3:
0]INX;
regb;
reg[3:
always@(a)
begin
case(a)
01:
beginb<
INX<
=Q1;
10:
=Q2;
default:
=10;
endcase
end
3.6.乐谱文件ROM
Lpmrom0模块里面放置的是“梁祝”的乐谱,它是利用LPM-ROM来实现的,将乐谱中相应的音符放在一个连续的地址上。
他首先是编写音符数据文件,将乐谱中相应的音符放在一个连续的地址上。
因为1拍的时间定为1s,提供的是4HZ的时钟频率(1/4拍的整数倍),则需将这个音符存储在相应次数的连续的地址上。
然后对音符数据进行ROM定制,最后对定制好的ROM文件进行测试和仿真。
3.6.1乐谱文件
(1)“梁祝”音乐
WIDTH=4;
DEPTH=256;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENTBEGIN
00:
3;
01:
02:
03:
3;
04:
5;
05:
06:
07:
6;
08:
8;
09:
10:
8;
11:
9;
12:
6;
13:
14:
15:
16:
12;
17:
12;
18:
19:
15;
20:
13;
21:
12;
22:
10;
23:
24:
9;
25:
26:
27:
28:
29:
30:
31:
0;
32:
33:
34:
35:
10;
36:
7;
37:
38:
39:
40:
5;
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
0;
137:
138:
END;
(2)“隐形的翅膀”乐谱
3.6.2LMP-ROM模块
4系统仿真
4.1计数器CNT138T的仿真
由波形可看出,CLK为输入时钟信号,八位输出二进制信号在每个时钟上升沿加一,当计数至137时,从0开始重新计数。
经分析,该模块功能完全正确。
4.2.分频器FDIV
由波形可看出CLK为输入2KHz的时钟信号,PM输出为8Hz的时钟信号,由于纸张有限没有打印出其全部波形。
经分析该模块功能完全正确。
4.3分频预置数F_CODE
从波形上可以看到,当输入信号INX=1000时,code显示的是1,H为1,预置值为582,查询程序,发现功能正确。
4.4分频器SPKER
此波形仿真分析比较复杂,如果由于输入信号为1MHz,其中的分频系数比较大,如果直接用该模块程序进行仿真可能导致仿真时间过长而失败,因此更改程序,减小其分频系数,同样能说明问题,在此,我将11位的预置初值改为3位,得到如上的仿真波形图,可发现在TN给出不同的预置初值时的分频效果,仔细细数一下,发现数控分频功能完全正确。
通过对仿真后的时序波形的观察,当TN=6时,系统有最小的分频N=4,随着TN的减小,系统的分频数逐渐增大。
4.5乐曲ROM的数据读取
5硬件验证
5.1引脚锁定
5.2硬件连接
(1)CLK接试验台上的G21引脚;
(2)HIGH接试验台上的JP5端口的W10引脚,W10引脚与发光显示模块的D1引脚相连接,二极管是否发光意味着音调的高低;
(3)LED接试验台上的JP7模块,用来显示简谱;
(4)SPK_KX接试验台上的SPKK引脚,即扬声器的引脚;
(4)a接的实验台上的W13引脚,W13与高低电平输出控制开关模块的L8引脚相连,用来选择播放的音乐。
5.2实验现象
程序下载后,高低电平开关L8处于高电位状态,首先播放的是“梁祝”音乐,数码管显示简谱,发光二极管D1随着音调的高低忽亮忽灭,此时将L8拨至低电平状态,音乐就变换为“隐形的翅膀”的音乐。
6总结
通过两周的课程设计,我应用所学的EDA技术实用教程这本书顺利的完成了乐曲硬件演奏电路的设计。
期间,我查阅了许多相关的资料,更进一步的学习了verilog语言和quartusii软件,不仅巩固了课堂知识,而且有效的和实际结合在了一起,扩展了所学的知识和见识。
在设计中遇到不少的问题,如变成出现错误,仿真出现错误等一系列的问题。
总体的感觉就是,学的不够。
同时,也感觉到书本知识与实际问题之间有很大的差距,需要我们不断的去解决问题,并不是学了书本知识就能很好的解决实际问题,要通过不断的锻炼和学习才能更好的掌握好知识。
7参考书目
[1]潘松,黄继业。
DEA技术实用教程(第四本)。
北京:
科学出版社
如有侵权请联系告知删除,感谢你们的配合!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 乐曲 硬件 演奏 电路设计