EDA_简易音乐播放器设计
EDA乐曲播放器设计

实验报告学生姓名:EDA小王子学号:国家机密专业班级:国家机密实验类型:□验证□综合√设计□创新实验日期:国家机密实验成绩:很高实验六乐曲播放器设计一、实验目的1、进一步掌握QuartusII的使用全过程;2、学习多层次的设计方法,掌握基本的VHDL语言的设计方法;3、进一步熟悉和掌握VHDL语言。
二、实验内容与要求使用层次化设计方法,实现乐曲播放器的设计。
乐曲选取《梁祝》中化蝶部分三、实验设计1、实验分析1232、实验程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yy ISPORT(clk4hz:IN STD_LOGIC;……………………………………音调频率信号 CLK1kHz:IN STD_LOGIC; …………………………动态数码管扫描频率 clk6Mhz:IN STD_LOGIC; …………………………………节拍频率信号rt:IN STD_LOGIC;………………………………………………复位信号 SEG:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);…………简谱码输出显示MAX: BUFFER INTEGER RANGE 0 TO 9110;……………………分频系数 h,m,l:OUT STD_LOGIC;…………………………………………音调指示 speakout:BUFFER STD_LOGIC …………………………………声音输出 );END ENTITY yy ;ARCHITECTURE behave OF yy ISSIGNAL addr1:INTEGER RANGE 0 TO 255;SIGNAL yf1:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL yinfu :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL count: INTEGER RANGE 0 TO 9110;SIGNAL tout: STD_LOgIC;BEGINp1:PROCESS(addr1,clk4hz)BEGINIF(clk4hz'EVENT AND clk4hz='1') THENIF(addr1<112)THENaddr1<=addr1+1;ELSIF(addr1=112) THENaddr1<=0;END IF;CASE addr1 ISWHEN 0 => yf1<="00011";WHEN 1 => yf1<="00011";WHEN 2 => yf1<="00011";WHEN 3 => yf1<="00011";WHEN 4 => yf1<="00101";WHEN 5 => yf1<="00101";WHEN 6 => yf1<="00110";WHEN 7 => yf1<="01001";WHEN 8 => yf1<="01001";WHEN 9 => yf1<="01010";WHEN 10 => yf1<="01110";…………WHEN 110 => yf1<="00101";WHEN 111 => yf1<="00101";WHEN 112 => yf1<="00101";WHEN OTHERS =>yf1<="00000";END CASE;END IF;IF(rt='1') THENaddr1<=0;END IF;END PROCESS p1;p2:PROCESS(clk6Mhz)BEGINIF(clk6Mhz'EVENT AND clk6Mhz='1') THEN IF(count<MAX) THENcount<=count+1;tout<='0';ELSIF(count=MAX) THENcount<=0;tout<='1';END IF;END IF;END PROCESS p2;p3:PROCESS(tout)BEGINIF(tout'EVENT AND tout='1') THENspeakout<=NOT speakout;END IF;END PROCESS p3;p4:PROCESS(yf1)BEGINCASE yf1 ISWHEN "00011" =>MAX<=9101;l<='1';m<='0';h<='0';WHEN "00101" =>MAX<=7653;l<='1';m<='0';h<='0';WHEN "00110" =>MAX<=6818;l<='1';m<='0';h<='0';WHEN "00111" =>MAX<=6074;l<='1';m<='0';h<='0';WHEN "01001" =>MAX<=5733;l<='0';m<='1';h<='0';WHEN "01010" =>MAX<=5108;l<='0';m<='1';h<='0';WHEN "01011" =>MAX<=4551;l<='0';m<='1';h<='0';WHEN "01101" =>MAX<=3827;l<='0';m<='1';h<='0';WHEN "01110" =>MAX<=3409;l<='0';m<='1';h<='0';WHEN "10001" =>MAX<=2867;l<='0';m<='0';h<='1';WHEN OTHERS =>MAX<=0;l<='0';m<='0';h<='0';END CASE;END PROCESS p4;yinfu<='0'&yf1(2)&yf1(1)&yf1(0);………………显示简谱的低三位,音调不论中低高,简谱数字都一样p5:PROCESS(CLK1kHz,yinfu)VARIABLE SEL : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF(rt='1') THENSEL:="000";ELSIF (CLK1kHz'EVENT AND CLK1kHz='1')THENIF SEL="000" THENSEG<=yinfu;SEL:="000";END IF;END IF;END PROCESS p5;END behave;四、实验步骤1、建立工作库文件夹和编辑设计文件1)建立一个文件夹保存工程文件;2)打开QuartusII,建立新的VHDL文件,再打开的页面下输入程序2、编译过程1)输入完程序之后逐个编译2)逐个编译无错之后进行全程编3、系统仿真1)建立新的波形激励文件2)在波形编辑器窗口添加节点3)通过Edit->End Time 来设定仿真结束时间4)在CLOCK窗口中设置clk4hz的时钟周期为1us,clk1khz时钟周期为200ns,clk6mhz时钟周期为20ns如图:5)点击save保存6) 通过Tools下的Simulator Tools项进行仿真,然后观察输出波形。
EDA_课程设计_乐曲演奏器

