毕业设计(论文)-数字闹钟的电子设计.doc

上传人:西安人 文档编号:3946918 上传时间:2019-10-10 格式:DOC 页数:31 大小:1.13MB
返回 下载 相关 举报
毕业设计(论文)-数字闹钟的电子设计.doc_第1页
第1页 / 共31页
毕业设计(论文)-数字闹钟的电子设计.doc_第2页
第2页 / 共31页
毕业设计(论文)-数字闹钟的电子设计.doc_第3页
第3页 / 共31页
毕业设计(论文)-数字闹钟的电子设计.doc_第4页
第4页 / 共31页
毕业设计(论文)-数字闹钟的电子设计.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《毕业设计(论文)-数字闹钟的电子设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-数字闹钟的电子设计.doc(31页珍藏版)》请在三一文库上搜索。

1、数字设计数字闹钟的电子设计 班 级: 04通信 学 号: 20040734046 姓 名: 目 录1、设计目的 32、设计选题 33、设计要求 34、分析要求和总体设计 35、详细设计过程及遇到的困难与解决方法 46、顶层设计 167、设计感想 19附:参考文献及程序 20一、 设计目的:1. 通过设计,掌握电子设计的一般思路,学习电子设计的一般方法.2. 通过设计,学习掌握MAX-PLUS2的使用方法.二、 设计选题通过小组成员讨论,决定做数字钟的设计.三、 设计要求设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与闹钟功能,能在设定的时间发出闹铃音,能非常方便地对

2、小时、分钟和秒进行手动调节以校准时间,每逢整点,产生报时音报时。 四、 分析要求和总体设计1. 根据老师所给设计要求规纳有以下需求的功能:1.计时功能:这是本数字钟设计的基本功能,每隔一秒钟计时一次,并在显示屏上显示当前时间.2.闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出报警声.3.校时功能:设置新的时间作为当前时间.4.设置闹钟:设置闹钟时间.5.整点报时:每逢整点则报时.2. 根据需求分析,我们采用自顶向下的方法确定数字钟的总体实现思路如下:要实现以上的功能,经过分析我们设计了四个模块.分别是:计时模块,校时功能模块,闹钟功能模块和选择显示模块.根据自顶向下的设计方法确定数字

3、钟的设计方案.为完全实现上面的4个功能,我们进一步向下进行功能划分,得到更详细的设计方案如下:数字钟计时模块校时功能模块闹钟功能模块选择显示模块模24计数器模60计数器数字钟校时闹钟校时显示设置时间显示计数时间显示闹钟 3. 各模块具体实现的功能及彼此之间的数据流流动方向:1.计时模块:计时器的设计采用一般的计数器的设计方法,只是模60的秒计数器满60送进位输出,作为分计数器的CLK时钟信号.同理, 模60的分计数器满60送进位输出,作为时计数器的CLK时钟信号,这样就实现了电子时钟计数的雏形,以上是计时模块内部的数据流流向;由于要显示,所以必须还要有一个输出来表示现在的计数值,这个计数值应该

4、送到选择显示模块进行显示,这是计时模块与外部的数据交换.2. 校时功能模块:校时电路用来完成对计时时间以及闹钟时间的修改与校正,修改后的时间应该要送到相应的计数模块作为新计数的起始值,所以要有输出端将修改后的数值送到相应的计数模块.3. 闹钟功能模块:比较当时的时间是否与闹钟设置的时间相等,如果相同则应该发出通知,告诉用户时间到了,有点类似于比较器.因此要能从计时模块获得当时时间,从校时模块获得设置的闹钟时间,要能将结果输出作为提示.4. 选择显示模块根据所在的状态,选择输出正在设置的新计数时间或新闹钟时间或当前计数时间.五、 详细设计过程及遇到的困难与解决方法1. 计时模块的设计1.模60的

