基于Quartus II的数字钟实现_第1页
基于Quartus II的数字钟实现_第2页
基于Quartus II的数字钟实现_第3页
基于Quartus II的数字钟实现_第4页
基于Quartus II的数字钟实现_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 内蒙古大学本科毕业论文(设计) 第 页 学校代码 学号 00918128 分 类 号 密级 本科学年论文基于Quartus II的数字钟设计 院(系)名称 :电子信息工程学院 专业名称 :通信工程 年级 :2010级 学生姓名 :包胡斯楞 指导教师 :白凤山 2012年9月28日基于Quartus II的数字钟设计摘要数字钟是一种用数字电路技术实现时、分、秒计时的钟表。与机械钟相比具有更高的准确性和直观性,具有更长的使用,已得到广泛的使用。数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以用Quartus

2、 II软件结合VHDL语言编程实现数字钟的设计。这些方法都各有其特点,我的设计采用Quartus II软件结合VHDL语言编程实现数字钟。Quartus II是Altera公司推出的CPLD/FPGA开发工具,Quartus II提供了与结构五官的设计环境,设计者无需精通器件内部的复杂结构。本设计由分频模块,时钟产生模块,数码管驱动模块等三个部分组成。在Quartus II中以文本输入的方式将每个模块的源代码输入进行波形仿真,以验证设计的正确性。关键词:数字钟 Quartus II VHDL语言 波形仿真 目录绪论11数字钟设计概述22分频模块32.1分频模块原理图32.2分频模块实现原理及程

3、序32.3仿真波形及分析验证33时钟产生模块53.1时钟产生模块原理图53.2时钟产生模块实现原理及程序53.3仿真波形及分析验证54数码管驱动模块74.1数码管驱动模块原理图74.2数码管驱动模块实现原理及程序74.3仿真波形及仿真验证75总系统85.1总系统电路图85.2仿真波形及分析验证8结论10致谢11参考文献12附录A13附录B14附录C1616 内蒙古大学本科毕业论文(设计) 第 页绪论在人们日常生活中,钟表是一个随处可见的小东西。甚至,有时候它是一个装饰品,对家庭摆设起到点缀的作用。钟表的主要功能是给人用数字显示时间,为人更好的安排时间,更有效的工作学习提供时间的保障。所以设计一

4、个精密的钟表对人类的生活很有帮助。在古代,我们的祖先在不同的时期发明和制造了各种适应当时社会经济发展和人们生活需求的计时器。其中主要有圭表、日晷、漏刻、机械计时器等。随着时间的前进,科学的发达,知识的膨胀,电子行业的火热,生活频率的加快,一个与电子设计技术相结合开发的数字钟应运而生了。现在的数字钟与那些过时的钟表相比,无论是它的记录时间的精密度,还是实际物体的美观性,体积的大小,成本的多少等各个方面都有了天壤之别。数字钟比较直观,易于读懂,它实用于绝大多数人群,方便老人和小孩使用。数字钟是采用数字电路实现对时、分、秒数字显示的数字装置,广泛应用于家庭、办公室、车站、码头等公共场所,已成为人民生

5、活中不可缺少的必需品。由于数字集成电路的发展和石英晶体与振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,而且大大地扩展了钟表原先的报时功能。而今,我们已经进入了数字时代,数字钟的使用将会越来越受欢迎。数字钟与老式钟表相比具有更高的准确性和直观性,具有更长的寿命,已得到广泛的使用。数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以用Quartus II软件结合VHDL语言编程实现数字钟的设计。本论文采用的是Quartus II软件结合VHDL语言编程实现数字钟。本论文的目的只是实现数字钟计时功能,没有其它

6、功能。1数字钟设计概述提供1s时钟本设计有分频模块,时钟产生模块和数码管驱动模块等三个模块。EDA数字系统设计有自底向上和自顶向下的设计方法。自底向上的设计方法指的是,先将组成系统整体的各个独立模块的功能实现,再将各模块按它们的逻辑规律组合成系统。自顶向下的设计方法是指,先将系统的总体框图设计出来,并将各个功能分给独立模块实现,最后设计一些功能单一的模块即可。我所采用的是自底向上的设计方法。Quartus II中实现数字电路仿真有原理图和图表模块编辑,文本编辑等输入方式,这些方式都各有其优缺点。但实际设计时好多都采用原理图与文本混合输入方式。在我的设计中,实现分频模块,时钟产生模块和数码管驱动