EDA课程设计题目:乐曲硬件演奏电路的VHDL设计专业:通信工程班级:通信082姓名:***学号:**********一、 设计题目:乐曲硬件演奏电路的VHDL 设计二、 设计目标:1)能够播放“梁祝”乐曲。
2)能够通过LED 显示音阶。
3)具有“播放/停止”功能,并在此基础上实现“按键演奏”的电子琴功能。
三、 设计原理:1. 音乐基础知识一段简单乐谱由音调和节拍组成,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
音符的节拍我们可以举例来说明。
在一张乐谱中,我们经常会看到这样的表达式,如1=C 44、1=G 43…… 等等。
以43为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。
比如:图1其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。
1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。
那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。
我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。
2.原理图框图:图2.框图3.原理图说明音乐播放原理说明音符的频率由数控分频器模块Speakera产生。
ToneTaba模块从NoteTabs模块中输入的音符数据,将对应的分频预置数据传送给Speakera模块,并将音符数据送到LED模块显示音阶。
NoteTabs模块中包含有一个音符数据ROM,里面存有歌曲“梁祝”的全部音调,在此模块中设置了一个8位二进制计数器,作为音符数据ROM的地址发生器。
这个计数器的计数频率为4Hz,即每一个数值的停留时间为0.25秒。
例如:“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒钟时间,所对应的“3”音符分频预置数为1036,在Speakera的输入端停留了1秒。
基于EDA音乐播放器的设计说明

长沙学院课程设计说明书题目音乐播放器的设计系(部) 电子与通信工程专业(班级) 电气工程及其自动化(一班)姓名学号指导教师起止日期2010-11-29至2010-12-10EDA技术课程设计任务书系(部):电子与通信工程系专业:电气工程及其自动化指导教师:长沙学院课程设计鉴定表目录摘要 (6)设计原理 (7)程序: (8)实验现象: (16)引脚分配: (16)仿真波形: (17)心得体会: (18)参考文献: (18)摘要:在SOPC开发平台上实现一个音频信号发生器,编写3段音乐,利用开发平台的蜂鸣器来播放几段音乐。
可进行自动循环播放和手动播放两个模式的选择。
如果为手动播放,则通过拨动拨码开关第1、2位选择。
播放音乐时,要求将该音乐的序号(分别为A1、A2,A3)以及该音乐播放剩余的时间(分、秒)显示在数码管上。
当某首音乐开始播放时,音乐序号闪烁显示3秒钟。
关键字:SOPC、音频信号、音乐、蜂鸣器、自动循环、手动播放、剩余时间(分钟、秒钟)显示、音乐序号(A1、A2、A3)显示。
设计原理:首先采用分块设计法,将设计分为分频模块、时间动态扫描显示模块、音乐播放模块、顶层模块。
其中音乐播放模块又可分为音频模块、音乐代码模块,预置数模块利用计数的方式将50MHZ的频率分为12MHz、100Hz、8Hz、1Hz。
音乐播放模块需要完成以下设计:①预置乐曲,本次设计选取了《梁祝》的一段作预置,在作预置时,需要将乐曲音符转换成相应的代码,通过计算逐一将音符转换成代码,通过EDA开发平台quartus Ⅱ进行乐曲定制;②为了提供乐曲发音所需要的发音频率,编写数控分频器程序,对单一输入高频,进行预置数分频,生成每个音符发音的相应频率;③为了给分频提供预置数,需要计算分频预置数;对每部分结构单元逐一进行编译,生成相应的元器件符号,并对独立结构单元功能进行仿真。
音调的控制频率的高低决定了音调的高低。
综合考虑各因素,本次设计中选取12MHZ作为CLK 的分频计数器的输入分频信号。
EDA课设设计简易音乐播放器

