EDA课程设计——乐曲硬件演奏电路

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

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

1、电子技术根底工程设计报告课程名称任课教师设计题目乐曲硬件演奏电路设计班级姓名学号成绩日期一、 题目分析1. 设计要求利用 FPGA,设计一硬件乐曲硬件演奏电路,能够利用硬件电路,自动播放音乐。2. 题目分析乐曲是由一连串的音符组成,而每个音符的发音频率值及其持续时间是乐曲能连续演奏所需的两个根本因素。所以,设计音乐发生电路,需要得到相应音符的频率值,及其持续时间。假设能够得到这两个根本元素,利用程序来把握 FPGA 某个引脚输出确定频率的矩形波,接上扬声器就能发出相应频率的声音。所以, 猎取这两个要素是本试验的关键。1频率值频率的凹凸打算了音调的凹凸。由于乐曲都是由一连串的音符组成,因此依据乐

2、曲的乐谱,依次输出这些音符相对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。简谱的音名与频率的关系如下表:音名频率/Hz表 1简谱中的音名与频率的关系音名频率/Hz音名频率/Hz低音 1261.6中音 1523.3高音 11045.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低音 72时长493.9中音 7987.8高音 71975.5这次设计中所演奏的乐曲的最短的音符为四分音

3、符,假设将全音符的持续时间设为 1s 的话,那么一拍所应当持续的时间为 0.25 秒,则只需要再供给一个 4Hz 的时钟频率即可产生四分音符的时长。系统工作时就按 4Hz 的频率依次读取简谱,当系统读到某个音符的简谱时就对应发这个音符的音调,持续时间为 0.25 秒,假设在曲谱文件中某个音符为三拍音长,只要将该音符连续书写三遍,系统读乐曲文件的时候就会连续读到三次,也就会发三个 0.25 秒的音长,这时我们听上去就会持续了三拍的时间,这样就可以把握音乐的音长了。二、 设计方案1. 顶层实体描述音乐播放器,是能够演奏一曲完整的乐曲,在外部时钟的作用下,产生相应频率的方波信号,即在乐曲中对应相应的

4、音符。并且信号要持续确定的时间,即对应乐曲中的节拍。得到了音调和节拍后,就可以组成相应的乐曲了。2. 模块划分承受“自顶向下”的设计方法,将音乐播放器模块主要划分为地址发生模块、数控分频模块、music 模块和预置数模块。(1) 地址发生模块:增地址计数器,用于产生地址数。(2) music 模块:用于存储乐曲,本次设计,将梁祝的一段乐曲存储在 rom中;(3) 预置数模块:给分频器供给预置数,需要计算分频预置数;(4) 数控分频模块:为了供给乐曲发音所需要的发音频率,编写数控分频器程序, 对一输入高频信号,进展分频,生成每个音符发音的相应频率;地址发生器Music模块分频预置数数控分频器扬声

5、器3. 模块描述(1) 地址发生器图 1 模块划分图图 2 CNT138 实体地址发生器,即是一个计数器,由于存储了梁祝138 个音符,所以此计数器的最大值为 138。(2) Music 模块Music 模块存放乐曲的音符数据。由地址发生器为music 模块供给地址,每来一个时钟脉冲信号,8 位二进制计数器就计数一次,ROM 文件中的地址就随着递增,音符数据 ROM 中的音符也就一个接着一个连续的取出了。图 3 rom 实体此计数器时钟频率为 4Hz,每读一个数据,音符持续时间为 0.25 秒,恰为当全音符为 1s,四四拍的四分音符持续的时间。假设需持续较长的时间,需要在ROM 中连续写入相应

6、的音符。例如音符数据中的中音 3 为一拍,持续时间 1 秒, 所以,音符数据ROM 中需要连续写入四次音符 3,随着 4Hz 时钟速率读取地址递增,音符数据 ROM 中的音符数据输出给分频预置数模块。将从音符数据 ROM 中取出的值,通过 q3.0端口输向分频预置数模块。这样乐曲中的音符就可以连续的取出了。(2) 分频预置数模块分频预置数模块是乐曲简谱码对应的分频预置数查表电路,供给了梁祝乐曲全部音符对应的分频预置数,即给数控分频器供给计数初值。图 4 F_code 实体梁祝乐曲全部音符对应的分频预置数,共 13 个,此数在 TN 输入口停留时间即为此音符的节拍值。这 13 个值的输出由对应于

7、 F_code 的 4 位输入值INX3.0确定,而 INX3.0最多有 16 种选择。输向 F_code 中 INX3.0的值在speaker 中对应的输出频率值与持续时间由模块 music 打算。(3) 数控分频模块音符的频率由数控分频模块获得,该计数器的模为 2047,当计数器计满时, 计数器产生溢出信号 FOUT,此溢出信号就是作为发音的频率信号。由分频预置数模块,供给的计数初值,可以产生对应的信号频率。图 5 数控分频模块实体其时钟输入信号为 1MHz,模块对 CLK 输入信号的分频比由 11 位预置数TN10.0打算,FOUT 的输出频率将打算每一个音符的音调,这样,分频计数器的预

