EDA_简易音乐播放器设计

合集下载

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_课程设计_乐曲演奏器

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音乐播放器的设计说明

基于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课设设计简易音乐播放器

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音乐播放器

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乐曲播放电路课程设计报告

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课程设计 乐曲自动演奏机

郑州航空工业管理学院《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音乐播放器的设计

基于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段音乐,利用开发平台的蜂鸣器来播放几段音乐。

EDA-简易音乐播放器设计

EDA-简易音乐播放器设计

E D A-简易音乐播放器设计(总23页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--目录1 引言........................................... 错误!未定义书签。

2 设计任务及设计要求............................. 错误!未定义书签。

3 设计原理及总体思路............................. 错误!未定义书签。

4 各单元模块的设计............................... 错误!未定义书签。

5 总电路设计..................................... 错误!未定义书签。

6 设计调试体会与总结............................. 错误!未定义书签。

参考文献.......................................... 错误!未定义书签。

1 引言《EDA课程设计》(注:EDA即电子设计自动化,Electronics Design Automation)是继《模拟电子技术基础》、《数字电子技术基础》、《电子技术基础实验》课程后,电气类、自控类和电子类等专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分,其目的和任务是通过一周的时间,让学生掌握EDA的基本方法,熟悉一种EDA软件,并能利用EDA软件设计一个电子技术综合问题,并在实验箱上成功下载,为以后进行工程实际问题的研究打下设计基础。

1.通过课程设计使学生能熟练掌握一种EDA软件的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。

2.通过课程设计使学生能利用EDA软件进行至少一个电子技术综合问题的设计,设计输入可采用图形输入法或AHDL硬件描述语言输入法。

3.通过课程设计使学生初步具有分析寻找和排除电子电路中常见故障的能力。

EDA实验7lxm简易音乐发生器综合设计

EDA实验7lxm简易音乐发生器综合设计

实验七简易音乐发生器设计一、实验目的1、学习存储器的定制与应用。

2、学习数控分频器涉及硬件乐曲演奏电路。

3、要求学生独立查阅资料、编制实验方案、按实验方案进行实验操作,编写出合乎要求的实验方案、实验报告。

二、实验仪器PC机、EDA实验箱一台Quartus II 6.0软件三、实验原理组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素。

乐曲的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。

在2个八度音之间,又可分为12个半音,每2个半音的频率比为。

另外,音符A(简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。

由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如下表所示:(2)、系统由3个模块组成:ToneTata(乐曲简谱码对应得分频预置数查询表电路)、Speakera (数控分频器)、Notetabs(用于产生节拍控制和音阶选择信号),硬件电路如下:四、实验内容1:根据例9-30、9-31,及以上的设计原理,完成乐曲硬件演奏电路的设计,仿真测试及实验系统上的硬件测试。

建议选电路模式5。

4Hz与12MHz的信号单独选取进行锁定。

五、实验步骤:1、代码编写,具体参考教材中相关章节。

2、波形仿真。

综合编译成功后,建立波形文件进行波形仿真,启动仿真器Simulator,观察输出波形的情况,在软环境下验证设计的正确性。

3、引脚锁定和程序下载。

参选实验电路模式5和附表一中的 FLEX10K20 EP1K30/50144-PIN TQFP目标芯片,确定输入引脚并在开发环境中进行引脚锁定操作后重新综合编译,成功后进行下载操作。

六、实验报告内容:1、设计流程图。

2、VHDL代码。

3、仿真波形图。

4、硬件测试数据表。

5、分析实验结果。

6、心得体会。

七、实验思考题:1、如果ROM中存放多首曲目,应该如何修改程序?2、如果确定输出频率?与时钟频率有何关系?-- 硬件演奏电路顶层设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Songer ISPORT ( CLK12MHZ : IN STD_LOGIC; --音调频率信号CLK8HZ : IN STD_LOGIC; --节拍频率信号CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);-- 简谱码输出显示HIGH1 : OUT STD_LOGIC; --高8度指示SPKOUT : OUT STD_LOGIC);--声音输出END Songer;ARCHITECTURE one OF Songer ISCOMPONENT NoteTabsPORT ( clk : IN STD_LOGIC;ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END COMPONENT;COMPONENT ToneTabaPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ;HIGH : OUT STD_LOGIC;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0));END COMPONENT;COMPONENT SpeakeraPORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);SpkS : OUT STD_LOGIC);END COMPONENT;SIGNAL Tone : STD_LOGIC_VECTOR (10 DOWNTO 0);SIGNAL ToneIndex : STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINu1 : NoteTabs PORT MAP (clk=>CLK8HZ, ToneIndex=>ToneIndex);u2:ToneTaba PORT MAP(Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1);u3 : Speakera PORT MAP(clk=>CLK12MHZ,Tone=>Tone, SpkS=>SPKOUT );END one;--NoteTabs部分--LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs ISPORT ( clk : IN STD_LOGIC;ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END;ARCHITECTURE one OF NoteTabs ISCOMPONENT MUSIC --音符数据ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END COMPONENT;SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);BEGINCNT8 : PROCESS(clk, Counter)BEGINIF Counter=138 THEN Counter <= "00000000";ELSIF (clk'EVENT AND clk = '1') THEN Counter <= Counter+1;END IF;END PROCESS;u1 : MUSIC PORT MAP(address=>Counter , q=>ToneIndex, inclock=>clk); END;--ToneTaba部分--LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba ISPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ;HIGH : OUT STD_LOGIC;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) );END;ARCHITECTURE one OF ToneTaba ISBEGINSearch : PROCESS(Index)BEGINCASE Index IS -- 译码电路,查表方式,控制音调的预置数WHEN "0000" => Tone<="11111111111" ; CODE<="0000"; HIGH <='0';-- 2047WHEN "0001" => Tone<="01100000101" ; CODE<="0001"; HIGH <='0';-- 773;WHEN "0010" => Tone<="01110010000" ; CODE<="0010"; HIGH <='0';-- 912;WHEN "0011" => Tone<="10000001100" ; CODE<="0011"; HIGH <='0';--1036;WHEN "0101" => Tone<="10010101101" ; CODE<="0101"; HIGH <='0';--1197;WHEN "0110" => Tone<="10100001010" ; CODE<="0110"; HIGH <='0';--1290;WHEN "0111" => Tone<="10101011100" ; CODE<="0111"; HIGH <='0';--1372;WHEN "1000" => Tone<="10110000010" ; CODE<="0001"; HIGH <='1';--1410;WHEN "1001" => Tone<="10111001000" ; CODE<="0010"; HIGH <='1';--1480;WHEN "1010" => Tone<="11000000110" ; CODE<="0011"; HIGH <='1';--1542;WHEN "1100" => Tone<="11001010110" ; CODE<="0101"; HIGH <='1';--1622;WHEN "1101" => Tone<="11010000100" ; CODE<="0110"; HIGH <='1';--1668;WHEN "1111" => Tone<="11011000000" ; CODE<="0001"; HIGH <='1';--1728;WHEN OTHERS => NULL;END CASE;END PROCESS;END;--Speakera部分--LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera ISPORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);SpkS : OUT STD_LOGIC);END Speakera;ARCHITECTURE one OF Speakera ISSIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGINDivideCLK : PROCESS(clk)V ARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ;BEGINPreCLK <= '0'; -- 将CLK进行16分频,PreCLK为CLK的16分频IF Count4>11 THEN PreCLK <= '1'; Count4 := "0000";ELSIF clk'EVENT AND clk = '1' THEN Count4 := Count4 + 1;END IF;END PROCESS;GenSpkS : PROCESS(PreCLK, Tone)-- 11位可预置计数器V ARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0);BEGINIF PreCLK'EVENT AND PreCLK = '1' THENIF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS <= '1';ELSE Count11 := Count11 + 1; FullSpkS <= '0';END IF;END IF;END PROCESS;DelaySpkS : PROCESS(FullSpkS)--将输出再2分频,展宽脉冲,使扬声器有足够功率发音V ARIABLE Count2 : STD_LOGIC;BEGINIF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2;IF Count2 = '1' THEN SpkS <= '1';ELSE SpkS <= '0';END IF;END IF;END PROCESS;END;-- megafunction wizard: %LPM_ROM%-- GENERATION: STANDARD-- VERSION: WM1.0-- MODULE: lpm_rom-- ============================================================-- File Name: music.vhd-- Megafunction Name(s):-- lpm_rom-- ============================================================-- ************************************************************-- THIS IS A WIZARD-GENERA TED FILE. DO NOT EDIT THIS FILE!---- 6.0 Build 202 06/20/2006 SP 1 SJ Full Version-- ************************************************************--Copyright (C) 1991-2006 Altera Corporation--Your use of Altera Corporation's design tools, logic functions--and other software and tools, and its AMPP partner logic--functions, and any output files any of the foregoing--(including device programming or simulation files), and any--associated documentation or information are expressly subject--to the terms and conditions of the Altera Program License--Subscription Agreement, Altera MegaCore Function License--Agreement, or other applicable license agreement, including,--without limitation, that your use is for the sole purpose of--programming logic devices manufactured by Altera and sold by--Altera or its authorized distributors. Please refer to the--applicable agreement for further details.------ music文件,由宏功能模块生成LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.all;ENTITY music ISPORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END music;ARCHITECTURE SYN OF music ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0);COMPONENT lpm_romGENERIC (intended_device_family : STRING;lpm_address_control : STRING;lpm_file : STRING;lpm_outdata : STRING;lpm_type : STRING;lpm_width : NATURAL;lpm_widthad : NATURAL);PORT (address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END COMPONENT;BEGINq <= sub_wire0(3 DOWNTO 0);lpm_rom_component : lpm_romGENERIC MAP (intended_device_family => "ACEX1K",lpm_address_control => "REGISTERED",lpm_file => "music.hex",lpm_outdata => "UNREGISTERED",lpm_type => "LPM_ROM",lpm_width => 4,lpm_widthad => 8)PORT MAP (address => address,inclock => inclock,q => sub_wire0);END SYN;。

EDA乐曲播放器设计

EDA乐曲播放器设计

实验六乐曲播放器设计一、实验目的1.熟悉EDA技术开发流程;2.学习利用数控分频器设计硬件乐曲演奏电路。

二、实验要求使用层次设计方法,实现乐曲播放器的设计。

可以通过LPM_ROM存储节拍音符数,装载多首乐曲供播放选择,可手动或自动选择歌曲。

三、实验设计思路/原理图主系统由三个模块组成,分别为NoteTabs、tonetaba、SPEAK三个功能模块;如下图所示:下面分别来介绍这三个模块的功能:1) 音符的频率由SPEAK(数控分频器)得到,由其clk端输入一具有较高频率(实验箱上6MHz效果不错)的信号,通过SPEAK分频后由SPEAKER输出,由于直接从数控分频器中出来的输出信号是脉冲极窄的脉冲式信号为有利于驱动扬声器,再进行2分频,然后送到输出端;2) 音符的持续时间根据乐曲的速度即每个音符的节拍数来确定。

