毕业设计(论文)基于VHDL语言的多功能数字钟设计_第1页
毕业设计(论文)基于VHDL语言的多功能数字钟设计_第2页
毕业设计(论文)基于VHDL语言的多功能数字钟设计_第3页
毕业设计(论文)基于VHDL语言的多功能数字钟设计_第4页
毕业设计(论文)基于VHDL语言的多功能数字钟设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 黄河科技学院毕业设计说明书 第 i 页 基于 vhdl 语言的多功能数字钟设计 摘 要 vhdl作为一种硬件描述语言,可用于数字电路与系统的描述、模拟和自动设计与 仿真等,是当今电子设计自动化的核心技术。 本文使用vhdl语言设计了一个数字时 钟电路,给出了设计该数字系统的流程和方法。本设计方法具有硬件描述能力强,设 计方法灵活,便于修改等优点,大大降低了数字系统设计的难度,提高了工作效率。 本设计采用eda技术,以硬件描述语言vhdl为系统逻辑描述手段设计文件,在 max+plus工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了 一个基于cpld的数字钟。 系统主芯片采用e

2、pm7128slc84,由时钟模块、控制模块、计时模块、数据译码 模块、显示以及报时模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下 载验证,本系统能够完成时、分、秒的分别显示,由按键输入进行数字钟的校时、清 零、启停功能。 关键词:硬件描述语言,vhdl,数字电路设计, 数字钟 黄河科技学院毕业设计说明书 第 ii 页 digital clock design based on the hardware description language(vhdl) author: 。 。 。 。 。 。 。 。 tutor: 。 。 。 。 。 。 。 。 abstract vhdl can

3、 be used to describe,simulate and digital system automatically. nowdays,it becomes a key technology in automatic electronic design. there is a lot of superiority in this description language.this article introduces the method and the process using vhdl to design a digital system by an example of dig

4、ital clock dasign. the result given in this paper shows that vhdl is one of the strongest tools in hardware description and it is a flexible among the design method. the method given in this paper can reduce the difficulty of digital system design and improve the work efficiency. the use of eda desi

5、gn technology, hardware-description language vhdl description logic means for the system design documents, in maxplusii tools environment, a top-down design, by the various modules together build a cpld-based digital clock. the main system chips used epm7128slc84, make up of the clock module, contro

6、l module, time module, data decoding module, display and broadcast module. after compiling the design and simulation procedures, the programmable logic device to download verification, the system can complete the hours, minutes and seconds respectively, using keys to modify, cleared , start and stop

7、 the digital clock. key words: hardware description language,vhdl, digital circuit design, digital clock 黄河科技学院毕业设计说明书 第 iii 页 目 录 1 绪论.1 1.1 课题背景 .1 1.2 本课题研究的内容 .1 2 总体设计方案.3 3 单元模块电路设计.4 3.1 时间显示电路模块设计 .4 3.2 按键及指示灯电路模块的设计 .5 3.3 蜂鸣器及有源晶振电路的设计 .7 3.4 cpld 编程下载电路的设计.8 3.5 电源电路的设计 .9 3.5.1 变压器次级电压估

8、算.9 3.5.2 变压器输入功率的计算.9 3.5.3 滤波电容参数的选取.10 3.6 epm7128slc84 器件介绍.10 4 cpld 编程设计.11 4.1 系统信号的定义及顶层模块.11 4.2 时钟节拍产生模块 .12 4.3 模式选择功能模块.14 4.4 快速时间设置功能模块 .16 4.5 秒、分、时计时与时间调整模块 .16 4.6 闹铃时间设置模块.18 4.7 闹铃与整点报时模块.19 4.8 七段显示译码模块 .20 4.9 led 显示模块 .22 黄河科技学院毕业设计说明书 第 iv 页 5 系统功能仿真.25 5.1 时钟节拍产生模块的仿真波形 .25 5

9、.2 模式选择功能模块的仿真波形 .26 5.3 闹铃设置功能模块的仿真波形 .27 5.4 七段译码功能模块的仿真波形 .28 5.5 led 显示功能模块的仿真波形 .30 5.6 系统总体功能仿真波形 .31 总 结.32 致 谢.33 参考文献.34 附录 a:基于 cpld 的多功能数字钟电路图 .35 附录 b:基于 vhdl 语言的时、分、秒等电路的源码.36 黄河科技学院毕业设计说明书 第 1 页 1 绪论 1.1 课题背景 我们已经进入了数字化和信息化的时代,其特点是各种数字产品的广泛应用。现 代数字产品在性能提高、复杂度增大的同时,其更新换代的步伐也越来越快,实现这 种进步

