资源描述
\
唐 山 学 院
《EDA技术》 课 程 设 计
题 目 音乐播放器
系 (部) 智能与信息工程学院
班 级 14电信2班
姓 名 张洪达
学 号
指导教师 魏明哲 张银蒲
2016 年 12 月 19 日至 12月 30 日 共 2 周
2016年 12 月 30 日
《EDA技术》 课程设计任务书
一、设计题目、内容及要求
1. 设计题目:《音乐播放器》
设计内容:
1. 使用蜂鸣器播放音乐
2. 三首音乐以上
3. 数码管上显示当前播放的歌曲位置(第几首歌曲)
2. 设计要求:
(1) 根据任务要求确定电路各功能模块;
(2) 写出设计程序;
(3) 给出时序仿真结果;
(4) 最后要有设计总结。
二、设计原始资料
QuartusⅡ软件;EDA实验箱;计算机一台;
三、要求的设计成果(课程设计说明书、设计实物、图纸等)
课程设计说明书1份,不少于2000字,应包含设计原理分析、相关软件介绍、仿真波形分析,实验箱下载验证等。
四、进程安排
周一、二:查找资料,进行方案论证;
周三、四:编写程序、完成模块仿真;
周五、一:硬件调试与完善;
周二、三:设计说明书的撰写与修改;
周四、五:答辩。
五、主要参考资料
[1] 潘松,黄继业,潘明.《EDA技术实用教程》——Verilog HDL版(第五版).科学出版社,2013.11
[2] 潘松,黄继业.《EDA技术实用教程》(第二版).科学出版社,2005.2
[3] 焦素敏.《EDA应用技术》.清华大学出版社,2002.4
指导教师(签名):
教研室主任(签名):
《EDA技术》成绩评定表
出勤
情况
出勤天数
缺勤天数
成
绩
评
定
出勤情况及设计过程表现(20分)
课设答辩(20分)
说明书(20分)
设计成果(40分)
总成绩(100分)
提问
(答辩)
问题
情况
综
合
评
定
指导教师签名:
年 月 日
\
目录
前言................................................................................................................................1
1设计原理分析.............................................................................................................2
1.1设计任务.................................................................................................................2
1.2设计要求.................................................................................................................2
2 软件介绍....................................................................................................................3
2.1 Verilog HDL相关介绍...........................................................................................3
2.2 QuartusⅡ相关介绍.............................................................................................3
3 总体设计....................................................................................................................5
3.1总体结构.................................................................................................................5
3.2设计原理.................................................................................................................5
4主要模块功能的设计.................................................................................................7
4.1 顶层模块................................................................................................................7
4.2数码管显示模块.....................................................................................................7
4.2.1分频器模块........................................................................................................7
4.2.2位选模块............................................................................................................8
4.2.3滚动模块............................................................................................................8
4.2.4转换模块............................................................................................................9
4.3 蜂鸣器块................................................................................................................9
4.3.1选址模块............................................................................................................9
4.3.2存储器模块......................................................................................................10
4.3.3译码器模块......................................................................................................10
4.3.4显示控制模块..................................................................................................11
5 程序调试运行..........................................................................................................12
5.1 seg7_drive的验证.................................................................................................12
5.2:beep的软件验证................................................................................................13
6 硬件仿真..................................................................................................................15
6.1引脚设置...............................................................................................................15
6.2硬件调试...............................................................................................................15
7 总结..........................................................................................................................17
参考文献......................................................................................................................18
附录..............................................................................................................................19
\
前言
随着电子技术的飞速发展,微电子技术的进步主要表现在大规模集成电路加工技术即半导体工艺技术的发展上,使得本征半导体的工艺水平的线宽已经达到了60nm,并在不断地缩小,面在硅片单位面积上,集成了更多的晶体管。集成电路设计正在不断地向超大规模,极低功耗和超高速的方向发展,电子产品的功能越来越强大,体积越来越小,功耗越来越低。
顺应电子技术的发展趋势,可编程逻辑器件和EDA技术使设计方法发生了质的变化。把以前“电路设计+硬件搭试+调试焊接”转化为“功能设计+软件模拟+仿真下载”。利用EDA开发平台,采用可编程逻辑器件FPGA使硬件的功能可通过编程来实现,这种新的基于芯片的设计方法能够使设计者有更多机会充分发挥创造性思维,实现多种复杂数字逻辑系统的功能,将原来由电路板设计完成的工作放到芯片的设计中进行,减少了连线和体积,提高了集成度,降低了干扰,大大减轻了电路设计和PCB设计的工作量和难度,增强了设计的灵活性,有效地提高了工作效率,增加了系统的可靠性和稳定性,提高了技术指标。
这些技术使得各种电子产品迅速的进入了我们的生活,我们处在一个被电子产品深度包围的时代,在一个普通老百姓的家里,衣食住行,每一个产品的诞生都离不开EDA技术,从彩色电视机,到智能冰箱,到全自动洗衣机,电饭煲,到微波炉,电磁炉,电子琴,再到个人随身用的手机,MP3音乐播放器都需要EDA技术提供支持。
本文应用Verilog HDL硬件描述语言,设计一个音乐播放器,它能将预先设置存储好的乐曲自动播放出来,下面对乐曲播放电路的设计与实现中涉及的EDA技术,以及EDA技术中常用的开发器件FPGA可编程逻辑器件,开发语言Verilog HDL以及开发软件Quartus Ⅱ作简单介绍。
1 设计原理分析
1.1设计任务
本课题要求设计音乐播放器,能实现基本的播放音乐的功能。
1.2设计要求
设计一个简易的音乐播放系统,使其下载到电路板上使,能使蜂鸣器播放音乐。
在可以使蜂鸣器播放音乐的基础上,增加播放音乐的数量,要求播放的音乐在三首以上。
在数码管上显示当前播放的音乐是第几首,并使播放的音乐在数码管显示屏上进行滚动(例如,当播放第一首歌曲使,数码管显示000001,并且1由右向左依次显示,其余位置为0),当蜂鸣器播放下一首歌时,数码管的显示可以立即加一,并且仍然由右向左滚动。
2 软件介绍
2.1 Verilog HDL相关介绍
Verilog HDL是一种硬件描述语言(HDL:Hardware Discription Language),是一种用文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。 Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。现在,随着系统级FPGA以及片上系统的出现,软硬件协同设计和系统设计变得越来越重要。传统意义上的硬件设计越来越倾向于与系统设计和软件设计相结合。
2.2 QuartusⅡ相关介绍
Quartus II 是Alera公司推出的一款功能强大,兼容性最好的EDA工具软件。该软件界面友好、使用便捷、功能强大,是一个完全集成化的可编程逻辑设计环境,具有开放性、与结构无关、多平台完全集成化丰富的设计库、模块化工具、支持多种硬件描述语言及有多种高级编程语言接口等特点。Quartus II是Altera公司推出的CPLD/FPGA开发工具,Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片平面布局连线编辑;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。
QuanusⅡ设计的主要流程有:创建工程、设计输入、编译、仿真验证、下载,其进行数字电路设计的一般流程如图1-1所示。
图1-1 QuanusⅡ一般流程图
当我们安装完成QuartusⅡ后,双击桌面上的QuartusⅡ图标,迎接我们的就是图1-2所示的开发环境。
图1-2 QuartusⅡ开发环境
这个环境包含了几部分内容:最上面的菜单项和工具栏,左边的两个窗口为工程浏览窗口和进度窗口,下面的窗口为信息窗口。利用QuartusⅡ进行原理图设计的优点是,设计者不必具有许多诸如编译技术、硬件语言等新知识就能迅速入门,完成较大规模的电路系统设计
3 总体设计
3.1总体结构
音乐播放器的系统方框图如图3-1所示,本设计是一种采用FPGA芯片进行音乐播放器,主要由蜂鸣器模块、数码管显示控制模块、译码器模块、存储器模块等模块组成。
Beep
图3-1 设计框图
3.2设计原理
根据设计要求,系统的输入信号:时钟脉冲clk,复位信号rst_n;输出信号:音乐播放器播放的音乐beep,控制数码管的seg和sel。声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上蜂鸣器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不用音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个重要因素。
每个音符对应的频率如下图3-2所示:
图3-2 每个音符对应的频率
4主要模块功能的设计
4.1 顶层模块
顶层模块只要是实现通过FPGA中的结构建模,把每个模块例化过来,将每个模块连接起来。其产生原理是:命名顶层文件名为beep,通过例化把选址模块controller,存储器模块my_rom,乐谱产生模块translate,分频模块dir_freq,显示控制模块show_controller,数码管seg7_drive连接起来,以实现让蜂鸣器播放三首以上音乐,且数码管循环显示当前所播放音乐为第几首。
4.2数码管显示模块
数码管是一种发光的半导体器件,其基本单元式发光二极管。数码管可分为七段数码管和八段数码管,八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP。
数码管特点:1.一个数码管可表示任意一个4位二进制;
2.可分共阴和共阳且本开发板上低电平有效
3.可动态,静态显示;
4.动态扫描频率为1KHZ;
5.根据视觉暂留效果可显示数字。
数码管的实现原理:输入信号为:时钟脉冲clk,复位信号rst_n,位选信号sel,段码seg.依次经过分频器模块,滚动模块,位选模块,转换模块来实现。
下图为共阴极数码管的电路图和引脚图:
图4-1 共阴极数码管
4.2.1分频器模块
分频器模块的功能为产生所需要的频率。其原理是系统输入信号时钟脉冲clk,复位信号rst_n。
例如:频率是1MHZ,则周期是1000ns,如果占空比为50%,则高低电平每500ns 变反一次。如果设所需脉冲频率为freq,则得到所要脉冲的计数个数NUM为:
实现框图如图4-2所示:
4-2 分频器模块实现框图
4.2.2位选模块
位选模块的功能是用来控制那个数码管亮灭。要使数码管同时亮,可以先让第一个数码管亮,在让第一个数码管灭,第二个数码管亮,因为人眼视觉暂留效果,只要每个数码管灭的时间足够短,我们就可以看到六个数码管是同时亮着的。
其产生原理:系统的输入信号有:时钟脉冲clk,复位信号rst_n,6个数码管可显示的24位数data;系统输出信号有:控制那个数码管亮灭的位选信号sel,每个数码管显示的4位二进制数show_data。当每个时钟上升沿到来时,位选信号初始为3’b000,位选信号每到上升沿来时加一,直到位选信号等于5。且第零个数码管输出show_data为data的[23:20]位,第一个数码管输出show_data为data的[19:16]位,第二个数码管输出show_data为data的[15:12]位,第三个数码管输出show_data为data的[11:8]位,第四个数码管输出show_data为data的[7:4]位,第五个数码管输出show_data为data的[3:0]位。
实现框图如图4-3所示:
4-3 位选模块实现框图
4.2.3滚动模块
滚动模块功能是使音乐播放器所播放的第几首歌的数字在数码管上显示,并由右向左滚动,且其余位置显示0。
其产生原理:该模块输入信号:时钟脉冲clk,复位信号rst_n,要输出的当前歌曲位置data2;输出信号:6个数码管要显示的24位数data.
当要输出第一首歌位置时,应使初始data<=24’h000001,下一秒使data<=24’000010。即每增加一秒让data输出的1左移一位。
实现框图如图4-4所示:
4-4 滚动模块实现框图
4.2.4转换模块
转换模块功能为把数码管要显示的四位二进制数转换成七段数码管的段码。
其产生原理:该模块的输入信号:数码管要显示的四位二进制数show_data;输出信号:七段数码管的段码seg。例:当show_data=0时seg=8b1100_0000;
实现框图如图4-5所示:
4-5 转换模块实现框图
4.3 蜂鸣器模块
蜂鸣器模块功能是实现让蜂鸣器播放三首以上的乐曲。
其实现原理:输入信号为时钟信号clk和复位信号rst_n,中间经过选址模块,存储器模块,乐谱产生模块,显示控制模块,以及数码管显示模块,输出信号为音符对应的频率信号beep(clk_out)和数码管显示信号seg和sel。
4.3.1选址模块
选址模块功能为程序存储器rom中所存储的数据分配地址。
其实现原理:输入信号clk,rst_n;输出信号addr。每一个时钟上升沿到来时,先判断时间是否已经记满到12.5ms,若已记满,再判断地址是否小于255,若小于,则地址加1,直到加到255,反复循环。
实现模块如图4-6所示:
图4-6 选址模块实现框图
4.3.2存储器模块
存储器模块功能式实现对音乐音符的存储,每个音符对应一个地址,地址来源于选址模块的地址。
其实现原理:输入信号clk,addr,输出信号为q,将所需要的乐谱音符存入到存储器my_rom中,然后将存储音符输出。
例如在存储器的0-64存储两只老虎的音符:
图4-7 存储器的0-64存储两只老虎的音符
实现模块如图4-8所示:
4-8 存储器模块实现框图
4.3.3译码器模块
译码器模块功能为将存储器输出的音符译码成每个音符所对应的频率输出给分频器模块。
其实现原理:输入信号为时钟信号clk,复位信号rst_n,音符信号music_data。
输出信号为music_freq信号。在每一个时钟上升沿到来之后,经过一个case,endcase选择语句,对music_data进行选择,输出一个对应音符的频率。
实现模块如图4-9所示:
4-9 译码器模块实现框图
4.3.4显示控制模块
显示控制模块功能为将显示的歌曲数目对应的显示在七段数码管,让七段数码管的数据循环显示。
其实现原理:输入信号为时钟信号clk,复位信号rst_n, 地址信号addr。输出信号为输入到数码管的数据显示信号data1。在每一个时钟信号到来之后,通过if语句的嵌套语句来判断输入信号的地址addr来决定输出给数码管的数据data1,再通过例化与数码管显示模块连接起来。
实现模块如图4-10所示:
4-10 显示控制模块实现框图
5 程序调试运行
5.1 seg7_drive的验证
激励程序如下:
`timescale 1ns/1ps
module seg7_drive_tb;
reg clk;
reg rst_n;
reg [23:0] data;
wire [2:0] sel;
wire [7:0]seg;
initial
begin
clk=1b1;
rst_n=1b0;
data=24h234567;
#200.1
rst_n=1b1;
#10_000
$stop;
end
always #10 clk=~clk;
seg7_drive seg7_drive_dut(
.clk(clk),
.rst_n(rst_n),
.data(data),
.sel(sel),
.seg(seg)
);
endmodule
仿真图如图5-1所示:
5-1 seg7_drive仿真框图
5.2:beep的软件验证
激励程序程序如下:
`timescale 1ns/1ps
module controller_tb;
reg clk;
reg rst_n;
reg en;
wire [7:0] addr;
initial
begin
clk=1b1;
rst_n=1b0;
en=1b0;
#200.1
rst_n=1b1;
#234
en=1b1;
#3000
en=1b0;
#2000
en=1b1;
#4000
$stop;
end
always #10 clk=~clk;
controller controller_dut(
.clk(clk),
.rst_n(rst_n),
.addr(addr),
.en(en)
);
endmodule
仿真图如图5-2所示:
5-2 beep的仿真框图
6 硬件仿真
6.1引脚设置
输入信号是时钟信号clk,复位信号rst_n,输出信号为频率信号beep,数码管控制信号sel,和数码管显示信号seg。
做硬件验证之前需要清楚实验板上各键与各信号的链接情况,参照资料得出本设计中各引脚的对应情况如下。引脚设置如图6-1所示:
图6-1 引脚设置图
6.2硬件调试
本设计采用Quartus II软件进行仿真设计,Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 经过了上面的步骤,我们已经完成了VerilogHDL代码的编译。这就是说我们已经在逻辑上完成了一个实现了我们所需要功能的芯片,当然,前提是代码是正确的。编写VerilogHDL进而进行编译的目的是为了能够最终使我们的FPGA芯片具有我们所需要的功能,那么这就需要将我们实现的那个逻辑上的芯片与实际的FPGA芯片结合起来。其实完成上面的工作很简单,只需要将我们的那个逻辑上的实体的管脚与FPGA芯片的管脚进行绑定就可以了。各个单元模块完成后,即可将分模块和顶层模块进行仿真测试,同时可根据设计要求加入测试输入条件。仿真后得到的相应输出结果与预先的结果想比较,若不相符,则应修改设计,直到相符为止。为了仿真得到明显的效果,最好能能下载到带数码管的试验想上进行直接的数字观察。图6-2是最终调试结果。
图6-2 硬件调试图
蜂鸣器播放音乐,数码管显示播放的是第几首音乐,并且数字进行滚动。
7 总结
这次课程设计是音乐播放器,通过这次课程设计对EDA技术有了更进一步的熟悉。Verilog HDL是EDA技术的重要组成部分,其具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化、结构化设计方面,表现了强大的生命力和应用潜力。其主要的也是最大的优点就在于设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。
本次课程设计至此已经接近尾声,在这两周的学习和程序设计中,我的收获颇丰。设计的核心内容就是QuartusⅡ环境中,利用Verilog HDL语言设计出基于FPGA的音乐播放器。为期两周的EDA课程设计已经结束,两周前我们还是处于懵懂时期,对FPGA没有很深入的了解。通过这两周老师的辛勤教导,还有自己的不懈努力,终于完成最后老师安排的任务。通过这两周对Verilog HDL语言的学习,对EDA技术有了更深刻的了解。在本次课程设计中老师不仅教会了我们使用QuartusⅡ软件编写程序和编写程序时的思考方法,从中我还了解到了FPGA的就业前景,对未来要从事的行业和社会现状有了更深入的了解。这些是在我们平时的学习中不能够学到的。
在学习的最初,老师只是给我们讲解一些简单Verilog HDL的小程序,使其实现简单的功能,然后逐渐深入,一环扣一环的给我们讲解最终课设需要用到的知识,使得原本对于我们来说不太可能完成的任务变成可能。这也使我们在无形中便加深了对Verilog HDL语言的了解及运用能力,对课本以及以前学过的知识有了一个更好的总结与理解。在学习中,我认识到,在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为交流提供了方便,为以后编程打下基础。
本次的课程设计将各个单一的模块实现其功能后,学会通过原理图或顶层文件把各模块连接,从而实现音乐播放器能成功播放音乐。课设注重的不仅是把理论知识巩固,而且应把理论和实际相结合,把知识应用到生活中。在课设过程中,遇到了不少问题,数码管无法正常显示,蜂鸣器不能正常播放音乐等等。通过的对源代码的修改,发现了一些易忽略的细节。课设考验的是思维逻辑能力,对知识的灵活应用,当然,合作精神是不可或缺的。课设时间不长,要在短时间内完成绝不是个人力量能达到的,还要同学和老师的帮助。
学校给我们安排课程设计,大大地加深了我们对理论知识的理解,同时有意识的培养了我们的创新思想。我想这类似的课程设计是为我们提供了良好的实践平台。也希望学校能多给我们安排这种学习的机会,我相信我们会从中学到很多对我们有用的知识和经验。
参考文献
[1] 潘松,黄继业,潘明.《EDA技术实用教程》——Verilog HDL版(第五版) [M].科学出版社,2013.11
[2] 潘松,黄继业.《EDA技术实用教程》(第二版)[M].科学出版社,2005.2
[3] 焦素敏.《EDA应用技术》[M].清华大学出版社,2002.4
[4] 江国强.EDA技术与应用[M].电子工业出版社[M].310-312
[5] 王金明.《数字系统设计与Verilog HDL 》[M].北京.电子工业出版社,2011
[6] 夏宇闻.《Verilog数字系统设计教程》 [M].北京:北京航天航空大学出版社,2008
附录
顶层设计模块(蜂鸣器模块)
module beep(clk,rst_n,beep,sel,seg);
input clk;
input rst_n;
output beep;
output [7:0] seg;
output [2:0] sel;
wire [23:0] data1;
wire [7:0] addr;
wire [7:0] music_data;
wire [25:0] music_freq;
controller controller_dut(
.clk(clk),
.rst_n(rst_n),
.addr(addr)
);
my_rom my_rom_inst (
.address (addr),
.clock (clk),
.q(music_data)
);
translate translate_dut(
.clk(clk),
.rst_n(rst_n),
.music_data(music_data),
.music_freq(music_freq)
);
dir_freq dir_freq_dut(
.clk(clk),
.rst_n(rst_n),
.freq(music_freq),
.clk_out(beep)
);
show_controller show_controller_dut(
.clk(clk),
.rst_n(rst_n),
.addr(addr),
.data1(data1)
);
seg7_drive seg7_drive_dut(
.clk(clk),
.rst_n(rst_n),
.sel(sel),
.seg(seg),
.data2
展开阅读全文
相关搜索