verilogHDL的电子琴设计_第1页
verilogHDL的电子琴设计_第2页
verilogHDL的电子琴设计_第3页
verilogHDL的电子琴设计_第4页
verilogHDL的电子琴设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、河海大学本科课程设计报告河海大学计算机与信息学院(常州)课程设计报告 题 目 电子琴设计 专业/学号 电科/1162910124 授课班号 278605 学生姓名 马东林 指导教师 单鸣雷 完成时间 2014/01/07 课程设计(报告)任务书(理 工 科 类)、课程设计(报告)题目: 电子琴设计 、课程设计(论文)工作内容用FPGA器件驱动蜂鸣器演奏“茉莉花”片段。一首乐曲包含三个要素:乐曲声音频率,发音时间的长短,停顿的时间。按照图1乐谱,设计相应电路控制speaker信号的方波频率,某一频率持续时间长短,各频率间间隔大小,就可以推动蜂鸣器演奏乐曲。图1 茉莉花简谱一、课程设计目标 1、培

2、养综合运用知识和独立开展实践创新的能力;2、培养学生独立编写verilog hdl 程序的能力,加深对课本知识的理解。二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、两人一组合作分工完成程序的编写和调试。三、课程设计预期效果1、完成实验环境搭建;2、完成程序的编写和调试;3、能在实验平台上顺利演示效果用蜂鸣器播放一首音乐,并可以按键弹奏;4、锻炼学生的独立分析程序,解决问题的能力以及掌握verilog hdl 的实际应用。学生姓名: 马东林 专业年级: 电科/2011 分页,居中,宋体二号加。摘 要乐曲演奏广泛用于自动答录装置、手机铃声、集团电话及智能

3、仪器仪表设备。实现方法有许多种,在众多的实现方法中,以纯硬件完成乐曲演奏,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。FPGA预装了很多已构造好的参数化库单元LPM器件,通过引入支持LPM的EDA软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。本设计由现场可编程门矩阵(FPGA)作为控制芯片,通过VreilogHDL硬件描述语言设计,运用自顶而下的设计思想,按功能逐层分割实现层次化的设计。总体设计方案为先用分频电路产生不同频率方波;再利用利用数控分频器实现speaker输出信号频率的选择,某一频率持续时间长短,各频

4、率间间隔大小,其中方波的频率决定了音调的高低。【关键词】FPGA 分频 方波 乐曲演奏ABSTRACTPlaying music is widely used in automatic answering device, cell phone ring tones, PBX and intelligent instrumentation equipment. There are many ways to achieve in many implementations, the pure hardware complete the music played, with the improveme

5、nt of FPGA integration, lower prices, EDA design tool replacement, the increasing popularity of functional and popular, so the application of this approach increasingly more. FPGA preloaded with many already constructed parameterized library unit LPM devices supported by the introduction of LPM'

6、s EDA software tools, designers can design a structure independent and efficient use of silicon products is very high. The design of field programmable gate array (FPGA) as a control chip, description language design, the use of top-down design ideas through VreilogHDL hardware, divided by function

7、layer by layer to achieve hierarchical design. The overall design of the first to produce a square wave with a different frequency divider circuit; recycling use NC divider to achieve speaker output signal frequency selection, a frequency on the duration, frequency interval between each size, which

8、determines the frequency of the square wave voice pitch.正文,Times New Roman小四号,1.5倍行距。【Key words】FPGA Fractional frequency Square wave The music playing“第一章”,分页,居中,加黑宋体二号。 第一章 系统设计第一节 课题目标及总体方案基于现场可编程逻辑门阵列FPGA,通过EDA技术,采用VerilogHDL硬件描述语言实现乐曲演奏电路设计。程序设计思想为:1、用分频电路产生不同频率方波;2、利用计数器实现speaker信号频率选择,某一频率持续时