10、的因素在于生产制造技术和电子设计技术的进步。生产制造技术以微细加工技 术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶 体管1。 pld 器件和 eda 技术的出现,改变了传统的设计思路,使人们可以立足于 pld 芯片来实现各种不同的功能,新的设计方法能够由设计者自己定义器件内部逻辑和管 脚,将原来由电路板设计完成的工作大部分放在芯片的设计中进行。这样不仅可以通 过芯片设计实现各种逻辑功能,而且由于管脚定义的灵活性,减轻了原理图和印制板 设计的工作量和难度,增加了设计的自由度,提高了效率。同时这种设计减少了所需 芯片的种类和数量,缩小了体积,降低了功耗,提高了系统的可

11、靠性2。 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的 报时功能。诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至 各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数 字钟及扩大其应用,有着非常现实的意义。 1.2 本课题研究的内容 本设计是基于 cpld(max7000s 系列)的多功能数字钟设计。硬件界面为一个 6 位的 led 数码管,时间显示方式为 6 位同时显示,即显示状态为:88:88:88。显 示的时间制为 24 小时制。三个时间设定按键,分别为 mode 模式选择键,set 设定 键和 change 数值修改键3

12、。 按键功能介绍:mode 按键用来选择当前数字钟的工作模式,系统正常工作在模 式 0 下。当在正常时钟模式下第一次按下 mode 键时,系统进入模式 1,即闹铃模式, 在此模式下可以通过 set 和 change 按键的配合使用来设定所需要的闹铃时间。当 再一次按下 mode 按键后系统进入手动校时模式,在此模式下通过 set 和 change 黄河科技学院毕业设计说明书 第 2 页 按键的配合使用,可以改变当前时间。set 按键则用于在不同的模式下选择当前设定 的位置,比如当前设定的位置是小时,则再一次按下 set 按键后当前设定的位置变为 分钟。change 按键用来将当前设定位置的时间

13、值加 1,当长时间按下 change 按 键时,当前设定值为连续快速加 1,此功能用于快速设定时间4。 系统带四个指示灯电路,一个为电源指示灯,其他三个为工作状态指示灯,即分 别为 led_alarm、led_hour 和 led_min。led_alarm 用于指示当前是否设有 闹铃,当 led_alarm 指示灯亮时表明当前设有闹铃。led_hour 和 led_min 用 于指示当前设定的是时间的小时还是分钟,当 led_hour 指示灯亮时表明此时设定的 是时间的小时值,当 led_min 指示灯亮时表明此时设定的是时间的分钟值。 闹铃的功能是实现当到达预设的时间点时产生为时 20s

14、的“嘀嘀嘀嘀”急促短音。 整点报时的功能是实现在每个整点的 5 秒钟前产生整点报时音,报时音为“嘀嘀嘀-嘟” 4 短一长音。 黄河科技学院毕业设计说明书 第 3 页 2 总体设计方案 整个设计的方式采用 top-down 设计方法,即自顶向下的设计。这种设计方法 首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在功能级进入仿真 和纠错,并用硬件描述语言对高层次的系统行为进行描述,然后用综合工具将设计转 化为具体门电路网表,其对应的物理实现可以是 pld 器件或专用集成电路。由于设计 的主要仿真和调试过程是在高层次上完成的,这一方面有利于早期发现结构上的错误, 避免设计工作的浪费,同时

15、也减少了逻辑功能仿真的工作量,提高了设计的一次成功 率5。 多功能数字钟设计分为 1 个顶层模块和 8 个功能子模块。顶层模块名称为 clock.v。各功能子模块分别为:系统分频功能模块 clk_generate.v、模式选择功能模块 mode_select.v、快速时间设置功能模块 fast_settime.v、秒分时计时与时间调整模块 time_mode0.v、闹铃时间设置模块 alarm_set.v、闹铃与整点报时模块 alarm.v、7 段显示 译码模块 decoder_7seg.v 以及 led 显示功能模块 display.v。 图 2.1 整个系统的模块划分 黄河科技学院毕业设计

16、说明书 第 4 页 3 单元模块电路设计 3.1 时间显示电路模块设计 时间显示电路主要由两部分组成,如图 3.1 所示。其中一部分为六位 led 数码管 的驱动电路,另一部分为 led 数码管电路。led 驱动电路由 q1、q2、q3、q4、q5、q6 六个三极管和 r5、r6、r7、r8、r9、r10 基极偏置电阻 组成。驱动三级管为 pnp 型三极管,用于开关电路中。当三极管 q1 的基极(即 cpld 的 led0 输出端)为低电平时,q1 的发射结正向偏置,集电结反向偏置,因此 三极管处于导通状态,此时有 vce0.20.3v。反之当 q1 的基极为高电平时 q1 截止。 q1q6

