您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数字钟VHDL程序 (2)
1大连理工大学本科实验报告题目:数字钟的VHDL设计课程名称:数字电路课程设计学院(系):电子信息与电气工程学部专业:电子信息工程班级:学生姓名:学号:完成日期:2013.12.15成绩:2013年12月15日2课程设计得分表平时成绩(10分)课程设计(60分考试(20分报告格式(10分)总分一、本课程设计数字钟报告完成了以下任务:1、设计一个具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)计时器。2、整点报时。两种方法任选其一:⑴发出仿中央人民广播电台的整点报时信号,即从59分50秒起,每隔2秒钟发出一次低音“嘟”的信号,连续5次,最后一次要求高音“嘀”的信号,此信号结束即达到整点。“嘟”是500Hz左右的频率输出,“嘀”是1000Hz左右的频率输出⑵通过LED闪烁实现,闪烁频率及花型可自己设计并在这里说明。3、手动校时、校分、校秒。有两种形式,但分数不一样:⑴对时分秒的每一位分别调整)。⑵只能对时分秒的两位数一起调整。4、定时与闹钟功能,能在设定的时间发出闹铃声。5、设计一个秒表,显示1%秒到60秒、手动停止。6、设计一个倒计时,显示小时、分钟、秒。7、其他创新。二、课程设计考试(20分):考试题目及要求(手写):1、完成全部要求下载显示成功2、库3、实体34、结构体5、进程6、元件例化7、主程序8、其他4数字钟的VHDL设计1.设计任务及要求:设计任务:设计一台能显示时、分、秒的数字钟。具体要求如下:(1)设计一个数字钟,能够显示当前时间,分别用6个数码管显示小时、分钟、秒钟的时间,秒针的计数频率为1Hz,可由系统脉冲分频得到。(2)在整点进行提示,可通过LED闪烁实现,闪烁频率及花型可自己设计。(3)能够调整小时和分钟的时间,调整的形式为通过按键进行累加。(4)具有闹钟功能,闹钟时间可以任意设定(设定的形式同样为通过按键累加),并且在设定的时间能够进行提示,提示同样可以由LED闪烁实现设计要求:(1)编写设计报告,要求包括方案选择、程序代码清单、调试过程、测试结果及心得体会。2.设计原理1HZ图1数字钟的系统框图该系统由振荡器、分频器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路等组成。石英晶体振荡器和分频器产生整个系统的时基信号,它直接决定计时系统的精度。“秒计数器”采用六十进制计数器,每累计60秒向“分计数器”进位;“分计数器”采用六十进制计数器,每累计60分向“时计数器”进位;“时计数器”采用二十四进制计数器,按照“24翻1”规律计数。“时、分、秒”计数器的输出经译码器送显示器显示。校时电路用来当计时出现误差时对“时、分、秒”进行校对调整。整点报时电路是根据计时系统的输出状态产生一脉冲信号,然后去触发音频发生器实现报时。振荡器分频器校时电路秒计数器分计数器分译码器秒译码器分显示器秒显示器时译码器时计数器时显示器报时53.设计过程3.1.设计思路时钟脉冲信号作为数字钟的时间基准,再经分频器输出标准秒脉冲。秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器是计满24后,系统自动复位重新开始计数。计数器的输出经译码电路后送到显示器显示。可以用校时电路进行校时。整点报时电路在每小时的最后50秒开始报时间隔一秒报一次时直至下一小时开始。3.2.数字钟的设计方案数字钟的设计包括编码模块、分频模块、秒计时模块、分计时模块、小时计时模块、闹钟模块和报时模块。该数字钟可以实现3个功能:计时功能、报时功能、闹铃和设置时间功能。3.2.1.编码模块编码模块主要是对时、分、秒的设置输入。3.2.2.分频模块在数字钟的设计中,外部输入时钟信号clk1的频率为50Mhz,其分频后的频率为clk,使其分频结果为1hz,用来提供给秒计时模块、分计时模块、小时计时模块。3.2.3.秒计时模块将“秒计时脉冲”clk接信号源单元的1HZ脉冲信号,此时秒显示将从00计时到59,然后回到00,重新计时。在秒位进行计时的过程中。秒计时器是由一个60进制的计数器构成的,具有置数和计数功能。其中reset为置数信号,当reset为1时,秒计时器置数。clk为驱动秒计时器的时钟,sec2、sec1为秒计时器的高位和低位输出。3.2.4.分计时模块分计时电路:将“分计时脉冲”clk接信号源单元的c1脉冲信号,此时分显示将从00计时到59,然后回到00,重新计时。在分位进行计时的过程中。分计时器是由一个60进制的计数器构成的,具有置数和计数功能。其中rese为置数信号,当reset为1时,分计时器置数。fen4、fen3为分计时器的高位和低位输出。3.2.5.小时计时模块将“小时计时脉冲”clk接信号源单元的c2脉冲信号,此时小时显示将从00计时到23,然后回到00,重新计时。时计时器是由一个24进制的计数器构成的,具有置数和计数功能。其中的reset为置数信号,当reset为1时,时计时器置数。shi6、shi5为时计时器的高位和低位输出。3.2.6.报时模块当分位到59时,秒位计到51秒、53秒、55秒、57秒、59秒时报时一次,而后小时位加1。3.2.7.VHDL引脚分配图64.源程序4.1.数字钟整体程序整个程序分为六个部分,分别为分频部分、校时部分、秒部分、分部分、小时部分和报时部分。4.2.VHDL程序及波形分析4.2.1.VHDL程序libraryieee;--count60useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycount60isport(clk:instd_logic;reset:instd_logic;set:instd_logic;inc:instd_logic;out1:outstd_logic_vector(3downto0);7out2:outstd_logic_vector(3downto0);c:outstd_logic;alight:outstd_logic);end;architecturerun2ofcount60issignalts1,ts2,as1,as2:std_logic_vector(3downto0):=0000;signaltclk,aclk:std_logic;beginprocess(inc,clk,set)--根据设置模式,处理inc上的脉冲信号beginifset='0'then--时间调整模式aclk='0';ifclk='1'andinc='1'then--clk=1则tclk=0,通过挖洞方式添加一个脉冲tclk='0';elsifclk='0'andinc='1'then--clk=0,则tclk=1,产生一个高电平,添加一脉冲tclk='1';elsetclk=clk;endif;elsifset='1'then--闹铃调整模式tclk=clk;aclk=inc;--inc上的脉冲直接修改闹铃定时值endif;endprocess;process(tclk,reset)beginif(reset='0')thents1=0000;ts2=0000;elsif(tclk'eventandtclk='1')thenifts1=1001thents1=0000;ifts2=0101thents2=0000;elsets2=ts2+1;endif;elsets1=ts1+1;--计数过程endif;endif;endprocess;--结束进程process(aclk,reset)beginif(reset='0')thenas1=0000;as2=0000;elsif(aclk'eventandaclk='1')thenifas1=1001thenas1=0000;ifas2=0101thenas2=0000;elseas2=as2+1;8endif;elseas1=as1+1;--计数过程endif;endif;endprocess;--结束进程process(ts1,ts2,as1,as2)--显示时间或闹铃定时值beginifset='0'then--显示时间out1=ts1;out2=ts2;else--显示定时值out1=as1;out2=as2;endif;endprocess;process(ts1,ts2,as1,as2)--判断定时值与时间值相等,输出闹铃触发信号beginif(ts1=1001andts2=0101)thenc='1';elsec='0';endif;ifts1=as1andts2=as2thenalight='1';elsealight='0';endif;endprocess;endrun2;libraryieee;--count24useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycount24isport(clk:instd_logic;reset:instd_logic;set:instd_logic;inc:instd_logic;out1:outstd_logic_vector(3downto0);out2:outstd_logic_vector(3downto0);c:outstd_logic;alight:outstd_logic);end;architecturerun1ofcount24issignalts1,ts2,as1,as2:std_logic_vector(3downto0):=0000;signaltclk,aclk:std_logic;9beginprocess(inc,clk,set)--根据设置模式,处理inc上的脉冲信号beginifset='0'then--时间调整模式aclk='0';ifclk='1'andinc='1'then--clk=1则tclk=0,通过挖洞方式添加一个脉冲tclk='0';elsifclk='0'andinc='1'then--clk=0,则tclk=1,产生一个高电平,添加一脉冲tclk='1';elsetclk=clk;endif;elsifset='1'then--闹铃调整模式tclk=clk;aclk=inc;--inc上的脉冲直接修改闹铃定时值endif;endprocess;process(tclk,reset)beginif(reset='0')thents1=0000;ts2=0000;elsif(tclk'eventandtclk='1')thenifts20010thenif(ts1=1001)thents1=0000;ts2=ts2+1;elsets1=ts1+1;endif;elsif(ts2=0010)thenif(ts1=0011)thents1=0000;ts2=0000;--计数过程elsets1=ts1+1;endif;endif;endif;endprocess;--结束进程process(aclk,reset)beginif(reset='0')thenas1=0000;as2=0000;elsif(aclk'eventandaclk='1')thenifas20010thenif(as1=1001)thenas1=0000;as2=as2+1;elseas1=as1+1;endif;elsif(as2=0010)thenif(as1=0011)then10as1=0000;as2=0000;--计数过程elseas1=as1+1;endif;endif;endif;endprocess;--结束进程process(ts1,ts2,as1,as2)--显示时间或闹铃定时值beginifset='0'then--显示时间out1=ts1;out2=ts2;else--显示定时值out1=as1;out2=a
本文标题:数字钟VHDL程序 (2)
链接地址:https://www.777doc.com/doc-3374996 .html