摘要人类社会已进入到高度发达的信息社会。信息化社会的发展离不开电子信息产品开发技术、产品品质的提高和进步。电子信息产品随着科学技术的进步,其电子器件和设计方法更新换代的速度日新月异。实现这种进步的主要原因就是电子设计技术和电子制造技术的发展,其核心就是电子设计自动化(EDA,ElectronicsDesignAutomation)技术,EDA技术的发展和推广应用又极大地推动了电子信息产业的发展。为保证电子系统设计的速度和质量,适应“第一时间推出产品”的设计要求,EDA技术正逐渐成为不可缺少的一项先进技术和重要工具。目前,在国内电子技术教学和产业界的技术推广中已形成“EDA热”,完全可以说,掌握EDA技术是电子信息类专业学生、工程技术人员所必备的基本能力和技能。关键词:数字钟EDAVHDL语言1数字时钟的设计实现设计实验一、设计目的1、熟练地运用数字系统的设计方法进行数字系统设计;2、能进行较复杂的数字系统设计;3、按要求设计一个数字钟。二、设计内容2.1设计任务及目标要求设计一个数字钟完,完成具体如下任务:(1)能显示年、月、日、时、分、秒功能;(2)具有日期和星期显示功能;(3)具备闹钟功能及定点报时;(4)具备调时、定时功能。三、系统方案及设计原理3.1方案设计数字计时器基本功能是计时,因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为48MHZ,通过分频获得所需脉冲频率(1Hz,1KHz,2KHz)。为产生秒位,设计一个模60计数器,对1HZ的脉冲进行秒计数,产生秒位;为产生分位,通过秒位的进位产生分计数脉冲,分位也由模60计数器构成;为产生时位,用一个模24计数器对分位的进位脉冲进行计数。整个数字计时器的计数部分共包括六位:时十位、时个位、分十位、分个位、秒十位和秒个位。显示功能是通过数选器、译码器、码转换器和7段显示管实现的。因为实验中只用一个译码显示单元,7个7段码(6个用于显示时分秒,一个显示星期),所以通过4个7选一MUX和一个3-8译码器配合,根据计数器的信号进行数码管的动态显示。2清零功能是通过控制计数器清零端的电平高低来实现的。只需使清零开关按下时各计数器的清零端均可靠接入有效电平(本实验中是低电平),而清零开关断开时各清零端均接入无效电平即可。校分校时功能由防抖动开关、逻辑门电路实现。其基本原理是通过逻辑门电路控制分计数器的计数脉冲,当校分校时开关断开时,计数脉冲由低位计数器提供;当按下校分校时开校分校时功能由防抖动开关、逻辑门电路实现。其基本原理是通过逻辑门电路控制分计数器的计数脉冲,当校分校时开关断开时,计数脉冲由低位计数器提供;当按下校分校时开通时,既可以手动触发出发式开关给进位脉冲,也可以有恒定的1Hz脉冲提供恒定的进位信号,计数器在此脉冲驱动下可快速计数。为实现可靠调时,采用防抖动开关(由D触发器实现)克服开关接通或断开过程中产生的一串脉冲式振动。本实验中为节省按键,闹钟时间调节键复用正常调时的校时校分开关,为使设定闹铃与正常计时中调节时间按键互不影响,额外用一个闹钟使能键,按下该键后进入闹钟设定界面,此时校时校分开关用于调节闹钟时间,对正常计时没有影响,且此时7段显示码显示的是闹钟时间;恢复使能键后校分校时键用于对数字钟进行时间调节,对设定的闹钟时间没有影响。整点报时功能可以通过组合逻辑电路实现。当计数器的各位呈现特定的电平时,可以选通特定的与门和或门,将指定的频率信号送入蜂鸣器中,实现在规定的时刻以指定频率发音报时。闹钟设定功能。闹钟只设定时和分,基本模块与正常计时电路里的校时校分电路相同。本实验中为节省按键,闹钟时间调节键复用正常调时的校时校分开关,为使设定闹铃与正常计时中调节时间按键互不影响,额外用一个闹钟使能键,按下该键后进入闹钟设定界面,此时校时校分开关用于调节闹钟时间,对正常计时没有影响,且此时7段显示码显示的是闹钟时间;恢复使能键后校分校时键用于对数字钟进行时间调节,对设定的闹钟时间没有影响。33.2数字钟设计思路结构框图四、数字电路基本模块4.1分频器模块(1)模块说明:输入一个频率为50MHz的CLK,利用计数器分出1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。(2)源程序:LIBRARYieee;USEieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ENTITYfdivISPORT(CLK:INSTD_LOGIC;--输入时钟信号q1KHz:BUFFERSTD_LOGIC;q500Hz:BUFFERSTD_LOGIC;q2Hz:BUFFERSTD_LOGIC;q1Hz:OUTSTD_LOGIC);ENDfdiv;ARCHITECTUREbhvOFfdivISBEGINP1KHZ:PROCESS(CLK)VARIABLEcout:INTEGER:=0;BEGINIFCLK'EVENTANDCLK='1'THENcout:=cout+1;--每来个时钟上升沿时cout开始计数IFcout=25000THENq1KHz='0';--当cout=25000时,q1KHz输出“0”ELSIFcout50000THENq1KHz='1';--当25000cout=50000时,q1KHzELSEcout:=0;--输出“1”,完成1KHz频率输出控制单元使能信号数字时钟CLK时钟信号报警(闹铃)信号复位信号输出信号LED显示扬声器4ENDIF;ENDIF;ENDPROCESS;P500HZ:PROCESS(q1KHz)--q1KHz作为输入信号,分出q500HzVARIABLEcout:INTEGER:=0;BEGINIFq1KHz'EVENTANDq1KHz='1'THENcout:=cout+1;IFcout=1THENq500Hz='0';--二分频ELSIFcout=2THENcout:=0;q500Hz='1';ENDIF;ENDIF;ENDPROCESS;P2HZ:PROCESS(q500Hz)VARIABLEcout:INTEGER:=0;BEGINIFq500Hz'EVENTANDq500Hz='1'THENcout:=cout+1;IFcout=125THENq2Hz='0';ELSIFcout250THENq2Hz='1';ELSEcout:=0;ENDIF;ENDIF;ENDPROCESS;P1HZ:PROCESS(q2Hz)VARIABLEcout:INTEGER:=0;BEGINIFq2Hz'EVENTANDq2Hz='1'THENcout:=cout+1;IFcout=1THENq1Hz='0';ELSIFcout=2THENcout:=0;q1Hz='1';ENDIF;ENDIF;ENDPROCESS;ENDbhv;(3)模块图:54.2控制器模块(1)模块说明:输入端口enset,k,set键来控制6个状态,这六个状态分别是显示计时时间状态,调计时的时、分、秒状态,调闹铃的时、分的状态,reset键是复位键,用来回到显示计时时间的状态。(2)源程序:libraryieee;useieee.std_logic_1164.all;entitycontlisport(clk,enset,k,set,reset:instd_logic;cth,ctm,cts,cbh,cbm,flashh,flashm,flashs,sel_show:outstd_logic);endcontl;architecturertlofcontlistypestatsis(s0,s1,s2,s3,s4,s5);--定义6个状态signalcurrent_state,next_state:stats:=s0;beginprocess(clk,reset)beginifreset='1'thencurrent_state=s0;elsifclk'eventandclk='1'thenifreset='0'thencurrent_state=next_state;endif;endif;endprocess;process(current_state,enset,k,set)begincasecurrent_stateiswhens0=cth='0';ctm='0';cts='0';cbh='0';cbm='0';flashh='0';flashm='0';flashs='0';sel_show='0';if(enset='1'andk='1')then--若enset和k为“1”,next_state=s1;--由s0态转到s1态elsenext_state=s0;endif;whens1=ctm='0';cts='0';cbh='0';cbm='0';flashh='1';flashm='0';flashs='0';sel_show='0';ifset='1'thencth='1';--若set为“1”,cth输出“1”elsecth='0';--进入调小时状态。endif;if(enset='1'andk='0')then--若enest为“1”,k为“0”,next_state=s2;--由s1态转到s2态6elsenext_state=s1;endif;whens2=cth='0';cts='0';cbh='0';cbm='0';flashh='0';flashm='1';flashs='0';sel_show='0';ifset='1'thenctm='1';elsectm='0';endif;if(enset='1'andk='1')thennext_state=s3;elsenext_state=s2;endif;whens3=cth='0';ctm='0';cbh='0';cbm='0';flashh='0';flashm='0';flashs='1';sel_show='0';ifset='1'thencts='1';elsects='0';endif;if(enset='1'andk='0')thennext_state=s4;elsenext_state=s3;endif;whens4=cth='0';ctm='0';cts='0';cbm='0';flashh='1';flashm='0';flashs='0';sel_show='1';ifset='1'thencbh='1';elsecbh='0';endif;if(enset='1'andk='1')thennext_state=s5;elsenext_state=s4;endif;whens5=cth='0';ctm='0';cts='0';cbh='0';flashh='0';flashm='1';flashs='0';sel_show='1';ifset='1'thencbm='1';elsecbm='0';endif;if(enset='1'andk='0')thennext_state=s0;elsenext_state=s5;endif;endcase;endprocess;endrtl;(3)仿真波形图:7(4)模块图:4.3二选一模块(1)源程序:ENTITYmux21aISPORT(a,b,s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs='0'THENy=a;ELSE--若s=0,y输出a,反之输出b。y=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;(2)仿真波形图:8(3)模块图: