好文档 - 专业文书写作范文服务资料分享网站

《EDA技术基础》[设计]实验总结报告模板及要求(1)

天下 分享 时间: 加入收藏 我要投稿 点赞

EDA技术基础 音乐播放器 设计性实验 2008112020346郭斌 电子信息科学与技术 物电学院0803班

一、任务解析:

以前用51单片机制作了一个可演奏的电子琴,学习了EDA技术之后,感

觉FPGA与单片机有许多类似的地方。于是,启发我用FPGA做一个可随意演奏的音乐播放器。设计低、中、高21个音,几乎能够实现一般歌曲的演奏。要实现该功能,就必须考虑到一首歌曲的产生应该考虑的两个因素:音符的产生频率和音的节拍(即声音持续的时间)。只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发声产生优美的歌曲。

二、方案论证: 1、音调的控制:

频率的高低决定了音调的高低。通过查阅资料,得到下面的音符名与频率

的关系表: 音符名 低音1 低音2 低音3 低音4 低音5 低音6 低音7 分频比预置数的计算:

分频比就是从6Mhz基准频率通过二分频得到的3Mhz频率基础上计算得

频率/hz 262 294 330 349 392 440 494 音符名 中音1 中音2 中音3 中音4 中音5 中音6 中音7 频率/hz 523 587 659 698 784 880 988 音符名 高音1 高音2 高音3 高音4 高音5 高音6 高音7 频率/hz 1046 1175 1318 1397 1568 1760 1976 到的。对于乐曲中的休止符,只需将其分频系数设为0,将分频预置数设为16383即可。例如:低音3的频率为330hz,分频比为3M/330hz=3000000/330=9091,则其分频预置数为:16383-9091=7292。其他的音符对应的分频比和分频比预置数均按此法计算可得到。依次计算出低、中、高3X7=21个音的预置数。 各音阶对应的预置数如下表: 音符名 低音1 低音2 低音3 低音4 低音5 低音6 低音7 2、音长的控制:

音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。本试验

预置数 4933 6179 7292 7787 8730 9565 10310 音符名 中音1 中音2 中音3 中音4 中音5 中音6 中音7 预置数 10647 11272 11831 12085 12556 12974 13347 音符名 高音1 高音2 高音3 高音4 高音5 高音6 高音7 预置数 13515 13830 14107 14236 14470 14678 14858 中,设定最短的音符为4分音符,若将全音符的持续时间设为1s的话,则需要提供一个4Hz的时钟频率即可产生4分音符的时间,每1/4个节拍的时间为0.25s,一个完整的节拍为1s。

以上即为音乐播放器的原理框图。控制音调通过设置计数器的预置数来实现,预置不同的数可以使计数器产生不同频率的信号,从而产生不同的音调。控制音长则是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,例如2分音符,占了2/4个节拍,在记谱的时候将其连续记录2次即可。

三、实验步骤:

1、分频产生6Mz的基准频率: module div_clk6mhz(clk24m,clk6m); input clk24m; output clk6m; reg clk6m; reg cnt;

always @(posedge clk24m)

if(cnt<1)cnt=cnt+1; //(24m/6m=4分频,cnt<[4/2-1=1]即可) else begin cnt=0;clk6m=!clk6m;end

endmodule

由于此分频电路简单,就不在这里给出仿真波形了。

2、分频产生4hz的节拍控制频率: module div_clk4hz(clk24m,clk4); input clk24m; output clk4; reg clk4; reg [21:0]cnt;

always @(posedge clk24m)

endmodule

此分频电路也很简单,就不在这里给出仿真波形了。

3、乐曲产生模块:

核心模块就在这里,这里:(1)首先罗列了低、中、高21个音的分频比if(cnt<2999999)cnt=cnt+1;//(24m/4hz=6000000,cnt<[6000000/2-1=2999999]) else begin cnt=0;clk4=!clk4;end

预置数(还有休止符的预置数16383),通过6Mhz的基准频率,在其上升沿的时候,计数器累加,当计满到16383之后就取反speaker(speaker<=~speaker非阻塞赋值),产生对应音符的频率,这里和单片机的定时计数器溢出中断差不多。 (2)产生了21个音调之后,我们要产生流畅的歌曲,还必须根据歌曲的谱子,调用相应音符并且根据节拍控制其持续的时间,例如:若一个音持续4个1/4节拍,则在clk_4hz的上升沿,连续调用4次它的音符就可以了。用counter来计数,计满了(何时计满取决于歌曲长度)就将counter返回为0,这样就可以实现循环演奏了。代码如下:

module song(clk_6mhz,clk_4hz,speaker);

《EDA技术基础》[设计]实验总结报告模板及要求(1)

EDA技术基础音乐播放器设计性实验2008112020346郭斌电子信息科学与技术物电学院0803班一、任务解析:以前用51单片机制作了一个可演奏的电子琴,学习了EDA技术之后,感觉FPGA与单片机有许多
推荐度:
点击下载文档文档为doc格式
5d9nu3cgap8xzko02xoc4ddq3430ci00y8u
领取福利

微信扫码领取福利

微信扫码分享