基于Quartus II的数字钟实现Word文档格式.docx
《基于Quartus II的数字钟实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于Quartus II的数字钟实现Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
基于QuartusII的数字钟设计
摘要
数字钟是一种用数字电路技术实现时、分、秒计时的钟表。
与机械钟相比具有更高的准确性和直观性,具有更长的使用,已得到广泛的使用。
数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以用Quartus II软件结合VHDL语言编程实现数字钟的设计。
这些方法都各有其特点,我的设计采用Quartus II软件结合VHDL语言编程实现数字钟。
Quartus
II是Altera公司推出的CPLD/FPGA开发工具,Quartus II提供了与结构五官的设计环境,设计者无需精通器件内部的复杂结构。
本设计由分频模块,时钟产生模块,数码管驱动模块等三个部分组成。
在QuartusII中以文本输入的方式将每个模块的源代码输入进行波形仿真,以验证设计的正确性。
关键词:
数字钟 QuartusII VHDL语言 波形仿真
目录
绪论 1
1数字钟设计概述 2
2分频模块 3
2.1分频模块原理图 3
2.2分频模块实现原理及程序 3
2.3仿真波形及分析验证 3
3时钟产生模块 5
3.1时钟产生模块原理图 5
3.2时钟产生模块实现原理及程序 5
3.3仿真波形及分析验证 5
4数码管驱动模块 7
4.1数码管驱动模块原理图 7
4.2数码管驱动模块实现原理及程序 7
4.3仿真波形及仿真验证 7
5总系统 8
5.1总系统电路图 8
5.2仿真波形及分析验证 8
结论 10
致谢 11
参考文献 12
附录A 13
附录B 14
附录C 16
内蒙古大学本科毕业论文(设计) 第 页
绪论
在人们日常生活中,钟表是一个随处可见的小东西。
甚至,有时候它是一个装饰品,对家庭摆设起到点缀的作用。
钟表的主要功能是给人用数字显示时间,为人更好的安排时间,更有效的工作学习提供时间的保障。
所以设计一个精密的钟表对人类的生活很有帮助。
在古代,我们的祖先在不同的时期发明和制造了各种适应当时社会经济发展和人们生活需求的计时器。
其中主要有圭表、日晷、漏刻、机械计时器等。
随着时间的前进,科学的发达,知识的膨胀,电子行业的火热,生活频率的加快,一个与电子设计技术相结合开发的数字钟应运而生了。
现在的数字钟与那些过时的钟表相比,无论是它的记录时间的精密度,还是实际物体的美观性,体积的大小,成本的多少等各个方面都有了天壤之别。
数字钟比较直观,易于读懂,它实用于绝大多数人群,方便老人和小孩使用。
数字钟是采用数字电路实现对时、分、秒数字显示的数字装置,广泛应用于家庭、办公室、车站、码头等公共场所,已成为人民生活中不可缺少的必需品。
由于数字集成电路的发展和石英晶体与振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,而且大大地扩展了钟表原先的报时功能。
而今,我们已经进入了数字时代,数字钟的使用将会越来越受欢迎。
数字钟与老式钟表相比具有更高的准确性和直观性,具有更长的寿命,已得到广泛的使用。
数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以用Quartus II软件结合VHDL语言编程实现数字钟的设计。
本论文采用的是Quartus II软件结合VHDL语言编程实现数字钟。
本论文的目的只是实现数字钟计时功能,没有其它功能。
16
1数字钟设计概述
提供1s时钟
提供时,分
秒
提供10ms时钟
数码管驱动模块
时钟产生模块
分频模块
本设计有分频模块,时钟产生模块和数码管驱动模块等三个模块。
EDA数字系统设计有自底向上和自顶向下的设计方法。
自底向上的设计方法指的是,先将组成系统整体的各个独立模块的功能实现,再将各模块按它们的逻辑规律组合成系统。
自顶向下的设计方法是指,先将系统的总体框图设计出来,并将各个功能分给独立模块实现,最后设计一些功能单一的模块即可。
我所采用的是自底向上的设计方法。
Quartus II中实现数字电路仿真有原理图和图表模块编辑,文本编辑等输入方式,这些方式都各有其优缺点。
但实际设计时好多都采用原理图与文本混合输入方式。
在我的设计中,实现分频模块,时钟产生模块和数码管驱动模块的仿真时,我采用了文本输入方式,再将三个模块各自生成图元,用原理图输入方式组成了总系统。
在采用文本输入方式时,也有VHDL语言和Verilong HDL语言,我采用了自己学过的VHDL语言。
生成仿真波形时有功能仿真和时序仿真两种选项。
功能仿真只对系统进行原理性波形仿真,如果是时序仿真的话,仿真波形中会加入时间延迟,使得波形效果偏向于实际系统。
功能仿真能容易看出设计原理的对错,波形仿真能显示出当该设计用于实际应用时的效果。
由于我的设计侧重于原理性的实现数字钟,缺乏生成实际器件的条件,所以我只做了功能仿真。
三个模块的逻辑联系如图1所示。
图1
分频模块中完成将输入的频率为10MHZ的时钟信号分频成周期为10ms和
1s的时钟信号。
时钟产生模块完成对周期为1s的时钟的计数,然后产生时,分,秒的数据。
数码管驱动模块将当前时,分,秒数据转换成共阴极数码管的显示码并输出。
以下章节中我会把三个模块及系统整体单独的详细解释。
按它们实现原理,程序总体构思,元件图,仿真结果,分析验证的顺序说明。
2.1分频模块原理图
2分频模块
分频模块原理图如图2所示。
在QuartusII中先建立一个空的分频模块项目,再编辑文本,写入模块程序代码并编译运行,最后用生成图元命令得到模块原理图。
它有一个输入端,两个输出端。
输入端clk10MHZ中输入频率为
10MHZ时钟信号。
输出端clk1s输出周期为1s的时钟脉冲,供时钟产生模块计数时使用。
输出端clk10ms输出周期为10ms的时钟脉冲,供数码管驱动模块使用。
图2
2.2分频模块实现原理及程序
对于时钟模块而言,需要每60秒向分钟进以位,每60分钟向小时进一位,每24小时重回到零点零分零秒。
其中,用于产生秒所需的计数时钟周期显然为一秒,用于产生分钟所需的时种周期为60秒,用于产生小时所需时钟周期为
60分。
因此需要分频出1s的时钟频率。
要显示时,分,秒的个位和十位,系统需要控制六个数码管。
若不采取一些措施,直接显示时间的话,将需要48条输出线。
即使采用十进制八段译码电路,每显示一位数字需4个引脚,则6个数码管也需24条引脚。
实际工程中,很多时候都采用动态扫描的方法来控制数码管的显示。
将数码管的段选线连到一起是从a到h的8根,加上六个数码管的位选线(即共阴极数码管内部所有发光二极管的阴极),共16根引脚即可完成数码管的驱动。
采用动态显示的主要原理是人眼的视觉暂留特性,视觉暂留时间大概为60ms,则每个数码管的数字显示时间不能超过10ms。
因此每10ms时间应点亮一个数码管,则该系统还需10ms频率的时钟周期。
该数字系统的系统时钟为10MHZ,则为了产生1s和10ms这种周期的时钟信号。
分别需要对系统时钟进行10000000分频和100000分频。
在程序中我先对,系统时钟进行了 100000分频,得到了10ms的时钟信号,然后再对10ms的时钟信号进行100分频,最终获得了1秒的时钟信号。
程序中的实际分频是用计数的方法分频的,当需要对系统时钟M(偶数)分频时,对系统时钟周期进行计数,当计到M/2时,对输出信号去一次反,即可实现分频。
所以我在分频模块的程序中,先对系统时钟信号计数了100000/2次,得到了10ms时钟周期,再对10ms信号计数了100/2次,得到了1s的时钟信号,满足了系统的时钟需求。
分频程序源代码在附录A。
2.3仿真波形及分析验证
将附录A中的程序源代码写入QuartusII软件的文本编辑器中,保存,编译,运行。
再建立与之对应的矢量波形文件,选中输入输出管脚添加到矢量波形编辑窗口。
给输入管脚选择合适的输入波形,选择功能仿真,开始仿真。
分频模块的波形仿真中,先将输入端clk10MHZ,输出端clk10ms和clk1s添加到波形仿真窗口中,给输入端clk10MHZ选择了10MHZ频率的时钟信号,进行了仿真。
当QuartusII软件的波形仿真的时间超过1ms时,会经过相当漫长的时间后,仿真结果才会出来。
我为了看到分频后出现的周期为1s的信号,将仿真时间段设置成了2s,然后用了37分钟时间运行后,仿真结果才显示出来。
仿真结果为图3和图4。
图3
图4
从图3可以看出,输出端clk10ms的波形每过5ms发生一次翻转,正好是以10ms为周期的时钟波形。
从图4可以看出,输出端clk1s的波形在0.5ms时翻转,正好是周期为1s的时钟波形。
由于两个输出波形的周期差距是两个数量级无法在一个图形上显示,所以两个图形。
3.1时钟产生模块原理图
3时钟产生模块
数字钟的最终目的是在数码管上显示时,分,秒形式的时间,实现这一目的首先要产生时,分,秒数据,这一功能有时钟产生模块提供。
时钟产生模块原理图为图5。
它的端口有输入端clk1s,rs,rm,rh和输出端
hh[3_0],hl[3_0],mh[3_0],ml[3_0],sh[3_0],sl[3_0]。
输入端clk1s是周期为
1s的时钟信号的输入端。
输入端rs,rm,rh的功能分别是秒置零,分置零,时置零。
输出端hh[3..0],hl[3..0]分别是当前“时”的十位和个位。
当前“分”的十位和个位输出分别为mh[3..0],ml[3..0]端口。
当前“秒”的十位和个位输出分别为sh[3..0],sl[3..0]端口。
图5
3.2时钟产生模块实现原理及程序
时钟产生模块的实现原理是对输入的周期为1s的时钟信号计数,当计够
60时向分种进位且清零。
分钟计够60时向时钟进位且清零。
时钟计够24时全部清零且重新从零点零分零秒计数。
计数前先看输入端rs,rm,rh是否有效,如果有效将hh[3_0],hl[3_0],mh[3_0],ml[3_0],sh[3_0],sl[3_0]都置零,不进位,重新计数。
实际程序中,以上功能由三个独立的进程控制。
第一个进程中,以clk1s
作启动信号,当clk1s为上升沿时,判断rs是否为高电平,若是则清零
sh[3_0],sl[3_0]进程结束。
若不是高电平,则判断秒是否计到59,若是则清零sh[3_0],sl[3_0]且向分进位,进程结束。
若没有计到59,则秒加一,进程结束。
第二个进程中,以第一个进程的进位信号作启动信号,当这个启动信号为上升沿时,判断rm是否为高电平,若是则清零mh[3_0],ml[3_0]进程