1 引言VHDL语言是一种用于电路设计的高级语言。
它在80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
随着EDA技术的高速发展.电子系统的设计技术和工具发生了深刻的变化.大规模可编程逻辑器件CPLD/FPGA的出现.给设计人员带来了诸多方便。
利用它进行产品开发.不仅成本低、周期短、可靠性高.而且具有完全的知识产权。
突出了其作为硬件描述语言的良好的可读性、可移植性和易读性等优点。
本文基于FPGA开发系统.在QuartusII 7.2软件平台上.完成了简易多功能信号发生器电路的设计和与仿真.并下载到试验箱进行硬件实现。
首先.本文介绍了QuartusII 7.2软件的基本使用方法和VHDL硬件描述语言的特点.采用VHDL 硬件描述语言描述简易信号发生器.完成对电路的功能仿真。
在设计过程中.重点探讨了简易信号发生器设计思路和功能模块划分。
然后.初步探讨了电路逻辑综合的原理.该软件对简易多功能信号发生器电路进行了逻辑综合。
最后.使用EDA 实验开发系统进行电路的下载和验证。
验证结果表明设计的简易简易信号发生器完成了预期的功能。
简易多功能信号发生器是信号发生器的一种.在生产实践和科研领域中有着广泛的应用。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时.都需要有信号源.由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上.用其他仪器观察、测量被测仪器的输出响应.以分析确定它们的性能参数。
信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。
它可以产生多种波形信号,如正弦波,三角波,方波和锯齿波等,因而广泛用于通信、雷达、导航、宇航等领域。
本设计是采用VHDL来实现的简易乐曲演奏器。
它能实现自动演奏已存歌曲和手动演奏简易乐曲。
且要求实现如下功能:(1)通过按键输入来控制音响声音;(2)演奏时可以通过按键选择是手动演奏还是自动演奏.手动演奏是通过按键进行简易乐曲的演奏.自动演奏则是演奏已存入的固定乐曲;(3)至少保存一首自动演奏的乐曲.且自动演奏的乐曲能重复播放;(4)进行手动演奏和自动演奏时.数码管上要同时能显示演奏乐曲的乐谱;(5)扩展功能(选作)自动播放时.设置低速.中速.快速控制键.能实现乐曲不同速度的播放。
EDA音乐播放器

