基于eda的电子琴设计

上传人:飞****9 文档编号:143930000 上传时间:2020-09-03 格式:DOC 页数:17 大小:62.51KB
返回 下载 相关 举报
基于eda的电子琴设计_第1页
第1页 / 共17页
基于eda的电子琴设计_第2页
第2页 / 共17页
基于eda的电子琴设计_第3页
第3页 / 共17页
基于eda的电子琴设计_第4页
第4页 / 共17页
基于eda的电子琴设计_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《基于eda的电子琴设计》由会员分享,可在线阅读,更多相关《基于eda的电子琴设计(17页珍藏版)》请在金锄头文库上搜索。

1、EDA电子琴设计2009-07-11 09:07目录前 言 3一、设计要求 3二、设计目的 3三、硬件电路的设计 31、电子琴整体电路 31.1手动/自动演奏模块 41.2音调发生器模块 41.3数控分频模块 5四、程序设计 51、手动/自动演奏模块的设计 62、音调发生器模块的设计 73、数控分频模块的设计 7五、组装调试下载 7六、心得体会 9七、参考文献 9附录1 10附录2 11前 言EDA技术是电子设计的发展趋势,利用EDA工具可以代替设计者完成电子系统设计中的大部分工作。EDA工具从数字系统设计的单一领域,发展到今天,应用范围已涉及模拟、微波等多个领域,可以实现各个领域电子系统设计

2、的测试、设计方针和布局布线等。设计者只要完成对电子系统的功能描述,就可以利用计算机和工具,进行设计处理,最终得到设计结果。采用可编程逻辑器件通过对器件内部的设计来实现系统功能,是一种基于芯片的设计方法。设计者可以根据定义器件的内部逻辑很引出端,将电路板设计的大部分工作放在芯片的设计中进行,通过对芯片设计实现数字系统的逻辑功能。用硬件描述语言进行电路与系统的设计是当前EDA技术的重要特征。硬件描述语言的突出优点是:语言的公开可利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的复用和继承等。目前常用的IEEE标准硬件描述语言有VHDL和Verilog-HDL。一、设

3、计要求 基于传统数字频率计的测量精度将随被测信号频率的下降而下降,在实用中有较大的局限性,而等精度频率计不但具有较高的测量精度,而且在整个测频区域内保持恒定的测试精度。本系统设计的基本指标如下:1 对于频率测试功能,测频范围为0.1-50MHZ;对于测频全域相对误差恒为百万分之一。2 对于脉宽测试功能,测试范围为0.1us-1s,二、设计目的熟悉Quartus 2软件的使用。熟悉EDA实验开发系统的基本使用。学习VHDL基本单元电路的设计应用。进一步掌握EDA的多层次设计方法。学习音乐发生器的设计。三、硬件电路的设计1、电子琴整体电路(见附录1)本设计由手动/自动演奏模块、音调发生器、数控分频

4、器3个模块组成。手动/自动演奏模块的作用是实现手动和自动演奏音乐的控制。音调发生器tone的作用是产生获得音阶的预置值。数控分频模块spreker对时基钟脉冲进行分频,得到与1,2,3,4,5,6,7,七个音符对应的频率。这3个模块如下:1.1手动/自动演奏模块1.2音调发生器模块1.3数控分频模块四、程序设计(见附录2)流程图(如下图1) 图11、手动/自动演奏模块的设计在automusic中设置了9位二进制计数器,作为音符数据ROM的地址发生器。这个计数器的计数频率选为4HZ,即每一计数值的停留时间为0.25秒,恰为全音符设为1秒时,四四拍的4分音符持续时间。例如,automusic在以下

5、的VHDL逻辑描述中,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间,相应地,所对应的“3”音符分频预置数值为1036,在speaker的输入端停留了1秒。随着tone中的计数器按4HZ的时钟速率作加法计数时,即随地址值递增时,音符数据ROM中的音符数据将从ROM中通过index3.0端口输向tone模块,乐曲就开始连续自然地演奏起来了。Index27.0是手动音符输入端,8位分别对应do,re,mi,fa,sol,la,si,!do八个音符。auto是自动/手动播放控制端,当auto为0时实现自动演奏功能,为1时则是手动输入乐曲。2、音调发生器模块的设计音符的持

6、续时间须根据乐曲的速度及每个音符的节拍数来确定,该模块tone的功能首先是为speaker提供决定所发音符的分频预置数,而此数在speaker输入口停留的时间即为此音符飞节拍值。模块tone是乐曲简谱码对应的分频预置数查表电路,其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共13个,每一个音符的停留时间由音乐节拍和音调发生器模块tone的clk的输入频率决定,在此为4HZ。这13个值的输出由对应于tone的4为index3.0确定,而index3.0最多有16种可选值。输向tone中index3.0的值index03.0的输出值与持续的时间由模块tone决定。3、数控分频模块的设计音符的频