17、的基极(led0led5)分别接 cpld 的 pin74、pin73、pin70、pin69、pin68、pin67,分别作为 led 数码管的位选端6。 图 3.1 led 显示电路 led 的显示方式有静态显示和动态方式两种工作方式。led 显示器工作于静态显 示方式时,各位的共阴极(或共阳极)连接在一起并接地(或+5v) ;每位的段码线 (adp)分别与一个 8 位的锁存器输出相连。之所以为静态显示,是因为各个 led 的 显示字符的字符一经确定,相应锁存器锁存的段码输出将维持不变,直到送入另一个 字符的段码为止。正因为如此,静态显示器的亮度都较高。但是因为静态显示方式下, q1 90

18、15 q2 9015 q3 9015 q4 9015 q5 9015q6 9015 r4 330 r5 10k r6 10k r7 10k r8 10k r9 10k r10 10k r11 1.5k r12 1.5k r13 1.5k r14 1.5k r15 1.5k r16 1.5k vcc led0led1led2led3led4led5 a b c d e f g db 5 4 3 2 1 0 led 黄河科技学院毕业设计说明书 第 5 页 各位 led 的段码线都是独立的,因此一个 6 位的 led 显示器需要占用 6*8+6=54 个 i/o 口,在这种情况下为了简化接线,本设计

19、采用的是动态扫描方式来显示。 在动态显示方式下,通常将所有位的段码线相应并联在一起,由一个 8 位的 i/o 口控制,形成段码线的多路复用,而各位的共阳极或共阴极分别由相应的 i/o 口控制, 形成各位的分时选通7。图 3.1 所示的电路是一个六位的 led 显示电路。其中段码线 占用 1 个 8 位 i/o 口,而位选线占用六位 i/o 口。由于各段码线并联,8 位 i/o 口输出 的段码对各个显示位来说都是相同的。因此,在同一时刻,如果各位位选线都处于选 通状态的话六位 led 将显示相同的字符。若使各个 led 能同时显示出与本位相应的 字符,就必须采用动态显示方式,即在某一时刻,只让某

20、一位的位选线处于选通状态, 而其他各位的位选处于关闭状态,同时,段码线上输出相应的要显示的字符段码。这 样,在同一时刻,六位 led 中只有选通的那一位显示出字数,而其它则是熄灭的。同 样在下一时刻,只让下一位的位选线处于选通状态,而其它各位的位选线处于关闭状 态,在段码线上输出将要显示字符的段码,则同一时刻,只有选通位显示相应的字符, 而其它各位是熄灭的,如此循环下去,就可以使各位显示出将要显示的字符。 3.2 按键及指示灯电路模块的设计 根据电子电路常识,采用灌电流工作方式的电路的功耗要比采用拉电流方式工作 的电路小。因此本设计中所有的外部键盘,指示二极管均采用灌电流的工作方式。当 多功能

21、数字钟的按键未按下时按键的输出(即 cpld 的输入)为低电平,当按键按下 时输出(即 cpld 的输入)为高电平。 在本设计中只有三个按键,分别为 mode、set、change。mode 按键用于模 式选择,按下一次 mode 按键后电路进入闹铃设置模式,在该模式下可以用 set 键来 选择当前是设置小时还是设置分钟,而用 change 键可以改变当前设置闹铃的小时或 分钟(向上加一) 。再按一次 mode 键则进入手动校时功能模式8。按键电路如图 3.2 所示。 黄河科技学院毕业设计说明书 第 6 页 r 1 4.7k r 2 4.7k r 3 4.7k s1 m od e s2 se

22、t s3 c ha ng e v ccv ccv cc m od e se t c ha ng e 图 3.2 按键电路 在本设计中共有四个指示灯,一个为电源指示灯,其它三个是工作状态指示灯, d1 为闹铃报警指示电路,当设置闹铃后闹铃指示电路就工作在点亮状态,指示当前设 有闹铃。d2 和 d3 用来指示当前设置状态。当在闹铃设置模式和手动校时模式下,d2 或 d3 会有一个在点亮状态,当 d2 亮时表示当前设置的是小时,当 d3 亮时表示当前 设置的是分钟。指示灯电路如图 3.3 所示。 r1 7 1k r1 8 1k r1 9 1k d 1 le d d 2 le d d 3 le d 图

