基于FPGA简易乐器演奏器设计
FPGA设计简易电子琴

简易电子琴电路设计一、设计要求:(1) 设计一个简易电子琴。
(2) 利用实验箱的脉冲源产生1,2,3,……共7 个或14 个音阶信号。
(3) 用指示灯显示节拍。
(4) 能产生颤音效果。
二、原理说明:简易电子琴实现自动播放和手动弹奏两种模式,由一个开头选择。
自动播放功能可以预置多首乐曲,可以通过手动选择,本设计预置了两首乐曲《梁祝》和《两只老虎》。
手动弹奏设置了7个按键做琴键,分别对应7个音阶。
系统由8个模块组成,图1是顶层设计文件,其内部有7个功能模块:Speakera.v(例2) 和ToneTaba.v (例3),NoteTabs.v (例4),div_27.v,div-50.v,Keyboard.v,Dir.v。
模块ToneTaba音阶发生器,当4位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的LED显示,音阶越高,LED亮的数目越多。
模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speakera由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout 向扬声器输出发声。
模块NoteTabs用于产生节拍控制(Index数据存留时间)和音阶选择信号,即在NoteTabs模块放置两个乐曲曲谱真值表,通过song来选择播放的音乐,00代表复位,01选乐曲《梁祝》,10选《两只老虎》,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。
模块div-27和div_50是分频模块,通过计数的方式进行分频。
div_27是由板上27M时钟分频产生4Hz的频率用于节拍控制,div_50是板上50M时钟产生12.5MHz用于Sperkera模块。
基于FPGA的简易电子琴设计

课程设计任务书开题报告皖西学院本科毕业论文(设计)中期检查表简易电子琴的设计学生姓名:王春指导老师:郑大腾摘要本系统是采用EDA技术设计的一个简易的八音符电子琴,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,它可以通过按键输入来控制音响。
多功能电子琴的设计是在原有普通电子琴的基础上进行扩充的一个设计。
该电子琴的设计大体可以由三个模块构成,分别是电子琴发声模块、存储器模块和选择控制模块。
用超高速硬件描述语言VHDL编程可以实现各个模块的功能。
不仅能实现弹琴和演奏的功能,它还能实现“复读”的功能,就是可以存储任意一段音乐,并且可以即时的播放出来。
系统实现是用硬件描述语言VHDL 按照模块化方式进行设计,然后进行编程、时序仿真、总体整合。
本系统的功能比较齐全,有一定的现实使用的价值。
本文中介绍了电子琴系统的整体的设计,并基于超高速硬件描述语言VHDL在相关的芯片上编程实现的。
关键字电子琴;EDA;VHDL;音调发生;现场可编程逻辑器件FPGA;超高速硬件描述语言VHDL;电子琴系统;AbstractThis system is designed using EDA technology a simple eight-note keyboard, the system clock divider based on the principle of the computer, using top-down design methodology to implement, it can be controlled through the key input audio. Multi-function keyboard is designed to be an ordinary keyboard in the original expansion on the basis of a design. The design of the keyboard in general consists of three modules, namely the keyboard soundmodules, memory modules and select the control module. Ultra high-speed hardware description language VHDL programming function of each module. Not only can realize the function of playing and playing, it can achieve "repeat" function, which can store any piece of music, and real-time play out. System implementation is to use hardware description language VHDL modular way by design, then programming, timing simulation, integration. The system features a relatively complete, there is a certain value. This paper introduces the overall design of the keyboard system, and based on high speed hardware description language VHDL in Xilinx's Spartan Ⅱ series 2sc200PQ208-5 chip programming.KeywordKeyboard; EDA; VHDL; tone occurred;field programmable logic device FPGA;ultra high-speed hardware description language VHDL; organ systems;目录1 引言..................................................................1.1设计的目的...........................................................1.2设计的基本内容.......................................................2 FPGA、EDA、VHDL简介....................................................2.1FPGA工作原理 ........................................................2.1.2 FPGA的基本特点....................................................2.2EDA技术...............................................................2.3硬件描述语言——VHDL ...................................................2.3.1 VHDL的简介.......................................................2.3.2 VHDL语言的特点...................................................2.3.3VHDL语言上机操作条件.............................................2.3.4 VHDL的设计流程...................................................3 音乐知识介绍............................................................4 简易电子琴设计..........................................................4.1系统设计的总思路.....................................................4.2程序设计的流程图.....................................................4.3简易电子琴的工作流程图...............................................4.4简易电子琴中各模块的设计.............................................4.4.1 乐曲自动演奏模块...................................................4.4.2 音调发生模块.......................................................4.4.3 数控分频模块.......................................................4.4.4 顶层设计...........................................................5 系统仿真.................................................................6 结束语..................................................................致谢..................................................................... 参考文献................................................................. 附录.....................................................................1 引言我们生活在一个信息高速发达的时代,各种各样电子产品层出不穷。
基于FPGA的简易电子琴实现

