基于某FPGA地音乐播放器设计.pdf

上传人:tbuqq 文档编号:5488757 上传时间:2020-05-23 格式:PDF 页数:37 大小:1.11MB
返回 下载 相关 举报
基于某FPGA地音乐播放器设计.pdf_第1页
第1页 / 共37页
基于某FPGA地音乐播放器设计.pdf_第2页
第2页 / 共37页
基于某FPGA地音乐播放器设计.pdf_第3页
第3页 / 共37页
基于某FPGA地音乐播放器设计.pdf_第4页
第4页 / 共37页
基于某FPGA地音乐播放器设计.pdf_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《基于某FPGA地音乐播放器设计.pdf》由会员分享,可在线阅读,更多相关《基于某FPGA地音乐播放器设计.pdf(37页珍藏版)》请在三一文库上搜索。

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.11 2 潘松,黄继业.EDA 技术实用教程(第二版).科学出版社,

3、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相关

4、介绍 .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 参考文献

5、 18 附录19 实用标准 文档大全 前言 随着电子技术的飞速发展, 微电子技术的进步主要表现在大规模集成电路加 工技术即半导体工艺技术的发展上, 使得本征半导体的工艺水平的线宽已经达到 了 60nm,并在不断地缩小,面在硅片单位面积上,集成了更多的晶体管。集成 电路设计正在不断地向超大规模,极低功耗和超高速的方向发展, 电子产品的功 能越来越强大,体积越来越小,功耗越来越低。 顺应电子技术的发展趋势,可编程逻辑器件和EDA 技术使设计方法发生了 质的变化。把以前 “ 电路设计 +硬件搭试 +调试焊接 ” 转化为 “ 功能设计 +软件模拟 + 仿真下载 ” 。利用 EDA 开发平台,采用可编程

6、逻辑器件FPGA 使硬件的功能可通 过编程来实现,这种新的基于芯片的设计方法能够使设计者有更多机会充分发挥 创造性思维, 实现多种复杂数字逻辑系统的功能,将原来由电路板设计完成的工 作放到芯片的设计中进行,减少了连线和体积,提高了集成度,降低了干扰,大 大减轻了电路设计和PCB 设计的工作量和难度,增强了设计的灵活性,有效地 提高了工作效率,增加了系统的可靠性和稳定性,提高了技术指标。 这些技术使得各种电子产品迅速的进入了我们的生活,我们处在一个被电子 产品深度包围的时代, 在一个普通老百姓的家里, 衣食住行, 每一个产品的诞生 都离不开 EDA 技术,从彩色电视机,到智能冰箱,到全自动洗衣机

7、,电饭煲, 到微波炉,电磁炉,电子琴,再到个人随身用的手机,MP3 音乐播放器都需要 EDA 技术提供支持。 本文应用 Verilog HDL 硬件描述语言,设计一个音乐播放器,它能将预先设 置存储好的乐曲自动播放出来,下面对乐曲播放电路的设计与实现中涉及的 EDA 技术,以及 EDA 技术中常用的开发器件FPGA 可编程逻辑器件, 开发语言 Verilog HDL 以及开发软件 Quartus 作简单介绍。 实用标准 文档大全 1 设计原理分析 1.1 设计任务 本课题要求设计音乐播放器,能实现基本的播放音乐的功能。 1.2 设计要求 设计一个简易的音乐播放系统, 使其下载到电路板上使, 能

8、使蜂鸣器播放音 乐。 在可以使蜂鸣器播放音乐的基础上,增加播放音乐的数量, 要求播放的音乐 在三首以上。 在数码管上显示当前播放的音乐是第几首,并使播放的音乐在数码管显示屏 上进行滚动(例如,当播放第一首歌曲使,数码管显示000001,并且 1 由右向 左依次显示,其余位置为0) ,当蜂鸣器播放下一首歌时,数码管的显示可以立 即加一,并且仍然由右向左滚动。 实用标准 文档大全 2 软件介绍 2.1 Verilog HDL 相关介绍 Verilog HDL 是一种硬件描述语言( HDL:Hardware Discription Language ) , 是一种用文本形式来描述数字系统硬件的结构和

9、行为的语言,用它可以表示逻辑 电路图、逻辑表达式, 还可以表示数字逻辑系统所完成的逻辑功能。用于从算法 级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象 的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描 述,并可在相同描述中显式地进行时序建模。Verilog HDL 语言具有下述描述能 力:设计的行为特性、 设计的数据流特性、 设计的结构组成以及包含响应监控和 设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外, Verilog HDL 语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设 计外部访问设计, 包括模拟的具体控制

