音乐彩灯控制电路数电FPGA设计(含代码)
基于FPGA的音乐播放控制电路设计

音乐播放器控制电路课程设计报告班级:学号:姓名:指导老师:一、设计目的将《断桥残雪》简谱按照要求进行编码并将其写入只读存储器ROM之中,然后通过设计的电路读出ROM的内容,进行解码后驱动蜂鸣器播放。
二、开发环境采用Altera Quartus II 9.0软件设计环境。
它提供了全面的逻辑设计能力,包括电路图、文本和波形的设计输入以及编译、逻辑综合、仿真和定时分析以及器件编程等诸多功能。
特别是在原理图输入等方面,Altera Quartus II 9.0被公认为是最易使用、人机界面最友好开发软件。
并采用FPGALP-2900开发装置硬件实现,给人们带来极大的方便。
三、设计过程概述1、数字简谱简介数字简谱用不同的点和线段配合8个阿拉伯数字0~7构成音符,记录表示千变万化的音乐曲子及其基本音乐元素。
乐音是由三个要素决定的:频率决定了乐音的音高,频谱决定过了乐音的音色,音形标志着演奏方式。
乐曲的基本元素是:音的高低(音高)、音的长短(时值)、音的力度和音质(音色)。
音的高低和长短不同决定了乐曲的不同,因此构成了音乐的最重要的基础元素。
音乐用1、2、3、4、5、6、7分别表示同一调式7个不同的音高:多、来、米、法、索、拉、西。
这七个数字上、下标注的点表示音调升高8度音程或降低8度音程。
数字0为休止符,表示停止发音。
数字下或数字上的线段表示因的持续时间的长短。
没有线段的数字为4分音符,器时值为音长的基本度量单元,成为一拍。
数字下面标注的线段表示时间减短,没增加一条线段,表示时值减少一半,音符相应的成为8分音、16分音……数字后面的线段称为延长线,表示前一个音符的市场的增加,每条延长线的时值增量为1拍。
音长是一个相对的时间概念,一拍的时间长度没有限制,可以是1s,也可以是2s或是0.5s,。
若将4分音符的时长定为1s,其他音符的时值长度以其为基本参照度量,半拍为0.5s,2拍为2s,以此类推。
2、音高与频率关系20Hz至20KHz的音频脉冲信号控制蜂鸣器,可以使其根据控制信号的频率发出不同的音调。
基于FPGA的彩灯控制器设计

摘要本设计应用数字电子技术的逻辑器件设计电路原理图以及编写VHDL语言来进行分析也编写,并在QUATURS II软件上实现编译,调试,波形仿真与分析,以及下载到FPGA上运行,实现彩灯功能,并能自由控制彩灯循环点亮的快慢,从而实现出现实中彩灯的原理。
最终完成的是灯光装饰中的彩灯循环点亮,数字计数以及频率调节等功能的设计。
通过本实训,能够初步学会与理解QUATURS II 软件与FPGA芯片的综合运用,还能有效地了解与实现现在生活中用到的与看到的,更深入地了解理论与生活的联系,从而更能了解社会,寻求发展方向。
利用控制电路可使彩灯按一定的规律不断的改变状态,不仅可以获得良好的观赏效果,而且可以省电。
循环彩灯的电路很多,循环方式更是五花八门。
通过程序调试及运行仿真,结果表明,本程序可以完成:8个灯的循环、8个灯的可控制循环以及8个灯的不同花样的循环。
本设计对更高层次的电子自动循环彩灯设计具有一定的拓展性。
关键词:VHDL;彩灯控制;QUATURS II软件;FPGA芯片目录引言 (1)第一章功能及要求 (2)1.1设计目的 (2)1.2 设计要求 (2)第二章设计方案................................... 错误!未定义书签。
2.1PLC技术电子彩灯自动循环设计 (2)2.2EDA的电子自动循环彩灯设计方案 (3)第三章 EDA技术 (4)3.1EDA的概念 (4)3.2EDA的发展历程 (4)3.4EDA技术的应用发展 (5)第四章 VHDL语言 (7)4.1VHDL的结构 (7)4.1.1 实体 (7)4.1.2 结构体 (7)4.1.3 库 (8)4.2VHDL的基本语句 (8)4.2.1 顺序语句 (8)4.2.2 并行语句 (9)第五章自动循环彩灯的设计 (12)第六章波形仿真、下载、测试 (18)6.1下载与测试 (18)6.2仿真波形 (18)总结 (23)致谢 (24)参考文献 (25)引言生活中小型的彩灯多为采用霓虹灯管做成各种各样和多种色彩的灯管,或是以日光灯、白炽灯作为光源,另配大型广告语、宣传画来达到效果。
《音乐数字彩灯控制器设计》

