收藏 分享(赏)

EDA乐曲播放器设计.doc

上传人:kpmy5893 文档编号:8248393 上传时间:2019-06-16 格式:DOC 页数:9 大小:353KB
下载 相关 举报
EDA乐曲播放器设计.doc_第1页
第1页 / 共9页
EDA乐曲播放器设计.doc_第2页
第2页 / 共9页
EDA乐曲播放器设计.doc_第3页
第3页 / 共9页
EDA乐曲播放器设计.doc_第4页
第4页 / 共9页
EDA乐曲播放器设计.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、1实验六 乐曲播放器设计一、实验目的1熟悉 EDA 技术开发流程;2学习利用数控分频器设计硬件乐曲演奏电路。二、实验要求使用层次设计方法,实现乐曲播放器的设计。可以通过 LPM_ROM 存储节拍音符数,装载多首乐曲供播放选择,可手动或自动选择歌曲。三、实验设计思路/原理图主系统由三个模块组成,分别为 NoteTabs、tonetaba、SPEAK 三个功能模块;如下图所示:CLKTone14.0 CQIndex4.0 Code3.0HML3.0TONE14.0CLKRSTSEC1.0 q4.0SPEAK:inst1tonetaba:instCODE30HML30SPEAKERCLK6MHZSE

2、C10RSTCLK4HZNoteTabs:inst2下面分别来介绍这三个模块的功能:1) 音符的频率由SPEAK(数控分频器)得到,由其clk端输入一具有较高频率(实验箱上6MHz效果不错)的信号,通过SPEAK分频后由SPEAKER输出,由于直接从数控分频器中出来的输出信号是脉冲极窄的脉冲式信号为有利于驱动扬声器,再进行2分频,然后送到输出端; 2) 音符的持续时间根据乐曲的速度即每个音符的节拍数来确定。tonetaba模块的功能首先是为SPEAK提供决定所发音符的分频预置数,而此数在SPEAK输入口停留的时间即为此音符的节拍值,每一音符的停留时间由音乐节拍和音调发生器模块NoteTabs的

3、clk的输入频率共同决定; 3) 音符数据ROM的地址发生器。 在NoteTabs中设置了一个10位二进制计数器,最大计数值为1014,作为音符数据ROM的地址发生器。这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4 分音符持续时间。随着NoteTabs 中的计数器按4Hz 的时钟速率做加法计数时,即随地址值递增时,音符数据将从ROM 中通过q 端口输出到tonetaba 模块,乐曲就这样连续地演奏起来了。原理图如下:VCCRST INPUTVCCSEC10 INPUTVCCCLK4HZ INPUTVCCCLK6MHZ INPUTCODE3

4、0OUTPUTSPEAKEROUTPUTHML30OUTPUTIndex40 Code30HML30TONE140tonetabainstCLKTone140CQSPEAKinst1RSTSEC10CLKq40NoteTabsinst2四、实验程序1、NoteTabs 模块1)可供选择控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;2USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count ISPORT(CLK,RST:IN STD_LOGIC;SEC:IN STD_LOGIC_VECTOR(1 DOWNTO 0);-选

5、择控制;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 CLKEVENT AND CLK=1 THENCASE SEC ISWHEN “00“=IF CQI0);END IF;WHEN “01“=IF CQI135 THEN- SEC

6、为 01 时播放第一首乐曲;CQI:=(OTHERS=0);ELSE CQI:=CQI+1;END IF;WHEN “10“=IF CQI551 THEN - SEC 为 10 时播放第二首乐曲;CQI:=“0010010000“;-从 144 开始计数;ELSE CQI:=CQI+1;END IF;WHEN “11“=IF CQI “ACEX1K“,lpm_address_control = “REGISTERED“,lpm_file = “music.mif“,lpm_outdata = “UNREGISTERED“,lpm_type = “LPM_ROM“,lpm_width = 5,l