9、间长短,各频率间间隔大小。其框图如图2。本设计由现场可编程门矩阵(FPGA)作为控制芯片,通过VreilogHDL硬件描述语言设计,运用自顶而下的设计思想,按功能逐层分割实现层次化的设计。总体设计方案为(1)用分频电路产生不同频率方波;(2)利用计数器实现speaker信号频率的选择,某一频率持续时间长短,各频率间间隔大小。下面介绍主要模块的功能及作用。2分频器反馈预置计数器50MHz蜂鸣器音符显示曲谱产生4Hz数码管图2 系统组成第二节 应用工具简介一级标题“一、”,左对齐,加黑宋体三号。一、 EDA技术介绍EDA是电子设计自动化(Electronic Design Automation)的

10、缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计1。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配

11、器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。 在今天,EDA技术已经成为电子设计的普遍工具,无论设计芯片还是设计系统,没有EDA工具的支持,都是难以完成的。EDA工具已经成为设计师必不可少的武器,起着越来越重要的作

12、用。从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用广泛、工具多样、软件功能强大。EDA技术发展迅猛,完全可以用日新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA水平不断提高,设计工具趋于完美的地步。空一行。二、Verilog HDL语言介绍Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模2。作为一种通用化的硬件描述语言,Verilog HDL语言具有下述描述能力:设计的行为特性、设计的

13、数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行3。Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当

14、然,完整的硬件描述语句足以对从最复杂的芯片到完整的电子系统进行描述。Verilog HDL语言已经成为一种标准的硬件描述语言。它具有以下特点:(1)作为一种多用途的硬件描述语言,它具有很好的易学性和易用性。(2)Verilog HDL语言允许在同一个模块中进行不同抽象层次的描述。(3)大多数逻辑综合工具都支持Verilog HDL,使得它成为设计人员的一个很好的选择。(4)所有的制造厂商都提供了Verilog HDL的工艺库,用以支持仿真。(5)Verilog HDL的程序语言接口拥有强大的功能,允许用户用C语言对内部数据结构进行描述3。正是以上优点,使得Verilog HDL语言广泛流行。1

15、、 程序设计流程下面是verilog的设计流程图2 Verilog hdl的设计流程图2、 基本原理乐曲演奏的原理是这样的:组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声4。2.1音调的控制频率的高低决定了音调的高低。音乐的十二平均率规定:每两个8度音(如简谱中的中音1与高音1)之间的频率相差一倍。在两个8度音之间,又可分为12个半音,每两个半音的频率比为122。 另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余

16、为全音4。由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率,如表3.11所示:表1 简谱中的音名与频率的关系音名频率/Hz音名频率/Hz音名频率/Hz低音1261.6中音1523.3高音11046.5低音2293.7中音2587.3高音21174.7低音3329.6中音3659.3高音31318.5低音4349.2中音4698.5高音41396.9低音5392中音5784高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.5所有不同频率的信号都是从同一个基准频率分频得到的。由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到

17、的分频数四舍五入取整。若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;若基准频率过高,虽然误差变小,但分频数将变大。实际的设计综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率4。本例中选取500kHz为基准频率。若无500kHz的基准频率,则可以先分频得到500kHz,或换一个新的基准频率。实际上,只要各个音名间的相对频率关系不变,演奏出的乐曲听起来都不会"走调"。本例需要演奏的是梁祝乐曲,该乐曲各音阶频率及相应的分频比如表2所示。为了减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。表2中

18、的分频比就是从6MHz频率二分频得到的3MHz频率基础上计算得出的。由于最大的分频系数为9102,故采用14位二进制计数器分频可满足需要。在表2中,除给出了分频比以外,还给出了对应于各个音阶频率时计数器不同的预置数。对于不同的分频系数,只要加载不同的预置数即可。采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来也容易一些,如表3.12所示:表2 各音阶频率对应的分频比及预置数音名分频比预置数音名分频比预置数音名分频比预置数低音11911137中音19561092高音14781570低音21703345中音28511197高音24261622低音31517531中音37581290高