基于FPGA的简易电子琴实现李全摘要本系统是采用EDA技术设计的一个简易的八音符电子琴,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,它可以通过按键输入来控制音响。
多功能电子琴的设计是在原有普通电子琴的基础上进行扩充的一个设计。
该电子琴的设计大体可以由三个模块构成,分别是电子琴音调发生器模块、数控分频模块和自动演奏模块。
用超高速硬件描述语言VHDL编程可以实现各个模块的功能。
能够实现弹琴和自动演奏的功能。
系统实现是用硬件描述语言VHDL按照模块化方式进行设计,然后进行编程、时序仿真、总体整合。
本系统的功能比较齐全,有一定的现实使用的价值。
本文中介绍了电子琴系统的整体的设计,并基于超高速硬件描述语言VHDL在相关的芯片上编程实现的。
关键字电子琴;EDA;现场可编程逻辑器件FPGA;超高速硬件描述语言VHDL;音调发生;数控分频;1引言我们生活在一个信息高速发达的时代,各种各样电子产品层出不穷。
对于广大老百姓来说,电子琴可以说已经不再是什么“新鲜玩意”了,它现在作为一种休闲和娱乐的产品早就推出市面,面向百姓,进入了我们的生活。
作为一个电子信息科学与技术专业的学生,了解这些电子产品的基本的组成和设计原理是十分必要的,我们学习过了计算机组成的理论知识,而我所做的课程设计正是对我学习的理论进行实践和巩固。
本设计主要介绍的是一个用超高速硬件描述语言VHDL设计的一个具有若干功能的简易电子琴;集科学性,先进性,创新性,实用性于一体,其理论基础源自于计算机组成原理的时钟分频器。
1.1 设计的目的本次设计的目的就是在掌握计算机组成原理理论相关的基础上,了解EDA技术,掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL 语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,例如本课程设计就是基于所学的计算机原理中的时钟分频器和定时器的基础之上的,通过本课程设计,达到巩固和综合运用计算机原理中的知识,理论联系实际,巩固所学理论知识,并且提高自己通过所学理论分析、解决计算机相关的实际问题的能力。
基于FPGA的简易电子琴设计

简易电子琴的设计学生姓名:王春指导老师:郑大腾摘要本系统是采用EDA技术设计的一个简易的八音符电子琴,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,它可以通过按键输入来控制音响。
多功能电子琴的设计是在原有普通电子琴的基础上进行扩充的一个设计。
该电子琴的设计大体可以由三个模块构成,分别是电子琴发声模块、存储器模块和选择控制模块。
用超高速硬件描述语言VHDL编程可以实现各个模块的功能。
不仅能实现弹琴和演奏的功能,它还能实现“复读”的功能,就是可以存储任意一段音乐,并且可以即时的播放出来。
系统实现是用硬件描述语言VHDL 按照模块化方式进行设计,然后进行编程、时序仿真、总体整合。
本系统的功能比较齐全,有一定的现实使用的价值。
本文中介绍了电子琴系统的整体的设计,并基于超高速硬件描述语言VHDL在相关的芯片上编程实现的。
关键字电子琴;EDA;VHDL;音调发生;现场可编程逻辑器件FPGA;超高速硬件描述语言VHDL;电子琴系统;AbstractThis system is designed using EDA technology a simple eight-note keyboard, the system clock divider based on the principle of the computer, using top-down design methodology to implement, it can be controlled through the key input audio. Multi-function keyboard is designed to be an ordinary keyboard in the original expansion on the basis of a design. The design of the keyboard in general consists of three modules, namely the keyboard soundmodules, memory modules and select the control module. Ultra high-speed hardware description language VHDL programming function of each module. Not only can realize the function of playing and playing, it can achieve "repeat" function, which can store any piece of music, and real-time play out. System implementation is to use hardware description language VHDL modular way by design, then programming, timing simulation, integration. The system features a relatively complete, there is a certain value. This paper introduces the overall design of the keyboard system, and based on high speed hardware description language VHDL in Xilinx's Spartan Ⅱ series 2sc200PQ208-5 chip programming.KeywordKeyboard; EDA; VHDL; tone occurred;field programmable logic device FPGA;ultra high-speed hardware description language VHDL; organ systems;皖西学院毕业论文设计第3页共36页目录1 引言..................................................................1.1设计的目的...........................................................1.2设计的基本内容.......................................................2 FPGA、EDA、VHDL简介....................................................2.1FPGA工作原理 ........................................................2.1.2 FPGA的基本特点....................................................2.2EDA技术...............................................................2.3硬件描述语言——VHDL ...................................................2.3.1 VHDL的简介.......................................................2.3.2 VHDL语言的特点...................................................2.3.3VHDL语言上机操作条件.............................................2.3.4 VHDL的设计流程...................................................3 音乐知识介绍............................................................4 简易电子琴设计..........................................................4.1系统设计的总思路.....................................................4.2程序设计的流程图.....................................................4.3简易电子琴的工作流程图...............................................4.4简易电子琴中各模块的设计.............................................4.4.1 乐曲自动演奏模块...................................................4.4.2 音调发生模块.......................................................4.4.3 数控分频模块.......................................................4.4.4 顶层设计...........................................................5 系统仿真.................................................................6 结束语..................................................................第3页致谢..................................................................... 参考文献................................................................. 附录.....................................................................1 引言我们生活在一个信息高速发达的时代,各种各样电子产品层出不穷。
基于FPGA的乐曲演奏电路设计_毕业设计论文