8、置值与输出频率就有了对应关系。4. 顶层电路图图 6 顶层 RTL 电路图图为顶层实体生成的 RTL 电路。外部时钟信号由两路组成,一路为 4Hz, 接 CNT138 和 rom 模块,即在时钟信号作用下,存储在 rom 中的音乐被相应的取出给 F_code 模块,F_code 模块经音符查找表,得到相应音符的分频预置数; 另一路时钟信号为 1MHz,供给应speaker 模块,用作分频时钟,由F_code 得到的分频预置数,经数控分频后,输出相应频率的信号给蜂鸣器,便可连续播放音乐了。三、 方案实现1. 各模块仿真及描述(1) 地址发生器由图可以看出,地址数在 4Hz 时钟作用下进展累加。(

9、2) music 模块设置 WIDTH=4,表示数据输出宽为 4;DEPTH=256,表示共有 256 个 4 位数据点。在 ROM 中配置数据文件,编辑.mif 文件。初始化数据如下:图 8 music 存储文件由地址发生器传入相应的地址,对应ROM 中相应的音符数据,将音符连续地输出。仿真时序如下:从图中可以看出,随着地址的增加,ROM 中存储的音符数据被连续地取出。(3) 分频预置数模块从 music 模块传来相应音符的代码,对应本模块中的分频预置数。(4) 数控分频模块假设取出的音符为 1,对应的分频预置数位 773,输出 FOUT 的频率为,近似和表 1 中的值相等。2. 顶层电路仿

10、真及描述从图中可以看出,在 rom 中的音符,在 4Hz 的时钟频率下被连续地取出来, 对应的数控分频模块,在 1MHz 的时钟频率下,输出对应音符的频率值。四、 硬件测试及说明(1) 引脚锁定编译仿真无误后,进展硬件测试,首先进展引脚锁定及程序下载,引脚对应如下表:(2) 功能描述enable 是使能键,enable 按下后,开头播放一段梁祝音乐,假设按下 reset键,则复位,音乐从播放。在播放音乐的同时,数码管会显示此时播放音乐对应的音符,假设为高音,则在数码管上方红灯会亮,假设为中音,则不亮。假设 enable 键未按下,则不能播放音乐。五、 结论经过时序仿真,可以看出,在外部输入的两

11、路时钟信号作用下,音符被相应的取出,对应的频率被数控分频器输出给蜂鸣器。并进展硬件验证,可以较为完整地演奏梁祝乐曲。六、 课程总结本次的课程设计基于 FPGA 的乐曲硬件演奏电路的设计,通过本次设计,我更加深入地了解了 VHDL 语言的应用。在 EDA“自顶向下”总的设计思想的指导下,将整个设打算分为 3 个主体模块,主要通过数控分频和定制 LPMROM 来完成相应的功能。在这次课程设计中,主要通过查阅EDA 技术有用教程教材,并通过在网上查阅相关的资料,逐步了解整个设计的过程,然后逐个完成划分的层次,最终完成了总体的设计。期间,也遇到了一些问题,对数控分频,由于不能理解和音符频率的对应关系,

12、所以对后续设计有所耽误。不过后来通过查阅资料,结合相应的仿真,逐步了解了其原理。在设计中,也渐渐生疏了 VHDL 语言的编程方法。七、 附录1. 顶层实体模块library ieee;use ieee.std_logic_1164.all; entity MusicMain isport(clk1M,clk4H:in std_logic;reset:in std_logic; enable:in std_logic;CODE:out std_logic_vector(3 downto 0); H:out std_logic;spkout:out std_logic);end;architect

13、ure one of MusicMain iscomponent CNT138port (clk:in std_logic; reset:in std_logic; enable:in std_logic;address:out std_logic_vector(7 downto 0); end component;component rom ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0); clock: IN STD_LOGIC:= ”1”;q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END component;

14、 component F_codeport(INX:in std_logic_vector(3 downto 0); CODE:out std_logic_vector(3 downto 0);H:out std_logic;TONE:out std_logic_vector(10 downto 0); end component;component speaker PORT(CLK:IN STD_LOGIC;TN:IN STD_LOGIC_VECTOR(10 DOWNTO 0); FOUT:OUT STD_LOGIC);end component;signal addressNum:std_logic_vector(7 downto 0); signal tone:std_logic_vector(3 downto 0);signal divNum:std_logic_vector(10 downto 0);be

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

当前位置:首页 > 资格认证/考试 > 自考

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