7、模块的仿真时,我采用了文本输入方式,再将三个模块各自生成图元,用原理图输入方式组成了总系统。在采用文本输入方式时,也有VHDL语言和Verilong HDL语言,我采用了自己学过的VHDL语言。生成仿真波形时有功能仿真和时序仿真两种选项。功能仿真只对系统进行原理性波形仿真,如果是时序仿真的话,仿真波形中会加入时间延迟,使得波形效果偏向于实际系统。功能仿真能容易看出设计原理的对错,波形仿真能显示出当该设计用于实际应用时的效果。由于我的设计侧重于原理性的实现数字钟,缺乏生成实际器件的条件,所以我只做了功能仿真。三个模块的逻辑联系如图1所示。时钟产生模块提供时,分秒分频模块数码管驱动模块提供10ms

8、时钟图1分频模块中完成将输入的频率为10MHZ的时钟信号分频成周期为10ms和1s的时钟信号。时钟产生模块完成对周期为1s的时钟的计数,然后产生时,分,秒的数据。数码管驱动模块将当前时,分,秒数据转换成共阴极数码管的显示码并输出。以下章节中我会把三个模块及系统整体单独的详细解释。按它们实现原理,程序总体构思,元件图,仿真结果,分析验证的顺序说明。2分频模块2.1分频模块原理图分频模块原理图如图2所示。在Quartus II中先建立一个空的分频模块项目,再编辑文本,写入模块程序代码并编译运行,最后用生成图元命令得到模块原理图。它有一个输入端,两个输出端。输入端clk10MHZ中输入频率为10MH

9、Z时钟信号。输出端clk1s输出周期为1s的时钟脉冲,供时钟产生模块计数时使用。输出端clk10ms输出周期为10ms的时钟脉冲,供数码管驱动模块使用。图22.2分频模块实现原理及程序对于时钟模块而言,需要每60秒向分钟进以位,每60分钟向小时进一位,每24小时重回到零点零分零秒。其中,用于产生秒所需的计数时钟周期显然为一秒,用于产生分钟所需的时种周期为60秒,用于产生小时所需时钟周期为60分。因此需要分频出1s的时钟频率。要显示时,分,秒的个位和十位,系统需要控制六个数码管。若不采取一些措施,直接显示时间的话,将需要48条输出线。即使采用十进制八段译码电路,每显示一位数字需4个引脚,则6个数

10、码管也需24条引脚。实际工程中,很多时候都采用动态扫描的方法来控制数码管的显示。将数码管的段选线连到一起是从a到h的8根,加上六个数码管的位选线(即共阴极数码管内部所有发光二极管的阴极),共16根引脚即可完成数码管的驱动。采用动态显示的主要原理是人眼的视觉暂留特性,视觉暂留时间大概为60ms,则每个数码管的数字显示时间不能超过10ms。因此每10ms时间应点亮一个数码管,则该系统还需10ms频率的时钟周期。该数字系统的系统时钟为10MHZ,则为了产生1s和10ms这种周期的时钟信号。分别需要对系统时钟进行10000000分频和100000分频。在程序中我先对,系统时钟进行了 100000分频,

11、得到了10ms的时钟信号,然后再对10ms的时钟信号进行100分频,最终获得了1秒的时钟信号。程序中的实际分频是用计数的方法分频的,当需要对系统时钟M(偶数)分频时,对系统时钟周期进行计数,当计到M/2时,对输出信号去一次反,即可实现分频。所以我在分频模块的程序中,先对系统时钟信号计数了100000/2次,得到了10ms时钟周期,再对10ms信号计数了100/2次,得到了1s的时钟信号,满足了系统的时钟需求。分频程序源代码在附录A。2.3仿真波形及分析验证将附录A中的程序源代码写入Quartus II软件的文本编辑器中,保存,编译,运行。再建立与之对应的矢量波形文件,选中输入输出管脚添加到矢量

12、波形编辑窗口。给输入管脚选择合适的输入波形,选择功能仿真,开始仿真。分频模块的波形仿真中,先将输入端clk10MHZ,输出端clk10ms和clk1s添加到波形仿真窗口中,给输入端clk10MHZ选择了10MHZ频率的时钟信号,进行了仿真。当Quartus II软件的波形仿真的时间超过1ms时,会经过相当漫长的时间后,仿真结果才会出来。我为了看到分频后出现的周期为1s的信号,将仿真时间段设置成了2s,然后用了37分钟时间运行后,仿真结果才显示出来。仿真结果为图3和图4。图3图4从图3 可以看出,输出端clk10ms的波形每过5ms发生一次翻转,正好是以10ms为周期的时钟波形。从图4可以看出,