10、和运行。Verilog HDL 语言不仅定义了语 法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编 写的模型能够使用Verilog 仿真器进行验证。语言从C 编程语言中继承了多种操 作符和结构。Verilog HDL 提供了扩展的建模能力, 其中许多扩展最初很难理解。 但是, Verilog HDL 语言的核心子集非常易于学习和使用,这对大多数建模应用 来说已经足够。当然 ,完整的硬件描述语言足以对从最复杂的芯片到完整的电子 系统进行描述。Verilog HDL 和 VHDL 是目前世界上最流行的两种硬件描述语言, 都是在 20 世纪 80 年代中期开发出来的。 现在,随

11、着系统级 FPGA 以及片上系统 的出现,软硬件协同设计和系统设计变得越来越重要。传统意义上的硬件设计越 来越倾向于与系统设计和软件设计相结合。 2.2 Quartus相关介绍 Quartus II 是 Alera 公司推出的一款功能强大, 兼容性最好的 EDA 工具软件。 该软件界面友好、 使用便捷、 功能强大, 是一个完全集成化的可编程逻辑设计环 境,具有开放性、与结构无关、多平台完全集成化丰富的设计库、模块化工具、 支持多种硬件描述语言及有多种高级编程语言接口等特点。Quartus II 是 Altera 公司推出的 CPLD/FPGA 开发工具, Quartus II 提供了完全集成且

12、与电路结构无 关的开发包环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框 图、VerilogHDL 、AHDL 和 VHDL 完成电路描述, 并将其保存为设计实体文件; 芯片平面布局连线编辑; 功能强大的逻辑综合工具; 完备的电路功能仿真与时序 逻辑仿真工具;定时 /时序分析与关键路径延时分析;可使用SignalTap II 逻辑分 析工具进行嵌入式的逻辑分析; 支持软件源文件的添加和创建, 并将它们链接起 来生成编程文件; 使用组合编译方式可一次完成整体设计流程;自动定位编译错 误;高效的期间编程与验证工具;可读入标准的EDIF 网表文件、 VHDL 网表文 实用标准 文档大全

13、件和 Verilog 网表文件;能生成第三方 EDA 软件使用的 VHDL 网表文件和 Verilog 网表文件。 Quanus 设计的主要流程有: 创建工程、设计输入、编译、仿真验证、下载, 其进行数字电路设计的一般流程如图1-1 所示。 图 1-1 Quanus一般流程图 当我们安装完成 Quartus后,双击桌面上的Quartus图标,迎接我们的就 是图 1-2 所示的开发环境。 图 1-2 Quartus开发环境 这个环境包含了几部分内容: 最上面的菜单项和工具栏, 左边的两个窗口为 工程浏览窗口和进度窗口,下面的窗口为信息窗口。利用Quartus 进行原理图 设计的优点是, 设计者不

14、必具有许多诸如编译技术、硬件语言等新知识就能迅速 入门,完成较大规模的电路系统设计 输入设计项目:原理图VHDL代码 建立工作库文件夹 创建工程 存盘,注意原理图文本取名 选择目标器件 启动编译 建立仿真波形文件 仿真测试和波形分析 引脚锁定并编译 编程、下载配置 硬件测试 实用标准 文档大全 3 总体设计 3.1 总体结构 音乐播放器的系统方框图如图3-1 所示,本设计是一种采用FPGA 芯片进行 音乐播放器,主要由蜂鸣器模块、数码管显示控制模块、译码器模块、存储器模 块等模块组成。 图 3-1 设计框图 3.2 设计原理 根据设计要求,系统的输入信号: 时钟脉冲 clk, 复位信号 rst

15、_n; 输出信号: 音乐播放器播放的音乐beep ,控制数码管的seg和 sel。声音的频谱范围约在几 十到几千赫兹, 若能利用程序来控制FPGA 某个引脚输出一定频率的矩形波,接 上蜂鸣器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率, 要想 FPGA 发出不用音符的音调,实际上只要控制它输出相应音符的频率即可。 乐曲都是由一连串的音符组成, 因此按照乐曲的乐谱依次输出这些音符所对应的 频率,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐 曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即乐曲中 每个音符的发生频率及其持续时间是乐曲能够连续演奏的

