fpga课设——蜂鸣器音乐演奏.doc

上传人:本田雅阁 文档编号:2509490 上传时间:2019-04-04 格式:DOC 页数:14 大小:197.52KB
返回 下载 相关 举报
fpga课设——蜂鸣器音乐演奏.doc_第1页
第1页 / 共14页
fpga课设——蜂鸣器音乐演奏.doc_第2页
第2页 / 共14页
fpga课设——蜂鸣器音乐演奏.doc_第3页
第3页 / 共14页
fpga课设——蜂鸣器音乐演奏.doc_第4页
第4页 / 共14页
fpga课设——蜂鸣器音乐演奏.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《fpga课设——蜂鸣器音乐演奏.doc》由会员分享,可在线阅读,更多相关《fpga课设——蜂鸣器音乐演奏.doc(14页珍藏版)》请在三一文库上搜索。

1、FPGA实 验 报 告实验名称:蜂鸣器音乐演奏实验日期:姓 名:学 号:2012年数字信号处理实验报告一、实验目的1.熟悉QuartusII 软件的使用。2.熟悉EDA实验开发系统的基本使用。3.学习VHDL基本单元电路的设计应用。进一步掌握EDA的多层次设计方法。4.学习音乐发生器的设计。除了报警,蜂鸣器还可以用来奏乐。让它发出悦耳动听的声音,加深理解蜂鸣器的控制电路原理。二设计要求1.自动循环播放歌曲义勇军进行曲。2.由数码管分别显示高、中、低音的音符。三实验原理1、乐曲硬件电路产生音乐是和音乐频率和音乐的持续时间有关;音符的持续时间需根据乐曲的速度和每个音符的节拍数来确定。其简谱中音符和

2、频率的关系如下:2、该演奏电路演奏的乐曲是友义勇军进行曲,其最小的节拍为1拍,将1拍的时长定位0.2S,则只需要再提供一个5hz的时钟频率即可产生1拍的时长,演奏的时间控制通过ROM查表的方式来完成。对于占用时间较长的节拍,(一定是节拍的整数倍),如全音符为4拍,2/4音符为2拍,1/4音符为1拍。3、乐曲硬件演奏电路系统主要有音调分频器和乐曲存储模块两个部分组成,其余还有音乐节拍发生器等等。音调分频器对1mhz(由基准频率产生)的频率进行分频,得到与各个音节对应的频率输出。乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中存放一个乐曲曲谱真值表(实验中用的ROM存储),由一个计数器来控制此

3、真值表的输出,而由计数器的技术时钟信号作为乐曲节拍控制信号。4、其中5hz和1mhz的频率由基准频率分频产生,分别作用给每个模块。四、方案设计a. 设计分析:实验中采用层次化设计思路,音乐发生器的设计包括四个模块:时钟分频模块fdiv、自动演奏模块autoplay、查表及显示模块table、音调分频模块fenpin。分好层次之后,编写每个模块的程序。时钟分频模块fdiv通过基准时钟频率clk(50mhz)产生两个时钟信号clk1(1mhz),clk2(5hz)。自动演奏模块autoplay接收clk1的时钟信号,输出index_auto。查表及显示模块table利用index_auto查找并输

4、出分频系数tone。同时将音调对应的给三个数码管,分别显示高中低音符。音调分频模块fenpin接收tabled输出的分频系数 tone,并据此分频,将对应频率的信号buzz输出给扬声器供其发声。b流程图: 数码管显示 FdivAutoplaytablefenpinclk 输出buzz五实验过程1. 时钟分频模块fdiv通过基准时钟频率clk(50mhz)产生两个时钟信号clk1(1mhz),clk2(5hz)。程序见附录1:其仿真结果如下:2.自动演奏autoplays模块 这个模块用FPGA的片内ROM存放乐曲的简谱真值表,由一个二进制计数器为乐曲数据存储ROM的地址发生器随着autopla

5、y中计数器按clk2时钟频率做加法计数时,乐曲数据存储器ROM中的音符数据,将从ROM中的输出口输向音符查表模块table,所存储的乐曲就开始连续自然地演奏起来。ROM的定制过程,利用MegawizardPlug-In Manager定制音符数据存储器music,其中music_rom的程序见附录二。在定制ROM的过程中,由于需要存入296个音符数据,选择ROM的数据位宽为8,地址为64(共计512个字),ROM的类型选择为Auto。根据义勇军进行曲的音乐简谱,以及简谱中的低、中、高和额节拍与发生频率的关系等等,化成个音符数字有296个,存入ROM中。在数据文件编辑窗中,在mif格式表格中填入

6、义勇军进行曲的296个音符数据,并以十进制填入,最后保存数据文件名为music.mif,存入原路径中。其中17表示低音,814表示中音,1521表示高音。 Autoplay的程序见目录三。在源程序中index_auto是音乐节拍发生器输出地音符数据;clk2是计数时钟输入端,该信号作为音符的快慢信号,频率越高,时钟的输出节拍速度就越快,演奏的速度也越快。该模块仿真结果如下:3、查表及显示table模块利用index_auto查找并输出分频系数tone。同时将音调对应的给三个数码管,分别显示高中低音符。其程序见目录四。在源程序中,tone是音调分频模块提供音符频率的分频系数,此处有一个位选信号c