13、输出端clk1s的波形在0.5ms时翻转,正好是周期为1s的时钟波形。由于两个输出波形的周期差距是两个数量级无法在一个图形上显示,所以两个图形。3时钟产生模块3.1时钟产生模块原理图数字钟的最终目的是在数码管上显示时,分,秒形式的时间,实现这一目的首先要产生时,分,秒数据,这一功能有时钟产生模块提供。时钟产生模块原理图为图5。它的端口有输入端clk1s,rs,rm,rh和输出端hh3_0,hl3_0,mh3_0,ml3_0,sh3_0,sl3_0。输入端clk1s是周期为1s的时钟信号的输入端。输入端rs,rm,rh的功能分别是秒置零,分置零,时置零。输出端hh3.0,hl3.0分别是当前“时

14、”的十位和个位。当前“分”的十位和个位输出分别为mh3.0,ml3.0端口。当前“秒”的十位和个位输出分别为sh3.0,sl3.0端口。图53.2时钟产生模块实现原理及程序时钟产生模块的实现原理是对输入的周期为1s的时钟信号计数,当计够60时向分种进位且清零。分钟计够60时向时钟进位且清零。时钟计够24时全部清零且重新从零点零分零秒计数。计数前先看输入端rs,rm,rh是否有效,如果有效将hh3_0,hl3_0,mh3_0,ml3_0,sh3_0,sl3_0都置零,不进位,重新计数。实际程序中,以上功能由三个独立的进程控制。第一个进程中,以clk1s作启动信号,当clk1s为上升沿时,判断rs

15、是否为高电平,若是则清零sh3_0,sl3_0进程结束。若不是高电平,则判断秒是否计到59,若是则清零sh3_0,sl3_0且向分进位,进程结束。若没有计到59,则秒加一,进程结束。第二个进程中,以第一个进程的进位信号作启动信号,当这个启动信号为上升沿时,判断rm是否为高电平,若是则清零mh3_0,ml3_0进程结束。若不是高电平,则判断分是否计到59,若是则清零mh3_0,ml3_0且向时进位,进程结束。若没有计到59,则分加一,进程结束。第三个进程中,以第二个进程的进位信号作启动信号,当这个启动信号为上升沿时,判断rh是否为高电平,若是则清零hh3_0,hl3_0进程结束。若不是高电平,则

16、判断分是否计到23,若是则清零hh3_0,hl3_0进程结束。若没有计到59,则时加一,进程结束。时钟产生模块的程序源代码在附录B.3.3仿真波形及分析验证将附录B中的程序源代码写入Quartus II软件的文本编辑器中,保存,编译,运行。再建立与之对应的矢量波形文件,选中输入输出管脚添加到矢量波形编辑窗口。给输入管脚选择合适的输入波形,选择功能仿真,开始仿真。为将计时功能和置零功能看的清楚,我做了两次仿真。第一次波形仿真中,先将输出端和输入端添加到波形仿真窗口中,给ckl1s输入了时钟信号,开始功能仿真,得到图6所示的结果。第二次仿真中,clk1s中输入时钟信号,rs中输入一段高电平,开始功

17、能仿真,得到图7所示的结果。图6图7从图6看出,当sh和sl计数到sh=”0101”,sl=”1001”以后就变成了全零。从图7 看出,当rs变高电平后,sl有原来的“0111”变成了全零。所以,由以上两图的分析知道该模块工作正确。4数码管驱动模块4.1数码管驱动模块原理图数码管驱动模块原理图为图8。该模块有输出端seg_out,seg_bit和输入端clk10ms,hh3_0,hl3_0,mh3_0,ml3_0,sh3_0,sl3_0。clk10ms是10ms时钟周期的输入,hh3_0,hl3_0,mh3_0,ml3_0,sh3_0,sl3_0为时钟产生模块产生的时,分,秒信号的输入,seg

