




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录一.课程设计概述11.设计的题目2 2.设计要求2 3.设计构思2二.总体框图4三.具体各功能模块(模块图像,程序,波形图像,波形分析)21.计数器模块2 2.选择器模块4 3.数据翻译模块6 4.数控分频模块7 5.乐曲ROM的三个模块10 6.顶层文件的设计12 四.总体电路图(RLT电路图)14 五.课程设计总结15一.课程设计概述1.设计的题目乐曲播放电路2.设计要求:学习利用数控分频器设计硬件乐曲演奏电路,在实验四的基础上,改建电路的设计,增加功能自动选择曲目,可选的歌曲不少于3首。3.设计构思(1)音乐硬件演奏电路基本原理 硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。(2) 音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本设计中选取1MHz的基准频率。数控分频器采用12位二进制计数器,乐曲中的休止符,只要将分频系数设为0,即初始值=4095,此时扬声器不会发声。根据分频系数,可计算数控分频器得到的初始值。(语言已经无法描述其中的原理了,程序可以说明此问题,关于初始值的解释,请看下文给出的程序)初始值的计算公式如下:由于所设计的数控分频计采用12MHZ作为时钟源,并通过一次12分频给出频率为1MHZ的脉冲溢出信号,再对该1MHZ的溢出信号进行12位2进制码的带预置数进行计数,并给出一个频率随预置数变化的脉冲信号。由于该脉冲信号不具有驱动蜂鸣器的能力,故对此脉冲信号进行2分频以推动蜂鸣器发声(3) 乐曲节奏的控制 一般乐曲最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要输出4Hz的1/4拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低,由于最后的蜂鸣器前需加一个二分频的程序,因此计数器的时钟信号应为4Hz的2倍,即8Hz。(4) 乐谱的发生本设计将乐谱中的音符数据存储在LPM-ROM中,若某音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,该音符就要在LPM-ROM中连续的四个地址上都存储。当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。(5) 选择模块 选择模块将用一个4位数的控制信号控制乐谱模块数据的选择性。梁祝二.总体框图时钟计数器数控分频器选择器生日快乐隐形的翅膀时钟三.具体各功能模块1.计数器模块在notetabs中设置了一个8位二进制计数器(计数最大值为138),作为音符数据ROM的地址发生器。这个计数器的计数频率为4HZ,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续的时间。例如,notetabs在以下的VHDL逻辑描述中,梁祝乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒的时间,相应的,所对应的“3”音符分频预制值为1036,在speakera中的输入端停留1秒。随着notetabs中计数器按4HZ的时钟频率作加法计数时,即随地址值递增时,音符数据ROM中的音符从ROM中通过tonelndex端口输向tonetaba模块,梁祝乐曲开始连续自然地演奏起来。(1)模块图像:(2)模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity notetabs is port (clk:in std_logic; counter:inout std_logic_vector(7 downto 0);end;architecture one of notetabs is begin cnt8:process(clk,counter) begin if counter =138 then counter =00000000; elsif (clkevent and clk=1) then counter b=0001; INDEX b=0010; INDEX b=0011; INDEX null; END CASE; END PROCESS; END a;(3)波形图(4)波形分析由波形分析可知,当a输入为0001时,输出信号b与Q1信号相同,即播放第一首乐曲,此时b的信号输出为0001,因此该模块的功能符合要求。3.数据翻译模块音符的持续时间需根据乐曲的速度及每个音符的节拍数来决定。Tonetaba模块的功能首先是为speakera提供决定所发音符的分频预置数,而此数在speakera输入口停留的时间即为此音符的节拍值。模块tonetaba是乐曲简谱码对应的分频预置数查表电路,其中设置了三首乐曲全部音符所对应的分频预置数,每一音符的停留时间有音乐节拍和音调发生器模块notetabs的CLK的输入决定,在此为4HZ。(1)模块图像(2)程序library ieee;use ieee.std_logic_1164.all;entity tonetaba is port (index:in std_logic_vector(4 downto 0); code: out std_logic_vector (4 downto 0); high: out std_logic; tone:out std_logic_vector(10 downto 0); end; architecture one of tonetaba isbegin search:process(index) begin case index is When 00001=tone=01100000101;code=00001;hightone=01110010000;code=00010;hightone=10000001100;code=00011;hightone=10000110101;code=00100;hightone=10010101101;code=00101;hightone=10100001010;code=00110;hightone=10101011100;code=00111;hightone=10110000010;code=01000;hightone=10111001000;code=01001;hightone=11000000110;code=01010;hightone=11000101000;code=01011;hightone=11001010110;code=01100;hightone=11010000100;code=01101;hightone=11010110101;code=01110;hightone=11011000000;code=10001;hightone=11011101010;code=10010;hightone=11100000111;code=10011;hightone=11100010110;code=10100;hightone=11100101111;code=10101;hightone=11101000110;code=10110;hightone=11101011010;code=10111;highnull;end case;end process;end;(3)波形图(4)波形分析从波形图可看出,当输入信号为00010,输出为中音2,查预置初值,发现完全正确,因此该模块功能正确。4.数控分频器模块音符的频率由speakera模块获得,这是一个数控分频器。由其CLK端输入一具有较高频率(这里是12HZ)的信号,通过speakera分频后由spkout输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的一半。Speakera对CLK输入信号的分频比由11位预置数tone决定。Spkout的输出频率将决定每一音符的音调,这样,分频计数器的预制值tone与spkout的输出频率,就有了对应关系。例如在tonetaba模块中若取tone=1036,将发音符为“3”音的信号频率。(1)模块图像(2)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speakera is port ( clk : in std_logic; tone : in std_logic_vector(10 downto 0); spks : out std_logic);end;architecture one of speakera is signal preclk, fullspks : std_logic;begin divideclk : process(clk) variable count4 : std_logic_vector (3 downto 0); begin preclk 11 then preclk = 1; count4 := 0000; elsif clkevent and clk = 1 then count4 :=count4+1; end if; end process; genspks : process(preclk, tone) variable count11 : std_logic_vector(10 downto 0);begin if preclkevent and preclk = 1 then if count11 =16#7ff# then count11 := tone ; fullspks = 1; else count11 := count11+1; fullspks = 0; end if; end if; end process; delayspks : process(fullspks) variable count2 : std_logic;begin if fullspksevent and fullspks = 1 then count2 := not count2; if count2 =1 then spks =1; else spks clk8HZ,counter=A);u2:yinxingdechiban port map (address=A,clock=clk8HZ,q=E);u3:shengrikuaile port map (address=A,clock=clk8HZ,q=F);u4:lianzu port map (address=A,clock=clk8HZ,q=G);u5:choice port map (a=a1,Q1=E,Q2=F,Q3=G,b=b1,INDEX=H);u6:tonetaba port map (index=H,code=code1,high=high1,tone=J);u7:speakera port map(clk=clk12MHZ,tone=J,spks=spkout);end; 四. 总体电路图(RTL电路图)五 .课程设计总结 经过一个星期的努力,终于把EDA的课程设计完成了。虽然音乐播放电路的设计,之前实验有做过,但是对其中的工作原理一窍不通。由于这次的课程设计选择了这一题目,所以花了很大的时间去理解演奏电路的发音原理,音符的频率,不仅对掌握了电路原理,也学习到了相关的乐理知识。另外
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外汇借款还款款合同
- 承储合同协议
- 门卫协议或者合同
- 承包店面合同协议
- 拍卖竞得协议合同
- 考试保过合同协议书范本
- 关于合同变更协议
- 联通合约合同协议
- 药材采购合同协议
- 合同后安全协议
- 管理学组织设计案例分析
- 消除艾滋病、梅毒和乙肝母婴传播项目工作制度及流程(模板)
- 2025年河南机电职业学院单招职业倾向性测试题库有完整答案
- 2025年度汽车行业电子商务平台合作开发合同
- 摄影拍摄合同毕业季拍摄合同
- 《个人所得税申报赡养老人专项附加扣除指定分摊协议模板》
- 国家一级博物馆运行报告2024
- 血液病早期发现-你不可忽视的健康防线
- 化工行业不合格品处理流程
- 自提点合作协议
- (高清版)DB36∕T 1350-2020 网上中介服务超市系统对接技术规范
评论
0/150
提交评论