基于verilog音乐播放代码
基于FPGA的音乐播放器
基于FPGA的音乐播放器尝试利用FPGA开发板板载资源以及外搭的功率放大电路制作一台音乐播放器,能够播放通过计算机拷贝在SD卡(或MMC卡、TF卡)的根目录中的某一个WAV文件。
一、基本要求:制作音乐播放器(50分)(1)除了外置的音频功率放大器之外,本系统的主体部分(单片机)应基于STI51开发板,音乐来源于SD卡(或MMC卡、TF卡)(10分)(2)制作一个音频功率放大器,能够实现音频信号的功率放大功能,并能成驱动普通扬声器或耳机。
(10分)(3)能够播放单声道、8位,采样率为1.5K(或更高)的WAV文件。
实际播放时,歌声、伴奏声能依稀可辨。
(30分)二、提高要求:提高音乐播放器的音质(50分)(1)能够播放单声道、8位,采样率为2.5K或更高的WAV文件。
实际播放时,歌声、伴奏声清晰可辨。
(20分)(2)音频功率放大器从FPGA开发板取电,使用USB即可完成系统所有器件的供电。
(10分)(3)改造一切可以改造的部分以提高播放器的音质。
(20分)(提示:可以利用Adobe Audition软件编辑WAV文件并改变音频位数与采样率;可以利用Ultraedit软件以二进制方式查看WAV文件;WAV文件数据区的每一个字节顺次送入D/A中即可实现WAV文件的播放。
)起草人:刘文浩2010-11-25,04:43若具备一定的基础,以下内容可以忽略。
下面的内容是利用单片机制作音乐播放器的步骤。
题目分析1 系统开发步骤本题目对于刚学习完单片机尚未上手的同学来说可能难度较大,刚开始就着手制作一个以SD卡(或MMC卡、TF卡)为存储介质的音乐播放器并且要想尽办法提高播放音乐的音质具有较大难度,且容易让制作者失去继续制作下去的信心。
建议在制作过程中循序渐进,一步一步逐步深入逐渐实现以下功能:第一步:能够播放存储在单片机程序(ROM)中的音乐。
(参考时间:4天)第二步:通过串口调试助手向单片机发送WAV文件,使单片机能够播放计算机发出的WAV文件数据流。
Verilog_HDL综合设计实例(自动乐曲演奏)
Place & Route
Timing Analysis
基于FPGA的乐曲自动演奏器设计
FPGA
产生音符所对应频率的方波信号
在输入参考频率fc=3MHz时, 计算简谱中所有音符的分频系 数。
实际上,只要各个 音符之间的相对频率关 系不变,演奏出的音乐 听起来就不会“走调”。
1. 一.设计目的与要求
音名显示电路用来显示乐曲演奏时对应的 音符。可以用3个数码管,分别显示高、 中、低音的音名,实现演奏的动态显示, 十分直观。在本例中,high[3:0]、 med[3:0]、low[3:0]等信号分别用于显示高 音、中音、低音音符。为了使演奏能循环 进行,需另外设置一个时长计数器,当乐 曲演奏完成时,保证能自动从头开始演奏。
4)12MHz分频成1mhz波形分频器,源代码和顶层模块如下: //12mhz分成1mhz的分频模块,提供给quma模块 module div_clk1mhz(clk_12mhz,clk_1mhz); input clk_12mhz; output clk_1mhz; reg clk_1mhz; reg [21:0] cnt; always @(posedge clk_12mhz) if(cnt<5) cnt=cnt+1; // (12mhz/1mhz=12,cnt<[12/2-1=5]) else begin cnt=0; clk_1mhz =! clk_1mhz; end Endmodule
用纯硬件完成乐曲演奏电路的设计与利用微处 理器(CPU)实现相比逻辑要复杂得多,如不借助 于功能强大的EDA工具和硬件描述语言,仅凭传 统的数字逻辑技术,即使最简单的演奏电路也难以 实现。
基于-FPGA的音乐播放器的设计
摘要根据国家发改委与专业教学委员会对教育机构的要求,为培养适应我国21世纪国民经济发展的电子设计人才;同时基于国家教委面向21世纪电工电子课程体系改革和电工电子工科教学基地建设两项教学改革研究成果。
要求高等本科在校学生能够自己动手完成简单的数字器件设计。
本次设计在自己手动焊接简易的PFGA板子上实现,并且在QusrtusII 9.0上利用VHDL设计数控分频器电路,利用数控分频原理设计音乐硬件演奏电路,并制定LPM-ROM 存储音乐数据,以“梁祝”乐曲为例,将音乐数据存储到LPM-ROM,就达到了已纯硬件的手段来实现乐曲演奏的效果,只要修改LPM-ROM所存储的音乐数据,将其转换为其他的音乐数据,再重新制定LPM-ROM,在连接到程序中就可以实现其他与取得演奏。
本次设计采用的FPGA主芯片位ALTERA公司的FLEX系列的EPF10K10LC84-4。
由于板子是自己手动在万用板上焊接的所以只焊接了必要的外设如蜂鸣器和LED。
关键词FPGA;音乐播放器;QuartusII;VHDL;目录摘要 (I)第一章前言 (2)1.1关于EDA技术 (2)1.2 关于VHDL (2)1.3 关于EDA工具 (3)1.4 有关本次课程设计 (3)第二章设计实现 (4)2.1音乐演奏电路原理 (4)2.1.1音符频率的获得 (4)2.1.2乐曲节奏的控制 ............................................................... 错误!未定义书签。
2.1.3乐谱发生器 ....................................................................... 错误!未定义书签。
2.1.4乐曲演奏电路原理框图 ................................................... 错误!未定义书签。
Verilog HDL与CPLDFPGA项目开发教程 第3版-电子课件项目11 音乐播放器设计
if(count1<25'd3000000) count1=count1+1;
else begin count1=0; clk_4Hz=~clk_4Hz; end
end
//定义基准时钟输入 //定义声响输出口 //定义高、中、低音标志
//定义基准时钟分频寄存器 //定义音谱分频寄存器 //控制音谱播放顺序 //4Hz信号
if(counter==47) counter=0; else counter=counter+1; case(counter)
0:{high,med,low}=9'b000000011; 1:{high,med,low}=9'b000000011; 2:{high,med,low}=9'b000000011; 3:{high,med,low}=9'b000000011; 4:{high,med,low}=9'b000000101; 5:{high,med,low}=9'b000000101; 6:{high,med,low}=9'b000000101; 7:{high,med,low}=9'b000000110; …… endcase end assign buzzout=buzzout_reg; endmodule
音乐播放器的Verilog代码
音乐播放器的Verilog代码module song( audio , clk , clr1);output audio;input clk; //我的开发板时钟频率为33.8688Mhzinput clr1;wire clr;assign clr=~clr1; //clr信号为高电平有效,但由于我按键复位是低电平有效,在这里我声明了一个反相器reg[1:0] n1;reg[23:0] n2;reg [13:0] count,origin;reg audiof;reg clk_6MHz,clk_4Hz;reg [4:0] j;reg [5:0] len;assign audio=audiof ; //控制开关always@(posedge clk or posedge clr)begin //6MHz分频if(clr) beginclk_6MHz<=0;n1<=0;endelse if(n1==6/2-1) begin//这个语句的分频频率为33.8688Mhz/6≈5.6MHz≈6MHzclk_6MHz<=~clk_6MHz;n1<=0;endelse n1<=n1+1;endalways@(posedge clk or posedge clr)begin //4Hz分频if(clr) beginclk_4Hz<=0;n2<=0;endelse if(n2==8467200/2-1) beginclk_4Hz<=~clk_4Hz;n2<=0;endelse n2<=n2+1;endalways @(posedge clk_6MHz or posedge clr) beginif(clr) begincount<=0;audiof<=0;endelse if(count==16383)begincount<=origin;audiof<=~audiof;endelsecount<=count+1;endalways @(posedge clk_4Hz or posedge clr ) beginif(clr) origin<=0;else begincase(j)5'd1:origin<=14'd4916; //low5'd2:origin<=14'd6168;5'd3:origin<=14'd7281;5'd4:origin<=14'd7791;5'd5:origin<=14'd8730;5'd6:origin<=14'd9565;5'd7:origin<=14'd10310;5'd8:origin<=14'd10647; //middle5'd9:origin<=14'd11272;5'd10:origin<=14'd11831;5'd11:origin<=14'd12087;5'd12:origin<=14'd12556;5'd13:origin<=14'd12974;5'd14:origin<=14'd13346;5'd15:origin<=14'd13516; //high5'd16:origin<=14'd13829;5'd17:origin<=14'd14108;5'd18:origin<=14'd14235;5'd19:origin<=14'd14470;5'd20:origin<=14'd14678;5'd21:origin<=14'd14864;default:origin<=14'd011111;endcaseendendalways@(posedge clk_4Hz or posedge clr) //乐谱beginif(clr) beginlen<=0;j<=0;endelse if(len==63)len<=0;else beginlen<=len+1;case(len)6'd0:j<=3;6'd1:j<=3;6'd2:j<=3;6'd3:j<=3;6'd4:j<=5;6'd5:j<=5;6'd6:j<=5;6'd7:j<=6;6'd8:j<=8;6'd9:j<=8;6'd10:j<=8;6'd11:j<=6;6'd12:j<=6;6'd13:j<=6;6'd14:j<=6;6'd15:j<=12;6'd16:j<=12;6'd17:j<=12;6'd18:j<=15;6'd19:j<=15;6'd20:j<=15;6'd21:j<=15;6'd22:j<=15;6'd23:j<=9;6'd24:j<=9;6'd25:j<=9;6'd26:j<=9;6'd27:j<=9;6'd28:j<=9;6'd29:j<=9;6'd30:j<=9;6'd31:j<=9;6'd32:j<=9;6'd33:j<=9;6'd34:j<=10;6'd35:j<=7;6'd36:j<=7;6'd37:j<=6;6'd38:j<=6;6'd39:j<=5;6'd40:j<=5;6'd41:j<=5;6'd42:j<=6;6'd43:j<=8;6'd44:j<=8;6'd45:j<=9;6'd46:j<=9;6'd47:j<=3;6'd48:j<=3;6'd49:j<=8;6'd50:j<=8;6'd51:j<=8;6'd52:j<=5;6'd53:j<=5;6'd54:j<=8;6'd55:j<=5;6'd56:j<=5;6'd57:j<=5;6'd58:j<=5;6'd59:j<=5;6'd60:j<=5;6'd61:j<=5;6'd62:j<=5;6'd63:j<=5;default:j<=1; endcaseendendendmodule。
基于FPGA的脉冲型音乐播放器的设计
基于FPGA/CPLD的脉冲信号型乐曲播放器的设计摘要用纯硬件来完成乐曲演奏电路的逻辑非常复杂,仅凭传统的数字逻辑技术,即使最简单的电路也难以实现。
但是借助于功能强大的EDA工具和硬件描述语言,就可以轻松的实现设计。
本设计利用可编程逻辑器件设计一个控制器让不同频率的脉冲信号有序的输出并驱动扬声器发声,最终完成一首乐曲的演奏。
设计以《世上只有妈妈好》为例,分析了硬件电路发声的基本原理,探讨了可以实现设计的方案,利用VHDL语言在QuartusⅡ上编程设计了节拍发生器、分频器、顺序控制、音高控制等模块的功能。
最后,运用原理图编辑器调出已经设计好的各个模块,根据设计的要求进行连线、加输入输出脚,得到了总体设计的仿真实体。
并对总体设计进行了功能仿真和下载。
本设计完成了乐曲《世上只有妈妈好》的32个音符64个节拍的播放,每个节拍0.5秒,整曲播放时长为32秒。
基于FPGA,利用Quartus Ⅱ和VHDL语言完成的脉冲型乐曲播放器,其特点是设计简单、灵活、设计周期短;缺陷是实现播放的乐曲种类单一,播放时间长度较短,若想要实现较长的乐曲播放,则需要很长的源程序。
关键词:FPGA,EDA,VHDL,QuartusⅡ,乐曲播放器The design of the pulse-type music player based on FPGA / CPLDAbstractIt is very complex to complete the music playing logic circuit using pure hardware. Only depend on the traditional digital logic technology, it is difficult to achieve even the simple circuit. However, it is very ease to achieve by using the EDA tools and hardware description language. The design finished a controller that output a series of orderly pulse signal with different frequencies and driven speaker with, by using the programmable logic device ,and finally complete the concert of a music.The music <shi shang zhi you ma ma hao> was used as an example. The basic principal of the hardware circuit sing was analyzed. How could achieve the player’s faction was also discussed. Following functional module was designed in Quartus II by using VHDL language: pulse generator, frequencies divider, sequence control, pitch control and so on. Finally, simulate entity was build in the Block Editor of the Quartus II , using all of the module which has been designed and according to the design’s requirements to connect, and plus input and output pin. Following these, the player’s entity was simulated and downloaded. The <shi shang zhi you ma ma hao>’s note 32 of the 64 players beat was completed in this design. One beat was sat as 0.5 seconds long, and the whole song was played within 32 seconds。
基于Verilog_HDL的乐曲演奏电路设计
1 引言随着EDA技术的进展,基于可编程的数字电子系统设计的完整方案越来越受到人们的重视。
与利用微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
如何使用EDA工具设计电子系统是人们普遍关心的问题。
本课程设计主要是采用FPGA器件驱动小扬声器构成一个乐曲演奏电路,FPGA器件选择Altera的EPF10K10,在MAX + plusⅡ的EDA软件平台上,实现了乐曲演奏电路的设计。
1.1 课程设计的目的本课程设计主要是基于Verilog HDL设计乐曲演奏电路,系统实现是用硬件描述语言Verilog HDL按分频控制的方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲。
该设计的目的在于加深对EDA技术的理解,掌握乐曲演奏电路的工作原理,了解怎样控制音调的高低变化和音长,从而完成乐曲的自动循环演奏。
1.2 课程设计的要求本课程设计中由于每一个音调对应不同的频率,从而输出对应频率的声音。
因此本设计要求通过控制输出到扬声器的激励信号频率的高低和持续的时间,从而使扬声器发出连续的乐曲声,且当乐曲演奏完成时,保证能自动从头开始演奏。
1.3 设计平台MAX + plusⅡ是美国Altera 公司的一种EDA 软件,用于开发CPLD 和FPGA 进行数字系统的设计。
2 应用工具介绍作为当今最流行的计算机软件系统,EDA技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。
2.1 EDA技术介绍EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。
基于FPGA的音乐播放器设计报告
中国地质大学(武汉)基于FPGA的音乐播放器设计专业班级小组成员指导老师2015.06目录一、实现功能 (2)二、成员及任务分工 (2)三、详细设计及原理 (3)1.系统硬件结构设计 (3)2.程序流程 (4)四、具体实现 (5)1.SD卡文件系统的初始化 (5)2.按键选歌模式 (6)3.自动播放模式 (7)4.快进、快退、播放/暂停功能 (7)5.LCD显示歌曲名及歌词模块 (8)6.LED显示功能 (10)7.数码管显示当前曲目、总歌曲数和时间功能 (11)五、碰到的问题及解决过程 (12)1.问题一 (12)2.问题二 (12)3. 问题三 (13)4. 问题四 (13)六、运行效果 (13)七、设计小结 (19)一、实现功能1. 支持SD卡文件读取功能;2. 支持WAV格式音频功能;3. 支持歌词同步显示功能;3. 支持歌曲名称显示功能;4. 支持“播放/暂停”控制功能;5. 支持歌曲选择功能;6. 支持LED灯显示音量功能;7. 支持返回功能;8. 支持硬启动从ROM启动;9.支持数码管显示总歌曲数和第几首歌曲功能;10.支持数码管显示歌曲的播放进度功能;11. 支持LED灯指示拨码开关0~7状态功能;12. 支持前6首歌曲直接选择功能。
二、成员及任务分工三、详细设计及原理1.系统硬件结构设计本设计采用DE2 开发板,充分利用NiosII 软核的特性,结合自定义用户组件、自定义用户外设。
在FPGA 中使用软核处理器的优势在于灵活高效,硬核实现没有灵活性,通常无法使用最新的技术。
而应用Nios II 软核处理器,开发者能够完全定制CPU 和外设,获得恰好满足需求的处理器,充分利用了Nios II 处理器灵活和高效的特性。
通过DE2 开发板上的SD 卡插槽,读取SD 卡上的音频数据后,送到音频编/解码器,对音质进行相关处理后输出,进行音乐的播放. SD 卡音乐播放是由NiosII 处理器通过软件完成的。
音乐播放器FPGA实现
library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity music_player isport(clk : in STD_LOGIC;start:in STD_LOGIC; --开始信号rset :in STD_LOGIC; --复位信号,重新播放f :out STD_LOGIC --驱动输出);end music_player;architecture behave of music_player issignal clk2m,start1,rset1 :std_logic;signal clk4 :std_logic;signal n0,n :integer; --n0存放音调编码信息a begininput: block --输入按键处理模块beginprocess(start)beginif start='0' thenstart1<='1';end if;end process;process (rset)beginif rset='0' thenrset1<='1';elserset1<='0';end if;end process;end block input;Yufengpin: BLOCK --预分频部分signal count_4 :std_logic_vector(22 downto 0):="00000000000000000000000";beginclk2m<=count_4(3);--十六分频得到一个2.1168M的时钟信号clk4<=count_4(22);--获得约4HZ的时钟PROCESS(CLK,start1)BEGINIF start1='1' thenIF(CLK'EVENT AND CLK='1')THENIF(COUNT_4="11111111111111111111111")THENCOUNT_4<="00000000000000000000000";ELSECOUNT_4<=COUNT_4+1;END IF;END IF;END IF;END PROCESS;END BLOCK Yufengpin;yindiaoshengcheng :BLOCK --音调生成模块signal note:integer range 0 to 268;signal pu: integer range 0 to 31;beginprocess(clk4,rset1) --读取音调信息用于分频系数的生成beginif rset1='0'thennote <= 0 ; --复位信号1有效时,播放复位elsif (clk4'event and clk4='1') thenif note=137 thennote<=0; --重复播放elsenote <= note +1;end if;end if;end process;process(note) --乐曲数据信息存储begincase note iswhen 0 => pu <= 3; --3_when 1 => pu <= 3;when 2 => pu <= 3;when 3 => pu <= 3;when 4 => pu <= 5; --5_when 5 => pu <= 5;when 6 => pu <= 5;when 8 => pu <= 8; when 9 => pu <= 8; --1 when 10 => pu <= 8; when 11 => pu <= 9; --2 when 12 => pu <= 6; when 13 => pu <= 8; when 14 => pu <= 5; when 15 => pu <= 5; when 16 => pu <= 12; when 17 => pu <= 12; when 18 => pu <= 12; when 19 => pu <= 15; --_1 when 20 => pu <= 13; when 21 => pu <= 12; when 22 => pu <= 10; when 23 => pu <= 12; when 24 => pu <= 9; when 25 => pu <= 9; when 26 => pu <= 9; when 27 => pu <= 9; when 28 => pu <= 9;when 30 => pu <= 9; when 31 => pu <= 9; when 32 => pu <= 9; when 33 => pu <= 9; when 34 => pu <= 9; when 35 => pu <= 10; when 36 => pu <= 7; when 37 => pu <= 7; when 38 => pu <= 6; when 39 => pu <= 6; when 40 => pu <= 5; when 41 => pu <= 5; when 42 => pu <= 5; when 43 => pu <= 6; when 44 => pu <= 8; when 45 => pu <= 8; when 46 => pu <= 9; when 47 => pu <= 9; when 48 => pu<=3; when 49 => pu<=3; when 50 => pu<=8;when 52 => pu<=6; when 53 => pu<=5; when 54 => pu<=6; when 55 => pu<=8; when 56 => pu<=5; when 57 => pu<=5; when 58 => pu<=5; when 59 => pu<=5; when 60 => pu<=5; when 61 => pu<=5; when 62 => pu<=5; when 63 => pu<=5; when 64 => pu<=10; when 65 => pu<=10; when 66 => pu<=10; when 67 => pu<=12; when 68 => pu<=7; when 69 => pu<=7; when 70 => pu<=9; when 71 => pu<=9; when 72 => pu<=6;when 74 => pu<=5; when 75 => pu<=5; when 76 => pu<=5; when 77 => pu<=5; when 78 => pu<=5; when 79 => pu<=5; when 80 => pu<=3; when 81 => pu<=5; when 82 => pu<=3; when 83 => pu <=3; when 84 => pu <=5; when 85 => pu <=6; when 86 => pu <=7; when 87 => pu <=9; when 88 => pu <=6; when 89 => pu <=6; when 90 => pu <=6; when 91 => pu <=6; when 92 => pu <=6; when 93 => pu<=6; when 94 => pu <=5;when 95 => pu <=6; when 96 => pu <= 8; when 97 => pu <= 8; when 98 => pu <= 8; when 99 => pu <= 9; when 100 => pu <= 12; when 101 => pu <= 12; when 102 => pu <= 10; when 103 => pu <= 10; when 104 => pu <= 9; when 105 => pu <= 9; when 106 => pu <= 10; when 107 => pu <= 9; when 108 => pu <= 8; when 109 => pu <= 8; when 110 => pu <= 6; when 111 => pu <= 5; when 112 => pu <= 3; when 113 => pu <= 3; when 114 => pu <= 3; when 115 => pu <= 3; when 116 => pu <= 8;when 117 => pu <= 8; when 118 => pu <= 8; when 119 => pu <= 8; when 120 => pu <= 6; when 121 => pu <= 8; when 122 => pu <= 6; when 123 => pu <= 5; when 124 => pu <= 3; when 125 => pu <= 5; when 126 => pu <= 6;when 127 => pu <= 8; when 128 => pu <= 5; when 129 => pu <= 5; when 130 => pu <= 5; when 131 => pu <= 5; when 132 => pu <= 5; when 133 => pu <= 5; when 134 => pu <= 5; when 135 => pu <= 5; when 136 => pu <= 0; when 137 => pu <= 0; when others =>pu<=0;end case;end process;n0<=pu;END BLOCK yindiaoshengcheng;fengpingshushengcheng :BLOCK --生成分频系数signal t0:integer range 0 to 4095; --用于存储分频系数beginprocess(n0)begincase n0 iswhen 0 => t0<=0;when 1 => t0<=3822;when 2 => t0<=3405;when 3 => t0<=3034;when 4 => t0<=2863;when 5 => t0<=2551;when 6 => t0<=2273;when 7 => t0<=2025;when 8 => t0<=1911;when 9 => t0<=1703;when 10=> t0<=1517;when 11=> t0<=1432;when 12=> t0<=1276;when 13=> t0<=1136;when 14=> t0<=1012;when 15=> t0<=956;when 16=> t0<=851;when 17=> t0<=758;when 18=> t0<=716;when 19=> t0<=638;when 20=> t0<=568;when 21=> t0<=506;when others => t0<=0;end case;end process;n<=t0;END BLOCK fengpingshushengcheng ;fenpinqudong :BLOCK --分频驱动输出模块signal num: integer range 0 to 4095:=0;signal clk_temp: std_logic:='0';beginprocess(clk2m,n)beginif n=0 thenclk_temp<='0';elsif num>n thennum<=0;elsif clk2m'event and clk2m='1' then if num=n thennum<=0;clk_temp<=Not clk_temp;elsenum<=num+1;end if;end if;end process;f<=clk_temp;END BLOCK fenpinqudong;end behave;。
基于FPGA的频谱音乐播放显示系统
d(p )=∑ ld( l(n)满足乏 ’:; ,可以发现 , (")的值依靠于 securesteganography,” in Proceedings of ICIV, Genoa, Italy, Sept.
我们的 5操作的校准 。下 面,本 文将会展示用最大流算法来解决这个 2005.
节点的最 大流 量。有很多的最大流算法 能够应用于这个 问题 ,但是 ofMultimedia Contents VI, E. J. Delp III and W . Wong, Eds.,
这都不是这篇文章范 围内的 内容 了。
Proc.SPIE 5306,PP. 489 495, 2004.
关 叠 词 :STM52单 片机 快 速 傅里叶 变换 音 乐频谱显 示 音乐播 放 器
1研 究背量
随 着电子科技 的快速 发展 ,人们 对于 电子产 品的需 求和功 能越
来 越 高 。在 生 活 中人们 已 经不 仅 仅 满 足 于 单 一 的 音 乐 播 放 器 ,多功 能
的播放器更受到大众 的青睐 。因此需要设计一款简单实用、多功能、
跟随时代 潮流的音乐播放器。基于人们对生活娱 乐的需求,本文 介绍
一 种基于 FPGA的 频谱音乐播 放显示系统。该 音乐播放显示 系统 不
仅可以实现简单 的音乐播放、循环 、停止、切换等基本操作 ,还具 有将
炫 彩灯光和音乐结合 的功能 ,根据 音乐分贝的高低显 示不 同的 灯阵
列 频谱 。且该音乐播放显示系统设计成 本较低 ,具有多样化的功能 , 操 作 简 单 。
2整 体框 架设 计 基于 FPGA 的频 谱音 乐播 放 显示系统 主要 由两 大部 分构成, STM32读取 内存卡 中存储的音乐,将音乐信号分为两路 ,其 中一路通 过功率放 大电路送至 扬声器使得 能够外放音乐。另一路通过 AUNX 高速 12位 双通 道 AD模 块送 至 ALTERA FPGA CYCLONE IV 核心板。FPGA 对音乐信号进行 32KHZ的采样 ,并进行 快速离 散傅 里叶变换 。不 同的音符和音调组 成的不同的频率频谱不同,对声音信
FPGA实现蜂鸣器播放音乐实验报告
实验报告一、功能:利用FPGA开发板板子实现一段简单的简谱的播放。
二、工具:Spartan-3E_Starter_Kit开发板一块,PC机一台,ISE开发环境;无源蜂鸣器一个。
语言:VHDL和Verilog。
三、源码://`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: XMU-EED// Engineer: BMW007// Create Date: 22:59:56 03/20/2014// Design Name: beeper_play_music// Module Name: beeper_play_music// Project Name: beeper_play_music// Target Devices: PC Win7/OS// Tool versions: ISE13.2// Description: The function of this project is making the beeper play simple music.// Dependencies:/// Revision:// Revision 0.01 - File Created// Additional Comments://////////////////////////////////////////////////////////////////////////////////module beeper_play_music(clk,rst,beep,music_out);input clk,rst;output beep,music_out;reg beep_o;reg[7:0] state;reg[16:0] count,count_end;reg[23:0] count1;assign music_out=beep;parameter L_1=17'd95555, //261.63L_2=17'd85130, //293.67L_3=17'd75843, //329.63L_4=17'd75843, //349.23L_5=17'd63777, //391.99L_6=17'd56818, //440L_7=17'd50619, //493.88M_1=17'd46970,//532.25M_2=17'd42566,//587.33M_3=16'd37921,//659.25M_4=16'd35793,//698.46M_5=16'd31888,//783.99M_6=16'd28409,//880M_7=16'd25310,//987.76H_1=16'd23889,//1046.50H_2=16'd21283,//1174.66H_3=16'd18961,//1318.51H_4=16'd17897,//1396.92H_5=16'd15944,//1567.98H_6=16'd14205,//1760H_7=16'd12654;//1975.52parameter TIME=8000000;assign beep=beep_o;always@(posedge clk,posedge rst) beginif(rst)begincount <= 16'b0;beep_o <= 1'b0;endelse if(count==count_end)begincount <= 16'b0;beep_o <= ~beep_o;endelsecount <= count+1'b1;endalways@(posedge clk, posedge rst) beginif(rst)begincount1 <=24'b0;state <= 8'b0;endelse if(count1<TIME)count1 <= count1+1'b1;else //(count1==TIME)begincount1 <= 24'b0;if(state==8'd129)state <= 8'b0;elsestate <= state+1'b1;case(state)8'd0,8'd1,8'd2,8'd3: count_end <= M_1;8'd4,8'd5,8'd6,8'd7: count_end <= M_2;8'd8,8'd9,8'd10,8'd11: count_end <= M_3;8'd12,8'd13,8'd14: count_end <= M_1;8'd15:count_end <= 16'h2;8'd16,8'd17,8'd18,8'd19: count_end <= M_1;8'd20,8'd21,8'd22,8'd23: count_end <= M_2;8'd24,8'd25,8'd26,8'd27: count_end <= M_3;8'd28,8'd29,8'd30: count_end <= M_1;8'd31:count_end <= 16'h2;8'd32,8'd33,8'd34,8'd35: count_end <= M_3;8'd36,8'd37,8'd38,8'd39: count_end <= M_4;8'd40,8'd41,8'd42,8'd43,8'd44,8'd45: count_end <= M_5;8'd46,8'd47:count_end <= 16'h2;8'd48,8'd49,8'd50,8'd51: count_end <= M_3;8'd52,8'd53,8'd54,8'd55: count_end <= M_4;8'd56,8'd57,8'd58,8'd59,8'd60,8'd61: count_end <= M_5;8'd62,8'd63:count_end <= 16'h2;8'd64,8'd65,8'd66: count_end <= M_5;8'd67: count_end <= M_6;8'd68,8'd69,8'd70: count_end <= M_5;8'd71: count_end <= M_4;8'd72,8'd73,8'd74,8'd75: count_end <= M_3;8'd76,8'd77,8'd78,8'd79: count_end <= M_1;8'd80,8'd81,8'd82: count_end <= M_5;8'd83: count_end <= M_6;8'd84,8'd85,8'd86: count_end <= M_5;8'd87: count_end <= M_4;8'd88,8'd89,8'd90,8'd91: count_end <= M_3;8'd92,8'd93,8'd94,8'd95: count_end <= M_1;8'd96,8'd97,8'd98,8'd99: count_end <= M_2;8'd100,8'd101,8'd102,8'd103: count_end <= L_5;8'd104,8'd105,8'd106,8'd107: count_end <= M_1;8'd108,8'd109,8'd110,8'd111: count_end <= M_1;// 8'd111: count_end <= 16'h2;8'd112,8'd113,8'd114,8'd115: count_end <= M_2;8'd116,8'd117,8'd118,8'd119: count_end <= L_5;8'd120,8'd121,8'd122,8'd123: count_end <= M_1;8'd124,8'd125,8'd126,8'd127: count_end <= M_1;8'd129: count_end <= 16'h2;default:count_end <= 16'h2;endcaseendendendmodule四、附录:表简谱中的音名与频率的关系音名频率/Hz 音名频率/Hz 音名频率/Hz 低音1 261.63 中音1 532.25 高音1 1046.50 低音2 293.67 中音2 587.33 高音2 1174.66 低音3 329.63 中音3 659.25 高音3 1318.51 低音4 349.23 中音4 698.46 高音4 1396.92 低音5 391.99 中音5 783.99 高音5 1567.98 低音6 440 中音6 880 高音6 1760 低音7 493.88 中音7 987.76 高音7 1975.52。
基于Verilog_HDL的乐曲演奏电路设计
1 引言随着EDA技术的进展,基于可编程的数字电子系统设计的完整方案越来越受到人们的重视。
与利用微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
如何使用EDA工具设计电子系统是人们普遍关心的问题。
本课程设计主要是采用FPGA器件驱动小扬声器构成一个乐曲演奏电路,FPGA器件选择Altera的EPF10K10,在MAX + plusⅡ的EDA软件平台上,实现了乐曲演奏电路的设计。
1.1 课程设计的目的本课程设计主要是基于Verilog HDL设计乐曲演奏电路,系统实现是用硬件描述语言Verilog HDL按分频控制的方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲。
该设计的目的在于加深对EDA技术的理解,掌握乐曲演奏电路的工作原理,了解怎样控制音调的高低变化和音长,从而完成乐曲的自动循环演奏。
1.2 课程设计的要求本课程设计中由于每一个音调对应不同的频率,从而输出对应频率的声音。
因此本设计要求通过控制输出到扬声器的激励信号频率的高低和持续的时间,从而使扬声器发出连续的乐曲声,且当乐曲演奏完成时,保证能自动从头开始演奏。
1.3 设计平台MAX + plusⅡ是美国Altera 公司的一种EDA 软件,用于开发CPLD 和FPGA 进行数字系统的设计。
2 应用工具介绍作为当今最流行的计算机软件系统,EDA技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。
2.1 EDA技术介绍EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。
FPGA播放声音和音乐
这里我们将让我们的FPGA播放声音和音乐。
我们从产生一个单频音开始。
然后,逐步让它实现一些更加有趣的功能,例如播放警笛和曲子。
这个工程中用到的硬件器件包括:一块Pluto板、一个扬声器(speaker)以及一个1千欧姆的电阻(resistor)。
关于此硬件系统的一个更加正式的表示方法如下图所示:振荡器(oscillator)产生一个固定频率输入到FPGA,FPGA将此频率分频后驱动一个I/O口。
这个I/O口通过一个1千欧姆的电阻连接到一个扬声器。
通过改变这个I/O口的输出频率,就可以使扬声器发出各种声音。
HDL(硬件描述语言)设计这里将分三部分来描述它:∙第一部分- 简单的哔哔声∙第二部分- 警笛声∙第三部分- 曲调简单的哔哔声FPGA 可以很容易就实现二进制的计数。
让我们从一个16位的计数器开始。
首先从25MHz的时钟开始,对于这个时钟信号,我们可以简单的应用计数器来实现“分频”。
一个16位的计数器从0计到65535(一共65536个不同的值)。
计数器的最高位将以25000000/65536=381Hz的频率翻转。
对应的Verilog HDL语言如下所示:代码1. module music(clk, speaker);2. input clk;3. output speaker;4.5. // 16位的2进制计数器6. reg [15:0] counter;7. always @(posedge clk) counter <= counter+1;9. // 使用计数器的最高有效位驱动扬声器10. assign speaker = counter[15];11.12. endmodule计数器的最低有效位(counter[0])以12.5MHz的频率翻转,类似的counter[1]以6.125MHz的频率翻转,以此类推。
我们使用最高有效位(counter[15])来驱动扬声器。
这样就可以给扬声器输出一个很好的381Hz的方波。
梁祝基于-VerilogHDL的演奏设计
梁祝基于-VerilogHDL的演奏设计设计题⽬:“梁祝乐曲发⽣器”⼀、设计任务及要求:利⽤EDA/SOPC实验开发平台提供的16*16点阵LED以及EP2C35核⼼板,实现“梁祝”乐曲发⽣器。
1、查阅相关资料,明确设计步骤;2、采⽤Verilog HDL编程语⾔设计程序;3、能够按照设定节拍(每拍持续1s)顺畅的播放“梁祝”乐曲并且听着基本⽆错;4、扩张要求:⾃主设计(如快放、倒放、换歌等)。
⼆、设计原理及⽅案乐曲播放器的基本原理是,⼀个⾳符对应⼀个频率信号。
频率的⾼低决定了⾳调的⾼低。
⾳乐的⼗⼆个平均率规定:每两个⼋度⾳之间的频率相差⼀倍。
在两个⼋度⾳之间⼜可以分为⼗⼆个半⾳,每两个半⾳的频率⽐为2.另外,⾳名A(简谱中的低⾳6)的频率为440HZ,⾳名B到C之间、E到F之间为半⾳,其余为全⾳。
由此可以计算出简谱中从低⾳1⾄⾼⾳1之间每个⾳名对应的频率,;利⽤⾼低⾳如下关系可得下表:低8度⾳:基本⾳频率/2 ,例如低⾳1的频率为523/2=261.5;⾼8度⾳:基本⾳频率×2,例如⾼⾳1的频率为523×2=1046⾳符与频率的对应关系如下各⾳阶频率对应的分频⽐及预置数对于乐曲中的休⽌符,只要将分频系数设为0,即初始值为1047,此时扬声器不发⾳。
从上表中可以看出,最⼤分频系数为1912,所以采⽤11位⼆进制计数器分频可满⾜需要。
对于不同的分频系数,只要加载不同的预置数即可。
采⽤加载预置数实现分频的⽅法⽐采⽤反馈复零法节约资源,实现起来也容易⼀些。
⾳符的持续时间须根据乐曲的速度及每个⾳符的节拍数来确定。
本设计中将全⾳的持续时间设为1s,提供的4Hz的时钟频率即可产⽣四分⾳符的时长。
控制⾳长通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该⾳符演奏的时间也就越长。
每个⾳符的演奏时间都是0.25s的整数倍,对于节拍较长的⾳符,如⼆分⾳符,在记谱时将该⾳名联系记录两次即可。