23、 3.3 指示灯电路 引脚的连接为,d1 接 cpld 的 pin61,d2 接 cpld 的 pin63,d3 接 cpld 的 黄河科技学院毕业设计说明书 第 7 页 pin64。当 cpld 的引脚输出为高电平时相应的指示灯就点亮。 3.3 蜂鸣器及有源晶振电路的设计 在本设计中由于有音调的变换,所以必需采用交流蜂鸣器。由于 cpld 管脚的驱 动能力有限,因此通过连接一个三极管来增强驱动能力,从而提高蜂鸣器的响度。二 极管 d9 起到续流保护的作用,蜂鸣器电路如图 3.4 所示。 r28 1k r29 res2 q7 8550 vcc d9 buzzer 图 3.4 蜂鸣器电路 系统时

24、钟采用 2.048mhz 的有源晶体振荡器。为了使有源晶振能输出较好的波形, 必需保证供电的稳定。所以在晶振电路的前端加了两个小电容对电源进行滤波,在时 钟输出端加了一个小电阻,能有效地抑制高次谐波和实现阻抗匹配。有源晶振电路如 图 3.5 所示。 r25 33k c1 102 c2 102 vcc gnd 2 clkout 3 nc 1 vcc 4 图 3.5 有源晶振电路 黄河科技学院毕业设计说明书 第 8 页 3.4 cpld 编程下载电路的设计 cpld 器件多采用 jtag 编程方式,jtag 编程方式是在线编程,传统生产流程中 先对芯片进行预编程现再装到板上因此而改变,简化的流程为

25、先固定器件到电路板上, 再用 jtag 编程,从而大大加快工程进度。jtag 接口可对 psd 芯片内部的所有部件进 行编程9。 在硬件结构上,jtag 接口包括两部分:jtag 端口和控制器。与 jtag 接口兼 容的器件可以是微处理器(mpu) 、微控制器(mcu) 、pld、cpl、fpga、asic 或 其它符合 ieee.1149.1 规范的芯片。ieee.1149.1 标准中规定对应于数字集成电路芯片 的每个引脚都设有一个移位寄存单元,称为边界扫描单元 bsc。它将 jtag 电路与内 核逻辑电路联系起来,同时隔离内核逻辑电路和芯片引脚。由集成电路的所有边界扫 描单元构成边界扫描寄

26、存器 bsr。边界扫描寄存器电路仅在进行 jtag 测试时有效, 在集成电路正常工作时无效,不影响集成电路的功能。jtag 编程方式对 cpld 和 fpga 器件都支持,用于 cpld 器件的下载文件是 pof 文件。jtag 下载电路如图 3.6 所示。jtag 下载电路的 10 针接口引脚定义为:1 引脚为 tck 时钟,2 引脚接地,3 引脚 tdo 为测试数据输出(数据输出,来自器件) ,4 引脚接电源电压,5 引脚 tms 为测试模式选择(编程使能) ,nc 为 no-connect。9 引脚 tdi 为测试数据输入 (数据输入到器件) ,10 引脚接地。 r20 res2 r21

27、 res2 r22 res2 r23 res2 vcc vcc tck tdo tms tdi tck 1 end 2 tdo 3 vcc 4 tms 5 nc 6 nc 7 nc 8 tdi 9 gnd 10 jtag10 jtag 图 3.6 jtag 下载电路 黄河科技学院毕业设计说明书 第 9 页 3.5 电源电路的设计 本设计中的核心器件为 max7000s 系列的 epm7128slc84,i/o 口电压 vccio 和 核心电压 vccint 均支持正 5v,因此在本设计中统一给 i/o 端口和内核提供+5v 的电 压。 r24 510 t1 trans1 220v vin 1

28、gnd 2 vout 3 7805 ic1 c15 104 c13 104 + c11 2200uf + c17 47uf d4 led vac vivo vcc 1 2 3 4 fuse1 图 3.7 电源电路 电源电路是由电源变压器 t、桥堆、滤波电容 c11、c13、c15、c17 及集成三端 稳压电路 7805 以及保险丝组成,其电路图如图 3.7 所示。电源的输出为+5v 输出。下 面介绍电源各部分参数的整定方法。 3.5.1 变压器次级电压估算 由于稳压器要正常工作时输入端的电压必需要比输出端高 2.5v 时才能使其稳定工 作。考虑到市网交流电压的波动情况,在市网电压为 200v

29、时也能正常工作,则有 220/200*vac 要大于 8.0,所以 vac 必需要大于 8.8v,即交流变压器的副边输出电压应 该高于 8.8v,在本设计中选取 9v。 3.5.2 变压器输入功率的计算 假设负载电流为 500ma,若输出电压为 5v,则有效功率为 5v*0.5a=2.5w。正常 情况下变压器输出功率约为 9v*1.2*1.5a=5.4w,当市网电压升到 250v 时,变压器的 输出功率为 5.4w*250/220=6.2w。小型电源变压器的效率一般为 75%左右。因此电源 变压器的输入功率为 6.2w/0.75=8.27w。 黄河科技学院毕业设计说明书 第 10 页 3.5.

