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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

音乐播放器课程设计报告.docx

1、音乐播放器课程设计报告音乐播放器摘 要本设计是一个音乐播放器,由节拍发生器、歌曲存储器、译码器、分频器四部分组成。能够连续播放或选曲播放预存在ROM里的4首歌曲。该播放器用Quartus II仿真软件设计并测试功能正常,下载到试验箱验证成功。关键词:音乐播放器,节拍发生器,存储器,译码器,分频器目录前言 3第1章 系统原理 61.1音乐编码 61.1.1编码原理 61.1.2编码参照表 61.2设计原理 7第2章 系统工作过程 82.1.1 工作原理 82.1.2仿真分析 92.2 歌曲存储器 92.2.1 工作原理 92.2.2 歌曲编码 102.2.2 ROM定制 142.3 译码器电路设

2、计 152.3.1 译码器工作原理 152.3.2 仿真分析 162.4 分频器电路设计 162.4.1 工作原理 162.4.2 仿真分析 19第3章 下载验证 203.1 引脚锁定设置 203.1.1 器件选择 203.1.2 引脚分配 203.2 配置文件下载 213.3 硬件测试 21结论 22参考文献 23前言世界上第一片FPGA由美国Xilinx公司于1985年率先推出。进入21世纪之后,以FPGA为核心的单片系统(SOC)和可编程系统(SOPC)有了显著的发展,单片FPGA的集成规模已达到几百万门,其工作速度已超过300MHz。FPGA在结构上已经实现了复杂系统所需要的主要功能,

3、并将多种功能集成在一片FPGA器件中,如嵌入式存储器、嵌入式乘法器、嵌入式处理器、高速I/O缓冲器、外置存储器接口和实现数字信号处理的DSP等功能。随着FPGA性能的不断完善,FPGA器件的种类日益丰富,受到世界范围内电子设计人员的普遍欢迎,并占据了较大的市场,其生产厂家也由原来的Xilinx公司一家增加到Altera、Actel、lattice等十几家公司。Altera公司的主要产品有:属于FPGA的FLEX、ACEX、APEX、Mercury、Excalibur、Stratix和Cyclone等系列;属于CPLD的MAX和Classic系列。开发工具有,被普遍认为是最优秀PLD 开发平台之

4、一的MAX+Plus II和支持APEX、Mercury、Excalibur、Stratix和Cyclone系列器件的Quartus II开发软件。Cyclone系列器件是Altera公司推出的低价位FPGA产品,是Stratix系列的简化版,分为Cyclone I和Cyclone II两个系列。Cyclone I系列产品为基于1.5V、采用0.13um全铜SRAM工艺的低成本FPGA。Cyclone II 系列产品基于1.2V,采用0.09um全铜CMOS工艺,SRAM编程技术,其成本更低、容量更高、速度更快。它和高性能的Stratix II系列的FPGA是目前Altera公司主流产品。我的

5、音乐播放器主要是用VHDL语言编写,以Cyclone器件为依托,并下载到Altera仿真工具箱Cyclone-EP1C6Q240C8验证功能成功,能够初步完成音乐播放器的雏形。随着大规模集成电路技术和计算机技术的高速发展,在涉及通信、国防、工业自动化、计算机设计与应用、仪器仪表等领域的电子系统设计工作中,FPGA技术的含量正以惊人的速度提升。电子类的新技术项目的开发也更多地依赖于FPGA技术的应用,特别是随着HDL等硬件描述语言综合功能和性能的提高,计算机中许多重要的元件(包括CPU)都用硬件描述语言来设计和表达,许多微机CPU、硬核嵌入式系统(如ARM、MIPS)、软核嵌入式系统(如Nios

6、II)、大型CPU,乃至整个计算机系统都用FPGA来实现,即所谓的单片系统SOC或SOPC(System On a Chip、System On a Programmerable Chip)。计算机和CPU的设计技术及其实现途径进入了一个全新的时代!不但如此,传统的CPU结构模式,如冯诺依曼结构和哈佛结构正在接受巨大的挑战。例如美国Wincom Systems 公司推出一款令人惊叹的服务器,其核心部分是由FPGA完成的超强功能CPU。该系统工作能力超过50台DELL或IBM计算机,或SUN Microsystems 公司的服务器。该服务器的处理速度要比传统服务器快50到300倍。我们知道,传统

