EDA课设设计-简易音乐播放器.doc

上传人:来看看 文档编号:3258114 上传时间:2019-08-06 格式:DOC 页数:27 大小:835.53KB
返回 下载 相关 举报
EDA课设设计-简易音乐播放器.doc_第1页
第1页 / 共27页
EDA课设设计-简易音乐播放器.doc_第2页
第2页 / 共27页
EDA课设设计-简易音乐播放器.doc_第3页
第3页 / 共27页
EDA课设设计-简易音乐播放器.doc_第4页
第4页 / 共27页
EDA课设设计-简易音乐播放器.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《EDA课设设计-简易音乐播放器.doc》由会员分享,可在线阅读,更多相关《EDA课设设计-简易音乐播放器.doc(27页珍藏版)》请在三一文库上搜索。

1、课程设计说明书1 引言VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLDFPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。突出了其作为硬件描述语言的良好的可读性、可移植性和易读性等优点。本文基于FPGA开发系统,在QuartusII 7.2软件平台上,完成了简易多功能信号发生器电路的设计和与仿真,并下载到试验箱进行硬件实现

2、。首先,本文介绍了QuartusII 7.2软件的基本使用方法和VHDL硬件描述语言的特点,采用VHDL 硬件描述语言描述简易信号发生器,完成对电路的功能仿真。在设计过程中,重点探讨了简易信号发生器设计思路和功能模块划分。然后,初步探讨了电路逻辑综合的原理,该软件对简易多功能信号发生器电路进行了逻辑综合。最后,使用EDA实验开发系统进行电路的下载和验证。验证结果表明设计的简易简易信号发生器完成了预期的功能。简易多功能信号发生器是信号发生器的一种,在生产实践和科研领域中有着广泛的应用。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源,由它产生不同频率不同波形的电压、电流信

3、号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波和锯齿波等,因而广泛用于通信、雷达、导航、宇航等领域。本设计是采用VHDL来实现的简易乐曲演奏器。它能实现自动演奏已存歌曲和手动演奏简易乐曲。且要求实现如下功能:(1)通过按键输入来控制音响声音 ;(2)演奏时可以通过按键选择是手动演奏还是自动演奏,手动演奏是通过按键进行简易乐曲的演奏,自动演奏则是演奏已存入的固定乐曲;(3)至少保存一首自动演奏的乐曲,且自动演奏的乐曲能重复播放;(4)进行手动演奏

4、和自动演奏时,数码管上要同时能显示演奏乐曲的乐谱;(5)扩展功能(选作)自动播放时,设置低速,中速,快速控制键,能实现乐曲不同速度的播放。2 VHDL及QuartusII软件简介2.1 EDA简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对

5、于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。 利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物等各个领域,都有EDA的应用。2.2 硬件描述语言VHDL硬件描述语言(HDL)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传

6、统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入软件需要输人500至1000个门,而利用VHDL语言只需要书写一行“A=B+C” 即可。而且 VHDL语言可读性强,易于修改和发现错误。早期的硬件描述语言,如ABEL、HDL、AHDL,由不同的EDA厂商开发,互不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上不足,1985年美国国防部正式推出了高速集成电路硬件描述语言VHDL,1987年IEEE采纳VHDL为硬件描述语言标准(IEEE-STD-1076)。VHDL是一种全方位的硬件描述语言,包括系统行为级。寄存器传输级和逻辑门多个设计层次

7、,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由下向上的电路设计过程都可以用VHDL来完成。VHDL还具有以下优点:(1)VHDL的宽范围描述能力使它成为高层进设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。(2)VHDL可以用简洁明确的代码描述来进行复杂控制逻辑设计,灵活且方便,而且也便于设计结果的交流、保存和重用。(3)VHDL的设计不依赖于特定的器件,方便了工艺的转换。(4)VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。美国于1981年提出了一种新的、标准化的HDL,称

8、之为VHSIC(Very High Speed Integrated Circuit) Hardware Description Language,简称VHDL。这是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。设计者可以利用这种语言来描述自己的设计思想,然后利用电子设计自动化工具进行仿真,再自动综合到门电路,最后用PLD实现其功能。2.3软件介绍Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器

