乐器演奏电路设计-vhdl
Verilog--HDL—乐曲演奏电路设计
V e r i l o g--H D L—乐曲演奏电路设计(总13页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--湖北文理学院Verilog HDL乐曲演奏电路设计专业:自动化学号:64姓名:一天虹影设计目的与要求1.课程设计目的:1)加深对EDA技术的理解,掌握乐曲演奏电路的工作原理2)了解怎样控制音调的高低变化和音长,从而完成乐曲的自动循环演奏。
3)培养自主学习、正确分析和解决问题的能力2.课程设计要求:1)使用Verilog HDL设计乐曲演奏电路,系统实现是用硬件描述语言Verilog HDL 按分频控制的方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲。
2) 通过控制输出到扬声器的激励信号频率的高低和持续的时间,从而使扬声器发出连续的乐曲声,且当乐曲演奏完成时,保证能自动从头开始演奏。
3.该方案可以实现的功能:1)通过蜂鸣器播放音乐;2)通过三位动态数码管输出相应的高中低音符;3)通过一个开关实现两首乐曲的切换;4)在音乐播放的同时,会有led流水灯的闪烁.应用工具介绍作为当今最流行的计算机软件系统,EDA技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。
EDA技术介绍EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。
EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计[1]。
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秒。
乐曲硬件演奏电路设计
目录目录 0前言: (1)1.题目分析 (1)1.1 功能要求 (1)1.2 性能指标 (1)2.设计方案 (2)2.1顶层实体描述 (2)2.2模块划分 (3)2.3模块描述 (3)2.3.1 Speakera模块 (3)2.3.2 ToneTaba模块 (3)2.3.3 NoteTabs模块 (4)2.4顶层电路图 (5)3.方案实现 (5)3.1 NoteTabs模块仿真及描述 (5)3.2 ToneTaba模块仿真及描述 (5)3.3 Speakera模块仿真及描述 (6)3.4顶层电路仿真及描述 (6)4.硬件测试及说明 (6)5.结论 (7)6.课程总结 (7)7.附录 (8)前言:这次设计实验我做的是乐曲硬件演奏电路设计,通过在系统编程技术课程的学习,我已经学会了用VHDL语言来实现系统要求的电路设计。
VHDL语言具有良好的电路行为描述和系统描述的能力,用VHDL语言进行电子系统的设计非常方便和实用,而基于VHDL的自顶向下的设计方法是其很大的一个优点。
1.题目分析1.1 功能要求(1)播放歌曲(2)简谱码输出显示在数码管显示(3)通过LED灯显示音阶1.2 性能指标(1)乐曲硬件演奏电路的基本原理乐曲都是由一连串的音符组成,每一音符对应着一个确定的频率,按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。
我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,所以,掌握好一首歌曲的节奏,就能完整地演奏出来。
(2)音符频率和乐曲节奏多个不同频率的信号可通过对某个基准频率进行分频器获得,本设计中选取750KHz的基准频率,由于clk端输入的是较高频率12MHz信号,可以对其进行16分频。
计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。
第4章应用VHDL设计数字系统-电子琴和音乐播放器的设计
CLK
IF EN = '1' THEN
--检测是否允许计数(同步使能)
IF CNTI < 9 THEN --检测是否小于9
RST
CNTI := CNTI + 1; --小于9,允许加1计数
EN
ELSE
CNTI := (OTHERS =>‘0’); --大于等于9,计数值清零 END IF;
inst
END IF;
END IF;
IF CNTI = 9 THEN COUT <= ‘1’; --计数等于9,输出进位信号
ELSE COUT <= '0';
END IF;
CNT <= CNTI; --将计数值向端口输出
END PROCESS;
END behav;
CNT[3..0] COUT
项目1:电子琴的设计
仿真结果:10进制计数器设计
结论: 计数器就可以完成分频器的任务!
项目1:电子琴的设计
设计关键:N进制计数器设计——可变分频器
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
CNT_N CLK
RST
ENTITY CNT_N IS PORT (
CNT[11..0] COUT
项目1:电子琴的设计
设计关键:N进制计数器设计——可变分频器
ARCHITECTURE behav OF CNT_N IS
BEGIN
PROCESS(CLK, RST, EN)
VARIABLE CNTI : STD_LOGIC_VECTOR(11 DOWNTO 0);
EDA实验报告5_乐曲硬件演奏电路设计
EDA技术与应用实验报告姓名学号专业年级电子信息工程实验题目乐曲硬件演奏电路设计实验目的1.学习利用数控分频器设计硬件乐曲演奏电路2.掌握模块化和层次化的设计方法以及音符编码的设计思想实验原理1.一定频率的矩形波通过扬声器可以发出相应频率的声音,乐曲是由一系列的音符组成的。
所以,如果我们通过控制每个音符的发音频率值及其持续的时间,就可以以纯硬件的手段,利用这些数值来实现所希望演奏的乐曲。
2.该硬件演奏电路由三个模块构成<1>音符数据ROM的地址发生器模块NoteTabs.vhdl内置8位二进制计数器,作为ROM的地址发生器,计数频率4Hz,即每一计数值的停留时间为0.25s,恰为全音符设为1s时,四四拍的4音符持续时间。
随着NoteTabs中的计数器按4Hz的时钟速率作加法计数即地址值递增时,ROM中的音符数据将通过ToneIndex[3..0]输向ToneTaba模块,乐曲即开始演奏起来。
<2>乐曲简谱码对应的分频预置数查表电路模块ToneTaba.vhdlToneTaba为Speakera提供决定所发音符的分频预置数,此数在Speakera输入口停留的时间即为此音符的节拍值。
输入Index[3..0]可确定乐曲全部音符所对应的分频预置数(13个)每一音符的停留时间由NoteTabs模块的clk决定(4Hz)。
<3>决定每一个音符音调的数控分频器模块Speakera.vhdl输入端clk输入一较高频率(12MHz)的信号,经Speakera分频,再经2分频以展宽脉冲后,由SpkOut输出。
11位预置数Tone[10..0]决定由clk输入信号的分频比,SpkOut输出的频率决定每一音符的音调。
实验内容1.定制存放LPM-ROM模块Music,在连续地址上存放乐曲的音符数据,2.用vhdl文本输入法和元件例化语句完成NoteTabs.vhdl的设计,该模块包含音符数据ROM模块Music.vhdl3.完成ToneTaba.vhdl的设计,此模块给数控分频模块提供每个音符所对应的分频预置数,即计数初值4.完成Speakera.vhdl的设计,该模块是一个初值可变的加法计数器。
VHDL电子琴设计
VHDL电子琴设计电子琴是一种键盘乐器,其本质就是电子合成器,它采用的是大规模集成电路。
而VHDL全名Very-High-Speed Integrated Circuit Hardware Description Language。
VHDL语言是一种用于电路设计的高级语言,是一种在电子工程领域通用的硬件描述语言。
而本设计就是基于VHDL而设计的电子琴,使用Quartus II 程序实现电子琴的功能。
在Quartus Ⅱ软件平台上编译下载到FPGA实验箱,采用FPGA器件驱动小扬声器构成一个乐曲演奏电路。
该电子琴的设计大体由三个模块构成,分别为控制模块,乐曲存储及循环播放模块,顶层模块。
本设计可以实现手动电子琴储存和自动播放音乐功能。
1 引言 (1)1.1研究背景及课题意义 (1)1.1.1电子琴的特点 (1)1.1.2 VHDL的特点 (1)1.1.3 VHDL的电子琴的应用 (2)1.1.4 本论文实现的基本要求 (2)2 基于FPGA模块的电子琴设计思路 (3)2.1基于FPGA模块电子琴的方案 (3)2.1.1 电子琴的基本按键的定义与实现 (3)2.1.2 电子琴储存模块的实现 (4)2.1.3 电子琴回放模块的实现 (5)3 基于VDHL的电子琴的系统顶层设计思路 (7)3.1 用QUARTUSII进行电子琴系统顶层设计 (7)4 基于VDHL的电子琴设计总结 (7)1 引言1.1研究背景及课题意义1.1.1电子琴的特点电子琴是一种电子乐器。
电子乐器的产生,首先是用来模仿管风琴(Pipe Organ)。
管风琴发明于公元前,鼎盛于17世纪。
它是靠水力或人力鼓风,吹响与建筑物一样高大的管子而发音的乐器。
管风琴是大型键盘乐器,结构非常复杂。
管风琴有手键盘和脚键盘构成,有些手键盘多达4-5层。
一架管风琴的演奏可以和一个管弦乐队媲美。
管风琴结构复杂,体积庞大,造价昂贵,受演出场地、环境限制,不易搬动。
课程设计(论文)基于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八音符电子琴电路设计
目录一、设计任务与要求 (1)二、总体框图 (2)三、选择器件 (5)四、功能模块 (6)1.Songer模块 (6)1.1NoteTabs模块 (6)1.2ToneTaba模块 (11)1.3Speakera模块 (13)2.div模块 (16)3.七段译码器模块 (18)五、总体设计电路图 (21)1.顶层设计的电路原理图 (21)2.顶层设计的仿真结果 (23)3.电路的管脚图 (23)六、结束语 (24)七、心得体会 (25)八音符电子琴电路设计一、设计任务与要求在EDA开发平台上利用VHDL语言设计一个八音符电子琴,由键盘输入控制音响或自动演奏。
用户可以将自己编制的乐曲存入电子琴,演奏时可以选择键盘输入乐曲或者自动演奏已存入的乐曲。
二、总体框图系统设计方案:方案一:采用单个的逻辑器件组合实现。
这样虽然比较直观,逻辑器件分工鲜明,思路也比清晰,一目了然。
但是由于元器件种类、个数繁多,而过于复杂的硬件电路也容易引起系统的精度不高、体积过大等不利因素。
例如八个不同的音符是由八个不同的频率来控制发出的,而采用方案一就需要运用不同的分频器来对信号进行不同程度的分频。
所用仪器之多显而易见。
方案二:采用VHDL语言编程来实现电子琴的各项功能。
系统主要由电子琴发声模块、选择控制模块和储存器模块组成。
和方案一相比较,方案二就显得比较笼统,只是把整个系统分为了若干个模块,而不牵涉到具体的硬件电路。
但是我们必须看到用超高速硬件描述语言VHDL的优势,它不仅具有良好的电路行为描述和系统描述的能力而且通俗易懂。
经过对以上两种方案的分析、比较和总结,我们选用方案二来进行八音符电子琴的设计。
八音符电子琴设计总体框图,如图1:图1 八音符电子琴设计总体框图该系统由三个模块:Songer、Div和SEG7(7段译码器)组成。
1. Songer模块:此模块包括3个小模块,分别是NoteTabs模块,ToneTab模块和Speakera模块。
乐曲硬件演奏电路的VHDL设计
乐曲硬件演奏电路的VHDL设计1.Songer顶层文件模块:LIBRARY IEEE; -- 硬件演奏电路顶层设计 USE IEEE.STD_LOGIC_1164.ALL; ENTITY Songer ISPORT ( CLK4MHZ : IN STD_LOGIC; --音调频率信号 CLK8HZ : IN STD_LOGIC; --节拍频率信号 pause: 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 IS COMPONENT NoteTabsPORT ( clk : IN STD_LOGIC;SWITCH: IN STD_LOGIC;ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); END COMPONENT; COMPONENT ToneTabaPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; CODE : OUTSTD_LOGIC_VECTOR (3 DOWNTO 0) ; HIGH : OUT STD_LOGIC;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) ); END COMPONENT;COMPONENT SpeakeraPORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGIC_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,SWITCH=>pause,ToneIndex=>ToneIndex); u2 : ToneTaba PORT MAP(Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1); u3 : Speakera PORT MAP(clk=>CLK4MHZ,Tone=>Tone, SpkS=>SPKOUT ); END;2.音乐节拍和音调发生器(NoteTabs.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY NoteTabs ISPORT ( clk : IN STD_LOGIC; switch: IN STD_LOGIC;ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); END;ARCHITECTURE one OF NoteTabs ISCOMPONENT MUSIC --音符数据ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END COMPONENT;SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0); BEGINCNT8 : PROCESS(clk,Counter)BEGINIF Counter=138 THEN Counter Counter , q=>ToneIndex, inclock=>clk); END;3.简谱码对应的分频预置数查表电路(ToneTaba.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba ISPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; CODE : OUTSTD_LOGIC_VECTOR (6 DOWNTO 0) ; HIGH : OUT STD_LOGIC;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) ); END;ARCHITECTURE one OF ToneTaba IS BEGINSearch : PROCESS(Index)BEGINCASE Index IS -- 译码电路,查表方式,控制音调的预置数 WHEN \WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS => NULL; END CASE; END PROCESS; END;4.数控分频与演奏发生器(Speakera.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY Speakera ISPORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC ); END; ARCHITECTURE one OF Speakera ISSIGNAL PreCLK, FullSpkS : STD_LOGIC; BEGINDivideCLK : PROCESS(clk)VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGINPreCLK 11 THEN PreCLK。
基于Verilog_HDL的乐曲演奏电路设计
1 引言随着EDA技术的进展,基于可编程的数字电子系统设计的完整方案越来越受到人们的重视。
与利用微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
如何使用EDA工具设计电子系统是人们普遍关心的问题。
本课程设计主要是采用FPGA器件驱动小扬声器构成一个乐曲演奏电路,FPGA器件选择Altera的EPF10K10,在MAX + plusⅡ的EDA软件平台上,实现了乐曲演奏电路的设计。
1.1 课程设计的目的本课程设计主要是基于Verilog HDL设计乐曲演奏电路,系统实现是用硬件描述语言Verilog HDL按分频控制的方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲。
该设计的目的在于加深对EDA技术的理解,掌握乐曲演奏电路的工作原理,了解怎样控制音调的高低变化和音长,从而完成乐曲的自动循环演奏。
1.2 课程设计的要求本课程设计中由于每一个音调对应不同的频率,从而输出对应频率的声音。
因此本设计要求通过控制输出到扬声器的激励信号频率的高低和持续的时间,从而使扬声器发出连续的乐曲声,且当乐曲演奏完成时,保证能自动从头开始演奏。
1.3 设计平台MAX + plusⅡ是美国Altera 公司的一种EDA 软件,用于开发CPLD 和FPGA 进行数字系统的设计。
2 应用工具介绍作为当今最流行的计算机软件系统,EDA技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。
2.1 EDA技术介绍EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。
基于VHDL语言的电子琴电路设计
基于VHDL语言的电子琴电路设计XX班XX 学号:XX摘要:由于近十年来资讯工业的蓬勃发展,伴随着微电子技术的快速发展,小至传统的门层(GATE LEVEL)设计,大到电话LCD的来电显示,电梯控制器,出租车计费器等等由硬件描述语言(HDL,hardware description language)的设计方式,无一不是电脑与IC设计相关应用所及之地,而不论是电脑本身或是其他应用,则正是数位电路的产物。
为得到理论与实际应用的结合,于是选择电子琴为研究课题,进行相关的实验,运用VHDL(Very high speed integrated circuit hardware description language)使得数位电路设计接近于软件演算法的实现,将传统的逻辑设计导向了系统层级和高阶电路合成的方向。
使用到的软件为Altera 的Max+PlusⅡ,使用它可使用一模拟器来模拟一系统的行为而不用实际建构一系统,另一方面合成编辑器可以将此系统行为描述转换成实现此系统的数位硬件.这些对于构建电子琴及声音处理制作有很大帮助.关键词:VHDL 电子琴电路设计Max+PlusⅡ1.选题背景:1.1选题背景:基于当前市场上的电子琴价格较昂贵,很难大众化,而且市场上大多电子琴靠硬件实现其功能,这样很难降低其成本,基于EDA技术的发展,我们可以利用软件实现电子琴的功能,从而降低成本,并且可以进行一定的功能扩展。
VHDL 适用于此类实用设备的模拟仿真,以并行和顺序的多种语句方式来描述在同一时刻中所有可能发生的事情,因此可以认为,VHDL具有描述由相关和不相关的多维时空组合的复合体系统的功能,因此要以多为并发的思路运用VHDL来完成电子琴的程序设计。
乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。
大多数的电子琴设计都有弹奏和播放功能。
进入20世纪90年代以后,VHDL技术得到了飞速的发展,电子系统的设计方法发生了很大的变化,传统的设计方法正逐步退出历史舞台,而基于EDA技术的可编程逻辑芯片设计成为电子系统设计的主流。
简易电子琴的VHDL仿真与实现
简易电子琴的VHDL 设计与实现一.设计课题与任务要求:设计制作一个简易电子琴演奏器。
原理概述:依据声乐知识,产生音乐的两个因素是音乐频率的持续时刻,音乐的十二平均率规定,每两个八音度之间的频率相差一倍,在两个八音度之间,又可分为12个半音。
每两个半音的频率比为4。
另外,音名A〔乐谱中的低音6〕的频率为440HZ,音名B到C之间,E到F 之间为半音,其余为全音。
由此能够计算出乐谱中从低音1到高音1之间每个音名的频率如下表所示。
全然要求:1、用8×8点阵显示“1234567”七个音符构成的电子琴键盘。
其中点阵的第一列用一个LED点亮表示音符“1”,第二列用二个LED点亮表示音符“2”,依此类推,如以如下面图所示。
图1点阵显示的电子琴键盘2、用BTN1~BTN7七个按键模拟电子琴手动演奏时的“1234567”七个音符。
当某个按键按下时,数码管显示相应的音符,点阵上与之对应的音符显示列全灭,同时蜂喊器演奏相应的声音;当按键弹开时数码管显示的音符灭掉,点阵显示恢复,蜂喊器停止声音的输出。
以如下面图所示为按下BTN3按键时点阵的显示情况。
图2按键按下后的点阵显示3、由拨码开关切换选择高、中、低音,并用数码管进行相应的显示。
4、通过按键BTN0进行复位,操纵点阵显示图1的初始状态。
提高要求:1、可通过一个拨码开关进行手动/自动演奏的切换,并与点阵显示配合增加自动演奏乐曲曲折折曲曲折折折折曲曲折折曲曲折折折折折折的功能。
2、增加手动演奏的音符存储、播放功能。
二.系统设计〔包括设计思路、总体框图、分块设计〕1.设计思路讲明:电子琴的设计包括七个模块:弹奏模块keyplay、自动演奏模块autoplay、查表及显示模块table、分频模块fenpin、存储模块store、七段数码管显示模块seg7和点阵的显示模块lattice。
弹奏模块keyplay依据按键动作key,和高中低模式选择mode产生指示音调的index_key。
乐曲硬件演奏电路的VHDL设计报告
EDA课程设计题目:乐曲硬件演奏电路的VHDL设计专业:通信工程班级:通信071姓名:葛鹏学号:0710920101一、设计题目:乐曲硬件演奏电路的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.简谱码对应的分频预置数查表电路(ToneTaba.VHD)音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,tonetaba模块的功能首先是为speakera提供决定所发音符的预置数,而此数在speakera输入口停留的时间即为此音符的节拍值。
用VHDL语言设计简易电子琴演奏
基于VHDL语言设计简易电子琴演奏电路摘要:生活中一首简单的歌也要遵循基本的乐理知识,歌曲要有固定的节拍,即每多少分音符为一拍,每小节几拍。
因此,拍子是音乐中最重要的组成部分,本课程设计主要采用EDA技术,基于VHDL语言设计一个简易的八音符电子琴,并且可以选择通过按键输入或者自动演奏来奏出存入的乐曲。
课程设计中,程序运行平台为MAX+plusIIo根据音符的分频预置数来弹奏出不同的音符,将演奏出的《小红帽》既而再通过各个子模块,编程,仿真,达到最终的验证。
关键字:EDA;VHDL;电子琴;音符;频率一、设计说明(一)EDA的技术及其发展当今世界,电子技术有了突飞猛进的发展,这使得现代电子产品融入并运用于各个领域,其性能也在逐步地提高。
现代电子技术的核心是EDA,EDA是电子设计自动化(ElectronicDesignAutomation)缩写,是90年代初从CAD、CAM、CAT和CAE的概念发展而来的,以硬件描述语言为系统逻辑描述的主要表达方式,并以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计电子系统到硬件系统。
EDA工具从数字系统设计的单一领域,发展到今天,应用范围已涉及模拟、微波等多个领域,包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。
可以说,EDA技术为现代电子理论和设计的表达与实现提供了可能。
(二)VHDL语言的特点常用硬件描述语言有VHDL、Verilog和ABEL语言,其中VHDL语言用的较为广泛,它的全英文名VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage,是以高级描述语言,系统级仿真和综合技术为特点,采用“自顶向下”的设计理念,VHDL具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。
乐曲硬件演奏电路设计
湖南人文科技学院课程设计报告课程名称:VHDL语言与EDA课程设计设计题目:乐曲硬件演奏电路设计系别:通信与控制工程系专业:电子信息工程班级:09电信学生姓名:学号:起止日期:2012年06月13日~2012年06月22日指导教师:教研室主任:指导教师评语:指导教师签名:年月日成绩评定项目权重成绩1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总成绩教研室审核意见:教研室主任签字:年月日教学系审核意见:主任签字:年月日摘要乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。
实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。
如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。
使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。
FPGA预装了很多已构造好的参数化库单元LPM器件。
通过引入支持LPM的EDA软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。
本课设在EDA开发平台上利用VHDL语言设计数控分频器电路,利用数控分频的原理设计乐曲硬件演奏电路,并定制LPM-ROM存储音乐数据,以“挥着翅膀的女孩”,“菊花台”,“两只老虎”,“世上只有妈妈好”等四首乐曲为例,将音乐数据存储到LPM-ROM,就达到了以纯硬件的手段来实现四首不同乐曲的演奏效果。
要想实现其他乐曲的演奏效果,只要修改LPM-ROM所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新定制LPM-ROM,连接到程序中就可以实现其它乐曲的演奏。
关键词:FPGA;EDA;VHDL;音乐目录设计要求 (1)1、方案论证与对比 (1)1.1方案一 (1)1.2方案二 (2)1.3综合对比 (2)2、乐曲演奏电路原理 (2)2.1 乐曲演奏电路原理框图 (2)2.2 音符频率的获取 (3)2.3 乐曲节奏的控制 (3)2.4 乐谱发生器 (4)2.5 乐曲演奏电路原理图 (4)3、音乐硬件演奏电路的设计实现 (5)3.1 地址发生器模块的VHDL语言设计 (5)3.2 分频预置数模块的VHDL语言设计 (8)3.3 数控分频模块的VHDL语言设计 (10)3.4 music模块 (12)3.4.1 音符数据文件 (13)3.4.2 LPM-ROM定制 (13)3.5 顶层文件 (14)4、时序仿真及下载调试过程 (16)4.1 时序仿真图 (16)4.2 引脚锁定以及下载 (17)4.3调试过程及结果 (17)设计总结与心得体会 (18)参考文献 (19)乐曲硬件演奏电路设计设计要求能够播放音乐,通过按键控制音乐的播放暂停。
用VHDL设计乐曲发生器
1 概述随着EDA 技术的进展,基于可编程ASIC 的数字电子系统设计的完整方案越来越受到人们的重视,并且以EDA 技术为核心的能在可编程ASIC 上进行系统芯片集成的新设计方法,也正在快速地取代基于P CB板的传统设计方式。
与利用微处理器(CPU 或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA 工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
如何使用EDA工具设计电子系统是人们普遍关心的问题,本设计在美国ALTERA公司MA X + plusⅡ的EDA 软件平台上,使用层次化设计方法,实现了乐曲发生器的设计。
乐曲选取《梁祝》中化蝶部分,其简谱如图1所示。
2 音符与频率的关系我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素,首先让我们来了解音符与频率的关系。
乐曲的12平均率规定:每2 个八度音(如简谱中的中音1 与高音1)之间的频率相差1 倍。
在2 个八度音之间,又可分为12个半音,每2个半音的频率比为12√2。
另外,音符A(简谱中的低音6)的频率为4 40Hz,音符B 到C之间、E 到F之间为半音,其余为全音。
由此可以计算出简谱中从低音l 至高音1 之间每个音符的频率,如表 1 所示。
产生各音符所需的频率可用一分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。
若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但会增加分频器的分频级数。
实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。
本文设计的乐曲发生器选取6MHz 的基准频率。
若无6MHz 的时钟频率,则可以先分频得到6MHz 或换一个新的基准频率。
实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会"走调"。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆交通大学计算机与信息学院设计性实验报告班级:通信工程专业 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模块,乐曲就开始连续自然地演奏起来了。
四、实验仪器、材料1,2MHZ和4HZ的信号源2,ACEX1K EP1K30TC144—1芯片3,扬声器五、方案设计(设计性实验需要,综合性实验无该项)1,音符的产生:音符的产生是利用数控分频器模块SPKEAR对输入的时钟信号CLK400KHZ进行分频,预置数为TONE[10..0],然后分频得出频率为CLK/2*(2048- TONE[10..0]),通过控制输入预置数TONE[10..0]来达到不同的输出频率,以达到控制扬声器发出不同的声音。
例如:当设置预置数TONE[10..0]为1538时,输出SPKEAR频率为396,为低音5。
2,频率的分频:由于实验给定信号源为12MHZ,不满足数控分频器模块SPKEAR对输入时钟信号的要求,遂其进行30分频(PULSE30),产生0.4MHZ的时钟信号。
3,预置数的产生:预置数TONE[10..0]由模块TONE TAB产生。
模块TONE TAB有输入端口INDEX[2..0]送入音符,模块由CASE选择语句产生与INDEX[2..0]输入端口送入的音符相对应的预置数TONE[10..0],也同时产生其音符CODE[2..0]送入音符显示模块DISPCODE,和频谱频率frenquence[9..0]送入频率显示模块DISPFREN。
例如:当输入端口INDEX[2..0]送入000(为低音5对应的编码),有CAES选择语句产生TONE[10..0]为1538,frenquence[9..0]为396 以及CODE[2..0]为101的输出。
4,音符的存储:音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。
由存储模块music_rom_data控制,以四分之一节拍为1个单位在LPM_ROM中进行存储音符的编码(例如本实验《友谊地久天长》中频谱共涉及了8个音符,使用3个二进制数分别对其编码进行存储;又有二分之一节拍数的音符存储2个单元,以此类推,直到对整首歌曲的乐谱存储结束)。
存储模块music_rom_data的输出为数控分频器模块TONETAB的输入端INDEX[2..0]。
5,音符的输出驱动:音符的存储由计数器模块LPM_COUNTE控制。
计数器在时钟CLK4HZ的控制下,没0.25s 送出一个6位数值q[5..0],作为存储模块music_rom_data的地址输入端口。
这样便达到每个存储单元以同一频率进行有控制的输出。
6,频谱显示模块DISPCODE和频率显示模块DISPFRENQUENCE有本组另一同学(袁亮)设计。
六、实验过程及原始记录1,制作存储模块music_rom_data.(1)定制LPM_ROM初始化数据文件建立.mif格式文件:选择File—>New—>Memory Initialization File项,选择数据位为256,数据宽度为8,建立.mif格式文件,将歌曲频谱以编码的形式,以四分之一节拍为一单位进行存储。
(其实128位数据位已经够本实验歌曲《友谊地久天长》使用)形成如下图的数据文件:(2),定制LPM_ROM元件①LPM宏功能模块设定②选择ROM_DATA模块数据线和地址线宽度③调入ROM初始化数据文件④LPM_ROM设计完成生成用于例化的LPM_ROM的VHDL文件music_data_rom.vhd:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.lpm_components.all;ENTITY music_data_rom ISPORT(address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);q : OUT STD_LOGIC_VECTOR (2 DOWNTO 0));END music_data_rom;ARCHITECTURE SYN OF music_data_rom ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (2 DOWNTO 0);COMPONENT lpm_romGENERIC (intended_device_family : STRING;lpm_width : NATURAL;lpm_widthad : NATURAL;lpm_address_control : STRING;lpm_outdata : STRING;lpm_file : STRING;lpm_type : STRING);PORT (address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);q : OUT STD_LOGIC_VECTOR (2 DOWNTO 0));END COMPONENT;BEGINq <= sub_wire0(2 DOWNTO 0);lpm_rom_component : lpm_romGENERIC MAP (intended_device_family => "ACEX1K", lpm_width => 3,lpm_widthad => 6,lpm_address_control => "UNREGISTERED",lpm_outdata => "UNREGISTERED",lpm_file => "music_rom_data.mif",lpm_type => "LPM_ROM")PORT MAP (address => address,q => sub_wire0);END SYN;2,制作计数器模块COUNTER实验步骤如上:生成用于例化的LPM_COUNTER的VHDL文件counter.vhd:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.all;ENTITY counter ISPORT(clk_en : IN STD_LOGIC ;clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (5 DOWNTO 0)); END counter;ARCHITECTURE SYN OF counter ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0);COMPONENT lpm_counterGENERIC (lpm_direction : STRING;lpm_port_updown : STRING;lpm_type : STRING;lpm_width : NATURAL);PORT (clk_en : IN STD_LOGIC ;clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (5 DOWNTO 0));END COMPONENT;BEGINq <= sub_wire0(5 DOWNTO 0);lpm_counter_component : lpm_counterGENERIC MAP (lpm_direction => "UP",lpm_port_updown => "PORT_UNUSED",lpm_type => "LPM_COUNTER",lpm_width => 6)PORT MAP (clk_en => clk_en,clock => clock,q => sub_wire0);END SYN;3,制作数控分频器SPKEAR模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY speaker ISPORT(CLK: IN STD_LOGIC;tone:IN integer range 0 to 2048;spks:out std_logic);END speaker;ARCHITECTURE ONE OF speaker ISSIGNAL FULL: STD_LOGIC;BEGINP_REG: PROCESS(CLK)VARIABLE CNT8:integer range 0 to 2048;BEGINIF CLK'EVENT AND CLK='1' THENIF CNT8=2048 THENCNT8:=tone;FULL<='1';ELSE CNT8:=CNT8+1;FULL<='0';END IF;END IF;END PROCESS P_REG;P_DIV:PROCESS(FULL)VARIABLE CNT2:STD_LOGIC;BEGINIF FULL'EVENT AND FULL='1' THEN CNT2:=NOT CNT2;IF CNT2='1' THEN spks<='1'; ELSE spks<='0';END IF;END IF;END PROCESS P_DIV;END ONE;4,制作TONE TAB模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity tonetab isport(index: in std_logic_vector(2 downto 0);tone : out integer range 0 to 2048;frequence : out integer range 0 to 990;code : out std_logic_vector(2 downto 0));end entity;architecture behave_tonetab of tonetab isbeginprocess(index)begincase index iswhen "000"=> frequence<=396;code<="101";tone<=1538; when "001"=> frequence<=523code<="001";tone<=1666; when "010"=> frequence<=587;code<="010";tone<=1708; when "011"=> frequence<=659;code<="011";tone<=1745; when "100"=> frequence<=784;code<="101";tone<=1794; when "101"=> frequence<=1047;code<="110";tone<=1821; when "110"=> frequence<=1175;code<="001";tone<=1857; when "111"=> frequence<=440;code<="110";tone<=1595; end case;end process;end behave_tonetab;5,制定PULSE30模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity pulse30 isport(clk :in std_logic;fout:out std_logic);end;architecture behave_pulse30 of pulse30 isSIGNAL FULL: STD_LOGIC;BEGINP1: PROCESS(CLK)VARIABLE CNT30:integer range 1 to 30;BEGINIF CLK'EVENT AND CLK='1' THENIF CNT30=30 THENCNT30:=1;FULL<='1';ELSE CNT30:=CNT30+1;FULL<='0';END IF;END IF;END PROCESS P1;P2:PROCESS(FULL)VARIABLE CNT2:STD_LOGIC;BEGINIF FULL'EVENT AND FULL='1' THEN CNT2:=NOT CNT2;IF CNT2='1' THEN fout<='1'; ELSE fout<='0';END IF;END IF;END PROCESS P2;END behave_pulse30;七、实验结果及分析实验结果:当en_clock=’1’时,即clock有效时,试验箱端扬声器演奏出乐曲《友谊地久天长》的音乐。