简易乐器演奏器设计.doc_第1页
简易乐器演奏器设计.doc_第2页
简易乐器演奏器设计.doc_第3页
简易乐器演奏器设计.doc_第4页
简易乐器演奏器设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录1引言12设计实现32.1原理描述32.1.1音名与频率的关系32.1.2可变分频器32.1.3节拍发生器原理42.2乐曲演奏电路各模块设计52.3 乐曲演奏电路的子结构52.3.1 音调发生器模块52.3.2音调编码器电路模块72.3.3 手动自动选择模块82.3.4 数控分频器模块102.4 顶层原理图及仿真122.4.1 顶层原理图122.4.2 顶层原理仿真图132.5 硬件下载及实现14总结16谢辞17参考文献18课程设计说明书1引言电子设计自动化EDA(Electronic Design Automation)是指利用计算机完成电子的设计。EDA技术是以计算机和微电子技术为先导,汇集了计算机图形学、拓扑、逻辑学、微电子工艺与结构学和计算机数学等等多种计算机应用学科最新成果的先进技术。EDA工具的发展经历了两个阶段:物理工具和逻辑工具。现在EDA和系统设计工具正逐渐被理解成一个整体的概念:电子系统设计自动化。物理工具用来完成设计中的实际物理问题,如芯片布局、印制电路板布线等;逻辑工具是基于网表、布尔逻辑、传输时序等概念,首先由原理图编辑器或硬件描述语言进行设计输入,然后利用EDA系统完成综合、仿真、优化等过程,最后生成物理工具可以接受的网表或VHDL,Verilog-HDL的结构化描述。现在常见的EDA工具有编辑器、仿真器、检查分析工具、优化综合工具等。VHDL是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。VHDL的英文全写是:VHSI(Very High Speed Integrated Circuit)Hardware Description Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点 。与其他硬件描述语言相比,VHDL具有以下特点:(1)功能强大、设计灵活。VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。(2)支持广泛、易于修改。由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。(3)强大的系统硬件描述能力。VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。(4)独立于器件的设计、与工艺无关。设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。(5)很强的移植能力,易于共享和复用。VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。目前有多种EDA工具支持采用VHDL进行电路综合、仿真以及实现。一些可编程器件生产商将使用VHDL进行电路设计所需的多种EDA工具集成为统一的开发平台提供给用户,进行针对本公司可编程器件产品的开发,从而使整个设计流程更加简捷和易于使用。目前比较常见的是Altera公司的QuartusII 和Xilinx 公司的ISE开发平台。本次课程设计是利用EDA设计一个简单的乐曲演奏器,可通过按键输入来控制音响声音 ,演奏时可以通过按键选择是手动演奏还是自动演奏,手动演奏是通过按键进行简易乐曲的演奏,自动演奏则是演奏已存入的固定乐曲。2设计实现2.1原理描述2.1.1音名与频率的关系根据声乐知识,产生音乐的两个因素是音乐频率的持续时间,音乐的十二平均率规定,每两个八音度之间的频率相差一倍,在两个八音度之间,又可分为12个半音。每两个半音的频率比为4。另外,音名A(乐谱中的低音6)的频率为440HZ,音名B到C之间,E到F之间为半音,其余为全音。由此可以计算出乐谱中从低音1到高音1之间每个音名的频率如图2-1-1所示:音名频率(Hz)音名频率(Hz)音名频率(Hz)低音1261.63中音1523.25高音11046.50低音2293.67中音2587.33高音21174.66低音3329.63中音3659.25高音31381.51低音4349.23中音4698.46高音41396.92低音5391.99中音5783.99高音51567.98低音6440中音6880高音61760低音7439.88中音7987.76高音71975.52图2-1-1 简谱中的音名与频率的关系2.1.2可变分频器(1)基准频率的选取各音名所对应的频率可由一频率较高的基准频率进行整数分频得到,所以实际产生各音名频率为近似的整数值。这是由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频系数四舍五入取整,若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大,若基准频率过高,虽然误码差较小,但分频结构将变大,实际的设计应综合考虑两方面的因素,在尽量减小频率差的前提下取舍合适的基准频率。本次设计选择12MHz作为基准频率。(2)分频系数A、公用二进制的计数容量N及初始值的选取D1、分频系数的选取 首先将12MHz的基准频率进行12分频,得到1MHz的基准频率,分频系数A1MHz音名频率,此分频系数可由计数器实现。但若不加处理语句,其分频后的信号将不是对称方波。而占空比很小的方波很难使扬声器有效地发出声响。为得到对称方波,可将分频系数A分解为:分频系数A=分频系数n2。即先进行分频系数n的分频,得到不对称方波,然后再2分频得到对称方波。2、公用二进制的计数容量N的选取n分频可由n进制计数器实现。n进制计数器可用复位法或置位法实现,由于加载初始值d的置位法可有效地减少设计所占用的可编程逻辑器件资源,因此,此次设计采用置位法。低音1的分频数n为最大,其值为1275,应取公用二进制计数器的计数容量N大与“最大分频系数n”,故本次设计的公用二进制计数器应该设计为十一位二进制加法计数器,其计数最大容量为2048,计数的最大值N为2047,可满足本次设计中所有音名对音频系数的要求。3、初始值的选取D初始值D = 计数最大值N - 分频系数n此次设计中应用的各音名对应的分频系数值及初始值如表所示:音符初始值对应音谱区别高中低音02047001773102912203103630411164051197506129060713727081410119148021101542311216225115172812图2-1-2各音名对应的分频系数值及初始值(3)月光的音符谱为:3;3;3;3;1;1;1;1;5;5;5;5;6;6;6;6;6;6;6;6;5;5;5;5;2;2;2;2;4;4;4;4;1;1;1;1;2;2;2;2;4;4;4;4;1;1;1;1;2;2;2;2;4;4;4;4;7;7;7;7;3;3;3;3;02.1.3节拍发生器原理该演奏电路的最小节拍为1拍,将一拍的时长定为0.25s,则只需要再提供一个4Hz的时钟频率即可产生一拍的时长。为了能达到演奏时能循环进行,则需设置一个时长计数器,当乐曲演奏完时,保证能自动从头开始演奏。2.2乐曲演奏电路各模块设计本次设计乐曲演奏电路结构方框图如图2-2-1所示:基准时钟12MHz模式选择 auto手动输入FPGA时钟电路数控分频器电路音乐节拍产生电路音调编码电路4Hz12MHz扬声器数码管 图2-2-1 乐曲演奏电路结构方框图2.3 乐曲演奏电路的子结构顶层结构所包含的模块分别有音调发生器(ydfsq)模块、音调编码器(ydbmq)模块、手动自动选择(bmux)模块及数控分频器(skfpq)模块。2.3.1 音调发生器模块1、音调发生器模块在此模块中设置了一个8位二进制计数器(计数最大值为64),这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25s,恰好为当全音符设为1s时,四四拍的4分音符的持续时间。例如,ydfsq在以下的VHDL逻辑描述中,“月光”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即为1s时间,相应地所对应“3”音符分频预置数为1036在skfpq的输入端停留了1s。随着notetabs中的计数器按4Hz的时钟频率做加法计数时,乐谱逐次被选取,“月光”乐曲就开始自然连续而且循环地演奏起来。音调发生器模块VHDL源程序如下:library ieee;use ieee.std_logic_1164.all; -库的声明entity ydfsq isport(clk:in std_logic;toneindex:out integer range 0 to 15);end;architecture bhv of ydfsq issignal counter:integer range 0 to 63; -读取音符谱中的音符beginprocess(clk,counter)begin if counter=63 thencounter=0; elsif clkevent and clk=1 then countertoneindextoneindextoneindextoneindextoneindextoneindextoneindexNULL;end case;end process;end;2、音调发生器模块的仿真图图2-3-1 音调发生器模块的仿真波形图通过仿真图可以清楚的看到,时钟clk由0开始计数,每计一次数输出toneindex的值随之发生一定的变化,只不过根据乐谱的不同,输出的变化也不尽相同。例如在本次设计中,自第4个时钟上升沿来临到第7个时钟上升沿,输出toneindex “1”。于是根据乐谱的不同就输出不同的音符,作为音调编码器的输入。然后把输出toneindex输入到音调编码器模块,进行下一步编码工作。于是,由仿真图可以知道本模块输出的即为演奏音乐的音符谱,说明该程序正确,可以生成逻辑器件。3、音调发生器模块生成的逻辑器件图2-3-2 音调发生器电路模块生成器件2.3.2音调编码器电路模块1、音调编码器模块该编码模块的作用为将输入的音符数据翻译为音乐产生模块的所需要的分频系数,并且显示音符的数字码型和高音阶,通过对照图2-1-2各音名对应的分频系数值及初始值,根据输入得到初始值,从而得到分频系数以便进行分频,得到所需的频率。音调编码器模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity ydbmq isport(index:in integer range 0 to 15;code:out integer range 0 to 15;code1:out integer range 0 to 15;tone:out integer range 0 to 2047);end;architecture bhv of ydbmq isbeginprocess(index)begin -为个音符赋初始值以便进行分频case index iswhen 0=tone=2047;code=0;code1tone=773;code=1;code1tone=912;code=2;code1tone=1036;code=3;code1tone=1116;code=4;code1tone=1197;code=5;code1tone=1290;code=6;code1tone=1372;code=7;code1tone=1410;code=1;code1tone=1480;code=2;code1tone=1542;code=3;code1tone=1622;code=5;code1tone=1728;code=1;code1NULL;end case;end process;end ;2、音调编码器模块的仿真图图2-3-3 音调编码器模块的仿真波形图在此程序中index为音乐节拍产生模块输出的音符数据,经过翻译后将tone输出到数控分频模块为其提供分频系数的初始值,code为数码管显示的字符数,应用模式5,所以直接输出音符的二进制值,code1为高音阶指示信号,当code1为是说明输出为高音阶的音符。通过仿真图可以清楚地看到结果。3、音调编码器模块生成的逻辑器件图2-3-4音调编码器模块生成的逻辑器件2.3.3 手动自动选择模块1、手动自动选择模块根据设计的要求,该简易乐曲演奏器能实现手动或自动演奏乐曲的功能。于是,可通过一个按键cs来进行自动与手动的选择,当cs按下时,乐曲自动演奏,其他情况下均为手动演奏乐曲,即可以通过按下其他的按键(与cs相连的按键除外)来控制不同的音符。与此同时,还需要一个复位信号rst来控制该演奏器是否工作,当rst为1时,停止演奏,为0时,可以演奏。以上提到的手动与自动的选择只能在rst为0时有效。手动自动选择模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity bmux isport(d1,d2:in integer range 0 to 15;cs,rst:in std_logic;q:out integer range 0 to 15); end;architecture bhv of bmux isbegin process(cs,rst)beginif rst=1 then -复位时输出为0 qqqq=d1;end case;end if;end process;end;2、手动自动选择模块的仿真图图2-3-5手动自动选择模块的仿真波形图此仿真图中输入cs代表手动自动演奏的选择端,输入rst代表整体复位端,输入d1、d2分别代表手动和自动演奏的音符,q为输出端,由此仿真图可清楚的看到当rst=1时,不论选择的是手动还是自动,输出都为零,达到了整体复位的功能;当rst=0且cs=1时,自动演奏乐曲,因为q与d2的值相同;当rst=0且cs=0时,手动演奏乐曲,因为这时的q与d1的值相同,从而也达到了演奏方式选择的功能。3、手动自动选择模块生成的逻辑器件图2-3-6手动自动选择模块生成的逻辑器件2.3.4 数控分频器模块1、数控分频器模块的功能该模块的clk端输入一个具有较高频率(本实验为12MHz)的信号,通过skfpq分频后由spkout输出。由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲信号,为了便于驱动喇叭,需另加一个D触发器均衡其占空比,也即作二分频处理。skfpq对clk输入信号的分频比由11位预置数tone10.0决定。spkout的输出频率将决定每一音符的音调,这样分频计数器的预置数tone10.0与spkout的输出频率就有了对应关系。例如在ydbmq模块中取tone10.0=1116,作为发音符为“3”音的信号频率。数控分频器模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity skfpq isport(clk:in std_logic;tone:in integer range 0 to 2047;spks:out std_logic);end;architecture bhv of issignal preclk:std_logic;signal fullspks:std_logic;begin process(clk)variable count4:integer range 0 to 15;begin preclk11 then -将基准频率进行12分频preclk=1;count4:=0;elsif clkevent and clk=1 then count4:=count4+1;end if;end process;process(preclk,tone)variable count11:integer range 0 to 2047;begin if preclkevent and preclk=1 then -按分频系数进行分频 if count11=2047 thencount11:=tone;fullspks=1; else count11:=count11+1;fullspks=0; end if;end if;end process;process(fullspks)variable count2:std_logic;beginif fullspksevent and fullspks=1 thencount2:=not count2; if count2=1 then spks=1; elsespks=0; end if;end if;end process;end;2、数控分频器模块的仿真图图2-3-7数控分频器模块的仿真图在此仿真图中,输入clk是一个频率较大的时钟信号,输入tone代表着某个音符的分频初始值,输出spks则代表将输入clk先经过12次分频,再经过(预置数终值2048-tone)次分频,最终再进行二分频处理,而这个信号的频率就是我们需要演奏的音谱的频率,根据频率的不同,从而能通过喇叭听到不同的声音,实现音乐的播放。3、数控分频器模块生成的逻辑器件图2-3-8数控分频器模块逻辑器件2.4 顶层原理图及仿真2.4.1 顶层原理图利用EDA工具提供的原理图的方式进行输入,原理图输入方法比较容易掌握,而且直观方便,根据前几次设计的模块及生成的逻辑器件可以很方便地把各个子模块所生成的逻辑器件组合起来,即将各个子模块之间的输入输出端、子模块与整体电路之间的输入输出端进行正确的硬件连接,进行编译、下载,从而实现整体功能。它将音调发生器(ydfsq)模块、音调编码器(ydbmq)模块、手动自动选择(bmux)模块及数控分频器(skfpq)模块连接起来。顶层原理图,如图2-4-1所示:图2-4-1 顶层模块原理图2.4.2 顶层原理仿真图图2-4-2 顶层模块仿真图通过仿真波形图可以看到,输入端rst为复位端,当其值为1时,输出端均为0,cs为手动、自动选择端,cs为1时手动演奏即输出端与d0的值相同,cs为0时自动演奏即输出端与d1的值相同,也就是演奏已存入的固定乐曲;与此同时进行手动演奏和自动演奏时,数码管上即yinf和gdyin的输出同时能显示出音符的数和高低音的种类。从仿真图中得知所设计的原理图符合本设计要求,可以进行下载。2.5 硬件下载及实现输入程序并且编译无误,并且仿真无误后,便进行引脚锁定及程序下载,在进行引脚锁定时必须对照引脚锁定图进行锁定,采用模式5其引脚锁定图如图2-5-1所示:图2-5-1模式5实验电路结构图根据需要,本设计采用模式5,这是因为数码管自带译码芯片,输出时只需输出数字的二进制数,因此不必直接输出数字的码型,这就方便了字符的输出。根据模式5上所对应的引脚号查表可以得出需要锁定的引脚号码。锁定完后如图 2-5-2所示:图2-5-2 引脚锁定图cs键8 为自动手动选择键,当cs=1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论