EDA技术及应用课程设计说明书 2013 届电子信息工程专业 1班级题目音乐播放器学号姓名指导教师二О一五年 6 月25 日一、音乐播放器基本原理1 硬件电子琴设计原理乐曲演奏的原理是:由于组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲演奏的2个基本数据,因此需要控制输出到扬声器的激励信号的频率高低和该频率信号持续的时间。
频率的高低决定了音调的高低,而乐曲的简谱与各音名的频率对应关系在后面将给出。
所有不同频率的信号都是从一基准频率分频而得来的,由于音阶频率多为非整数,而分频系数有不能为小数,故必须将计算得到的分频数进行向下取整,基准频率和分频系数应综合考虑加以选择,从而保证音乐不会走调。
如在48MHz 时钟下,中音1(对应的频率值是523.3Hz)的分频系数应该为:48000000/(2*523.3)=45863,这样只需对系统时钟进行45863次分频即可得到所要的中音M1(分频系数计算公式为D=F/2K,由于F/2K之后,会使分频系数D变小,所以功能模块中语句:beep_r<=!beep_r,使得输出取反,K=F/2count_end,消除了前面除以2K的影响)。
2 乐曲自动演奏设计原理硬件电路和自动演奏的原理同硬件电子琴实验原理类似。
至于其他音符,同样可由一式求出对应的分频系数。
在程序中设置一个状态机,每250ms改变一个状态(即一个节拍),组成乐曲的每个音符的频率值(音调)相对应于状态机的每一个状态。
只要让状态机的状态按顺序转换,就可以自动演奏播放音乐了。
《欢乐颂》乐曲的简谱如图所示:3 消抖原理作为机械开关的键盘,在按键操作时,由于机械触点的弹性及电压突跳等原因,在触点闭合或开启的瞬间会出现电压抖动,实际应用中如果不进行处理将会造成误触发。
由于这里是低电平表示按键按下,所以按键去抖动的关键在于提取稳定的低电平状态,虑除前沿、后沿抖动毛刺。
对于一个按键信号,可以用一个脉冲对他进行取样,如果连续三次取样为低电平,可以认为信号已经处于键稳定状态,这时输出一个低电平按键信号。
EDA乐曲播放电路课程设计报告

EDA乐曲播放电路课程设计报告目录一.课程设计概述 (1)1.设计的题目 (2)2.设计要求 (2)3.设计构思 (2)二.总体框图 (4)三.具体各功能模块(模块图像,程序,波形图像,波形分析) (2)1.计数器模块 (2)2.选择器模块 (4)3.数据翻译模块 (6)4.数控分频模块 (7)5.乐曲ROM的三个模块 (10)6.顶层文件的设计 (12)四.总体电路图(RLT电路图) (14)五.课程设计总结 (15)一.课程设计概述1.设计的题目乐曲播放电路2.设计要求:学习利用数控分频器设计硬件乐曲演奏电路,在实验四的基础上,改建电路的设计,增加功能自动选择曲目,可选的歌曲不少于3首。
3.设计构思(1)音乐硬件演奏电路基本原理硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。
乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。
乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。
而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。
(2)音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频器获得。
由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。
若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。
若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。
实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。
本设计中选取1MHz的基准频率。
数控分频器采用12位二进制计数器,乐曲中的休止符,只要将分频系数设为0,即初始值=4095,此时扬声器不会发声。
EDA课程设计 乐曲自动演奏机