学号:课程设计题目音乐数字彩灯控制器设计学院自动化专业自动化班级姓名指导教师李彬杨莉2013年7月3日目录引言1 设计意义及要求 (1)1.1 设计意义 (1)1.2 设计要求 (1)2 方案设计 (2)2.1 设计思路 (2)2.2 方案设计 (3)2.2.1设计方案一电路图 (3)2.2.2设计方案二电路图简单说明 (4)2.3 方案比较 (5)3 部分电路设计 (6)3.1 脉冲输出电路 (6)3.3实现循环序列显示功能的逻辑电路 (10)3.3.1 奇数数列显示电路的设计 (10)3.3.2偶数数列显示的电路设计 (11)3.3.3音乐数列显示电路的设计 (12)3.3.4 二分频电路的设计 (13)3.3.5七段显示数码管 (14)4 调试与检测 (16)4.1 调试中故障及解决办法 (16)4.2 调试与运行结果 (16)5 仿真操作步骤及使用说明 (17)体会和总结 (18)参考文献 (19)本科生课程设计成绩评定表引言当今社会电子设计发展很快,而通过一学期对数字电子技术的学习,学校安排了这次的数电实习,目的在与让学生综合运用所学的知识,对各基本器件的运用更加熟练,也更好的锻炼学生的设计思维和动手设计能力。
联系实际和运用所学的电子技术知识,设计出一个音乐数字彩灯控制器。
使数码管自动依次显示自然数列,奇数列,偶数列,然后又依次显示同上数列,不断循环。
这次设计中共采用了两种有效方案,思路各不相同。
方案一(个人方案)中采用了两片74LS90,四片74LS138,一片555定时器构成的多谐振荡器和少许门电路,方案较简单。
方案二(小组方案)主要是由74LS90和74LS153芯片组成的数列计数和显示电路,同时还有诸多门电路组成的循环电路。
音乐数字彩灯控制器设计1.设计意义及要求1.1设计意义数字电子技术在日常生活中的应用无处不在,数字音乐数字彩灯在节日装饰中起着十分重要的作用。
数字电子技术在实际应用中已经有相当纯熟的技术。
音乐彩灯控制电路设计

模拟电子技术课程设计报告书课题名称 姓 名学 号 院、系、部 专 业 指导教师年 月日※※※※※※※※※ ※※※※ ※※※※※※※※※※※2011级模拟电子技术课程设计目录1. 绪论 (2)1.1设计要求 (2)2. 音乐彩灯控制器设计 (2)2.1设计思路 (2)2.2音乐大小控制彩灯的设计及原理 (3)2.3音乐大小控制彩灯的电路实现 (3)2.3.1电源电路设计 (3)2.3.2音乐大小控制电路 (4)2.4音乐节奏控制电路 (4)2.4.1音乐节奏控制原理 (4)2.5总电路图 (5)3. 设计总结 (5)参考文献 (6)1.绪论音乐彩灯控制器是用音乐信号控制多组颜色的彩灯,利用其亮度变化反映音乐信号的强弱。
从而使灯的变化规律与音频信号的规律及电平大小相对应,是一种将听信号转换为视信号的装置.用来调节听众欣赏音乐时候的气氛和情绪。
随着科学的发展,人们生活水平的提高,人们不满足于吃饱穿暖,而要有更高的精神享受。
不论是思想,还是视觉,人们都在追求更高的美。
特别使在视觉方面,人们不满足于一种光,彩灯的诞生让人们是视觉对美有了更深的认识。
但现在市面上的音乐彩灯只是按照一定的方式闪烁,让人们感觉到十分的粗糙无味,更没有声音那样用震撼力,音乐彩灯的出现让我们既有了听觉上的享受,更有了精神上的享受。
但现在市面上的音乐彩灯只是按照音乐的一种方式闪烁,和音乐没多大关系,根本不能称为音乐彩灯。
本设计是一个音乐彩灯控制器,使其实用于家庭、商场、橱窗、舞厅、咖啡厅、公共广场等场所的摆设、装饰、广告、环境净化与美化,本电路的最大优点是可以实现音乐以三种方式控制彩灯的闪亮。
实现了音乐大小、节奏的控制。
1.1设计要求设计一种组合式彩灯控制电路,该电路没由两路不同控制方法的彩灯组成,彩灯可采用不同颜色的发光二极管组成不同的图案来实现。
(1)第一路按话筒输出信号的音量的强弱(信号幅度的大小)控制彩灯。
音强时,彩灯的亮度加大,反之,亮度减弱。
数电课程设计彩灯循环控制电路设计

