乐器硬件演奏电路_第1页
乐器硬件演奏电路_第2页
乐器硬件演奏电路_第3页
乐器硬件演奏电路_第4页
乐器硬件演奏电路_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、EDA技术课程大作业 设计题目:乐器硬件演奏电路 院 系:电子信息与电气工程学院 学生姓名: 学 号: 200902070018 专业班级: 2010 年 12 月 4 日乐曲硬件演奏电路1. 设计背景和设计方案1.1设计背景目前,各领域的激烈竞争迫使人们不得不对办事效率格外重视,同时,这也是方便、高效的社会发展趋势之必要。随着科技发展及电子方面的成熟。数控分频器它成为这方面当之无愧的选择。本设计正是关于分频器在乐器硬件演奏电路系统的应用。与传统的纯硬件相比,简单有效,此设计可以适应多家可编程逻辑器件,便于组织大规模的系统设计;便于设计的复用继承和升级,具有广阔的应用前景。1.2设计方案该系统

2、主要由NOTETABS,TONETABA,SPEAKERA三个模块组成,与利用微处理器CPU,MCU来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂的多,仅凭借传统的数字逻辑技术是难以实现的,因此,这里我们借助强大的EDA工具和VHDL硬件描述语言来完成。模块SPEAKERA是数控分频器计数输出模块为一个11位的可预置数计数器。通过NOTETABS得到预置数,并对这些进行计数。由SPEAKERA的CLK端输入一具有较高的频率的信号,通过SPEAKERA分频后由SPKOUT输出,模块TONETABA的功能首先是为SPEAKERA提供决定所发音符的分频预置数,而此数在SPEAKERA输入口

3、停留的时间即为此音符的节拍值。每一个音符的停留时间又由音乐节拍和音调发生器模块NOTETABS的CLK的输入频率决定,输出由对应于TONETABA的4位输入值INDEX3.0确定。输向TONETABA中INDEX3.0的输出值与持续的时间由模块NOTETABS决定。在NOTETABS中设置了一个8为二进制计数器作为音符数据ROM的地址发生器。这个计数器的计数频率选为4HZ,随着NOTETABS中的计数器按4HZ的时钟速率做加法计数时,即随地址值递增时,音符数据ROM中的音符数据将从ROM中通过TONEINDEX3.0端口输向TONETABA模块,乐曲就开始连续自然地演奏起来了。2. 方案实施2

4、.1 实现原理及算法的描述首先,编写数控分频器计数输出模块SPEAKERA,其输入为clk, Tone ,输出为Spks,运行之后生成模块器件。该模块主体为一个11位的可预置数计数器。通过NOTETABS得到预置数,并对这些进行计数。由其CLK端输入一具有较高的频率的信号,通过SPEAKERA分频后由SPKOUT输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率是原来的一半。SPEAKERA对CLK输入信号的分频比由11位预置数TONE10.O决定。Library ieee;Library ieee;Use i

5、eee.std_logic_1164.allUse ieee.std_logic_unsigned.all;Entity speakera isPort(clk:in std_logic;Tone:in std_logic_vector(10 downto 0);Spks:out std_logic);End;Architecture one of speaker isSignal preclk,fullspks:std_logic;BeginDivideclk:process(clk)Variable count4:std_logic_vector (3 downto 0);BeginPre

6、clk11 then preclk=1;count4:=”0000”;Elsif clkevent and clk=1then count4:=count4+1;End if;End process;Genspks:process(preclk,tone)Variable count11:std_logic_vector(10 downto 0);BeginIf preclkevent and preclk=1thenIf count11=16#7ff# then count11:=tone;fullspks=1;Else count11:=count11+1;fullspks=0;en if

7、;End if;End process;Delayspks:process(fullspks)Variable count2:std_logic;BeginIf fullspksevent and fullspks=1then count2:=not count2;If count2=1then spks=1;Else spkstone=”11111111111”;code=”0000”;hightone=”01100000101”;code=”0001”;hightone=”01110010000”;code=”0010”;hightone=”10000001100”;code=”0011”

8、;hightone=”10010101101”;code=”0101”;hightone=”10100001010”;code=”0110”;hightone=”10101011100”;code=”0111”;hightone=”10110000010”;code=”0001”;hightone=”10111001000”;code=”0010”;hightone=”11000000110”;code=”0011”;hightone=”11001010110”;code=”0101”;hightone=”11010000100”;code=”0110”;hightone=”110110000

9、00”;code=”0001”;highnull;end case;end process;end;最后,是NOTETABS模块,在NOTETABS中设置了一个8为二进制计数器作为音符数据ROM的地址发生器。这个计数器的计数频率选为4HZ,随着NOTETABS中的计数器按4HZ的时钟速率做加法计数时,即随地址值递增时,音符数据ROM中的音符数据将从ROM中通过TONEINDEX3.0端口输向TONETABA模块,乐曲就开始连续自然地演奏起来了。此模块的输入为clk,输出为Toneindex。此模块的程序为:Library ieee;Use ieee.std_logic_1164.all;Use

10、 ieee.std_logic_unsigned.all;Entity notetabs isPort(clk:in std_logic;Toneindex:out std_logic_vector(3 downto 0);End;Architecture one of notetabs isComponent musicPort(address:in std_logic_vector97 downto 0);Inclock:in std_loic;Q:out std_logic_vector(3 downto 0);End component;Signal counter:std_logic

11、_vector(7 downto 0);BeginCnt8:process(clk,counter)BeginIf counter=138 then counter=”00000000”;Elsif(clkevent and clk=1)then countercounter,q=toneindex,inclock=clk);End;2.2 电路设计原理图将以上三个模块器件连接到一起形成的BLOCK文件如下图所示:2.3 仿真结果3.结果和结论在设计乐曲硬件演奏电路的时候,首先是程序的编程,编程中会出现VHDL语言的描述错误,经过反复的修改才成功。然后,对课程设计任务书的每个要求进行设计,过程中用到了最基本的二进制计数器和数控分频器,让我对这两个器件有了更深的了解。最后就是仿真过程,通过请教同学和查阅课本我顺利完成了我的设计。此次课

温馨提示

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

评论

0/150

提交评论