tonetaba模块的功能首先是为SPEAK提供决定所发音符的分频预置数,而此数在SPEAK输入口停留的时间即为此音符的节拍值,每一音符的停留时间由音乐节拍和音调发生器模块NoteTabs的clk的输入频率共同决定;3) 音符数据ROM的地址发生器。

在NoteTabs中设置了一个10位二进制计数器,最大计数值为1014,作为音符数据ROM的地址发生器。

这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4 分音符持续时间。

随着NoteTabs 中的计数器按4Hz 的时钟速率做加法计数时,即随地址值递增时,音符数据将从ROM 中通过q 端口输出到tonetaba 模块,乐曲就这样连续地演奏起来了。

原理图如下:四、实验程序1、NoteTabs模块1)可供选择控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count ISPORT(CLK,RST:IN STD_LOGIC;SEC:IN STD_LOGIC_VECTOR(1 DOWNTO 0);--选择控制;CQ: OUT STD_LOGIC_VECTOR(9 DOWNTO 0));--控制输出;END;ARCHITECTURE BEHAV OF count ISBEGINPROCESS(CLK,RST,SEC)VARIABLE CQI:STD_LOGIC_VECTOR(9 DOWNTO 0);BEGINIF CQI=1015 OR RST='1' THEN CQI:=(OTHERS=>'0');--复位或计数溢出;ELSIF CLK'EVENT AND CLK='1' THENCASE SEC ISWHEN "00"=>IF CQI<1014 THEN—SEC为00时正常播放乐曲;CQI:=CQI+1;ELSE CQI:=(OTHERS=>'0');END IF;WHEN "01"=>IF CQI>135 THEN-- SEC为01时播放第一首乐曲;CQI:=(OTHERS=>'0');ELSE CQI:=CQI+1;END IF;WHEN "10"=>IF CQI<135 OR CQI>551 THEN -- SEC为10时播放第二首乐曲;CQI:="0010010000";--从144开始计数;ELSE CQI:=CQI+1;END IF;WHEN "11"=>IF CQI<551 THEN—SEC为11时播放第三首乐曲;CQI:="1000110000";--从560开始计数;ELSE CQI:=CQI+1;END IF;END CASE;END IF;CQ<=CQI;END PROCESS;END BEHAV;2)ROM地址发生器LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.all;ENTITY music ISPORT(address : IN STD_LOGIC_VECTOR (9 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0));END music;ARCHITECTURE SYN OF music ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0);COMPONENT lpm_romGENERIC (intended_device_family : STRING;lpm_address_control : STRING;lpm_file : STRING;lpm_outdata : STRING;lpm_type : STRING;lpm_width : NATURAL;lpm_widthad : NATURAL);PORT (address : IN STD_LOGIC_VECTOR (9 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0));END COMPONENT;BEGINq<= sub_wire0(4 DOWNTO 0);lpm_rom_component : lpm_romGENERIC MAP (intended_device_family => "ACEX1K",lpm_address_control => "REGISTERED",lpm_file => "music.mif",lpm_outdata => "UNREGISTERED",lpm_type => "LPM_ROM",lpm_width => 5,lpm_widthad => 10)PORT MAP (address => address,inclock => inclock,q => sub_wire0);END SYN;3)NoteTab顶层文件LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY work;ENTITY NoteTabs ISport(CLK,RST: IN STD_LOGIC;SEC : IN STD_LOGIC_VECTOR(1 downto 0);q : OUT STD_LOGIC_VECTOR(4 downto 0));END NoteTabs;ARCHITECTURE bdf_type OF NoteTabs IScomponent musicPORT(inclock : IN STD_LOGIC;address : IN STD_LOGIC_VECTOR(9 downto 0);q : OUT STD_LOGIC_VECTOR(4 downto 0));end component;component countPORT(CLK,RST : IN STD_LOGIC;SEC : IN STD_LOGIC_VECTOR(1 downto 0);CQ : OUT STD_LOGIC_VECTOR(9 downto 0));end component;signal SYNTHESIZED_WIRE_0 : STD_LOGIC_VECTOR(9 downto 0);BEGINb2v_inst : musicPORT MAP(inclock => CLK,address => SYNTHESIZED_WIRE_0,q => q);b2v_inst1 : countPORT MAP(CLK => CLK,RST => RST,SEC => SEC,CQ => SYNTHESIZED_WIRE_0);END;2、tonetaba模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tonetaba ISPORT(Index:IN STD_LOGIC_VECTOR(4 DOWNTO 0);--ROM存储器中音符输入;Code:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);——音符HML:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--高低音TONE:OUT STD_LOGIC_VECTOR(14 DOWNTO 0));--分频预置数END;ARCHITECTURE BEHAV OF tonetaba ISBEGINPROCESS(Index)BEGINCASE Index ISWHEN "00000"=>TONE<="000000000000000";Code<="0000";HML<="0000";WHEN "00001"=>TONE<="101100110010101";Code<="0001";HML<="0001";--低1音预置数22933 WHEN "00010"=>TONE<="100111111001111";Code<="0010";HML<="0001";--低2音预置数20431 WHEN "00011"=>TONE<="100011100011010";Code<="0011";HML<="0001";--低3音预置数18202 WHEN "00100"=>TONE<="100001100011101";Code<="0100";HML<="0001";--低4音预置数17181 WHEN "00101"=>TONE<="011101111001011";Code<="0101";HML<="0001";--低5音预置数15307 WHEN "00110"=>TONE<="011010101000100";Code<="0110";HML<="0001";--低6音预置数13636 WHEN "00111"=>TONE<="010111101110101";Code<="0111";HML<="0001";--低7音预置数12149 WHEN "01000"=>TONE<="010110011001011";Code<="0001";HML<="0010";--中1音预置数11467 WHEN "01001"=>TONE<="010011111101000";Code<="0010";HML<="0010";--中2音预置数10216 WHEN "01010"=>TONE<="010001110001010";Code<="0011";HML<="0010";--中3音预置数9098 WHEN "01011"=>TONE<="010000110001110";Code<="0100";HML<="0010";--中4音预置数8590 WHEN "01100"=>TONE<="001110111100101";Code<="0101";HML<="0010";--中5音预置数7653 WHEN "01101"=>TONE<="001101010100010";Code<="0110";HML<="0010";中6音预置数--6818 WHEN "01110"=>TONE<="001011110111010";Code<="0111";HML<="0010";中7音预置数--6074 WHEN "01111"=>TONE<="001011001101011";Code<="0001";HML<="0100";高1音预置数--5739 WHEN "10000"=>TONE<="001001111110100";Code<="0010";HML<="0100";高2音预置数--5108 WHEN OTHERS => NULL;END CASE;END PROCESS;END;3、SPEAK模块LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SPEAK ISPORT(CLK:IN STD_LOGIC;Tone:IN STD_LOGIC_VECTOR(14 DOWNTO 0);--预置分频系数CQ:OUT STD_LOGIC);--音符输出END;ARCHITECTURE BEHAV OF SPEAK ISSIGNAL N:STD_LOGIC;BEGINPROCESS(Tone)VARIABLE Count11:STD_LOGIC_VECTOR(14 DOWNTO 0);--15位可预置计数器;BEGINIF CLK'EVENT AND CLK='1' THENIF Count11=Tone THEN Count11:="000000000000000";N<='1';ELSE Count11:=Count11+1;N<='0';END IF;END IF;END PROCESS;PROCESS(N)VARIABLE COUNT2:STD_LOGIC;BEGINIF N'EVENT AND N='1'THEN COUNT2:=NOT COUNT2;--将输出再2分频,展宽脉冲,使扬声器有足够的功率;IF COUNT2='1'THEN CQ<='1';ELSE CQ<='0';END IF;END IF;END PROCESS;END;五、实验步骤1、建立工作库文件和编辑设计文件(1)在D盘新建一个文件夹用来保存工程文件(2)打开QuartusⅡ8.0软件,选择菜单File->New->VHDL File,点击OK后在打开的界面下输入已经设计好的程序。

