基于VHDL数字时钟的设计及其实现.docx
《基于VHDL数字时钟的设计及其实现.docx》由会员分享,可在线阅读,更多相关《基于VHDL数字时钟的设计及其实现.docx(25页珍藏版)》请在冰豆网上搜索。
基于VHDL数字时钟的设计及其实现
1引言
伴随科学技术不停发展,大家对时间计量精度要求越来越高。
相对机械钟而言,数字钟能实现正确计时,并显示时,分,秒,而且能够方便,正确对时间进行调整。
在此基础上,还能够实现整点报时功效。
所以,数字钟应用十分广泛。
所谓数字时钟,是指利用电子电路组成计时器。
1.1课题背景、目标
电子技术是一门应用很广,发展极为快速科学技术,尤其因为数字电子技术含有高抗干扰能力、更高可靠性和便于计算机处理等特点,多年来得到愈加快速发展,数字通讯设备、数字电视、数字摄影机、数字摄象机等数字化产品多年如雨后春笋般大量涌现,数字电子技术已经成为以后电子技术发展关键方向。
现代电子产品几乎渗透了社会各个领域,有力地推进了社会生产力发展和社会信息化程度提升,同时也使现代电子产品性能深入提升,产品更新换代节奏也越来越快。
钟表数字化给大家生产生活带来了极大方便,而且大大地扩展了钟表原先报时功效。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至多种定时电气自动启用等,全部这些,全部是以钟表数字化为基础。
所以,研究数字钟及扩大其应用,有着很现实意义。
经过数字时钟设计,巩固计算机组成原理课程,理论联络实际,提升分析、处理计算机技术实际问题独立工作能力;掌握用VHDL语言编制简单小型模块,学会数字钟设计方法,熟悉集成电路使用方法,初步掌握电子钟设计方法并实现时间显示和校对,和报时功效,并能对数字电子钟进行扩展。
数字钟是一个用数字电路技术实现时、分、秒计时装置,和机械式时钟相比含有更高正确性和直观性,且无机械装置,含有更更长使用寿命,所以得到了广泛使用。
1.2课程设计内容
本课程设计实现一个数字时钟,含有按秒走时功效,能够分别显示小时(2位二十四小时)、分钟(2位)、秒(2位)。
含有整点报时、时间调整功效,且能够对计时系统小时、分钟进行调整。
也可设计成十二小时计时方案(AM,PM)。
含有美观、清楚、人性化显示界面设计,走时精度不劣于±3秒/月。
本课程设计采取VHDL语言,以MAXPLUSII开发工具。
依据系统设计要求,系统设计采取自顶向下设计方法,能够将该系统中各功效模块细分为:
秒计数模块、分计数模块、小时计数模块、报警模块、时间设置模块和译码显示模块六个部分。
2EDA、VHDL介绍
2.1EDA介绍
现代电子设计技术关键就是EDA(ElectronicDesignAutomatic)技术。
利用EDA技术,电子设计师能够方便地实现IC设计、电子电路设计和PCB设计等工作。
EDA技术已经有30年发展历程。
现在EDA技术应用广泛,包含在机械、电子、通信、航空航天、化工等各个领域,全部有EDA应用。
不管是在产品设计、制造方面,还是在科研和教学方面,EDA已成为必不可少一部分。
掌握EDA技术已成为通信电子类专业学生学习及就业基础素质。
2.1.1EDA技术概念
EDA技术是在电子CAD技术基础上发展起来通用软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术最新结果,进行电子产品自动设计。
EDA设计可分为系统级、电路级和物理实现级。
物理级设计关键指IC版图设计,通常由半导体厂家完成;系统级设计关键面对大型复杂电子产品;而通常民用及教学所包含基础是电路级设计。
我们常见EDA软件多属于电路级设计。
电路级设计工作,是在电子工程师接收系统设计任务后,首先确定设计方案,并选择适宜元器件,然后依据具体元器件设计电路原理图,接着进行第一次仿真。
其中包含数字电路逻辑模拟、故障分析、模拟电路交直流分析、瞬态分析等。
这一次仿真关键是检验设计方案在功效方面正确性。
仿真经过后,依据原理图产生电气连接网络表进行PCB板自动布局布线,有条件还能够进行PCB后分析。
其中包含热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后结果参数反馈回电路图,进行第二次仿真,也称作后仿真。
后仿真关键是检验PCB板在实际工作环境中可行性。
2.1.2EDA技术历史和发展
EDA技术发展历程大致可分为三个阶段。
20世纪70年代为计算机辅助设计(CAD)阶段,大家开始用计算机替换手工操作进行IC版图编辑、PCB布局布线。
80年代为计算机辅助工程(CAE)阶段。
和CAD相比,CAE除了有纯粹图形绘制功效外,又增加了电路功效分析和结构设计,而且经过电气连接网络表将二者结合在一起,实现了工程设计。
20世纪90年代为电子系统设计自动化(EDA)阶段,同时又出现了计算机辅助工艺(CAPP)、计算机辅助制造(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:
基于SpicePC版软件。
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、MentorGraphicesExpeditionPCB、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