7、pm_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 IS port(CLK,RST: IN STD_LOGIC;SEC : IN STD_LOGIC_VECTOR(1 downto 0);q : OUT STD_LOGIC_VECTOR(4 downto 0);END NoteTabs;ARCHITECTURE

8、 bdf_type OF NoteTabs IS component musicPORT(inclock : IN STD_LOGIC;address : IN STD_LOGIC_VECTOR(9 downto 0);q : OUT STD_LOGIC_VECTOR(4 downto 0);end component;4component countPORT(CLK,RST : IN STD_LOGIC;SEC : IN STD_LOGIC_VECTOR(1 downto 0);CQ : OUT STD_LOGIC_VECTOR(9 downto 0);end component;signa

9、l SYNTHESIZED_WIRE_0 : STD_LOGIC_VECTOR(9 downto 0);BEGIN b2v_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

10、: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“=TONETONETONETONETONETONETONETONETONETONE

11、TONETONETONETONETONETONETONE NULL;5END 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 ISSIGNA

12、L N:STD_LOGIC;BEGINPROCESS(Tone)VARIABLE Count11:STD_LOGIC_VECTOR(14 DOWNTO 0);-15 位可预置计数器;BEGINIF CLKEVENT AND CLK=1 THENIF Count11=Tone THEN Count11:=“000000000000000“;NNew-VHDL File,点击 OK 后在打开的界面下输入已经设计好的程序。(3)输入完程序后,保存文件选择菜单 File-Save as,将文件保存到工程文件夹中,文件名不能含有中文字符,最好与程序实体名一样。建立.mif 文件选择菜单 File-New

13、-Memory Files- Memory 6Initialization File,选择 number of words 为 1024,word size 为 8 点击 OK 完成。将乐谱音符(见附录)输入到.mif 文件中,输入完后点击保存为 music.mif。(4)定制 LPM_ROM 文件;选择菜单 File-New-Block Diagram/Schematic File 点击 OK;出现原理图绘图框式双击出现 symbol 对话框,在 name 栏中输入 lpm_rom 点击 OK 会出现 lpm_rom 对话框,选择文本方式为 VHDL 方式;点击 next 选择 5bits、

14、1024words ,点击 next,在 file name 栏中选择已经编好的 music.mif 文件,点击 next 直至 finish 完成设计。(5)完成工程项目建立后选择 processing-start compilation 或选择 按钮开始全程编译,如果编译过程中出现错误或警告提示,则双击错误或警告提示就可以找到该错误或警告在文件的位置(6)在完成设计输入和综合编译以后,可以通过时序仿真来检查设计是否符合要求,这里我们可以通过建立波形文件(.vmf) 。在选择 File-New-Vetor Waveform File 项后选择 OK。(7)设计Edit栏选择End Time

15、设计时间为50 us ,在View-ulitity windows中选择Node Finder或按Alt+1, 然后将所有的输入输出拖到波形文件中,设计好输入时序和输出方式后保存文件。选择processing栏中的Start simulation或选择 按钮开始波形仿真。(8)仿真成功后得到了预期的设计效果后,将引脚锁定。方法如下:选择 assignment 中的 pins,将 To 栏的信号锁定到相应的 Location 引脚列中。引脚号对应关系可以从实验手册中查找,将CLK4HZ 锁定到 79 引脚,将 CLK6MHZ 锁定到 75 引脚, RST 锁定到 53 引脚,SEC1锁定到 54

16、引脚,将 SEC0锁定到 55 引脚,SPEAKER 锁定到 86 引脚,CODE3 、CODE2、CODE1、CODE0分别锁定到 175、174 、173、172 引脚,HML3、HML2、HML1、HML0 分别锁定到 180、179、177、176 引脚;引脚锁定图如下图所示六、仿真波形分析1、NoteTabs 仿真波形文件2、tonetabs 仿真波形文件复位乐曲选择控制SEC10为0 顺序播放ROM地址音符输出低音 3 音符占 4 拍ROM 中存放的音符乐谱上的音符 低音 中音 高音73、SPEAK 仿真波形文件4、顶层文件 songer 的仿真波形文件七、硬件测试结果/实验结果引

17、脚锁定完成后,开始全程编译,编译完成后,开始下载。将 CLK1 换上 6MHZ 的频率(实际12MHZ 的效果更好)CLK3 换上 4HZ 的频率;使电平 1 键(RST 键)为低电平,电平 2(SEC1)和电平 3(SEC0)键为低电平,让乐曲按正常顺序播放,可以看到数码管上显示高低音和音符;当电平 1 为高电平时乐曲重新开始播放,当电平 2 为低电平和电平 3 为高电平则播放第一首乐曲梁祝;当电平 2 为低高电平和电平 3 为低电平则播放第二首乐曲甜蜜蜜;当电平 2 为高电平和电平 3 为高电平时则播放第三首歌曲有谁共鸣;数码管上显示乐曲的音符变化。实验结果与预期结果相符,因此实验成功。八、实验心得体会通过本次实验,我明白了乐曲的播放的原理,学会了使用 ROM 存储和查找数据;虽然中途碰到一些小问题,例如如何实现乐曲的循环和选择,通过几次调试问题都解决了。总之,能听到自己弄出来的乐曲,心里感到很高兴。附录高、中、低音分频预置数6MHZ脉冲分频系数分频输出高音 2 的分频系数音频输出4HZ脉冲6MHZ脉冲89

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报