30、3 滤波电容参数的选取 假设负载电流为 500ma,若输出电压为 7.5v,则等效负载电阻为 15。电源频率 为 50hz,则 t=0.02s,根据 crl=(35)t/2,则 c=(35)t/2 /rl=20003300uf。在本设计中取 2200uf。电容耐压应大于 1.42*vac 即 vc=1.42*9*250/220=14.5v(其中 250/220 是考虑市网电源电压过高时的情况)。在本设 计中电容耐压值取 16v。 3.6 epm7128slc84 器件介绍10 本次设计的核心器件采用 altera 公司的 cpld 可编程器件。altera 公司的 max7000s 系列 cp

31、ld 有着较高的性价比。max7000s 系列是基于 altera 第二代 max 架构的高密度、高性能的 pld 器件。max7000 器件包含 32256 个可联结成 16 个宏单元组的逻辑阵列块的宏单元。 图 3.8 epm7128slc 的 plcc 封装 epm7128slc84 是 max7000s 家族成员之一,它有如下的特点:可用逻辑门个数 为 2500 门,128 个宏单元,8 个逻辑阵列块,最大用户可用 i/o 口 100 个,支持 5v 在 系统编程和符合 ieee.std.1179 的 jtag 下载接口,内建边界扫描测试电路,支持片 上调试,epm7128slc84-

32、15 的封装如图 3.8 所示。 黄河科技学院毕业设计说明书 第 11 页 4 cpld 编程设计 4.1 系统信号的定义及顶层模块 整个系统输入、输出信号的定义: sysclk:系统的时钟信号,由外部有源晶振产生,频率为 2.048mhz; mode:外接按键,模式选择信号,mode=0 时为时钟模式,mode=1 时为设定闹钟模 式,mode=2 时为手动设定时间模式; set:外接按键,用于在手动设置时间时选择是调整小时还是分钟;若长时间按住该 键,还可以使秒信号清零,用于精确调整时间; change:外接按键,手动调整时间,每按一次计数器加 1;若长时间按住则连续快 速加 1,用于快速

33、调时和定时; alarm:接蜂鸣器,输出到蜂鸣器的信号,用于产生闹铃音和报时音;闹铃音为持 续 20s 的急促的“嘀嘀嘀”音,整点报时音为“嘀嘀嘀-嘟”四短一长音;dataout:输 出信号,输出显示时间的数码管显示的段码12。 include clk_generate.v include time_mode0.v include mode_select.v include fast_settime.v include alarm_set.v include alarm.v include decoder_7seg.v include display.v module clock; clk_g

34、enerate clk_generate(); /调用时钟节拍产生模块 time_mode0 time_mode0(); / 秒、分、时计时与时间调整模块 mode_select mode_select(); /调用模式选择功能模块 fast_settime fast_settime(); /调用快速时间设置功能模块 alarm_set alarm_set(); /调用闹铃时间设置模块 黄河科技学院毕业设计说明书 第 12 页 alarm alarm(); /调用闹铃与整点报时模块 decoder_7seg decoder_7seg(); /调用 7 段译码模块 display display

35、(); /调用显示模块 endmodule 4.2 时钟节拍产生模块 由于整个系统只有一个晶体振荡器,但是设计需要不同的时钟信号,因此需要设 计一个分频进程,对系统的有源晶振产生的 2.048mhz 时钟进行分频,产生需要的时钟 节拍。在本设计中总共用到如下几个时钟节拍:1hz 的时钟 clk,4hz 的时钟 clk_4hz,1khz 的时钟信号 clk_1k,和 50hz 的时钟 displayclk。其中 clk 节拍用于 产生秒计时信号,在每个 clk 的上升沿到来时秒计数器加 1。clk_4hz 节拍用于快速 调整时间,当长时间按下 chang 按键时,当前设置的时钟快速增加11。cl

36、k_1k 节 拍用于闹铃音的产生,displayclk 时钟节拍是频率为 50hz 的信号,由于本设计中显示 部分采用 led 动态显示的方式,因此必需要有一个扫描信号对 6 位的 led 的每个位 进行轮流选通点亮。分频进程的原理是在 cpld 内部设置一个分频计数器和一个触发 器,当计数到分频值时触发器进行翻转,因此只要设置不同的分频计数器的计数值就 可以得到不同的时钟节拍。在 cpld 内部设置分频计数器的缺点是,cpld 的触发器 资源有限,设置计数器对资源的占用比较大,因此尽量可能少用一些时钟节拍,或者 尽量使需要使用的时钟节拍相同,还有一种方法是利用两个已有的时钟信号进行逻辑 运算

