VHDL乐曲演奏实验报告
乐器演奏电路设计-vhdl
重庆交通大学计算机与信息学院设计性实验报告班级:通信工程专业 07 级 2 班姓名(学号):实验项目名称:乐器演奏电路设计实验项目性质:设计性实验所属课程: VHDL 实验室(中心):指导教师:徐雯娟实验完成时间: 2009 年 12 月 13 日一、实验目的1,了解普通扬声器的工作原理;2,了解QuartusII4.1中提供了宏功能元件库mega_lpm。
3,使用LPM_ROM参数化存储模块。
二、实验内容及要求要求能够演奏出《友谊地久天长》的曲调或可另选一段较完整的曲调。
(扩展要求:能够从数码管上显示出当前曲调的简谱和频率)三、实验原理1,音符的频率:可以由上图中的U3获得,这是一个数控分频器。
由其clk 端输入一具有较高频率(这里是12MHz)的信号,通过U3分频后由SPKOUT输出,U3对clk 输入信号的分频比由11位预置数Tone[10..0]决定。
SPKOUT的输出频率将决定每一音符的音调,这样,分频计数器的预置值Tone[10..0]与SPKOUT 的输出频率,就有了对应关系。
2,音符的持续时间:须根据乐曲的速度及每个音符的节拍数来确定,图中模块U2的功能首先是为U3提供决定所发音符的分频预置数,而此数在U3输入口停留的时间即为此音符的节拍值。
模块U2是乐曲简谱码对应的分频预置数查表电路,其中设置了乐曲全部音符所对应的分频预置数(一共8个),每一音符的停留时间由音乐节拍和音调发生器模块U1的clk的输入频率决定(如为4Hz),这8个值的输出由对应于U2的3位输入值Index[2..0]确定。
3,乐谱的存储:在U1中设置了一个7位二进制计数器(计数最大值为65),作为音符数据ROM 的地址发生器。
这个计数器的计数频率若选为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。
随着U1中的计数器按4Hz的时钟速率作加法计数时,即随地址值递增时,音符数据ROM 中的音符数据将从ROM中通过ToneIndex[2..0]端口输向U2模块,乐曲就开始连续自然地演奏起来了。
EDA课程设计---乐曲硬件演奏电路的VHDL设计
EDA课程设计题目:乐曲硬件演奏电路的VHDL设计一、 设计题目:乐曲硬件演奏电路的VHDL 设计二、 设计目标:1)能够播放“梁祝”乐曲。
2)能够通过LED 显示音阶。
3)具有“播放/停止”功能,并在此基础上实现“按键演奏”的电子琴功能。
三、 设计原理:1. 音乐基础知识一段简单乐谱由音调和节拍组成,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
音符的节拍我们可以举例来说明。
在一张乐谱中,我们经常会看到这样的表达式,如1=C 44、1=G 43……等等。
以43为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。
比如:图1其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。
1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。
那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。
我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。
2.原理图框图:图2.框图3.原理图说明音乐播放原理说明音符的频率由数控分频器模块Speakera产生。
ToneTaba模块从NoteTabs模块中输入的音符数据,将对应的分频预置数据传送给Speakera模块,并将音符数据送到LED模块显示音阶。
NoteTabs模块中包含有一个音符数据ROM,里面存有歌曲“梁祝”的全部音调,在此模块中设置了一个8位二进制计数器,作为音符数据ROM的地址发生器。
这个计数器的计数频率为4Hz,即每一个数值的停留时间为0.25秒。
例如:“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒钟时间,所对应的“3”音符分频预置数为1036,在Speakera的输入端停留了1秒。
基于VHDL的乐曲演奏设计与实现
硬件述语 言 , 括系统 行为级 、 包 寄存 器传输 级 和逻
辑 门级多个设计层次。它具有 强大 的行 为描述 能力 ,
可 以用 简 洁 明确 的源代码 来 描述 复 杂 的逻 辑 控制 。 设计者可 以利 用 V D H L程序 , 用 “ 采 自顶 而下 ” 的方
图 1 设 计 流 程 图
事 检 测 与 自动 化 装 置研 究 。
音 阶产生 部分 由分 频器和选 择器组 成 。分频 器
产 生音 阶信 号 , 由于音 阶信 号频 率 只有 几百 赫 兹 至 上 千赫兹 , 而系 统 的主 频选 用 1 H , 么 分频 器 2M z那
21 0 1午第 2期
工 业 仪 表 与 自动化 装 置
4器件进行验证 , 果表 明该设 计能很好 地 实现 乐 曲的 自动演奏 、 结 暂停及 恢复功 能。
关 键 词 : 曲 演 奏 ; H L M x lsI 乐 V D ; aPu 1
中图分 类号 :P 0 T 32
文献标志码 : A
文章编号 :0 0— 6 2 2 1 )2— 0 2— 3 10 0 8 ( 0 1 0 0 3 0
择模块 控制音 阶发 生部 分 , 连续 地 演奏 出一段 乐 能 曲; 数器采 用可预置 计数器 , 计 主要实 现 的是连 续演 奏和暂 停功能 。
2 1 音阶模块 .
收 稿 日期 :0 0— 9—2 21 0 5
基 金项 目 : 省 级 自然科 学 重 点 项 目资 助 ( J0 8 1 1 安徽 K20 A 0 ) 作者 简 介 : 崔袜 ( 95) 女 , 南 个 旧 人 , 验 师 , 16 , 云 实 本科 , 要 从 主
t e s se .smu ain.a d d wno d d t EX1 h y tm i lto n o la e o FL OK e is EPF1 s re OLC8 — 4 d vc s t e f . e 0KI 4 e ie o v r y Th i r s t h w h tt i e in c n b o d f ra t mai sc p a e ul s o ta h sd sg a e g o o u o tc mu i ly,p u e a d r s m e fncin. s a s n e u u to
VHDL电子琴实验报告
VHDL电子琴实验报告
实验目的:
本实验的目的是设计一个VHDL电子琴,通过FPGA实现,实现按键发出不同的音调,并通过扬声器输出对应的音频信号,达到模拟真实电子琴的效果。
实验原理:
VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,用于描述数字电路的行为和结构。
在本实验中,我们将使用VHDL语言描述电子琴的按键和音调的对应关系,通过FPGA实现电子琴的功能。
电子琴实验主要包含两个部分:输入部分和输出部分。
输入部分是按键,按下不同的按键会发出不同的音调。
输出部分是扬声器,通过扬声器输出对应的音频信号。
实验步骤:
1.确定电子琴的按键数量和对应的音调。
2.使用VHDL语言描述电子琴的按键和音调的对应关系。
3.将VHDL代码综合成逻辑电路网表。
4.将逻辑电路网表烧录到FPGA中。
5.连接扬声器到FPGA输出引脚。
6.按下不同的按键,测试扬声器输出的音频信号是否正确。
实验结果:
经过实验测试,我们成功实现了一个简单的VHDL电子琴。
按下不同的按键,扬声器输出对应的音调。
通过调整VHDL代码中的音频频率,可以改变电子琴的音调高低。
实验总结:
通过本实验,我们深入理解了VHDL语言的应用和FPGA的原理。
电子琴作为一个实际应用案例,充分展示了数字电路设计的魅力。
在今后的学习和工作中,我们将能更加熟练地应用VHDL语言和FPGA技术,设计更加复杂的数字电路系统。
VHdl乐曲演奏实验
EDA课程设计实验报告专业:班级:姓名:LSC学号:指导教员:一、试验名称:乐曲自动演奏器二、试验目的:1. 使用FPGA 控制蜂鸣器演奏乐曲梁祝中的一段;2. 初步学会利用结构建模方法设计程序。
三、试验内容:1. 利用时钟分频进行音调和音长的设定;2. 利用整个程序,播放梁祝乐曲;3. 让LED 灯随着音乐的节拍显示,分高、中、低三种频率显示。
四、试验要求:1. 将时钟频率分别分成6MHz 和4Hz 两种;2. 利用功能框图建立整个程序,清晰的播放出梁祝乐曲。
五、试验背景及基本原理:5.1乐曲演奏基本原理:乐曲演奏的原理是这样的:组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声。
5.2音调的控制频率的高低决定了音调的高低。
音乐的十二平均率规定:每两个8度音(如简谱中的中音1与高音1)之间的频率相差一倍。
在两个8度音之间,又可分为12个半音,每两个半音的频率比为12√2。
另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音[4]。
由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率,如表所示:5.3音名与频率的关系所有不同频率的信号都是从同一个基准频率分频得到的。
由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。
若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;若基准频率过高,虽然误差变小,但分频数将变大。
实际的设计综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。
本试验中选取6MHz为基准频率。
若无6MHz的基准频率,则可以先分频得到6MHz,或换一个新的基准频率。
实际上,只要各个音名间的相对频率关系不变,演奏出的乐曲听起来都不会"走调"。
VHDL实验报告
实验者:黄成勇学号:3110008723班级:电子(4)班日期:2012年12月30日实验一:应用Quart us II 完成基本组合电路设计(1) 实验目的:熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。
(2) 实验容1:首先利用QuartusⅡ完成2选1多路选择器的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出仿真波形。
最后在实验系统上进行硬件测试,验证本项设计的功能。
2选1多路选择器:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY mux21a ISPORT ( a, b, s: IN BIT;y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGINPROCESS (a,b,s)BEGINIF s = '0' THEN y <= a ; ELSE y <= b ;END IF;END PROCESS;END ARCHITECTURE one ;双2选1多路选择器2选1多路选择器功能时序波形(3) 实验容2:将此多路选择器看成是一个元件mux21a,利用元件例化语句。
例化程序:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY mux31a ISPORT ( a1, a2,a3, s0,s1: IN STD_LOGIC;outy : OUT STD_LOGIC );END ENTITY mux31a;ARCHITECTURE bhv OF mux31a ISCOMPONENT(a,b: IN STD_LOGIC;s: IN STD_LOGIC);END COMPONENT;BEGINu1 : MUX21A PORT MAP(a=>a2,b=>a3,s=>s0,y=>tmp);u2 : MUX21A PORT MAP(a=>a1,b=>tmp,s=>s1,y=>outy);END ARCHITECTURE BHV ;(4) 实验容3:引脚锁定以及硬件下载测试。
简易乐曲播放器-数字电路与逻辑设计报告
数字电路与逻辑设计实验报告简易乐曲播放器一、设计课题的任务要求基本任务:设计制作一个简易乐曲播放器。
1. 播放器内预存3 首乐曲;2. 播放模式:顺序播放、随机播放,并用数码管或LED 显示当前播放模式;顺序播放:按内部给定的顺序依次播放3 首乐曲;随机播放:随机产生一个顺序播放3 首乐曲;3. 用数码管显示当前播放乐曲的顺序号;4. 设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;5. 设置Next 和Previous 键,按Next 键可以听下一首,按Previous 键回到本首开始;提高要求:1.用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;2.自拟其它功能。
二、系统设计(设计思路、总体框图、分块设计)设计思路:由于一般乐曲最短音符为四分音符,则总体设计思路为每次播放一个四分音符,持续时间1/4秒(分频),并依次循环播放每个四分音符,每个四分音符对应音调利用1M分频器分频产生,播放功能则利用蜂鸣器播放当前音调对应频率值即可。
主题设计完成后,加入各控制功能,显示功能。
总体框图:结构框图:方框图:ASM图:暂停暂停MDS图:分块设计:1.分频模块(1)音调:在声乐中,每个音调对应一个频率,而本次实验即应用1M的时钟分频为各个音调所对应的频率,由于每次输出仅有一个频率,则可以在某个四分音符播放时选择分频为哪个音调对应的频率。
由于宏单元使用不够,改为先将1M时钟4分频,再利用4分频后的时钟分为各个音调对应的频率以减小计数器最大计数值。
(2)音长:由于一般乐曲中最短音长为四分音符,并设定全音符音长为1s,四分音符音长为4s,利用每次播放一个四分音符的思路依次播放每个音符(全音符播放4次,半分音符2次)直至有其他控制。
即需对1MHz分频为4Hz。
2.控制模块(1)模式控制A.顺序模式:依次播放每个四分音符,播完3首歌曲后循环B.随机模式:利用异或产生随机数并在播完歌曲后(或按下一首)利用所产生的随机数播放另两首歌曲中的一首C.用户自定义模式:a.顺序播放:依次按1、2、3的顺序播放歌曲并循环b.倒序播放:依次按3、2、1的顺序播放歌曲并循环(2)按键控制A.暂停:在任意播放时刻按下即暂停播放,并记下断点处,蜂鸣器消声,所有彩灯数码管熄灭,一切功能键失效,释放时即从断点处恢复B.下一首:在任意播放时刻按下即按当前模式播放下一首歌曲C.本首重放:在任意播放时刻按下即从播放当前播放乐曲的第一个四分音符处开始播放D.上一首:在任意播放时刻按下即按当前模式播放上一首歌曲3.显示模块(1)彩灯播放某个四个分音符时,根据当前播放音调按七个简谱显示在七个彩灯上(2)数码管第一个数码管显示播放模式:顺序显示0,随机显示8,用户自定义正序显示1,用户自定义倒序显示2第二个数码管显示当前播放曲目序号需要控制两个数码管显示时的时钟分配问题(利用视觉暂留控制1M时钟二分频依次点亮两个数码管)(3)蜂鸣器依次播放所需播放的四分音符三、仿真波形及波形分析本实验仿真着实不易。
VHDL实验报告
年月日VHDL实验报告学院专业学号姓名实验1 译码器设计一、实验原理1、译码器是数字系统中常用的组合逻辑电路,常用于地址译码。
74LS138是最常用的一种小规模集成电路,它有3个二进制输入端和8个译码输出端。
表1.1是它的真值表。
表1.1 3-8 译码器真值表2、普通的LED数码管由7段和一个点组成,使用它进行显示,需要译码驱动。
本实验实现一个七段LED显示译码电路。
为了实验方便,在译码之前加入一个4位二进制加法计数器,当低频率的脉冲信号输入计数器后,由7段译码器将计数值译为对应的十进制码,并由数码管显示出来。
图1.1为此电路的原理图。
图1.1 7段LED译码显示电路二、实验内容1、设计一个4-16译码器。
2、设计轮流显示表1.2所示字符的程序。
表1.2 字母显示真值表3、通过仿真,观察设计的正确性。
4、下载、验证设计的正确性。
三、源程序1、4-16译码器。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decode ISPORT( d0, d1, d2,d3, s1 ,s2 ,s3:IN STD_LOGIC;Y : OUT STD_LOGIC_VECTOR ( 15 DOWNTO 0 ) );END decode;ARCHITECTURE rtl OF decode ISSIGNAL indata : STD_LOGIC_VECTOR ( 3 DOWNTO 0 );BEGINIndata <= d3 & d2 & d1 & d0 ;PROCESS ( indata, s1, s2, s3 )BEGINIF (s1 ='1' AND s2='0' AND s3 = '0' ) THENCASE indata ISWHEN "0000" => Y <= "1111111111111110" ;WHEN "0001" => Y <= "1111111111111101" ;WHEN "0010" => Y <= "1111111111111011" ; WHEN "0011" => Y <= "1111111111110111" ;WHEN "0100" => Y <= "1111111111101111" ;WHEN "0101" => Y <= "1111111111011111" ;WHEN "0110" => Y <= "1111111110111111" ;WHEN "0111" => Y <= "1111111101111111" ;WHEN "1000" => Y <= "1111111011111111" ;WHEN "1001" => Y <= "1111110111111111" ;WHEN "1010" => Y <= "1111101111111111" ; WHEN "1011" => Y <= "1111011111111111" ;WHEN "1100" => Y <= "1110111111111111" ;WHEN "1101" => Y <= "1101111111111111" ;WHEN "1110" => Y <= "1011111111111111" ;WHEN "1111" => Y <= "0111111111111111" ;WHEN OTHERS=> NULL;END CASE;ELSEY <= "1111111111111111" ;END IF;END PROCESS;END rtl;2、轮流显示表1.2所示字符的程序。
课程设计(论文)基于vhdl的简易乐曲演奏器的设计
1 引言VHDL是一种硬件描述语言,它可以对电子电路和系统的行为进行描述,基于这种描述,结合相关的软件工具,可以得到所期望的实际电路与系统。
使用VHDL语言描述的电路,可以进行综合和仿真。
然而,值得注意的是,尽管所有VHDL代码都是可仿真的,但并不是所有代码都能综合。
VHDL被广泛使用的基本原因在于它是一种标准语言,是与工具和工艺无关的,从而可以方便地进行移植和重用。
VHDL两个最直接的应用领域是可编程逻辑器件(PLD)和专用集成电路(ASIC),其中可编程逻辑器件包括复杂可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA)。
关于VHDL最后要说明的是:与常规的顺序执行的计算机程序不同,VHDL 从根本上讲是并发执行的。
在VHDL中,只有在进程(PROCESS)、函数(FUNCTION)和过程(PROCEDURE)内部的语句才是顺序执行的。
本课程设计主要是基于VHDL文本输入法设计乐曲演奏电路,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,通过按键输入来控制音响或者自动演奏已存入的歌曲。
系统实现是用硬件描述语言VHDL按模块化方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲(当然由于条件限制,暂不进行功能验证,只进行编程和时序仿真)。
该设计最重要的一点就是通过按键控制不同的音调发生,每一个音调对应不同的频率,从而输出对应频率的声音。
我们知道,与利用单片机来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具与硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
2 整体功能介绍2.1准备知识在本次设计中采用了铃声《北京欢迎你》作为要播放的乐曲,它的旋律如下:3 5 3 2 3 2 3 3 2 6 1 3 2 22 1 6 1 23 5 2 3 6 5 6 2 1 12 1 6 1 23 5 2 3 6 5 5 3 -2 3 2 1 5 6 2 5 3 3 2 3 (加粗表示低音,其他为中音)根据声乐知识,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果是本实验的关键。
VHDL实验:乐曲演奏
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY song IS PORT( clk_4MHz, clk_4Hz: IN STD_LOGIC; --预置计数器和乐谱产生器的时钟 digit: BUFFER STD_LOGIC_VECTOR(6 DOWNTO 0); --低三位表示低音,中间三位表示中音,最高位表示高音;本 曲仅仅有高音1,故此用1位表示。 speaker: out STD_LOGIC --扬声器 ); END song; ARCHITECTURE song_arch OF song IS
WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN
44=>digit<="0001000"; 46=>digit<="0010000"; 48=>digit<="0000011"; 50=>digit<="0001000"; 52=>digit<="0000110"; 54=>digit<="0000110"; 56=>digit<="0000101"; 58=>digit<="0000101"; 60=>digit<="0000101"; 62=>digit<="0000101"; 64=>digit<="0011000"; 66=>digit<="0011000"; 68=>digit<="0000111"; 70=>digit<="0010000"; 72=>digit<="0000110";
广东工业大学VHDL实验报告
VHDL与集成电路设计实验报告时间:第7周周四实验一应用QuartusII完成基本组合电路设计一、实验目的:熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。
二、实验内容:首先利用QuartusⅡ完成2选1多路选择器(例1)的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出图1-1所示的仿真波形。
最后在实验系统上进行硬件测试,验证本项设计的功能。
三、实验程序:...COMPONENT MUX21APORT ( a,b,s : IN STD_LOGIC;y : OUT STD_LOGIC);END COMPONENT ;...u1 : MUX21A PORT MAP(a=>a2,b=>a3,s=>s0,y=>tmp);u2 : MUX21A PORT MAP(a=>a1,b=>tmp,s=>s1,y=>outy);END ARCHITECTURE BHV ;【例1】ENTITY mux21a ISPORT ( a, b, s: IN BIT;y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGINPROCESS (a,b,s)BEGINIF s = '0' THEN y <= a ; ELSE y <= b ;END IF;END PROCESS;END ARCHITECTURE one ;五、实验结果及分析仿真结果:仿真结果分析:这是一个选择输出功能,当s为高电平时,输出b;当s为低电平时,输出为a。
输出存在延迟。
VHDL与集成电路设计实验报告时间:第8周周四实验四:移位相加硬件乘法器设计一、实验目的:学习应用移位相加原理设计8位乘法器。
二、实验内容:(1) 实验内容1:根据给出的乘法器逻辑原理图及其各模块的VHDL描述,在QuartusII上完成全部设计,包括编辑、编译、综合和仿真操作等。
乐曲硬件演奏电路的VHDL设计报告+程序
一、设计题目:乐曲硬件演奏电路的VHDL设计二、设计目标:了解一般乐曲演奏电路设计设计方法,学习VHDL语言,熟悉EDA设计软件QuartusII和MAX+plusⅡ,加强独立完成电子设计的能力。
(1)能够播放“梁祝”乐曲。
(2)能够通过LED显示音阶。
(3)(选作)具有“播放/停止”功能,并在此基础上实现“按键演奏”的电子琴功能。
主芯片型号为FLEX10K10LC84-4三、实验电路的工作原理:(演奏电路逻辑图)组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能够连续演奏所需的两个基本要素,设计演奏电路的关键就是获得这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果。
演奏电路逻辑图有三部分:音乐节拍和音调发生器、简谱码对应的分频预置数查表电路、数控分频与演奏发生器。
演奏电路逻辑图:四、设计内容:1.完成程序的编辑工作。
2.将音乐数据制作成LMP_ROM文件.3.将程序加载到MAX+plusⅡ中进行编译、仿真,并保存仿真结果。
4.到实验室进行下载验证。
引脚进行锁定,然后下载到实验芯片中观察实验结果。
五、仿真结果:1.音乐节拍和音调发生器(NoteTabs.VHD)notetabs模块中设置了一个8位二进制计数器(计数最大值138),作为音符数据ROM的地址发生器。
这个计数器的计数频率选为4Hz,即每一个计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。
随着notetabs模块中的计数器按4Hz的时钟速率作为加法计数时,即随地址值递增时,音符数据ROM中的音符数据将从ROM中通过ToneIndex[3..0]端口输向ToneTaba模块,“梁祝”乐曲就开始连续自然的演奏起来了。
Notetabs模块仿真图:2.简谱码对应的分频预置数查表电路(T oneTaba.VHD)音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,tonetaba模块的功能首先是为speakera提供决定所发音符的预置数,而此数在speakera输入口停留的时间即为此音符的节拍值。
乐曲演奏实验报告
乐曲演奏实验报告一、实验目的1.学习VHDL 基本单元电路的设计应用,进一步掌握EDA 的多层次设计方法。
2.学习利用数控分频器设计硬件乐曲演奏电路。
二、实验内容及要求1.实验内容利用可编程逻辑器件FPGA ,设计乐曲硬件电路,可自动演奏乐曲。
2.实验要求要求能够自动演奏出《梁祝》的曲调。
三、实验原理实验结构框图《梁祝》简谱如下:音乐发生器 NoteTabs 音符译码电路 ToneTaba 数控分频电路 Speakera时钟信号1(4HZ )时钟信号2(12MHZ ) 数码管显示 对应简谱扬声器发生 二极管显示音符高低简谱中音符和频率的关系如下:低音名频率(Hz) 中音名频率(Hz) 高音名频率(Hz)低音1 261.63 中音1 523.25 高音1 1046.5低音2 293.66 中音2 587.33 高音2 1174.66低音3 329.63 中音3 659.25 高音3 1318.51低音4 349.23 中音4 698.46 高音4 1396.92低音5 392.00 中音5 783.99 高音5 1567.98低音6 440.00 中音6 880.00 高音6 1760低音7 493.88 中音7 987.76 高音7 1975.52组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能演奏所需的两个基本要素:1.音符的频率可以由图中的speakera获得,它是一个数控分频器,SPKOUT的输出频率将决定每一个音符的音调。
2.音符的持续时间需根据乐曲的速度和每个音符的节拍数来确定,模块Tonetaba的功能首先为Speakera提供决定所发音符的分频预置数,而此数在Speakera输入口停留时间即为此音符的节拍值,每一音符的停留时间由音乐节拍和音调发生器模块NoteTabs 的clk的输入频率决定,计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。
vhdl实验报告--蜂鸣器
VHDL实验报告一、实验目的1、掌握蜂鸣器的使用;2、通过复杂实验,进一步加深对VHDL语言的掌握程度。
二、实验原理乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。
而要准确地演奏出一首乐曲,仅仅让蜂鸣器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。
由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。
乐曲的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。
在2个八度音之间,又可分为12个半音。
另外,音符A(简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。
由此可以计算出简谱中从低音l至高音1之间每个音符的频率,如表2.1所示。
音名频率/Hz音名频率/Hz音名频率/Hz低音1261.6 中音1523.3 高音11045.5低音2293.7 中音2587.3 高音21174.7低音3329.6 中音3659.3 高音31318.5低音4349.2 中音4698.5 高音41391.1低音5392 中音5784 高音51568低音6440 中音6880 高音61760低音7493.9 中音7987.8 高音71975.5表2.1 简谱音名与频率的对应关系产生各音符所需的频率可用一分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。
若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。
实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。
实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。
音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。
因此,要控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,本例所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s的话,那么一拍所应该持续的时间为0.25秒,则只需要提供一个4HZ的时钟频率即可产生四分音符的时长。
乐曲演奏硬件电路设计报告
乐曲硬件演奏电路设计一、设计任务要求在EDA开发平台上利用VHDL语言设计数控分频器电路,利用数控分频的原理设计乐曲硬件演奏电路,并定制LPM-ROM存储音乐数据,以古典名曲“梁祝”乐曲为例,将音乐数据存储到LPM-ROM,就达到了以纯硬件的手段来实现乐曲的演奏效果。
与利用微处理器来实现乐曲演奏相比,一纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
二、系统设计总述系统设计由以下五个部分组成,分别是乐曲演奏电路基本原理,音符频率的获得,乐曲节奏的控制,乐谱发生器,乐曲演奏电路总体设计流程这五个部分。
乐曲演奏电路基本原理硬件电路的发声原理是,因为声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。
乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。
乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。
不过要准确地演奏出一首乐曲,仅仅让扬声器能够发生还是不够的,还必须准确地控制乐曲的演奏节奏,就是指乐曲能够连续演奏的两个关键因素:乐曲中每个音符的发声频率及其持续时间。
音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频获得。
由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。
若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。
若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。
实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。
本设计中选取750KHz的基准频率。
由于现有的高频时钟脉冲信号的频率为12MHz,故需先对其进行16分频,才能获得750KHz的基准频率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计性实验报告班级:姓名(学号):实验项目名称:乐曲演奏实验实验项目性质:设计性实验所属课程: EDA基础实验室(中心):指导教师:实验完成时间: 2009 年 12 月 13 日教师评阅意见:签名:年月日实验成绩:一、实验目的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 ,所存储的乐曲就开始连续自然地演奏起来。
NoteTabs Speakera TonetabaROM的定制过程,利用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 ISPORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END music1;ARCHITECTURE SYN OF music1 ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0);COMPONENT altsyncramGENERIC (intended_device_family : STRING;width_a : NATURAL;widthad_a : NATURAL;numwords_a : NATURAL;operation_mode : STRING;outdata_reg_a : STRING;address_aclr_a : STRING;outdata_aclr_a : STRING;width_byteena_a : NATURAL;init_file : STRING;lpm_hint : STRING;lpm_type : STRING);PORT (clock0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END COMPONENT;BEGINq<= sub_wire0(3 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (intended_device_family => "Cyclone",width_a => 4,widthad_a => 8,numwords_a => 256,operation_mode => "ROM",outdata_reg_a => "CLOCK0",address_aclr_a => "NONE",outdata_aclr_a => "NONE",width_byteena_a => 1,init_file => "data.mif",lpm_hint => "ENABLE_RUNTIME_MOD=NO",lpm_type => "altsyncram")PORT MAP (clock0 => clock,address_a => address,q_a => sub_wire0);END SYN;在定制ROM的过程中,由于需要存入122个音符数据,选择ROM的数据位宽为8,地址为为8(共计256个字),ROM的类型选择为Auto。
根据友谊天长地久的音乐简谱,以及简谱中的低、中、高和额节拍与发生频率的关系等等,化成个音符数字有122个,存入ROM中。
在数据文件编辑窗中,在mif格式表格中填入友谊天长地久的122个音符数据,并以十进制填入,最后保存数据文件名为data.mif,存入原路径中。
2、音乐节拍发生器NoteTabs的VHDL设计其源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs ISPORT(clk4hz:IN STD_LOGIC;Index2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Tone:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END NoteTabs;ARCHITECTURE one OF NoteTabs ISCOMPONENT MUSIC1PORT (address:IN STD_LOGIC_VECTOR(7 DOWNTO 0);clock:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNAL Counter:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL INDEX1:STD_LOGIC_VECTOR(3 DOWNTO 0);BeginCNT8:PROCESS(clk4hz,Counter)BEGINIF Counter=122 THEN Counter<="00000000";ELSIF(clk4hz'EVENT AND clk4hz='1') THEN Counter<=Counter+1;END IF;END PROCESS CNT8;u1:music1 PORT MAP(address=>Counter,clock=>clk4hz,q=>Index1);Tone<=Index1;END one;◆在源程序中Tone是音乐节拍发生器输出地音符数据;clk4hz是计数时钟输入端,该信号作为音符的快慢信号,频率越高,时钟的输出节拍速度就越快,演奏的速度也越快。
◆将以上设计的音乐节拍发生器设置成可调用的原件,以被高层使用,其生成项目符号为:3、音符译码电路Tonetaba模块,其程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba ISPORT(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(12 DOWNTO 0));END;ARCHITECTURE one OF ToneTaba ISBEGINPROCESS(Index)BEGINCASE Index ISWHEN"0000"=>Tone<="1111111111111";CODE<="0000";HIGH<='0';WHEN"0101"=>Tone<="0110000010001";CODE<="0101";HIGH<='0';WHEN"0110"=>Tone<="0111000111110";CODE<="0110";HIGH<='0';WHEN"1000"=>Tone<="1000100010001";CODE<="0001";HIGH<='1';WHEN"1001"=>Tone<="1001010110010";CODE<="0010";HIGH<='1';WHEN"1010"=>Tone<="1010000100101";CODE<="0011";HIGH<='1';WHEN"1100"=>Tone<="1011000001000";CODE<="0101";HIGH<='1';WHEN"1101"=>Tone<="1011100011110";CODE<="0110";HIGH<='1';WHEN"1111"=>Tone<="1100010001000";CODE<="0001";HIGH<='1';WHEN OTHERS=>Tone<="1111111111111";CODE<="0000";HIGH<='0';END CASE;END PROCESS;END;◆在源程序中,Index[3..0]是音乐节拍发生器输出地音符数据;Tone[12..0]是为数控分频模块提供音符频率的初始值,此处有一个音符译码输出CODE[3..0]和音高指示信号HIGH可以通过数码管和LED来显示乐曲演奏时对应得音符和高低音。