- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 2020春部编版四年级语文下册看拼音写词语附日积月累默写.docx
- 中医儿科学题库山东省第四批西学中第四学期期末考试题库.pdf VIP
- 《小猪生病了》优秀绘本故事.pptx
- (完整版)高压开关柜技术协议(10KV配电所10KV高压成套开关柜设备供货).pdf
- 铁路货车的常见故障(完整版).ppt
- 《An old man tried to move the mountains》教案-教学设计.docx
- 2024年华能庆阳煤电有限责任公司招聘笔试真题.docx VIP
- 年产12万吨醋酸乙烯酯工艺设计.doc
- 名校学术联盟高考模拟信息卷&冲刺卷(五)生物学含答案.pdf
- 中医妇科学题库山东省第四批西学中第四学期期末考试题库.pdf VIP
文档评论(0)