7、的PC机及服务器通常采用诸如Intel公司的奔腾处理器或SUN公司的SPARC芯片作为中央处理单元,而Wincom Systems的这款产品却没有采用微处理器,而是由FPGA芯片驱动。FPGA芯片的运行速度虽比奔腾处理器慢,但可并行处理多项任务,而微处理器一次仅能处理一项任务。因此,Wincom Systems的服务器只需配置几个价格仅为2000多美元的FPGA芯片,便可击败SUN公司的服务器或采用Intel处理器的计算机。50多年前,匈牙利数学家冯诺依曼提出了计算机的设计构想:通过中央处理器从储存器中存取数据,并逐一处理各项任务。然而现在,却采用FPGA取代传统微处理器获得了更高的性能,致使

8、美国Xilinx公司的首席执行官Willem Roelandts 认为:“由冯诺依曼提出的电脑架构已经走到尽头”,“可编程芯片将掀起下一轮应用高潮”。FPGA芯片操作灵活,可以重复擦写无限次,而微处理器均采用固定电路,只能进行一次性设计。设计人员可通过改变FPGA中晶体管的开关状态对电路进行重写,即重配置,从而尽管FPGA芯片的时钟频率要低于奔腾处理器,但是由于FPGA芯片可并行处理各种不同的运算,所以可以完成许多复杂的任务。正如Willem Roelandts所说的,“我们认为下一代超级电脑将基于可编程逻辑器件”,他声称,这种机器的功能比目前最大的超级电脑还要强大许多倍。EDA专家Willi

9、am Carter认为,只要EDA开发工具的功能允许,将有无数的证据证明FPGA 具有这种神奇的能力,进而实现基于FPGA的超级电脑的开发。此外,美国加州大学伯克利分校和杨百翰大学的研究人员也正在设计基于FPGA的电脑,这些电脑可在运行中实现动态重配置。这对定位危险目标等军事应用和面容识别之类的计算密集型安全应用十分有用。由此看来,在计算机应用领域和计算机系统设计领域中,EDA技术和FPGA的应用方兴未艾!硬件描述语言HDL(Hardware Description Language)是EDA技术的另一重要组成部分,常见的HDL有:VHDL、Verilog HDL、System Verilog

10、和SystemC。其中VHDL、Verilog在现在EDA设计中使用最多,也得到几乎所有的主流EDA工具的支持。而后两种HDL 语言尚处于完善过程中。VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。VHDL具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述能力,在语言易读性和层次化结构设计方面表现了强大的生命力和应用潜力。因此,VHDL支持各种模式的设计方法:自顶向下与自底向上或混合方法,在面对当今许多电子产品生命周期缩短,需要多次重新设计以融入最新技术、改变工艺等方面, VHD

11、L都表现了良好的适应性。 第1章 系统原理1.1音乐编码1.1.1编码原理1. 音乐的十二平均率规定(1) 每两个八度音之间的频率相差一倍。(2) 两个八度音之间又可以分为十二个伴音,每两个伴音的频率比为1.059463。(3) 低音6(音名A)的频率是440Hz,音名B到C之间、E到F之间为伴音,其余为全音。2. 乐谱编码选取65536Hz为基准频率,以此频率分频得到简谱高音各音调的分频比。计算公式为N=65536/f。表 1-1 简谱高音频率与分频系数音名f(Hz)N(65536Hz)11046.56321174.75631318.55041396.94751568.04261760.03

