EDA简易乐器演奏器Word文档格式.docx

上传人:b****6 文档编号:22064477 上传时间:2023-02-02 格式:DOCX 页数:16 大小:126.70KB
下载 相关 举报
EDA简易乐器演奏器Word文档格式.docx_第1页
第1页 / 共16页
EDA简易乐器演奏器Word文档格式.docx_第2页
第2页 / 共16页
EDA简易乐器演奏器Word文档格式.docx_第3页
第3页 / 共16页
EDA简易乐器演奏器Word文档格式.docx_第4页
第4页 / 共16页
EDA简易乐器演奏器Word文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

EDA简易乐器演奏器Word文档格式.docx

《EDA简易乐器演奏器Word文档格式.docx》由会员分享,可在线阅读,更多相关《EDA简易乐器演奏器Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

EDA简易乐器演奏器Word文档格式.docx

在用VHDL语言来设计电路时,主要的过程是这样的:

(1)使用文本编辑器输入设计源文件。

(2)使用编译工具编译源文件。

VHDL的编译器有很多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等都有自己的编译器。

(3)功能仿真。

对于某些人而言,仿真这一步似乎是可有可无的。

但是对于一个可靠的设计而言,任何设计最好都进行仿真,以保证设计的可靠性。

另外,对于作为一个独立的设计项目而言,仿真文件的提供足可以证明你设计的完整性。

(4)综合。

综合的目的是在于将设计的源文件由语言转换为实际的电路。

这一部分的最终目的是生成门电路级的网表(Netlist)。

(5)布局、布线。

这一步的目的是生成用于烧写的编程文件。

在这一步,将用到第(4)步生成的网表并根据CPLD/FPG厂商的器件容量,结构等进行布局、布线。

这就好像在设计PCB时的布局布线一样。

先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。

然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。

(6)最后仿真。

这一步主要是为了确定设计在经过布局布线之后,是不是还满足原本的设计要求。

3简易电子琴设计过程

3.1简易电子琴的工作原理

音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

该电子琴可以实现两个功能,用按键CS来选择不同功能,第一种功能是用手动即通过按键的形式输入不同音名,第二种功能是音乐发生器,可以自动重复播放儿童歌曲“种太阳”音乐。

当CS为高电平1时,选择功能二,当CS为低电平0时,选择功能一。

3.2简易电子琴的工作流程图

3.3简易电子琴中各模块的设计

系统内部结构图如图3.1所示

图3.1

3.3.1分频器fpq1模块

1.分频器1的程序

libraryieee;

useieee.std_logic_1164.all;

entityfpq1is

port(clk12:

instd_logic;

clk1:

bufferstd_logic);

endfpq1;

architecturebhvoffpq1is

begin

process(clk12)

variablecount:

integerrange0to1200;

ifclk12'

eventandclk12='

1'

then

count:

=count+1;

ifcount=1200then

clk1<

=notclk1;

=0;

endif;

endprocess;

endbhv;

2.分频器1的仿真图

3.3.2分频器fpq2模块程序

1.分频器2的程序

entityfpq2is

port(clk1:

clk2:

endfpq2;

architecturebhvoffpq2is

process(clk1)

integerrange0to500;

ifclk1'

eventandclk1='

ifcount=500then

clk2<

=notclk2;

2.分频器2的仿真图

3.3.3琴/乐功能选择器bmux模块程序

1.功能选择器的程序

entitybmuxisport(

index1:

instd_logic_vector(3downto0);

index2:

cs:

toneindex:

outstd_logic_vector(3downto0));

end;

architecturebhvofbmuxis

process(cs)

casecsis

when'

0'

=>

toneindex<

=index1;

=index2;

whenothers=>

=null;

endcase;

3.3.2乐曲自动演奏notetabs模块程序

entitynotetabsis

port(clk:

toneindex2:

endnotetabs;

architectureoneofnotetabsis

signalcounter:

integerrange0to138;

process(clk)

ifcounter=138then

counter<

elsifclk'

eventandclk='

then

=counter+1;

process(counter)

casecounteris

when00=>

toneindex2<

="

0101"

;

when01=>

0110"

when02=>

when03=>

when04=>

1011"

when05=>

when06=>

1001"

when07=>

when08=>

when09=>

when10=>

when11=>

when12=>

when13=>

when14=>

when15=>

when16=>

0011"

when17=>

0100"

when18=>

when19=>

when20=>

when21=>

when22=>

when23=>

when24=>

when25=>

when26=>

0111"

when27=>

when28=>

when29=>

when30=>

0000"

when31=>

when32=>

when33=>

when34=>

1010"

when35=>

when36=>

when37=>

when38=>

0010"

when39=>

when40=>

when41=>

when42=>

when43=>

when44=>

when45=>

when46=>

when47=>

when48=>

when49=>

when50=>

when51=>

when52=>

when53=>

when54=>

when55=>

when56=>

when57=>

when58=>

when59=>

when60=>

when61=>

when62=>

when63=>

when64=>

when65=>

when66=>

when67=>

when68=>

when69=>

when70=>

when71=>

when72=>

when73=>

when74=>

when75=>

when76=>

when77=>

when78=>

when79=>

when80=>

when81=>

when82=>

when83=>

when84=>

when85=>

when86=>

when87=>

when88=>

1100"

when89=>

when90=>

when91=>

when92=>

when93=>

when94=>

when95=>

when96=>

when97=>

when98=>

when99=>

when100=>

when101=>

when102=>

when103=>

when104=>

when105=>

when106=>

when107=>

when108=>

when109=>

when110=>

when111=>

when112=>

when113=>

when114=>

when115=>

when116=>

when117=>

when118=>

when119=>

when120=>

when121=>

when122=>

when123=>

when124=>

when125=>

when126=>

when127=>

when128=>

when129=>

when130=>

when131=>

when132=>

when133=>

when134=>

when135=>

when136=>

when137=>

when138=>

null;

endone;

3.3.3按键tone模块程序

entitytoneis

port(key:

instd_logic_vector(6downto0);

toneindex1:

architectureoneoftoneis

search:

process(key)

begin

casekeyis

when"

0000001"

toneindex1<

0001"

0000010"

0000100"

0001000"

0010000"

0100000"

1000000"

3.3.4tonetaba模块程序

entitytonetabais

port(index:

instd_logic_vector(3downto0);

code:

outstd_logic_vector(3downto0);

high:

outstd_logic;

tone:

outstd_logic_vector(10downto0));

architectureoneoftonetabais

process(index)

begin

caseindexis--译码电路,查表方式,控制音调的预置数

when"

=>

tone<

11111111111"

;

code<

high<

='

--2047

01100000101"

high<

--773;

01110010000"

--912;

10000001100"

--1036;

10001011100"

--1116;

10010101101"

--1197;

10100001010"

--1290;

10101011100"

--1372;

1000"

10110000010"

--1410;

10111001000"

--1480;

11000000

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1