1、 电子系统设计 课程课程设计报告题目: 乐曲硬件演奏电路设计 姓 名: 吴清清 院 系: 电力学院 专 业: 电子科学与技术 学 号: 201312309 指导教师: 谭联 完成时间: 2016 年 12 月 21 日目录1 课程设计题目、内容与要求 .11.1 设计内容 .11.2 具体要求 .12 系统设计 .12.1 设计思路 .12.2 系统原理 .32.2.1 总体框图 .32.2.2 工作过程 .32.2.3 乐曲演奏的原理图 .43 系统实现 .43.1.分频器(FDIV) .43.2.计数器 CNT138T.63.2.1 计数器 CNT138T 的设计 .63.3.分频预置数译
2、码器 F_CODE 模块 .73.3.1 F_CODE 模块的设计 .83.4 数字分频器 SPKER 模块 .103.4.1 数字分频器 SPKS 模块设计 .103.5 选择器 choice .123.6.乐谱文件 ROM.143.6.1 乐谱文件 .143.6.2 LMP-ROM 模块 .154 系统仿真 .154.1 计数器 CNT138T 的仿真 .154.2.分频器 FDIV.164.3 分频预置数 F_CODE .164.4 分频器 SPKER .164.5 乐曲 ROM 的数据读取 .175 硬件验证 .175.1 引脚锁定 .185.2 硬件连接 .185.2 实验现象 .1
3、86 总结 .197 参考书目 .1911 课程设计题目、内容与要求1.1 设计内容 设计一个乐曲演奏电路,能够自动播放编写好的音乐。要求将音乐通过实验箱上的喇叭播放出来,用发光二级管显示出乐曲的节拍。(1)完成程序的编程工作。(2)将音乐数据制成 LMP_ROM 文件。(3)将程序在 Quartus ii 软件中进行编译和仿真。(4)进行引脚锁定,然后下载到实验箱上观察实验结果。1.2 具体要求(1)定制音符数据 ROM MUSIC,检测音符数据已经进入 ROM 中;(2)所有模块,分别仿真测试;(3)完成系统仿真调试和硬件验证;(4)能够将两首音乐随时切换。2 系统设计2.1 设计思路乐曲
4、中的每一音符对应着一个确定的频率,要想 FPGA 发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准2确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。本次设计主要包括三个部分:(1) 音符频率的获得;音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若
5、基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本设计中选取 1MHz 的基准频率,数控分频器采用 11 位二进制计数器。(3) 乐曲节奏的控制 一般乐曲最小的节拍为 1/4 拍,若将 1 拍的时间定为 1 秒,则只需要输出 4Hz 的 1/4 拍的时长(0.25 秒) ,对于其它占用时间较长的节拍(必为 1/4 拍的整数倍)则只需要将该音符连续输出相应的次数即可。计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快
6、,时钟慢时输出节拍的速度就慢,演奏的速度自然降低,因此计数器的时钟信号应为 4Hz。(3) 乐谱的发生本设计将乐谱中的音符数据存储在 LPM-ROM 中,若某音在逻辑中停留了 4 个时钟节拍,即 1 秒的时间,相应地,该音符就要在3LPM-ROM 中连续的四个地址上都存储。当一个 4Hz 的时钟来时,相应地就从 LPM-ROM 中输出一个音符数据。2.2 系统原理2.2.1 总体框图时钟该工程由是由上图所示的几个模块构成输入的时钟 20MHZ 通过锁相环后输出 2KHZ 和 1KHZ 的时钟分别输送给分频器 FDIV 和计数器 CNT138;FDIV 将 1MHZ 的时钟分频成4HZ 的时钟。
7、计数器 CNT138T 完成计数功能,138 进制,每来个时钟沿加一。乐谱 ROM 记录了 1 首歌的乐谱。根据上一模块计数器所计的数读取相应地址里的数据传递给下一模块。译码器 F_CODE 将选择器所选择的歌曲 rom 里的地址的数据翻译成可预置计数器 SPKER 和简谱码显示 DECL7S 所需的数据。分频驱动器也就是一个数控分频器,完成分频的功能,并驱动蜂鸣器。2.2.2 工作过程锁相环PLL分频器 FDIV计数器CNT138T乐谱ROM 译码器F_CODE数控分频器 SPKER分频驱动蜂鸣器简谱码显示DECL7S4当一个 4Hz 的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系
8、数模块,分频系数模块输出此音符相应的分频系数所需的初始值,将初始值送给数控分频器模块,当 1MHz 的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的4Hz 的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。曲子也就流畅的播放出来了。同时 led 数码管会随着音乐显示相应的乐谱。当乐曲一遍演奏完成后,乐曲发生器能自动从头开始循环演奏。2.2.3 乐曲演奏的原理图3 系统实现3.1.分频器(FDIV)将锁相环的 2KHZ
9、的时钟分频 4Hz 的时钟,供计数器使用。(1)模块程序module FDIV(CLK,PM);5input CLK;output PM;reg8:0 Q1;reg FULL;wire RST;always(posedge CLK or posedge RST)beginif(RST)beginQ1=0;FULL=1;endelse beginQ1=Q1+1;FULL=0;endendassign RST=(Q1=449);assign PM=FULL;assign DOUT=Q1;endmodule6(2)模块图形3.2.计数器 CNT138T它是一个 8 位二进制计数器,内部设置计数最大值
10、为 139,作为音符数据 ROM 的地址发生器。每来一个时钟信号,计数器就计数一次,ROM 文件中的地址也随着增加,音符数据 ROM 中的音符也就一个一个的取出来。3.2.1 计数器 CNT138T 的设计这个计数器的计数频率即为 4Hz。即每一计数值的停留时间为0.25 秒,恰为当全音符设为 1 秒时,四四拍的 4 分音符持续时间。例如, “梁祝”乐曲的第一个音符为“3” ,此音在逻辑中停留了 4 个时钟节拍,即 1 秒时间,相应地,所对应的“3”音符分频预置值为11H40C,在 SPKER 的输入端停留了 1 秒。随着计数器 CNT138T 按4Hz 的时钟速率作加法计数时,即随地址值递增
11、时,音符数据 ROM模块 MUSIC 中的音符数据将从 ROM 中通过 q3.0端口输向 F_CODE模块, “梁祝”乐曲就开始连续自然地演奏起来了。CNT138T 的节拍是 139,正好等于 ROM 中的简谱码数,所以可以确保循环演奏。对于其他乐曲,此计数最大值要根据情况更改。(1)模块程序7module CNT138T(CLK,CNT8);input CLK;output 7:0 CNT8;reg7:0 CNT;wire LD;always(posedge CLK or posedge LD)beginif (LD)CNT=8b00000000;elseCNT=CNT+1;endassign CNT8=CNT;assign LD=(CNT=138);endmodule (2)模块图形3.3.分频预置数译码器 F_CODE 模块模块 F_CODE 的功能首先是为模块 SPKER(11 位分频器)提供决
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。