9、,可以完成从设计输入到硬件配置的完整PLD设计流程。 Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。 Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。 此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以

10、方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。 Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易

11、用的接口,越来越受到数字系统设计者的欢迎。3 简易乐曲演奏器设计及仿真3.1原理描述3.1.1音名与频率的关系乐谱中从低音1到高音1之间每个音名的频率如表3-1所示:表3-1 简谱中的音名与频率的关系音名频率(Hz)音名频率(Hz)音名频率(Hz)低音1261中音1523高音11046低音2294中音2578高音21175低音3330中音3659高音31318低音4349中音4698高音41397低音5392中音5784高音51568低音6440中音6880高音61760低音7440中音7988高音719763.1.2可变分频器1. 基准频率的选取各音名所对应的频率可由一频率较高的基准频率进行

12、整数分频得到,所以实际产生各音名频率为近似的整数值。这是由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频系数四舍五入取整,若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大,若基准频率过高,虽然误码差较小,但分频结构将变大,实际的设计应综合考虑两方面的因素,在尽量减小频率差的前提下取舍合适的基准频率。本次设计选择12MHz作为基准频率。2. 分频系数A、公用二进制的计数容量N及初始值的选取D(1) 分频系数的选取 首先将12MHz的基准频率进行12分频,得到1MHz的基准频率,分频系数A1MHz音名频率,此分频系数可由计数器实现。为得到对称方波,可将分频系数A分解为

13、:分频系数A=分频系数n2。即先进行分频系数n的分频,得到不对称方波,然后再2分频得到对称方波。(2) 公用二进制的计数容量N的选取n分频可由n进制计数器实现。n进制计数器可用复位法或置位法实现,由于加载初始值d的置位法可有效地减少设计所占用的可编程逻辑器件资源,因此,此次设计采用置位法。低音1的分频数n为最大,其值为1275,应取公用二进制计数器的计数容量N大与“最大分频系数n”,故本次设计的公用二进制计数器应该设计为十一位二进制加法计数器,其计数最大容量为2048,计数的最大值N为2047,可满足本次设计中所有音名对音频系数的要求。(3) 初始值的选取D初始值D = 计数最大值N - 分频

14、系数n此次设计中应用的各音名对应的分频系数值及初始值如表所示:表3-2各音名对应的分频系数值及初始值音符初始值对应音谱区别高中低音020470011091112119621312893141331415140951614796171541718156912916212210166832111689421217285213176362141794123. 小星星的音符谱为:1;1;5;5;6;6;5;4;4;3;3;2;2;1;5;5;4;4;3;3;2;5;5;4;4;3;3;2;1;1;5;5;6;6;5;4;4;3;3;2;2;13.1.3节拍发生器原理该演奏电路的最小节拍为1拍,将一拍的

15、时长定为0.25s,则只需要再提供一个4Hz的时钟频率即可产生一拍的时长。为了能达到演奏时能循环进行,则需设置一个时长计数器,当乐曲演奏完时,保证能自动从头开始演奏。3.2乐曲演奏电路各模块设计本次设计乐曲演奏电路结构方框图如图3-1所示:基准时钟12MHz模式选择 auto手动输入FPGA时钟电路数控分频器电路音乐节拍产生电路音调编码电路4Hz12MHz扬声器数码管图3-1乐曲演奏电路结构方框图3.3 乐曲演奏电路的子结构顶层结构所包含的模块分别有音调发生器(ydfsq)模块、音调编码器(ydbmq)模块、分频器模块(dd)、手动自动选择(bmux)模块及数控分频器(skfpq)模块。3.3

16、.1 音调发生器模块1. 音调发生器模块在此模块中设置了一个8位二进制计数器(计数最大值为64),这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25s,恰好为当全音符设为1s时,四四拍的4分音符的持续时间。音调发生器模块VHDL源程序如下:library ieee;use ieee.std_logic_1164.all; entity ydfsq isport(clk:in std_logic;toneindex:out integer range 0 to 15);end;architecture bhv of ydfsq issignal counter:integer ra

