文档详情

基于VHDL的数字时钟设计.doc

发布:2017-02-04约7.32千字共27页下载文档
文本预览下载声明
目 录 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并且个
显示全部
相似文档