VHDL实验:乐曲演奏课件.ppt

VHDL实验:乐曲演奏课件.ppt

ID:57059727

大小:231.00 KB

页数:28页

时间:2020-07-30

VHDL实验:乐曲演奏课件.ppt_第1页
VHDL实验:乐曲演奏课件.ppt_第2页
VHDL实验:乐曲演奏课件.ppt_第3页
VHDL实验:乐曲演奏课件.ppt_第4页
VHDL实验:乐曲演奏课件.ppt_第5页
资源描述:

《VHDL实验:乐曲演奏课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验乐曲演奏电路8/25/20211内容概要实验目的实验要求实验原理实验内容实验报告8/25/20212实验目的掌握乐曲演奏电路的工作原理。了解怎样控制音调的高低变化。了解音长的控制。8/25/20213实验原理乐曲演奏电路的原理乐曲的每个音符的频率值(音调)持续的时间(音长)音调的控制频率的高低决定了音调的高低。音乐的十二平均率规定:每两个八度音(如简谱中的中音1与高音1)之间的频率相差一倍。在两个八度音之间,又可以分为十二个半音,每两个半音的频率比为21/12≈1.12246。音名A(简谱中的低音6)的频率为440Hz,音名B到C之间,E到F之间为半音,其余为全音。8/25/20214

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高音41396.9低音5392中音5784高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.58/25/20215本实验中选取4MHz为基准频率。本实验演奏的是梁祝乐曲,该乐曲各音阶频率及相应的分频系数如下图所示。例如:低音3的6067由4MHz除以329.6,再除以2得到(后面又进行2分频)。8/25

3、/20216为减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,在到达扬声器之前,有一个二分频的分频器。上表中的分频系数就是在从4MHz频率二分频得到的2MHz频率基础上计算得出的。分频的方法反馈复0法加载预置数法(本实验采用这种方法)预置数=计数器最大值-分频系数=(213-1)-分频系数=8191-分频系数。由于最大的分频系数为6067,故采用13位二进制计数器已能满足分频要求。8/25/20217音长的控制本例演奏的“梁祝”片段,最小的节拍为1/4拍。将1拍的时长定为1秒,则只需要再提供一个4Hz的时钟频率即可产生1/4拍的时长。演奏的时间控制通过记谱来完成,对于占用时间较

4、长的节拍(一定是1/4拍的整数倍),如2/4拍,只需将该音名连续记录两次即可。8/25/20218乐曲演奏电路原理图反馈预置计数器对基准频率4MHz进行分频,产生分频后的输出时钟信号。再经过2分频器,成为方波信号,以驱动扬声器发声。音名显示电路显示乐曲演奏时对应的音符。乐谱产生电路用来根据高音、中音和低音的值决定分频计数器的预置数的值。48/25/20219程序流程图48/25/202110乐曲演奏电路子模块程序分为4个部分:反馈预置计数器2分频器,产生驱动扬声器的方波信号音名显示,根据时长计数器的值决定高音、中音和低音的值乐谱产生电路,根据高音、中音和低音的值决定分频计数器的预置数ori

5、gin的值8/25/202111LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYsongISPORT(clk_4MHz,clk_4Hz:INSTD_LOGIC;--预置计数器和乐谱产生器的时钟digit:BUFFERSTD_LOGIC_VECTOR(6DOWNTO0);--低三位表示低音,中间三位表示中音,最高位表示高音;本曲仅仅有高音1,故此用1位表示。speaker:outSTD_LOGIC--扬声器);ENDsong;ARCHITECTUREsong_archOFsongIS8/2

6、5/202112SIGNALdivider,origin:STD_LOGIC_VECTOR(12DOWNTO0);--13位计数值和预置值SIGNALcounter:integerrange0to140;--记录1/4拍曲谱的内容SIGNALcount:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALcarrier:STD_LOGIC;BEGINPROCESS(clk_4MHz)8/25/202113BEGINIF(clk_4MHz'eventANDclk_4MHz='1')THENIF(divider="1111111111111")THENcarrier<='1';d

7、ivider<=origin;ELSEdivider<=divider+'1';carrier<='0';ENDIF;ENDIF;ENDPROCESS;8/25/202114PROCESS(carrier)BEGINIF(carrier'eventANDcarrier='1')THENcount<=count+'1';--输出时钟四分频IFcount="00"THENspeaker<='1';ELSEspeaker<='

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。