网站大量收购独家精品文档,联系QQ:2885784924

乐器硬件演奏电路.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
乐器硬件演奏电路

EDA技术课程大作业 设计题目:乐器硬件演奏电路 院 系:电子信息与电气工程学院 学生姓名: 学 号: 200902070018 专业班级: 2010 年 12 月 4 日 乐曲硬件演奏电路 1. 设计背景和设计方案 1.1设计背景 目前,各领域的激烈竞争迫使人们不得不对办事效率格外重视,同时,这也是方便、高效的社会发展趋势之必要。随着科技发展及电子方面的成熟。数控分频器它成为这方面当之无愧的选择。本设计正是关于分频器在乐器硬件演奏电路系统的应用。与传统的纯硬件相比,简单有效,此设计可以适应多家可编程逻辑器件,便于组织大规模的系统设计;便于设计的复用继承和升级,具有广阔的应用前景。 1.2设计方案 该系统主要由NOTETABS,TONETABA,SPEAKERA三个模块组成,与利用微处理器CPU,MCU来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂的多,仅凭借传统的数字逻辑技术是难以实现的,因此,这里我们借助强大的EDA工具和VHDL硬件描述语言来完成。 模块SPEAKERA是数控分频器计数输出模块为一个11位的可预置数计数器。通过NOTETABS得到预置数,并对这些进行计数。由SPEAKERA的CLK端输入一具有较高的频率的信号,通过SPEAKERA分频后由SPKOUT输出,模块TONETABA的功能首先是为SPEAKERA提供决定所发音符的分频预置数,而此数在SPEAKERA输入口停留的时间即为此音符的节拍值。每一个音符的停留时间又由音乐节拍和音调发生器模块NOTETABS的CLK的输入频率决定,输出由对应于TONETABA的4位输入值INDEX[3..0]确定。输向TONETABA中INDEX[3..0]的输出值与持续的时间由模块NOTETABS决定。在NOTETABS中设置了一个8为二进制计数器作为音符数据ROM的地址发生器。这个计数器的计数频率选为4HZ,随着NOTETABS中的计数器按4HZ的时钟速率做加法计数时,即随地址值递增时,音符数据ROM中的音符数据将从ROM中通过TONEINDEX[3..0]端口输向TONETABA模块,乐曲就开始连续自然地演奏起来了。 2. 方案实施 2.1 实现原理及算法的描述 首先,编写数控分频器计数输出模块SPEAKERA,其输入为clk, Tone ,输出为Spks,运行之后生成模块器件。该模块主体为一个11位的可预置数计数器。通过NOTETABS得到预置数,并对这些进行计数。由其CLK端输入一具有较高的频率的信号,通过SPEAKERA分频后由SPKOUT输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率是原来的一半。SPEAKERA对CLK输入信号的分频比由11位预置数TONE[10..O]决定。 Library ieee; Library ieee; Use ieee.std_logic_1164.all Use ieee.std_logic_unsigned.all; Entity speakera is Port(clk:in std_logic; Tone:in std_logic_vector(10 downto 0); Spks:out std_logic); End; Architecture one of speaker is Signal preclk,fullspks:std_logic; Begin Divideclk:process(clk) Variable count4:std_logic_vector (3 downto 0); Begin Preclk=’0’; If count411 then preclk=’1’;count4:=”0000”; Elsif clk’event and clk=’1’then count4:=count4+1; End if; End process; Genspks:process(preclk,tone) Variable count11:std_logic_vector(10 downto 0); Begin If preclk’event and preclk=’1’then If count11=16#7ff# then count11:=tone;fullspks=’1’; Else count11:=count11+1;fullspks=’0’;en if; End if; End process; Delayspks:process(fullspks

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档