《EDA技术及应用》课程设计 基于CPLD的乐曲自动演奏机的设计 完整版实验报告

《EDA技术及应用》课程设计                           基于CPLD的乐曲自动演奏机的设计    完整版实验报告

《EDA技术及应用》课程设计系别2010 级通信工程专业1013073 班题目基于CPLD的乐曲自动演奏机的设计姓名******* 学号**********同组成员*******************指导教师********************2012年6月18日目录1.课程设计要求2.设计方案3.设计原理4.设计步骤5.设计程序6.图形文件7.修改后适应电路板的源程序8.课程设计总结9.参考文献基于CPLD的乐曲自动演奏机的设计基于CPLD的乐曲自动演奏机用途广泛,在日常生活中很常见,特别是在一些儿童玩具和小饰品上经常使用。

1.设计要求(1)可以在电路上能自动演奏《友谊地久天长》乐曲,也可自行选择其他乐曲。

(2)有相应的LED灯指示高低音。

其他要求:(1)晶振为12 MHz(2)采用CPLD 器件,为ALTERA 的EPM7064SL-442.设计原理乐曲演奏的原理是:由于组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲演奏的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音乐播放器课程设计

摘要本课程设计是实现演奏三首乐曲演奏电路的硬件实现。

总共分为五个模块,分别为20MHZ转换1MHZ分频模块,1MHZ转换4HZ分频模块,地址计数器模块,rom 存储器模块,乐音分频模块。