毕业设计基于FPGA的乐曲演奏电路设计摘要设计了一种基于FPGA的电子琴,该电子琴由用VHDL硬件描述语言设计的核心部件和适当的外围电路构成,可从琴键上进行演奏也可自动进行乐曲演奏。
基于FPGA(现场可编程门阵列)芯片,利用VHDL语言,介绍了一种通用乐曲演奏电路的设计,可实现多个八度音阶的乐曲演奏,与简谱的对应关系简单,编程方便,占用资源少,通用性好,可作为IP core模块引用,构成复杂的SOPC系统.关键词:电子琴;现场可编程门阵列(FPGA);智力产权核(IP core);超高速集成电路硬件描述语言(VHDL);乐曲AbstractAn electronic piano is designed based on FPGA,which consists of core paris that designed by using VHDL hardware description languages,as well as some periphery circuits.The musical perform ance can be donenot only by keys but also with automatic type in the electronic piano.Based on FPGA,by VHDL language,this paper introduces a universal music circuit design,it can play high,middle and low multiple tonality,simple corresponding relation with simple musical notation,which programs easily using little resource.It can be used universally for IP core in making complicated SOPC system.Key words:electronic piano;Field Programmable Gate Array(FPGA);Intelligence Property core(IP core) ;Very-High-Speed Integrated Circuit Hardware Description Language(VHDL);music目录1.简易电子琴与音乐发生器设计的介绍 (4)1.1简易电子琴设计介绍 (4)1.2音乐发生器设计介绍 (4)2.F P G A功能与使用简介 (6)2.1F P G A简介 (6)2.1.1F P G A的产生 (6)2.1.2F P G A的基本结构 (7)2.1. 3 MAX+PLUSII (7)2.2硬件描述语言V H D L (10)2.2.1V H D L语言的优点 (10)2.2.2利用V H D L语言设计数字系统的特点 (11)2.2.3V H D L语言的基本结构 (13)2.2.4V H D L的设计流3.简易电子琴设计及程序 (16)3.1简易电子琴设计总体框图 (16)3.2模块设计 (16)3.2.1模块Q I N设计 (16)3.2.2模块F A N A设计 (17)4.音乐发生器设计及程序 (20)4.1使用的乐谱 (20)4.2音乐发生器设计及程序 (20)4.2.1音乐发生器总框图 (20)4.2.2可变分频器设计 (20)4.2.3到计时模块设计 (31)5.仿真 (3)45.1概述 (34)5.2仿真验证与实5.2.1电子琴电路的仿真 (35)5.2.2音乐发生器仿真 (35)6.结论 (3)77.致谢 (3)88.参考文献 (39)1.简易电子琴与音乐发生器设计的介绍1.1简易电子琴设计介绍电子琴因其操作简单,且能模拟各种传统乐器的音色,而深受消费者喜爱。
基于FPGA的电子琴设计

基于FPGA的电子琴设计电子琴由于操作相对比较简单,并且能够模拟几乎所有传统乐器的音色,因而深受广大消费者的喜爱。
近年来,在数字系统的设计领域融入了一种新型的设计技术:数字系统设计的自动化技术EDA (Electronic Design Automation)。
该技术优越之处在于系统设计的效率高、保密性强、集成度好、易于修改和实现等。
因此,一跃成为当下数字系统设计领域的主流技术,并被越来越广泛地应用到相关领域中,其中,被应用到电子琴的设计与实现中去就是一个相当重要的尝试及应用。
本文所设计的电子琴基于一种可编程逻辑控制器件:FPGA(Field Programmable Logical Device)芯片,首先采用Visual Basic来设计上位机琴键的控制界面程序,再利用VHDL硬件描述语言设计系统的核心部件(演奏电路)以及配合使用一些适当和必要的外围电路,并且,核心部件的模块通过QUARTUS II这个平台,自顶而下地进行下载到Altera芯片上,其中,上位机经RS232串行口能够直接和FPGA进行通信,从而完成数据的交换工作。
该演奏电路由琴键控制界面直接进行音调的输入,并通过RS232的通信方式来控制从而可以发出DO、RE、MI等共计8个音调,经由蜂鸣器出声,顺利行使完成演奏功能。
可从琴键上手动直接进行演奏各种电路,亦可自动开始乐曲演奏,而且能够模拟笛子、小号、风琴、单簧和双簧等传统乐器。
同通常所见到的电了琴的设计一样,该电子琴采用总计61个按键,共划分为5个音区,每个音区包含12个琴键,即7个白色的琴键与5个黑色的琴键(为半音键),在进行演奏的时候能够动态显示各音名。
1 系统设计为了使电子琴的演奏电路完美实现8个音键的控制和顺利播放已经编好的音乐,对系统的设计就应有所要求。
根据各个音调的频率差异来实现当演奏者按不同的音键时从而发出的声音又了差别。
当八位发声控制键的输入中有一位是高电平时,那么,对应这一音阶其初始计数值被作为获得此音阶分频的预置值而将送至预制数计数器,而后预制数计数器就会输出相应的频率,同时输出的还有对应音阶简谱的显示代码,然后,该频率通过二分频器被送至扬声器,在扬声器处能够发出相对应该音符的声音,与此同时,该音名将显示在数码管上。
基于FPGA的电子琴设计课程设计