16、两个重要因素。 每个音符对应的频率如下图3-2 所示: Beep 实用标准 文档大全 图 3-2 每个音符对应的频率 实用标准 文档大全 4 主要模块功能的设计 4.1 顶层模块 顶层模块只要是实现通过FPGA 中的结构建模, 把每个模块例化过来, 将每 个模块连接起来。其产生原理是:命名顶层文件名为beep, 通过例化把选址模块 controller,存储器模块 my_rom,乐谱产生模块 translate, 分频模块 dir_freq,显示控制 模块 show_controller,数码管 seg7_drive连接起来,以实现让蜂鸣器播放三首以上 音乐,且数码管循环显示当前所播放音乐为第

17、几首。 4.2 数码管显示模块 数码管是一种发光的半导体器件,其基本单元式发光二极管。 数码管可分为 七段数码管和八段数码管, 八段数码管比七段数码管多一个用于显示小数点的发 光二极管单元 DP。 数码管特点: 1.一个数码管可表示任意一个4 位二进制; 2.可分共阴和共阳且本开发板上低电平有效 3.可动态,静态显示; 4.动态扫描频率为 1KHZ; 5.根据视觉暂留效果可显示数字。 数码管的实现原理:输入信号为:时钟脉冲clk,复位信号 rst_n,位选信号 sel, 段码 seg. 依次经过分频器模块,滚动模块,位选模块,转换模块来实现。 下图为共阴极数码管的电路图和引脚图: 图 4-1

18、共阴极数码管 4.2.1 分频器模块 分频器模块的功能为产生所需要的频率。其原理是系统输入信号时钟脉冲 clk,复位信号 rst_n。 实用标准 文档大全 例如:频率是1MHZ, 则周期是1000ns, 如果占空比为50%,则高低电平每 500ns 变反一次。如果设所需脉冲频率为freq,则得到所要脉 冲的计数个数 NUM 为: 1 2 150 freq MHZ NUM 实现框图如图 4-2 所示: 4-2 分频器模块实现框图 4.2.2 位选模块 位选模块的功能是用来控制那个数码管亮灭。要使数码管同时亮, 可以先让 第一个数码管亮, 在让第一个数码管灭, 第二个数码管亮, 因为人眼视觉暂留效

19、 果, 只要每个数码管灭的时间足够短, 我们就可以看到六个数码管是同时亮着的。 其产生原理: 系统的输入信号有: 时钟脉冲 clk,复位信号 rst_n,6个数码管可 显示的 24 位数 data;系统输出信号有: 控制那个数码管亮灭的位选信号sel,每个 数码管显示的 4 位二进制数 show_data 。当每个时钟上升沿到来时,位选信号初 始为 3b000 ,位选信号每到上升沿来时加一,直到位选信号等于5。且第零个数 码管输出 show_data为 data的23:20位,第一个数码管输出show_data为 data的 19:16位,第二个数码管输出show_data为 data的15:

20、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. 当 要 输 出 第 一 首 歌 位 置 时 ,

21、应 使 初 始data=24h000001, 下 一 秒 使 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 蜂鸣器模块 蜂鸣器模块功能是实现让蜂鸣器播放三首以上的乐曲。 其实现

22、原理:输入信号为时钟信号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 选址模块

23、实现框图 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

24、_data 。 实用标准 文档大全 输出信号为 music_freq信号。 在每一个时钟上升沿到来之后, 经过一个 case , endcase选择语句,对 music_data进行选择,输出一个对应音符的频率。 实现模块如图 4-9 所示: 4-9 译码器模块实现框图 4.3.4 显示控制模块 显示控制模块功能为将显示的歌曲数目对应的显示在七段数码管,让七段数 码管的数据循环显示。 其实现原理: 输入信号为时钟信号clk,复位信号 rst_n, 地址信号 addr。输 出信号为输入到数码管的数据显示信号data1。在每一个时钟信号到来之后,通 过 if 语句的嵌套语句来判断输入信号的地址ad

25、dr 来决定输出给数码管的数据 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:0seg; initial begin clk=1b1; rst_n=1b0; data=24h234567; #200.1 rst_n=1b1; #10_000 $st

26、op; 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

27、; 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,输出信号为频率信