17、nge 0 to 99; beginprocess(clk,counter)beginif counter=100 thencounter=0;elsif clkevent and clk=1then countertoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindexton

18、eindextoneindextoneindexNULL;end case;end process;end;2. 音调发生器模块的仿真图图3-2 音调发生器模块的仿真波形图通过仿真图可以清楚的看到,时钟clk由0开始计数,每计一次数输出toneindex的值随之发生一定的变化,只不过根据乐谱的不同,输出的变化也不尽相同。例如在本次设计中,自第1个时钟上升沿来临到第4个时钟上升沿,输出toneindex “1”。于是根据乐谱的不同就输出不同的音符,作为音调编码器的输入。然后把输出toneindex输入到音调编码器模块,进行下一步编码工作。于是,由仿真图可以知道本模块输出的即为演奏音乐的音符谱,说

19、明该程序正确,可以生成逻辑器件。3. 音调发生器模块生成的逻辑器件图3-3 音调发生器电路模块生成器件3.3.2音调编码器电路模块1. 音调编码器模块该编码模块的作用为将输入的音符数据翻译为音乐产生模块的所需要的分频系数,并且显示音符的数字码型和高音阶,通过对照表3-2各音名对应的分频系数值及初始值,根据输入得到初始值,从而得到分频系数以便进行分频,得到所需的频率。音调编码器模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity ydbmq isport(index:in integer range 0 to 15;code:out

20、 integer range 0 to 15;code1:out integer range 0 to 15;tone:out integer range 0 to 2047);end;architecture bhv of ydbmq isbeginprocess(index)begin case index iswhen 0 =tone=2047;code=0;code1tone=1091;code=1;code1tone=1196;code=2;code1tone=1289;code=3;code1tone=1331;code=4;code1tone=1409;code=5;code1t

21、one=1479;code=6;code1tone=1541;code=7;code1tone=1569;code=1;code1tone=1621;code=2;code1tone=1668;code=3;code1tone=1689;code=4;code1tone=1728;code=5;code1tone=1763;code=6;code1tone=1794;code=7;code1NULL;end case;end process;end ;2. 音调编码器模块的仿真图图3-4 音调发生器模块的仿真波形图在此程序中index为音乐节拍产生模块输出的音符数据,经过翻译后将tone输出到

22、数控分频模块为其提供分频系数的初始值,code为数码管显示的字符数,应用模式5,所以直接输出音符的二进制值,code1为高音阶指示信号,当code1为是说明输出为高音阶的音符。通过仿真图可以清楚地看到结果。3. 音调编码器模块生成的逻辑器件图3-5 音调发生器电路模块生成器件3.3.3分频器电路模块1. 分频器模块该编码模块的作用为将12MHZ的时钟信号分频出4HZ的时钟信号,从而实现只用一个时钟信号控制电路。分频器模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity dd isport(clk:in std_logic;d:bu

23、ffer std_logic);end;architecture bhv of dd isbegin process(clk)variable count4:integer range 0 to 1500000;begin if clkevent and clk=1thencount4:=count4+1;if count4=1500000 then d=not d;count4:=0;end if;end if;end process;end;2. 分频器模块的仿真图图3-6 分频器模块的仿真波形图在此程序中clk为输入的12MHZ时钟信号,经过3M分频得到4HZ的时钟信号。3. 分频器模块

24、生成的逻辑器件图3-7 分频器电路模块生成器件3.3.4 手动自动选择模块1. 手动自动选择模块根据设计的要求,该简易乐曲演奏器能实现手动或自动演奏乐曲的功能。于是,可通过一个按键cs来进行自动与手动的选择,当cs按下时,乐曲自动演奏,其他情况下均为手动演奏乐曲,即可以通过按下其他的按键(与cs相连的按键除外)来控制不同的音符。与此同时,还需要一个复位信号rst来控制该演奏器是否工作,当rst为1时,停止演奏,为0时,可以演奏。以上提到的手动与自动的选择只能在rst为0时有效。手动自动选择模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;e

