《EDA技术基础》设计Word格式文档下载.docx
- 文档编号:20245618
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:11
- 大小:58.21KB
《EDA技术基础》设计Word格式文档下载.docx
《《EDA技术基础》设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《EDA技术基础》设计Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
低音4
349
中音4
698
高音4
1397
低音5
392
中音5
784
高音5
1568
低音6
440
中音6
880
高音6
1760
低音7
494
中音7
988
高音7
1976
分频比预置数的计算:
分频比就是从6Mhz基准频率通过二分频得到的3Mhz频率基础上计算得到的。
对于乐曲中的休止符,只需将其分频系数设为0,将分频预置数设为16383即可。
例如:
低音3的频率为330hz,分频比为3M/330hz=3000000/330=9091,则其分频预置数为:
16383-9091=7292。
其他的音符对应的分频比和分频比预置数均按此法计算可得到。
依次计算出低、中、高3X7=21个音的预置数。
各音阶对应的预置数如下表:
预置数
4933
10647
13515
6179
11272
13830
7292
11831
14107
7787
12085
14236
8730
12556
14470
9565
12974
14678
10310
13347
14858
2、音长的控制:
音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。
本试验中,设定最短的音符为4分音符,若将全音符的持续时间设为1s的话,则需要提供一个4Hz的时钟频率即可产生4分音符的时间,每1/4个节拍的时间为0.25s,一个完整的节拍为1s。
以上即为音乐播放器的原理框图。
控制音调通过设置计数器的预置数来实现,预置不同的数可以使计数器产生不同频率的信号,从而产生不同的音调。
控制音长则是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。
每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,例如2分音符,占了2/4个节拍,在记谱的时候将其连续记录2次即可。
3、实验步骤:
1、分频产生6Mz的基准频率:
modulediv_clk6mhz(clk24m,clk6m);
inputclk24m;
outputclk6m;
regclk6m;
regcnt;
always@(posedgeclk24m)
if(cnt<
1)cnt=cnt+1;
//(24m/6m=4分频,cnt<
[4/2-1=1]即可)
elsebegincnt=0;
clk6m=!
clk6m;
end
endmodule
由于此分频电路简单,就不在这里给出仿真波形了。
2、分频产生4hz的节拍控制频率:
modulediv_clk4hz(clk24m,clk4);
outputclk4;
regclk4;
reg[21:
0]cnt;
2999999)cnt=cnt+1;
//(24m/4hz=6000000,cnt<
[6000000/2-1=2999999])
clk4=!
clk4;
此分频电路也很简单,就不在这里给出仿真波形了。
3、乐曲产生模块:
核心模块就在这里,这里:
(1)首先罗列了低、中、高21个音的分频比预置数(还有休止符的预置数16383),通过6Mhz的基准频率,在其上升沿的时候,计数器累加,当计满到16383之后就取反speaker(speaker<
=~speaker非阻塞赋值),产生对应音符的频率,这里和单片机的定时计数器溢出中断差不多。
(2)产生了21个音调之后,我们要产生流畅的歌曲,还必须根据歌曲的谱子,调用相应音符并且根据节拍控制其持续的时间,例如:
若一个音持续4个1/4节拍,则在clk_4hz的上升沿,连续调用4次它的音符就可以了。
用counter来计数,计满了(何时计满取决于歌曲长度)就将counter返回为0,这样就可以实现循环演奏了。
代码如下:
modulesong(clk_6mhz,clk_4hz,speaker);
inputclk_6mhz,clk_4hz;
outputspeaker;
reg[3:
0]high,med,low;
reg[13:
0]divider,origin;
reg[7:
0]counter;
regspeaker;
wirecarry;
assigncarry=(divider==16383);
always@(posedgeclk_6mhz)
beginif(carry)divider<
=origin;
elsedivider<
=divider+1;
end
always@(posedgecarry)
beginspeaker<
=~speaker;
always@(posedgeclk_4hz)
begin
case({high,med,low})
'
b000000000001:
origin<
=4933;
b000000000010:
=6179;
b000000000011:
=7292;
b000000000100:
=7787;
b000000000101:
=8730;
b000000000110:
=9565;
b000000000111:
=10310;
b000000010000:
=10647;
b000000100000:
=11272;
b000000110000:
=11831;
b000001000000:
=12085;
b000001010000:
=12556;
b000001100000:
=12974;
b000001110000:
=13347;
b000100000000:
=13515;
b001000000000:
=13830;
b001100000000:
=14107;
b010000000000:
=14236;
b010100000000:
=14470;
b011000000000:
=14678;
b011100000000:
=14858;
b000000000000:
=16383;
endcase
begin
if(counter==113)counter<
=0;
elsecounter=counter+1;
case(counter)
0:
{high,med,low}<
='
b000000000101;
1:
//
2:
b000000000110;
3:
4:
5:
6:
b000100000000;
7:
8:
b000001110000;
9:
10:
{high,med,low}<
11:
12:
b000001010000;
13:
14:
b000001100000;
15:
16:
17:
18:
b001000000000;
19:
20:
21:
22:
23:
24:
25:
26:
b010100000000;
27:
28:
b001100000000;
29:
30:
31:
32:
33:
34:
b011000000000;
35:
36:
b010000000000;
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
///////祝你生日快乐,完毕。
50:
b000000000011;
/////////梁祝,开始
51:
52:
53:
54:
55:
56:
57:
58:
b000000010000;
59:
60:
61:
b000000100000;
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
b000000110000;
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
b000000000111;
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:
4、三个模块都完成之后,生成相应的电路原理图,并连接起来,组成一个完整的音乐播放器电路,如下:
5、完成以上步骤之后,分配引脚到试验箱上的芯片,连接好引脚到扬声器等,并且接好相应的短路帽。
然后烧写程序到芯片中去,测试音乐播放器是否可以产生预期已经谱好了曲子的歌曲。
经过硬件测试,能够产生《梁祝》和《祝你生日快乐》,在这里我只写了2首简单的歌曲。
4、实验分析
1、所有不同频率的信号都是从同一个基准频率分频得到。
由于音阶频率多为分整数,而分频比又不能为小数,故必须将计算得到的分频数四舍五入取整。
如果基准频率过低,则如果分频比太小,四舍五入取整后的误差较大。
若基准频率过高,虽然误差小,但分频数将会变大。
设计时,综合考虑,在尽量减小频率误差的前提下取合适的基准频率。
我在这里就选取了6Mhz的时钟频率。
2、由于最大分频预置数为16383(休止符),2的14次方=16384>
16383,故只需取14bit即可,14位的二进制计数器可满足要求。
分频比都是从6Mhz频率二分频得到3Mhz频率基础上计算得到。
3、如何分频得到想要的频率?
总结了下,如果想由已知频率得到N分频的频率,计数器count<
(N/2-1)为分界线,将要得到的频率在分界线处取反即可。
比如:
上面要从24Mhz得到4hz的频率,N=24000000/4=6000000,则cnt<
(6000000/2-1)即cnt<
2999999即可。
5、实验总结;
其实,音乐播放器用FPGA来实现是很简单的。
核心部分就是抓住了乐曲的两个要点:
音调的控制和音长的控制。
因此,涉及到两个频率,一个用来控制产生相应的音调,一个是用来控制该音调持续的时间(即节拍)。
我做的这个简易音乐播放器,硬件电路也很简单。
其实,可以做的完善和人性化一点,因为声音不只21个音,还有升半调#和降调b,可以加些按键控制,选中某一首歌曲播放。
或者还可以通过按键调整模式,可以有自己弹奏乐曲的模式,和音乐自动播放模式,两种模式进行切换。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA技术基础 EDA 技术 基础 设计