5、计数器的设计:(a).实现方案:采用一般的计数器的设计方法,每来一个CLK时钟信号(T为1秒),计数值加1;如果计数到59,输出一个进位,表示一个周期.(b).实现过程中的问题及解决方案:通过以上分析,我做了初步的设计,在机子上输入草稿上的程序后,通过提示,发现以下的几个错误:对于第一个提示错误,我通过将SIGNAL中的BUFFER去掉即可,由于我输出的Q_OUT中定义的是BUFFER,所以为了省时间直接拷贝,粗心而导致的错误.因为这里不是在定义引脚,而只是内部的连接线定义,但BUFFER是相当于带输出缓冲器并可以回读的引脚,所以肯定是错误的.上面这个图是我改正了几个小错后才保存的,其它一些错

6、误的提示就没有在上面.还有两个错误是:我在定义端口时,定义了输出EN,并且在PROCESS的敏感参数表中列出来了,但在后面却没有用到,所以提示出错.在PROCESS的敏感参数表中忘记写CLK信号,却写了一个输出引脚,这是致命性的错误.在输入过程中的手误,将QL=9写成了QL=9,提示出错,明显要么写成QL=”1001”.其它,逻辑上倒没有出错,因为这是参照EDA教材上187页的具有异步复位同步置数功能的计数器改写的.仿真图如下,为了便于观察分析,我在这设的END TIME是13微秒.以上是我在单独设计模60计数器时写下的,但在顶层设计时,发现如果按上面这个设计结果,将无法将新设置的时间作为新的

7、起始计数时间.经分析只要增加一个输入用来接受新的设置值,相应用一个OK信号控置便能实现.因此,增加了两个输入.出现这种情况的主要原因是概要设计没做到位.以下是修改后的仿真及相应模块的引脚图:分析可知60个脉冲要12微秒,为了观察的方便,我设置的END TIME=13,为了检验计数到59-0和以设置的新时间为起始计数的功能是否实现,因此做了以下的输入.从仿真结果可以方便的看出,功能得到了很好的实现.在OK信号未来之前,计数正常进行,到59则重新从00开始计数,如果OK信号一来,计数器对新设置的时间进行加载作为新起始计数值.此功能实现基本上秒和分的计时功能得到了成功设计.2.模24计数器的设计:(

8、a).实现方案:采用一般的计数器的设计方法,每来一个CLK时钟信号(T为1秒),计数值加1;如果计数到23,输出一个进位,表示一个周期.类似于模60计数器的设计方法.(b).实现过程中的问题及解决方案:对于COUNT 24的设计,我是仿照COUNT 60改写的,语法上倒没怎么出错,不过刚粘贴修改后忘设当前PROJECT,结果程序去运行COUNT60去了,而刚好我将文件移动了下位置,结果提示出错如下.设了PROJECT后运行,语法没错,只是逻辑上出错了,因为我没改,所以它到29才变,后修改逻辑执行,得仿真如下:(计数24约END TIME=4.8微秒.为了便于分析,这里设成了5.5微秒) 分析程

9、序的仿真结果如上图可知:计数是以24为周期,当计数到23时,如果再有进位,就计数从0重新开始,并给出一个进位信号,这个信号可以做为日期的CLK信号,从而实现显示日期的功能.同模60计数器的设计一样,从单个模块来看以上的仿真结果自认为是正确的.但在顶层设计时,发现如果按上面这个设计结果,将无法将新设置的时间作为新的起始计数时间.经分析只要增加一个输入用来接受新的设置值,相应用一个OK信号控制便能实现.因此,增加了两个输入.出现这种情况的主要原因是概要设计没做到位.以下是修改后的仿真及相应模块的引脚图:针对以上的问题是解决了,但后来仔细观察发现COUT从有了第一次进位后就保持了这个值,而在没有进位

10、的时候也输出进位,带着这个问题,我分析出进位输出后,在低位进行加1 时没有将进位清0.因此,找到相应程序部分改成了ELSE QL=QL+1;COUT=0;修改后进行仿真,仿真结果如下图,可知修改成功.从这里也让我知道,在做单个模块时的仿真图一定要仔细分析,像这个错误如果不是发现的早,到后来的整体顶层设计时,计数功能将会出现严重的错误,那时候再来找原因,比现在可难多了.这个系统还算比较小,如果更复杂的系统就更难找出错误了.因此,每个模块设计的功能检测不能马虎,也体会到了,不是说一个模块做出来了,就完全在顶层设计不会出错的,譬如这里如果不增加输入端口,在顶层设计时,既使语法没错,逻辑功能也不能实现