音符的频率由乐音分频模块获得,这是一个数控分频器。

由时钟端输入一具有1MHZ的信号,分频比由预置数值决定,其输出频率将决定每一个音符的音调。

音符的持续时间根据乐曲的速度及每个音符的节拍数来决定。

三首乐曲分别为”两只老虎”,“找朋友”,“世上只有妈妈好”。

关键词:乐曲演奏电路,20MHZ转换1MHZ分频模块,1MHZ转换4HZ分频模块,地址计数器模块,rom存储器模块,乐音分频模块Pick toThis course is designed to play music three play hardware implementation of the circuit. A total is divided into five modules, respectively for 20 MHZ conversion 1 MHZ frequency module, 1 MHZ conversion 4 HZ frequency module, address counter module, ROM memory module, dividing sound module. Note the frequency of the sound frequency module, a CNC divider. By the input, a signal with 1 MHZ clock end, frequency division ratio determined by the preset value, the output frequency will determine the tones of every note. The duration of the notes according to the number of speed and every note of the beat of the music to decide. Three piece respectively "two tigers", "find friends", "only a mother good in the world".Keywords: music playing circuit, 20 MHZ conversion 1 MHZ frequency module, 1 MHZ conversion 4 HZ frequency module, address count前言电子技术飞速发展,传统的电子电路设计已经满足不了人们的要求,可编程逻辑逻辑器件和EDA技术的运用大大地提高了工作效率。