19、音33791669低音41432616中音47161332高音43581690低音51276772中音56381410高音53191729低音61136912中音65681480高音62841764低音710121036中音75061542高音72531795此外,对于乐曲中的休止符,只要将分频系数设为0,即初始值为2141=16383即可,此时扬声器将不会发声。2.2音长的控制音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。本例演奏的梁祝片段,最短的音符为4分音符,如果将全音符的持续时间设为1s的话,则只需要再提供一个4Hz的时钟频率即可产生4分音符的时长4。如图3.2所示是乐曲演

20、奏电路的原理框图,其中,乐谱产生电路用来控制音乐的音调和音长。控制音调通过设置计数器的预置数来实现,预置不同的数值可以使计数器产生不同频率的信号,从而产生不同的音调。控制音长是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,如2分音符,在记谱时将该音名连续记录两次即可。2.3按键弹奏按键弹奏电路中设计了7个按钮,可以弹奏出7个音调。另外两个按键可以用来控制弹奏的是高音还是中音或是低音。检测7个按钮采用独立按键的方式,当检测到有相应的按钮按下时,确定出对应的音符,在由此确定出对应的预置数,就可以弹

21、奏出对应的音符。 心得体会(1)quartus II软件熟练掌握: 起初学习完EDA这门课后,对quartus II的使用并不是很熟练,不知道先做什么,后做什么。但是经过这次实训,对该软件的操作熟练程度就显著提高了,能够利用该软件完成一些仿真设计。(2)verilog 语言的熟练掌握:Verilog HDL是一种硬件描述语言,易于学习和应用。通过学习,熟悉了Verilog语言的语法特点,能够凭借EDA工具,使用verilog语言编写一些简单的小程序。(3)学会了音乐发生器的编程原理: 刚开始的时候由于找到的程序不完整,我们经过不断的调试和论证,先后添加了几个分频电路模块。 之后考虑到我们的方案

22、功能太过单调,我决定增加一个功能,把乐曲的音调显示出来,经过苦思冥想最终写出了利用三位动态扫描数码管把音调的高中低不同的音调分别显示出来。(4)理解了FPGA的编程思想: 借助FPGA可以通过编写程序实现自己想要的功能。先编写每个比较小的功能模块的程序,然后把这些模块连接起来实现一个整体功能。经过这次试训,充分感受到了FPGA 的强大与灵活之处。(5)实训过程中出现了很多问题: 第一,是波形仿真问题,有的仿真时间比较长,等了好长时间都没出现仿真结果,刚开始不知道是什么原因,后来知道了是仿真时间设置的不合适。第二,是显示部分,我们先是用的三位静态数码管,在最后进行引脚锁定的时候发现所写的程序有问

23、题,21个数码管输出引脚无法进行锁定,而且程序中并没有体现究竟什么情况下让哪个数码管点亮,所以后来决定采用动态数码管来显示。第三,在写显示电路程序的时候,刚开始没去查资料,以为试验箱上面的八位数码管是共阴的,显示的数据有些乱码,后来就改正了。还有就是我们错误的以为数码管的段码不用小数点的话可以用七位段码来实现,结果显示的数据中小数点都亮了;我们以为如果只用三位数码管的话只需要三位位码,结果没有定义的数码管被默认点亮了,于是就定义了八位位码,将不用的对应位写0。(6) 团队合作:每2个人一个小组,小组之中要求相互团结的合作精神。在实训过程中,2个人之间可以相互取长补短,可以各自提出不同的建议,相