郑州航空工业管理学院《EDA技术及应用》课程设计报告13 届通信工程专业班级题目:乐曲自动演奏机姓名:学号:同组人:指导老师:2015年7月9日乐曲自动演奏机一、设计要求:(1)可以在电路上自动演奏至少两首乐曲,在这里我们选用的是《茉莉花》、《欢乐颂》和《小苹果》。
(2)有相应的LED灯指示高低音。
二、其他要求:(在EDA实验箱上完成)1.晶振为48 MHz。
2. 采用FPGA器件为ALTERA 的EP1C6Q240C8。
3.采用数码管显示。
一、设计方案规划1、整体规划输入一个:clk(系统时钟48MHz)输出四个:beep(蜂鸣器输出端)、led(LED指示灯)、dig(数码管选择输出引脚)、seg(数码管段输出引脚)2、功能模块与模块划分总共分为三部分,①蜂鸣器发声部分,②LED灯显示部分,③数码管显示部分。
3、各功能或各模块的功能细分①蜂鸣器自动演奏乐曲,②LED灯显示高低音,③数码管显示音调。
二、各模块的实现方法、技术、要点1、乐曲演奏的原理是:由于组成乐曲的每个音符的频率值(音调)及其持续(时间音长)是乐曲演奏的2个基本数据,因此需控制输出到扬声器的激励信号的频率高低和该频率信号持续的时间。
频率的高低决定了音调的高低,而乐曲的简谱与各音名的频率对应关系在后面将给出。
所有不同频率的信号都是从一基准频率分频而得来的,由于音阶频率多为非整数,而分频系数有不能为小数,故必须将计算得到的分频数进行四舍五入取整,基准频率和分频系数应综合考虑加以选择,从而保证音乐不会走调。
如在48MHz 时钟下,中音1(对应的频率值是523.3Hz)的分频系数应该为:48000000/(2*523.3)=45863,这样只需对系统时钟进行45863次分频可得到所要的中音M1(分频系数计算公式为D=F/2K,由于F/2K之后,会使分频系数D变小,所以功能模块中语句:beep_r<=!beep_r,使得输出取反,K=F/2count_end,消除了前面除以2K的影响)。
基于EDA音乐播放器的设计

