当前位置:文档之家› 基于某FPGA的音乐播放器课程设计

基于某FPGA的音乐播放器课程设计

唐山学院EDA技术课程设计题目音乐播放器系 (部) 智能与信息工程学院班级姓名学号指导教师2016 年 12 月 22 日至 12 月 30 日共 2 周 2016年 12 月 31 日课程设计成绩评定表EDA技术课程设计任务书目录1.设计目的与要求.................................... 错误!未定义书签。

1.1.课程设计目的.................................. 错误!未定义书签。

1.2.课程设计要求.................................. 错误!未定义书签。

2.应用工具介绍...................................... 错误!未定义书签。

2.1.EDA技术介绍.................................. 错误!未定义书签。

2.2.Verilog HDL 语言介绍 (2)3.基本原理.......................................... 错误!未定义书签。

3.1.音调的控制 (4)3.2.音长的控制 (4)4.方案实现 (5)5.总结 (13)6.参考文献 (14)1.设计目的与要求1.1课程设计目的:1)加深对EDA技术的理解,掌握音乐播放器的工作原理2)了解怎样控制音调的高低变化和音长,从而完成乐曲的自动循环演奏。

3)培养自主学习、正确分析和解决问题的能力1.2课程设计要求:1)使用蜂鸣器播放音乐2)三首音乐以上3)数码管上显示当前播放的歌曲位置(第几首歌曲)4)能够暂停和开始5)能够选择上一首和下一首歌曲2.应用工具介绍作为当今最流行的计算机软件系统,EDA技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。

EDA可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。

2.1 EDA技术介绍EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。

EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。

综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。

综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。

也就是说,综合器是软件描述与硬件实现的一座桥梁。

综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。

在今天,EDA技术已经成为电子设计的普遍工具,无论设计芯片还是设计系统,没有EDA工具的支持,都是难以完成的。

EDA工具已经成为设计师必不可少的武器,起着越来越重要的作用。

从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用广泛、工具多样、软件功能强大。

EDA技术发展迅猛,完全可以用日新月异来描述。

EDA技术的应用广泛,现在已涉及到各行各业。

EDA水平不断提高,设计工具趋于完美的地步。

2.2 Verilog HDL语言介绍Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。

被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。

数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

作为一种通用化的硬件描述语言,Verilog HDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。

所有这些都使用同一种建模语言。

此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。

Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。

因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。

语言从C编程语言中继承了多种操作符和结构。

Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。

但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。

当然,完整的硬件描述语句足以对从最复杂的芯片到完整的电子系统进行描述。

Verilog HDL语言已经成为一种标准的硬件描述语言。

它具有以下特点:(1)作为一种多用途的硬件描述语言,它具有很好的易学性和易用性。

(2)Verilog HDL语言允许在同一个模块中进行不同抽象层次的描述。

(3)大多数逻辑综合工具都支持Verilog HDL,使得它成为设计人员的一个很好的选择。

(4)所有的制造厂商都提供了Verilog HDL的工艺库,用以支持仿真。

(5)Verilog HDL的程序语言接口拥有强大的功能,允许用户用C语言对部数据结构进行描述。

正是以上优点,使得Verilog HDL语言广泛流行。

下面是verilog的设计流程:Verilog的设计流程图3.基本原理音乐播放器的原理是这样的:组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声。

3.1音调的控制频率的高低决定了音调的高低。

音乐的十二平均率规定:每两个8度音(如简谱中的中音1与高音1)之间的频率相差一倍。

在两个8度音之间,又可分为12个半音,每两个半音的频率比为12:2。

另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音。

由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率,如表3.11所示:表3.11 简谱中的音名与频率的关系3.2音长的控制音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。