基于FPGA的电子琴设计课程设计摘要乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。
实现方法有许多种。
现用可编程逻辑器件(PLD)来完成该设计。
核心是一数控分频器,对输入的脉冲进行分频,得到每个音阶对应的频率,由此实现简易电子琴的发音功能。
电子琴可演奏由键盘输入的音阶,同时在数码管上显示对应音节的频率。
本设计基于超高速硬件描述语言VHDL在Altera公司的CycloneⅡ系列的EP2C5T144C8芯片上编程实现;经仿真,调试基本能够达到技术指标,仿真结果基本正确。
关键词音乐译码电路模块,VHDL,数控分频,电子琴AbstractMusic performances are widely used in automatic answering devices, cell phone ring tones, the Group phones, smart instrumentation and equipment。
The design is accomplished using a programmable logic device (PLD). The core is a numerical control frequency divider, the input pulse frequency, the frequency of each scale corresponding to the frequency, thus achieving the function of simple electronic piano. The electronic piano can be played by the keyboard input of the scale, while in the digital tube display the corresponding syllable frequency. The design based on ultra high speed hardware description language VHDL on Altera's cyclone II Series ep2c5t144c8 chip programming; the simulation and debugging can basically meet the technical indicators, and the result of simulation is correct.Keywords Music decoder circuit module,VHDL,Numerical control pointing frequency modules,electronic organ目录摘要 (I)Abstract (II)1 引言 (1)2 VHDL简述及应用 (2)2.1VHDL简述 (2)2.2 VHDL的应用 (2)3 FPGA的简述 (3)3.1 FPGA的介绍 (3)3.2 FPGA的整体结构 (3)3.3 Altera公司的FPGA (3)4 电子琴演奏系统设计原理分析 (4)4.1电子琴演奏设计的基本要求 (4)4.2电子琴演奏原理 (4)4.3音名与频率的关系 (5)4.4控制音长的节拍发生器 (6)5 电子琴硬件演奏电路的层次化设计方案 (8)5.1按键控制模块 (8)5.2自动演奏模块 (8)5.3自动播放控制模块 (9)5.4数控分频模块设计 (9)5.5数码管译码显示 (10)5.6音频驱动模块 (10)结论 (11)致谢 (12)参考文献 (13)附录1 (14)附录2 (15)1 引言我们生活在一个信息高速发达的时代,各种各样电子产品层出不穷。
基于fpga的音乐播放器的设计