28、号beep,数码 管控制信号 sel,和数码管显示信号seg 。 做硬件验证之前需要清楚实验板上各键与各信号的链接情况,参照资料得出 本设计中各引脚的对应情况如下。引脚设置如图6-1 所示: 图 6-1 引脚设置图 6.2 硬件调试 本设计采用 Quartus II 软件进行仿真设计, Quartus II 是 Altera 公司的综合 性 PLD/FPGA 开发软件,支持原理图、 VHDL 、VerilogHDL 以及 AHDL (Altera Hardware Description Language )等多种设计输入形式, 内嵌自有的综合器以及仿 真器,可以完成从设计输入到硬件配置的完整

29、PLD 设计流程。 经过了上面的步 骤,我们已经完成了VerilogHDL 代码的编译。这就是说我们已经在逻辑上完成 了一个实现了我们所需要功能的芯片,当然,前提是代码是正确的。编写 VerilogHDL 进而进行编译的目的是为了能够最终使我们的FPGA 芯片具有我们 所需要的功能,那么这就需要将我们实现的那个逻辑上的芯片与实际的FPGA 芯 片结合起来。 其实完成上面的工作很简单, 只需要将我们的那个逻辑上的实体的 管脚与 FPGA 芯片的管脚进行绑定就可以了。各个单元模块完成后, 即可将分模 块和顶层模块进行仿真测试, 同时可根据设计要求加入测试输入条件。仿真后得 到的相应输出结果与预先的

30、结果想比较,若不相符, 则应修改设计, 直到相符为 实用标准 文档大全 止。为了仿真得到明显的效果, 最好能能下载到带数码管的试验想上进行直接的 数字观察。图 6-2 是最终调试结果。 图 6-2 硬件调试图 蜂鸣器播放音乐,数码管显示播放的是第几首音乐,并且数字进行滚动。 实用标准 文档大全 7 总结 这次课程设计是音乐播放器,通过这次课程设计对EDA 技术有了更进一步 的熟悉。Verilog HDL 是 EDA 技术的重要组成部分, 其具有与具体硬件电路无关 和与设计平台无关的特性, 并且具有良好的电路行为描述和系统描述的能力,并 在语言易读性和层次化、 结构化设计方面, 表现了强大的生命

31、力和应用潜力。其 主要的也是最大的优点就在于设计者可以专心致力于其功能的实现,而不需要对 不影响功能的与工艺有关的因素花费过多的时间和精力。 本次课程设计至此已经接近尾声,在这两周的学习和程序设计中, 我的收获 颇丰。设计的核心内容就是Quartus环境中,利用Verilog HDL 语言设计出基 于 FPGA 的音乐播放器。为期两周的EDA 课程设计已经结束,两周前我们还是 处于懵懂时期, 对 FPGA 没有很深入的了解。 通过这两周老师的辛勤教导,还有 自己的不懈努力,终于完成最后老师安排的任务。通过这两周对Verilog HDL 语 言的学习,对 EDA 技术有了更深刻的了解。在本次课程

32、设计中老师不仅教会了 我们使用 Quartus软件编写程序和编写程序时的思考方法,从中我还了解到了 FPGA 的就业前景,对未来要从事的行业和社会现状有了更深入的了解。这些是 在我们平时的学习中不能够学到的。 在学习的最初,老师只是给我们讲解一些简单Verilog HDL 的小程序,使其 实现简单的功能, 然后逐渐深入, 一环扣一环的给我们讲解最终课设需要用到的 知识,使得原本对于我们来说不太可能完成的任务变成可能。这也使我们在无形 中便加深了对 Verilog HDL 语言的了解及运用能力, 对课本以及以前学过的知识 有了一个更好的总结与理解。在学习中,我认识到,在设计程序时,不能妄想一 次

33、就将整个程序设计好, 反复修改、 不断改进是程序设计的必经之路,一个程序 的完美与否不仅仅是实现功能, 而应该让人一看就能明白你的思路,这样也为交 流提供了方便,为以后编程打下基础。 本次的课程设计将各个单一的模块实现其功能后,学会通过原理图或顶层文 件把各模块连接, 从而实现音乐播放器能成功播放音乐。课设注重的不仅是把理 论知识巩固,而且应把理论和实际相结合, 把知识应用到生活中。 在课设过程中, 遇到了不少问题, 数码管无法正常显示, 蜂鸣器不能正常播放音乐等等。通过的 对源代码的修改, 发现了一些易忽略的细节。 课设考验的是思维逻辑能力,对知 实用标准 文档大全 识的灵活应用,当然,合作

