第7章综合计时系统的设计与分析第7章综合计时系统的设计与分析7.1系统设计要求7.2系统设计方案7.3主要VHDL源程序7.4系统仿真/硬件验证7.5设计技巧分析7.6系统扩展思路第7章综合计时系统的设计与分析7.1系统设计要求设计一个综合性的计时系统,要求能实现年、月、日、时、分、秒及星期的计数等综合计时功能,同时将计时结果通过15个七段数码管显示,并且可通过两个设置键,对计时系统的有关参数进行调整。具体系统功能面板如图7.1所示。第7章综合计时系统的设计与分析图7.1系统功能面板年月日星期模式调整年月日时分秒星期第7章综合计时系统的设计与分析7.2系统设计方案7.2.1综合计时电路的设计根据系统的设计要求,综合计时电路可分为计秒电路、计分电路、计时电路、计星期电路、计日电路、计月电路、计年电路等7个子模块,这7个子模块必须都具有预置、计数和进位功能,设计思想如下:第7章综合计时系统的设计与分析(1)计秒电路:以直接输入或由分频器产生的秒脉冲作为计秒电路的计数时钟信号,待计数至60瞬间,进位,计分电路加1,而计秒电路则清零并重新计秒。(2)计分电路、计时电路:其设计思想与计秒电路类似。(3)计星期电路:将计时电路产生的进位脉冲信号作为计星期电路的计数时钟信号,待计数至7瞬间,计星期电路返回1重新开始计数。第7章综合计时系统的设计与分析(4)计日电路:将计时电路产生的进位脉冲信号作为计日电路的计数时钟信号,通过系统辨认,确定本月总天数X(包括28、29、30、31四种情况),待计数至X+1瞬间,进位,计月电路加1,而计日电路返回1重新开始计数。(5)计月电路:将计日电路产生的进位脉冲信号作为计月电路的计数时钟信号,待计数至12瞬间,进位,计年电路加1,而计月电路返回1重新开始计数。(6)计年电路:将计月电路产生的进位脉冲信号作为计年电路的计数时钟信号,待计数至100瞬间,计年电路返回0重新开始计数。第7章综合计时系统的设计与分析CNT60计数模块是一个多用计时模块,它既可作为计秒电路调用,又可作为计分电路、计时电路调用。图7.2是其输入、输出端口图。其中,输入信号LD为置数控制信号,低电平有效;输入信号CLK为计数时钟信号;输入信号DATA为待预置数;输出信号NUM为计数结果;输出信号CO为计数溢出信号。第7章综合计时系统的设计与分析图7.2CNT60计数模块输入、输出端口图LDCLKDATA[5..0]NUM[5..0]COCNT60第7章综合计时系统的设计与分析CNT60的主要VHDL程序段如下:IF(LD='0')THENNUM=DATA;ELSIFCLK'EVENTANDCLK='1'THENIFNUM=111011THEN--59NUM=000000;CO='1';ELSENUM=NUM+1;CO='0';ENDIF;ENDIF;第7章综合计时系统的设计与分析CNT30的主要VHDL程序段如下:IF(LD='0')THENNUM=DATA;ELSIFCLK'EVENTANDCLK='1'THENMAX_DAYS=TOTAL_DAYS;IFNUM=TOTAL_DAYSTHEN--99NUM=00001;CO='1';ELSENUM=NUM+1;CO='0';ENDIF;ENDIF;第7章综合计时系统的设计与分析LDCLKNIAN[6..0]YUE[3..0]DATA[4..0]NUM[4..0]MAX_DAYS[4..0]COCNT30图7.3CNT30计数模块输入、输出端口图第7章综合计时系统的设计与分析7.2.2显示控制电路的设计本设计显示需要使用的是15个七段显示数码管。在计时结果显示电路中,七段数码管显示部分是一个不容忽视的环节,如若处理不得当,可能引起系统功率过大,产生散热问题,严重时甚至会导致系统的烧毁。为了解决好以上问题,下面就对七段数码管显示电路做简要的分析和介绍。第7章综合计时系统的设计与分析通常点亮一个LED所需的电流是5~50mA,通电的电流愈大,LED的亮度愈高,相对的也会使其寿命缩短。一般以10mA的导通电流来估算它所必须串联的阻值,其计算方式参考图7.4所示。七段显示器可分为共阳极、共阴极型两种,它们都可以等效成8个LED的连接电路,其中图7.5就是共阴极型七段显示器的等效电路和每节LED的定义位置图。第7章综合计时系统的设计与分析图7.4单个LED的串接电阻计算方式+5V1.6V0.34k(5-1.6)/10mA=0.34k10mA第7章综合计时系统的设计与分析图7.5共阴极型七段显示器的LED位置定义和等效电路abcgfedppgfedcba第7章综合计时系统的设计与分析根据以上设计思想,本系统的数据显示电路可分为两个子模块:(1)显示控制电路XSKZQ:负责完成数据选择扫描及数码管位选择信号的产生,数据扫描选择输出,对于选择的数据进行BCD码转换等功能;(2)显示译码电路:将用于显示的BCD码数据进行译码。第7章综合计时系统的设计与分析XSKZQ的输入、输出端口如图7.6所示。其中,输入信号CLK_SCAN为用于产生数据选择扫描等控制信号的时钟信号;输入信号SEC、MIN、HOUR、DAY、MON、YEAR、WEEK分别来自计秒电路、计分电路、计时电路、计日电路、计月电路、计年电路、计星期电路等计时电路的计时结果输出端;输出信号BCD为被选择进行显示的计秒/计分/计时/计日/计月/计年/计星期电路等计时电路的计时结果的8位BCD码,输出端SELOUT经外部的3-8译码电路译码后用于选择对应计时结果显示数码管的公共端COM。图7.7为15个共阴极型七段数码管驱动接线图。第7章综合计时系统的设计与分析图7.6XSKZQ的输入、输出端口图CLK_SCANSEC[5..0]MIN[5..0]HOUR[4..0]DAY[4..0]MON[3..0SELOUT[2..0]BCD[7..0]XSKZQYEAR[6..0]WEEK[2..0]第7章综合计时系统的设计与分析图7.715个共阴极型七段数码管驱动接线图agagcomcomagcomagcomagcomagcomagcomSM14SM13SM12SM3SM2SM1SM0…共阴数码管LOW_SEG7[7..0]HIGHT_SEG7[7..0]SEL_GND(7)SEL_GND(6)SEL_GND(1)SEL_GND(0)…第7章综合计时系统的设计与分析7.2.3调整控制电路TZKZQ的设计对于系统中的时间调整电路,拟通过模式和调整两个外部按键完成。模式键负责切换正常时间计数模式和时间调整模式,调整模式切换顺序如图7.8所示。调整键负责在时间调整模式之下,对当前模式的计时结果进行调整。第7章综合计时系统的设计与分析图7.8调整模式切换顺序调星期正常调秒调分调时调年调月调日第7章综合计时系统的设计与分析图7.9TZKZQ的输入、输出端口图KEY[1..0]CLK_KEYMAX_DAYS[4..0]HOUR_CUR[4..0]MIN_CUR[5..0]SEC_CUR[5..0]YEAR_CUR[6..0]MON_CUR[3..0]DAY_CUR[4..0]WEEK_CUR[2..0]SEC_ENMIN_ENHOUR_ENDAY_ENMON_ENYEAR_ENWEEK_ENSEC[5..0]MIN[5..0]HOUR[4..0]DAY[4..0]MON[3..0]YEAR[6..0]WEEK[2..0]TZKZQ第7章综合计时系统的设计与分析7.2.4系统总体组装电路的设计此系统的总体组装电路图如图7.10(略)所示。第7章综合计时系统的设计与分析7.3主要VHDL源程序7.3.1综合计时电路的VHDL源程序1.CONT60计时电路的VHDL源程序--CNT60.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT60IS第7章综合计时系统的设计与分析PORT(LD:INSTD_LOGIC;--置位信号(低电平有效)CLK:INSTD_LOGIC;--时钟脉冲DATA:INSTD_LOGIC_VECTOR(5DOWNTO0);--预置数NUM:BUFFERSTD_LOGIC_VECTOR(5DOWNTO0);--计数结果CO:OUTSTD_LOGIC);--进位信号ENDENTITYCNT60;ARCHITECTUREARTOFCNT60IS第7章综合计时系统的设计与分析BEGINPROCESS(CLK,LD)ISBEGINIF(LD='0')THENNUM=DATA;ELSIFCLK'EVENTANDCLK='1'THENIFNUM=111011THEN--59NUM=000000;CO='1';ELSE第7章综合计时系统的设计与分析NUM=NUM+1;CO='0';ENDIF;ENDIF;ENDPROCESS;ENDARCHITECTUREART;第7章综合计时系统的设计与分析2.CONT30计时电路的VHDL源程序--CNT30.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT30ISPORT(LD:INSTD_LOGIC;--置位信号(低电平有效)CLK:INSTD_LOGIC;--时钟脉冲第7章综合计时系统的设计与分析NIAN:INSTD_LOGIC_VECTOR(6DOWNTO0);--当前年YUE:INSTD_LOGIC_VECTOR(3DOWNTO0);--当前月DATA:INSTD_LOGIC_VECTOR(4DOWNTO0);--预置数NUM:BUFFERSTD_LOGIC_VECTOR(4DOWNTO0);--计数结果MAX_DAYS:OUTSTD_LOGIC_VECTOR(4DOWNTO0);--本月总天数CO:OUTSTD_LOGIC);--进位信号ENDENTITYCNT30;第7章综合计时系统的设计与分析ARCHITECTUREARTOFCNT30ISSIGNALTOTAL_DAYS:STD_LOGIC_VECTOR(4DOWNTO0);BEGINPROCESS(CLK,LD)ISVARIABLEIS_RUNNIAN:STD_LOGIC;BEGINCASENIANISWHEN0000000=IS_RUNNIAN:='1';--0第7章综合计时系统的设计与分析--如当前年为00,则输出闰年确认信号WHEN0000100=IS_RUNNIAN:='1';--4WHEN0001000=IS_RUNNIAN:='1';--8WHEN0001100=IS_RUNNIAN:='1';--12WHEN0010000=IS_RUNNIAN:='1';--16WHEN0010100=IS_RUNNIAN:='1';--20WHEN0011000=IS_RUNNIAN:='1';--24WHEN0011100=IS_RUNNIAN:='1';--28WHEN0100000=IS_RUNNIAN:='1';--32WHEN0100100=IS_RUNNIAN:='1';--36WHEN0101000=IS_RUNNIAN:='1';--40WHEN0101100=IS_RUNNIAN:='1';--44WHEN0110000=IS_RUNNIAN:='1';--48WHEN0110100=IS_RUNNIAN:='1';--52WHEN0111000=IS_RUNNIAN:='1';--56第7章综合计时系统的设计与分析WHEN0111100=IS_RUNNIAN:='1';--60WHEN1000000=IS_RUNNIAN:='1';--64WHEN1000100=IS_RUNNIAN:='1';--68WHEN1001000=