用EDA设计音乐播放器

用EDA设计音乐播放器

乐曲播放器的VHDL设计1.设计背景随着电子技术的飞速发展,微电子技术的进步主要表现在大规模集成电路加工技术即半导体工艺技术的发展上,使得表征半导体的工艺水平的线宽已经达到60nm,并在不断地缩小,表现在硅片单位面积上,集成了更多的晶体管。

集成电路设计正在不断地向超大规模、极低功耗和超高速的方向发展,电子产品的功能越来越强大,体积越来越小,功耗越来越低。

传统电子电路的设计,首先要对系统进行分析,然后按功能对系统进行划分,接下来就要选择特定芯片,焊接成PCB电路板,最后对成品PCB电路板进行调试。

这样的设计没有灵活性可言,搭成的系统需要的芯片种类多且数目大,而且对于电路图的设计和电路板的设计都需要很大的工作量,工作难度也很高。

可编程逻辑器件和EDA 技术的使用使设计方法发生了质的变化。

把以前“电路设计+硬件搭试+调试焊接”转化为“功能设计+软件模拟+仿真下载”。

利用EDA 开发平台,采用可编程逻辑器件CPLD/FPGA 使硬件的功能可通过编程来实现,这种新的基于芯片的设计方法能够使设计者有更多机会充分发挥创造性思维,实现多种复杂数字逻辑系统的功能,将原来由电路板设计完成的工作放到芯片的设计中进行,减少了连线和体积,提高了集成度,降低了干扰,大大减轻了电路设计和PCB 设计的工作量和难度,增强了设计的灵活性,有效地提高了工作效率,增加了系统的可靠性和稳定性,提高了技术指标。