34、精神是不可或缺的。课设时间不长,要在短时间内完 成绝不是个人力量能达到的,还要同学和老师的帮助。 学校给我们安排课程设计, 大大地加深了我们对理论知识的理解,同时有意 识的培养了我们的创新思想。 我想这类似的课程设计是为我们提供了良好的实践 平台。也希望学校能多给我们安排这种学习的机会,我相信我们会从中学到很多 对我们有用的知识和经验。 参考文献 1 潘松,黄继业,潘明 EDA 技术实用教程 Verilog HDL 版(第五版)M 科学 出版社, 2013.11 2 潘松,黄继业 EDA 技术实用教程 (第二版) M 科学出版社,2005.2 3 焦素敏EDA 应用技术 M 清华大学出版社,2

35、002.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:

36、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_

37、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(data1) ); endmodule 选址模块 module controller(clk,rst_n

38、,addr); input clk; input rst_n; output reg 7:0 addr; parameter T =12_500_000; reg 25:0 cnt; always (posedge clk or negedge rst_n) begin if(!rst_n) begin cnt=26d0; addr=8d0; end 实用标准 文档大全 else begin if(cntT-1) cnt=cnt+1b1; else begin cnt =26d0; if(addr255) addr=addr+1b1; else addr=8d0; end end end en

39、dmodule 译码器模块 module translate(clk,rst_n,music_data,music_freq); input clk; input rst_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; else case(music_data) 11 : music_freq=26d261; 12 : music_freq=26d293; 13 : music_freq=26d

40、329; 14 : music_freq=26d349; 15 : music_freq=26d392; 16 : music_freq=26d440; 17 : music_freq=26d493; 实用标准 文档大全 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; 31 : music_freq=26d10

41、45; 32 : music_freq=26d1174; 33 : music_freq=26d1318; 34 : music_freq=26d1396; 35 : music_freq=26d1568; 36 : music_freq=26d1760; 37 : music_freq=26d1975; default : music_freq=26d0; endcase end endmodule 分频模块 module dir_freq(clk,rst_n,freq,clk_out); input clk; /50MHZ input rst_n; input 25:0 freq ; /输

42、入所要得到的脉冲的频率 output reg clk_out; define NUM 25_000_000/freq -1 /计算要得到所要脉冲的计数个数 reg 25:0 cnt; always (posedge clk or negedge rst_n) begin if(!rst_n) begin cnt=26d0; clk_out=1b1; end else begin 实用标准 文档大全 if(cntNUM) begin cnt=cnt+1b1; clk_out=clk_out; end else begin clk_out=clk_out; cnt=26d0; end end en

43、d 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 (posedge clk or negedge rst_n) begin if(!rst_n) num=4d1; else if(addr64) num=4d1; else if(addr128) num=4d2; else if(addr192) num=4d3; else num=4d4; 实用标准 文档大

44、全 end assign data1=20d0,num; endmodule 数码管显示模块(顶层设计模块) module seg7_drive(clk,rst_n,sel,seg,data2); input clk; input rst_n; input 23:0data2; output 2:0 sel; output 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)

45、, .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(show_data), .seg(seg) ); gundong gundong_dut( .clk(clk_1HZ), .rst_n(rst_n), .data2(data2), 实用标准 文档大全 .data(data) ); e

46、ndmodule 位选模块 module sel_controller(clk,rst_n,data,sel,show_data); input clk; input 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(!rst_n) begin sel=3b000; end else begin if(sel3b101) sel=sel+1b1; else sel=3b000; end end always (*

47、) 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 end endmodule 转换模块 module seg_controller(show_data,seg); input 3:0 show_data; output

48、 reg 7:0 seg; always (*) begin case(show_data) 0: seg=8b1100_0000; 1: seg=8b1111_1001; 2: seg=8b1010_0100; 3: seg=8b1011_0000; 4: seg=8b1001_1001; 5: seg=8b1001_0010; 6: seg=8b1000_0010; 7: seg=8b1111_1000; 8: seg=8b1000_0000; 9: seg=8b1001_0000; 10: seg=8b1000_1000; 11: seg=8b1000_0011; 12: seg=8b1

49、100_0110; 13: seg=8b1010_0001; 14: seg=8b1000_0110; 15: seg=8b1000_1110; default :seg=8b1000_1110; endcase end endmodule 滚动模块 module gundong(clk,rst_n,data2,data); input clk; input rst_n; parameter T1s=1_000; 实用标准 文档大全 output reg 23:0 data; input 23:0 data2; reg 2:0 state; reg 9:0cnt; always (posedge clk or negedge

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

当前位置:首页 > 其他


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