数电.docx
- 文档编号:8052534
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:18
- 大小:73.87KB
数电.docx
《数电.docx》由会员分享,可在线阅读,更多相关《数电.docx(18页珍藏版)》请在冰豆网上搜索。
数电
赣南师院
物理与电子信息学院
数电课程设计报告书
姓名黄慧
班级09电子
学号090803032
时间2011.7
设计题目
自动奏乐器
设计要求
1.开机能自动奏一个乐曲,可以反复演奏;
2.速度可变。
1313565–66і65–––
66і6553122321–––
3.附加:
显示乐谱。
设计过程
摘要:
随着超大规模集成电路的发展,随着计算机已经深入生活中的每一个领域,人们的生活中已经有越来越多的自动化机器,这些机器给人类的生活带来的翻天覆地的变化,提供了巨大无比的方便。
于是自动化设计技术应运而生,其中VHDL自动化设计语言是一门非常好用的语言。
本设计本着简单、方便而不乏趣味性和实用性的原则设计出的一个自动奏乐器,是所有能自动播放音乐机器的核心蓝本,MP3,随身听等现在音乐产品都是建立在此设计的基础之上的。
因此,此设计具有非常重要而又意义的。
本设计是基于VHDL实现的,大体可以分为音调发生器、音调编码器、自动选择及数控分频器四部分。
四个模块综合起来就成了自动奏乐器了。
关键字:
自动奏乐器音频音律
一.选题意义:
音乐是人们生活中必不可少的元素,音乐给人类带来了无法比拟的艺术享受。
17世纪之前,人们如果要听音乐只有2个途径:
一是自己演奏,还有一个是找专门以演奏音乐谋生的人演奏。
无论是哪种途径都是很麻烦。
随着工业革命到来,自动化技术开始发展,直到今天,人们走到任何一个街道上都可以听到各种各样的音乐,这些音乐都是通过机器自动播放的,这种机器就是自动奏乐器。
自动奏乐器无疑给人们的生活带来了很多欢笑和快乐。
所以我们有必要去了解和实现一些简单的自动奏乐器。
二原理描述
2.1音名与频率的关系
根据声乐知识,产生音乐的两个因素是音乐频率的持续时间,音乐的十二平均率规定,每两个八音度之间的频率相差一倍,在两个八音之间,又可分为12个半音。
每两个半音的频率比为4.
2.2可变分频器
(1)基准频率的选取
各音所对应的频率可由一频率较高的基准频率进行整数分频得到,所以实际产生各音名频率为近似的整数值。
这是由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频系数四舍五入取整,若基准过低,由于分频系数过小,四舍五入取整后的误差较大,若基准过高,其误差较小,但分频结构将变大,实际的设计应综合考虑两方面的因素,在尽量减小频率差的前提下取四舍五入。
本次设计选择12MHz作为基准频率。
(2)分频系数的初始值
音符
初始值
对应音谱
区别高低中音
0
2047
0
0
1
772
1
0
2
912
2
0
3
1036
3
0
4
1116
4
0
5
1197
5
0
6
1290
6
0
7
1372
7
0
8
1410
1
1
9
1480
2
1
10
1542
3
1
12
1622
5
1
15
1728
1
2
(3)音符谱为:
1313565–66і65–––
66і6553122321–––
三自动奏乐器个模块的设计
本次设计的自动奏乐器的结构方框图为
3.1音调发生器
音调发生器模块的VHDL程序如下:
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";
WHEN1=>INDEX0<="00000100";
WHEN3=>INDEX0<="00000100";
WHEN4=>INDEX0<="00010000";
WHEN5=>INDEX0<="00010000";
WHEN6=>INDEX0<="00010000";
WHEN7=>INDEX0<="00100000";
WHEN8=>INDEX0<="10000000";
WHEN9=>INDEX0<="10000000";
WHEN10=>INDEX0<="10000000";
WHEN11=>INDEX0<="00000100";
WHEN12=>INDEX0<="00000010";
WHEN13=>INDEX0<="00000010";
WHEN14=>INDEX0<="00000001";
WHEN15=>INDEX0<="00000001";
WHEN16=>INDEX0<="00010000";
WHEN17=>INDEX0<="00010000";
WHEN18=>INDEX0<="00001000";
WHEN19=>INDEX0<="00001000";
WHEN20=>INDEX0<="00001000";
WHEN21=>INDEX0<="00000100";
WHEN22=>INDEX0<="00000010";
WHEN23=>INDEX0<="00000010";
WHEN24=>INDEX0<="00010000";
WHEN25=>INDEX0<="00010000";
WHEN26=>INDEX0<="00001000";
WHEN27=>INDEX0<="00001000";
WHEN28=>INDEX0<="00000100";
WHEN29=>INDEX0<="00000100";
WHEN30=>INDEX0<="00000010";
WHEN31=>INDEX0<="00000010";
WHENOTHERS=>NULL;
ENDCASE;
ELSEINDEX0<=INDEX2;
ENDIF;
ENDPROCESS;
ENDBEHAVIORAL;
3.1.2音调发生器模块的仿真图为:
3.1.3音调发生器模块生成的逻辑器件
3.2.1音调编码器
音调编码器模块的VHDL程序如下:
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);
HIGN:
OUTSTD_LOGIC;
TONE0:
OUTINTEGERRANGE0TO2047);
ENDTONE;
ARCHITECTUREARTOFTONEIS
BEGIN
SEARCH:
PROCESS(INDEX)
BEGIN
CASEINDEXIS
WHEN"00000001"=>TONE0<=773;CODE<="0000110";HIGN<='1';
WHEN"00000010"=>TONE0<=912;CODE<="1011011";HIGN<='1';
WHEN"00000100"=>TONE0<=1036;CODE<="1001111";HIGN<='1';
WHEN"00001000"=>TONE0<=1116;CODE<="1100110";HIGN<='1';
WHEN"00010000"=>TONE0<=1197;CODE<="1101101";HIGN<='1';
WHEN"00100000"=>TONE0<=1290;CODE<="1111101";HIGN<='0';
WHEN"01000000"=>TONE0<=1372;CODE<="0000111";HIGN<='0';
WHEN"10000000"=>TONE0<=1410;CODE<="0000110";HIGN<='0';
WHENOTHERS=>TONE0<=2047;CODE<="0000000";HIGN<='0';
ENDCASE;
ENDPROCESS;
ENDART;
3.2.2音调编码器的仿真图:
3.2.3音调编码器模块的逻辑器件
3.31数控分频器
数控分频器模块的VHDL程序如下:
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; 3.3.2数控分频器的仿真图如下: 3.3.3数控分频器模块的逻辑器件 3.4.1自动选择器 自动选择器模块的VHDL程序如下: libraryieee; useieee.std_logic_1164.all; entitybnuxis port(d1,d2: inintegerrange0to15; cs: instd_logic; q: outintegerrange0to15); endbnux; architecturebhvofbnuxis begin process(cs) begin ifcs='1'then q<=0; else casecsis when'0'=>q<=d1; when'1'=>q<=d2; whenothers=>q<=d1; endcase; endif; endprocess; end; 3.4.2自动选择器模块的仿真图: 四原理图 五 实验过程中所出现的问题: 1.时钟信号命名时不一致则在编辑时出现找不到引脚的warning; 2.整个实验在同一台电脑上完成,换机后,原来的图形无法在软件环境中打开,或有时打开,但却无法编辑; 3.模拟仿真过程中有毛刺出现,是在自己设定高低电平时时间不一致造成的,但仍满足实验的逻辑关系; 六 收获与体会: 带着欣喜与疲倦,我们结束EDA课程设计。 回想最初拿到题目时的困惑和焦虑,对自己的知识水平、个人能力曾一度产生很大的怀疑,顿时感到一片迷茫,不知道自己到底都学了些什么,大脑一片空白。 经过几天的冥思苦想,细细推敲,从最初有顶点儿的模糊想法到日渐完整的电路设计,遇到问题、解决问题,一步步开始喜欢上动手实验,对自己的信心也随着实验进程慢慢回升。 但是一波三折,在将要大功告成的时候,又出现各种硬件错误,致使我反复更换硬件,最终看到自己设计的结果显示。 每当投入一件事时就觉得时间过得飞快,每天都觉得在实验室还没一会儿就已是下课时间,而自己的模块电路图还没有完整地画出来,真怕思路就此打断,回宿舍后就反复绘制、模拟仿真。 唯一可惜的一点儿是拷贝到实验室的电脑上又不能用,还得从头画起,着实浪费了不少时间,可在这个过程中,自己对整个电路图牢记于心。 当最后看到自己的劳动成果与题目相符时,才最终松了一口气! 而脸上也情不自禁地露出欣喜的笑容。 这次的EDA课程设计给了我一次实践的机会,使我可以把学到的理论知识应用于实际。 通过这次设计,我充分的认识到自己在数字技术学习上的不足,对以前学过的知识有了更加深刻的认识,并且学到了许多书本上没有的知识。 在设计电路的过程中我遇到了不少的麻烦,但通过自己的努力和老师,同学的帮助,最终都被一一解决。 最重要的是这次EDA课程设计培养了我们严谨的科学态度,对待事情的恒心和耐心,一个小小的错误就会导致整个电路无法正常运行,每个模块都需要精心设计,不能有一丝的马虎,要始终保持一颗平静的心,不急不躁。 此次课程设计让我看到了EDA技术功能的强大,也让我认识到掌握他们的重要性,同时也看到了自己的差距与不足,我知道只有今后努力学习,拓宽自己的知识面,才能更好的掌握这项技术,也才能适应社会的发展。 最后,希望今后学校会给我们安排更多更好这样的设计。 感谢在设计中老师们付出的辛勤劳动和对我们的耐心帮助! 赣南师范学院2010—2011学年第二学期 《数字电子技术基础》课程设计 行政班级09电子科学与技术学号090803032姓名黄慧 设计题目: 自动奏乐器 设计要求: 1.开机能自动奏一个乐曲,可以反复演奏; 2.速度可变。 1313565–66і65––– 66і6553122321––– 3.附加: 显示乐谱。 教师评语: 教师签字: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数电.docx