这些技术使得各种电子产品迅速的进入了我们的生活,我们处在一个被电子产品深度包围的时代,在一个普通老百姓的家里,衣食住行,每一个产品的诞生都离不开EDA技术,从彩色电视机,到智能冰箱,到全自动洗衣机,电饭煲,到微波炉,电磁炉,电子琴,再到个人随身用的手机,MP3音乐播放器都需要EDA 技术提供支持。

本次设计在EDA开发工具Quartus II 9.1平台上,应用语言层次化和模块化的设计方法,通过音符编码的设计思想,预先定制乐曲,在此基础上设计了一个乐曲硬件演奏电路,经过对整体进行模块化分析、编程、综合、仿真及最终下载,完整实现简易音乐器的播放功能。

EDA乐曲播放器设计(附源代码)

EDA乐曲播放器设计(附源代码)

《在系统编程技术》项目设计报告课程名称在系统编程技术任课教师设计题目乐曲硬件演奏电路班级09电子信息工程(1)班姓名学号成绩日期2012年5月29日目录1项目要求 (3)1.1功能要求 (3)1.2工作原理 (3)2设计方案 (4)2.1顶层实体描述 (4)2.2模块划分 (5)2.3模块描述 (5)2.3.1音乐谱对应分频预制数查表电路模块:TONETABA (5)2.3.2音乐符数控11分频电路模块:SPEAKERA (6)2.3.3音乐节拍和音调发生器模块:NOTETABS (7)2.4顶层电路图 (8)3方案实现 (8)3.1模块仿真及实现 (8)3.1.1 TONETABA模块 (8)3.1.2 SPEAKERA模块 (9)3.1.3 NOTETABS模块 (9)3.2顶层电路仿真及实现 (10)4硬件测试及说明 (10)5结论 (11)6课程总结 (11)7附录:程序代码 (12)乐曲硬件演奏电路1项目要求1.1功能要求这次我设计的乐曲演奏电路设参考书上的实验,并对其进行功能扩展:1、顺序播放音乐;2、复位初始化;3、选择播放。

