简易电子琴.docx

上传人:b****3 文档编号:26569005 上传时间:2023-06-20 格式:DOCX 页数:12 大小:25.69KB
下载 相关 举报
简易电子琴.docx_第1页
第1页 / 共12页
简易电子琴.docx_第2页
第2页 / 共12页
简易电子琴.docx_第3页
第3页 / 共12页
简易电子琴.docx_第4页
第4页 / 共12页
简易电子琴.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

简易电子琴.docx

《简易电子琴.docx》由会员分享,可在线阅读,更多相关《简易电子琴.docx(12页珍藏版)》请在冰豆网上搜索。

简易电子琴.docx

简易电子琴

EDA课程设计报告书

 

课题名称

简易电子琴

姓名

学号

院、系、部

电气工程系

专业

电子信息工程

指导教师

2010年7月9日

 

一、设计任务及要求:

1、系统设计要求

(1)设计一个简易的八音符电子琴

(2)能够自动演奏乐曲。

2、设计内容

简易电子琴自动发出1、2、3、4、5、6、7七个音符,连续播放,

每个音符的频率可通过数控分频器实现。

指导教师签名:

2010年月日

二、指导教师评语:

指导教师签名:

2010年月日

三、成绩

 

指导教师签名:

2010年月日

 

简易电子琴

一、设计目的

巩固和运用所学课程,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力,通过对一个简易的八音符电子琴的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和步骤。

巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。

为了进一步了解计算机组成原理与系统结构,深入学习EDA技术,用VHDL语言去控制将会使我们对本专业知识可以更好地掌握。

二、设计要求

