《EDA数字时钟课程设计.docx》由会员分享,可在线阅读,更多相关《EDA数字时钟课程设计.docx(10页珍藏版)》请在课桌文档上搜索。
1、课程设计报4学生姓名学号班级专业电子信息工程题目数字时钟设计指导教师一、任务和设计要求1 .熟悉集成电路的引脚安排。2 .掌握各芯片的逻辑功能及使用方法。3 .了解数字钟的组成及工作原理。4 .熟悉数字钟的设计与制作。1 .设计指标(1)时间以24小时为一个周期;(2)显示时、分、秒;(3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;(4)计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时。2 .设计要求(1)画出电路原理图(或仿真电路图);(2)元器件及参数选择;(3)电路仿真与调试二、设计原理设计思路根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时
2、部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。1)时钟计数:首先下载程序进行复位清零操作,电子钟从(X):00:(X)计时开始。SethoUr可以调整时钟的小时部分,Setmin可以调整分钟,步进为1。由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部IOHz的时钟输入信号clk0对elk进行计数,当clk=10时,秒力口1,当秒力到60时,分加1;当分加到60时,时力口1;当时加到24时,全部清0,从新计时。用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT(6DOWNTO0)上的信号来点亮
3、指定的LED七段显示数码管。2)时间设置,手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是IHZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。总体结构图三、系统设计D时、分、秒计时器时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、Ok02、59、00;每当秒计数器数到00时,就会产生一个
4、脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、5900;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、23、OOo即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。2)校时电路当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。四、参考程序Alert模块1.IBRARYIEEE;US
5、EIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYalertISPORT(clkJNSTD_LOGIC;dain:INSTD_LOGIC_VECTOR(6DOWNTO0);speak:OUTSTD-L0GIC;lamp:OUTSTD_L0GIC_VECT0R(2DOWNTO0);ENDalert;ARCHITECTUREfunOFalertISSIGNALcount:STD_LOG!C_VECTOR(1DOWNTOO);SIGNALcount1:STD_LOGIC_VECTOR(1DOWNTOO);BEGINspeake
6、r:PROCESS(clk)BEGIN-speak=counl1(1);IF(cIk,eventandelk-)THENIF(dain=,OOOOOOO,)THENspeak=10)THENcountl=00;-countl为三进制加法计数器ELSEcountl=countl+l;speak=count1(O);ENDIF;ENDIF;ENDIF;ENDPROCESSspeaker;IamperTROCESS(Clk)BEGINIF(rising_edge(clk)THENIF(count=10,)THENIF(count=OO)THENIamp二“001”;-循环点亮三只灯ELSIF(cou
7、nt=O,)THENlamp=010;ELSIF(Count=nIOn)THENlamp=100n;ENDIF;count=count+1;ELSEcount=00;ENDIF;ENDIF;ENDPROCESSIamper;ENDfun;Hour模块1.IBRARYIEEE;useIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYhourISPORT(clk,reset:INSTD_LOG1C;daout:outSTD_L0GIC_VECT0R(5DOWNTO0);ENDENTITYhour;ARCHITECTUREfun
8、OFhourISSIGNALcount:STD_LOGIC_VECTOR(5DOWNTO0);BEGINdaout=count;PROCESS(clk,reset)BEGINIF(reset=,O)THENcount=OOOOOO;一若reset=O,则异步清零-否则,若CIk上升沿到ELSIF(clk,eventandclk=)THENIF(count(3DOWNTO0)=1001)THEN-若个位计时恰好到“1001”即9IF(count16#23#)THEN count=count+7;elsecount=,000000;END IF;ELSIF (count16#23#)THEN co
9、unt=count+1;ELSEcount=000000;-23进制-若到23D则-复0一若未到23D,贝IJColInt进1-否则清零END IF; -END IF (count (3 DOWNTO 0) =100,)END IF;END PROCESS;END fun;Minute模块-END IF (reset=,O)1.IBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYminuteISPORT(clk,clkl,reset,sethour:INSTD_LOGIC;enhour:OUTST
10、D_LOGIC;daout:OUTSTD_LOGIC_VECTOR(6DOWNTO0);ENDENTITYminute;ARCHITECTUREfunOFminuteISSIGNALcount:STD_LOGIC_VECTOR(6DOWNTOO);SIGNALenhour_l,enhour_2:STD_LOGIC;-enmin,l为59分时的进位信号BEGIN-enmin_2由elk调制后的手动调时脉冲信号串daout=count;enhour_2=(sethourandclkl);sethour为手动调时控制信号,高电平有效enhour=(enhour_lorenhour_2);PROCES
11、S(clk,reset,sethour)BEGINIF(reset=,O,)THEN-若reset为O,则异步清零count=OOOOOOO;ELSIF(clk,eventandclk=*)THEN-否则,若elk上升沿到IF(count(3DOWNTOO)FlOO1)THEN-若个位计时恰好到“1001”即9IF(count16#60#)THEN-又若count小于16#60#,即60IF(COUnklOllOO1)THEN-又若已到59Denhoujk=T;-则置进位为1count=0000000;-count复0ELSEcount=count+7;若count未至!159D,则力口7,即
12、作加6校正ENDIF;-使前面的16#60#的个位转变为842IBCD的容量ELSECOUnt=0000000”COUnt复0(有此句,则对无效状态电路可自启动)ENDIF;-ENDIF(count16#60#)ELSIF(count16#60#)THENcount=count1;一若CoUnt16#60#则count力口1enhour_l=0,after100ns;没有发生进位ELSECOUntV=0000(X)0否则,若count不小于16#60#count复0ENDIF;-ENDIF(count(3DOWNTOO)=n100l)ENDIF;-ENDIF(reset=,O,)ENDproc
13、ess;ENDfun;Second模块1.IBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYsecondISPORT(elk,reset,setmin:STD_LOGIC;enmin:OUTSTD_LOGIC;daout:OUTSTD_LOGIC_VECTOR(6DOWNTO0);ENDENTITYsecond;ARCHITECTUREfunOFsecondISSIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);SIGNALenmin_l,enmin_2:STD_L0G
14、IC;enmin-l为59秒时的进位信号BEGIN-enmin_2由elk调制后的手动调分脉冲信号串daout=count;enmin_2=(setminandelk);setmin为手动调分控制信号,高电平有效enmin=(enmin_1orenmin_2);enmin为向分进位信号PROCESS(clk,reset,setmin)BEGINIF(reset=,O,)THENCoUnt=0000000;-若reset为0,则异步清零ELSIF(clkeventandelk-l,)then-否则,若elk上升沿到IF(count(3downto0)=u1001)then-若个位计时恰好到“10
15、01”即9IF(count16#60#)then-又若count小于16#60#,即60HIF(count=101100,)then又若已到59DenminV=T;CoUnt=0000000;-则置进位为1及count复0ELSE一未至U59DCOUm=count+7;-则力口7,而+7=+1+6,即作”加6校正”ENDIF;ELSE-若count不小于16#60#(即count等于或大于16#60#)count=0000000;-count复0ENDIF;-ENDIF(count16#60#)ELSIF(count16#60#)then一若个位计数未到“1001”则转此句再判count=co
16、unt+1;一若CoUnt16#60#则count力口1enmin-l=,Oafter100ns;-没有发生进位ELSE否则,若count不小于16#60#count=OOOOOOO;一则count复0ENDIF;-ENDIF(count(3DOWNTO0)=,100,)ENDIF;-ENDIF(reset=,O)ENDPROCESS;ENDfun;五、系统调试与性能分析时基T产生电路数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一个频率为IHZ的、非常
17、稳定的计数时钟脉冲。调时、调分信号的产生由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加K现在我们把电路稍做变动:把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时(即为1),则数据选择器将另外一个2Hz的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关
18、,从而达到调时的目的。调节小时的时间也一样的实现。计数显示电路由计数部分、数据选择器、译码器组成,是时钟的关键部分。1、计数部分:由两个60进制计数器和一个24进制计数器组成,其中60进制计数器可用6进制计数器和10进制计数器构成;24进制的小时计数同样可用6进制计数器和10进制计数器得到:当计数器计数到24时,“2”和“4”同时进行清零,则可实现24进制计数。2、数据选择器:84输入14输出的多路数据选择器,因为本实验用到了8个数码管(有两个用来产生隔离符号一)。3、译码器:七段译码器。译码器必须能译出一,由实验二中译码器真值表可得:字母F的842IBCD码为“1111”,译码后为“1000
19、111”,现在如果只译出一,即字母F的中间一横,则译码后应为“0000001”,这样,在数码管上显示的就为一仿真raMasterTimeBar:16.6ns|Pointer:205.77usInterval:205.75usStart:122.887alueEOLlLljjLLLlL215318I I HI II IIB :未曾编辑的仿真波形S secondMethour 20&21 29 30豆12-133 14Aa U- 加 氐英国 M 曝oo日hour- .5- .4- .3-.2- .1- .0国Ianp臼min-.6- -5-.4-3】-.2-.Ij-.0仿真波形实验结果实验箱使用模
20、式7,键8为复位按键,键8为1时正常工作。键4设置小时,键7设置分钟。下载成功后,按下键8,及使六个LED复位清零,显示数秒的自动计时,可以通过4键设置小时数,7键设置分钟数。当秒数满60则进一位,分钟数满60进一位,当显示为23:59:59时,秒数在加一则显示00:00:00,之后从新计时。六、训练体会通过这次课程设计,我进一步加深了对电子设计自动化的了解。并进一步熟练了对QUartUSn软件的操作。EDA这门课程再也不像学习理论般那么空洞,有了更加贴切的了解及运用。在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足。通过与同学探讨和请教老师,终于把问题都解决了,并加深了对数字时钟原理和设计思路的了解。同时我也掌握了做课程设计的一般流程,为以后的电子设计这块积累了一定的经验,为以后从事相关工作一些帮助。做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。