18、_out是数码管的显示码输出,seg_bit是6个数码管的选择位输出。图84.2数码管驱动模块实现原理及程序用VHDL语言实现数码管驱动模块的功能时,我在程序中使用了三个进程。第一个进程中,以clk10ms作启动信号,在clk10ms上升沿时计0到5六个数并赋值给模块中一个信号,加完一结束进程。第二个进程中,以第一进程中使用的信号为启动信号,使用case语句对应不同的信号值,选择不同数码管位选码赋给seg_bit,并选择该位上的显示数据赋给另一个信号,结束进程。第三个进程中,以进程二中新复制的信号为启动信号,使用case语句将当前的显示数据转换为数码管的显示码赋给seg_out,结束进程。数码

19、管驱动模块的程序源代码在附录C。4.3仿真波形及仿真验证用前两个模块所使用的方法,在Quartus II中建立波形文件,clk10ms中输入时钟脉冲,其它输入端中输入随机码后,开始仿真,得到图9的仿真结果。图9从图9可以看到,当seg_bit=”111101”时,即位选sh的数码管时,sh=“1001”即十进制9时,seg_out对应的显示码正是9的显示码“11110110”。其它时间段上的数据也能一一对应,所以该模块功能正确。5总系统5.1总系统电路图生成总系统是,我先将三个模块各自生成图元,用原理图输入方式组成了总系统。系统有四个输入端和14和输出端。输入端有pin_clk10MHZ,pi

20、n_rs,pin_rm,pin_rh,输出端有pin_a,pin_b,pin_c,pin_d,pin_e,pin_f,pin_g,pin_h,pin_hh,pin_hl,pin_mh,pin_ml,pin_sh,pin_sl。pin_clk10MHZ与分频模块的时钟输入相连作系统的时钟输入。pin_rs,pin_rm,pin_rh与时钟产生模块的rs,rm,rh相连作系统的秒置零,分置零,时置零。数码管驱动模块的两个总线输出seg_out和seg_bit分别展开成pin_a,pin_b,pin_c,pin_d,pin_e,pin_f,pin_g,pin_h和pin_hh,pin_hl,pin_

21、mh,pin_ml,pin_sh,pin_sl作数码管的显示码和位选码。图105.2仿真波形及分析验证在Quartus II中给总系统项目建立波形文件,输入时钟后,用功能仿真仿真出结果的图为图11。图11从图中可以看出,pin_hh,pin_hl,pin_mh,pin_ml,pin_sh,pin_sl为“111110”时,pin_a,pin_b,pin_c,pin_d,pin_e,pin_f,pin_g,pin_h为“01100000”。pin_hh,pin_hl,pin_mh,pin_ml,pin_sh,pin_sl为其它值时,pin_a,pin_b,pin_c,pin_d,pin_e,pi

22、n_f,pin_g,pin_h为“11111100”。这个结果表示,位选码选通sl(秒个位)时,数码管显示1,其它情况下,数码管显示0,即当前时间为零点零分一秒。还可以看出,当输入端oin_rs(秒置零)为1后,时间都变为零。总上所述,该系统仿真结果与设计目的相同。结论日常生活中,钟表是一个随处可见的小东西。数字钟比其它钟表直观,易于读懂,它实用于绝大多数人群,方便老人和小孩使用。数字钟是采用数字电路实现对时、分、秒数字显示的数字装置,广泛应用于家庭、办公室、车站、码头等公共场所,已成为人民生活中不可缺少的必需品。本论文中的数字钟系统由分频模块,时钟产生模块,数码管驱动模块等三个部分组成。在Q

23、uartus II中以文本输入的方式将每个模块的源代码输入进行波形仿真。在将每个模块的独立功能实现以后,我生成了它们各自的原路图,用原理图输入方式得到了总系统,最后对总系统做了波形仿真,以验证设计的正确性。通过分析验证得到仿真波形与设计的预先设想完全吻合,设计非常成功。但是,我觉得这次设计更大意义在于学会独立做研究,把学过的东西巩固一遍,将此次设计中所学会的,积累的东西用于未来。致谢在设计过程中,学到新知识的同时,我也认识到了VHDL设计的困难性。每当我遇到困难时,我都会找我同学帮忙,他们帮我克服了无数个我不会的难题,我向他们表示衷心的感谢!最后,还要感谢我论文的指导老师白凤山老师,谢谢老师指

