基于fpga的闹钟系统的设计内容摘要:

: 基于 FPGA的闹钟系统的设计 6 ( 1)与其他的硬件描述语言相比, VHDL 具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。 强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 ( 2) VHDL 丰 富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。 ( 3) VHDL 语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。 符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。 ( 4)对于用 VHDL 完成的一个确定的设计,可以利用 EDA 工具进行逻辑综合和优化,并自动的把 VHDL 描述设计转变成门级网表。 ( 5) VHDL 对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最 终设计实现的目标器件是什么,而进行独立的设计。 Quartus II 开发环境 Quartus II 是 Altera 公司的综合性 PLD 开发软件,支持原理图、 VHDL、 VerilogHDL以及 AHDL( Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及 仿真器,可以完成从设计输入到硬件配置的完整 PLD 设计流程。 Quartus II 可以在 XP、 Linux 以及 Unix 上使用,除了可以使用 TC1 脚本完成设计流程外,提供了完善的用户图 形界面设计方式。 具有运行速度快,界面统一,功能集中,易学易用等特点。 Quartus II 支持 Altera 的 IP 核,包含了 LPM/MegaFunction 宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。 对第三方 EDA 工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方 EDA 工具。 此外, Quartus II 通过和 DSP Builder 工具与 Matlab/Simulink 相结合,可以方便地实现各种 DSP 应用系统;支持 Altera 的片上可编程系统( SOPC)开 发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 Maxplus II 作为 Altera 的上一代 PLD 设计软件,由于其出色的易用性而得到了广泛的应用。 目前 Altera 已经停止了对 Maxplus II 的更新支持, Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。 Altera 在 Quartus II 中包含了许多诸如SignalTap II、 Chip Editor 和 RTL Viewer 的设计辅助工具,集成了 SOPC 和 HardCopy设计流程,并且继承了 Maxplus II 友好的图形界面及简便的使用方法。 Altera Quartus II 作为一种可编程逻辑的设计环境 , 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。 Altera 的 Quartus II 可编程逻辑软件属于第四代 PLD 开发平台。 该平台支持一个工作组环境下的设计要求,其中包括支持基于 Inter的协作设计。 Quartus平台与 Cadence、基于 FPGA的闹钟系统的设计 7 ExemplarLogic、 MentorGraphics、 Synopsys 和 Synplicity 等 EDA 供应商的开发工具相兼容。 改进了软件的 LogicLock 模块设计功能,增添 了 FastFit 编译选项,推进了网络编辑性能,而且提升了调试能力。 支持 MAX7000/MAX3000 等乘积项器件。 本章小结 本章首先对现场可编程门阵列( FPGA)做了简要介绍,然后深入了讲述了 FPGA 内部结构及其特点,重点介绍了本设计要用到的 Cyclone II 系列 FPGA,然后详细说明了FPGA 的设计流程。 最后对 FPAG 的开发语言及开发软件平台 Quartus II 简单的介绍了一下,从而说明了 FPGA 整个设计流程的设计条件。 3. 闹钟 系统的设计 本文设计一个带闹钟功能的 24 小时计时器 ,要求能够利用按键实现对闹钟时间的设定并 在所设计闹钟时间到时进行闹钟提示, 能够利用按键实现“较时“较分”功能,随时对数码管的显示进行调整和较对。 闹钟系统的外部设计 针对系统需求进行硬件设计 :硬件部分主要包括综合计时电路、显示控制电路和调整控制电路。 它包括以下几个组成部分:① 显示屏,由 4 个七段数码管组成,用于显示当前时间 (时:分 )或设置的闹钟时间;② 数字键‘ 0’ ~‘ 9’,用于输入新的时间或新的闹钟时间;③ TIME(时间 )键,用于 确定新的时间设置;④ ALARM(闹钟 )键,用于确定新的闹钟时间设置,或显示已设置的闹钟时间;⑤ 扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声。 键盘输入设计 下面简要介绍一下系统的输入界面:系统的输入界面是有 0~9 十个数字按键和TIME 键和 ALARM 键组成。 由于系统输入校时时间和闹钟时间时候必须输入 0~9 这些数字,因此按键 0~9 专门用于输入数字。 TIME 键和 ALARM 键用于辅助设定当前时间和闹钟时间。 各操作流程如下: a)校时操作:在正常计时状态下直接按下 0~9 键,即 可进入校时状态,使用键 0~9输入新的时间,然后按 TIME 键,即可使新的时间设置生效,系统自动回到计时状态。 在输入过程中,输入数字在显示屏上从右到左依次显示。 例如,用户要设置 12: 34,则按顺序输入“ 1”,“ 2”,“ 3”,“ 4”,与之对应,显示屏上依次显示的信息为:“ 1”,“ 12”,“ 123”,“ 1234”。 在校时状态下,若有输入错误或要取消校时,停止输入,稍待 5s,不按任何键,即可回到计时状态。 b)设置闹铃时间:在计时状态下按下设置闹铃键( ALARM 键),即可显示当前所设定的闹钟时间。 在计时状态 下,用数字键 0~9 键输入新的时间,然后按“ ALARM”确认,即可使新设置的闹钟生效。 其他操作与校时操作流程一样。 基于 FPGA的闹钟系统的设计 8 系统输出部分 系统输出部分主要是显示电路模块,由 4 个七段数码管组成,用于显示当前时间 (时:分 )或设置的闹钟时间。 FPGA 内部部分模块设计与仿真 闹钟系统的控制器的设计 1.设计思路 控制器命名为 ALARM_CONTROLLER,其外部端口如图 3 所示。 图 3 控制器外部端口 各端口的作 用如下: CLK 为外部时钟信号, RESET 为复位信号。 当 KEY 为高电平( KEY=‘ 1’)时,表示用户按下数字键(“ 0”~“ 9”)。 当 ALARM_BUTTON 为高电平时,表示用户按下“ ALARM”键。 当 TIME_BUTTON 为高电平时 ,表示用户按下 “TIME”键。 当 LOAD_NEW_A 为高电平时,控制闹钟时间寄存器加载新的闹钟时间值。 当 LOAD_NEW_C 为高电平时,控制时钟计数器设置新的时间值。 当 SHOW_NEW_TIME 为高电平时,控制七 段数码显示电路显示新的时间值,即用户通过数字键输入的时间;否则,当 SHOW_NEW_TIME 为低电平时,根据 SHOW_A信号的值控制显示当前的时间或闹钟时间。 此时,当 SHOW_A 为高电平时,控制显示闹钟时间,否则,显示当前时间。 控制器的功能可以通过有限状态自动机( FSM)的方式来实现。 根据设计要求及端口设置,需要 5 个状态来实现: S0:表示电路初态即正常时钟计数状态。 S1:接收键盘输入状态。 在状态 S0 时用户按下数字键后进入此状态。 在此状态下,显示屏上显示的是用户键入的数字。 S2:设置新的闹钟时 间。 在状态 S1 时用用户按下 ALARM 键后进入此状态。 S3:设置新的计时器时间。 在状态 S1 时用户按下 TIME 键后进入此状态。 S4:显示闹钟时间。 在状态 S0 时用户直接按下 ALARM 键后进入此状态。 在此状态下,显示屏上显示的是所设置的闹钟时间。 请注意,在这个状态下,用户按下 ALARM键盘后,显示屏上保持显示闹钟时间,经过一段时间以后,再返回状态 S0 显示计时器基于 FPGA的闹钟系统的设计 9 时间。 控制器状态转换及控制输出表如下表 2 所示: 表 2 控制器状态转换及控制输出表 当前状态 控制输入(条件) 下一状态 控制输出(动作) S0 KEY=‘ 1’ S1 SHOW_NEW_TIME=‘ 1’ ALARM_BUTTON=‘ 1’ S4 SHOW_A=‘ 1’ 否则 S0 S1 KEY=‘ 1’ S1 SHOW_NEW_TIME=‘ 1’ ALARM_BUTTON=‘ 1’ S2 LOAD_NEW_A=‘ 1’ TIME_BUTTON=‘ 1’ S3 LOAD_NEW_C=‘ 1’ 否则(超时) 否 S1 SHOW_NEW_TIME=‘ 1’ 是 S0 S2 ALARM_BUTTON=‘ 1’ S2 LOAD_NEW_A=‘ 1’ 否则 S0 S3 TIME_BUTTON=‘ 1’ S3 LOAD_NEW_C=‘ 1’ 否则 S0 S4 ALARM_BUTTON=‘ 1’ S4 SHOW_A=‘ 1’ 否则(超时) 否 S4 SHOW_A=‘ 1’ 是 S0 表 2 中没有显示说明的控制信号赋值,表示信号的值为零。 例如在状态 S0,当信号 KEY=‘ 1’时, SHOW_NEW_TIME 的信号的赋值为‘ 1’,而其他信号 LOAD_NEW_A,LOAD_NEW_C 和 SHOW_A 的值此时都赋为‘ 0’。 另外,表中关于“超时”判断处理细节见 VHDL 源程序中的有关部分。 2.实现的程序 见附录 3. 仿真波形如图 4 所示 : 由波形图,我们可以看到,当 KEY 为高电平时,即用户按下数字键“ 0” ~“ 9”时, SHOW_NEW_TIME 同时也为高电平 ,即此时数码管显示用户通过数字键输入的时间 ,且用户输入新时间完毕后 ,按下 ALARM 键 ,同时 LOAD_NEW_A 为高电平 ,控制闹钟时间寄存器加载新的闹钟时间 . 基于 FPGA的闹钟系统的设计 10 图 4 控制器仿真波形 闹钟系统的译码器的 设计 1. 本模块的功能是将每次按下闹钟系统的数字键盘且产生的一个数字所对应的 10位二进制数据信号转换为 1 位十进制整数信号,以作为小时、分钟计数的 4 个数字之一,其外部端口如图 5 所示。 其中 KEYPAD为输入端口,接收 10位二进制数据信号; VALUE为输出端口,输出相应的 1 位十进制整数信号。 输入数据与与输出数据的译码关系见表3。 表 3 输出数据的译码关系 输入 0000000001 0000000010 0000000100 0000001000 0000010000 输出 0 1 2 3 4 输 入 0000100000 0001000000 0010000000 0100000000 1000000000 输出 5 6 7 8 9 图 5 译码器外部端口 2. 实现该模块的 VHDL 程序如下: ARCHITECTURE ART OF DECODER IS BEGIN WITH KEYPAD SELECT VALU。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。