7、率可以由speaker获得,这是一个数控分频器。数控分频模块spreker对时基钟脉冲进行分频,得到与1,2,3,4,5,6,7,七个音符对应的频率。由其clk端输入一具有较高频率(12MHZ)的信号,通过speaker分频后由spks输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2。speaker对clk输入信号的分频比由11位预置数tone10.0决定。spks的输出频率将决定每一音符的音调,这样,分频计数器的预置值tone10.0与spks的输出频率,就有了对应关系。例如在tone模块中

8、若取tone10.0=1036,将发音符为“3”音的信号频率。五、组装调试下载EDA实验箱的芯片是:EP1C3T144C8。1、引脚配置程序整体组装的方法有两种:一种是用VHDL语言编写顶层文件,将各个模块的程序组装起来,另一种是用用Quarus II软件将各个模块的程序转化成硬件原理图。我采用的是第二种方法,第二种方法比较直观,且易于实现。组装完成后就对程序进行编译,下载到实验箱。2、组装调试下载过程中遇到的问题1、 连接好硬件图后,编译有错误。原因是原理图不能连接到所对应的模块的程序。解决办法:将各个模块的程序放到所建立的原理图的工程里面。2、 编译有错误。原因是建立的ROM的addres

9、s与speaker中用到的信号count0的长度不相对应。解决办法:将ROM中的address的长度改成与count0长度一致的。3、 编译完成后,自动演奏的乐曲音调不对(变调了)。原因是我建立的ROM中输入数据错了。解决办法:对照简谱,将输错的谱改过来。4、 手动弹奏的sol,la两按键发出的音调相同。原因是在音调发生器中缺少了1116这一分频预置数值。解决办法:在音调发生器tone中的分频预置数这一程序段中添加分频预置数值为1116的语句。5、 选乐曲困难。不知道要选怎么样的乐曲,电子琴演奏出来的乐曲才不会变调。通过向老师咨询,我们选乐曲最好是选四拍的没有低音的乐曲。后面就选了“北京的金山

10、上”和“梁祝”这两首乐曲。六、心得体会 课程设计是一项重要的实习学科之一,我们要正确的面对这项任务,把它做好做的精细,以达到锻炼人的目的,所以说一份好的心得体会是经过认真经历之后才能做出来的!做了三周的课程设计,有很多的心得体会,有关于专业知识方面的,也有关于人与人之间关系方面的。 在着三周里学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,

11、程序编译就通过了,心里终于舒了一口气。在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示,后来,在数十次的调试之后,才出现正确的结果。其次,在连接各个模块的时候一定要注意各个输入、输出引脚的线宽,因为每个线宽是不一样的,只要让各个线宽互相匹配,才能得出正确的结果,否则,出现任何一点小的误差就会导致整个文件系统的编译出现错误提示,在器件的选择上也有一定的技巧,只有选择了合适当前电路所适合的器件,编译才能得到完满成功。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高

12、自己的实际动手能力和独立思考的能力。这次课程设计带给我们的不只是知识,更多的需要我们在课程设计结束后根据自己的情况去感悟,去反思,勤时自勉,有更多的收获。我们组一共有两个人,我们共同努力,各显所能最终完成了这次的课程设计。当然,这中间有老师和其他同学的帮助与支持,在这里对给过我帮助的所有同学和指导老师表示忠心的感谢!七、参考文献1、黄仁欣编著,EDA技术实用教程 清华大学出版社2、EDA/SOPC技术实验讲义 杭州康芯电子有限公司附录1附录2自动/手动演奏模块的设计library ieee; use ieee.std_logic_1164.all; entity automusic is Po

13、rt ( clk,auto : in std_logic; -系统时钟4HZ;键盘输入/自动演奏 index2 : in std_logic_vector(7 downto 0); -键盘输入信号 index0 : out std_logic_vector(3 downto 0);-音符信号输出 end automusic;architecture behavioral of automusic is component musicport(address:in integer range 0 to 279; clock:in std_logic; q:out std_logic_vector

14、(3 downto 0);end component;signal count0:integer range 0 to 279;-change signal index1: std_logic_vector (3 DOWNTO 0);signal index11: std_logic_vector (3 DOWNTO 0);begin mm:process(clk,count0) -此进程完成自动演奏部分曲的地址累加 begin if clkevent and clk=1 then if count0=279 then count0=0; else count0 index11 index11 index11 index11 index11 index11 index11 index11=1000; -1410when o

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 管理论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号