基于EDA音乐播放器的设计————————————————————————————————作者:————————————————————————————————日期:长沙学院课程设计说明书题目音乐播放器的设计系(部)电子与通信工程专业(班级)电气工程及其自动化(一班)姓名学号指导教师起止日期 2010-11-29至2010-12—10EDA技术课程设计任务书系(部):电子与通信工程系专业:电气工程及其自动化指导教师: 课题名称音乐播放器的设计设计内容及要求在SOPC开发平台上实现一个音频信号发生器,编写3段音乐,利用开发平台的蜂鸣器来播放几段音乐.可进行自动循环播放和手动播放两个模式的选择.如果为手动播放,则通过拨动拨码开关第1、2位选择.播放音乐时,要求将该音乐的序号(分别为A1、A2,A3)以及该音乐播放剩余的时间(分、秒)显示在数码管上。
当某首音乐开始播放时,音乐序号闪烁显示3秒钟.系统提供50MHZ频率的时钟源。
完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。
设计工作量1、VHDL语言程序设计;2、波形仿真;3、在实验装置上进行硬件测试,并进行演示;4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、硬件测试、调试过程,参考文献、设计总结等。
进度安排起止日期(或时间量)设计内容(或预期目标)备注第1天课题介绍,答疑,收集材料第2天设计方案论证第3天进一步讨论方案,对设计方案进行必要的修正,方案确定后开始进行VHDL语言程序设计第4天设计VHDL语言程序第5~9天在实验装置上进行硬件测试,对VHDL语言程序进行必要的修正,并进行演示第10天编写设计说明书教研室意见年月日系(部)主管领导意见年月日长沙学院课程设计鉴定表姓名学号专业电气工程及其自动化班级一班设计题目音乐播放器的设计指导教师指导教师意见:评定等级:教师签名:日期: 答辩小组意见:评定等级: 答辩小组长签名:日期:教研室意见:教研室主任签名:日期:系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格"、“不及格"四类;目录摘要 (6)设计原理 (7)程序: (8)实验现象: (16)引脚分配: (16)仿真波形: (17)心得体会: (18)参考文献: (18)摘要:在SOPC开发平台上实现一个音频信号发生器,编写3段音乐,利用开发平台的蜂鸣器来播放几段音乐。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1 引言 (2)2 设计任务及设计要求 (2)3 设计原理及总体思路 (3)4 各单元模块的设计 (5)5 总电路设计 (17)6 设计调试体会与总结 (18)参考文献 (23)1 引言《EDA课程设计》(注:EDA即电子设计自动化,Electronics Design Automation)是继《模拟电子技术基础》、《数字电子技术基础》、《电子技术基础实验》课程后,电气类、自控类和电子类等专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分,其目的和任务是通过一周的时间,让学生掌握EDA的基本方法,熟悉一种EDA软件,并能利用EDA软件设计一个电子技术综合问题,并在实验箱上成功下载,为以后进行工程实际问题的研究打下设计基础。
1.通过课程设计使学生能熟练掌握一种EDA软件的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。
2.通过课程设计使学生能利用EDA软件进行至少一个电子技术综合问题的设计,设计输入可采用图形输入法或AHDL硬件描述语言输入法。
3.通过课程设计使学生初步具有分析寻找和排除电子电路中常见故障的能力。
4.通过课程设计使学生能独立写出严谨的、有理论根据的、实事求是的、文理通顺的字迹端正的课程设计报告。
2 设计任务及设计要求设计一个简易硬件播放器并能播放多首音乐(最少四首),可通过按键手动控制音乐播放。
在播放音乐的同时可实现音谱与音高的显示,并通过16个LED 小灯显示不同音调的变化。
使用VHDL语言设计音调发生模块,音调编码模块,乐曲存储模块,控制模块,小灯控制模块,数字显示模块,音谱与音高输出模块等各个模块。
3 设计原理及总体思路产生音乐的两个因素是音乐频率和音乐的持续时间,以纯硬件完成演奏电路比利用微处理器(CPU)来实现乐曲演奏要复杂的多如果不借助于功能强大的EDA 工具和硬件描述语言,凭借传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
根据设计要求,乐曲硬件演奏电路系统主要由音频发生模块和乐曲存储模块组成。
音频发生模块对FPGA的基准频率进行分频,得到与各个音阶对应的频率输出。
乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐曲节拍控制信号。
3.1 音名与频率的关系音乐的十二平均率规定:每两个八度音(如简谱中的中音1与高音1)之间的频率相差一倍.在两个八度音之间,又可分为十二个半音,每两个半音的频率比为4。
另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间,E 到F之间为半音,其余为全音,由此可以计算出简谱中从低音1到高音1之间每个音名的频率如表3-1所示。
表3-1 简谱中的音名与频率的关系由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频数四舍五入取整。
若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大,若基准频率过高,虽然误码差变小,但分频结构将变大。
实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取舍合适的基准频率。
本例中选取12MHz的基准频率,若无12MHz的时钟频率,实际上,只要各个音名间的相对品频率关系不变,C作1与D作1演奏出的音乐听起来都不会“走调”。
各音阶频率及相应的分频系数如表2所示。
为了减少输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。
表3-2中的分频系数就是从500KHZ频率二分频得到的250KHZ频率基础上计算得出的。
表3-2 各音阶频率对应的分频值由于最大的分频系数为1274,故采用13位二进制计数器已能满足分频要求。
在表3-2,除给出了分频比以外,给出了对应于各个音阶频率时计数器不同的初始值,对于乐曲中的休止符,要将分频系数设为0,即初始值为2047即可,此时扬声器将不会发声。
对于不同的分频系数,加载不同的初始值即可。
3.2 节拍控制原理该演奏电路演奏的乐曲是“梁祝”等片段,其最小的节拍为1拍。
将1拍的时长定为0.25秒,则需要再提供一个4Hz的时钟频率即可产生1拍的时长,演奏的时间控制通过音符的多次重复的方式来完成。
对于占用时间较长的节拍,如全音符为4拍(重复4),2/4音符为2拍(重复2),1/4音符为1拍(重复1)。
由于乐理规律对于任何一首音乐都是普遍适用的,所以以上原理对于其他三首乐曲同样适用。
4 各单元模块的设计4.1 音频发生模块4.1.1 模块引脚图4-1 speaker模块4.1.2 模块功能如图4-1,en为使能引脚,当en引脚接高电平时speaker模块使能可正常工作。
clk为时钟信号引脚,为speaker模块提供时钟信号。
tone[10..0]为11位的音调初始值信号并行总线,可快速的为speaker模块输送音调初始值信号,保证乐曲演奏的流畅性。
spks为电信号输出引脚,连接蜂鸣器将电信号转化为声信号。
该模块中有一个4位的计数器用于将12MHz时钟信号进行十二分频产生1MHz的基准信号。
一个11位的递增计数器用于赋音调初始值对基准信号进行频,最后进行二分频产生对称方波。
初始值D = 计数最大值N - 分频系数n (1) 4.1.3 VHDL程序library ieee;use ieee.std_logic_1164.all;entity speaker isport(en : in std_logic;clk : in std_logic;tone : in integer range 0 to 16#7ff#; --"2047"spks : out std_logic);end speaker;architecture behav of speaker issignal preclk : std_logic;signal fullspks : std_logic;begindivideclk: process(clk) --12分频variable count4 : integer range 0 to 15;beginpreclk<='0';if count4>11 thenpreclk<='1';count4:=0;elsif clk'event and clk='1' thencount4:=count4+1;end if;end process;genspks : process(preclk,tone)--"preclk=1MHZ";variable count11 : integer range 0 to 16#7ff#;beginif preclk'event and preclk='1' then --频率控制if count11=16#7ff# then --b"111,1111,1111"count11:=tone; -- 初始值D = 计数最大值N - 分频系数nfullspks<='1';else count11:=count11+1;fullspks<='0';end if;end if;end process;delay: process(fullspks)--"fullspks=488.2815HZ"; 二分频variable count2 : std_logic;beginif fullspks'event and fullspks='1' thencount2:=not count2;if en='0' thenspks<='0'; --gaile elsif count2='1' thenspks<='1';elsespks<='0'; --"spks=244.14075HZ"end if;end if;end process;end behav;4.2 音频编码模块4.2.1 模块引脚图4-2 tonetaba模块4.2.2 模块功能如图4-2,index[3..0]为4位的音符输入并行总线,用于为tonetaba 模块输送音符信号。
tone[10..0]为11位的音调初始值信号输出并行总线,为speaker 模块提供音调初始值信号。
code[3..0]为4位的音谱输出并行总线,为SELTIME 模块提供音谱信号。
high[1..0]为2位的音高输出并行总线,为SELTIME 模块提供音高信号。
该模块将输入的音符信号转化为音调初始值(tone),对应的音谱(code)及音高(high)并输出。
4.2.3 VHDL程序library ieee;use ieee.std_logic_1164.all;entity tonetaba isport(index : in integer range 0 to 15;tone : out integer range 0 to 16#7ff#; --"2047"code : out integer range 0 to 15;high : out integer range 0 to 2);end tonetaba;architecture behav of tonetaba isbeginsearch:process(index)begincase index iswhen 0=>tone<=2047; code<=0; high<=0;when 1=>tone<=773; code<=1; high<=0;when 2=>tone<=912; code<=2; high<=0;when 3=>tone<=1036; code<=3; high<=0;when 5=>tone<=1197; code<=5; high<=0;when 6=>tone<=1290; code<=6; high<=0;when 7=>tone<=1372; code<=7; high<=0;when 8=>tone<=1410; code<=1; high<=1;when 9=>tone<=1480; code<=2; high<=1;when 10=>tone<=1542; code<=3; high<=1;when 12=>tone<=1622; code<=5; high<=1;when 13=>tone<=1668; code<=6; high<=1;when 15=>tone<=1728; code<=1; high<=2;when others=>null;end case;end process;end behav;4.3 乐曲储存模块4.3.1 模块引脚图4-3 notetabs模块4.3.2 模块功能如图4-3,clk为时钟信号引脚为模块提供时钟信号,clr为计数器清零引脚,当clr为高电平时notetabs 模块中的乐曲播放计数器清零。