数电课程设计--彩灯循环控制电路设计《数字电子技术课程设计》报告——彩灯循环控制电路设计1.课程设计目的1.1巩固和加强“数字电子技术”课程的理论知识的理解和应用。
1.2独立设计出比较复杂的实用数字电子线路。
1.3提高电子电路实验技能及Multisim10仿真软件的使用能力。
1.4通过数字电子线路的设计、安装和调试,初步掌握数字电子线路单元电路的分析与设计方法。
1.5巩固所学理论,提高动手能力、创新能力和综合设计能力2.课程设计要求2.1所设计彩灯要能够自动循环点亮。
2.2彩灯循环显示且频率快慢可调。
3.3控制电路具有8路以上输出。
3.电路组成框图电源接入↓555定时电路↓计数器电路↓译码器电路↓彩灯演示电路4.元器件清单器材数量555 time rated 174HC163D_6V 174HC154DW_6V 1彩色发光二极管 8100Ω电阻 1800k电阻 25V电压源 1100nF可变电容 110nF电容 15.各功能块电路图5.1时钟信号产生电路通过调节C1来调节555定时器输出频率。
VCCOUTU3555_TIMER_RATEDGNDDIS RSTTHR CONTRI R41mΩR51mΩC210nF 14C1100nF Key=A45%1620VCC5.2计数电路使74HC163D 计数器实现000至111的计数循环。
U174HC163D_6VQA 14QB 13QC 12QD 11RCO15A 3B 4C 5D 6ENP 7ENT 10~LOAD 9~CLR 1CLK2U274HC154DW_6VO23O34O56O45O67O12O78O01O89O910O1011O1113O1214O1315O1416O1517A 23B 22C 21D20~G118~G219VCCOUTU3555_TIMER_RATEDGNDDIS RST THR CONTRI 13910115.3译码显示电路用100Ω连接在5V 电源与LED 灯之间,来保证LED 灯上通过的电流处于最大电流内,用74HC154来实现计数器输出数字的译码,从而使对应灯亮起。
基于FPGA的音乐流水灯控制系统的设计

