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

下载本文档

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

文档简介

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标准硬

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

4、1、电子琴整体电路(见附录1)本设计由手动/自动演奏模块、音调发生器、数控分频器3个模块组成。手动/自动演奏模块的作用是实现手动和自动演奏音乐的控制。音调发生器tone的作用是产生获得音阶的预置值。数控分频模块spreker对时基钟脉冲进行分频,得到与1,2,3,4,5,6,7,七个音符对应的频率。这3个模块如下:1.1手动/自动演奏模块1.2音调发生器模块1.3数控分频模块四、程序设计(见附录2)流程图(如下图1)                         

5、 图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模块,乐曲

6、就开始连续自然地演奏起来了。Index27.0是手动音符输入端,8位分别对应do,re,mi,fa,sol,la,si,!do八个音符。auto是自动/手动播放控制端,当auto为0时实现自动演奏功能,为1时则是手动输入乐曲。2、音调发生器模块的设计音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,该模块tone的功能首先是为speaker提供决定所发音符的分频预置数,而此数在speaker输入口停留的时间即为此音符飞节拍值。模块tone是乐曲简谱码对应的分频预置数查表电路,其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共13个,每一个音符的停留时间由音乐节拍和音调发生器模块tone

7、的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触发器

8、以均衡其占空比,但这时的频率将是原来的1/2。speaker对clk输入信号的分频比由11位预置数tone10.0决定。spks的输出频率将决定每一音符的音调,这样,分频计数器的预置值tone10.0与spks的输出频率,就有了对应关系。例如在tone模块中若取tone10.0=1036,将发音符为“3”音的信号频率。五、组装调试下载EDA实验箱的芯片是:EP1C3T144C8。1、引脚配置程序整体组装的方法有两种:一种是用VHDL语言编写顶层文件,将各个模块的程序组装起来,另一种是用用Quarus II软件将各个模块的程序转化成硬件原理图。我采用的是第二种方法,第二种方法比较直观,且易于实现

9、。组装完成后就对程序进行编译,下载到实验箱。2、组装调试下载过程中遇到的问题1、 连接好硬件图后,编译有错误。原因是原理图不能连接到所对应的模块的程序。解决办法:将各个模块的程序放到所建立的原理图的工程里面。2、 编译有错误。原因是建立的ROM的address与speaker中用到的信号count0的长度不相对应。解决办法:将ROM中的address的长度改成与count0长度一致的。3、 编译完成后,自动演奏的乐曲音调不对(变调了)。原因是我建立的ROM中输入数据错了。解决办法:对照简谱,将输错的谱改过来。4、 手动弹奏的sol,la两按键发出的音调相同。原因是在音调发生器中缺少了1116这

10、一分频预置数值。解决办法:在音调发生器tone中的分频预置数这一程序段中添加分频预置数值为1116的语句。5、 选乐曲困难。不知道要选怎么样的乐曲,电子琴演奏出来的乐曲才不会变调。通过向老师咨询,我们选乐曲最好是选四拍的没有低音的乐曲。后面就选了“北京的金山上”和“梁祝”这两首乐曲。六、心得体会    课程设计是一项重要的实习学科之一,我们要正确的面对这项任务,把它做好做的精细,以达到锻炼人的目的,所以说一份好的心得体会是经过认真经历之后才能做出来的!做了三周的课程设计,有很多的心得体会,有关于专业知识方面的,也有关于人与人之间关系方面的。    在着三

11、周里学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示,后来,在数十次的调试之后,才出现正确的结果。其次,在连接各个模块的时候一定要注意各个输入、输出引脚的线宽,因为每个线宽是不一样的,只要让各个线宽互相匹配,才能得出正确的结果,否则,出

12、现任何一点小的误差就会导致整个文件系统的编译出现错误提示,在器件的选择上也有一定的技巧,只有选择了合适当前电路所适合的器件,编译才能得到完满成功。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。这次课程设计带给我们的不只是知识,更多的需要我们在课程设计结束后根据自己的情况去感悟,去反思,勤时自勉,有更多的收获。我们组一共有两个人,我们共同努力,各显所能最终完成了这次的课程设计。当然,这中间有老师和其他同学的帮助与支持,在这里对给过我帮助的所有同

13、学和指导老师表示忠心的感谢!七、参考文献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); -键盘输入信号    

14、   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;sig

15、nal 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 clk'event and clk='1' then if count0=279 then count0<=0; else count0<=count0+1; end if; end

16、if; end process; search :process(index2)    -此进程完成音符到音符的分频系数译码,音符的显示,高低音阶begincase index2 iswhen "00000001" => index11<="0001" -773when "00000010" => index11<="0010" -912when "00000100" => index11<="0011" -1036wh

17、en "00001000" => index11<="0100" -1116when "00010000" => index11<="0101" -1197when "00100000" => index11<="0110" -1290when "01000000" => index11<="0111" -1372when "10000000" => index1

18、1<="1000" -1410when  others  => index11<="0000" -2047end case;end process;SEL:process(index11,index1)beginIF auto='1' then index0 <= index1;elseindex0 <= index11;end if;end process; u1 : music port map(address=>count0 , q=>index1, clock=>

19、clk);END;音调发生器的设计library ieee;use ieee.std_logic_1164.all;entity tone isport(index:in std_logic_vector(3 downto 0); -音符输入信号      code : out std_logic_vector(3 downto 0); -音符显示信号       high0 : out std_logic; -高低音显示信号      tone0:out std_logic_vector(10 down

20、to 0); -音符的分频系数  end;architecture behavioral of tone isbegin  search:process(index)   begin    case index is    -译码电路,查表方式,控制音调的预置数when"0000"=>tone0<="11111111111"code<="0000"high0<='0'-2047 when"0001"=>

21、;tone0<="01100000101"code<="0001"high0<='0'-773 when"0010"=>tone0<="01110010000"code<="0010"high0<='0'-912 when"0011"=>tone0<="10000001100"code<="0011"high0<='0'-1

22、036when"0100"=>tone0<="10001011100"code<="0100"high0<='0'-1116 when"0101"=>tone0<="10010101101"code<="0101"high0<='0'-1197 when "0110" =>tone0<="10100001010"code<="01

23、10"high0<='0'-1290when "0111" =>tone0<="10101011100"code<="0111"high0<='0'-1372when "1000" =>tone0<="10110000010"code<="0001"high0<='1'-1410when "1001" =>tone0<="1

24、0111001000"code<="0010"high0<='1'-1480when "1010" =>tone0<="11000000110"code<="0011"high0<='1'-1542when "1100" =>tone0<="11001010110"code<="0101"high0<='1'-1622when "

25、1101" =>tone0<="11010000100"code<="0110"high0<='1'-1668when "1111" =>tone0<="11011000000"code<="0001"high0<='1'-1728when others=>NULL;    end case;  end process;end;数控分频器模块的设计library IEEE

26、; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;              use ieee.std_logic_unsigned.all;entity speaker is Port ( clk1 : in std_logic;       tone1 : in integer range 0 to 2047;       spks : out std_logic); end speaker;

27、architecture behavioral of speaker is signal preclk,fullspks:std_logic; begin divideclk:process(clk1)       variable count4:integer range 0 to 15;  begin    preclk <='0'    if count4 >11 then preclk <='1'count4:=0;    elsif clk1'event and clk1='1' then count4:=count4+1;    end if;  end process;genspks:process(precl

温馨提示

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

最新文档

评论

0/150

提交评论