12、771975.5331.1.2编码参照表为了让ROM能够识别各音频的分频系数,需将个音频分频系数按照一定格式转换成十六进制格式。我们采用8位的ROM,D6D5位表示高中低音,如表1-2所示,11为高音,10为中音,01为低音;用D4D3D2D1D0位表示分频系数,将表1-1的分频系数转换成二进制格式表示;ROM的高位全部补0。然后转换成十六进制如表1-2所示。之所以采用高音分频比的二分之一为基准分频系数,是因为ROM的位宽限制,而每两个八度音频率相差一倍,所以我们后面用译码器译成各音频的分频系数输出给分频器,这样由分频器输出到扬声器,扬声器就可发声了。表 1-2 简谱音频分频系数十六进制格式表

13、示高音中音低音分频系数十六进制格式音名D6D5D6D5D6D5D4D3D2D1D0高音中音低音1111001111117F5F3F2111001111007C5C3C3111001110017959394111001110007858385111001101017555356111001100117353337111001100017151311.2设计原理通过circle与sel1.0进行选曲,circle的功能是循环播放,sel的功能是分别选取四首歌中的一首。操作步骤是先进行选取再按下start便开始播放了。如选circle,再按下start则四首歌循环播放,若选sel中的任意一个,再按下

14、start则单曲循环,将start置为0则播放结束。无论选取哪种播放模式,节拍器的输出q为ROM的地址线,clkout为ROM的时钟,然后按地址读取数据,按节拍ROM输出数据给译码器,译码器的时钟频率为系统的时钟频率,译码器的作用是按照音调编码的规则进行解码,使输出的数据能够被分频器所识别。分频器设计为对任意奇数、偶数分频,且输出脉冲占空比严格为50%,这样就有足够的功率驱动扬声器,从而发声。图 1-1 顶层设计第2章 系统工作过程2.1 节拍产生电路2.1.1 工作原理1. 功能介绍(1) clk为系统时钟,预设频率为65536Hz。(2)乐曲的播放模式分为四首循环播放和单曲循环,分别有ci

