版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、毕 业 设 计 (论 文)课题名称: 基于FPGA的音乐电子琴 指导教师: * 系 别: 电子信息系 专 业: 应用电子技术 班 级: 13应用电子(1)班 姓 名: * 【摘要】介绍了基于FPGA的电子琴的工作原理和设计过程。用Altera公司的EP3C40Q240C8芯片为核心器件,通过运用硬件编程语言VHDL描述,在Quartus II平台上,实现了电子琴的手动弹奏和自动演奏功能。本系统主要由音频发生模块,键盘控制模块和存储器模块组成。选择手动弹奏模式按键时,按下音符键后就会选通相应的频率输出;选择自动演奏模式按键时,储存器会将编写好的音乐信息依次取出,去选通各个对应的频率输出,实现自动
2、演奏。音频发生器由分频器来实现,可产生16个频率,这些频率经放大后驱动喇叭,从而发出声音。目录第一章 引言31.1课题分析31.2 VHDL语言和QUARTUS II环境简介41.3 FPGA简介6第二章 任务要求及原理分析92.1 任务要求92.2 任务分析92.3系统设计的主要组成部分12第三章 任务实施133.1 系统流程133.2 设计模块133.3 Cyclone III芯片简介163.4结论17附录181.简谱182.程序18参考资料27致谢27第一章 引言1.1课题分析电子琴因其操作简单,且能模拟各种传统乐器的音色,而深受消费者喜爱。基于可编程逻辑器件FPGA(FieldProg
3、rammable Logical Device)芯片,利用VHDL硬件描述语言设计系统核心部件,再配以适当的外围电路,可从琴键上进行演奏也可自动进行乐曲演奏。随着电子技术的高速发展,由于FPGA/CPLD具有高速、高可靠性、串并行工作方式等突出优点,所以在电子设计中受到广泛的应用,并且它代表着未来EDA设计的方向。FPGA/CPLD的设计采用了高级语言,例如VHDL语言,AHDL语言。从而进一步打破了软硬件之间的界限,加速了产品的开发过程,缩短了设计周期。所以采用FPGA/CPLD取代传统的标准集成电路、接口电路已经成为电子技术发展的必然趋势。EDA(电子设计自动化) 代表了当今电子设计技术的
4、最新发展方向,它的基本特征是:设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片集成电路(FPGA/CPLD) 实现。电子琴是数字电路中的一个典型应用。在实际的硬件设计中用到的器件非常多,连线比较复杂,同时会产生比较大的延时,从而造成测量误差较大,可靠性不好。以EDA工具作为开发手段,运用VHDL硬件描述语言将使整个系统大大简化,提高了电子琴整体的性能和可靠性。1.2 VHDL语言和QUARTUS II环境简介1.2.1 VHDL语言简介VHDL是超高速集成电路硬件描述语言,是一种用于电路设计的高级语言。它出现于80年代后期,最初是由美国国防部开发
5、出来的,是为了供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。VHDL主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中,同时也被一些实力较为雄厚的单位用来设计ASIC。VHDL具有多层次描述系统硬件功能的能力,支持自顶向下和基于库的设计特点。其开发流程:在顶层用方框图或硬件语言对电路的行为进行描述后,进行系统仿真验证和纠错。再用逻辑综合优化工具生成具体的门级逻辑电路的网表。然后通过适配器将网表文件配置于指定的目标器件,产生最终下载文件或配置文件。最后把适配后生成的下载或配置文件通过编程器或编程电缆下载到具体的FPGA/CP
6、LD器件中去,以便进行硬件调试和验证,而实现可编程的专用集成电路ASIC的设计。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL系统设计与其他硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。1.2.2 QUARTUS 简介Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面
7、设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Maxplus II 作为
8、Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。1.3
9、FPGA简介FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。当今社会是数字社会,数字集成电路应用非常广泛,其发展从电子管、晶体管、小规模集成SSI、MSI、LSI、VLSI(几万门以上)到超大规模集成电路ULSI和超位集成电路GSI,其规模几乎平均每一到两年翻一番。集成电路的发展大大促进了EDA的发展,先进的EDA已从传统的“自下而上”的设计方法改
10、变为“自上而下”的设计方法。ASIC(Application Specific Integrated Circuit)的设计与制造,已不再完全由半导体厂商独立承担,系统设计师在实验室里就可以设计出合适的ASIC芯片,并且立即投入实际应用中,这都得益于可编程逻辑器件PLD(Programmable Logic Device)的出现。现在应用最广泛的PLD主要是现场可编程门阵列FPGA(Field Programmable Gate Array)、复杂可编程逻辑器件CPLD(Complex Programmable Logic Device)、可擦除可编程逻辑器件EPLD(Erasable Pro
11、grammable Logic Device)。FPGA器件集成度高、体积小,具有通过用户编程实现专门应用的功能,特别适合于产品的样机开发和小批量生产。现场可编程门阵列FPGA是一种新型的高密度PLD,采用CMOSSRAM工艺制作,与门阵列PLD不同,其内部由许多独立的可编程逻辑模块(CLB)组成,逻辑块之间可以灵活地相互连接。现场可编程门阵列FGPA的结构一般分为三部分:可编程逻辑块、可编程I/O模块和可编程内部连线。CLB的功能很强,不仅能够实现逻辑函数,还可以配置成RAM等复杂的形式,配置数据存放在片内的SRAM或者熔丝图上。基于SRAM的FPGA器件工作前需要从芯片外部加载配置数据,配
12、置后的数据可以存储在片外的EPROM上或者计算机上。现场可编程门阵列FPGA允许电路设计者利用基于计算机的开发平台,经过设计输入、仿真、测试和校验,直接达到预期的结果。使用FPGA器件可以大大缩短系统的研制周期,减少资金的投入。更吸引人的是,采用FPGA器件可以将原来的电路板级产品集成为芯片级产品,从而降低了功耗,提高了可靠性,同时还可以很方便地对设计进行在线修改。因此,FPGA的出现受到了电子设计师的普遍欢迎,发展十分迅速。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出
13、输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有: 1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2)FPGA可做其它全定制或半定制ASIC电路的中试样片。 3)FPGA内部有丰富的触发器和IO引脚。 4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。 FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,
14、工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行
15、模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。第二章 任务要求及原理分析2.1 任务要求基于FPGA的电子琴设计要求: 音乐自动播放,存储两首歌曲,有按键控制选择播放; 琴键演奏,含高低16个音符; 配有随音乐节奏而闪烁变化的LED灯以及乐谱显示。 2.2 任务分析乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发声频率及其持续时间是乐曲能够
16、连续演奏的关键因素。乐曲的12平均率规定:每两个八度音之间的频率相差1倍(如简谱中的中音1与高音1)。在两个八度音之间,又可分为12个半音。另外,音符A的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如表2-1所示。表2-1产生各个音符所需要的频率可用一个分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。实际的设计应综合考虑两个方面的因素,在尽量减小频率
17、误差的前提下取合适的时钟频率。实际上,只要各个音符的相对频率关系不变,演奏出的乐曲听起来就不会走调。音符的持续时间须根据乐曲速度及每个音符的节拍数来确定。因此,要控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,实验中所演奏的乐曲最短音符为四分音符,如果将全音符的持续时间设为1s的话那么1拍所应该持续的时间为0.25s,则只需要提供一个4Hz的时钟频率即可产生四分音符的时长。本实验设计的音乐电子琴选取12MHz的系统时钟频率。在数控分频器模块,首先对时钟频率进行16分频,得到0.75MHz的输入频率,然后再次分频得到各音符的频率。由于数控分频器输出的波形是脉宽极窄的脉冲波,为了更好
18、地驱动扬声器发声,在到达扬声器之前需要均衡占空比,从而生成各音符对应频率的对称方波输出。这个过程实际上进行了一次二分频,频率变为原来的二分之一,即0.375MHz。因此,分频系数的计算可以按照下面的方法进行。以中音1为例,对应的频率值为523.3Hz,它的分频系数应为0.375MHz523.3MHz=0.375×106Hz523.3Hz=716至于其他音符,同样可以由上式求出对应的分频系数,这样利用程序就可以很轻松地得到相应的乐声。各音名的分频系数如表2-2所示。音名频率/Hz分频系数音名频率/Hz分频系数低音1261.61433高音11045.5358低音2293.71277高音2
19、1174.7319低音3329.61138高音31318.5284低音4349.21074高音41396.9268低音5392960高音51568239低音6440853高音61760213低音7493.9759高音7197.5190中音1523.3716中音2587.3638表2-2至于音长的控制,在自动演奏模块,每个乐曲的音符都是按地址存放的,播放乐曲时按4Hz的时钟频率依次读取简谱,每个音符持续时间为0.25s。如果乐谱中某个音符为3拍音长,只要在三个连续地址上存放该音符,这时候就会发出三个0.25s的音长,即持续了3拍的时间,通过这样一个简单的操作就可以控制音长了。2.3系统设计的主要
20、组成部分本设计采用 VHDL语言编程设计实现,音频发生部分、键输入部分和数码显示部分以外,其余全部在一片FPGA芯片上实现。其系统结构如下图2-1所示。图2-1 音乐电子琴系统框图第三章 任务实施3.1 系统流程本设计采用Altera公司的EDA软件系统EP3C40Q240C8来完成。采用自顶向下的设计方法。图3-1为其软件流程图:图3-1 系统流程图3.2 设计模块本系统主要由三个功能模块组成:自动演奏模块music.vhd、音阶发生模块tone.vhd和数控分频器模块speaker.vhd。系统顶层设计原理图如图3-2所示。该系统有4个输入端口,3个输出端口。输入端口1、CLK:12MHz
21、系统时钟输入端口;2、handTOauto:电子琴模式控制端口,高电平为1时是按键弹奏模式,低电平为0时是播放预存储歌曲3、Tonekey:电子琴音符输入端口;4、Sel:播放模式下,乐曲选择控制端口。输出端口1、Led:音符简码输出LED显示端口;2、SPKS:乐曲声音输出端口,输出的是对应各音符频率的方波信号。3、HIGH1:音符高音指示端口。图3-2 音乐电子琴的顶层设计原理图3.2.1 音阶发生模块本模块根据music模块提供的音符,完成音符到音符的分频系数、音频的显示、高低音阶的译码。音阶发生器的作用是产生获得音阶的分频预置值。当16位发声控制输入index中的某一位为高电平时,则对
22、应某一音阶的数值将以端口tone输出,作为获得该音阶的分频预置值,该值作为数控分频器的输入,来对0.5MHz的脉冲进行分频,由此得到每个音阶相应的频率,例如输入index="0000000000000010",即对应的按键是2,产生的分频系数便是865由code输出对应该音阶简谱的显示数码;由high输出指示音阶高8度的显示,低电平有效。自动演奏模块如图3-3所示:图3-3 音阶发生模块3.2.2 数控分频器模块数控分频模块的目的是对基准脉冲分频,得到1,2,3,4,5,6,7七个音符对应频率。该模块的VHDL描述中包含了三个进程。首先对12MHz的基准脉冲进行分频得到1M
23、Hz的脉冲,然后按照tone1输入的分频系数对1MHz的脉冲再次分频,得到的便是所需要的频率。而第三个进程的作用是在音调输出时再进行二分频,将脉冲展宽,以使扬声器有足够功率发音。数控分频模块如图3-4所示:图3-4 数控分频器模块3.2.3 自动演奏模块自动演奏模块的作用是产生8位发声控制输入index,handauto为0或1时可以选择自动演奏或者键盘输入,如果auto为0,则而由存储在此模块中的2位二进制数来作为发声控制输入,由此便可自动演奏乐曲。此模块的VHDL语言中包括两个进程,首先是对基准脉冲进行分频得到4Hz的脉冲,作为第二个进程的时钟信号,它的目的是控制每个音阶之间的停顿时间,此
24、处便是1/4=0.25s,第二个进程是音乐的存储,可根据需要编写不同的乐曲,在这里编写了两首歌曲( “两只老虎”、 “字母歌”)。自动演奏模块如图3-5所示:图3-5 自动演奏模块3.3 Cyclone III芯片简介Cyclone III是Altera公司推出的一款FPGA器件, Cyclone III FPGA比竞争FPGA的功耗低75%,含有5K至120K逻辑单元(LE),288个数字信号处理(DSP)乘法器,存储器达到4Mbits。Cyclone III系列比前一代产品每逻辑单元成本降低20%,使设计人员能够更多地在成本敏感的应用中使用FPGA。利用台积电(TSMC)的65nm低功耗(
25、LP)工艺,Cyclone III FPGA提供丰富的逻辑、存储器和DSP功能,功耗更低。在可编程逻辑发展历史中,Cyclone III FPGA比其他低成本FPGA系列能够支持实现更多的应用。本设计中所采用的芯片具体型号是EP3C40Q240C8。3.4结论本设计在Quartus II软件上进行了仿真,并在实验箱上进行了实测,从实际测试结果看,实现了程序设计的目标,达到了预期效果。该设计将的核心部分集成在可编程逻辑器件FPGA芯片上,大大简化了外部电路,较以前的传统设计,既减少了所用芯片的种类和数量,缩小了体积,降低了功耗,提高了系统的整体性能,对系统在使用中的故障率大为减少。此外,这种基于
26、可编程逻辑器件以VHDL 硬件描述语言进行设计,在电子设计的各个阶段、各个层次进行计算机模拟验证,保证设计过程的正确性,可降低设计成本,缩短设计周期,具有广阔的应用前景。附录1.简谱2.程序2.1 音阶发生模块程序Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity TONE isPort(INDEX:in std_logic_vector(15 downto 0); 音符输入信号TUNE_SEG:out std_logic_vec
27、tor(6 downto 0); 音符显示信号HIGH:out std_logic; 高低音显示信号TONE0:out integer range 0 to 2047); 音符的分频系数End TONE;Architecture BEHAVIORAL of TONE isBeginSEARCH:process(INDEX) 此进程完成音符到音符的分频系数、音符的显示、高低音阶的译码BeginCase INDEX iswhen"0000000000000001"=>TONE0<=1433;TUNE_SEG<= "0000110"HIGH&
28、lt;='0'when"0000000000000010"=>TONE0<=1277;TUNE_SEG<= "1011011"HIGH<='0'when"0000000000000100"=>TONE0<=1138;TUNE_SEG<= "1001111"HIGH<='0'when"0000000000001000"=>TONE0<=1074;TUNE_SEG<= "110
29、0110"HIGH<='0'when"0000000000010000"=>TONE0<=960;TUNE_SEG<= "1101101"HIGH<='0'when"0000000000100000"=>TONE0<=853;TUNE_SEG<= "1111101"HIGH<='0'when"0000000001000000"=>TONE0<=759;TUNE_SEG<
30、;= "0000111"HIGH<='0'when"0000000010000000"=>TONE0<=716;TUNE_SEG<= "0000110"HIGH<='1'when"0000000100000000"=>TONE0<=358;TUNE_SEG<= "0000110"HIGH<='1'when"0000001000000000"=>TONE0<=319
31、;TUNE_SEG<= "1011011"HIGH<='1'when"0000010000000000"=>TONE0<=284;TUNE_SEG<= "1001111"HIGH<='1'when"0000100000000000"=>TONE0<=268;TUNE_SEG<= "1100110"HIGH<='1'when"0001000000000000"=>T
32、ONE0<=239;TUNE_SEG<= "1101101"HIGH<='1'when"0010000000000000"=>TONE0<=213;TUNE_SEG<= "1111101"HIGH<='1'when"0100000000000000"=>TONE0<=190;TUNE_SEG<= "0000111"HIGH<='1'when"1000000000000000
33、"=>TONE0<=638;TUNE_SEG<= "1011011"HIGH<='1'When others=>TONE0<=0;TUNE_SEG<= "0000000"HIGH<= '0'End case;End process;End BEHAVIORAL;2.2 数控分频器模块程序Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_un
34、signed.all;Entity SPEAKER isPort(CLK1:in std_logic; 系统时钟12MHzTONE1:in integer range 0 to 2047; 音符分频系数SPKS:out std_logic); 驱动扬声器的音频信号End SPEAKER;Architecture BEHAVIORAL of SPEAKER isSignal PRECLK,FULLSPKS:std_logic;beginP1:process(CLK1) 此进程对系统时钟进行16分频variable COUNT:integer range 0 to 16;begin if CLK1
35、'event and CLK1='1' then COUNT:=COUNT+1;if COUNT=8 then PRECLK<='1'elsif COUNT=16 then PRECLK<='0'COUNT:=0;end if; end if;end process P1;P2:process(PRECLK,TONE1) 对0.75MHz的脉冲再次分频得到所需的音符频率variable COUNT1:integer range 0 to 2047;begin if PRECLK'event and PRECLK=
36、9;1'then if COUNT1<TONE1 then COUNT1:=COUNT1+1;FULLSPKS<='0' else COUNT1:=0;FULLSPKS<='1' end if; end if;end process P2;P3:process(FULLSPKS) 此进程对FULLSPK进行二分频variable COUNT2:std_logic:='0'begin if FULLSPKS'event and FULLSPKS='1' then COUNT2:=NOT COUNT2
37、; if count2='1' then SPKS<='1' else SPKS<='0' end if; end if;end process P3;end BEHAVIORAL;2.3 自动演奏模块程序Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;entity MUSIC is port(CLK:in std_logic; HANDTOAUTO:in std_logic; T
38、ONEKEY:in std_logic_vector(15 downto 0); SEL:in std_logic; TONE_KEY_0:out std_logic_vector(15 downto 0);end MUSIC;architecture BEHAVIORAL of MUSIC iscomponent LAOHU port(CLK:in std_logic; AUTO:in std_logic; TONE_KEY2:in std_logic_vector(15 downto 0); TONE_KEY_0:out std_logic_vector(15 downto 0);end
39、component;component ABC port(CLK:in std_logic; AUTO:in std_logic; TONE_KEY2:in std_logic_vector(15 downto 0); TONE_KEY_0:out std_logic_vector(15 downto 0);end component;component MUX21 port(A,B:in std_logic_vector(15 downto 0); S:in std_logic; Y:out std_logic_vector(15 downto 0);end component;signal
40、 S1,S2:std_logic_vector(15 downto 0);begin U0:LAOHU portmap(CLK=>CLK,TONE_KEY2=>TONEKEY,TONE_KEY_0=>S1,AUTO=>HANDTOAUTO); U1:ABC port map(CLK=>CLK,TONE_KEY2=>TONEKEY,TONE_KEY_0=>S2,AUTO=>HANDTOAUTO); U2:MUX21 port map(A=>S1,B=>S2,S=>SEL,Y=>TONE_KEY_0);end BEHAVIOR
41、AL;2.5 辅助程序1、两只老虎Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;entity LAOHU isport(CLK,AUTO:in std_logic; 系统时钟;键盘输入/自动演奏TONE_KEY2:in std_logic_vector(15 downto 0); 键盘输入信号TONE_KEY_0:out std_logic_vector(15 downto 0); 音符信号输入end LAOHU;architecture
42、 BEHAVIORAL of LAOHU issignal COUNT0:integer range 0 to 31; CHANGEsignal CLK2:std_logic;beginP1:process(CLK,AUTO) 对12MHz系统时钟进行3M的分频,得到4Hz的信号CLK2variable COUNT:integer range 0 to 3000000;begin if AUTO='1' then COUNT:=0;CLK2<='0' elsif CLK'event and CLK='1'then COUNT:=CO
43、UNT+1; if COUNT=1500000 then CLK2<='1' elsif COUNT=3000000 then CLK2<='0'COUNT:=0; end if; end if;end process P1;P2:process (CLK2) 此进程完成自动演奏部分乐曲的地址累加beginif CLK2'event and CLK2='1' then if COUNT0=31 then COUNT0<=0; else COUNT0<=COUNT0+1; end if;end if;end proc
44、ess P2;P3:process(COUNT0,AUTO,TONE_KEY2)beginif AUTO='0' thencase COUNT0 is 此case语句存储自动演奏部分的乐曲 when 0=>TONE_KEY_0<=B"00000001_00000000" when 1=>TONE_KEY_0<=B"00000010_00000000" when 2=>TONE_KEY_0<=B"00000100_00000000" when 3=>TONE_KEY_0<=
45、B"00000001_00000000" when 4=>TONE_KEY_0<=B"00000001_00000000" when 5=>TONE_KEY_0<=B"00000010_00000000" when 6=>TONE_KEY_0<=B"00000100_00000000" when 7=>TONE_KEY_0<=B"00000001_00000000"when 8=>TONE_KEY_0<=B"00000100_
46、00000000"when 9=>TONE_KEY_0<=B"00001000_00000000"when 10=>TONE_KEY_0<=B"00010000_00000000"when 11=>TONE_KEY_0<=B"00000100_00000000"when 12=>TONE_KEY_0<=B"00001000_00000000"when 13=>TONE_KEY_0<=B"00010000_00000000"wh
47、en 14=>TONE_KEY_0<=B"00010000_00000000"when 15=>TONE_KEY_0<=B"00000001_00000000"when 16=>TONE_KEY_0<=B"00100000_00000000"when 17=>TONE_KEY_0<=B"00001000_00000000"when 18=>TONE_KEY_0<=B"00000100_00000000"when 19=>TONE_
48、KEY_0<=B"00000001_00000000"when 20=>TONE_KEY_0<=B"00010000_00000000"when 21=>TONE_KEY_0<=B"00100000_00000000"when 22=>TONE_KEY_0<=B"00010000_00000000"when 23=>TONE_KEY_0<=B"00001000_00000000"when 24=>TONE_KEY_0<=B&quo
49、t;00000100_00000000"when 25=>TONE_KEY_0<=B"00000001_00000000"when 26=>TONE_KEY_0<=B"00000100_00000000"when 27=>TONE_KEY_0<=B"00000000_00000000"when 28=>TONE_KEY_0<=B"00000001_00000000"when others=>null; end case; else TONE_KEY_0
50、<=TONE_KEY2; 键盘输入音符信号输出 end if;end process P3;end BEHAVIORAL;2、字母歌Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;entity LAOHU isport(CLK,AUTO:in std_logic; 系统时钟;键盘输入/自动演奏TONE_KEY2:in std_logic_vector(15 downto 0); 键盘输入信号TONE_KEY_0:out std_log
51、ic_vector(15 downto 0); 音符信号输入end LAOHU;architecture BEHAVIORAL of LAOHU issignal COUNT0:integer range 0 to 31; CHANGEsignal CLK2:std_logic;beginP1:process(CLK,AUTO) 对12MHz系统时钟进行3M的分频,得到4Hz的信号CLK2variable COUNT:integer range 0 to 3000000;begin if AUTO='1' then COUNT:=0;CLK2<='0' elsif CLK'event and CLK='1'then COUNT:=COUNT+1; i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版施工现场消防安全管理协议3篇
- 2025年度面粉连锁店加盟经营合同样本
- 2025年度大型水利设施设备采购合同范本4篇
- 2024年航天器研制合同研制内容与交付时间
- 二零二五年度罐车租赁与车辆性能提升服务合同样本3篇
- 2025年猕猴桃树种子高产栽培与销售一体化服务合同3篇
- 2025版美容院产品研发及生产合作合同4篇
- 2025版民营医院员工加班补贴与休息时间规定合同4篇
- 二零二五年度锚杆施工与工程结算合同3篇
- 2025年度文化旅游资源开发合同合4篇
- 衡水市出租车驾驶员从业资格区域科目考试题库(全真题库)
- 护理安全用氧培训课件
- 《三国演义》中人物性格探析研究性课题报告
- 注册电气工程师公共基础高数辅导课件
- 土方劳务分包合同中铁十一局
- 乳腺导管原位癌
- 冷库管道应急预案
- 司法考试必背大全(涵盖所有法律考点)
- 公共部分装修工程 施工组织设计
- 《学习教育重要论述》考试复习题库(共250余题)
- 装饰装修施工及担保合同
评论
0/150
提交评论