24、出我论文的不足之处,并提出建议!谢谢你们大家!参考文献1. 雷伏容编著. VHDL电路设计. 北京:清华大学出版社,20062. 顾斌,姜志鹏,刘磊编著. 数字电路EDA设计(第二版). 西安:西安电子科技大学出版社,20113. 附录A分频模块代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY fdiv IS PORT(clk10MHZ:IN STD_LOGIC; clk10ms,clk1s:OUT STD_LOGIC);END fdiv;ARCHITECTURE one OF fdiv IS SIGNAL clktmp_ms,clktmp_

25、s:STD_LOGIC;SIGNAL cnt_ms:INTEGER RANGE 0 TO 49999;SIGNAL cnt_s:INTEGER RANGE 0 TO 49;BEGIN PROCESS(clk10MHZ,cnt_ms,clktmp_ms) BEGIN IF clk10MHZ'event AND clk10MHZ='1'THEN IF cnt_ms=49999 THEN clktmp_ms<= NOT clktmp_ms;cnt_ms<=0; ELSE cnt_ms<=cnt_ms+1; END IF; END IF; END PROCES

26、S; PROCESS(clktmp_ms) BEGIN IF clktmp_ms'event AND clktmp_ms='1' THEN IF cnt_s=49 THEN clktmp_s<=NOT clktmp_s;cnt_s<=0; ELSE cnt_s<=cnt_s+1; END IF; END IF; END PROCESS; clk1s<=clktmp_s; clk10ms<=clktmp_ms;END one;附录B时钟产生模块代码:USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_

27、UNSIGNED.ALL;ENTITY clock IS PORT(clk1s,rs,rm,rh:IN STD_LOGIC; hh,hl,mh,ml,sh,sl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END clock;ARCHITECTURE a OF clock IS SIGNAL tmpSL,tmpSH:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL tmpML,tmpMH:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL tmpHL,tmpHH:STD_LOGIC_VECTOR(3 DOWNTO 0); SI

28、GNAL mco,hco: STD_LOGIC:='0' BEGIN PROCESS(clk1s) BEGIN IF(clk1s'event AND clk1s='1')THEN IF(rs='1')THEN tmpSL<="0000"tmpSH<="0000"mco<=0; ELSIF(tmpSH="0101" AND tmpSL="1001")THEN tmpSH<="0000"tmpSL<="0

29、000"mco<='1' ELSIF tmpSL="1001" THEN tmpsl<="0000" tmpSH<=tmpSH+1;mco<='0' ELSE tmpSL<=tmpSL+1;mco<='0' END IF; END IF; END PROCESS; PROCESS(mco) BEGIN IF(mco'event AND mco='1')THEN IF(rm='1')THEN tmpML<="

30、0000"tmpMH<="0000"hco<=0; ELSIF(tmpMH="0101" AND tmpML="1001")THEN tmpMH<="0000" tmpML<="0000"hco<='1' ELSIF tmpML="1001" THEN tmpML<="0000" tmpMH<=tmpMH+1;hco<='0' ELSE tmpML<=tmpML

31、+1;hco<='0' END IF; END IF; END PROCESS; PROCESS(hco) BEGIN IF(hco'event AND hco='1')THEN IF(rh='1') THEN tmpHL<="0000"tmpHH<="0000" ELSIF(tmpHH="0010" AND tmpHL="0011")THEN tmpHH<="0000"tmpHL<="0000&qu

32、ot; ELSIF tmpHL="1001" THEN tmpHL<="0000"tmpHH<=tmpHH+1; ELSE tmpHL<=tmpHL+1; END IF; END IF; END PROCESS; sl<=tmpSL;sh<=tmpSH; ml<=tmpML;mh<=tmpMH; hl<=tmpHL;hh<=tmpHH;END a;附录C数码管驱动模块代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIG

33、NED.ALL;ENTITY seg_disp IS PORT(clk10ms:IN STD_LOGIC; seg_out:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); seg_bit:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); hh,hl,mh,ml,sh,sl:STD_LOGIC_VECTOR(3 DOWNTO 0);END seg_disp; ARCHITECTURE one OF seg_disp IS SIGNAL OUT1:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Q:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN PROCESS(clk10ms)BEGIN IF clk10ms'event AND clk10ms='1' THEN IF Q="101" THEN Q<="000" ELSE Q<=Q+1; END IF; END IF;END PROCESS; PROCESS(Q)BEGIN CASE Q IS WHEN "000"=>OUT1<=sl;seg_bit<=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论