11、.总之,各模块要完全实现相应功能,并且要在设计前想好框架和各模块之间的数据流流程,在这一点上感觉我的这次设计做的很不到位,因此造成很多次基本功能实现了,可是有些功能却无法实现,又得返回去重新设计,全部返工很耗时间,因为每设计一个模块要仿真等等.但是如果不仿真又不能完全肯定设计达到要求.所以最好的方法是详细设计做到位,引脚及要实现的功能写在详细设计说明书里面,设计时根据设计说明的要求来,每步实现每步的功能,这样只要详细设计做到位,返工的可能性就少多了.对于COUNT 24的设计,我是用COUNT 60来CTRL+C和CTRL+V得到的,因此COUNT 24出现了这个问题,返回去看COUNT 60

12、的确也出现了相应问题,修改后仿真如下: 2. 校时功能模块(a).实现方案:对这个模块的功能实现,我原来想参照教材P314的实现方法-用状态机的形式来控制,虽然实现起来也就是套用状态机的一般格式,但是我觉得有个缺陷,那就是平时用的电子手表会有设这么多个按键吗?一般都是几个按键灵活用,设置时间时是先选定是设置秒分时的哪一个,然后一直按一个按键来实现时间的调整,这时的状态完全是一个计时器的功能,我就是以这个思路来设计的.个人觉得方法也较简单,因为主体功能实现基本是用60和24的计数器的方法. (b).实现过程中的问题及解决方案对于SET_TIME模块的设计,花费了不少功夫,也出了不少的错误,以下是

13、一些主要的调试出错过程.根据自己在草稿纸上的实现语句,在机子上运行出错信息如上,代码出错是可以理解的,学C+到现在也不敢保证我写个几十行程序不会写错,不过这里一些错的确有点粗心.根据提示分别进行修改,过程如下:“OK”等没有定义,明显写了,但是提示却没有定义,肯定是定义时的语句问题,仔细观察发现PORT( );没写完整.输入的过程中,由于粗心将ART输错,根据提示得到了相应的解决.修改相应提示错误后,编译得到:第二天调试了半天,结果与预料的完全背道而驰,连一个输出都没有,也就是说它无法达到IF中的条件,开始时我在想是不是变量名与系统有冲突,但想想如果是冲突应该是报语法错,而不是逻辑错,再分析发

14、现原来我的秒IN_MIN/分IN_MIN/时IN_MIN等都设置是STD_LOGIC_VECTOR(3 DOWNTO 0)最大才23+22+21+20=15,改成8位的,结果就有输出了,但却并不是希望的结果,也就是逻辑上又错了,通过相应的改动,再进行调试结果如下,分析可知,这个运行结果是比较符合要求的,不过由于END TIME太小,看不到所有正确的运行结果,也就相当于没有软件工程中的测试文档,有时候的测试数据不是很理想.后来分析,设置60个计数大约是12us,想测试到59后是否会回到0,就得超过12微秒.因此,在这设END TIME=13.5分析可知时间设置SET_TIME模块得到了很好的实现

15、,这相当于标志着我的设计基本差不多了.因为,时间设置一成功,后面我想设计的模块基本上在这个模块的基础上改动一些小地方就能实现.譬如说:日期的显示与设置,完全可以在此基础上进行,年份的设置的高两位即2007中的20可以用系统保存为缺省,年份的低两位/月份/日期就完全可以用SET_TIME的方法来设置,而对于闹钟就基本上一样的方法来实现设置闹钟时间了.由以上设计得到的相应模块的引脚图如下:3. 选择显示模块(a).实现方案:这个模块的设计是最为简单的,因为它要实现的功能就是选择输出,在设计中有设置时间和显示时间不同的模块,显示相对应的时间,我的想法是:用一个输出控制信号来选择输出,由前面的设计中我