7、ome和段选信号seg可以通过数码管来显示乐曲演奏时对应的高中低音符。在此模块中假设index_auto音符为15,其仿真结果如下:4、音调分频模块(speakera)设计分频器对FPGA的clk1进行分频,得到与各个音阶对应的频率输出,里面包含一个计数器,当计数器满时,产生一个进位信号,该信号就是用作发音的频率信号,在计数器端的预置值端给定不同的初值时,产生不同频率的信号。其程序见附录五。假设tone为252,其仿真结果如下:5、根据层次化设计要求把各个部分根据实验设计流程,设计成顶层文件。其程序见附录六。6、经编译无错后,绑定引脚,下载测试。其管脚分配如下: 六、实验结果及分析下载测试,下

8、载完毕,听到完整的一段义勇军进行曲音乐,并且音调很好,数码管显示没有错误。频率折算中,由于频率计数不能是小数,采用了四舍五入的方法,所以得到的频率并不是十分精确的,但是不会影响结果。附录附录一library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fdiv isport(clk:in std_logic;clk1:out std_logic;clk2:out std_logic);-50MHzend fdiv;architecture

9、 behave of fdiv issignaltemp: std_logic;-f=1/(2*(cnt+1)*f0signaltemp1: std_logic;-f=1/(2*(cnt+1)*f0signal cnt1: integer range 0 to 25;-1mhz signal cnt2: integer range 0 to 5000000;-5hz beginprocess(clk)-1mhzbeginif (clkevent and clk= 1 )then if (cnt1 = 24 )thencnt1 = 0;temp = not temp;elsecnt1 = cnt

10、1+1;end if;end if;end process ;clk1 = temp;process(clk)-5hzbeginif (clkevent and clk= 1 )then if (cnt2 = 4999999)thencnt2 = 0;temp1 = not temp1;elsecnt2= cnt2+1;end if;end if;end process ;clk2 = temp1;end;附录二LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.altera_mf_component

11、s.all;ENTITY music_rom isPORT(address: IN STD_LOGIC_VECTOR (8 DOWNTO 0);inclock: IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0);END music_rom;ARCHITECTURE SYN OF music_rom ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (4 DOWNTO 0);COMPONENT altsyncramGENERIC (intended_device_family: STRING;width_a: NATU

12、RAL;widthad_a: NATURAL;numwords_a: NATURAL;operation_mode: STRING;outdata_reg_a: STRING;address_aclr_a: STRING;outdata_aclr_a: STRING;width_byteena_a: NATURAL;init_file: STRING;lpm_hint: STRING;lpm_type: STRING);PORT (clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (8 DOWNTO 0);q_a: OUT STD_LOG

13、IC_VECTOR (4 DOWNTO 0);END COMPONENT;BEGINq Cyclone,width_a = 8,widthad_a = 9,numwords_a = 512,operation_mode = ROM,outdata_reg_a = UNREGISTERED,address_aclr_a = NONE,outdata_aclr_a = NONE,width_byteena_a = 1,init_file = music.mif,lpm_hint = ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=ROM,lpm_type = altsyn

14、cram)PORT MAP (clock0 = inclock,address_a = address,q_a = sub_wire0);END ;附录三LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY autoplay ISPORT(clk2:IN STD_LOGIC; index_auto:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);END autoplay;ARCHITECTURE behav OF autoplay IScomponent music_ro

15、mPORT(address: IN STD_LOGIC_VECTOR (8 DOWNTO 0);inclock: IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0);END component;SIGNAL CQI:STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINPROCESS(clk2)BEGINIF clk2EVENT AND clk2=1 THEN CQICQI,q=index_auto,inclock=clk2);END ;附录四:library ieee;use ieee.std_logic_1164.all;u

16、se ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity table isport(index_auto:in STD_LOGIC_VECTOR (4 DOWNTO 0); come:out std_logic_vector(7 downto 0);seg:out std_logic_vector(7 downto 0);tone:out integer range 0 to 1910);end;architecture search of table isbegin process(index_auto)beginc

17、ase index_auto iswhen 00001= tone=1910;come=11111110;seg tone=1701;come=11111110;seg tone=1516;come=11111110;seg tone=1431;come=11111110;seg tone=1275;come=11111110;seg tone=1135;come=11111110;seg tone=1011;come=11111110;seg tone=954;come=11111101;seg tone=850;come=11111101;seg tone=757;come=1111110

18、1;seg tone=715;come=11111101;seg tone=637;come=11111101;seg tone=567;come=11111101;seg tone=505;come=11111101;seg tone=477;come=11111011;seg tone=425;come=11111011;seg tone=378;come=11111011;seg tone=357;come=11111011;seg tone=318;come=11111011;seg tone=283;come=11111011;seg tone=252;come=11111011;s

19、eg tone=0;come=00000000;seg=00000000;end case;end process ;end;附录五library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fenpin isport(clk1:in std_logic;-1MHztone:in integer range 0 to 1910;buzz:out std_logic);end;architecture behave of fenpin is

20、signalclk_data: std_logic;signali: integer range 0 to 1910;beginyinpin:process(clk1)beginif (clk1event and clk1 = 1 )thenif (i = tone) theni = 0;clk_data = not clk_data;elsei = i+1;end if;end if;end process yinpin;-f=1/(2*(tone+1)*f0buzzclk,clk1=clk1_top,clk2=clk2_top);u2:table port map(index_auto=index_auto_top,tone=tone_top,come=come_top,seg=seg_top);u3:autoplay port map(clk2=clk2_top,index_auto=index_auto_top);u4:fenpin port map(clk1=clk1_top,tone=tone_top,buzz=spkout);end behave;第13页 共 14 页

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1