资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
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工具从数字系统设计的单一领域,发展到今天,应用范围已涉及模拟、微波等多个领域,可以实现各个领域电子系统设计的测试、设计方针和布局布线等。设计者只要完成对电子系统的功能描述,就可以利用计算机和工具,进行设计处理,最终得到设计结果。采用可编程逻辑器件通过对器件内部的设计来实现系统功能,是一种基于芯片的设计方法。设计者可以根据定义器件的内部逻辑很引出端,将电路板设计的大部分工作放在芯片的设计中进行,通过对芯片设计实现数字系统的逻辑功能。用硬件描述语言进行电路与系统的设计是当前EDA技术的重要特征。硬件描述语言的突出优点是:语言的公开可利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的复用和继承等。目前常用的IEEE标准硬件描述语言有VHDL和Verilog-HDL。一、设计要求 基于传统数字频率计的测量精度将随被测信号频率的下降而下降,在实用中有较大的局限性,而等精度频率计不但具有较高的测量精度,而且在整个测频区域内保持恒定的测试精度。本系统设计的基本指标如下:1 对于频率测试功能,测频范围为0.1-50MHZ;对于测频全域相对误差恒为百万分之一。2 对于脉宽测试功能,测试范围为0.1us-1s,二、设计目的熟悉Quartus 2软件的使用。熟悉EDA实验开发系统的基本使用。学习VHDL基本单元电路的设计应用。进一步掌握EDA的多层次设计方法。学习音乐发生器的设计。三、硬件电路的设计1、电子琴整体电路(见附录1)本设计由手动/自动演奏模块、音调发生器、数控分频器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在以下的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、音调发生器模块的设计音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,该模块tone的功能首先是为speaker提供决定所发音符的分频预置数,而此数在speaker输入口停留的时间即为此音符飞节拍值。模块tone是乐曲简谱码对应的分频预置数查表电路,其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共13个,每一个音符的停留时间由音乐节拍和音调发生器模块tone的clk的输入频率决定,在此为4HZ。这13个值的输出由对应于tone的4为index3.0确定,而index3.0最多有16种可选值。输向tone中index3.0的值index03.0的输出值与持续的时间由模块tone决定。3、数控分频模块的设计音符的频率可以由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模块中若取tone10.0=1036,将发音符为“3”音的信号频率。五、组装调试下载EDA实验箱的芯片是:EP1C3T144C8。1、引脚配置程序整体组装的方法有两种:一种是用VHDL语言编写顶层文件,将各个模块的程序组装起来,另一种是用用Quarus II软件将各个模块的程序转化成硬件原理图。我采用的是第二种方法,第二种方法比较直观,且易于实现。组装完成后就对程序进行编译,下载到实验箱。2、组装调试下载过程中遇到的问题1、 连接好硬件图后,编译有错误。原因是原理图不能连接到所对应的模块的程序。解决办法:将各个模块的程序放到所建立的原理图的工程里面。2、 编译有错误。原因是建立的ROM的address与speaker中用到的信号count0的长度不相对应。解决办法:将ROM中的address的长度改成与count0长度一致的。3、 编译完成后,自动演奏的乐曲音调不对(变调了)。原因是我建立的ROM中输入数据错了。解决办法:对照简谱,将输错的谱改过来。4、 手动弹奏的sol,la两按键发出的音调相同。原因是在音调发生器中缺少了1116这一分频预置数值。解决办法:在音调发生器tone中的分频预置数这一程序段中添加分频预置数值为1116的语句。5、 选乐曲困难。不知道要选怎么样的乐曲,电子琴演奏出来的乐曲才不会变调。通过向老师咨询,我们选乐曲最好是选四拍的没有低音的乐曲。后面就选了“北京的金山上”和“梁祝”这两首乐曲。六、心得体会 课程设计是一项重要的实习学科之一,我们要正确的面对这项任务,把它做好做的精细,以达到锻炼人的目的,所以说一份好的心得体会是经过认真经历之后才能做出来的!做了三周的课程设计,有很多的心得体会,有关于专业知识方面的,也有关于人与人之间关系方面的。 在着三周里学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示,后来,在数十次的调试之后,才出现正确的结果。其次,在连接各个模块的时候一定要注意各个输入、输出引脚的线宽,因为每个线宽是不一样的,只要让各个线宽互相匹配,才能得出正确的结果,否则,出现任何一点小的误差就会导致整个文件系统的编译出现错误提示,在器件的选择上也有一定的技巧,只有选择了合适当前电路所适合的器件,编译才能得到完满成功。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。这次课程设计带给我们的不只是知识,更多的需要我们在课程设计结束后根据自己的情况去感悟,去反思,勤时自勉,有更多的收获。我们组一共有两个人,我们共同努力,各显所能最终完成了这次的课程设计。当然,这中间有老师和其他同学的帮助与支持,在这里对给过我帮助的所有同学和指导老师表示忠心的感谢!七、参考文献1、黄仁欣编著,EDA技术实用教程 清华大学出版社2、EDA/SOPC技术实验讲义 杭州康芯电子有限公司附录1附录2自动/手动演奏模块的设计library ieee; use ieee.std_logic_1164.all; entity automusic is Port ( 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(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
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号