乐曲演奏硬件电路设计报告

上传人:cl****1 文档编号:499390607 上传时间:2023-10-31 格式:DOCX 页数:23 大小:244.90KB
返回 下载 相关 举报
乐曲演奏硬件电路设计报告_第1页
第1页 / 共23页
乐曲演奏硬件电路设计报告_第2页
第2页 / 共23页
乐曲演奏硬件电路设计报告_第3页
第3页 / 共23页
乐曲演奏硬件电路设计报告_第4页
第4页 / 共23页
乐曲演奏硬件电路设计报告_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《乐曲演奏硬件电路设计报告》由会员分享,可在线阅读,更多相关《乐曲演奏硬件电路设计报告(23页珍藏版)》请在金锄头文库上搜索。

1、乐曲硬件演奏电路设计一、设计任务要求在 EDA 开发平台上利用 VHDL 语言设计数控分频器电路,利用数控分频的原理设计乐曲 硬件演奏电路,并定制LPM-ROM存储音乐数据,以古典名曲“梁祝”乐曲为例,将音乐数据 存储到LPM-ROM,就达到了以纯硬件的手段来实现乐曲的演奏效果。与利用微处理器来实现 乐曲演奏相比,一纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的 EDA 工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。二、系统设计总述 系统设计由以下五个部分组成,分别是乐曲演奏电路基本原理,音符频率的获得,乐曲节奏 的控制,乐谱发生器,乐曲演奏电路总

2、体设计流程这五个部分。乐曲演奏电路基本原理硬件电路的发声原理是,因为声音的频谱范围约在几十到几千赫兹,若能利用程序来 控制 FPGA 芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐 曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制 它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出 这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。不过要准确地演奏 出一首乐曲,仅仅让扬声器能够发生还是不够的,还必须准确地控制乐曲的演奏节奏,就是 指乐曲能够连续演奏的两个关键因素:乐曲中每个音符的发声频率及其持

3、续时间。音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频获得。由于各个音符的频率多为 非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准 频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少 频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少 误差的前提下,选取合适的基准频率。本设计中选取750KHZ的基准频率。由于现有的高频 时钟脉冲信号的频率为12MHz,故需先对其进行16分频,才能获得750KHz的基准频率。对 基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号(占空比=1/分频系数)。为

4、提高 输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器将原来的分频 器的输出脉冲均衡为对称方波(占空比=1/2),但这时的频率将是原来的 1/2。各音符的分 频系数是从 750KHz 的基准频率二分频得到的 375KHz 频率基础上计算得到的。由于最大分频 系数是 1274,故分频器采用的二进制计数器能满足要求,乐曲中的休止符,只要将分频系 数设为 0,即初始值=211-1=2047,此时扬声器不会发声。乐曲节奏的控制本设计中的乐曲“梁祝”,最小节拍为1/4 拍,若将1 拍的时间定为1 秒,则只需要提 供一个4Hz的时钟频率即可产生1/4拍的时长(0.25秒),对于其它占用

5、时间较长的节拍(必为 1/4 拍的整数倍)则只需要将该音符连续输出相应的次数就可以了。计数时钟信号作 为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也相应的快,时钟慢 时输出节拍的速度就慢,演奏的速度自然也相应的降低。乐谱发生器乐谱中的音符数据存储在 LPM-ROM 中,比如“梁祝”乐曲中的一个音符为“3”,此音 在逻辑中停留了 4个时钟节拍,即1秒的时间,相应地,音符“3”就要在LPM-R0M中连续 的四个地址上都存储。当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。乐曲演奏电路总体设计流程当一个4Hz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频

6、系数模块,分 频系数模块输出此音符相应的分频系数,将分频系数送给数控分频器模块,当12MHz的时钟 脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬 声器,扬声器就可发出对应音符的声音来连续的4Hz的时钟脉冲就将乐谱发生器里所存储 的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一 个的发出音符数据所对应的声音来,曲子也就流畅的播放出来。三、总体程序设计总体系统框图该系统主要由三个部分组成,顶层设计文件,其内部 有三个功能模 块: TONETABA.VHD 、 NOTATABS.VHD、和SPEAKERA.VHD。首先定制TONE

7、TABA.VHD、模块一类似于弹琴人的手指,模块二类 似于琴键,模块三类似于琴弦或音调发生器。模块中的音符数据ROM “music”。然后根据给出的乘 法器逻辑原理图及其模块的VHDL描述在Quartusll上完成设计。最后完成编译,综合,仿真,管脚 锁定,编程下载。音符的频率可由Speakera获得,这是一个数控分频器。由其clk端输入一个具有较高频率的信 号,通过 Speakera 分频后由 SPKOUT 输出,由于直接数控分频器出来的输出信号是脉宽极窄的脉冲式 信号,为了有利于驱动扬声器,需要另加一个 D 触发器以均衡器占空比,但这是的频率将是原来的 1/2。Speakera对clk输入

