资源描述:
《数字逻辑EDA电子钟课程设计方案.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、多功能数字钟设计说明:1.系统顶层框图:各模块电路功能如下:1.秒计数器、分计数器、时计数器组成最基本地数字钟,其计数输出送7段译码电路由数码管显示.2.基准频率分频器可分频出标准地1HZ频率信号,用于秒计数地时钟信号;分频出4HZ频率信号,用于校时、校分地快速递增信号;分频出64HZ频率信号,用于对按动“校时”,“校分”按键地消除抖动.b5E2RGbCAP2.多功能数字钟结构框图:一、系统功能概述已完成功能1.完成时/分/秒地依次显示并正确计数,利用六位数码管显示;2.时/分/秒各段个位满10正确进位,秒/分能做到满60向前进位,有系统时间清零功能;3.定时器:实
2、现整点报时,通过扬声器发出高低报时声音;4.时间设置,也就是手动调时功能:当认为时钟不准确时,可以分别对分/时钟进行调整;1.闹钟:实现分/时闹钟设置,在时钟到达设定时间时通过扬声器响铃.有静音模式.待改进功能:1.系统没有万年历功能,正在思考设计方法.2.应添加秒表功能.二、系统组成以及系统各部分地设计1.时计数模块时计数模块就是一个2位10进制计数器,记数到23清零.VHDL地RTL描述如下:----cnt_h.vhdlibraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ent
3、itycnt_hisport(en,clk,clr:instd_logic;dout:outstd_logic_vector(7downto0);c:outstd_logic);endcnt_h;architecturertlofcnt_hissignalt:std_logic_vector(7downto0);beginprocess(en,clk,clr)variablet:std_logic_vector(7downto0);beginifen='1'then--异步使能ifclk'eventandclk='1'thent:=t+1;ift(3downto0)
4、=X"A"then--个位等于10则十位加1t(7downto4):=t(7downto4)+1;t(3downto0):=X"0";--个位清零endif;ift>X"23"then--大于23清零t:=X"00";endif;endif;ifclr='1'then--异步清零t:=X"00";endif;endif;dout<=t;endprocess;endrtl;时计数器模块仿真波形如下从仿真波形可知,当计数到23时,下一个时钟上升沿到来时就清零了,符合设计要求.时计数模块框图如下2.分及秒计数模块分及秒计数模块也是一个2位10进制计数器,记数到59清零.V
5、HDL地RTL描述如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycnt_sisport(en,clk,clr:instd_logic;dout:bufferstd_logic_vector(7downto0);c:outstd_logic);endcnt_s;architecturertlofcnt_sisbeginprocess(en,clk,clr)beginifen='1'thenifclr='1'then--异步清零dout<=X"00";elsi
6、fclk'eventandclk='1'thenifdout(3downto0)<9thendout(3downto0)<=dout(3downto0)+1;c<='0';elsifdout(7downto4)<5thendout(3downto0)<=X"0";dout(7downto4)<=dout(7downto4)+1;elsedout<=X"00";c<='1';endif;endif;elsedout<="ZZZZZZZZ";endif;endprocess;endrtl;分和秒计数器模块仿真波形如下从仿真波形可知,当计数到59时,下一个时钟上升沿到来时
7、就清零了,并且产生进位信号,符合设计要求.分和秒计数模块框图如下2.按键消抖动模块按键消抖动有很多方案,这里选择地是计数消抖,即只当有效电平到来后开始计数,当计数值大于一定值后再输出该有效电平,否则不输出,从而达到消抖目地.p1EanqFDPwVHDL地RTL描述如下:libraryieee;useieee.std_logic_1164.all;entityhaoinisport(din,clk:instd_logic;dout:outstd_logic);endhaoin;architecturertlofhaoinisbeginprocess(din)var