25、ntity bmux isport(d1,d2:in integer range 0 to 15;cs,rst:in std_logic;q:out integer range 0 to 15); end;architecture bhv of bmux isbegin process(cs,rst)beginif rst=1then qqqq=d1;end case;end if;end process;end;2. 手动自动选择模块的仿真图图3-8 分频器模块的仿真波形图此仿真图中输入cs代表手动自动演奏的选择端,输入rst代表整体复位端,输入d1、d2分别代表手动和自动演奏的音符,q为输

26、出端,由此仿真图可清楚的看到当rst=1时,不论选择的是手动还是自动,输出都为零,达到了整体复位的功能;当rst=0且cs=1时,自动演奏乐曲,因为q与d2的值相同;当rst=0且cs=0时,手动演奏乐曲,因为这时的q与d1的值相同,从而也达到了演奏方式选择的功能。3. 手动自动选择模块生成的逻辑器件图3-9 分频器电路模块生成器件3.3.5 数控分频器模块1. 数控分频器模块的功能该模块的clk端输入一个具有较高频率(本实验为12MHz)的信号,通过skfpq分频后由spks输出。由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲信号,为了便于驱动喇叭,需另加一个D触发器均衡其占空比,也即

27、作二分频处理。skfpq对clk输入信号的分频比由11位预置数tone10.0决定。spks的输出频率将决定每一音符的音调,这样分频计数器的预置数tone10.0与spks的输出频率就有了对应关系。数控分频器模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity skfpq isport(clk:in std_logic;tone:in integer range 0 to 2047;spks:out std_logic);end;architecture bhv of skfpq issignal preclk:std_logic

28、;signal fullspks:std_logic;begin process(clk)variable count:integer range 0 to 16;begin preclk=0;if count=12 then preclk=1;count:=0;elsif clkevent and clk=0thencount:=count+1;end if;end process;process(preclk,tone)variable count1:integer range 0 to 2047;begin if preclkevent and preclk=1then if count

29、1=2047 thencount1:=tone;fullspks=1;else count1:=count1+1;fullspks=0;end if;end if;end process;process(fullspks)variable count2:std_logic;beginif fullspksevent and fullspks=1 thencount2:=not count2;if count2=1 then spks=1;elsespks=0;end if;end if;end process;end;2. 数控分频器模块的仿真图图3-10 数控分频器模块的仿真波形图在此仿真图

30、中,输入clk是一个频率较大的时钟信号,输入tone代表着某个音符的分频初始值,输出spks则代表将输入clk先经过12次分频,再经过(预置数终值2048-tone)次分频,最终再进行二分频处理,而这个信号的频率就是我们需要演奏的音谱的频率,根据频率的不同,从而能通过喇叭听到不同的声音,实现音乐的播放。3. 数控分频器模块生成的逻辑器件图3-11 数控分频器电路模块生成器件3.4 顶层程序及仿真3.4.1 顶层程序利用元件例化把各个子模块组合起来,进行编译、下载,从而实现整体功能。它将音调发生器(ydfsq)模块、音调编码器(ydbmq)模块、分频器模块(dd)、手动自动选择(bmux)模块及

31、数控分频器(skfpq)模块连接起来。顶层的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity yybf isport(clk1:in std_logic;CS:in std_logic;RST:in std_logic;D2:in integer range 0 to 15;oup1:out std_logic;oup2:out integer range 0 to 15;oup3:out integer range 0 to 15);end;architecture bhv of yybf issignal s1: integer

32、 range 0 to 15;signal s2: integer range 0 to 15;signal s3: integer range 0 to 2047;signal d: std_logic;component ydfsq isport(clk:in std_logic;toneindex:out integer range 0 to 15);end component;component ydbmq isport(index:in integer range 0 to 15;code:out integer range 0 to 15;code1:out integer ran

33、ge 0 to 15;tone:out integer range 0 to 2047);end component;component bmux isport(d1,d2:in integer range 0 to 15;cs,rst:in std_logic;q:out integer range 0 to 15); end component;component skfpq isport(clk:in std_logic;tone:in integer range 0 to 2047;spks:out std_logic);end component;component dd ispor