T o Xio a a a mi o,来自W a g Z tn n ii g
(ntueo Eet n n n r a o ni ei , azo i t gU i r t, a zo 3 00 C i ) Ist f l r i adIf m t nE g er g L nhuJ o n nv sy L nhu7 07 , h a it co c o i n n ao ei n
提供 了设计 可能性 。
1 总体 设 计 方 案
音乐流 水灯 主要 是 点缀公 共场 合 的装 饰 品 ,音乐 的播放 和流水 灯有 节奏地 闪烁 ,同时达 到听觉 和视 觉
号 ,必 须对 其进 行脉 冲宽度 调整 ,增大 占空 比 ,才能 有 效地 驱动蜂 鸣器 。在 脉 冲宽度调 整 时会 对 此信 号再
a 竹拉20 第 3 第1期 0 年 2卷 1 1
Elc rni c . Te h. e to c S i & c /No .1 v 5. 2 0 01
基于 F G P A的音 乐 流 水灯 控 制 系统 的设 计
陶小苗 ,王紫婷
( 兰州交通大学 电子与信息工程 学院 ,甘肃 兰州
摘 要
F G 多媒 体 开 发 平 台 D 2上进 行 实现 。 PA E 关键词 FG P A;L D;硬 件 描 述 语 言 ;D 2 C E
中图 分 类 号
T 3 23 P 3 .
基于FPGA的彩灯控制器设计

郑州轻工业学院可编程数字系统设计题目基于FPGA的彩灯控制器设计学生姓名张焕焕专业班级电子信息工程10-2班学号541001030249院(系)电气信息工程学院指导教师胡智宏石军完成时间2013年6月21日郑州轻工业学院课程设计任务书题目基于FPGA的彩灯控制器设计专业、班级电信10-02班学号541001030249姓名张焕焕主要内容、基本要求、主要参考资料等:主要内容:要求学生使用硬件描述语言设计彩灯控制器的FPGA源程序,实现如下功能:设计一个彩灯控制器,使彩灯(LED管)可以实现四种花样循环变化及两种不同频率的闪烁,有复位开关。
整个系统有七个输入信号CLK,CLR,A,B,C,D,OPT,六个输出信号控制六个彩灯。
OPT的高低电平控制彩灯闪烁的快慢,A,B,C,D控制各种不同花样彩灯的变换。
此彩灯控制系统设定有四种花样变化。
四种花样分别为:a.彩灯从左到右逐次亮起,再逐次从右到左熄灭;b.彩灯两边同时亮两个,再逐次向中间亮;c.彩灯从左到右两个两个的亮,再从右到左两个两个逐次的亮;d.彩灯中间两个亮,再同时向两边散开。
基本要求:1、掌握FPGA 的程序设计方法。
2、掌握硬件描述语言语法。
3、程序设计完成后要求在软件中实现功能仿真。
主要参考资料:1、周润景.基于QuartusⅡ的FPGA/CPLD数字系统设计实例[M].电子工业出版社.2007,82、潘松黄继业. EDA技术实用教程(第二版).北京:科学出版社,2006.9完成期限:2013.6.21—2013.6.25指导教师签名:课程负责人签名:目录摘要 (I)中文摘要 (I)英文摘要 (II)1、概述 (1)1.1、设计目的 (1)1.2、设计要求 (1)2、系统设计 (1)2.1、设计原理 (1)2.1.1 系统原理设计图 (2)2.2、设计方案 (2)3、程序仿真过程 (3)3.1仿真图 (3)4、实验结果分析 (4)5、心得体会 (4)6、致谢 (5)7、参考文献 (5)8、附录 (6)基于FPGA的彩灯控制器设计摘要中文摘要随着科技的发展, 在现代生活中, 彩灯作为一种景观应用越来越多。
音乐彩灯控制电路数电FPGA设计(含代码)

音乐彩灯控制电路1、申请题目:音乐彩灯控制电路采用4×4矩阵式键盘作为电子琴按键输入,用FPGA设计一个既可以区分不同音高和音阶进行乐曲的弹奏,又可以自动播放乐曲的音乐电路。
同时,在播放音乐的同时,点阵板上的彩灯会随着不同的音乐、不同的音阶、音调而出先不同的花型变化。
按键音符可以通过数码管显示出来。
2、项目规划:音乐演奏电路,既有通过键盘自由弹奏,又可以播放内存乐曲(播放的乐曲由设计者自由编辑,以简谱二进制码方式存放在ROM的数据文件中)。
彩灯显示电路,在音乐播放的同时,根据音乐节拍的不同,16路彩灯进行各种花型的变化,彩灯的亮灭有多种不同的模式,可以根据八个拨码开关来进行设计,进行自由组合搭配。
不同的音乐对应不同的彩灯模式,每种模式执行16拍后依次循环改变,当音乐停止时,彩灯的变化也停止。
设置启动、停止控制键,可以结束音乐的播放和彩灯变化。
设置选择音乐播放键,共存储了3首音乐,可以通过选择键进行选择播放具体不同的音乐。
设置了彩灯变化选择按钮,有普通彩灯和动感彩灯两种方式进行选择,可以通过按键进行选择。
设计采用音乐引入控制彩灯变化方式。
用4×4矩阵式键盘作为按键输入,16×16的LED 点阵板作为彩灯输出。
可以通过按键选择弹奏乐曲和播放乐曲两种模式。
点阵板上彩灯的变化随着乐曲的不同而进行不同的变化。
在播放过程中可以按键进行系统的停止和启动运行。
同时也可以通过扬声器将音乐播放出来。
3、实现方案:问题1:乐曲的发声原理组成乐曲的2个基本要素是每个音符的发声频率值和它持续的时间,可以利用程序控制FPGA某个引脚输出一定频率的矩形波,便可以得到某个音符的音调,也可以再接上扬声器之后,就能发出相应频率的声音。
同时,若能控制每个音符的持续时间,也就控制了乐曲的节奏,因此只需要控制输出到引脚的信号频率的高低以及每个信号持续的时间长短,即可实现乐曲的产生。
问题2:音符的获得方法和乐曲节奏的控制所有不同的频率信号都可以从同一个系统基准频率分频而来,可以通过预置不同频率的音符信号,通过系统基准频率值计算得到分频系数,提供给之后的节奏使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
音乐彩灯控制电路1、申请题目:音乐彩灯控制电路采用4×4矩阵式键盘作为电子琴按键输入,用FPGA设计一个既可以区分不同音高和音阶进行乐曲的弹奏,又可以自动播放乐曲的音乐电路。
同时,在播放音乐的同时,点阵板上的彩灯会随着不同的音乐、不同的音阶、音调而出先不同的花型变化。
按键音符可以通过数码管显示出来。
2、项目规划:音乐演奏电路,既有通过键盘自由弹奏,又可以播放内存乐曲(播放的乐曲由设计者自由编辑,以简谱二进制码方式存放在ROM的数据文件中)。
彩灯显示电路,在音乐播放的同时,根据音乐节拍的不同,16路彩灯进行各种花型的变化,彩灯的亮灭有多种不同的模式,可以根据八个拨码开关来进行设计,进行自由组合搭配。
不同的音乐对应不同的彩灯模式,每种模式执行16拍后依次循环改变,当音乐停止时,彩灯的变化也停止。
设置启动、停止控制键,可以结束音乐的播放和彩灯变化。
设置选择音乐播放键,共存储了3首音乐,可以通过选择键进行选择播放具体不同的音乐。
设置了彩灯变化选择按钮,有普通彩灯和动感彩灯两种方式进行选择,可以通过按键进行选择。
设计采用音乐引入控制彩灯变化方式。
用4×4矩阵式键盘作为按键输入,16×16的LED 点阵板作为彩灯输出。
可以通过按键选择弹奏乐曲和播放乐曲两种模式。
点阵板上彩灯的变化随着乐曲的不同而进行不同的变化。
在播放过程中可以按键进行系统的停止和启动运行。
同时也可以通过扬声器将音乐播放出来。
3、实现方案:问题1:乐曲的发声原理组成乐曲的2个基本要素是每个音符的发声频率值和它持续的时间,可以利用程序控制FPGA某个引脚输出一定频率的矩形波,便可以得到某个音符的音调,也可以再接上扬声器之后,就能发出相应频率的声音。
同时,若能控制每个音符的持续时间,也就控制了乐曲的节奏,因此只需要控制输出到引脚的信号频率的高低以及每个信号持续的时间长短,即可实现乐曲的产生。
问题2:音符的获得方法和乐曲节奏的控制所有不同的频率信号都可以从同一个系统基准频率分频而来,可以通过预置不同频率的音符信号,通过系统基准频率值计算得到分频系数,提供给之后的节奏使用。
每个音符持续的时间是乐曲能连续播放的另一个要素。
设全音符的持续时间为1s,则2分音符的持续时间为0.5s,4分音符的持续时间为0.25s。
如果采用1MHz的频率作为系统基准频率,则需要对1MHz信号进行250000次分频,得到4Hz信号作为一个4分音符的频率。
对于其他占用时间较长的节拍,则只需要将该音符连续输出相应遍数即可。
问题3:16路彩灯控制原理根据系统设计要求,整个模块分为控制彩灯节奏的输入信号和16个输出信号,分别用于控制十六路彩灯。
利用状态机实现了7种花型的变化,同时利用六十六位常数的设计,可方便地设置和修改花型。
解决方案:1.乐曲播放功能设计根据乐曲发声的基本原理,乐曲播放模块的设计思路是通过1MHz时钟分频获得音符节拍频率,通过查音符频率表获得音符分频系数,作为音频分频模块分频的依据,将1MHz 时钟频率分频获得合适的音符频率,输出至音频播放模块。
节拍控制分频模块主要用于产生乐曲节拍,控制乐曲播放的节奏,1MHz的系统频率经过250000次分频,可以得到4分音符持续时间的频率。
乐曲长度计数器在节拍控制频率信号的作用下进行乐曲音符的顺序计数。
乐曲模块中存放的是各个乐曲音符的分频值。
音符分频器根据乐曲模块中存储的各个音符的分频系数来完成对1MHz系统频率的分频,输出相应的音频信号。
2.乐曲弹奏功能设计根据乐曲弹奏的工作原理,乐曲弹奏主要由键盘扫描模块、分频置数模块、音符分频器、输出模块构成。
其中,键盘扫描模块的设计思路是在系统时钟控制下循环给出键盘扫描信号,然后根据扫描信号和对应的键盘响应信号确定键盘按键位置,再将相应的值送到下一个处理模块。
这里采用列扫描方式,由FPGA输出键盘的列输入信号,采集键盘的行输出信号。
键盘扫描模块可以采用状态机的设计方法,用四个状态完成对键盘的四列扫描,确定每一列的输入;第五个状态用于键值处理状态,根据扫描结果判断按键是音符输入还是高低音的选择,以及长时间无按键时停止音频输出,对长时间按同一键按一次键处理等。
3.彩灯电路功能设计系统的工作原理是,通过时序控制电路根据输入信号产生符合一定要求的、供显示控制电路使用的控制时钟信号,而显示控制电路则根据时序控制电路输入的控制时钟信号,输出六种花型循环变化的、控制十六路彩灯工作的控制信号,这些控制信号加上驱动电路一起控制彩灯工作。
4、系统结构:系统结构框图:模块功能描述:根据设计要求,要求系统既可以播放乐曲,又可以弹奏乐曲,同时彩灯的变化都是随着音乐的变化而显现不同的花型,可以通过设置一个功能选择键将两者分开。
其中乐曲播放模块应包含节拍控制分频模块、音符频率输出模块、乐曲存储模块;乐曲弹奏模块应包含键盘扫描模块、音符频率输出模块。
还有一个彩灯显示模块。
乐曲播放模块乐曲播放模块的设计思路是通过1MHz时钟分频得到音符节拍频率,通过查表方式获取音符节拍频率分频系数,作为音符分频器的依据,将1MHz时钟分频获得合适的音符频率,输出至音频输出。
节拍控制分频模块主要用于产生乐曲节拍,控制乐曲的播放节奏。
乐曲长度计数器在节拍控制频率信号的作用下进行乐曲音符的顺序计数。
乐曲模块中存放的是乐曲各个音符的分频值。
音符分频器根据乐曲模块中存储的各个音符的分频系数完成对1MHz系统频率的分频,输出相应的音频信号。
乐曲弹奏模块和彩灯显示模块乐曲弹奏和彩灯显示主要有键盘扫描模块、分频系数模块、音符分频器和彩灯显示电路构成。
其中,键盘扫描模块的设计思路是在系统时钟控制下循环给出键盘扫瞄信号,然后根据扫描信号和对应键盘响应信号确定键盘按键位置,再将相应键值的段码输出。
分频系数模块用于确定输入音符对应的分频数。
音符分频器根据分频系数模块提供的分频系数完成对1MHz系统频率的分频,输出相应的频率信号。
彩灯显示模块根据输入的信号,对应输出不同花型的彩灯信号。
模块接口标注:5、状态流程图:系统工作状态流程6、各主要模块仿真结果波形各模块的仿真波形,详细注释输入输出功能端口1.乐曲播放模块仿真电路设计中,系统时钟clk采用1MHz的工作频率。
为了便于观察仿真的结果,这里将节拍控制分频模块4分音符的分频数由250000暂时调整为16,循环播放3个音符,且这三个音符的分频系数一次为2、4、8。
仿真波形如下,从图中可以看出,节拍控制分频模块的4分音符频率输出clk_4Hz确为系统基准频率clk的16分频,且在clk_4Hz信号节拍的控制下,out_sound依次输出为对clk的2分频、4分频和8分频信号。
2.键盘扫描及显示模块仿真为了便于观察仿真结果,将键盘扫描频率暂时调整为8个时钟信号clk,仿真前设定行输入信号KBcol为“1110”,仿真结果如图所示,可以看出当列扫描信号KBrow一次扫描输出“1110”、“1101”、“1011”、“0111”,及对应这3、2、1、0行各个按键信息。
3.乐曲弹奏模块仿真为了便于观察仿真的结果,键盘扫描频率采取上述加键盘扫描及显示模块仿真中的扫描频率,这里取中音1和低音1的仿真来验证模块的功能。
4.彩灯显示电路模块仿真彩灯显示电路是随着音乐的播放而出现不同变化花型的电路,这里仿真用的是自动循环播放乐曲来验证模块的功能。
7、课程设计总结通过此次数字系统课程设计自己觉得最大的体会是体会了独立设计一个小型系统的整个过程,为今后自己在实际应用于开发系统的发展方向提供了一个很好的锻炼的机会。
这次我设计的题目是音乐彩灯控制电路。
就如同题目所涵盖的意思一样,我的设计系统是一个可以随着音乐的播放而彩灯自动变化花型的数字电路系统。
这个系统是通过FPGA 来设计实现的。
系统分为两大部分,一部分是音乐产生电路,一部分是彩灯显示电路。
音乐产生电路又有两种区分,一种是自动播放音乐,一种是可以通过键盘来弹奏音乐。
最终实现的设计已经大部分实现了我设计中谈及到的功能。
系统中设计了开始按钮,可以开启系统运行。
可以有音乐播放的选择按钮,通过不同的选择,可以播放不同的音乐。
同时也可以通过键盘按键来弹奏乐曲。
键盘设计了A、B、C分别代表高音、中音和低音。
用数字1-7代表7个音符。
在播放音乐的同时,可以选择是否开启彩灯变化电路,开启电路时,彩灯的变化是随着音乐的变化而呈现缤纷多彩的变化的。
当然彩灯的变化也有两种选择方式:普通模式与动感模式。
总体来说,最终完成的设计和预期的目标基本相同。
在设计中还可以提高和改进的地方主要有彩灯变化的方式。
在最终完成的设计成品中彩灯的变化花型还是过于单一。
在设计中可以试着将列选进行扫描,最终使得彩灯的变化可以实现输出字或者图案等花型。
相信在以后的过程中,可以在这个方面进行更多的设计思考。
最后谈一点设计体会。
通过此次的课程设计,最直接的受益是学会了一门数字电路设计语言—VHDL语言。
通过在设计的过程中的整个立项和实施过程的体会是最重要的。
可以说从对VHDL语言的不了解到通过查阅各种资料来学习VHDL语言的语法和编程技术,这本身便是一个挑战与学习的过程,也正是有了这样一个课程设计,才使得我能够迅速地掌握了VHDL语言的编程入门。
当然令我映像深刻的还有的是调试的过程。
因为也许程序编写没有问题,但是在调试的过程中也许会出现很多意想不到的问题,正是在这种不断调试中才能发现更多的问题。
所以通过这一次的数字系统课程设计,使我受益匪浅。
8、参考文献1.电子设计自动化(EDA)课程设计与项目实例李莉路而红编著2.数字逻辑EDA设计与实践刘昌华编著3.EDA及技术实验与课程设计曹昕燕周凤臣聂春燕编著9.源程序Music.vhdllibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity music isgeneric(mid1 : integer range 1000 to 4000 :=1911;--mid1 : integer range 0 to 10 :=1;mid2 : integer range 1000 to 4000 :=1703;--mid2 : integer range 0 to 10 :=3;mid3 : integer range 1000 to 4000 :=1517; --mid3 : integer range 0 to 10 :=7;mid4 : integer range 1000 to 4000 :=1432; mid5 : integer range 1000 to 4000 :=1276; mid6 : integer range 1000 to 4000 :=1137; mid7 : integer range 1000 to 4000 :=1012;low1 : integer range 1000 to 4000 :=3823; low2 : integer range 1000 to 4000 :=3405; low3 : integer range 1000 to 4000 :=3034; low4 : integer range 1000 to 4000 :=2863; low5 : integer range 1000 to 4000 :=2551; low6 : integer range 1000 to 4000 :=2273; low7 : integer range 1000 to 4000 :=2025;high1 : integer range 100 to 4000 :=956; high2 : integer range 100 to 4000 :=851; high3 : integer range 100 to 4000 :=758; high4 : integer range 100 to 4000 :=716; high5 : integer range 100 to 4000 :=638; high6 : integer range 100 to 4000 :=568;high7 : integer range 100 to 4000 :=506);port(clk : in std_logic;start : in std_logic;out_sound : out std_logic;sel : in std_logic;sound : out std_logic_vector(2 downto 0));end music;architecture behav of music issignal clk_4Hz : std_logic;signal count : integer range 0 to 4096;signal freq : integer range 0 to 4096;signal counter : integer range 0 to 100;signal max_250000 : std_logic_vector(17 downto 0); --signal max_250000 : std_logic_vector(3 downto 0);beginprocess(start,clk)beginif start='0' thenclk_4Hz<='0';max_250000<="000000000000000000";--max_250000<="0000";elsif clk'event and clk='1' thenif max_250000>="111101000010001111" then--if max_250000>="1111" thenmax_250000<="000000000000000000";--max_250000<="0000";else max_250000<=max_250000+1;end if;if max_250000="000000000000000000" then--if max_250000="0000" thenclk_4Hz<='1';else clk_4Hz<='0';end if;end if;end process;process(clk_4Hz,start)beginif start='0' thencounter<=0;elsif clk_4Hz'event and clk_4Hz='1' then if counter>=21 then--if counter>=7 thencounter<=0;elsecounter<=counter+1;end if;end if;end process;process(counter)begincase counter is--when 0=>freq<=mid1;sound<="001"; --when 1=>freq<=mid2;sound<="010";--when 3=>freq<=mid4;sound<="100"; --when 4=>freq<=mid5;sound<="101"; --when 5=>freq<=mid6;sound<="110"; --when 6=>freq<=mid7;sound<="111"; --when 7=>freq<=high1;sound<="001";when 0=>freq<=low5;sound<="101"; when 1=>freq<=mid1;sound<="001"; when 2=>freq<=mid1;sound<="001"; when 3=>freq<=mid1;sound<="001"; when 4=>freq<=mid1;sound<="001"; when 5=>freq<=mid3;sound<="011"; when 6=>freq<=mid2;sound<="010"; when 7=>freq<=mid1;sound<="001"; when 8=>freq<=mid2;sound<="010"; when 9=>freq<=mid3;sound<="011"; when 10=>freq<=mid1;sound<="001"; when 11=>freq<=mid1;sound<="001"; when 12=>freq<=mid3;sound<="011"; when 13=>freq<=mid5;sound<="101"; when 14=>freq<=mid6;sound<="110";when 16=>freq<=mid6;sound<="110"; when 17=>freq<=mid5;sound<="101"; when 18=>freq<=mid3;sound<="011"; when 19=>freq<=mid3;sound<="011"; when 20=>freq<=mid1;sound<="001";when others=>freq<=0;sound<="000"; end case;end process;process(clk,start,sel)beginif sel='0' then out_sound<='0';elseif start='0' thencount<=0;out_sound<='0';elsif clk'event and clk='1' thenif freq=0 then out_sound<='0';elsif count=0 thencount<=freq;out_sound<='1';elsecount<=count-1;out_sound<='0';end if;end if;end if;end process;end behav;piano.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity piano isport(clk,start : in std_logic;KBCol : in std_logic_vector(3 downto 0);KBRow : out std_logic_vector(3 downto 0);out_sound : out std_logic;seg4 : out std_logic_vector(3 downto 0);sel : in std_logic;--key : out std_logic_vector(4 downto 0); sound : out std_logic_vector(2 downto 0));end entity;architecture behav of piano issignal state : std_logic_vector(2 downto 0);signal clk1 : std_logic;signal d : std_logic_vector(4 downto 0);signal d0,d1,d2,d3,d_reg : std_logic_vector(4 downto 0);signal snote : std_logic_vector(4 downto 0);signal sscal : std_logic_vector(1 downto 0);signal cnt,scnt : std_logic_vector(13downto 0); signal ctrln : std_logic_vector(2 downto 0);signal count,freq : integer range 0 to 4096;constant low1 : integer :=3822; constant low2 : integer :=3405; constant low3 : integer :=3034; constant low4 : integer :=2863; constant low5 : integer :=2551; constant low6 : integer :=2273; constant low7 : integer :=2025; --constant mid1 : integer :=2; constant mid1 : integer :=1911; constant mid2 : integer :=1703; constant mid3 : integer :=1517; constant mid4 : integer :=1432; constant mid5 : integer :=1276; constant mid6 : integer :=1137; constant mid7 : integer :=1012; constant high1 : integer :=956; constant high2 : integer :=851; constant high3 : integer :=758; constant high4 : integer :=716; constant high5 : integer :=638; constant high6 : integer :=568;constant stop : integer :=0;begin--clk1<=cnt(9);--process(clk)--begin--if clk'event and clk='1' then--cnt<=cnt+1;--end if;--end process;process(start,clk)--扫描时钟100Hz,由1MHz分频beginif start='0' thenclk1<='0';cnt<="00000000000000";elsif clk'event and clk='1' thenif cnt>="10011100001111" thencnt<="00000000000000";elsecnt<=cnt+1;end if;if cnt="00000000000000" thenclk1<='1';else clk1<='0';end if;end if;end process;d<=d0 or d1 or d2 or d3;process(clk1)beginif clk1'event and clk1='1' thencase state iswhen "000"=>KBRow<="1110";state<="001"; case KBCol iswhen "1110"=>d0<="11111";seg4<="1111";--Fwhen "1101"=>d0<="11011";seg4<="1011";--B when "1011"=>d0<="10111";seg4<="0111";--7 when "0111"=>d0<="10011";seg4<="0011";--3 when others=>d0<="00000";end case;when "001"=>KBRow<="1101";state<="010"; case KBCol iswhen "1110"=>d1<="11110";seg4<="1110";--Ewhen "1101"=>d1<="11010";seg4<="1010";--A when "1011"=>d1<="10110";seg4<="0110";--6 when "0111"=>d1<="10010";seg4<="0010";--2 when others=>d1<="00000";end case;when "010"=>KBRow<="1011";state<="011"; case KBCol iswhen "1110"=>d2<="11101";seg4<="1101";when "1101"=>d2<="11001";seg4<="1001";when "1011"=>d2<="10101";seg4<="0101";when "0111"=>d2<="10001";seg4<="0001";when others=>d2<="00000";end case;when "011"=>KBRow<="0111";state<="100"; case KBCol iswhen "1110"=>d3<="11100";seg4<="1100";when "1101"=>d3<="11000";seg4<="1000";when "1011"=>d3<="10100";seg4<="0100";when "0111"=>d3<="10000";seg4<="0000";when others=>d3<="00000";end case;when "100"=>state<="000";if d="00000" thend_reg<=d;if scnt=200 thensnote<="00000";elsescnt<=scnt+1;end if;elsescnt<="00000000000000";if d/=d_reg thend_reg<=d;if d>="10001" and d<="10111" thensnote<=sscal&d(2 downto 0);elsif d="11010" thensscal<="11";elsif d="11011" thensscal<="10";elsif d="11100" thensscal<="01";end if;end if;end if;when others=>state<="000";end case;end if;end process;process(snote)begincase snote iswhen "01001"=>freq<=low1;sound<="001";when "01010"=>freq<=low2;sound<="010";when "01011"=>freq<=low3;sound<="011";when "01100"=>freq<=low4;sound<="100";when "01101"=>freq<=low5;sound<="101";when "01110"=>freq<=low6;sound<="110";when "01111"=>freq<=low7;sound<="111";when "10001"=>freq<=mid1;sound<="001";when "10010"=>freq<=mid2;sound<="010";when "10011"=>freq<=mid3;sound<="011";when "10100"=>freq<=mid4;sound<="100";when "10101"=>freq<=mid5;sound<="101";when "10110"=>freq<=mid6;sound<="110";when "10111"=>freq<=mid7;sound<="111";when "11001"=>freq<=high1;sound<="001";when "11010"=>freq<=high2;sound<="010";when "11011"=>freq<=high3;sound<="011";when "11100"=>freq<=high4;sound<="100";when "11101"=>freq<=high5;sound<="101";when "11110"=>freq<=high6;sound<="110";when "11111"=>freq<=high7;sound<="111";when others =>freq<=stop;sound<="111"; end case;--key<=snote;end process;process(clk,sel,start)beginif sel='1' or start='0' thenout_sound<='0';elseif clk'event and clk='1' then if freq=0 thenout_sound<='0';elsif count=0 thencount<=freq;out_sound<='1';elsecount<=count-1;out_sound<='0';end if;end if;end if;end process;end behav;flower.vhdlibrary ieee;use ieee.std_logic_1164.all; entity flower isport(--clk : in std_logic;clr : in std_logic;--led : out std_logic_vector(15 downto 0);led : out std_logic_vector(6 downto 0);state : in std_logic_vector(2 downto 0));end flower;architecture behav of flower issignal current_state : std_logic_vector(2 downto 0);--signal flower : std_logic_vector(15 downto 0);signal flower : std_logic_vector(6 downto 0);begin--process(clr,clk)process(clr,state)--constant f1 : std_logic_vector(15 downto 0):="0001000100010001";--constant f2 : std_logic_vector(15 downto 0):="1010101010101010";--constant f3 : std_logic_vector(15 downto 0):="0011001100110011";--constant f4 : std_logic_vector(15 downto 0):="0100100100100100";--constant f5 : std_logic_vector(15 downto 0):="1001010010100101";--constant f6 : std_logic_vector(15 downto 0):="1101101101100110";--constant f7 : std_logic_vector(15 downto 0):="0111011101110111";constant f1 : std_logic_vector(6 downto 0):="0000001";constant f2 : std_logic_vector(6 downto 0):="0000011";constant f3 : std_logic_vector(6 downto 0):="0000111";constant f4 : std_logic_vector(6 downto 0):="0001111";constant f5 : std_logic_vector(6 downto 0):="0011111";constant f6 : std_logic_vector(6 downto 0):="0111111";constant f7 : std_logic_vector(6 downto 0):="1111111";begincurrent_state<=state;if clr='1' then--flower<="0000000000000000";flower<="0000000";--elsif rising_edge(clk) thenelsecase current_state is--when "000" =>flower<="0000000000000000";when "000" =>flower<="0000000";when "001" =>flower<=f1;when "010" =>flower<=f2;when "011" =>flower<=f3;when "100" =>flower<=f4;when "101" =>flower<=f5;when "110" =>flower<=f6;when "111" =>flower<=f7;--when others =>flower<="0000000000000000";when others =>flower<="0000000";end case;end if;end process;led<=flower;end behav;连接图。