15、rcle和sel控制(3) 选取模式circle的优先级别比sel的高,若circle为1,则当start=1 时,进行四首歌曲循环播放,若circle为0,则选择sel中的一个,当start=1时,将选中的歌曲单曲循环。(4) 在播放的过程中每一次clkout发出脉冲的同时q加1并输出,提供ROM的地址。2. VHDL实现library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity jpq isgeneric(m : integer :=

16、105);port(start,clk,circle:in std_logic; sel:in std_logic_vector(1 downto 0); clkout:out std_logic; q:out std_logic_vector(10 downto 0);end jpq;architecture behave of jpq issignal cout: std_logic_vector(8 downto 0);signal c:integer:=0;signal clko:std_logic;signal s:std_logic_vector(1 downto 0);begin

17、process(clk)variable n:integer:=0;begin n:=integer(6536*15/m); if clk=1 and clkevent then if c=(integer(n/2)*2-1 then c=0; else c=c+1; if c(integer(n/2) then clkO=0; else clkO=1; end if; end if; end if;end process;process(clko,start)begin if start=0 then cout=000000000; elsif start=1 then if clkoeve

18、nt and clko=1 then if cout 11111111 then cout = cout + 1; else cout 0); end if; end if; end if;end process;process(cout,sel,circle,s)begin if circle=1 then if cout=11111111 then s=s+1; end if; else s=sel; end if;end process;clkout=clko;q=s & cout;end;2.1.2仿真分析图 1-2 节拍器的波形仿真分析2.2 歌曲存储器2.2.1 工作原理按照歌曲的

19、简谱编码规则,生成十六进制歌曲文件,再定制一个ROM,用十六进制歌曲文件初始化ROM2.2.2 歌曲编码1. 编码规则(1) 参照1.1.2编码参照表。(2) 由C语言编程文件生成十六进制文件。2. C编程实现乐谱编码#include#include#includeint fhex(char a) /*将十六进制数转换为十进制数*/ int c; if (a=F) c=15; else if(a=E)c=14; else if(a=D)c=13; else if(a=C)c=12; else if(a=B)c=11; else if(a=A)c=10; else if(a=9)c=9; els

20、e if(a=8)c=8; else if(a=7)c=7; else if(a=6)c=6; else if(a=5)c=5; else if(a=4)c=4; else if(a=3)c=3; else if(a=2)c=2; else if(a=1)c=1; else if(a=0)c=0; return(c);char hex(int a) /*将十进制数转换为十六进制数*/ char c; if (a=15) c=F; else if(a=14)c=E; else if(a=13)c=D; else if(a=12)c=C; else if(a=11)c=B; else if(a=1

21、0)c=A; else if(a=9)c=9; else if(a=8)c=8; else if(a=7)c=7; else if(a=6)c=6; else if(a=5)c=5; else if(a=4)c=4; else if(a=3)c=3; else if(a=2)c=2; else if(a=1)c=1; else if(a=0)c=0; return(c);void address(int i,char *m) /*计算每一字节的地址码*/ int a,b,c,d; a=i/4096; b=(i-a*4096)/256; c=(i-a*4096-b*256)/16; d=i-a*

22、4096-b*256-c*16; *(m+3)=hex(a); *(m+2)=hex(b); *(m+1)=hex(c); *(m+0)=hex(d);void main() /*主函数*/ FILE *fp; int i,j,k,t3,n,s3,x=0; int h6; char filename20,l2,d4,*c; printf(creat hex file,input filename:n);/*输入要创建的文件名字*/ scanf(%s,filename); if(fp=fopen(filename,w)=NULL) printf(cannot open filen); /*若不能

23、打开文件返回错误*/ exit(0); getchar(); c=d; printf(INPUT YUE PU:n); for(;) i+; printf(input tune , pitch and time:n);/*按照音调、音高、音长的格式输入乐谱*/ scanf(%d%d%d,&t0,&t1,&t2); n=0; for(;) j+; n+; if(t0=8) fputs(:00000001FF,fp); fclose(fp); exit(0); else if(n=t2+1) break; else fputc(:,fp); fputc(0,fp); fputc(1,fp); ad

24、dress(x,c); x+; for(k=3;k=0;k-) hk=fhex(dk); fputc(dk,fp); fputc(0,fp); fputc(0,fp); if(t1=0) fputc(0,fp); h5=0; else if(t1=1) fputc(3,fp); h5=3; else if(t1=2) fputc(5,fp); h5=5; else if(t1=3) fputc(7,fp); h5=7; if(t0=0) fputc(0,fp); h4=0; if(t0=7) fputc(1,fp); h4=1; else if(t0=6) fputc(3,fp); h4=3;

25、 else if(t0=5) fputc(5,fp); h4=5; else if(t0=4) fputc(8,fp); h4=8; else if(t0=3) fputc(9,fp); h4=9; else if(t0=2) fputc(C,fp); h4=12; else if(t0=1) fputc(F,fp); h4=15; s2=255-(h3*16+h2+h1*16+h0+h4+h5*16)%256; s1=s2/16; s0=s2-s1*16; /*产生十六进制文件的奇偶校验码*/ l0=hex(s1); l1=hex(s0); fputc(l0,fp); fputc(l1,fp

26、); fputc(n,fp); printf(%d|,x); /*显示输入的节拍数*/ 2.2.2 ROM定制从菜单里的Tools选择MegaWizard Plug-In Manager,按照向导完成ROM的定制。图 2-1 ROM 定制向导图2-2 ROM 初始化文件2.3 译码器电路设计2.3.1 译码器工作原理1. 译码器功能(1) 识别由ROM输出的数据并转换成分频器能识别的分频数据。(2) 按照乐谱编码规则进行反编码。2. VHDL实现library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;us

27、e ieee.std_logic_arith.all;entity decoder is port(input:in std_logic_vector(7 downto 0); clk:in std_logic; output:out std_logic_vector(7 downto 0);end decoder;architecture behave of decoder isbeginprocess(input,clk)beginif clk=1 and clkevent then if input(6 downto 5)=11 then output=00& input(4 downto 0) & 0; elsif input(6 downto 5)=10 then output=0 & input( 4 downto 0) &00; elsif input(6 downto 5)=01 then output=input(4 downto 0)

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

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