34、t(clk:in std_logic;d:out std_logic);end component;beginu1: ydfsq port map(d,s1);u2:ydbmq port map(s2,oup2,oup3,s3);u3:bmux port map(s1,D2,CS,RST,s2);u4:skfpq port map(clk1,s3,oup1);u5:dd port map (clk1,d);end bhv;3.4.2 顶层原理仿真图图3-12 顶层原理仿真图3.5 硬件下载及实现输入程序并且编译无误,并且仿真无误后,便进行引脚锁定及程序下载,在进行引脚锁定时必须对照引脚锁定图进

35、行锁定,采用模式5其引脚锁定图如图3-13所示:图3-13模式5实验电路结构图根据需要,本设计采用模式5,这是因为数码管自带译码芯片,输出时只需输出数字的二进制数,因此不必直接输出数字的码型,这就方便了字符的输出。根据模式5上所对应的引脚号查表可以得出需要锁定的引脚号码。锁定完后如图 3-14所示:图3-14引脚锁定图cs键8为自动手动选择键,当cs=1时为手动,否则为自动;clk1 锁定clock0的12Mhz;oup2锁定译码管1;oup3锁定译码管2;rst锁定键3;oup1锁定扬声器;引脚锁定后执行programmer 下载程序至试验箱进行验证,经验证本次设计完成的设计基本正确,但是基

36、准时钟选取的不同演奏的效果不同。总结通过本次课程设计,深刻体会了VHDL设计的优势,通过强大的EDA工具和硬件描述语言使演奏电路很易实现。并且通过此次设计让我们把课本中的知识系统的联系起来,更加体会到模块式设计的方法所带来的方便和明了化。通过模块式的方法,可以将复杂的总程序分成几个模块各自分工执行,独立工作互不干扰。然后通过原理图将各个模块直接相连,或者用元件例化的方式,用VHDL语言进行描述,达到了统一化管理各个模块的作用。通过查找资料,与同学交流增强了我们自主学习的能力;了解到了声音音谱的发生规律,信号的频率与声音的关系,并且通过对基准频率的分频,来生成不同的声谱。从设计方面得知,在进行设

37、计时,应首先对各方面的资料进行综合,在基本原理的范围内进行模块式的分解和综合,最后达到设计的需求。这次设计使我对quartus的运用更加灵活,熟悉了对该软件从工程建立到程序下载执行各个步骤的操作,对以前学习上的不足得到了补充。总之,这次设计让我们学到了很多知识,为我们以后的学习奠定了基础。在课设的过程当中,不知不觉中增添了对专业课的学习兴趣,感觉我们学的东西终于与实际真正得结合起来了,学习的知识不再感觉枯燥乏味。尤其是当自己设计的音乐播放器发出声音的时候,心中的喜悦与自豪油然而生。最后,感谢老师的辛勤指导和严格要求。真诚地说一声:老师,您辛苦了! 参考文献1.Voknei A.Pedroni.

38、VHDL数字电路设计教程.电子工业出版社,2008.52.潘松,黄继业.EDA技术实用教程(第二版).科学出版社,2005.23.焦素敏.EDA应用技术.清华大学出版社,2002.44.徐向民.数字系统设计及VHDL实践.机械工业出版社,2007.105.刘江海.EDA技术课程设计.华中科技大学出版社,2009.5附录全部程序如下:音调发生器模块library ieee;use ieee.std_logic_1164.all; entity ydfsq isport(clk:in std_logic;toneindex:out integer range 0 to 15);end;archit

39、ecture bhv of ydfsq issignal counter:integer range 0 to 99; beginprocess(clk,counter)begin if counter=100 thencounter=0;elsif clkevent and clk=1then countertoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindexNULL;end case;end process;end;音调编码器模块library ieee;use ieee.std_logic_1164.all;entity ydbmq isport(index:in integer range 0 to 15;code:out integer range 0 to 15;code

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

当前位置:首页 > 研究报告 > 信息产业


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