4.方案实现1、div_freqmodule div_freq(clk,rst_n,freq,clk_out);input clk; //50MHZinput rst_n;input [25:0] freq;output reg clk_out;`define NUM 25_000_000/freq-1reg[25:0] cnt;always (posedge clk or negedge rst_n)beginif(!rst_n)begincnt<=26'd0;clk_out<=1'b0;endelsebeginif(cnt<`NUM)begincnt<=cnt+1'b1;clk_out=clk_out;endelsebeginclk_out=~clk_out;cnt=26'd0;endendendendmodule2、selmodule sel(data,clk,rst_n,sel,show_data);input [23:0] data;input clk;input rst_n;output reg [2:0] sel;output reg [3:0] show_data;always (posedge clk or negedge rst_n)beginif(!rst_n)beginsel <= 3'b000;endelsebeginif(sel < 3'b101)sel <= sel + 1'b1;elsesel <= 3'b000;endendalways (*)begincase(sel)3'b000 :show_data = data[23:20];3'b001 :show_data = data[19:16];3'b010 :show_data = data[15:12];3'b011 :show_data = data[11:8];3'b100 :show_data = data[7:4];3'b101 :show_data = data[3:0];default : show_data = 4'hf;endcaseendendmodule3、segmodule seg(show_data,seg);input [3:0] show_data;output reg [7:0] seg;always (*)begincase(show_data)0 :seg = 8'b1100_0000;1 :seg = 8'b1111_1001;2 :seg = 8'b1010_0100;3 :seg = 8'b1011_0000;4 :seg = 8'b1001_1001;5 :seg = 8'b1001_0010;6 :seg = 8'b1000_0010;7 :seg = 8'b1111_1000;8 :seg = 8'b1000_0000;9 :seg = 8'b1001_0000;10 :seg = 8'b1000_1000;11 :seg = 8'b1000_0011;12 :seg = 8'b1100_0110;13 :seg = 8'b1010_0001;14 :seg = 8'b1000_0110;15 :seg = 8'b1000_1110;default : seg = 8'b1000_1110;endcaseendendmodule4、controllermodule controller (clk,rst_n,addr);input clk;input rst_n;output reg [8:0] addr;parameter T=12_500_000;reg [25:0] cnt;always (posedge clk or negedge rst_n) beginif(!rst_n)begincnt<=26'd0;addr<=8'd0;endelsebeginif(cnt<T-1)cnt<=cnt+1'b1;elsebegincnt<=26'd0;if(addr<255)addr<=addr+1'b1;elseaddr<=8'd0;endendendendmodule5、translatemodule translate(clk,rst_n,music_data,music_freq);input clk;input rst_n;input [21:0] music_data;output reg [25:0] music_freq;always (posedge clk or negedge rst_n)beginif(!rst_n)music_freq<=26'd0;elsecase(music_data)1:music_freq<=26'd523;//zhongyin 2:music_freq<=26'd587;3:music_freq<=26'd659;4:music_freq<=26'd699;5:music_freq<=26'd392;6:music_freq<=26'd880;7:music_freq<=26'd987;8:music_freq<=26'd261;//diyin9:music_freq<=26'd293;10:music_freq<=26'd329;11:music_freq<=26'd349;12:music_freq<=26'd391;13:music_freq<=26'd440;14:music_freq<=26'd493;15:music_freq<=26'd1046;//gaoyin 16:music_freq<=26'd1174;17:music_freq<=26'd1318;18:music_freq<=26'd1396;19:music_freq<=26'd1567;20:music_freq<=26'd1760;21:music_freq<=26'd1975;default:music_freq<=26'd0;endcaseendendmodule6、shumaguanmodule shumaguan(data,clk,rst_n,sel,seg);input [23:0] data;input clk;input rst_n;output [2:0] sel;output [7:0] seg;wire clk_1k;wire [3:0] show_data;div_freq div_freq_dut(.clk(clk),.rst_n(rst_n),.freq(1_000),.clk_out(clk_1k));sel sel_dut(.data(data),.clk(clk_1k),.rst_n(rst_n),.sel(sel),.show_data(show_data));seg seg_dut(.show_data(show_data),.seg(seg));endmodule5.总结其实,音乐播放器用FPGA来实现是很简单的。

相关主题