基于VHDL数字时钟的设计与实现.docx
- 文档编号:25827756
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:26
- 大小:146.38KB
基于VHDL数字时钟的设计与实现.docx
《基于VHDL数字时钟的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于VHDL数字时钟的设计与实现.docx(26页珍藏版)》请在冰豆网上搜索。
基于VHDL数字时钟的设计与实现
基于VHDL数字时钟的设计与实现
1引言
随着科学技术的不断发展,人们对时间计量的精度要求越来越高。
相对机械钟而言,数字钟能实现准确计时,并显示时,分,秒,而且可以方便,准确的对时间进行调节。
在此基础上,还可以实现整点报时的功能。
因此,数字钟的应用十分广泛。
所谓数字时钟,是指利用电子电路构成的计时器。
1.1课题的背景、目的
电子技术是一门应用很广,发展极为迅速的科学技术,尤其由于数字电子技术具有高抗干扰能力、更高的可靠性和便于计算机处理等特点,近年来得到更加迅速的发展,数字通讯设备、数字电视、数字照相机、数字摄象机等数字化产品近年如雨后春笋般大量涌现,数字电子技术已经成为今后电子技术发展的主要方向。
现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
通过数字时钟的设计,巩固计算机组成原理课程,理论联系实际,提高分析、解决计算机技术的实际问题的独立工作能力;掌握用VHDL语言编制简单的小型模块,学会数字钟的设计方法,熟悉集成电路的使用方法,初步掌握电子钟的设计方法并实现时间的显示和校对,以及报时的功能,并能对数字电子钟进行扩展。
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
1.2课程设计的内容
本课程设计实现一个数字时钟,具有按秒走时功能,能够分别显示小时(2位24小时)、分钟(2位)、秒(2位)。
具有整点报时、时间调整功能,且能够对计时系统的小时、分钟进行调整。
也可设计成十二小时计时方案(AM,PM)。
具有美观、清晰、人性化的显示界面设计,走时精度不劣于±3秒/月。
本课程设计采用VHDL语言,以MAXPLUSII开发工具。
根据系统设计的要求,系统设计采用自顶向下的设计方法,可以将该系统中的
计算机辅助制造(CAM)等。
2.1.3EDA的应用
现在EDA技术应用广泛,包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。
目前EDA技术已在各大公司、科研和教学部门广泛使用。
在产品设计与制造方面,EDA技术可实现前期的计算机仿真、系统级模拟及测试环境的仿真、PCB的制作、电路板的焊接、ASIC的设计等。
在教学方面,我国高校是从九十年代中期开始EDA教育的,现在几乎所有理工科类高校都开设了EDA课程。
这些课程主要是让学生了解EDA的基本概念和原理,使用EDA软件进行电子电路课程的实验及从事简单系统的设计。
2.1.4EDA常用软件
EDA工具层出不穷,目前进入我国并具有广泛影响的EDA软件有:
EWB、PSpice、OrCAD、PCAD、Protel、Viewlogic、Mentor、Graphics、Synopsys、LSIlogic、Cadence等等。
这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同时也可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。
下面按主要功能或主要应用场合进行划分。
1.电子电路设计与仿真工具
电子电路设计与仿真工具包括PSpice、EWB、Matlab、SystemView、MMICAD等。
下面简单介绍前两种软件。
(1)PSpice:
基于Spice的PC版软件。
Spice(SimulationProgramwithIntegratedCircuitEmphasis)是由美国加州大学推出的电路分析仿真软件,是20世纪80年代世界上应用最广的电路设计软件,1988年被定为美国国家标准。
1984年,美国MicroSim公司推出了PSpice。
PSpice是一种强大的模拟和数字电路混合信号仿真软件,包括对中规模集成电路(MSI)和大规模集成电路(LSI)提供多种分析功能,而且仿真精度高,在国内普遍使用。
(2)EWB(ElectronicWorkbench)软件:
InteractiveImageTechnologiesLtd在20世纪90年代初推出的电路仿真软件,主要用于模拟和数字电路的仿真。
高版本已更名为Multisim。
相对于其它EDA软件,它提供了万用表、示波器、信号发生器等虚拟仪器。
该软件的界面直观,易学易用。
它的很多功能模仿了Spice的设计,分析功能也较强。
2.PCB设计软件
PCB(Printed—CircuitBoard)设计软件种类很多,如Protel、OrCAD、PowerPCB、CadencePSD、MentorGraphices的ExpeditionPCB、Winboard/Windraft/IvexSPICE、PCBStudio等等。
目前在我国使用最普遍的应属Protel。
Protel是PROTEL(现更名为Altium)公司在20世纪80年代末推出的CAD工具。
它较早在国内使用,普及率很高。
早期的Protel主要作为印刷板自动布线工具使用,现在普遍使用的是Protel99SE。
它是个完整的全方位电路设计系统,包含了电原理图绘制、模拟电路与数字电路混合信号仿真、多层印刷电路板设计,可编程逻辑器件设计等功能,并具有Client/Server体系结构,同时还兼容一些其它设计软件的文件格式。
Protel软件功能强大、界面友好、使用方便。
它最具代表性的是电路设计和PCB设计。
3.IC设计软件
IC设计工具很多,其中按市场所占份额排行为Cadence、MentorGraphics和Synopsys。
这三家都是ASIC设计领域相当有名的软件供应商。
其它公司的软件相对来说使用者较少。
4.其它EDA软件
(1)VHDL语言:
超高速集成电路硬件描述语言(VhsicHardwareDeseriptionLanguagt,简称VHDL),是IEEE的一项标准设计语言。
它源于美国国防部提出的超高速集成电路(VeryHighSpeedIntegratedCircuit,简称VHSIC)计划,是ASIC设计和PLD设计的一种主要输入工具。
(2)VeriolgHDL:
Verilog公司推出的硬件描述语言,在ASIC设计方面与VHDL语言平分秋色。
2.2VHDL介绍
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL语言是一种用于电路设计的高级语言。
它在80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
VHDL的英文全写是:
VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptiongLanguage.翻译成中文就是超高速集成电路硬件描述语言。
因此它的应用主要是应用在数字电路的设计中。
目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。
当然在一些实力较为雄厚的单位,它也被用来设计ASIC。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
与其他硬件描述语言相比,VHDL具有以下特点:
功能强大、设计灵活。
VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。
它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。
VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。
VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
支持广泛、易于修改。
由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。
在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。
强大的系统硬件描述能力。
VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。
而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。
另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。
VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
独立于器件的设计与工艺无关。
设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。
当设计描述完成后,可以用多种不同的器件结构来实现其功能。
很强的移植能力。
VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。
易于共享和复用。
VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。
这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
3数字时钟设计过程
3.1设计规划
根据系统设计的要求,系统设计采用自顶向下的设计方法,可以将该系统中的各功能模块细分为:
秒计数模块、分计数模块、小时计数模块、报警模块、时间设置模块和译码显示模块六个部分。
先使用VHDL语言设计编译将这每个模块制作成图元,然后再使用图形编辑器进行总体的整合,系统的整体组装设计草图如图3.1所示。
图3.1系统总体设计草图
3.2各模块原理及程序
现在就先对本系统中最基本的三项内容设计进行阐述:
3.2.1秒计数模块的VHDL程序(MIAO.VHD)
秒计数模块中是以60进制进行循环的,故需要的秒数据输出应该是7位的(其中低4位用于秒的低位,而高3位在作为秒的高位)。
另外在该模块下的程序由于考虑到系统功能中调整时钟和分钟的要求,故要在秒计数模块中另外加入复位信号以及分钟设置信号。
以下是该模块的VHDL源程序。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYMIAOIS
PORT(CLK:
INSTD_LOGIC;-------------------系统时钟信号
RESET:
INSTD_LOGIC;------------------系统复位信号
SETMIN:
INSTD_LOGIC;--------------------分设置信号
ENMIN:
OUTSTD_LOGIC;-----------------分计数时钟信号
MOUT:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));----秒计数值
ENDENTITYMIAO;
ARCHITECTUREARTOFSECONDIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(6DOWNTO0);---7位计数器
SIGNALENMIN_1,ENMIN_2:
STD_LOGIC;---前者是整秒进位,后者是调节分钟的信号
BEGIN
MOUT<=COUNT;----将计数器的值直接赋给秒计数
ENMIN_2<=(SETMINANDCLK);--ENMIN_2的内容是分设置信号和系统时钟信号的“与”运算
ENMIN<=(ENMIN_1ORENMIN_2);----ENMIN的内容是整秒进位和调节分钟信号的“或”运算
PROCESS(CLK,RESET,SETMIN)
BEGIN
IF(RESET='0')THEN-----初始化,即系统复位信号的功能
COUNT<="0000000";
ENMIN_1<='0';-------将整秒的进位置零
ELSIF(CLK'EVENTANDCLK='1')THEN
IF(COUNT(3DOWNTO0)="1001")THEN------1.若count的低四位是“1001”
IF(COUNT<16#60#)THEN-------------2.并且count的值小于60
IF(COUNT="1011001")THEN-------3.且count的值为59
ENMIN_1<='1';COUNT<="0000000";---则ENMIN_1置1,count清零
ELSE------------否则,若只满足条件1、2
COUNT<=COUNT+7;------则直接向count的高3位进1
ENDIF;
ELSE---------------------------若不满足count的值小于60
COUNT<="0000000";------------则直接将count清零
ENDIF;
ELSIF(COUNT<16#60#)THEN-------若count的低四位不满足条件1,满足2.
COUNT<=COUNT+1;
ENMIN_1<='0';---------------count加计数,进位标志字为零
ELSE-------------------------若条件1、2均不满足
COUNT<="0000000";ENMIN_1<='0';-----------初始化
ENDIF;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
3.2.2分计数模块的VHDL程序(FEN.VHD)
分计数同秒计数基本相同,由于均是60进制的计数器,故思路完全一致。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFENIS
PORT(INMIN:
INSTD_LOGIC;-------------------系统时钟信号
RESET:
INSTD_LOGIC;------------------系统复位信号
DIPS:
INSTD_LOGIC;-------------------时设置时钟信号
SETHOUR:
INSTD_LOGIC;--------------------时设置信号
ENHOUR:
OUTSTD_LOGIC;-----------------时计数时钟信号
SOUT:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));----秒计数值
BELL:
OUTSTD_LOGIC;-----------------时钟报警信号
ENDENTITYFEN;
ARCHITECTUREARTOFMINUTEIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALENHOUR_1,ENHOUR_2:
STD_LOGIC;--前者是整分进位字,后者是调节时钟信号
BEGIN
SOUT<=COUNT;
ENHOUR_2<=(SETHOURANDDIPS);
ENHOUR<=(ENHOUR_1ORENHOUR_2);
BELL<=ENHOUR_1;-------------将ENHOUR_1信号赋给BELL
PROCESS(INMIN,RESET,SETHOUR)
BEGIN
IF(RESET='0')THEN
COUNT<="0000000";
ENHOUR_1<='0';
ELSIF(INMIN'EVENTANDINMIN='1')THEN
IF(COUNT(3DOWNTO0)="1001")THEN
IF(COUNT<16#60#)THEN
IF(COUNT="1011001")THEN
ENHOUR_1<='1';COUNT<="0000000";
ELSE
COUNT<=COUNT+7;
ENDIF;
ELSE
COUNT<="0000000";
ENDIF;
ELSIF(COUNT<16#60#)THEN
COUNT<=COUNT+1;
ENHOUR_1<='0'AFTER100NS;
ELSE
COUNT<="0000000";ENHOUR_1<='0';
ENDIF;
ENDIF;
ENDPROCESS
ENDARCHITECTUREART;
报警信号BELL的如何获取,本来构思时把报警作为一个单独的功能模块来处理,可是在编程实验程序,以及具体的调试中发现BELL作为整点报时的信号,其功能与分钟计数中的ENHOUR_1是完全相同的,故只需将BELL放在分钟模块中一起进行处理。
即将ENHOUR_1的值赋给了BELL。
3.2.3时计数模块的VHDL程序(SHI.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSHIIS
PORT(INHOUR:
INSTD_LOGIC;-------------------时。
时钟信号
RESET:
INSTD_LOGIC;------------------系统复位信号
HOUT:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));----时计数值
ENDENTITYSHI;
ARCHITECTUREARTOFHOURIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(5DOWNTO0);----设计一个计数器
BEGIN
HOUT<=COUNT;将计数器直接赋给HOUT
PROCESS(INHOUR,RESET)
BEGIN
IF(RESET='0')THEN-------初始化
COUNT<="000000";
ELSIF(INHOUR'EVENTANDINHOUR='1')THEN------INHOUR上升沿有效
IF(COUNT(3DOWNTO0)="1001")THEN---------1.COUNT低4位为9
IF(COUNT<=16#23#)THEN----------------2.计数信号的值小于23
COUNT<=COUNT+7;---------------------直接向高位进1
ELSE----------------------若不满足条件2
COUNT<="000000";--------------------直接将COUNT清零
ENDIF;
ELSIF(COUNT<16#23#)THEN--------------若满足条件1,而不满足2.
COUNT<=COUNT+1;---------------------count自身+1
ELSE
COUNT<="000000";
ENDIF;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
现在对图3.1中所描绘的两种特殊功能进行阐述与讲解。
3.2.4时间设置模块VHDL程序(SET.VHD)
本模块中要将各个状态以及同一时刻下六个7段数码管的数据接受情况描述清楚,以下特列一张各变化量与位选择信号的对应关系。
表3.1时间计数模块中位对应关系简图
上升沿次序(SETCLK)
计数器
COUNT
位选择控制信号SEL
数码管编号
显示输出XSOUT
小数点控制信号DP
1
000
000
0
秒低四位
0
2
001
001
1
秒高三位
0
3
010
010
2
分低四位
1
4
011
011
3
分高三位
0
5
100
100
4
时低四位
1
6
101
101
5
时高两位
0
数码管的编号对应关系以及其他具体内容在后面的硬件分析中将做详细介绍。
以下是该模块的程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSETIS
PORT(SETCLK:
INSTD_LOGIC;------------------调时时钟信号
RESET:
INSTD_LOGIC;-----------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 数字 时钟 设计 实现