1、大 庆 石 油 学 院课 程 设 计2011 年 3 月 11 日课 程 EDA 技术课程设计 题 目 闹钟系统设计 院 系 电子科学学院 专业班级 电子科学与技术 学生姓名 兰士凤 学生学号 070901240102 指导教师 大庆石油学院课程设计任务书课程 EDA 技术课程设计题目 闹钟系统的设计专业 电子科学与技术 姓名 兰士凤 学号 070901240102主要内容、基本要求、主要参考资料等主要内容:设计并制作一个带闹钟功能的24小时计时器。它包括以下几个组成部分:1、显示屏,由4 个七段数码管组成,用于显示当前时间(时:分) 或设置的闹钟时间;2、数字键,实现09 的输入,用于输入新
2、的时间或新的闹钟时间;3、TIME( 时间)键,用于确定新的时间设置;4、ALARM(闹钟)键,用于确定新的闹钟时间设置,或显示已设置的闹钟时间;5、扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声基本要求:1、计时功能:这是本计时器设计的基本功能,每隔一分钟计时一次,并在显示屏上显示当前时间。2、闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。3、设置新的计时器时间:用户用数字键输入新的时间,然后按“TIME“键确认。在输入过程中,输入数字在显示屏上从右到左依次显示。例如,用户要设置新的时间12:34,则按顺序输入“1”,“2” ,“3”,“4”,与之对应,显示屏上依次显示
3、的信息为:“1”,“12” ,“123”,“1234“。如果用户在输入任意几个数字后较长时间内,例如5 s,没有按任何键,则计时器恢复到正常的计时显示状态。主要参考资料:1 潘松著.EDA技术实用教程 (第二版). 北京:科学出版社 ,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社 ,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限 2011.3.11 指导教师 专业负责人 一、总体设计思想1.基本原理数字闹钟电路的基本结构由两个 60 进制计数和一个 24 进制计数器组成,分别对秒、分、小时进行计时,当计时到 23 时 59 分 59 秒
4、时,再来一个计数脉冲,则计数器清零,重新开始计时。秒计数器的技术时钟 CLK 为 HZ 的标准信号。当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒得计时结果通过 6 个数码管来动态显示。因此,通过模式选择信号KEY1、KEY2 控制数字钟的工作状态,使其分别工作于正常计时,调整分、时和设定闹钟分、时 5 个状态。当数字闹钟处于计时状态时,3 个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为 CLK,秒的进位,分的进位;当数字闹钟处于闹钟定时状态时,可以设定小时和分;当计时到所设定的时刻时,驱动扬声器
5、,持续 1 分钟。2.设计框图系统框图主要分为三部分:第一部分为精准秒脉冲产生电路,这里我们采用频率为 32.768KHz 的标准晶振搭成精准的秒脉冲产生电路,为电子钟提供精准的秒脉冲输入。第二部分为 FPGA 核心控制电路,主要由型号为 EP3C25E144C8N 的芯片经过编程以后,向译码显示电路提供控制信号。第三部分为译码显示电路,由 4 片 74LS47 驱动 4 个 7 段数码管,在核心控制电路输出的控制信号的控制下,显示相应的时、分、秒。具体框图如下图1 所示。精 准 秒 脉 冲产 生 电 路FPGA 核 心控 制 电 路译 码 显 示 电路图 1二、设计步骤和调试过程1、总体设计
6、电路该数字钟可以实现 3 个功能:计时功能、定点报时功能和重置时间功能,因此有 3 个子模块:计时、报时(speak) 、重置时间(sd1 ,sd2)。其中计时模块有 4 部分构成:秒计时器(s1) 、分计时器(m1)、时计时器(h1)。秒计时器(s1)是由一个 60 进制的计数器构成的, 。clk 为驱动秒计时器的时钟,s1 为秒计时器的输出。分计时器(m1)是由一个 60 进制的计数器构成的,s1 为驱动分计时器工作的时钟;m1 为分计时器的输出;时计时器(h1)是由一个 24进制的计数器构成的, m1 为驱动时计时器工作的时钟,h1 为时计时器的输出;报时模块(speak)的功能是定时到
7、时,speak 输出高电平,并且持续一段时间。(1) 、秒脉冲产生电路如下图所示,由 32.768KHz 的晶振产生经过 CD4060 分频产生精准的秒脉冲。图 2(2) 、FPGA 核 心控 制 电 路 对 EP1K30TC144-3 进行编程,输出控制信号。FPGA 控 制 芯片EP1K30TC144-3图 3(3) 、译 码 显 示 电路如图,由 CD4511 驱动 7 段数码管进行显示。图 42、模块设计和相应模块程序(1) 、分计时器(second1)-分钟十位m110:process(clk,min2,sec1,sec2,md1,md2) beginif clkevent and
8、clk=1 thenif (min1=“0101“ and min2=“1001“) and (sec1=“0101“ and sec2=“1001“) then min1=“0000“;elsif min1=“0101“and min2=“1001“and (md1=0 and md2=“00“)thenmin1=“0000“;elsif (min2=“1001“and (sec1=“0101“ and sec2=“1001“) or (min2=“1001“and md1=0 and md2=“00“) then min1=min1+1;end if;end if;-end if;end
9、process m110;-分钟个位m220:process(clk,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif min2=“1001“and (sec1=“0101“ and sec2=“1001“) then min2=“0000“;elsif min2=“1001“and (md1=0 and md2=“00“) then min2=“0000“;else if (sec1=“0101“ and sec2=“1001“) or(md1=0 and md2=“00“)thenmin2=min2+1;end if;end if;en
10、d if;end process m220;(2) 、时计时器(hour1)-小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif (hou1=“00010“ and hou2=“00011“)and(min1=“0101“ and min2=“1001“) and (sec1=“0101“ and sec2=“1001“) then hou1=“00000“;elsif hou1=“00010“and hou2=“00011“and md1=0 and md2=“01“
11、then-当时间为 23 点且处于校时状态时hou1=“00000“;elsif (hou2=“01001“and(min1=“0101“ and min2=“1001“) and (sec1=“0101“ and sec2=“1001“)or (hou2=“01001“and md1=0 and md2=“01“) then hou1=hou1+1;end if;end if;end process h110;-小时个位h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginif clkevent and clk=1 thenif (ho
12、u1=“00010“ and hou2=“00011“)and(min1=“0101“ and min2=“1001“) and (sec1=“0101“ and sec2=“1001“) then hou2=“00000“;elsif hou2=“01001“and(min1=“0101“ and min2=“1001“) and (sec1=“0101“ and sec2=“1001“) then hou2=“0000“;elsif (hou2=“01001“and md1=0 and md2=“01“) or (hou1=“00010“and hou2=“00011“) then hou
13、2=“00000“;-md=1;elsif (min1=“0101“ and min2=“1001“) and (sec1=“0101“ and sec2=“1001“)or (md1=0 and md2=“01“) then hou2=hou2+1;-speak=clk;end if;end if;end process h220;(3) 、 报时模块(speak)-闹铃speaker:process(clk,hou1,hou2,min1,min2)beginif clkevent and clk=1thenif seth1=hou1 and seth2=hou2 and setm1=min
14、1 and setm2=min2 then speak=clk;else speak=0;end if;end if;end process speaker;disp:process(md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)beginif md1=0 then h1=hou1;h2=hou2; -计时时间显示和设置模式m1=min1;m2=min2; s1=sec1;s2=sec2;else -闹铃时间现实和设置模式h1=seth1;h2=seth2; m1=setm1;m2=setm2;s1=“1111“;s2=“1
15、111“;end if;end process disp;end one;3、仿真及仿真结果分析(1) 、秒时钟仿真如图 5,s2 满 10 进 1,s1 满 6 进一,即完成 60 进制秒钟计时。图 5(2) 、分时钟仿真如图 6,m2 满 10 进 1,m1 满 6 进一,即完成 60 进制分钟计时。图 6(3) 、报时仿真为了便于观察,此处定时为 18 秒,如图 speak 在 18 秒结束后被置高。(4) 、功能仿真 RTL 图4、实验调试结果在首次波形仿真时,遇到了一些困难,想要的结果不能在波形上得到正确的显示:在设定输入的时钟信号后,数字钟开始计数,但是始终看不到小时、星期的循环计
16、数。后来,在同学的帮助下和数十次的调试之后,才发现之所以错误是因为输入的时钟信号对于小时、星期来说太短了。经过屡次调试,终于找到了比较合适的输入数值:分钟的初始值可以设为 57(58、59 都可以) ,小时的初始值可以设为 23,这样,仿真之后,就能清楚的看出分钟、小时的循环计数。另外,Endtime 的值需要设置的长一点:10us 左右,输入的时钟周期值要设置的短一点:5ns 左右。三、结论及心得体会通过这次设计使我懂得了理论与实际联合是很重要的,只有把所学的理论与实践相结合起来,从理论中得出结论才能提高自己的实际动手能力,进一步加深了对 EDA 的了解,让我对它有了更加浓厚的兴趣。同时也遇到了不少困难,特别是各元件之间的连接,以及信号的定义,总是出现错误,不过在细心的检查下,终于找出了错误和警告。总的来说,这次设计的数字钟还是让我学到不少东西,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,对今后的学习有了更充满了信心。参考资料1 潘松著.EDA 技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.