EDA电子钟课程设计onw.docx
多功能能数字钟钟设计说明明:1系统统顶层框框图:各模块电电路功能能如下:1.秒计计数器、分分计数器器、时计计数器组组成最基基本的数数字钟,其其计数输输出送77段译码码电路由由数码管管显示。2.基准准频率分分频器可可分频出出标准的的1HZZ频率信信号,用用于秒计计数的时时钟信号号;分频频出4HHZ频率率信号,用用于校时时、校分分的快速速递增信信号;分分频出664HZZ频率信信号,用用于对按按动“校时”,“校分”按键的的消除抖抖动。2.多功功能数字字钟结构构框图:一、系统统功能概概述已完成功功能1. 完成时分秒秒的依次次显示并并正确计计数,利利用六位位数码管管显示;2. 时分秒各段段个位满满10正正确进位位,秒分能做做到满660向前前进位,有有系统时时间清零零功能;3. 定时器:实现整整点报时时,通过过扬声器器发出高高低报时时声音;4. 时间设置置,也就就是手动动调时功功能:当当认为时时钟不准准确时,可可以分别别对分时钟进进行调整整;5. 闹钟:实实现分/时闹钟钟设置,在在时钟到到达设定定时间时时通过扬扬声器响响铃。有有静音模模式。 待改进功功能:1. 系系统没有有万年历历功能,正正在思考考设计方方法。2. 应应添加秒秒表功能能。二、系统统组成以以及系统统各部分分的设计计1.时计计数模块块时计数模模块就是是一个22位100进制计计数器,记记数到223清零零。VHDLL的RTTL描述述如下:-cntt_h.vhddlibrraryy ieeee;use ieeee.sstd_loggic_11664.aall;use ieeee.sstd_loggic_unssignned.alll;entiity cntt_h is pportt(enn,cllk,cclr:in stdd_loogicc; ddoutt:ouut sstd_loggic_vecctorr(7 dowwntoo 0); cc:ouut sstd_loggic);end cntt_h;archhiteectuure rtll off cnnt_hh isssignnal t:sstd_loggic_vecctorr(7 dowwntoo 0);begiin pproccesss(enn,cllk,cclr) vvariiablle tt:sttd_llogiic_vvecttor(7 ddownnto 0); beggin iif een=''1' theen -异异步使能能 iif cclk 'evventt annd cclk='1'' thhen tt:=tt+1; iif tt(3 dowwntoo 0)=X""A" theen -个位等等于100则十位位加1 tt(7 dowwntoo 4):=tt(7 dowwntoo 4)+1; tt(3 dowwntoo 0):=XX"0"" -个个位清零零 eend if; iif tt>X""23"" thhen -大大于233清零 tt:=XX"000" eend if; eend if; iif cclr='1'' thhen -异步清清零 tt:=XX"000" eend if; eend if; douut<=t; eend proocesss;end rtll;时计数器器模块仿仿真波形形如下从仿真波波形可知知,当计计数到223时,下下一个时时钟上升升沿到来来时就清清零了,符符合设计计要求。时计数模模块框图图如下2. 分及秒计计数模块块分及秒计计数模块块也是一一个2位位10进进制计数数器,记记数到559清零零。VHDLL的RTTL描述述如下:librraryy ieeee;use ieeee.sstd_loggic_11664.aall;use ieeee.sstd_loggic_unssignned.alll;entiity cntt_s is pportt(enn,cllk,cclr:in stdd_loogicc; ddoutt:buuffeer sstd_loggic_vecctorr(7 dowwntoo 0); cc:ouut sstd_loggic);end cntt_s;archhiteectuure rtll off cnnt_ss issbegiin pproccesss(enn,cllk,cclr) beggin iif een=''1' theen iif cclr='1'' thhen -异异步清零零 ddoutt<=XX"000" eelsiif cclk 'evventt annd cclk='1'' thhen iif ddoutt(3 dowwntoo 0)<9 theen doout(3 ddownnto 0)<<=doout(3 ddownnto 0)+1; c<<='00' eelsiif ddoutt(7 dowwntoo 4)<5 theen doout(3 ddownnto 0)<<=X""0" doout(7 ddownnto 4)<<=doout(7 ddownnto 4)+1; eelsee doout<<=X""00"" c<<='11' eend if; eend if; elsse ddoutt<=""ZZZZZZZZZZ"" endd iff; eend proocesss;end rtll;分和秒计计数器模模块仿真真波形如如下从仿真波波形可知知,当计计数到559时,下下一个时时钟上升升沿到来来时就清清零了,并并且产生生进位信信号,符符合设计计要求。分和秒计计数模块块框图如如下3. 按键消抖抖动模块块按键消抖抖动有很很多方案案,这里里选择的的是计数数消抖,即即只当有有效电平平到来后后开始计计数,当当计数值值大于一一定值后后再输出出该有效效电平,否否则不输输出,从从而达到到消抖目目的。VHDLL的RTTL描述述如下:librraryy ieeee;use ieeee.sstd_loggic_11664.aall;entiity haooin is porrt(ddin,clkk:inn sttd_llogiic; ddoutt:ouut sstd_loggic);end haooin;archhiteectuure rtll off haaoinn issbegiin pproccesss(diin) vvariiablle tt: iinteegerr raangee 0 to 63:=0; bbegiin iif dinn='11' tthenn iif cclk 'evventt annd cclk='1''theen t:=t+11; if t>110 tthenn douut<='1''t:=t-1; elsse ddoutt<=''0' endd iff; eend if; eelsee doout<<='00'tt:=00; eend if; eend proocesss;end rtll;librraryy ieeee;use ieeee.sstd_loggic_11664.aall;use ieeee.sstd_loggic_unssignned.alll;entiity rinng iis pportt( cllk: in stdd_loogicc; cllk5000: in stdd_loogicc; cllk1kk:inn sttd_llogiic; beeep:outt sttd_llogiic);end rinng;archhiteectuure rtll off riing isbegiin pproccesss(cllk) vvariiablle tt: sstd_loggic; vvariiablle nn: iinteegerr raangee 0 to 15:=0; bbegiin iif cclk 'evventt annd cclk='1'' thhen tt:=nnot t;nn:=nn+1; eend if; iif tt='11' aand n<111 tthenn bbeepp<=cclk5500; eelsiif nn=111 thhen bbeepp<=cclk11k; eelsee beeep<<='ZZ' eend if; eend proocesss;end rtll;librraryy IEEEE; use IEEEE.sstd_loggic_11664.aall; use IEEEE.sstd_loggic_ariith.alll;use IEEEE.sstd_loggic_unssignned.alll; entiity cloock is porrt( SAA: inn sttd_llogiic; SBB: inn sttd_llogiic; SCC: inn sttd_llogiic; SDD: inn sttd_llogiic; cllk1: iin sstd_loggic; doout: buuffeer sstd_loggic_vecctorr(233 doowntto 00); -segg_daata:outt sttd_llogiic_vvecttor(7 ddownnto 0); -segg_coom:oout stdd_loogicc_veectoor(33 doowntto 00); beeep: ouut sstd_loggic -ledd:ouut sstd_loggic_vecctorr(3 dowwntoo 0) );end enttityy cllockk;archhiteectuure rtll off cllockk iss ccompponeent cntt_s is pportt(enn,cllk,cclr:in stdd_loogicc; ddoutt:buuffeer sstd_loggic_vecctorr(7 dowwntoo 0); cc:ouut sstd_loggic); eend commponnentt; ccompponeent cntt_h is pportt(enn,cllk,cclr:in stdd_loogicc; doout:buffferr sttd_llogiic_vvecttor(7 ddownnto 0) ); eend commponnentt; -coompoonennt ssegmmainn iss -poort(clkk,reesett_n:in stdd_loogicc; -ddataain:in stdd_loogicc_veectoor(115 ddownnto 0); -sseg_datta:oout stdd_loogicc_veectoor(77 doowntto 00); -sseg_comm:ouut sstd_loggic_vecctorr(3 dowwntoo 0); -ennd ccompponeent; -coompoonennt rringg iss -poort( enn: iin sstd_loggic; - clkk: iin sstd_loggic; -clkk5000: iin sstd_loggic; -clkk1k:in stdd_loogicc; -beeep:oout stdd_loogicc); -ennd ccompponeent; ccompponeent haooin is porrt(ddin,clkk:inn sttd_llogiic; ddoutt:ouut sstd_loggic); eend commponnentt; ccompponeent naoolinng iis pportt (hh,m:in stdd_loogicc_veectoor(77 doowntto 00); cllk4hhzh,clkk4hzzm:iin sstd_loggic; syys_een,ssys_rstt:inn sttd_llogiic; h_o,mm_o: ouut sstd_loggic_vecctorr(7 dowwntoo 0); beeep:outt sttd_llogiic); eend commponnentt; siignaal rreg_h:sstd_loggic_vecctorr(7 dowwntoo 0); siignaal rreg_m:sstd_loggic_vecctorr(7 dowwntoo 0); siignaal rreg_s:sstd_loggic_vecctorr(7 dowwntoo 0); siignaal rreg_m_ss:sttd_llogiic_vvecttor(7 ddownnto 0):=X""59"" siignaal rreg_m_mm:sttd_llogiic_vvecttor(7 ddownnto 0):=X""59"" siignaal rreg_m_hh:sttd_llogiic_vvecttor(7 ddownnto 0):=X""59"" siignaal cclk_h:sstd_loggic; siignaal cclk_m:sstd_loggic; siignaal cclk_s:sstd_loggic; siignaal cc_s :sstd_loggic; siignaal cc_m :sstd_loggic; siignaal cc_h :sstd_loggic; siignaal ssys_clkk1:sstd_loggic; siignaal ssys_clkk4:sstd_loggic; siignaal ssys_clkk64:stdd_loogicc; siignaal ssys_clkk5000:sttd_llogiic; siignaal ssys_clkk1k:stdd_loogicc; siignaal cclkii:inntegger:=75500000; siignaal ssys_rstt:sttd_llogiic:='0'' siignaal ssys_en:stdd_loogicc:=''1' siignaal cclk_rinng,mmh:sstd_loggic; siignaal SSAc,SBcc,SCCc,SSDc:stdd_loogicc; siignaal een_rr:sttd_llogiic; siignaal NNL_rreg_h,NNL_rreg_m:sstd_loggic_vecctorr(7 dowwntoo 0); siignaal NNL_rringg:sttd_llogiic; siignaal ssys_clkk4_NNL_hh,syys_cclk44_NLL_m:stdd_loogicc;begiin h:cntt_h porrt mmap(en=>syys_een,cclk=>cllk_hh,cllr=>>syss_rsst,ddoutt=>rreg_h); m:cntt_s porrt mmap(en=>syys_een,cclk=>cllk_mm,cllr=>>syss_rsst,ddoutt=>rreg_m,cc=>cc_m); s:cntt_s porrt mmap(en=>syys_een,cclk=>syys_cclk11,cllr=>>SCcc,doout=>reeg_ss,c=>c_s); -sleed:ssegmmainn poort mapp(cllk=>>clkk1,rreseet_nn=>SSCc,segg_daata=>seeg_ddataa,seeg_ccom=>seeg_ccom,dattainn=>ddoutt(155 doowntto 00); -rinng0:rinng pportt maap(een=>>en_r,cclk=>cllk_rringg,cllk5000=>>syss_cllk5000,cclk11k=>>syss_cllk1kk,beeep=>beeep); haaoinn1:hhaoiin pportt maap( SA,syss_cllk644,SAAc); haaoinn2:hhaoiin pportt maap( SB,syss_cllk644,SBBc); haaoinn3:hhaoiin pportt maap( SC,syss_cllk644,SCCc); haaoinn4:hhaoiin pportt maap( SD,syss_cllk644,SDDc); NLL:naaoliing porrt mmap(beeep=>>NL_rinng,hh=>rreg_h,mm=>rreg_m,cclk44hzhh=>ssys_clkk4_NNL_hh,cllk4hhzm=>syys_cclk44_NLL_m,syss_enn=>ssys_en,syss_rsst=>>syss_rsst,hh_o=>NLL_reeg_hh,m_o=>>NL_regg_m); beeep<<=cllk_rringg annd mmh; -ledd<=rreg_s(33 doowntto 00); p_syss_cllk:pproccesss(cllk1) vaariaablee t11,t44,t664,tt5000,t11k:iinteegerr raangee 0 to 5000000000; beeginn if clkk1 ''eveent andd cllk1='1'' thhen tt1:=t1+1; tt4:=t4+1; tt64:=t664+11; tt5000:=tt5000+1; tt1k:=t11k+11; iif tt1=cclkii/2 theen tt1:=0; ssys_clkk1<=nott syys_cclk11; eend if; iif tt4=cclkii/8 theen tt4:=0; ssys_clkk4<=nott syys_cclk44; eend if; iif tt64=clkki/1128 theen tt64:=0; ssys_clkk64<<=noot ssys_clkk64; eend if; iif tt5000=cllki/10000 tthenn tt5000:=00; ssys_clkk5000<=nnot syss_cllk5000; eend if; iif tt1k=clkki/220000 thhen tt1k:=0; ssys_clkk1k<<=noot ssys_clkk1k; eend if; eend if; ennd pproccesss p_syss_cllk; p_c:pproccesss(SAAc,SSBc,SCcc,SDDc) beeginn if SAcc='11' aand SDcc='00' tthenn clkk_h<<=syys_cclk44; elsse clkk_h<<=c_m; endd iff; if SAcc='11' aand SDcc='11' tthenn syss_cllk4_NL_h<=syss_cllk4; elsse syss_cllk4_NL_h<='0'' endd iff; if SBcc='11' aand SDcc='00'thhen clkk_m<<=syys_cclk44; elsse clkk_m<<=c_s; endd iff; if SBcc='11' aand SDcc='11'thhen syss_cllk4_NL_m<=syss_cllk4; elsse syss_cllk4_NL_m<='0'' endd iff; if SDcc='00' tthenn douut(77 doowntto 00)<=regg_s; douut(115 ddownnto 8)<<=reeg_mm; douut(223 ddownnto 16)<=rreg_h; elsse douut(77 doowntto 00)<="ZZZZZZZZZZZ" douut(115 ddownnto 8)<<=NLL_reeg_mm; douut(223 ddownnto 16)<=NNL_rreg_h; endd iff; ennd pproccesss p_c;P_riing:proocesss(rreg_m,rreg_s,ssys_clkk1k)variiablle cclk_rinng_tt:sttd_llogiic;variiablle tt:sttd_llogiic_vvecttor(3 ddownnto 0);begiin iff reeg_mm=X""59"" annd (regg_s=X"550" or regg_s=X"552" or regg_s=X"554" or regg_s=X"556" or regg_s=X"558") thhen cllk_rringg_t:=syys_cclk5500; ellsiff reeg_mm=X""00"" annd rreg_s=XX"000" tthenn cllk_rringg_t:=syys_cclk11k; ellse clkk_riing_t:='Z'' ennd iif; iff NLL_riing='1'' thhen clkk_riing_t:=syss_cllk1kk; ennd iif; iff syys_cclk11k ''eveent andd syys_cclk11k=''1' theen t:=t+1; ennd iif; iff t>>1 tthenn mhh<=''1' ennd iif; cclk_rinng<=clkk_riing_t;end proocesss pp_riing;end rtll;