当前位置:文档之家› 乐曲演奏电路

乐曲演奏电路

成绩指导教师:日期:《EDA技术与VHDL语言设计》课程设计题目: EDA技术及其应用——乐曲演奏电路姓名:陈院系:电子信息工程学系专业:电子信息工程班级:电信092学号: 910706220指导教师:余尤好2011年12 月EDA 技术及其应用——乐曲演奏电路陈(电子信息工程学系 指导教师:余尤好)摘要:利用EDA 技术对乐曲演奏电路进行仿真,设计者在EDA 软件平台上,用硬件描述语言HDL 完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作.EDA 是电子设计自动化(Electronic Design Automation )的缩写,在20世纪90年代初从计算机辅助设计(CAD )、计算机辅助制造(CAM )、计算机辅助测试(CAT )和计算机辅助工程(CAE )的概念发展而来的。

关键词:EDA 技术 仿真 乐曲演奏一、概述1.1设计目的及要求本实验课程的目的,旨在通过上机实验,使学生加深理解EDA 技术的基本方法,帮助和培养学生建立利用原理图和硬件描述语言进行电路设计的基本方法和利用EDA 工具软件(MAX+plus Ⅱ或Quartus7.2)设计简单数字电子系统的能力,为以后从事有关数字电子系统方面的设计和研究开发工作打下基础。

为使演奏能循环进行,需另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏。

1.2实验前预习每次实验前,学生须仔细阅读本实验指导书的相关内容,明确实验目的和实验内容;明确实验原理与步骤;复习与实验内容有关的理论知识;预习仪器设备的使用方法、操作规程及注意事项。

1.3设计环境计算机 MAX+plusII10.2 二、设计过程及原理2.1乐曲演奏的原理组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号的频率高低和持续时间,就可以使扬声器发出连续的乐曲声。

首先来看怎样控制音调的高低变化。

如下图1是乐曲演奏电路的原理框图,其中,乐谱产生的电路用来控制音乐的音调和音长。

控制音调通过设置计数器的预置数来实现,预置不同的数值就可以使计数器产生不同频率的信号,从而产生不同的音调。

控制音长是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。

每个音符的演奏时间都是0.25s 的整数倍,对于节拍长的音符,如2分音符,在记谱时将该音名连续记录两次即可。

6MHz扬声器4Hz数码管 图1 乐曲演奏电路原理框图反馈预置计数器 2分频器曲谱产生 音符显示2.2音名和频率的关系频率的高低决定了音调的高低。

音乐的十二平均率规定:没两个八度音之间的频率相差一倍。

在两个八度音之间,又可分为12个半音,每两个半音的频率比为2开12次方。

另外,音名A的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音。

由此可以计算处简谱中从低音1至高音1之间每个音名对应的频率见表一所示。

表1 简谱中的音名与频率的关系音名频率/Hz 音名频率/Hz 音名频率/Hz 低音1 261.6 中音1 523.3 高音1 1046.5 低音2 293.7 中音2 587.3 高音2 1174.7 低音3 329.6 中音3 659.3 高音3 1318.5 低音4 349.2 中音4 698.5 高音4 1396.9 低音5 392 中音5 784 高音5 1568 低音6 440 中音6 880 高音6 1760 低音7 493.9 中音7 987.8 高音7 1975.5 2.3音阶频率对应的分频比以及预置数该乐曲各音阶频率计相应的分频比见表二所示。

表2 各音阶频率对应的分频比以及预置数音名分频比预置数音名分频比预置数低音9102 7281 中音5111 11272低音7653 8730 中音4552 11831低音6818 9565 中音3827 12556低音6073 10310 中音3409 12974低音5736 10647 中音2867 13516三、设计过程3.1打开MAX+plusII10.2软件,点击主菜单中空白图标,进入新建文件对话框如图2.图2 新建文件对话框3.2点击ok进入程序编辑对话框如图3,编辑程序,程序代码见附录。

图3 程序编辑框3.3编辑程序完成点击保存按钮,然后点击编译窗口如图4图4 编译窗口3.4点击进行编译,编译成功的话会跳出如图5窗口图5 编译成功四、调试分析4.1点击新建跳出窗口点warefrom Editor file保存,会跳出波形编辑窗口如图6,然后点击保存。

图6 波形编辑窗口4.2将鼠标移至空白处并单击右键,出现如图7对话窗口。

图7 调入设计管脚4.3选择Enter nodes from snf选秀并按左键确认,会出现如图8对话框,单击和按钮,选择欲仿真的I/O管脚。

