基于fpga的音乐播放器的设计.
- 格式:doc
- 大小:556.92 KB
- 文档页数:19
音乐播放器控制电路课程设计报告班级:学号:姓名:指导老师:一、设计目的将《断桥残雪》简谱按照要求进行编码并将其写入只读存储器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的音乐播放器姓名:陆波学号:09090323指导老师:周爱军•音乐硬件演奏电路基本原理•硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。
乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。
乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。
而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。
•音调的控制:频率的高低决定了音调的高低。
通过查阅资料,得到下面的音符名与频率的关系表:音符名频率/hz音符名频率/hz音符名频率/hz 低音1262中音1523高音11046低音2294中音2587高音21175低音3330中音3659高音31318低音4349中音4698高音41397低音5392中音5784高音51568低音6440中音6880高音61760低音7494中音7988高音71976•分频比预置数的计算:•分频比就是从6Mhz基准频率通过二分频得到的3Mhz频率基础上计算得到的。
对于乐曲中的休止符,只需将其分频系数设为0,将分频预置数设为16383即可。
例如:低音3的频率为330hz,分频比为3M/330hz=3000000/330=9091,则其分频预置数为:16383-9091=7292。
其他的音符对应的分频比和分频比预置数均按此法计算可得到。
依次计算出低、中、高3X7=21个音的预置数。
•各音阶对应的预置数如右表:音符名预置数音符名预置数音符名预置数低音14933中音110647高音113515低音26179中音211272高音213830低音37292中音311831高音314107低音47787中音412085高音414236低音58730中音512556高音514470低音69565中音612974高音614678低音710310中音713347高音714858•音长的控制:•音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。
目录引言 (1)1 VHDL及QUARTUSII软件简介 (2)1.1EDA简介 (2)1.2硬件描述语言VHDL (2)1.3软件介绍 (3)2 简易音乐演奏器设计 (5)2.1硬件电路设计 (5)2.2软件代码设计 (6)2.2.1音符储存单元 (6)2.2.2选择播放模式及手动模块单元 (6)2.2.3分频模块单元 (8)2.2.4预置数模块单元 (9)2.2.5音频发声模块单元 (10)3引脚锁定及下载 (10)3.1引脚锁定 (10)3.2结果分析 (11)4设计总结 (11)参考文献 (116)附录 (16)引言VHDL语言是一种用于电路设计的高级语言。
它在80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。
利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。
突出了其作为硬件描述语言的良好的可读性、可移植性和易读性等优点。
本文基于FPGA开发系统,在QuartusII 7.2软件平台上,完成了简易乐曲演奏器设计和与仿真,并下载到试验箱进行硬件实现。
首先,本文介绍了QuartusII 7.2软件的基本使用方法和VHDL硬件描述语言的特点,采用VHDL 硬件描述语言描述简易信号发生器,完成对电路的功能仿真。
在设计过程中,重点探讨了简易乐曲演奏设计思路和功能模块划分。
然后,初步探讨了电路逻辑综合的原理,该软件对简易乐曲演奏器进行了逻辑综合。
最后,使用EDA实验开发系统进行电路的下载和验证。
验证结果表明设计的简易乐曲演奏器完成了预期的功能。
本设计是采用VHDL来实现的简易乐曲演奏器。
它能实现自动播放和手动播放。
1 VHDL及QuartusII软件简介1.1 EDA简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
fpga音乐播放器课程设计一、课程目标知识目标:1. 让学生掌握FPGA基础知识,理解FPGA的内部结构和编程原理;2. 帮助学生了解音乐播放器的原理,掌握数字信号处理基础知识;3. 使学生能够运用Verilog或VHDL等硬件描述语言设计简单的FPGA音乐播放器。
技能目标:1. 培养学生动手实践能力,能够独立完成FPGA音乐播放器的设计、编程、调试与验证;2. 提高学生团队协作能力,能够在小组合作中发挥个人优势,共同完成项目任务;3. 培养学生解决问题和分析问题的能力,能够针对实际问题提出合理的解决方案。
情感态度价值观目标:1. 激发学生对电子设计和硬件编程的兴趣,培养良好的学习习惯;2. 培养学生勇于尝试、敢于创新的精神,增强自信心;3. 培养学生具备良好的沟通能力和团队协作精神,提高综合素质。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 掌握FPGA基本原理,能够描述FPGA内部结构和编程方法;2. 学会使用硬件描述语言Verilog或VHDL编写简单的FPGA程序;3. 理解音乐播放器的基本原理,能够运用数字信号处理知识设计音乐播放器;4. 完成一个简易的FPGA音乐播放器设计项目,具备实际操作和调试能力;5. 在项目实践中,提高团队协作、沟通表达和问题解决能力。
二、教学内容1. FPGA基本原理及编程方法:包括FPGA内部结构、工作原理、硬件描述语言(Verilog/VHDL)基础、编程流程等;2. 数字信号处理基础知识:涉及采样定理、量化、编码、数字信号表示等基本概念;3. 音乐播放器原理:介绍音乐播放器的基本工作流程,包括音频信号的采集、处理、存储和播放;4. FPGA音乐播放器设计:结合教材章节内容,设计以下教学大纲:a. FPGA硬件设计:选用合适的FPGA开发板,了解硬件资源分配,设计FPGA硬件电路;b. 音频信号处理:学习音频信号的采样、量化、编码等处理方法,编写相应程序;c. 音乐播放器程序设计:运用Verilog或VHDL编写音乐播放器程序,实现音频信号播放功能;d. 系统调试与验证:对设计好的音乐播放器进行功能测试、性能优化和调试;5. 项目实践:根据教学进度,安排以下教学内容:a. 分组讨论:学生分组讨论设计方案,明确项目任务分工;b. 设计与编程:各组学生根据分工,完成FPGA音乐播放器的设计和编程;c. 调试与展示:学生调试音乐播放器,展示项目成果,分享设计经验;d. 评价与反馈:教师对各组项目成果进行评价,给予反馈和建议。
基于FPGA的音频播放系统设计郭颂;何云斌【期刊名称】《信息技术》【年(卷),期】2011(000)005【摘要】介绍了基于FPGA的嵌入式数字音频播放系统的设计.该设计在FPGA上利用WM8731编/解码芯片,通过配置SOPC中的NiosⅡ软核CPU和相关的接口模块来实现嵌入式系统的主要硬件结构,并结合软件设计来控制音频编/解码芯片和SD卡,实现了音频信号的D/A转换、存储、播放等功能.由于采用了SOPC技术,使得该系统具有集成度高、稳定性好、设计灵活和设计效率高等优点.%This paper introduces a design of digital audio playback embedded system based on ing WM8731 encode and decode chip, configure NiosⅡ soft core CPU and some corresponding interface modules on a FPGA to construct an embedded system ’ s hardware, and combine sof tware programming to controlling audio encode and decode chip and SD card, the system realized A/D, D/A conversion, saving and replaying of audio signal. Due to using the SOPC technology, it has high integration, good stability, design flexibility and high design efficiency.【总页数】6页(P95-100)【作者】郭颂;何云斌【作者单位】哈尔滨理工大学计算机科学与技术学院,哈尔滨,150080;哈尔滨理工大学计算机科学与技术学院,哈尔滨,150080【正文语种】中文【中图分类】TP311.1【相关文献】1.基于嵌入式的音频播放系统设计 [J], 李灿;祝忠明;万宇;范海斌2.基于Android平台音频播放系统设计研究 [J], 黄科3.基于JSP的网络视音频播放系统设计与实现 [J], 张庆涛4.基于Ni osⅡ软核的音频播放系统设计与实现 [J], 付扬; 李成5.基于Android平台音频播放系统设计研究 [J], 黄科因版权原因,仅展示原文概要,查看原文内容请购买。
基于FPGA的音乐播发器设计【摘要】本文分析了简谱记录的音频特征信号,提取了《化蝶》简谱特征信号转换为基于FPGA实现的数字信号,设计了总体方案,阐述了播发器控制器模块、可控分频器预置数产生模块、可控分频器模块设计思路,仿真实现各个模块功能,经过实际电路测试验证,达到播放《化蝶》简谱的设计要求。
【关键词】音乐播发器;节拍;音符;计数器音乐播发器是模仿人歌唱的电路,故可用人歌唱作为原型来分析设计音乐电路的总体方案。
人通过声带振动发出声音,声带振动频率不同发出不同声音,故在用数字电路来模仿时,可用一个可控分频电路来产生不同频率时钟信号来驱动外接喇叭或蜂鸣器演奏音乐。
人在歌唱时,是根据歌谱用大脑控制声带按照一定节拍在不同时间发出不同的乐音。
故在用数字电路模仿时,还应该有一个控制电路模块,用来根据歌谱控制可控分频电路模块按照一定节拍在不同时间发出不同的乐音。
控制电路模块分为两个模块,一个用于产生节拍,称节拍产生模块;另一个用于根据歌谱控制可控分频电路模块在不同时间发出不同的乐音,称音符产生模块。
节拍产生模块应是一个计数器,每个状态持续的时间是需演奏的所有的音的音长的最小公因数,比如是一个十六分音符时值,具体时间长度应根据需演奏的歌曲而定。
控制电路的计数器的模即状态数,可由需演奏歌曲的各个音所占据状态个数累加而得。
例如,一首用于演奏“梁祝”乐曲的音乐电路的控制电路的计数器的模是139。
节拍产生电路的计数器是用来产生节拍定时的,音符产生模块则将节拍产生电路的计数器的状态翻译成对应的音符频率信号。
如需演奏的歌曲中所用到的音符为9~16个,则音符产生模块的输出信号应有四位,其他情况依此类推。
《化蝶》简谱音符共有15个,用index表示音符符号,从低音到高音依次编号1~15。
音乐电路设计总体参考方案如图1所示。
图1 总体设计方案本设计以用于演奏“梁祝”乐曲的音乐电路为例,对音乐电路各模块的实施进行分析。
一、控制电路模块控制电路模块包含节拍产生模块和音符产生模块两个子模块,可合写成一个文件。
1引言1.1关于EDA技术随着科学技术的进步,电子器件和电子系统设计方法日新月异,电子设计自动化(Electronics Design Automation,EDA)技术正是适应了现代电子产品设计的要求,吸收了多学科最新成果而形成的一门新技术。
现如今掌握EDA技术是电子信息类专业的学生、工程技术人员所必备的基本能力和技能。
传统电子电路的设计,首先要对系统进行分析,然后按功能对系统进行划分,接下来就要选择特定芯片,焊接成PCB电路板,最后对成品PCB电路板进行调试。
这样的设计没有灵活性可言,搭成的系统需要的芯片种类多且数目大,而且对于电路图的设计和电路板的设计都需要很大的工作量,工作难度也很高。
然而,随着可编程器件和EDA技术的发展,传统设计的劣势被克服,采用可编程逻辑器件基于芯片的设计方法,期间的内部逻辑和引脚可以由设计者自行决定,大大提高了设计的灵活性,提高了工作效率;同时,将系统集成在一个芯片上的设计,使系统具有体积小、功耗低、可靠性高等特点。
EDA技术的发展大致经历了三个阶段:20世纪70年代的CAD(计算机辅助设计)阶段、20世纪80年代的CAE(计算机辅助工程)阶段、20世纪90年代后的EDA(电子设计自动化)阶段。
以下主要介绍第三个阶段。
EDA技术即电子设计自动化技术,它是以可编程逻辑器件(PLD)为载体,以硬件描述语言(HDL)为主要的描述方式,以EDA软件为主要的开发软件的电子设计过程。
它主要采用“自顶向下”的设计方法,设计流程主要包括:设计输入、综合、仿真、适配、下载。
EDA技术主要有以下特征:(1)高层综合的理论和方法取得进展,从而将EDA设计层次由RT级提高到了系统级,并推出了相应的系统级综合优化工具,大大缩短了复杂ASIC的设计周期。
(2)采用硬件描述语言来描述10万门以上的设计,并形成了VHDL和Verilog-HDL两种标准硬件描述语言。
(3)采用平面规划技术对逻辑综合和物理版图设计联合管理,做到在逻辑设计综合早期阶段就考虑到物理设计信息的影响。
(4)可测性综合设计。
(5)为带有嵌入式IP核的ASIC设计提供软、硬件协同设计工具。
(6)建立并行设计工具框架结构的集成化设计环境,以适应当今ASIC规模大而复杂、数字与模拟电路并存、硬件与软件设计并存、产品上市速度快等特点。
总而言之,EDA技术的出现,给电子信息产业带来了革命性的变革。
1.2关于VHDLVHDL是一种硬件描述语言,它可以对电子电路和系统的行为进行描述,基于这种描述,结合相关的软件工具,可以得到所期望的实际电路与系统。
使用VHDL语言描述的电路,可以进行综合和仿真。
然而,值得注意的是,尽管所有VHDL代码都是可仿真的,但并不是所有代码都能综合。
VHDL被广泛使用的基本原因在于它是一种标准语言,是与工具和工艺无关的,从而可以方便地进行移植和重用。
VHDL两个最直接的应用领域是可编程逻辑器件(PLD)和专用集成电路(ASIC),其中可编程逻辑器件包括复杂可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA)。
关于VHDL最后要说明的是:与常规的顺序执行的计算机程序不同,VHDL从根本上讲是并发执行的。
在VHDL中,只有在进程(PROCESS)、函数(FUNCTION)和过程(PROCEDURE)内部的语句才是顺序执行的。
1.3EDA工具目前有多种EDA工具支持采用VHDL进行电路综合、仿真以及实现。
比较常见的是Altera公司的QuartusⅡ开发平台和Xilinx公司的ISE开发平台。
这些平台中使用的综合工具和仿真工具通常由专业的EDA厂商提供。
本次设计中所使用的平台正是QuartusⅡ7.2,它是Altera公司提供的一套集成了编译、布局布线和仿真工具在内的综合开发环境。
它能完成从代码输入到编译到仿真再到物理实现的全部设计流程。
1.4有关于本次课程设计本次课程设计要求使用EDA工具,设计实现简易音乐演奏器,理解音名与频率的关系及数控分频原理,经过对整体进行模块化分析、编程、综合、仿真及最终下载,完整实现简易音乐器的播放功能。
我们知道,与利用单片机来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具与硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
在后面的章节中会详细介绍利用EDA技术实现简易音乐演奏器的过程。
2 设计实现2.1准备知识在本次设计中采用了铃声《祝你生日快乐》作为要播放的乐曲,它的旋律如下:5 5 |6 5 1|7 —5 5|6 5 2|1 —5 5|5 3 1|7 6 —|0 0 4 4|3 1 2|1 —根据声乐知识,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果是本实验的关键。
表2-1为简谱中音名与频率的对应关系。
表2-1 简谱音名与频率的关系频率点及音符与音谱对应定义如表2-2所示。
表2-2音符语音谱定义2.2乐曲演奏电路的结构示意本设计由四个模块组成,如图2-3所示。
图2-3 乐曲演奏电路的结构示意2.3乐曲演奏电路的子结构顶层结构所包含的模块分别有音调发生器(ydfsq)模块、手动\自动选择(bmux)模块、音调编码器(ydbmq)模块及数控分频器(skfpq)模块。
以下便是对各个子模块的分析。
2.3.1音调发生器模块1.音调发生器模块的功能在此模块中设置了一个8位二进制计数器(计数最大值为107),这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25s,恰好为当全音符设为1s时,四四拍的4分音符的持续时间。
例如,ydfsq在以下的VHDL逻辑描述中,《祝你生日快乐》乐曲的第一个音符为“5”,此音在逻辑中停留了4个时钟节拍,即为1s时间,相应地所对应“1”音符分频预置数为1409在skfpq的输入端停留了1s。
随着ydfsq 中的计数器按4Hz的时钟频率做加法计数时,乐谱逐次被选取,《祝你生日快乐》乐曲就开始自然连续而且循环的演奏起来了。
2.音调发生器模块的VHDL源程序library ieee;use ieee.std_logic_1164.all;entity ydfsq isport(clk:in std_logic;clkj:in std_logic_vector(1 downto 0);rst:in std_logic;toneindex:out integer range 0 to 14);end ydfsq;architecture bhv of ydfsq issignal counter:integer range 0 to 107;signal clker:std_logic;signal count4:integer;beginprocess(clk)beginif clk'event and clk='1' thenif clkj="10" thencount4<=count4+1;if count4>0 thenclker<=not clker;count4<=0;end if;elsif clkj="01" thencount4<=count4+1;if count4>2 thenclker<=not clker;count4<=0;end if;else count4<=count4+1;if count4>1 thenclker<=not clker;count4<=0;end if;end if;end if;end process;process(clker,counter,rst)beginif rst='1' thencounter<=0;elsif counter=107 thencounter<=0;elsif clker'event and clker = '1' then counter<=counter+1;end if;end process;process(counter)begincase counter iswhen 0 to 3|8 to 11|24 to 27|32 to 35|48 to 51=>toneindex<=5;when 4 to 7|28 to 31|68 to 75=>toneindex<=6;when 16 to 23|64 to 67=>toneindex<=7;when 12 to 15|40 to 47|60 to 63|92 to 95|100 to 107=>toneindex<=8;when 96 to 99=>toneindex<=9;when 56 to 59|88 to 91=>toneindex<=10;when 84 to 87=>toneindex<=11;when 52 to 55=>toneindex<=12;when 76 to 83=>toneindex<=0;when others=>NULL;end case;end process;end bhv;3.音调发生器模块的仿真图图2-4 音调发生器模块的仿真波形图通过仿真图可以清楚的看到,时钟clk由0开始计数,每计一次数输出toneindex 的值随之发生一定的变化,只不过根据乐谱的不同,输出的变化也不尽相同。
然后把输出toneindex输入到音调编码器模块,进行下一步编码工作。
于是,由仿真图印证了ydfsq模块逐次选取音符的功能。
2.3.2手动\自动选择模块1.手动\自动选择模块的功能根据设计的要求,该简易乐曲演奏器能实现手动或自动演奏乐曲的功能。
于是,可通过一个按键cs来进行自动与手动的选择,当cs按下时,乐曲自动演奏,其他情况下均为手动演奏乐曲,即可以通过按下其他的按键(与cs相连的按键除外)来控制不同的音符。
与此同时,还需要一个复位信号rst来控制该演奏器是否工作,当rst为1时,停止演奏,为0时,可以演奏。
以上提到的手动与自动的选择只能在rst为0时有效。
2.手动\自动选择模块的VHDL源程序library ieee;use ieee.std_logic_1164.all;entity bmux isport(d1:in integer range 0 to 14;d2:in integer range 0 to 14;cs,rst:in std_logic;q:out integer range 0 to 14);end bmux;architecture bhv of bmux isbeginprocess(cs,rst)beginif rst='1'thenq<=0;elsecase cs iswhen '0'=>q<=d1;when '1'=>q<=d2;when others=>q<=d1;end case;end if;end process;end bhv;3.手动\自动选择模块的仿真图图2-5手动\自动选择模块的仿真波形图此仿真图中输入cs代表手动\自动演奏的选择端,输入rst代表整体复位端,输入d1、d2分别代表手动和自动要演奏的音符,输出q代表经过选择后,要演奏的或是手动输入或是自动输入的音符。