37、从而获得想要的时钟节拍。系统的分频进程如下: module clk_generate(reset,sysclk,clk,clk_4hz,clk_1k,displayclk); input sysclk,reset; output clk,clk_4hz,clk_1k,displayclk; reg clk,clk_4hz,clk_1k,displayclk; reg 20:0div_count1; /分频时钟计数器,用于产生周期为 1s 的时钟信号 reg 19:0div_count2; /分频时钟计数器,用于产生频率为 4hz 的时钟信号 reg 11:0div_count3; /分频时钟计

38、数器,用于产生频率为 1khz 的时钟信号 reg 14:0divclk_cnt; /分频时钟计数器,用于产生 50hz 的数码管扫描信号 displayclk 黄河科技学院毕业设计说明书 第 13 页 always (posedge sysclk) begin if (reset) div_count1=21d0000000; if (div_count1=21d1024000) /1024000/2048000=0.5s begin clk=clk; /clk 为周期为 1s 的时钟信号 div_count1=21d0000000; end else begin div_count1=di

39、v_count1+1b1; end end always (posedge sysclk) begin if (reset) div_count2=20d000000; if (div_count2=20d512000) /512000/2048000=0.25s begin clk_4hz=clk_4hz; /clk_4hz 为 4hz 的时钟信号 div_count2=20d000000; end else begin div_count2=div_count2+1b1; end end always (posedge sysclk) begin /产生周期为 50hz 和 1khz 的时

40、钟节拍 黄河科技学院毕业设计说明书 第 14 页 end endmodule 4.3 模式选择功能模块 本设计是多功能数字钟,实现的功能是以数字形式显示时、分、秒的时间, 能进 行手动快校时、快校分或慢校时、慢校分。该多功能电子钟共有 3 种模式。分别为: 模式 0 为正常时钟模式,模式 1 为设置闹铃功能,模式 2 为手动校时功能。多功能电 子钟共有三个按键,一个 mode 模式选择键,用于选择相应的模式,一个 set 时间选 择键,用于选择当前设定的是分钟或者是小时,一个 change 键,用于给当前值加 1,当长时间按住 change 时当前值连续快速加 1,用于快速设定时间12。模式选

41、择 进程如下所示。 module mode_select( clk,mode,set,change,count1,counta,count2,countb,led_min,led_hour,m); input mode,set,change,clk; output count1,counta,count2,countb,led_min,led_hour,m; regbool,count1,counta,count2,countb; reg 1:0m; reg led_min,led_hour; always (posedge mode) begin if (m=2) m=0; else m=m

42、+1; end always (posedge set) bool=bool; always (posedge clk) begin case(m) 2: begin 黄河科技学院毕业设计说明书 第 15 页 if (bool) begin /手动设定分钟 count1=change; led_min,led_hour=2b10; end else begin /手动设定小时 counta=change; led_min,led_hour=2b01; end count2,countb=2b00; end 1:begin if (bool) begin /设定闹铃分钟 count2=chang

43、e; led_min,led_hour=2b10; end else begin countb=change; led_min,led_hour=2b01; end count2,countb=2b00; end default: ount1,count2,counta,countb,led_min,led_hour=0; /正常时钟状态 endcase end endmodule 黄河科技学院毕业设计说明书 第 16 页 4.4 快速时间设置功能模块 多功能数字钟要求有快速时间设置功能和慢设置功能。所谓快速时间设置功能是 指一直按住按键不放时,当前值能够快速的增加;而慢设置是指每按一次按键则

44、当前 值向上增一。快速时间设置进程如下所示。快速时间设置进程,功能描述:长时间按 下“change”键,则分别生成 num1、num2、num3、num4 信号用于连续快速加 1。 当长时间按下 change 按键后,利用系统的 clk_4hz 对计数器进行快速加一处 理。如果不是长时间按下 change 按键的话则每按一次 change 按建键就对相应的 寄存器的值加一处理。 4.5 秒、分、时计时与时间调整模块 秒计时程序采用周期为 1s 的基准时钟信号 clk,在每个 clk 时钟信号的上升沿 对秒寄存器加 1,当长时间按下 set 按键后对秒寄存器进行清零,该功能用于准确校 时。ct1

