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