图8 加入要仿真的管脚4.4单击ok按钮,列出仿真电路的输入、输出管脚图,如图9图9 仿真前波形4.5点击选中simulator点击跳出调试图如图10图10 调试图4.6点击Start,观察仿真结果,单击激励输出波形文件Open SCF图标如图11图11 仿真结果图结束语:通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

回顾起此次课程设计过程,从到定题目到顺利完成,从理论到实践,在整个学习的日子里,可以学到很多东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过得知识。

在设计中遇到了很多难以解决的问题,通过上网查资料终于游逆而解。

参考文献:[1]王金明.EDA技术与Verilog设计.北京:科学出版社,2008.[2] 崔建明主编.电工电子EDA仿真技术北京:高等教育出版社,2004.附录:modulesong(clk_6MHz,clk_4Hz,speaker,high,med,low); input clk_6MHz,clk_4Hz;output speaker;output[3:0] high,med,low;reg speaker;reg[3:0]high,med,low;reg[7:0]counter;reg[13:0]divider,origin;wire carry;assign carry=(divider==16383);always@(posedge clk_6MHz)begin if(carry)divider<=origin;else divider<=divider+1;endalways@(posedge clk_6MHz)begin speaker<=~speaker;endalways@(posedge clk_4Hz)begincase({high,med,low})'b000000000011:origin<=7281;'b000000000101:origin<=8730;'b000000000110:origin<=9565;'b000000000111:origin<=10310;'b000000010000:origin<=10647;'b000000100000:origin<=11272;'b000000110000:origin<=11831;'b000001010000:origin<=12556;'b000001100000:origin<=12974;'b000100000000:origin<=13516;'b000000000000:origin<=16383;endcaseendalways@(posedge clk_4Hz)beginif(counter==63) counter<=0;else counter<=counter+1; case(counter)0:{high,med,low}<='b000000000011;1:{high,med,low}<='b000000000011;2:{high,med,low}<='b000000000011;3:{high,med,low}<='b000000000011; 4:{high,med,low}<='b000000000101; 5:{high,med,low}<='b000000000101; 6:{high,med,low}<='b000000000101; 7:{high,med,low}<='b000000000110; 8:{high,med,low}<='b000000010000; 9:{high,med,low}<='b000000010000; 10:{high,med,low}<='b000000010000; 11:{high,med,low}<='b000000100000; 12:{high,med,low}<='b000000000110; 13:{high,med,low}<='b000000010000; 14:{high,med,low}<='b000000000101; 15:{high,med,low}<='b000000000101; 16:{high,med,low}<='b000001010000; 17:{high,med,low}<='b000001010000; 18:{high,med,low}<='b000001010000; 19:{high,med,low}<='b000000000000; 20:{high,med,low}<='b000001100000; 21:{high,med,low}<='b000001010000; 22:{high,med,low}<='b000000110000; 23:{high,med,low}<='b000001010000; 24:{high,med,low}<='b000000100000; 25:{high,med,low}<='b000000100000; 26:{high,med,low}<='b000000100000; 27:{high,med,low}<='b000000100000; 28:{high,med,low}<='b000000100000; 29:{high,med,low}<='b000000100000; 30:{high,med,low}<='b000000100000; 31:{high,med,low}<='b000000100000; 32:{high,med,low}<='b000000100000; 33:{high,med,low}<='b000000100000; 34:{high,med,low}<='b000000100000; 35:{high,med,low}<='b000000110000; 36:{high,med,low}<='b000000000111; 37:{high,med,low}<='b000000000111; 38:{high,med,low}<='b000000000110; 39:{high,med,low}<='b000000000110; 40:{high,med,low}<='b000000000101; 41:{high,med,low}<='b000000000101; 42:{high,med,low}<='b000000000101; 43:{high,med,low}<='b000000000110; 44:{high,med,low}<='b000000010000; 45:{high,med,low}<='b000000010000; 46:{high,med,low}<='b000000010000; 47:{high,med,low}<='b000000100000;48:{high,med,low}<='b000000000011; 49:{high,med,low}<='b000000000011; 50:{high,med,low}<='b000000010000; 51:{high,med,low}<='b000000010000; 52:{high,med,low}<='b000000000110; 53:{high,med,low}<='b000000000101; 54:{high,med,low}<='b000000000001; 55:{high,med,low}<='b000000010000; 56:{high,med,low}<='b000000000101; 57:{high,med,low}<='b000000000101; 58:{high,med,low}<='b000000000101; 59:{high,med,low}<='b000000000101; 60:{high,med,low}<='b000000000101; 61:{high,med,low}<='b000000000101; 62:{high,med,low}<='b000000000101; 63:{high,med,low}<='b000000000101; endcaseendendmodule。

相关主题