16、们知道设置时间按钮是EN,如果EN有效就表示在设置时间.因此,我们完全可以就用EN来控制,如果EN有效,就显示输出正在设置的值,否则显示当前时间值.从分析就可以明确,只要一个IF语句基本上就能达到要求.在这里,我定义了一个输出用来告诉用户现在显示的是设置时间还是当前时间,即SET_LED接指示灯.(b).实现过程中的问题及解决方案 这个模块设计中出现的一个错误是:由于CTRL+C的是SET_TIME模块,这样可以少输入一些常用的东西,但在修改时漏改ARCHITECTURE ART OF SELECT_OUT IS部分,结果显示如下图的提示错误. 修改程序后得以下的引却图:由以上的仿真结果可以看

17、出:当EN为0时(即非设置状态),输出DISP是当前时钟QOUT部分,当EN为1时(即设置时间状态),输出DISP是OK部分,并且SET_LED输出高电平,告诉用户现在显示的是设置时间.其中IN部分是中间信号.因此由以上仿真结果可以看出功能基本实现,不过LED显示有个时钟的延迟,如果是标准秒计时应该是有1秒延迟.这个做为一个提示信号倒不是太大的问题,上次更改程序还没解决.4. 闹钟系统的设计(补充设计)由于在第一次设计中,对设计需求的忽视,忘记了对闹钟系统的设计,后来再增加这一功能给设计带来了一定的困难,通过分析(后面有详细说明),我选择了方案三结合方案一.其中是实现时,出现的一些错误及调试过

18、程.由于引脚太多引起的错误,我在原来设计的SELECT中去掉了SET_LED指示灯,准备放到输入中直接接.更改后仿真结果如下(功能实现了,不过不是很精确):模块设计出来了,将这一个改动的模块直接代替原来设计好的顶层图中的模块,不过由于设计出来的引脚位置不一样,如果改线的连接,感觉有点麻烦,我选择改模块图如下:六、 顶层设计根据要实现的功能,将设计的各模块连成电路图如下:它对应的仿真图如下: 设计做到这,如果结果正确就基本上设计完成了,可是在仿真过程中,再来看老师的设计要求发现闹钟部分没有设计.因此得重新设计出新功能.对照着以上的顶层设计电路图.我的三个修改方案是:1. 在SET_TIME模块中

19、,增加一个ALARM按键,用来控制设置闹钟,然后在SET_TIME中增加IF语句,如果EN=0 AND ALARM=1,则进入设置闹钟的时间状态,可以再在SET_TIME中增设内部信号,用来保存设置的闹钟值,并将值送给OK去显示,当然,相应的SELECT_OUT的EN使能信号就应是EN与ALARM的或值.但此时还是必须在SELECT中增加比较的语句,用来判断是否是到了闹钟时间,如果到了,则应该输出一个闹钟信号.思路个人觉得应该是对的.2. 直接增加一个闹钟处理模块,其实也完全可以就采用增加一个SET_TIME的方法,只要记住这里它是用来实现闹钟的,然后,在选择输出模块的基础上再增加一个比较器.

20、还可以在这里增加一个倒计时功能.这种设计我用SET_TIME的方法尝试过并且设计结果显示是正确的,不过由于要修改以上的SELECT_OUT和SET_TIME太多的地方,因此我还是没有采用这种方法.不过程序及仿真部分放在了附录中,模块名是END_TIME.3. 我的想法是直接在SELECT模块中修改来实现,主要是因为顶层设计都出来了,如果修改太多有点麻烦.所以我想在SELECT中增加一个标志,用来标志EN键按下的次数,按下一次,则送来的信号当作时间设置信号;当再按下,则作为闹钟信号保存下来,因为这时OK没按下,就不会送作初始计时信号.这样周而复始,如果实在不行可以类1的方法增加一个按键来实现.同

21、时,这个如果实现了,则可以省一些按键,如设置时间的SET_SEC,SET_MIN,SET_HOUR等就可以用一个键来实现,这样就和平常用的电子手表有点相接近了.同样,这样再增加年月的功能时,按键数也不会成为一个问题了.更改后最终的带有闹钟功能的电子钟总接线图如下所示:功能说明:RESECT:用来将设置时间清零,不过后来发现其实这个脚可有可无,功能不大.CLK:标准时钟送入.EN:用来控制时间的设置,为1时,设置新时间,且”通知”SELECT_OUT现在输出下在设置的时间.ALARM_EN:用来控制闹钟时间的设置,不过由于只有一组显示器件,所以为1时,如果EN为0,才进行闹钟的设置.OK:用来控