8、信号的分频比由11位预置数Tone10.0决定。SPKOUT输出频率将决定 每一个音符的音调,这样,分频计数器的预置值Tone10.0与SPKOUT的输出频率就有了对应关系。音频的持续时间需根据乐曲的速度及每个音符的节拍数来确定,模块ToneTaba的功能首先是为 Speakera 提供决定所发音符的分频预置数,而次数在 Speakera 输入口停留的时间即为此音符的节拍 值。模块ToneTaba是乐曲简谱码对应的预置数,共13个,每一音符的停留时间由音乐节拍和音调发 生器模块Not eTabs的clk的输入频率决定,在此喂4Hz。这13个值的输出由对应于ToneTaba的4 位输入值Inde

9、x3.O确定,而Index3.O最多有16种可选值。输向ToneTaba中的Index3.O 的值ToneIndex3.O的输出值与持续时间由模块Not eTabs决定。在Not eTabs中设置了一个8位二进制计数器计数最大值为138),作为音符数据ROM的地址发 生器。这个计数器的技术频率选为4Hz,即每一个计数值的停留时间为0.25秒,恰为当全音符设为1 秒时,四四拍的 4分音符持续时间。顶层电路VHDL程序设计LIBRARY IEEE; - 硬件演奏电路顶层设计USE IEEE.STD_LOGIC_1164.ALL;ENTITY Songer ISPORT ( CLK12MHZ : I

10、N STD_LOGIC; -音调频率信号CLK8HZ : IN STD_LOGIC; - 节拍频率用于控制音长(节拍)的时钟频率;CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);- 简谱码输出显示HIGH1 : OUT STD_LOGIC; - 高 8 度指示SPKOUT : OUT STD_LOGIC );- 声音输出END;ARCHITECTURE one OF Songer ISCOMPONENT NoteTabs -元件 u1 例换化PORT ( clk : IN STD_LOGIC;ToneIndex : OUT STD_LOGIC_VECTOR

11、(3 DOWNTO 0) );END COMPONENT;COMPONENT ToneTaba -元件 u2 例换化PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ;HIGH : OUT STD_LOGIC;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) );END COMPONENT;COMPONENT Speakera-元件 u3 例换化PORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGI

12、C_VECTOR (10 DOWNTO 0);SpkS : OUT STD_LOGIC );END COMPONENT;SIGNAL Tone : STD_LOGIC_VECTOR (10 DOWNTO 0);SIGNAL ToneIndex : STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINu1 : NoteTabs PORT MAP (clk=CLK8HZ, ToneIndex=ToneIndex);-参数传递映射语句u2 : ToneTaba PORT MAP(Index=ToneIndex,Tone=Tone,CODE=CODE1,HIGH=HIGH1);u3

13、: Speakera PORT MAP(clk=CLK12MHZ,Tone=Tone, SpkS=SPKOUT);END;单元模块程序设计共分为music模块、地址发生器模块、分频预置数模块、十六进制模块、数控分频模 块这五个模块。music模块存放乐曲中的音符数据,地址发生器模块作为music模块中所定 制的音符数据ROM的地址发生器分频预置数模块提供分频预置数即给数控分频模块提供计 数初值,十六进制模块对12MHz的时钟脉冲进行16分频,得到750KHz的频率,给数控分频 模块提供时钟脉冲。数控分频模块根据分频预置数输出各个音符所对应的频率。音符的频率由数控分频模块获得,这是一个数控分频电

14、路。它是由一个初值可变的加法 计数器构成。该计数器的模为2047,当计数器记满时,计数器产生一个溢出信号FULL,此 溢出信号就是用作发音的频率信号。在计数器的输入端给定不同的初值,而此预置数就是表 1 中的计数初值,就可得到不同音符的发音频率信号。它计满时所需要的计数初值可由下式 来表示。计数初值(Tone)=2047-分频系数,而分频系数又可有下式来求:分频系数=基准 频率/音符的发生频率。低音时 Tone 值小,分频系数大,溢出信号周期长,扬声器发出的声 音低, Tone 随音乐的乐谱变化大,自动控制分频比,实现了数控分频,发生信号的频率与 音调Tone成正比。这就是利用数控分频器自动演

15、奏音乐的原理。时钟(Clk)端输入的是在十六进制模块里对12MHz的信号进行16分频得到的750KHz, 750KHz 的信号根据分频预置数模块中所提供的计数初值,分别得出相应音符频率的两倍值。 此时从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需 另加一个D触发器以均衡其占空比,这时的频率就变为原来的1/2,刚好就是相应音符的频 率。数控分频模块中对Clk输入信号的分频比由11位预置数tone10.0决定。Fout的输 出频率将决定每一个音符的音调,这样,分频计数器的预置值tone10.0与Fout的输出 频率就有了对应关系。例如在分频预置数模块中若取tone10

16、.0=1036,将发出音符为“3” 音的信号频率。音符的频率由数控分频模块VHDL程序:LIBRARY IEEE;LIBRARY IEEE;-音乐符数控分频电路模块USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera ISPORT ( clk : IN STD_LOGIC;-音调频率信号 12MHZTone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);- 音乐符对应分频 11 位SpkS : OUT STD_LOGIC );- 声音输出END;ARCHITECTURE one OF S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号