- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VHDL樂曲演奏实验报告
设计性实验报告
班 级:
姓名(学号):
实验项目名称: 乐曲演奏实验
实验项目性质: 设计性
实验所属课程: EDA基础
实验室(中心):
指 导 教 师 :
实验完成时间: 2011 年 12 月 日一、实验目的
1、熟悉QuartusII 软件的使用。
2、熟悉EDA实验开发系统的基本使用。
3、学习VHDL基本单元电路的设计应用。进一步掌握EDA的多层次设计方法。
4、学习音乐发生器的设计。
二、实验内容及要求
1、实验内容
利用可编程逻辑器件FPGA,设计乐曲硬件电路,可自动演奏乐曲。
2、实验要求
要求能够演奏出《友谊天长地久》的曲调或可另选一段较完整的曲调(扩展要求:能够从数码管上显示出当前曲调的简谱和频率),我们组演奏出的是实验要求上的《友谊天长地久》曲调。
三、实验原理
1、乐曲硬件电路产生音乐是和音乐频率和音乐的持续时间有关;音符的持续时间需根据乐曲的速度和每个音符的节拍数来确定。其简谱中音符和频率的关系如下:
2、该演奏电路演奏的乐曲是《友谊天长地久》片段,其最小的节拍为1拍,将1拍的时长定位0.25S,则只需要再提供一个4hz的时钟频率即可产生1拍的时长,演奏的时间控制通过ROM查表的方式来完成。对于占用时间较长的节拍,(一定是节拍的整数倍),如全音符为4拍,2/4音符为2拍,1/4音符为1拍。
3、乐曲硬件演奏电路系统主要有数控分频器和乐曲存储模块两个部分组成,其余还有音乐节拍发生器等等。数控分频器对FPGA 的基准频率进行分频,得到与各个音节对应的频率输出。乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中存放一个乐曲曲谱真值表(实验中用的ROM存储),由一个计数器来控制此真值表的输出,而由计数器的技术时钟信号作为乐曲节拍控制信号。
4、要求演奏时能循环进行,必须需另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏。该计数器控制真值表按顺序输出简谱。
四、实验仪器、材料
计算机一台、GW48 EDA/SOPC实验箱一台
QuartusII软件、实验箱连接线一根
五、方案设计
这个实验中采用层次化的设计思路,因此我们把此乐曲硬件演奏电路分为3个主要模块,即音乐发生器NoteTabs模块,音符译码电路Tonetaba模块,数控分频Speakera模块。分好层次之后,编写每个模块的程序,分别生成项目符号,最后把生成的个项目符号用原理图的方式连接起来,然后编译、下载即可。由图例表示如下:
输入 输出(乐曲)
此实验设计中,我主要负责音乐发生器NoteTabs模块(ROM的定制过程)和最后的连接原理图部分。
六、实验过程及原始记录
1、音乐节拍发生器NoteTabs模块
这个模块用FPGA的片内ROM存放乐曲的简谱真值表,由一个二进制计数器为乐曲数据存储ROM的地址发生器随着NoteTabs中计数器按时钟频率做加法计数时,乐曲数据存储器ROM中的音符数据,将从ROM中的输出口输向音符译码电路Tonetaba
,所存储的乐曲就开始连续自然地演奏起来。
ROM的定制过程,利用MegawizardPlug-In Manager定制音符数据存储器music1
其过程如下:
在QuartusII主窗口Tools菜单中选择MegawizardPlug-In Manager命令,选择Create a new custom megafunction项。单击next按钮后,选择好后cyclone和VHDL语言后,产生对话框如下:
如上所示就完成了,LPM_ROM的定制流程,完成了music1模块的定制工作,其产生的music1的VHDL语言程序如下:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY altera_mf;
USE altera_mf.altera_mf_components.all;
ENTITY music1 IS
PORT
(
address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
clock : IN STD_LOGIC ;
q : OUT S
文档评论(0)