(1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。

(2)演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲。

(3)能够自动演奏多首乐曲,且每首乐曲可重复演奏。

三、电路及连线设计

四、使用说明

(1)乐曲自动演奏模块

乐曲自动演奏模块(AUTO.VHD)的作用是产生8位发声控制输入信号/当进行自动演奏时,由存储在此模块中的8位二进制数作为发声控制输入,从而自动演奏乐曲。

(2)音调发生模块

音调发生模块的作用是产生音阶的分频预置值。

当8位发声控制输入信号中的某一位为高电平时,则对应某一音节的数值将输出,该数值即为该音阶的分频预置值,分频预置值控制数控分频模块进行分频,由此可得到每个音阶对应的频率。

(3)数控分频模块

数控分频模块是对时基脉冲进行分频,得到与1、2、3、4、5、6、7七个音符相对应的频率。

五、程序设计如下:

乐曲自动演奏模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYAUTOIS

PORT(CLK:

INSTD_LOGIC;

AUTO:

INSTD_LOGIC;

CLK2:

BUFFERSTD_LOGIC;

INDEX2:

INSTD_LOGIC_VECTOR(7DOWNTO0);

INDEX0:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDAUTO;

ARCHITECTUREBEHAVIORALOFAUTOIS

SIGNALCOUNT0:

INTEGERRANGE0TO31;

BEGIN

PULSE0:

PROCESS(CLK,AUTO)

VARIABLECOUNT:

INTEGERRANGE0TO8;

BEGIN

IFAUTO='1'THEN

COUNT:

=0;CLK2<='0';

ELSIF(CLK'EVENTANDCLK='1')THEN

COUNT:

=COUNT+1;

IFCOUNT=4THEN

CLK2<='1';

ELSIFCOUNT=8THEN

CLK2<='0';COUNT:

=0;

ENDIF;

ENDIF;

ENDPROCESS;

MUSIC:

PROCESS(CLK2)

BEGIN

IF(CLK2'EVENTANDCLK2='1')THEN

IF(COUNT0=31)THEN

COUNT0<=0;

ELSE

COUNT0<=COUNT0+1;

ENDIF;

ENDIF;

ENDPROCESS;

COM1:

PROCESS(COUNT0,AUTO,INDEX2)

BEGIN

IFAUTO='0'THEN

CASECOUNT0IS

WHEN0=>INDEX0<="00000100";--3

WHEN1=>INDEX0<="00000100";--3

WHEN2=>INDEX0<="00000100";--3

WHEN3=>INDEX0<="00000100";--3

WHEN4=>INDEX0<="00010000";--5

WHEN5=>INDEX0<="00010000";--5

WHEN6=>INDEX0<="00010000";--5

WHEN7=>INDEX0<="00100000";--6

WHEN8=>INDEX0<="10000000";--8

WHEN9=>INDEX0<="10000000";--8

WHEN10=>INDEX0<="10000000";--8

WHEN11=>INDEX0<="00000100";--3

WHEN12=>INDEX0<="00000010";--2

WHEN13=>INDEX0<="00000010";--2

WHEN14=>INDEX0<="00000001";--1

WHEN15=>INDEX0<="00000001";--1

WHEN16=>INDEX0<="00010000";--5

WHEN17=>INDEX0<="00010000";--5

WHEN18=>INDEX0<="00001000";--4

WHEN19=>INDEX0<="00001000";--4

WHEN20=>INDEX0<="00001000";--4

WHEN21=>INDEX0<="00000100";--3

WHEN22=>INDEX0<="00000010";--2

WHEN23=>INDEX0<="00000010";--2

WHEN24=>INDEX0<="00010000";--5

WHEN25=>INDEX0<="00010000";--5

WHEN26=>INDEX0<="00001000";--4

WHEN27=>INDEX0<="00001000";--4

WHEN28=>INDEX0<="00000100";--3

WHEN29=>INDEX0<="00000100";--3

WHEN30=>INDEX0<="00000010";--2

WHEN31=>INDEX0<="00000010";--2

WHENOTHERS=>NULL;

ENDCASE;

ELSEINDEX0<=INDEX2;

ENDIF;

ENDPROCESS;

ENDBEHAVIORAL;

(2)音调发生模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYTONEIS

PORT(INDEX:

INSTD_LOGIC_VECTOR(7DOWNTO0);

CODE:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

HIGH:

OUTSTD_LOGIC;

TONE0:

OUTINTEGERRANGE0TO2047);

ENDTONE;

ARCHITECTUREARTOFTONEIS

BEGIN

SEARCH:

PROCESS(INDEX)

BEGIN

CASEINDEXIS

WHEN"00000001"=>TONE0<=773;CODE<="1001111";HIGH<='1';

WHEN"00000010"=>TONE0<=912;CODE<="0010010";HIGH<='1';

WHEN"00000100"=>TONE0<=1036;CODE<="0000110";HIGH<='1';

WHEN"00001000"=>TONE0<=1116;CODE<="1001100";HIGH<='1';

WHEN"00010000"=>TONE0<=1197;CODE<="0100100";HIGH<='1';

WHEN"00100000"=>TONE0<=1290;CODE<="0100000";HIGH<='0';

WHEN"01000000"=>TONE0<=1372;CODE<="0001111";HIGH<='0';

WHEN"10000000"=>TONE0<=1410;CODE<="0000000";HIGH<='0';

WHENOTHERS=>TONE0<=2047;CODE<="0000001";HIGH<='0';

ENDCASE;

ENDPROCESS;

ENDART;

(3)数控分频模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYFENPINIS

PORT(CLK1:

INSTD_LOGIC;

TONE1:

ININTEGERRANGE0TO2047;

SPKS:

OUTSTD_LOGIC);

ENDENTITYFENPIN;

ARCHITECTUREARTOFFENPINIS

SIGNALPRECLK:

STD_LOGIC;

SIGNALFULLSPKS:

STD_LOGIC;

BEGIN

PROCESS(CLK1)

VARIABLECOUNT:

INTEGERRANGE0TO8;

BEGIN

IF(CLK1'EVENTANDCLK1='1')THEN

COUNT:

=COUNT+1;

IFCOUNT=2THEN

PRECLK<='1';

ELSIFCOUNT=4THEN

PRECLK<='0';COUNT:

=0;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(PRECLK,TONE1)

VARIABLECOUNT11:

INTEGERRANGE0TO2047;

BEGIN

IF(PRECLK'EVENTANDPRECLK='1')THEN

IFCOUNT11

COUNT11:

=COUNT11+1;FULLSPKS<='1';

ELSE

COUNT11:

=0;FULLSPKS<='0';

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(FULLSPKS)

VARIABLECOUNT2:

STD_LOGIC:

='0';

BEGIN

IF(FULLSPKS'EVENTANDFULLSPKS='1')THEN

COUNT2:

=NOTCOUNT2;

IFCOUNT2='1'THEN

SPKS<='1';

ELSE

SPKS<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDART;

(4)顶层设计

VHDL源程序(DIANZIQIN.VHD)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYDIANZIQINIS

PORT(CLK32MHZ:

INSTD_LOGIC;

HANDTOAUTO:

INSTD_LOGIC;

CODE1:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);--音符显示信号

INDEX1:

INSTD_LOGIC_VECTOR(7DOWNTO0);--键盘输入信号

HIGH1:

OUTSTD_LOGIC;--高低音节信号

SPKOUT:

OUTSTD_LOGIC);--音频信号

END;

ARCHITECTUREARTOFDIANZIQINIS

COMPONENTAUTO

PORT(CLK:

INSTD_LOGIC;

AUTO:

INSTD_LOGIC;

INDEX2:

INSTD_LOGIC_VECTOR(7DOWNTO0);

INDEX0:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDCOMPONENT;

COMPONENTTONE

PORT(INDEX:

INSTD_LOGIC_VECTOR(7DOWNTO0);

CODE:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

HIGH:

OUTSTD_LOGIC;

TONE0:

OUTINTEGERRANGE0TO2047);

ENDCOMPONENT;

COMPONENTFENPIN

PORT(CLK1:

INSTD_LOGIC;

TONE1:

ININTEGERRANGE0TO2047;

SPKS:

OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALTONE2:

INTEGERRANGE0TO2047;

SIGNALINDX:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

U0:

AUTOPORTMAP(CLK=>CLK32MHZ,INDEX2=>INDEX1,INDEX0=>INDX,AUTO=>HANDTOAUTO);

U1:

TONEPORTMAP(INDEX=>INDX,TONE0=>TONE2,CODE=>CODE1,HIGH=>HIGH1);

U2:

FENPINPORTMAP(CLK1=>CLK32MHZ,TONE1=>TONE2,SPKS=>SPKOUT);

ENDART;

 

五、设计总结:

经过努力,简易电子琴的设计基本上完成了。

在整个设计过程中,包括前期中期和后期,我都有着许多不同的体会:

1)这个设计的基本是接触一门新的语言并加以应用,对于我来说,没有想到的是入手的速度比我的预料快,在以前编程的基础上,从接触到开始动手编程的时间得到了很大的缩短。

知识的接收速度在很大的程度上决定了动手的时间。

2)VHDL的编程与C语言的编程有着本质的不同,然而以往形成的旧编程习惯在VHDL编程中依然起着很大的作用。

一通百通,不是没有道理的。

对于学习新的知识并予以应用的信心,显得更足了。

 

六、参考文献:

《VHDL与数字电路设计》.卢毅, 赖杰. 科学出版社

《VHDL语言100例详解——北京理工大学ASIC研究所》.北京理工大学ASIC研究所. 清华大学出版社

《VHDL 程序设计》(第二版).曾繁泰等. 清华大学出版社

《VHDL入门与应用》陈雪松, 滕立中 .人民邮电出版社 

《VHDL简明教程》.王小军 .清华大学出版社

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

当前位置:首页 > PPT模板 > 商务科技

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

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