1.2工作原理硬件电路的发声原理:声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。

乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。

乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。

而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。

音符频率的获得:多个不同频率的信号可通过对某个基准频率进行分频器获得。

由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。

EDA实验 乐曲播放器设

EDA实验 乐曲播放器设

实验六乐曲播放器设一、实验目的(1)进一步熟练EDA设计流程、系统仿真及硬件测试分析。

(2)学习多层次的设计方法,掌握基本的VHDL语言的设计方法。

(3)学习利用LPM(Library of Parameterized Modules 参数可设置模块库)进行设计。

(4)通过设计乐曲播放增加学生对EDA技术的了解。

二、实验内容与要求使用层次化设计方法,实现乐曲播放器功能,乐曲选取《梁祝》中化蝶部分。

可通过LPM_ROM存储节拍音符数,装载多首乐曲播放器供选择。

三、设计思路/原理图组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素,发音频率值可以查阅相关资料,产生各音符所需的频率可通过分频器实现。

所选乐曲为《梁祝》中化蝶部分及欢乐颂部分,其数字简谱可在相关资料查得。

由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。

若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但会增加分频器的分频级数。

实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。

本文设计的乐曲发生器选取6mhz的基准频率。

所选乐曲最小节拍为1/4拍,将1拍的时间长度定为1s,则只需要再提供一个4Hz 的时钟频率即可产生1/4拍的时长。

演奏的时间控制通过记录来完成,对于占用时间较长的节拍(一定是1/4拍的整数倍),如2/4拍,只需将该音符连续记录2次即可。

设计采用层次化设计方法,其关键是如何获取发音频率值和其持续时间及通过硬件的手段实现乐曲演奏效果,因此要求程序主要有三个模块:1、speakera 模块音符频率产生模块,即数控分频器。

由于直接从数控分频器中出来的输出信号时脉宽极窄的脉冲式信号,为有效的驱动扬声器,需重新加个D触发器以均衡其占空比,但是频率变为1/2。

其分频比由11位的预置数决定,分频预置值由tonetaba模块提供。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 模块中的乐曲播放计数器清零。

相关文档
最新文档