24、互合作,为设计出最优的方案各尽其力,在讨论中共同学习,共同进步。在两个周的实训过程中,我在这方面感触很深。(7)实训整体过程:在实训之前,对EDA设计这方面的知识掌握的不够熟练,在两个星期的实训过程中,我们在不断的摸索中曲折前进,在老师的辛勤指导下不断努力,坚持不懈,最终学到了不少知识。参考文献1 谢自美. 电子线路设计(第二版)M. 华中科技大学出版社. 20002 卢毅编著.VHDL与数字电路设计M.北京.科技大学出版.20013 侯佰亨,顾新编著.VHDL硬件描述语言与实际应用M.西安.西安电子科社.20004 康华光 陈大钦. 电子技术基础模拟部分(第四版)M. 高等教育出版社.198

25、75(美)J.Bhasker . Verilog HDL 硬件描述语言M . 机械工业出版社.20006 周明德. 微型计算机系统原理及应用(第四版) M. 清华大学出版社. 2002 7 张洪润等. 电子线路及应用. 北京.科学出版社. 2002 8 杨宝清. 实用电路手册. 北京. 机械工业出版社. 2002 附 录附件1:引脚配置附件2:modelsim仿真图1附件3:modelsim仿真图2附件4:Verilog HDL 程序module music1(song_sel,clk_12MHZ,CODE,HIGH_LOW,SPKOUT,rst,sw1,sw2,sw3,sw4,sw5,sw6

26、,sw7);input 1:0song_sel;input clk_12MHZ,rst,sw1,sw2,sw3,sw4,sw5,sw6,sw7;output 2:0CODE;output 1:0HIGH_LOW;output SPKOUT;wire 10:0amount;note u1(.clk(clk_12MHZ),.sel(song_sel),.hml(HIGH_LOW),.code(CODE),.amount(amount),.rst(rst),.sw1(sw1),.sw2(sw2),.sw3(sw3),.sw4(sw4),.sw5(sw5),.sw6(sw6),.sw7(sw7);sp

27、eak u3(.clk(clk_12MHZ),.count(amount),.speaker(SPKOUT);endmodulemodule note(clk,sel,hml,code,amount,rst,sw1,sw2,sw3,sw4,sw5,sw6,sw7); /?input clk,rst,sw1,sw2,sw3,sw4,sw5,sw6,sw7;input 1:0sel;output reg1:0hml=2'b00;output reg2:0code=3'b000;output reg10:0amount=11'b0;reg 31:0counter32=32&#

28、39;b0;reg clk_4hz=1'b0;reg3:0high=4'b0;reg3:0med=4'b0;reg3:0low=4'b0;reg 7:0counter8=8'b0;reg 2:0d=3'b000;/reg 2:0a=3'b000;always (posedge clk) /50mhz->4hzbeginif(counter32>=12500000) begin counter32<=32'b0;clk_4hz<=1;end /else begin counter32<=counter3

29、2+32'b1;clk_4hz<=0; endendalways (posedge clk_4hz) /每4hz进来读取一个音符if(sel=2'b00) /进入自动循环播放模式beginif(counter8=106)counter8<=0;elsecounter8<=counter8+8'h1;case (counter8)0:high,med,low<='h030;/1:high,med,low<='h030;2:high,med,low<='h030;3:high,med,low<='h0

30、50;4:high,med,low<='h060;5:high,med,low<='h100;6:high,med,low<='h100;7:high,med,low<='h060;8:high,med,low<='h050;9:high,med,low<='h050;10:high,med,low<='h050;11:high,med,low<='h060;12:high,med,low<='h050;13:high,med,low<='h050;14:

31、high,med,low<='h050;15:high,med,low<='h000;16:high,med,low<='h030;17:high,med,low<='h030;18:high,med,low<='h030;19:high,med,low<='h050;20:high,med,low<='h060;21:high,med,low<='h100;22:high,med,low<='h100;23:high,med,low<='h060;24:

32、high,med,low<='h050;25:high,med,low<='h050;26:high,med,low<='h050;27:high,med,low<='h060;28:high,med,low<='h050;29:high,med,low<='h050;30:high,med,low<='h050;31:high,med,low<='h000;32: high,med,low<='h050;33:high,med,low<='h050;34

33、:high,med,low<='h050;35:high,med,low<='h050;36:high,med,low<='h050;37:high,med,low<='h050;38:high,med,low<='h030;39:high,med,low<='h050;40:high,med,low<='h060;41:high,med,low<='h060;42:high,med,low<='h060;43:high,med,low<='h060;44

34、:high,med,low<='h050;45:high,med,low<='h050;46:high,med,low<='h050;47:high,med,low<='h000;48:high,med,low<='h030;49:high,med,low<='h030;50:high,med,low<='h020;51:high,med,low<='h030;52: high,med,low<='h050;53:high,med,low<='h050;5

35、4:high,med,low<='h030;55:high,med,low<='h020;56:high,med,low<='h010;57:high,med,low<='h010;58:high,med,low<='h010;59:high,med,low<='h020;60:high,med,low<='h010;61:high,med,low<='h010;62:high,med,low<='h010;63:high,med,low<='h000;6

36、4: high,med,low<='h030;65:high,med,low<='h020;66:high,med,low<='h010;67:high,med,low<='h030;68:high,med,low<='h020;69:high,med,low<='h120;70:high,med,low<='h020;71:high,med,low<='h030;72:high,med,low<='h050;73:high,med,low<='h050;

37、74:high,med,low<='h060;75:high,med,low<='h100;76:high,med,low<='h050;77:high,med,low<='h050;78:high,med,low<='h050;79:high,med,low<='h000;80: high,med,low<='h020;81:high,med,low<='h020;82:high,med,low<='h030;83:high,med,low<='h050

38、;84:high,med,low<='h020;85:high,med,low<='h030;86:high,med,low<='h010;87:high,med,low<='h006;88:high,med,low<='h005;89:high,med,low<='h005;90:high,med,low<='h005;91:high,med,low<='h000;92:high,med,low<='h006;93:high,med,low<='h006

39、;94:high,med,low<='h010;95:high,med,low<='h010;96:high,med,low<='h020;97:high,med,low<='h020;98:high,med,low<='h020;99:high,med,low<='h010;100:high,med,low<='h020;101:high,med,low<='h010;102:high,med,low<='h006;103:high,med,low<='

40、h005;104:high,med,low<='h005;105:high,med,low<='h005;106:high,med,low<='h000;default: high,med,low<='h000;endcaseendelse /进入弹奏模式begincase(d) 0:high,med,low<='h000; 1:high,med,low<='h100; 2:high,med,low<='h200; 3:high,med,low<='h300; 4:high,med,

41、low<='h400; 5:high,med,low<='h500; 6:high,med,low<='h600; 7:high,med,low<='h700;default:high,med,low<='h000;endcaseend/ -独立按键- reg 19:0cnt=20'b0; reg 6:0 low_sw=6'b111111;reg 6:0 low_sw_r=6'b111111; wire 6:0led_ctrl = low_sw_r6:0 & ( low_sw6:0); alw

42、ays (posedge clk or negedge rst)beginif (!rst)begincnt <= 20'd0;low_sw <= 7'b1111111;low_sw_r <= 7'b1111111;d<=0;endelse if (cnt = 20'hfffff) /20ms进来采集键盘一次begin cnt<=0;low_sw <= sw7,sw6,sw5,sw4,sw3,sw2,sw1;endelse begincnt <= cnt + 1'b1;low_sw_r <= low_sw; if ( led_ctrl0 ) d=1; if ( led_ctrl1 ) d=2; if ( led_ctrl2 ) d=3; if ( led_ctrl3 ) d=4; if ( led_ctrl4 ) d=5; if ( led_ctrl6 ) d=7; if ( led_ctrl5 ) d=6;end end / - always (posedge clk) /每个音符对应的预置数beginamount<=11'b0;case (high,med,low)/ &#

温馨提示

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

评论

0/150

提交评论