ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:310.99KB ,
资源ID:12247625      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12247625.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(乐曲硬件演奏电路设计.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

乐曲硬件演奏电路设计.docx

1、乐曲硬件演奏电路设计D技术与VHDL语言课程大作业设计题目:乐曲硬件演奏电路设计 姓名: 班级: 学号: 目录一. 设计背景1二. 设计原理11.乐曲硬件演奏电路基本原理12 .计时模块系统模块组成.23.设计框图及仪器. 3三. 设计内容31 . 分频器(div)42 . 计数器(notetabs)53 . 选择模块(choice)54. 数据翻译模块(tontaba)75. 译码器模块(deled)86. 数控分频器模块(speakera)97. 乐谱数据(ROM)10四. 硬件连线12五. 源程序总体描述13六. 总结14七. 参考文献14一、 设计背景乐曲演奏广泛用于自动答录装置、手机

2、铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,在众多的实现方法中,以纯硬件完成乐曲演奏,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数化库单元LPM器件。通过引入支持LPM的EDA软件工具,可以设计出结构独立而且硅片的使用效率非常高的产品。 本文分析了乐曲演奏设计中音符、频率、节拍与编码的相互关系,并在EDA开

3、发工具MAX-plus II平台上,采用VHDL语言及原理图的设计方法,实现了基于FPGA片上系统动态显示可选择多首乐曲的乐曲演奏器的设计,使乐曲演奏数字电路的设计得到了更好的优化,提高了设计的灵活性。二、 实验原理1、音乐硬件演奏电路基本原理 1) 硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上

4、连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。2) 音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本设计中选取1MHz的基准频率。数控分频器采用1

5、2位二进制计数器,乐曲中的休止符,只要将分频系数设为0,即初始值=4095,此时扬声器不会发声。根据分频系数,可计算数控分频器得到的初始值。(语言已经无法描述其中的原理了,程序可以说明此问题,关于初始值的解释,请看下文给出的程序)初始值的计算公式如下:由于所设计的数控分频计采用12MHZ作为时钟源,并通过一次12分频给出频率为1MHZ的脉冲溢出信号,再对该1MHZ的溢出信号进行12位2进制码的带预置数进行计数,并给出一个频率随预置数变化的脉冲信号。由于该脉冲信号不具有驱动蜂鸣器的能力,故对此脉冲信号进行2分频以推动蜂鸣器发声,故最终输出信号的频率与预置数的关系如下:其中为音阶对应的频率。 表1

6、 简谱中的音名与频率的关系音名频率/Hz音名频率/Hz音名频率/Hz低音1261.63中音1532.25高音11046.50低音2293.67中音2587.33高音21174.66低音3329.63中音3659.25高音31318.51低音4349.23中音4698.46高音41396.92低音5391.99中音5783.99高音51567.98低音6440中音6880高音61760低音7493.88中音7987.76高音71975.52表2 各音阶频率对应的分频值音名分频系数初始值音名分频系数初始值音名分频系数初始值低音17644547中音138224369高音119116280低音2681

7、01381中音234054786高音212706921低音360672124中音330345157高音315176674低音457272464中音428645327高音414326759低音551023089中音525515640高音512566935低音645453646中音622735918高音611377054低音740504141中音720256166高音7101371783) 乐曲节奏的控制 一般乐曲最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要输出4Hz的1/4拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。

8、计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低,由于最后的蜂鸣器前需加一个二分频的程序,因此计数器的时钟信号应为4Hz的2倍,即8Hz。4) 乐谱的发生本设计将乐谱中的音符数据存储在LPM-ROM中,若某音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,该音符就要在LPM-ROM中连续的四个地址上都存储。当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。5)选择模块 选择模块将用一个4位数的控制信号控制乐谱模块数据的选择性,用vhdl语言描述比较简单,不在此详述。6)译码器等其他模块译码器等

9、模块在以前做实验的时候做过,且原理比较简单易懂,不再这里阐述。2、模块组成7个:1)分频器div的功能是将芯片上提供的50MHz的时钟分频为12MHz和8Hz的时钟,分别供计数器与分频驱动器(数控分频器)使用。2)计数器NOTETABS完成计数功能,每个时钟沿加一。3)选择器choice完成选择歌曲的功能。4)数据翻译模块tontaba将选择器所选择的歌曲rom里的地址的数据翻译成分频驱动器(数控分频器)分频所需的控制数据、3个led灯数据(高中低音)、以及译码器所需的数据。5)译码器deled将乐谱数据在led数码管上显示。6)数控分频器speakera,完成分频的功能,并驱动蜂鸣器。7)四

