基于VHDL的数字时钟设计资料.docVIP

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于VHDL的数字时钟设计资料

目 录 1 概述 1 1.1数字时钟的工作原理 1 1.2设计任务 1 2 系统总体方案设计 2 3 VHDL模块电路设计 3 3.1模块实现 3 3.1.1分频模块pinlv 3 3.1.2按键去抖动模块qudou 5 3.1.3按键控制模块self1 6 3.1.4秒、分六十进制模块cantsixty 7 3.1.5时计数模块hourtwenty 9 3.1.6秒、分、时组合后的模块 9 3.1.7数码管显示模块 10 3.2数字时钟的顶层设计原理图 13 3.3系统仿真与调试 14 结束语 16 参考文献 17 致谢 18 附录 源程序代码 19 1 概述 1.1数字时钟的工作原理 数字钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。秒计数器的计数时钟CLK为1Hz的标准信号,可以由晶振产生的50MHz信号通过分频得到。当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号,每一秒钟发出一个中断给CPU,CPU采用NIOS,它响应中断,并读出小时、分、秒等信息。CPU对读出的数据译码,使之动态显示在数码管上。 1.2 设计任务 2 系统总体方案设计 图2.1数字时钟设计框图 3 VHDL模块电路设计 3.1 模块实现 3.1.1分频模块 图3.1分频模块 3.1.2按键去抖动模块 本设计用到FPGA开发板上的四个按键,由于按键有反应时间、抖动的问题,可能当按键被按一次时而系统感应到几次,造成误差。所以应该进行按键消抖的处理,让每按一次键系统只感应到一次按键。可以采用软件延时,触发反相器等方式进行消除抖动,本设计中采用软件延时的方式。 由VHDL语言生成的模块图和程序说明如下: 图3.2按键去抖动模块 ;--设置计数初值 end if; if k4=1 then cant4:=0; end if; --设置计数初值 if canthen o1=0; else o1=1;--延时0.5s end if; if canthen o2=0; else o2=1; --延时0.5s end if; if canthen o3=0; else o3=1; --延时0.5s end if; if canthen o4=0; else o4=1; --延时0.5s end if; cant1:=cant1+1; --加一计数 cant2:=cant2+1; --加一计数 cant3:=cant3+1; --加一计数 cant4:=cant4+1; --加一计数 end if; end process; end beh; 3.1.3按键控制模块self1 本设计中使用了两个按键进行对时钟的暂停和调秒操作,当ok2按下时时钟暂停,再按ok3则进行秒个位的加一计数,每按一次进行加一处理。当调节好时间后,在按ok2键重新开始计数。 由VHDL语言生成的模块图和程序说明如下: 图3.3按键控制模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity self1 is port( c:in std_logic; ok2:in std_logic; ok3:in std_logic; ck:out std_logic); end ;--设置端口 architecture bea of self1 is signal m:std_logic; signal t:std_logic; begin p1:process(ok2,ok3,c);ok2和ok3触发进程 begin if ok2event and ok2=0 then m=not m;--由ok2 的动作产生m的电平信号 end if; if m=1 then ck=not(ok3);--把按键ok3的脉冲信号给输出 else ck=c;--否则把正常计数时钟给输出 end if; end process p1;--结束进程 end bea; 3.1.4秒、分六十进制模块cantsixty 本设中秒、分的六十进制是由个位的十进制和十位的六进制进行组合实现的。当个位记到9时自动向高位进一,同时个位自动清零。当十位记到5并且个位记到9时,自动产生一个进位脉冲,同时个位和十位分别从零开始重

您可能关注的文档

文档评论(0)

aena45 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档