45、 为分计时的同步时钟,在每个 ct1 时钟信号的上升沿对分寄存器加 1。当未 长时间按下 change 按键时,ct1 时钟是周期为 60 秒的时钟信号。当长时间按下 change 后,ct1 时钟变为周期为 4hz 的时钟信号,该信号用于快速时间校准功能。 cta 时钟是周期为 60 分钟的时钟信号,在每个 cta 时钟信号的上升沿对小时寄存器 加 1,当当前设置值为小时且长时间按下 change 按键后,cta 时钟变为周期为 4hz 的时钟信号,该信号用于快速时间校准功能。 module time_mode0(clk,set,m,count1,ct1,counta,m_clk,h_clk

46、,cta,sec1,min1,hour1); input clk,set,m,count1,counta,ct1,cta,m_clk,h_clk; inout 7:0sec1,min1,hour1; reg minclk,hclk; reg 7:0sec1,min1,hour1; wire m_clk,h_clk; always (posedge clk) begin if (!(sec1 8d59) | set 黄河科技学院毕业设计说明书 第 17 页 if (!(set else begin if (sec13:0=4b1001) begin sec13:0=4b0000; sec17:4

47、=sec17:4 + 1b1; end else begin sec13:0 = sec13:0 + 1b1; minclk=1b0; end end end always (posedge ct1) /分钟计时进程 begin if (min1 = 8d59) begin min1 = 0; hclk = 1; end else begin if (min13:0 =9) begin min13:0 =0; min17:4=min17:4 + 1; end 黄河科技学院毕业设计说明书 第 18 页 else begin min13:0 =min13:0 +1; hclk =0; end en

48、d end always (posedge cta) /小时计时与调整进程 begin if (hour1=8h23) hour1=0; else begin /此段 vhdl 语言时、分、秒源码见附录二 end end endmodule 4.6 闹铃时间设置模块 module alarm_set(ct2,ctb,amin,ahour); input ct2,ctb; output 7:0amin,ahour; reg 7:0amin,ahour; always (posedge ct2) begin if (amin=8d59) amin=0; else if (amin3:0=9) be

49、gin amin3:0=0; amin7:4=amin7:4 + 1; end 黄河科技学院毕业设计说明书 第 19 页 else amin3:0=amin3:0 + 1; end always (posedge ctb) begin if (ahour=8d23) ahour=0; else if (ahour3:0=9) begin ahour3:0=0; ahour7:4=ahour7:4 + 1; end else ahour3:0=ahour3:0 + 1; end endmodule 4.7 闹铃与整点报时模块 闹铃的功能是实现当到达预设的时间点时产生为时 20s 的“嘀嘀嘀嘀”急

50、促短音。 整点报时的功能是实现在每个整点的 5 秒钟前产生整点报时音,报时音为“嘀嘀嘀- 嘟”4 短一长音。 module alarm(sysclk,clk_1k,min1,hour1,amin,ahour,alarm1,alarm2); input sysclk,clk_1k; input 7:0min1,hour1,amin,ahour; output alarm1,alarm2; reg alarm1,alarm2; reg 7:0sec1; always (posedge sysclk) begin if (min1=amin) 黄河科技学院毕业设计说明书 第 20 页 else al

51、arm1=0; else alarm18d54)|(!(min1|sec1) if (sec18d58) alarm2=clk_1k; / 产生长音 else alarm2=clk_1k; /产生短音 else alarm2=0; end endmodule 4.8 七段显示译码模块 由于时钟计数模式采用的是 bcd 码计数方式,而显示采用的 8 段发光二极管,每 个段代表一位二进制数,在本系统中采用的是共阳极接法,因此 7 段码为共阳编码。 因此在数码管上正常显示时间的话,必需要对在三个模式下的时、分、秒进行译码才 能得到正常的显示。 module decoder_7seg(sysclk,c

52、lk,clk_4hz,clk_1k,m,alarm1,alarm2,ahour,amin,min1,hour1,sec1,hour_ msb,hour_lsb,min_msb,min_lsb,sec_msb,sec_lsb); input sysclk,clk,clk_4hz,clk_1k, alarm1,alarm2; input 7:0ahour,amin,min1,hour1,sec1; input 1:0m; output 7:0hour_msb,hour_lsb,min_msb,min_lsb,sec_msb,sec_lsb; reg 7:0hour,min,sec,hour_msb

53、,hour_lsb,min_msb,min_lsb,sec_msb,sec_lsb; wire led_alarm; always (posedge sysclk) begin case(m) 黄河科技学院毕业设计说明书 第 21 页 3b00: /在模式 0 下,将正常计数值赋值给寄存器,等待译码 begin hour=hour1; min=min1; sec=sec1; end 3b01: /在模式 1 下,将闹铃时间设置值赋值给寄存器,等待译码 begin hour=ahour; min=amin; sec=8hzz; end 3b10: /在模式 2 下,将手动计数值赋值给寄存器,等待

54、译码 begin hour=hour1; min=min1; sec=8hzz; end endcase assign led_alarm=(ahour|amin)?1:0; /指示是否进行了闹铃定时 assign alarm=(alarm1)?clk_1k/产生闹铃音或整点报时音 end always ( sysclk ) begin case (hour7:4) 4b0000 : hour_msb=8hc0; /数字 0 的共阳编码赋值给小时的十位 4b0001 : hour_msb=8hf9; /数字 1 的共阳编码赋值给小时的十位 4b0010 : hour_msb=8ha4; /数字

55、 2 的共阳编码赋值给小时的十位 4b0011 : hour_msb=8hb0; /数字 3 的共阳编码赋值给小时的十位 黄河科技学院毕业设计说明书 第 22 页 4b0100 : hour_msb=8h99; /数字 4 的共阳编码赋值给小时的十位 4b0101 : hour_msb=8h92; /数字 5 的共阳编码赋值给小时的十位 4b0110 : hour_msb=8h82; /数字 6 的共阳编码赋值给小时的十位 4b0111 : hour_msb=8hf8; /数字 7 的共阳编码赋值给小时的十位 4b1000 : hour_msb=8h80; /数字 8 的共阳编码赋值给小时的十

56、位 4b1001 : hour_msb=8h90; /数字 9 的共阳编码赋值给小时的十位 endcase case (hour3:0) 4b0000 : hour_lsb=8hc0; /数字 0 的共阳编码赋值给小时的个位 4b0001 : hour_lsb=8hf9; /数字 1 的共阳编码赋值给小时的个位 4b0010 : hour_lsb=8ha4; /数字 2 的共阳编码赋值给小时的个位 4b0011 : hour_lsb=8hb0; /数字 3 的共阳编码赋值给小时的个位 4b0100 : hour_lsb=8h99; /数字 4 的共阳编码赋值给小时的个位 4b0101 : ho

57、ur_lsb=8h92; /数字 5 的共阳编码赋值给小时的个位 4b0110 : hour_lsb=8h82; /数字 6 的共阳编码赋值给小时的个位 4b0111 : hour_lsb=8hf8; /数字 7 的共阳编码赋值给小时的个位 4b1000 : hour_lsb=8h80; /数字 8 的共阳编码赋值给小时的个位 4b1001 : hour_lsb=8h90; /数字 9 的共阳编码赋值给小时的个位 endcase endmodule 4.9 led 显示模块 led 显示电路与 cpld 的接口电路共有两种接法,一种接法是静态显示法,即外 接 6 个独立的一位 led 数码管,

58、在这种接法下每一位 led 的段码线共有 8 根,因此 采用这种接法时总共需要 6*8+6=54 个 i/o 口,而采用这种接法时,分配 i/o 工作烦琐, 且电路图接线复杂。而第二种接法称为动态显示法,采用共阳或共阴极接法,而所谓 的共阳极接法是指将每位 led 的段码线连在一起共同接电源的正极,因此采用这种接 法时,一个 6 位的 led 总共只需要 8+6=14 个 i/o 口,即 8 位的段码线和 6 位的位选 线,采用这种方式的接法时,缺点是每次显示时 6 位 led 同时显示相同的数字,因此 黄河科技学院毕业设计说明书 第 23 页 在这种接法下,必需要采用扫描的方式来显示,即每一

59、个时刻只能有一个 led 处在点 亮的状态,其它 led 熄灭,此时送出相应位的段码。而在下一时刻则下一位 led 处 于点亮状态,且在此时送出相应的段码,如此循环往复就能显示完 6 个不同的数字。 因此采用这种接法时必需要有一个扫描信号来选择当前哪一位 led 处于点亮状态。 module display(displayclk,reset,ledselect,dataout,hour_msb,hour_lsb,min_msb,min_lsb,sec_msb,sec_ lsb); input displayclk,reset; input 7:0hour_msb,hour_lsb,min_ms

60、b,min_lsb,sec_msb,sec_lsb; output 5:0ledselect; output 7:0dataout; reg 7:0dataout; reg 5:0ledselect; reg 2:0state; always (posedge displayclk) begin if (reset=0) /复位信号用于波形仿真时对分频计数器初始化 begin state2:0=3b000; ledselect= 6b000000; end else begin case(state) 3b000: begin ledselect=6b011111; /数码管的第一位(小时的十

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论