10、个音乐模块ROM。根据上一模块计数器所计的数读取相应地址里的数据传递给下一模块。3、设计框图及仪器1)设计框图2)仪器:PC机一台;开发软件:Quartus II;实验设备:GW48-CK EDA实验开发系统;选用芯片:ACEX1K系列EP1K30TC144-3三、实验内容与步骤1.分频器(div)将芯片上提供的50MHz的时钟分频为12MHz和8Hz的时钟,分别供计数器与分频驱动器(数控分频器)使用。(1)模块图形:(2)程序如下:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY d

11、iv IS PORT( clk :IN STD_LOGIC; CLK12MHz,CLK8Hz: OUT std_logic);END div;ARCHITECTURE one of div isbeginnana:process(clk)variable cnt:integer range 0 to 2;variable tmp:std_logic;beginif(clkevent and clk=1)thenif cnt=1 thencnt:=0;tmp:=not tmp;elsecnt:=cnt+1;end if;end if;CLK12MHz=3124999 thencnt:=0;tmp

12、:=not tmp;elsecnt:=cnt+1;end if;end if;CLK8Hz=tmp;end process nbnb;end one;(3)仿真波形:2.计数器(notetabs)(1)模块图像:(2)程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NOTETABS IS PORT(CLK: IN STD_LOGIC; COUNTER1 :inout STD_LOGIC_vector(7 downto 0);END NOTETABS;ARCHITECTURE

13、 a OF NOTeTABs ISBEGIN P1:PROCESS (CLK,COUNTER1) BEGIN IF COUNTER1=183 THEN COUNTER1 = 00000000; ELSIF CLKEVENT AND CLK=1 THEN COUNTER1 b=0001; INDEX b=0010; INDEX b=0011; INDEX b=0100; INDEX null; END CASE; END PROCESS;END a;(3)仿真波形:4.数据翻译模块(tontaba):(1)模块图像:(2)程序如下:library ieee;use ieee.std_logic_

14、1164.all;entity tonetaba is port(index:in std_logic_vector (4 downto 0); code:out std_logic_vector(3 downto 0); high0:out std_logic_vector(2 downto 0); tone:out std_logic_vector(11 downto 0); end;architecture one of tonetaba isbeginsearch:process(index)begin case index iswhen00000=tone=111111111111;

15、code=0000;high0tone=011100011111;code=0001;high0tone=100000001111;code=0010;high0tone=100011110010;code=0011;high0tone=100101010101;code=0100;high0tone=101000010000;code=0101;high0tone=101010111000;code=0110;high0tone=101101001011;code=0111;high0tone=101110001111;code=0001;high0tone=110000001001;cod

16、e=0010;high0tone=110001111001;code=0011;high0tone=110010101100;code=0100;high0tone=110100001001;code=0101;high0tone=110101011100;code=0110;high0tone=110110100101;code=0111;high0tone=110111000111;code=0001;high0tone=111000000101;code=0010;high0tone=111000111100;code=0011;high0tone=111001010110;code=0

17、100;high0tone=111010000100;code=0101;high0tone=111010101101;code=0110;high0tone=111011010010;code=0111;high0null; end case; end process; end;(3)仿真波形:5.译码器模块(deled)程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity deled is port( num:in s

18、td_logic_vector(3 downto 0); led:out std_logic_vector(6 downto 0); end deled;architecture fun of deled is -signal count:std_logic_vector(2 downto 0);begin led7 THEN PreCLK = not PreCLK; Count8 := 0000; else Count8:=Count8+1;end if;end if;END PROCESS;GenSpkS : PROCESS(PreCLK, Tone)- 11位可预置计数器 VARIABL

19、E Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0); BEGIN IF PreCLKEVENT AND PreCLK = 1 THEN IF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS = 1; ELSE Count11 := Count11 + 1; FullSpkS = 0; END IF; END IF;END PROCESS; DelaySpkS : PROCESS(FullSpkS)-将输出再2分频,展宽脉冲,使扬声器有足够功率发音 VARIABLE Count2 : STD_LOGIC; BE

20、GIN IF FullSpkSEVENT AND FullSpkS = 1 THEN Count2 := NOT Count2; IF Count2 = 1 THEN SpkS = 1; ELSE SpkS = 0; END IF; END IF;END PROCESS;END;(3)仿真波形:7.乐谱数据(ROM)(1)菊花台程序:WIDTH=5;DEPTH=256;ADDRESS_RADIX=UNS;DATA_RADIX=UNS;CONTENT BEGIN 0.2 : 10; 3 : 9; 4.5 : 10; 6.7 : 0; 8 : 10; 9 : 12; 10 : 10; 11 : 9; 12.15 : 10; 16.18 : 8; 19 : 9; 20 : 10; 21 : 12; 22.23 : 10; 24.26 : 9; 27

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1