




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、兰花草乐曲硬件演奏电路设计专业:电子信息工程学号:2010012145姓名:程营刖s乐曲演奏广泛应用于口动答录装置,手机铃声,集团电话,及智能仪器 仪表设备。实现方法有许多种,在众多的实验方法屮,以纯硕件完成乐曲演 奏,随着fpga集成度的提高,价格下降,eda设计工具更新换代,功能 日益普及与流行,使这种方案的应用越来越多。本文分析了乐曲演奏设计中音符,频率,节拍与编码的相互关系,并在 eda开发工具max-plus ii平台上,采用vhdl语言及原理图的设计方法, 实现基于fpga片上系统动态显示可选择多首乐谱的乐曲演奏器的设计,使 怎曲演奏数字电路的设计得到了更好的优化,提高了设计得灵活
2、性。目录目录1题目分析1功能要求11.2性能指标22.设计方案22.1顶层实体描述32.2模块划分32.3模块描述2.3.1 speakera模块42.3.2 tonetaba模块52.3.3 notetabs 模块82.4顶层电路图3硬件测试及说明84 课程总结5.参考文献1.题目分析1.1功能要求(1) 播放歌曲(2) 简谱码输出显示在数码管显示(3) 通过led灯显示音阶1.2性能指标(1) 乐曲硬件演奏电路的基木原理乐曲都是由一连串的音符组成,每一音符对应着一个确定的频率,按照乐曲 的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符 的音调。我们知道,组成乐曲的每个
3、音符的发音频率值及其持续的时间是乐曲能 连续演奏所需的两个基木耍素,所以,掌握好一首歌曲的节奏,就能完整地演奏 出來。(2)咅符频率和乐曲节奏多个不同频率的信号可通过对某个基准频率进行分频器获得,木设计屮选取 750khz的基准频率,由于elk端输入的是较高频率12mh7信号,可以对其进行 16分频。计数吋钟信号作为输出咅符快慢的控制信号,时钟快时输出节拍速度 就快,演奏的速度也就快,吋钟慢吋输出节扌n的速度就慢,演奏的速度自然降低。简谱音符和频率关系如下表所示:表1各音阶频率对应的分频值音名分频 系数m音名分频 系数m音名分频 系数m低音11274773中音16371410高音1319172
4、8低音21135912中音25871480高音22771770低音310111036中音35051542高音32481799低咅49701077中咅44681579高咅42331814低音59501197中咅54251622高咅52081839低音67571290中音63791668高音61851862低音76751372中音73301717高音716518822.设计方案口顶向下的设计框图乐曲硬件申路设计2.1顶层实体描述当一个4hz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系 数模块,分频系数模块输出此音符相应的分频系数,将分频系数送给数控分频器 模块,当12mhz的时钟脉冲来
5、到时,数控分频器就根据分频系数输出相应的频率 (即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连 续的4hz的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了 分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发岀音符数据所 对应的声音来。曲子也就流畅的播放岀来了,当乐曲一遍演奏完成后,乐曲发生 器能口动从头开始循环演奏。顶层设计程序:library ieee;use ieee.std_logic_1164.all;entity songer isport(clk12mhz:in std.logic;clkshz :in std_logic;codei :
6、 out std_logic_vector (3 downto 0)high 1: out std_logicspkout: out std_logic);endarchitecture 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 (
7、3 downto 0);high: out std.logic;tone: out std_logic_vector (10 downto 0);end component;component speakeraport ( elk : 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)
8、;beginul: notetabs port map (clk=>clk8h乙 tonelndex=> toneindex);u2: tonetaba port map (index => toneindex,tone=>tone,code=>code 1 ,high=>high 1);u3: speakera port map (clk=>clk12hz, tone=> tone, spks=>spkout); end;2.2模块划分主系统由三个模块组成,分别为speakera模块、tonetaba模块、notetabs 模块。(1)
9、speakera是数控分频模块;(2) tonetaba是分频预置数查找表电路模块;(3) notetabs音调发生器模块。2.3模块描述2.3.1 speakera 模块spcakcraspkelktone10:0speakera模块实体图音符的频率可以由此模块获得,这是一个数控分频器,由其elk端输入一具有较高频率的信号,通过speaker分频后sprout输出,出于直接从数控分频 器中出来的输出信号是脉冲极窄的脉冲式信号,为了有利丁驱动扬声器,需另加 一个d触发器以均衡其占空比,但这时的频率将是原來的1/2。speakera对elk 输入信号的分频比由11位预置数tone10. 0决定。
10、sprout的输出频率将决定每一咅符的咅调,这样,分频计数器的预置值tone 10. 0与spkout的输出频 率就有了对应关系。例如在tonetaba模块中若取tone10. 0=1036,将发出音 符为“3”音的信号频率。程序如下library ieee;library ieee;use eee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speakera isport ( elk : in std_logic;tone : in std_logic_vector (10 downto 0);spks : out st
11、d_logic );end;architecture one of speakera issignal preclk, fullspks : std.logic;begindivideclk : process(clk)variable count4: std_logic_vector (3 downto 0);beginpreclk<=,0,ifcount4>ll then preclk v二t; count4:= ”0000”;els if clk'event and elk = 4' then count4:=count4+l;end if;end proce
12、ss;genspks : process(preclk, tone)- 11 位可预置计数器variable count 11 : std_logic_vector (10 downto 0); beginif preclkvent and preclk 二 t thenif count 11 = 16#7ff#then count 11 := tone ; fullspks v= t;else count 11 := count! 1 + 1; fullspks <= 'o'end if;end if;end process;delayspks : process(fu
13、llspks)将输出再2分频,展宽脉冲,使扬声器有足够功率发音variable count2 : std_logic;beginif fullspks'event and fullspks 二 t then count2 := not count2;if count2 = t then spks v二 t;else spks v= o; end if;end if;end process;end;2.3.2 tonetaba 模块tonetabaindex3:0highcode3:0tone10:0jtonetaba模块实体图音符的持续吋间需根据乐曲的速度及每个音符的节拍数来确定,to
14、netaba 的功能首先是为speakera提供决定所发咅符的分频预置数,而此数在speakera 输入口停留的时间即为此音符的节拍值。tonetaba模块是乐曲简谱码对应的分 频预置数查找表电路,其中设置了乐曲全部音符对应的分频预置数,每一个音符 的停留吋间由音乐节拍和音调发生器模块notetabs的elk输入频率决定。分频 预置数的输出对应4位输入值index 3. 0确定,而当乐曲全部分频预置数不止 16个时,可以用5位输入值index 4. 0。输向tonetaba中的index 3. 0的 值tonelndex3. . 0的输出值与持续的吋间由notetabs模块觉定。程序如下lib
15、rary ieee;use ieee.std_logic_l 164.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 iswhen n0000"=&
16、gt; tone<=n 11111111111 ”;code <=,()()()()n; high <= 'o' when ”0011 ”=> tone<=n 10000001100n;code <=n0011h; high <= 'o'when ”0101 ”=> tone<=h 10010101101u;code <="0101”; high v二'o'when n0110h=> tone<=,r 1010000101 ou;code <=n0110n;
17、high <= 'o'when "ollim=> tone<=n 10101011100n;code v=”0111”; high v二'o'when n 1000"=> tone<=n 10110000010h;code <=h0001n; high v= t; when n1001n=> tone<=" 10111001000”;code <=n0001 ”; high v= t;when t 01 on=> tone<=" 11000000ii opc
18、ode <=n0011" high v二 t;when m101 ln=>tone<=,l 100010101 ln;code <=n0100h; high v= t;when n 1100n=> tone<=" 1100101011 on;code v二”0101”; high v= t;when n 110ln=> tone<=n 11010000100n;code <=n0110n; high v二 t; when others=> null;end case;end process;end;2.3.3 no
19、tetabs 模块notetcibstonclndcx elk(3:0)notetabs模块实体图在notetabs中设置了一个8位二进制计数器,作为音符数据rom的地址发 生器,计数最大值为138,如果乐曲比较长的话可以用9位,此时计数最大值为 512o这个计数器的计数频率选为4hz,即每一计数值的停留时间为0. 25秒,恰 为当全音符设为1秒时,四四拍的4分音符持续时间。随着notetabs中的计数 器按4iiz的时钟速率作加法计数时,即随地址值递增时,咅符数据rom中的咅符 数据将从rom中通过toneindex3. 0端口输向tonetaba模块,乐曲就开始自 然地演奏起来。程序如下l
20、ibrary 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 musicport(address:in std_logic_vector(7 downto 0) inclock: in std.logic;q: out std_logic_vector(3
21、downto 0);end component;signal counter: std_logic_vector(7 downto 0)begincnt8:process(clk,counter)beginif counters 128 then counter v= ”00000000”;els if (clk'event and clk=t) then counter <= counter +1; end if;end process;ul:music port map(address=>counter,q=>toneindex,inclock=>clk);
22、 end;在notetabs模块中定制rom元件,首先建立 mif文件输入音乐谱,再利用 megawizard plug-in manager定制rom宏功能块,最后加载于rom中,步骤为:(1) 进入 quartustt,选菜单 tool->nfegawi zard plug-tn manager,选择 “creal a new”,然后按"next”键,选择lpm-rom;最后在browse下的栏 屮键入路径与输出文件名。(2) 单击“next”键,选择rom数据位宽度为4,地址线宽为256,即设置 此rom能存储4位二进制数据共256个。(3) 通过“browse”钮,找到rom中的加载文件路径和文件名:注意rom 元件的inclock是地址锁存时钟。(4) 打开已定制的rom文件,将它设置为工程,并确定目标器件,进行测试 仿真波形,按照定制步骤对音符数据文件进行rom定制。 定制的宏模块如下图所示:01234567066101010101010810101010101099168889887724666600003213131313131313134013131313131312124810101212121211115610101010000064101013131
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际物流师与绿色经济的关系试题及答案
- 准备策略:2024年CPMM试题及答案
- 2025年公共自行车锁车器设备项目建议书
- 人体免疫机制理解试题及答案
- 2024年国际物流师考试的多样性试题及答案
- 2024年CPMM职业技能需求的试题及答案
- 备考心态与策略CPMM试题及答案
- 2024国际物流师的考试必读内容与试题及答案
- 广西壮族自治区贵港市覃塘高级中学2025年高三第二次诊断性检测化学试卷含解析
- 确定细胞型别的实验方法试题及答案
- 2023年社区考试话题社区工作者应具备的基本素质
- 安徽新芜经济开发区管委会新芜电镀产业园一期原废水处理站改造项目环境影响报告书
- 辣条调查报告
- 某kV送电线路架线工程监理细则
- 茶馆剧本(三幕话剧)
- 七个时代八个约
- 民营医院开发基本知识
- 2023年江苏省人民医院招聘医学类专业人才考试历年高频考点试题含答案解析
- WS/T 406-2012临床血液学检验常规项目分析质量要求
- GB/T 585-1999船用法兰铸钢截止止回阀
- GB/T 38232-2019工程用钢丝绳网
评论
0/150
提交评论