1引言1.1关于EDA技术随着科学技术的进步,电子器件和电子系统设计方法日新月异,电子设计自动化(Electronics Design Automation,EDA)技术正是适应了现代电子产品设计的要求,吸收了多学科最新成果而形成的一门新技术。
现如今掌握EDA技术是电子信息类专业的学生、工程技术人员所必备的基本能力和技能。
传统电子电路的设计,首先要对系统进行分析,然后按功能对系统进行划分,接下来就要选择特定芯片,焊接成PCB电路板,最后对成品PCB电路板进行调试。
这样的设计没有灵活性可言,搭成的系统需要的芯片种类多且数目大,而且对于电路图的设计和电路板的设计都需要很大的工作量,工作难度也很高。
然而,随着可编程器件和EDA技术的发展,传统设计的劣势被克服,采用可编程逻辑器件基于芯片的设计方法,期间的内部逻辑和引脚可以由设计者自行决定,大大提高了设计的灵活性,提高了工作效率;同时,将系统集成在一个芯片上的设计,使系统具有体积小、功耗低、可靠性高等特点。
EDA技术的发展大致经历了三个阶段:20世纪70年代的CAD(计算机辅助设计)阶段、20世纪80年代的CAE(计算机辅助工程)阶段、20世纪90年代后的EDA(电子设计自动化)阶段。
以下主要介绍第三个阶段。
EDA技术即电子设计自动化技术,它是以可编程逻辑器件(PLD)为载体,以硬件描述语言(HDL)为主要的描述方式,以EDA软件为主要的开发软件的电子设计过程。
它主要采用“自顶向下”的设计方法,设计流程主要包括:设计输入、综合、仿真、适配、下载。
EDA技术主要有以下特征:(1)高层综合的理论和方法取得进展,从而将EDA设计层次由RT级提高到了系统级,并推出了相应的系统级综合优化工具,大大缩短了复杂ASIC的设计周期。
(2)采用硬件描述语言来描述10万门以上的设计,并形成了VHDL和Verilog-HDL两种标准硬件描述语言。
(3)采用平面规划技术对逻辑综合和物理版图设计联合管理,做到在逻辑设计综合早期阶段就考虑到物理设计信息的影响。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
乐曲演奏设计实验任务:采用VHDL来实现的简易乐曲演奏器。
它能实现自动演奏已存歌曲。
且要求实现如下功能:(1)演奏时可以通过按键选择是自动演奏,自动演奏则是演奏已存入的固定乐曲;(2)至少保存一首自动演奏的乐曲,且自动演奏的乐曲能重复播放;(3)进行自动演奏时,数码管上要同时能显示演奏乐曲的乐谱;(4)自动播放时,设置低速,中速,快速控制键,能实现乐曲不同速度的播放。
1乐曲演奏电路原理声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。
乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。
乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。
而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。
当一个20MHz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数,将分频系数送给数控分频器模块,当20MHz的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的4Hz 的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。
曲子也就流畅的播放出来了。
2 整体设计思想根据设计要求,系统组成方框图3-1所示,它由乐曲选择模块、数码显示模块、蜂鸣器模块、模式选择模块组成。
3 乐曲演奏电路模块3.1 乐曲选择模块1 乐曲选择模块在此模块中设置了一个9位二进制计数器((计数最大值为511),作为音符数据ROM 的地址发生器。
这个计数器的计数频率选为4 Hz ,即每一计数值的停留时间为0.25s ,恰为当全音符设为1s 时,四四拍的4分音符持续时间。
同时为了实现对歌曲选择得控制以及对播放速度的要求,可以多分出几个频率,然后由控制开关来选择歌曲和播放频率。
随着音调发生器模块中的计数器按不同的时钟速率作加法 计数时,乐曲就开始连续自然地依据不同的速度演奏起来了。
2 乐曲选择模块的仿真图通过仿真图可以清楚的看到,时钟clk 由0开始计数,每计一次数输出toneindex 的值随之发生一定的变化,只不过根据乐谱的不同,输出的变化也不尽相同。
由于选择开关的控制可以看出,在不同模式下播放的歌曲是不同的,实现了选歌的功能。
3 乐曲选择模块生成的逻辑符号图基准时钟20MHz 模式选择选歌,控制FPGA 时钟电路峰鸣器电路 乐曲选择电路 数码显示电路 4Hz20MHz扬声器 数码管图3-1乐曲演奏电路结构方框图 图3-3乐曲选择模块逻辑符号图图3-2乐曲选择模块仿真图3.2数码显示模块1 数码显示模块该编码模块的作用为将输入的音符数据翻译为音乐产生模块的所需要的分频系数,并且显示音符的数字码型和高音阶,通过对照表各音名对应的分频系数值及初始值,根据输入得到初始值,从而得到分频系数以便进行分频,得到所需的频率。
2音数码显示模块的仿真图图3-4数码显示模块仿真图在此程序中index为音乐节拍产生模块输出的音符数据,经过翻译后将tone输出到数控分频模块为其提供分频系数的初始值,code为数码管显示的字符数,high1为高音显示,当乐谱中有高音时,就会相应地以二进制的形式表现出来。
3数码显示模块生成的逻辑符号图图3-5数码显示生模块逻辑符号图3.3 模式选择模块1 模式选择模块根据设计的要求,该简易乐曲演奏器能实现自动演奏乐曲的功能。
与此同时,还需要一个整体复位信号rst来控制该演奏器是否工作,当rst为1时,停止演奏,为0时,可以演奏。
2 模式选择模块仿真图由仿真图可以看出,当rst为1时,输出为0,电路停止工作。
图3-6模式选择模块仿真图3 模式选择模块生成的逻辑符号图图3-7模式模块逻辑符号图3.4 蜂鸣器模块1 蜂鸣器模块该模块的clk端输入一个具有较高频率(本实验为20MHz)的信号,通过分频后由spks输出。
由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲信号,为了便于驱动喇叭,需另加一个D触发器均衡其占空比,也即作二分频处理。
speak 对clk输入信号的分频比由11位预置数tone[10..0]决定。
spks的输出频率将决定每一音符的音调,这样分频计数器的预置数tone[10..0]与spks的输出频率就有了对应关系。
2 蜂鸣器模块的仿真图图3-10蜂鸣器模块仿真图在此仿真图中,输入clk 是一个频率较大的时钟信号,输入tone 代表着某个音符的分频初始值,输出spks 则代表将输入clk 先经过12次分频,再经过(预置数终值2048-tone )次分频,最终再进行二分频处理,而这个信号的频率就是我们需要演奏的音谱的频率,根据频率的不同,从而能通过喇叭听到不同的声音,实现音乐的播放。
3 蜂鸣器模块生成的逻辑符号图4 顶层文件 利用元件例化把各个子模块组合起来,进行编译、下载,从而实现整体功能。
它将音调发生器模块、音调编码器模块、分频器模块、模式选择模块,手动输入模块及数控分频器模块连接起来。
5 硬件下载 输入程序并且编译无误,并且仿真无误后,便进行引脚锁定及程序下载,在进行引脚锁定时必须对照引脚锁定图进行锁定。
引脚锁定图如图3-13所示:CLK 为20M 时钟输入,RST 为整体复位开关,CODE1为数码管显示,HIGH1为高音显示,SEL 速度控制开关,SPKS 为蜂鸣器输入。
引脚锁定后下载到FPGA 试验箱的EP3C40Q240C8芯片中,通过开关及按键的控制,试验箱的蜂鸣器就会根据选择演奏优美的音乐,经验证本次设计完全达到了预先的设计要求。
图3-11蜂鸣器模块逻辑符号图图3-12顶层文件仿真图硬件锁引脚图总结通过本次课程设计,深刻体会了VHDL设计的优势,通过强大的EDA工具和硬件描述语言使演奏电路很易实现。
并且通过此次设计让我们把课本中的知识系统的联系起来,更加体会到模块式设计的方法所带来的方便和明了化。
通过模块式的方法,可以将复杂的总程序分成几个模块各自分工执行,独立工作互不干扰。
然后通过原理图将各个模块直接相连,或者用元件例化的方式,用VHDL语言进行描述,达到了统一化管理各个模块的作用。
通过查找资料,与同学交流增强了我们自主学习的能力;了解到了声音音谱的发生规律,信号的频率与声音的关系,并且通过对基准频率的分频,来生成不同的声谱。
从设计方面得知,在进行设计时,应首先对各方面的资料进行综合,在基本原理的范围内进行模块式的分解和综合,最后达到设计的需求。
这次设计使我对quartusⅡ的运用更加灵活,熟悉了对该软件从工程建立到程序下载执行各个步骤的操作,对以前学习上的不足得到了补充。
总之,这次设计让我们学到了很多知识,为我们以后的学习奠定了基础。
在课设的过程当中,不知不觉中增添了对专业课的学习兴趣,感觉我们学的东西终于与实际真正得结合起来了,学习的知识不再感觉枯燥乏味。
尤其是当自己设计的音乐播放器发出声音的时候,心中的喜悦与自豪油然而生。
最后,感谢老师的辛勤指导和严格要求。
真诚地说一声:老师,您辛苦了!还有帮助过我的同学,谢谢你们。
附录全部程序如下:library ieee;use ieee.std_logic_1164.all;entity yuepu ISport( clk:in std_logic;sel:in std_logic_vector(0 to 1);sel2: in std_logic_vector(0 to 1);toneindex:out integer range 0 TO 15);end yuepu;architecture bhv of yuepu IStype yinyue1 is array(0 to 369) of integer range 0 to 15;type yinyue2 is array(0 to 498) of integer range 0 to 15;type yinyue3 is array(0 to 198) of integer range 0 to 15;type yinyue4 is array(0 to 159) of integer range 0 to 15; constant memory1:yinyue1:=(12,12,13,13,1,1,1,1,1,1,5,5,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,12, 12,13,13,1,1,1,1,1,1,5,5,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,5, 5,6,6,6,6,6,6,6,6,6,6,6,6,3,3,5,5,1,1,1,1,1,1,3,3,2,2,14,14,13,13,13,13 ,0,0,2,2,2,2,3,3,2,2,2,2,14,14,13,13,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,1,1,1,1,1,1,6,6,1,1,1,1,1,1,1,1,1,1,1,1,3,3,15,15,7,7,7 ,7,7,7,6,6,7,7,7,7,7,7,7,7,7,7,7,7,6,6,3,3,2,2,2,2,2,2,2,2,3,3,7,7,7,7, 6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,15,15,15,15,15,15,6,6,15,15,15,15,1 5,15,15,15,15,15,15,15,3,3,15,15,7,7,7,7,7,7,6,6,7,7,7,7,7,7,7,7,7,7,7, 7,6,6,3,3,2,2,2,2,3,3,5,5,5,5,5,5,5,5,0,0,2,2,2,2,13,13,1,1,1,1,1,1,1,1 ,1,1,1,1,5,5,6,6,1,1,1,1,1,1,1,1,1,1,1,1,6,6,3,3,2,2,2,2,2,2,3,3,5,5,5,5,5,5,5,5,0,0,2,2,2,2,13,13,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 ,0,0,0,0,0,0,0,0,0,0); --《牧羊曲》constant memory2:yinyue2:=(12,12,13,13,1,1,1,1,1,1,1,1,1,1,1,1,13,13,12,12,1,1,1,1,1,1,2,2,1,1,1,1 ,13,13,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,13,13,2,2,2,2,2,2,3,3,2,2,2,2,3,3, 5,5,6,6,5,5,5,5,5,5,6,6,6,6,5,5,3,3,2,2,3,3,2,2,1,1,13,13,13,13,12,12,1 3,13,12,12,13,13,1,1,1,1,1,1,1,1,1,1,1,1,13,13,12,12,1,1,1,1,1,1,2,2,1, 1,1,1,13,13,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,13,13,2,2,2,2,2,2,3,3,2,2,2,2 ,3,3,5,5,6,6,5,5,5,5,5,5,6,6,6,6,5,5,3,3,2,2,3,3,2,2,1,1,13,13,13,13,12 ,12,13,13,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,5 ,5,6,6,6,6,6,6,6,6,6,6,6,6,15,15,6,6,5,5,5,5,5,5,6,6,5,5,5,5,3,3,2,2,1, 1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,1,1,1,1,1 ,1,1,1,1,1,1,1,15,15,6,6,5,5,5,5,5,5,6,6,5,5,5,5,3,3,5,5,6,6,6,6,6,6,15 ,15,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,5,5,6,6,6,6,6,6,6,6,6,6,6,6,15, 15,6,6,5,5,5,5,5,5,6,6,5,5,5,5,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5, 5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,3,5,5,5 ,5,5,5,3,3,5,5,5,5,3,3,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0, 13,13,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1); --《大海》constant memory3:yinyue3:=(3,5,5,5,6,15,6,5,5,5,5,5,5,5,5,5,3,5,5,5,6,15,8,9,9,9,9,9,9,9,9,9,9,9,9 ,9,9,9,9,9,5,6,5,5,5,5,5,5,9,9,9,9,9,9,15,15,15,15,8,8,8,8,8,8,8,8,8,8, 8,8,9,8,15,6,6,6,6,6,6,6,9,8,15,6,8,15,15,3,5,6,5,5,5,5,5,5,8,8,8,8,8,8 ,9,8,15,6,6,6,6,6,6,6,9,8,9,8,9,6,9,9,9,9,10,15,8,9,9,10,10,10,10,11,11 ,9,9,10,10,10,10,10,10,11,11,11,11,11,11,11,9,9,9,10,10,10,10,15,8,9,9, 10,10,10,10,11,11,9,9,10,10,10,10,10,10,10,15,8,9,8,15,6,8,15,6,5,5,6,1 5,8,9,910,10,10,10, 11,11,15,15,15,15); --《欢乐颂》constant memory4:yinyue4:=(3,3,3,3,1,1,1,1,3,3,3,3,1,1,1,1,3,3,3,3,5,5,6,6,5,5,5,5,0,0,0,0,6,6,6,6 ,6,6,5,5,4,4,4,4,4,4,4,4,2,2,3,3,2,2,1,1,2,2,2,2,0,0,0,0,3,3,3,3,1,1,0,0,3,3,3,3,1,1,0,0,3,3,3,3,5,5,6,6,6,6,6,6,0,0,0,0,15,15,15,15,5,5,5,5,6 ,6,6,6,3,3,3,3,2,2,1,1,2,2,3,3,5,5,5,5,5,5,5,5,15,15,15,15,5,5,5,5,6,6, 6,6,3,3,3,3,2,2,1,1,2,2,3,3,1,1,1,1,1,1,1,1); --《数鸭子》signal counter1:integer range 0 to 500;signal counter2:integer range 0 to 500;signal counter3:integer range 0 to 500;signal counter4:integer range 0 to 500;signal clk2:std_logic;signal clk3:std_logic;signal clk4:std_logic;signal clk1:std_logic;beginprocess (clk)variable count1:integer range 0 to 10000000;variable count2:integer range 0 to 10000000;variable count3:integer range 0 to 10000000;beginif (clk'event and clk='1') then count1:=count1+1;if( count1=625000) then clk2<=not clk2;count1:=0;end if;end if;if (clk'event and clk='1') then count2:=count2+1;if( count2=2500000) then clk3<=not clk3;count2:=0;end if;end if;if (clk'event and clk='1') then count3:=count3+1;if( count3=1250000) then clk4<=not clk4;count3:=0;end if;end if;end process ;process(sel,clk2,clk3,clk4)begincase sel iswhen"11"=>clk1<=clk3;when"10"=>clk1<=clk4;when"01"=>clk1<=clk2;when others=>null;end case;end process;process(clk1)beginif(clk1'event and clk1='1')then counter1<=counter1+1; if (counter1>369) then counter1<=0;end if;end if;if(clk1'event and clk1='1')then counter2<=counter2+1; if (counter2>498) then counter2<=0;end if;end if;if(clk1'event and clk1='1')then counter3<=counter3+1; if (counter3>198) then counter3<=0;end if;end if;if(clk1'event and clk1='1')then counter4<=counter4+1; if (counter4>159) then counter4<=0;end if;end if;end process;process(sel2,counter1,counter2,counter3,counter4)begincase sel2 iswhen"11" =>toneindex<=memory3(counter3);when"10" =>toneindex<=memory2(counter2);when"01" =>toneindex<=memory1(counter1);when"00" =>toneindex<=memory4(counter4);when others=>null;end case;end process;end bhv;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity tonetaba isport (index: in integer range 0 to 15;code: out std_logic_vector(7 downto 0);high1: out std_logic_vector(2 downto 0); tone: out integer range 0 to 2047);end tonetaba;architecture bhv of tonetaba isbeginprocess(index)begincase index iswhen 0 =>tone<=2047;code<="11000000"; high1<="000"; --0when 1 =>tone<=1091;code<="11111001"; high1<="000"; --1(中) when 2 =>tone<=1196;code<="10100100"; high1<="000"; --2(中)when 3 =>tone<=1289;code<="10110000"; high1<="000"; --3(中) when 4 =>tone<=1331;code<="10011001"; high1<="000"; --4(中) when 5 =>tone<=1409;code<="10010010"; high1<="000"; --5(中) when 6 =>tone<=1479;code<="10000010"; high1<="000"; --6(中) when 7 =>tone<=1541;code<="11111000"; high1<="000"; --7(中) when 8 =>tone<=1621;code<="10100100"; high1<="010"; --2(高) when 9 =>tone<=1668;code<="10110000"; high1<="011"; --3(高) when 10=>tone<=1728;code<="10010010"; high1<="101"; --5(高) when 11=>tone<=1763;code<="10000010"; high1<="110"; --6(高) when 12=>tone<=772; code<="10010010"; high1<="000"; --5(低) when 13=>tone<=911; code<="10000010"; high1<="000"; --6(低) when 14=>tone<=911; code<="11111000"; high1<="000"; --7(低) when 15=>tone<=1569;code<="11111001"; high1<="001"; --1(高) when others =>null;end case;end process;end bhv;library ieee;use ieee.std_logic_1164.all;entity bmux is port(index2:in integer range 0 to 15;rst:in std_logic;toneindex:out integer range 0 to 15);end;architecture bhv of bmux isbeginprocess(rst,index2)beginif (rst='0')then toneindex<=0;else toneindex<=index2;end if;end process;end bhv;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity speak isport(clk:in std_logic;tone:in integer range 0 to 2047; spks:out std_logic); end speak;architecture bhv of speak issignal preclk,fullspks:std_logic;beginprocess(clk)variable count: integer range 0 to 5;variable ff:std_logic;beginif (clk'event and clk='1' )thenif count<=5 thencount:=count+1;elsecount:=0;ff:=not ff;end if;end if;preclk<=not ff;end process;process(preclk,tone)variable count11:integer range 0 to 2047;beginif (preclk'event and preclk='1') thenif (count11=2047) then count11:=tone;fullspks<='1'; else count11:=count11+1;fullspks<='0';end if;end if;end process;process(fullspks)variable count2:std_logic;beginif (fullspks'event and fullspks='1')then count2:=not count2;if (count2='1' )then spks<='1';else spks<='0';end if;end if;end process;END bhv;library ieee;use ieee.std_logic_1164.all;entity top ISport (clk20MHZ:in std_logic;rst:in std_logic;sel:in std_logic_vector(0 to 1);sel2: in std_logic_vector(0 to 1);code1:out std_logic_vector(7 DOWNTO 0);high1: out std_logic_vector(2 downto 0);spkout: out std_logic);end top;architecture bhv OF top IScomponent yuepuport(clk:in std_logic;sel:in std_logic_vector(0 to 1);sel2: in std_logic_vector(0 to 1);toneindex:out integer range 0 TO 15);end component;component tonetabaport( index: in integer range 0 TO 15;code: out std_logic_vector(7 DOWNTO 0); high1: out std_logic_vector(2 downto 0); tone:out integer range 0 TO 2047);end component;component speakport( clk: in std_logic;tone:in integer range 0 TO 2047;spks: out std_logic);end component;component bmuxport(index2:in integer range 0 to 15;rst:in std_logic;toneindex:out integer range 0 to 15); end component;signal tone:integer range 0 TO 2047;signal toneindex:integer range 0 TO 15;signal toneindex2:integer range 0 TO 15;beginU1:yuepport map(clk=>clk20MHZ,sel=>sel,sel2=>sel2,toneindex=>toneindex); U2:tonetabaport map(index=>toneindex2,tone=>tone,code=>code1,high1=>high1);U3:speak port map(clk=>clk20MHZ,tone=>tone,spks=>spkout);U4:bmux port map(index2=>toneindex,rst=>rst,toneindex=>toneindex2); end bhv;。