22、制设置的时间是否作为新的时间,如果有效,则计数模块进行加载新时间.SET_.组:用来设置新时间等的值.基本实现思路:如果EN和ALARM_EN无效,则显示当前正常计数时间.其中秒COUNT60的进位COUT每60计数变为高,并作为分计数的时钟信号,同理分做时的时钟信号,时做日的时钟信号(这里没有设计日期的,不过思路我在上面已经分析过,方法类似于电子钟.闰年等的算法在C+,VB,JAVA,汇编中很常见,只需要更改成VHDL语言即可, 实现起来不是难事,不过由于时间问题,在这就不设计了.)QOUT组即当时的时间.对于闹钟部分和选择输出部分在模块分析时,已经讲的很清楚,在这就不在赘述了.七、 设计感

23、想在每步的设计中已经将感想穿插在里面了。附录:参考文献及程序模24计数器的设计:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNT24 ISPORT (RESET,CLK,OK:IN STD_LOGIC; COUT:OUT STD_LOGIC; Q_IN:STD_LOGIC_VECTOR(7 DOWNTO 0); Q_OUT:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY COUNT24;ARCHITECTURE ART OF C

24、OUNT24 ISSIGNAL QL:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL QH:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(RESET,CLK,OK) ISBEGINIF(RESET=1)THENQH=0000;QL=0000;COUT=0;ELSIF(OK=1)THENQH(3 DOWNTO 0)=Q_IN(7 DOWNTO 4);QL(3 DOWNTO 0)=Q_IN(3 DOWNTO 0);ELSIF(CLKEVENT AND CLK=1)THENIF(QL=9)THENQL=0000;COUT=0;QH=QH+

25、1;ELSIF(QL=3 AND QH=2)THENQH=0000;QL=0000;COUT=1;ELSE QL=QL+1;COUT=0;END IF;END IF;END PROCESS;Q_OUT(3 DOWNTO 0)=QL;Q_OUT(7 DOWNTO 4)=QH;END ARCHITECTURE ART;模60计数器的设计:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNT60 ISPORT (RESET,CLK,OK:IN STD_LOGIC; COUT:OUT

26、STD_LOGIC; Q_IN:STD_LOGIC_VECTOR(7 DOWNTO 0); Q_OUT:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY COUNT60;ARCHITECTURE ART OF COUNT60 ISSIGNAL QL:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL QH:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(RESET,CLK,OK) ISBEGINIF(RESET=1)THENQH=0000;QL=0000;COUT=0;ELSIF(OK=1)TH

27、ENQH(3 DOWNTO 0)=Q_IN(7 DOWNTO 4);QL(3 DOWNTO 0)=Q_IN(3 DOWNTO 0);ELSIF(CLKEVENT AND CLK=1)THENIF(QL=1001)THEN QL=0000;IF(QH=0101)THENQH=0000;COUT=1;ELSE QH=QH+1;COUT=0;END IF;ELSE QL=QL+1;COUT=0;END IF;END IF;END PROCESS;Q_OUT(3 DOWNTO 0)=QL;Q_OUT(7 DOWNTO 4)=QH;END ARCHITECTURE ART;选择显示模块的设计:LIBRA

28、RY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SELECT_OUT ISPORT (CLK,EN,ALARM_EN:IN STD_LOGIC;ALARM:OUT STD_LOGIC; QOUT_SEC,QOUT_MIN,QOUT_HOUR,OK_SEC,OK_MIN,OK_HOUR:STD_LOGIC_VECTOR(7 DOWNTO 0);DISP_SEC,DISP_MIN,DISP_HOUR:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY SE

29、LECT_OUT;ARCHITECTURE ART OF SELECT_OUT ISSIGNAL IN_SEC:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL IN_MIN:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL IN_HOUR:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL ALARM_SEC:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL ALARM_MIN:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL ALARM_HOUR:STD_LOGIC_VECTOR(7

30、 DOWNTO 0);BEGINPROCESS(CLK)ISBEGINIF(CLKEVENT AND CLK=1)THENIF( EN=1) THENIN_SEC=OK_SEC;IN_MIN=OK_MIN;IN_HOUR=OK_HOUR;ELSIF( ALARM_EN=1) THENALARM_SEC=OK_SEC;ALARM_MIN=OK_MIN;ALARM_HOUR=OK_HOUR;IN_SEC=OK_SEC;IN_MIN=OK_MIN;IN_HOUR=OK_HOUR;ELSEIN_SEC=QOUT_SEC;IN_MIN=QOUT_MIN;IN_HOUR=QOUT_HOUR;IF(ALAR

31、M_SEC=QOUT_SEC AND ALARM_MIN=QOUT_MIN AND ALARM_HOUR=QOUT_HOUR)THEN ALARM=1;ELSE ALARM=0;END IF;END IF;END IF;END PROCESS;DISP_SEC(7 DOWNTO 0)=IN_SEC(7 DOWNTO 0);DISP_MIN(7 DOWNTO 0)=IN_MIN(7 DOWNTO 0);DISP_HOUR(7 DOWNTO 0)=IN_HOUR(7 DOWNTO 0);END ARCHITECTURE ART;校时功能模块的设计LIBRARY IEEE;USE IEEE.STD_

32、LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SET_TIME ISPORT (RESET,CLK,EN,OK:IN STD_LOGIC; SET_SEC,SET_MIN,SET_HOUR:IN STD_LOGIC; OK_SEC,OK_MIN,OK_HOUR:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY SET_TIME;ARCHITECTURE ART OF SET_TIME ISSIGNAL IN_SEC:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL I

33、N_MIN:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL IN_HOUR:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(RESET,CLK,EN,OK)ISBEGINIF RESET=1 THEN IN_SEC=00000000;IN_MIN=00000000;IN_HOUR=00000000;ELSIF(CLKEVENT AND CLK=1)THENIF (EN=1 AND OK=0) THEN IF SET_SEC=1 THENIF IN_SEC(3 DOWNTO 0)=9 THEN IN_SEC(3 DOWNTO 0)=00

34、00; IF IN_SEC(7 DOWNTO 4)=5 THENIN_SEC(7 DOWNTO 4)=0000;ELSE IN_SEC(7 DOWNTO 4)=IN_SEC(7 DOWNTO 4)+1;END IF;ELSE IN_SEC(3 DOWNTO 0)=IN_SEC(3 DOWNTO 0)+1;END IF;END IF;IF SET_MIN=1 THENIF IN_MIN(3 DOWNTO 0)=9 THEN IN_MIN(3 DOWNTO 0)=0000; IF IN_MIN(7 DOWNTO 4)=5 THENIN_MIN(7 DOWNTO 4)=0000;ELSE IN_MI

35、N(7 DOWNTO 4)=IN_MIN(7 DOWNTO 4)+1;END IF;ELSE IN_MIN(3 DOWNTO 0)=IN_MIN(3 DOWNTO 0)+1;END IF;END IF;IF SET_HOUR=1 THENIF IN_HOUR(3 DOWNTO 0)=9 THEN IN_HOUR(3 DOWNTO 0)=0000;IN_HOUR(7 DOWNTO 4)=IN_HOUR(7 DOWNTO 4)+1;ELSIF IN_HOUR(7 DOWNTO 4)=2 AND IN_HOUR(3 DOWNTO 0)=3 THENIN_HOUR(7 DOWNTO 4)=0000;I

36、N_HOUR(3 DOWNTO 0)=0000;ELSE IN_HOUR(3 DOWNTO 0)=IN_HOUR(3 DOWNTO 0)+1;END IF;END IF;END IF;END IF;END PROCESS;OK_SEC(7 DOWNTO 0)=IN_SEC(7 DOWNTO 0);OK_MIN(7 DOWNTO 0)=IN_MIN(7 DOWNTO 0);OK_HOUR(7 DOWNTO 0)=IN_HOUR(7 DOWNTO 0);END ARCHITECTURE ART;END-TIME模块的设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.AL

37、L;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY END_TIME ISPORT (RESET,CLK,STOP,OK:IN STD_LOGIC; SET_SEC,SET_MIN,SET_HOUR:IN STD_LOGIC; OK_SEC,OK_MIN,OK_HOUR:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); ZERO,EN:OUT STD_LOGIC);END ENTITY END_TIME;ARCHITECTURE ART OF END_TIME ISSIGNAL IN_SEC:STD_LOGIC_VECTOR(7 DOWNT

38、O 0);SIGNAL IN_MIN:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL IN_HOUR:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(RESET,CLK,STOP,OK)ISBEGINIF RESET=1 THEN ZERO=0;EN=0;IN_SEC=00000000;IN_MIN=00000000;IN_HOUR=00000000;ELSIF(CLKEVENT AND CLK=1)THENIF (STOP=1 AND OK=0) THEN IF SET_SEC=1 THENIF IN_SEC(3 DOWNTO 0)

39、=9 THEN IN_SEC(3 DOWNTO 0)=0000; IF IN_SEC(7 DOWNTO 4)=5 THENIN_SEC(7 DOWNTO 4)=0000;ELSE IN_SEC(7 DOWNTO 4)=IN_SEC(7 DOWNTO 4)+1;END IF;ELSE IN_SEC(3 DOWNTO 0)=IN_SEC(3 DOWNTO 0)+1;END IF;END IF;IF SET_MIN=1 THENIF IN_MIN(3 DOWNTO 0)=9 THEN IN_MIN(3 DOWNTO 0)=0000; IF IN_MIN(7 DOWNTO 4)=5 THENIN_MI

40、N(7 DOWNTO 4)=0000;ELSE IN_MIN(7 DOWNTO 4)=IN_MIN(7 DOWNTO 4)+1;END IF;ELSE IN_MIN(3 DOWNTO 0)=IN_MIN(3 DOWNTO 0)+1;END IF;END IF;IF SET_HOUR=1 THENIF IN_HOUR(3 DOWNTO 0)=9 THEN IN_HOUR(3 DOWNTO 0)=0000;IN_HOUR(7 DOWNTO 4)=IN_HOUR(7 DOWNTO 4)+1;ELSIF IN_HOUR(7 DOWNTO 4)=2 AND IN_HOUR(3 DOWNTO 0)=3 T

41、HENIN_HOUR(7 DOWNTO 4)=0000;IN_HOUR(3 DOWNTO 0)=0000;ELSE IN_HOUR(3 DOWNTO 0)=IN_HOUR(3 DOWNTO 0)+1;END IF;END IF;EN=1;ELSIF (STOP=1 AND OK=1) THENIF IN_SEC(3 DOWNTO 0)=0 THENIF IN_SEC(7 DOWNTO 4)=0 THENIF IN_MIN(3 DOWNTO 0)=0 THENIF IN_MIN(7 DOWNTO 4)=0 THENIF IN_HOUR(3 DOWNTO 0)=0 THENIF IN_HOUR(7

42、 DOWNTO 4)=0 THENZERO=0;EN=0;IN_SEC(7 DOWNTO 0)=00000000;IN_MIN(7 DOWNTO 0)=00000000;IN_HOUR(7 DOWNTO 0)=00000000;ELSE IN_HOUR(7 DOWNTO 4)=IN_HOUR(7 DOWNTO 4)-1;IN_SEC(7 DOWNTO 0)=01011001;IN_MIN(7 DOWNTO 0)=01011001;IN_HOUR(3 DOWNTO 0)=1001;END IF;ELSE IN_HOUR(3 DOWNTO 0)=IN_HOUR(3 DOWNTO 0)-1; IN_SEC(7 DOWNTO 0)=01011001; IN_MIN(7 DOWNTO 0)=01011001;END IF;ELSE IN_MIN(7 DOWNTO 4)=IN_MIN(7 DOWNTO 4)-1; IN_SEC(7 DOWNTO 0)=01011

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1