1 引 言
随着科学技术的不断发展,人们对时间计量的精度要求越来越高。相对机械钟而言,数字钟能实现准确计时,并显示时,分,秒,而且可以方便,准确的对时间进行调节。在此基础上,还可以实现整点报时的功能。因此,数字钟的应用十分广泛。所谓数字时钟,是指利用电子电路构成的计时器。
1.1课题的背景、目的
电子技术是一门应用很广,发展极为迅速的科学技术,尤其由于数字电子技术具有高抗干扰能力、更高的可靠性和便于计算机处理等特点,近年来得到更加迅速的发展,数字通讯设备、数字电视、数字照相机、数字摄象机等数字化产品近年如雨后春笋般大量涌现,数字电子技术已经成为今后电子技术发展的主要方向。现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。
通过数字时钟的设计,巩固计算机组成原理课程,理论联系实际,提高分析、解决计算机技术的实际问题的工作能力;掌握用VHDL语言编制简单的小型模块,学会数字钟的设计方法,熟悉集成电路的使用方法,初步掌握电子钟的设计方法并实现时间的显示和校对,以及报时的功能,并能对数字电子钟进行扩展。数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
1.2 课程设计的内容
本课程设计实现一个数字时钟,具有按秒走时功能,能够分别显示小时(2位24小时)、分钟(2位)、秒(2位)。具有整点报时、时间调整功能,且能够对计时系统的小时、分钟进行调整。也可设计成十二小时计时方案(AM,PM)。具有美观、清晰、人性化的显示界面设计,走时精度不劣于±3秒/月。本课程设计采用VHDL语言,以MAXPLUSII开发工具。根据系统设计的要求,系统设计采用自顶向下的设计方法,可以将该系统中的各
聂敏 《基于VHDL数字时钟的设计与实现》 第2页 共24页
功能模块细分为:秒计数模块、分计数模块、小时计数模块、报警模块、时间设置模块和译码显示模块六个部分。
聂敏 《基于VHDL数字时钟的设计与实现》 第3页 共24页
2 EDA、VHDL简介
2.1 EDA简介
现代电子设计技术的核心就是EDA(Electronic Design Automatic)技术。利用EDA
技术,电子设计师可以方便地实现IC设计、电子电路设计和PCB设计等工作。EDA技术已有30年的发展历程。现在EDA技术应用广泛,包括在机械、电子、通信、航空航天、化工等各个领域,都有EDA的应用。无论是在产品设计、制造方面,还是在科研与教学方面,EDA已成为必不可少的一部分。掌握EDA技术已成为通信电子类专业的学生学习及就业的基本素质。 2.1.1 EDA技术的概念
EDA技术是在电子CAD技术基础上发展起来的通用软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA 设计可分为系统级、电路级和物理实现级。物理级设计主要指IC版图设计,一般由半导体厂家完成;系统级设计主要面对大型复杂的电子产品;而一般民用及教学所涉及基本是电路级设计。我们常用的EDA软件多属于电路级设计。
电路级设计工作,是在电子工程师接受系统设计任务后,首先确定设计方案,并选择合适的元器件,然后根据具体的元器件设计电路原理图,接着进行第一次仿真。其中包括数字电路的逻辑模拟、故障分析、模拟电路的交直流分析、瞬态分析等。这一次仿真主要是检验设计方案在功能方面的正确性。
仿真通过后,根据原理图产生的电气连接网络表进行PCB板的自动布局布线,有条件的还可以进行PCB后分析。其中包括热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后的结果参数反馈回电路图,进行第二次仿真,也称作后仿真。后仿真主要是检验PCB板在实际工作环境中的可行性。 2.1.2 EDA技术的历史与发展
EDA技术发展历程大致可分为三个阶段。20世纪70年代为计算机辅助设计(CAD)阶段,人们开始用计算机取代手工操作进行IC版图编辑、PCB布局布线。80年代为计算机辅助工程(CAE)阶段。与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能分析和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。20世纪90年代为电子系统设计自动化(EDA)阶段,同时又出现了计算机辅助工艺(CAPP)、
聂敏 《基于VHDL数字时钟的设计与实现》 第4页 共24页
计算机辅助制造(CAM)等。 2.1.3 EDA的应用
现在EDA技术应用广泛,包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA 技术已在各大公司、科研和教学部门广泛使用。
在产品设计与制造方面,EDA 技术可实现前期的计算机仿真、系统级模拟及测试环境的仿真、PCB的制作、电路板的焊接、ASIC的设计等。
在教学方面,我国高校是从九十年代中期开始EDA教育的,现在几乎所有理工科类高校都开设了EDA课程。这些课程主要是让学生了解EDA的基本概念和原理,使用EDA软件进行电子电路课程的实验及从事简单系统的设计。 2.1.4 EDA常用软件
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(Simulation Program with Integrated Circuit Emphasis)是由美国加州大学推出的电路分析仿真软件,是20世纪80年代世界上应用最广的电路设计软件,1988年被定为美国国家标准。1984年,美国MicroSim公司推出了PSpice。PSpice是一种强大的模拟和数字电路混合信号仿真软件,包括对中规模集成电路(MSI)和大规模集成电路(LSI)提供多种分析功能,而且仿真精度高,在国内普遍使用。 (2)EWB(Electronic Workbench)软件:Interactive ImageTechnologies Ltd在20世纪90年代初推出的电路仿真软件,主要用于模拟和数字电路的仿真。高版本已更名为Multisim。相对于其它EDA软件,它提供了万用表、示波器、信号发生器等虚拟仪器。该软件的界面直观,易学易用。它的很多功能模仿了Spice的设计,分析功能也较强。 2. PCB设计软件
PCB(Printed—Circuit Board)设计软件种类很多,如Protel、OrCAD、PowerPCB、Cadence PSD、MentorGraphices的Expedition PCB、Winboard/Windraft/IvexSPICE、PCB Studio等等。
聂敏 《基于VHDL数字时钟的设计与实现》 第5页 共24页
目前在我国使用最普遍的应属Protel。
Protel是PROTEL(现更名为Altium)公司在20世纪80年代末推出的CAD工具。它较早在国内使用,普及率很高。早期的Protel主要作为印刷板自动布线工具使用,现在普遍使用的是Protel 99 SE。它是个完整的全方位电路设计系统,包含了电原理图绘制、模拟电路与数字电路混合信号仿真、多层印刷电路板设计,可编程逻辑器件设计等功能,并具有Client/Server体系结构,同时还兼容一些其它设计软件的文件格式。Protel软件功能强大、界面友好、使用方便。它最具代表性的是电路设计和PCB设计。 3. IC设计软件
IC设计工具很多,其中按市场所占份额排行为Cadence、Mentor Graphics和Synopsys。这三家都是ASIC设计领域相当有名的软件供应商。其它公司的软件相对来说使用者较少。 4. 其它EDA软件
(1)VHDL语言:超高速集成电路硬件描述语言(Vhsic Hardware Deseription Languagt,简称VHDL),是IEEE的一项标准设计语言。它源于美国国防部提出的超高速集成电路(Very High Speed Integrated Circuit,简称VHSIC)计划,是ASIC设计和PLD设计的一种主要输入工具。
(2)Veriolg HDL:Verilog公司推出的硬件描述语言,在ASIC设计方面与VHDL语言平分秋色。
2.2 VHDL介绍
VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription
Language,诞生于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数字时钟的设计与实现》 第6页 共24页
VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。
VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Descriptiong Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在
FPGA/CPLD/EPLD
的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。
VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。 与其他硬件描述语言相比,VHDL具有以下特点:
功能强大、设计灵活。VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
支持广泛、易于修改。由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。
强大的系统硬件描述能力。VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
聂敏 《基于VHDL数字时钟的设计与实现》 第7页 共24页
于器件的设计与工艺无关。设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。
很强的移植能力。VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。
易于共享和复用。VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行的设计。
聂敏 《基于VHDL数字时钟的设计与实现》 第8页 共24页
3 数字时钟设计过程
3.1设计规划
根据系统设计的要求,系统设计采用自顶向下的设计方法,可以将该系统中的各功能模块细分为:秒计数模块、分计数模块、小时计数模块、报警模块、时间设置模块和译码显示模块六个部分。先使用VHDL语言设计编译将这每个模块制作成图元,然后再使用图形编辑器进行总体的整合,系统的整体组装设计草图如图3.1所示。
时计数器模块 译码显示模块 7段 数码管 显示 分高位 进位 分计数器模块 时间调整模块 秒高位 进位 秒计数器模块 系统时钟 基本功能 报警模块 喇叭 扩展功能 外部设备
图3.1 系统总体设计草图
3.2 各模块原理及程序
现在就先对本系统中最基本的三项内容设计进行阐述: 3.2.1秒计数模块的VHDL程序(MIAO.VHD)
秒计数模块中是以60进制进行循环的,故需要的秒数据输出应该是7位的(其中低4位用于秒的低位,而高3位在作为秒的高位)。另外在该模块下的程序由于考虑到系统功能中调整时钟和分钟的要求,故要在秒计数模块中另外加入复位信号以及分钟设置信号。以下是该模块的VHDL源程序。 LIBRARY IEEE ;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MIAO IS
聂敏 《基于VHDL数字时钟的设计与实现》 第9页 共24页
PORT (CLK: IN STD_LOGIC;-------------------系统时钟信号 RESET: IN STD_LOGIC; ------------------系统复位信号 SETMIN: IN STD_LOGIC; --------------------分设置信号 ENMIN: OUT STD_LOGIC;-----------------分计数时钟信号 MOUT: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); ----秒计数值 END ENTITY MIAO;
ARCHITECTURE ART OF SECOND IS
SIGNAL COUNT :STD_LOGIC_VECTOR(6 DOWNTO 0);---7位计数器
SIGNAL ENMIN_1,ENMIN_2 :STD_LOGIC ;---前者是整秒进位,后者是调节分钟的信号 BEGIN
MOUT<=COUNT;----将计数器的值直接赋给秒计数
ENMIN_2<=(SETMIN AND CLK);--ENMIN_2的内容是分设置信号和系统时钟信号的“与”运算
ENMIN<=(ENMIN_1 OR ENMIN_2);----ENMIN的内容是整秒进位和调节分钟信号的“或”运算
PROCESS(CLK,RESET,SETMIN) BEGIN
IF (RESET='0') THEN-----初始化,即系统复位信号的功能 COUNT<=\"0000000\";
ENMIN_1<='0'; -------将整秒的进位置零 ELSIF(CLK'EVENT AND CLK='1') THEN
IF(COUNT(3 DOWNTO 0)=\"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 END IF;
ELSE---------------------------若不满足count的值小于60 COUNT<=\"0000000\";------------则直接将count清零
聂敏 《基于VHDL数字时钟的设计与实现》 第10页 共24页
END IF;
ELSIF(COUNT<16#60#) THEN-------若count的低四位不满足条件1,满足2. COUNT<=COUNT+1;
ENMIN_1<='0';---------------count加计数,进位标志字为零 ELSE -------------------------若条件1、2均不满足 COUNT<=\"0000000\";ENMIN_1<='0';-----------初始化 END IF; END IF; END PROCESS;
END ARCHITECTURE ART;
3.2.2分计数模块的VHDL程序(FEN.VHD)
分计数同秒计数基本相同,由于均是60进制的计数器,故思路完全一致。 LIBRARY IEEE ;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FEN IS
PORT (INMIN: IN STD_LOGIC;-------------------系统时钟信号 RESET: IN STD_LOGIC; ------------------系统复位信号 DIPS: IN STD_LOGIC;-------------------时设置时钟信号 SETHOUR: IN STD_LOGIC; --------------------时设置信号 ENHOUR: OUT STD_LOGIC;-----------------时计数时钟信号 SOUT: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); ----秒计数值 BELL: OUT STD_LOGIC;-----------------时钟报警信号 END ENTITY FEN;
ARCHITECTURE ART OF MINUTE IS
SIGNAL COUNT :STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL ENHOUR_1,ENHOUR_2 :STD_LOGIC ;--前者是整分进位字,后者是调节时钟信号 BEGIN
SOUT<=COUNT;
ENHOUR_2<=(SETHOUR AND DIPS);
聂敏 《基于VHDL数字时钟的设计与实现》 第11页 共24页
ENHOUR<=(ENHOUR_1 OR ENHOUR_2);
BELL<=ENHOUR_1;-------------将ENHOUR_1信号赋给BELL PROCESS(INMIN,RESET,SETHOUR) BEGIN
IF (RESET='0') THEN COUNT<=\"0000000\"; ENHOUR_1<='0';
ELSIF(INMIN'EVENT AND INMIN='1') THEN IF(COUNT(3 DOWNTO 0)=\"1001\") THEN IF(COUNT<16#60#) THEN IF(COUNT=\"1011001\") THEN
ENHOUR_1<='1';COUNT<=\"0000000\"; ELSE
COUNT<=COUNT+7; END IF; ELSE
COUNT<=\"0000000\"; END IF;
ELSIF(COUNT<16#60#) THEN COUNT<=COUNT+1;
ENHOUR_1<='0'AFTER 100 NS; ELSE
COUNT<=\"0000000\";ENHOUR_1<='0'; END IF; END IF; END PROCESS END ARCHITECTURE ART;
报警信号BELL的如何获取,本来构思时把报警作为一个单独的功能模块来处理,可是在编程实验程序,以及具体的调试中发现BELL作为整点报时的信号,其功能与分钟计数中的ENHOUR_1是完全相同的,故只需将BELL放在分钟模块中一起进行处理。即将ENHOUR_1的值赋给了BELL。
聂敏 《基于VHDL数字时钟的设计与实现》 第12页 共24页
3.2.3时计数模块的VHDL程序(SHI.VHD) LIBRARY IEEE ;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SHI IS
PORT (INHOUR: IN STD_LOGIC;-------------------时。时钟信号 RESET: IN STD_LOGIC; ------------------系统复位信号
HOUT: OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); ----时计数值 END ENTITY SHI;
ARCHITECTURE ART OF HOUR IS
SIGNAL COUNT :STD_LOGIC_VECTOR(5 DOWNTO 0);----设计一个计数器 BEGIN
HOUT<=COUNT;将计数器直接赋给HOUT PROCESS(INHOUR,RESET) BEGIN
IF(RESET='0') THEN-------初始化 COUNT<=\"000000\";
ELSIF (INHOUR'EVENT AND INHOUR='1') THEN ------INHOUR上升沿有效 IF(COUNT(3 DOWNTO 0)=\"1001\") THEN ---------1.COUNT低4位为9 IF(COUNT<=16#23#) THEN ----------------2.计数信号的值小于23 COUNT<=COUNT+7;---------------------直接向高位进1 ELSE ----------------------若不满足条件2 COUNT<=\"000000\";--------------------直接将COUNT清零 END IF;
ELSIF(COUNT<16#23#) THEN --------------若满足条件1,而不满足2. COUNT<=COUNT+1; ---------------------count自身+1 ELSE
COUNT<=\"000000\"; END IF; END IF; END PROCESS;
聂敏 《基于VHDL数字时钟的设计与实现》 第13页 共24页
END ARCHITECTURE ART;
现在对图3.1中所描绘的两种特殊功能进行阐述与讲解。 3.2.4时间设置模块VHDL程序(SET.VHD)
本模块中要将各个状态以及同一时刻下六个7段数码管的数据接受情况描述清楚,以下特列一张各变化量与位选择信号的对应关系。
上升沿次序(SETCLK) 1 2 3 4 5 6 表3.1 时间计数模块中位对应
关系计数器 COUNT 000 001 010 011 100 101 位选择控制信号SEL 000 001 010 011 100 101 数码管编号 0 1 2 3 4 5 显示输出XSOUT 秒低四位 秒高三位 分低四位 分高三位 时低四位 时高两位 小数点控制信号DP 0 0 1 0 1 0 数码管的编号对应关系以及其他具体内容在后面的硬件分析中将做详细介绍。以下是该模块的程序: LIBRARY IEEE ;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SET IS
PORT (SETCLK: IN STD_LOGIC;------------------调时时钟信号 RESET: IN STD_LOGIC; ------------------系统复位信号 DP: OUT STD_LOGIC; --------------------点输出
SEC,MIN: IN STD_LOGIC_VECTOR(6 DOWNTO 0);-----分、秒计数值 HOUR: IN STD_LOGIC_VECTOR(5 DOWNTO 0); ------时计数值 XSOUT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);----显示输出 SEL: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));-------位选择输出 END ENTITY SET;
ARCHITECTURE ART OF SET IS
SIGNAL COUNT :STD_LOGIC_VECTOR(2 DOWNTO 0);-----设计一个3位计数器
聂敏 《基于VHDL数字时钟的设计与实现》 第14页 共24页
BEGIN
PROCESS(SETCLK,RESET) BEGIN
IF (RESET='0') THEN -----------初始化 COUNT<=\"000\";
ELSIF(SETCLK'EVENT AND SETCLK='1') THEN---SETCLK上升沿为有效信号 IF(COUNT>=\"101\") THEN-------若COUNT 为“101” COUNT<=\"000\";----------将COUNT 清零 ELSE
COUNT<=COUNT+1;------否则,自加一 END IF; END IF; END PROCESS;
PROCESS(SETCLK,RESET)---------对各状态的具体内容进行细化 BEGIN
IF(RESET='0') THEN XSOUT<=\"0000\"; DP<='0'; SEL<=\"111\";
ELSIF(SETCLK'EVENT AND SETCLK='1') THEN CASE COUNT IS
WHEN \"000\"=>XSOUT<=SEC(3 DOWNTO 0);------若 COUNT 为“000”,则秒的
低4位 DP<='0';SEL<=\"000\";----赋给显示输出端口,用数码管0显示
WHEN \"001\"=>XSOUT<=SEC(6 DOWNTO 4);----若COUNT 为“001”,则秒的高3位赋
DP<='0';SEL<=\"001\";---给显示输出,用数码管1显示
WHEN \"010\"=>XSOUT<=MIN(3 DOWNTO 0);---若COUNT 为“010”,则分的低4位
DP<='1';SEL<=\"010\";-赋给显示输出,用数码管2显示,且小数点闪亮 WHEN \"011\"=>XSOUT<=MIN(6 DOWNTO 4);----------后面的均可照此法进行 DP<='0';SEL<=\"011\";
聂敏 《基于VHDL数字时钟的设计与实现》 第15页 共24页
WHEN \"100\"=>XSOUT<=HOUR(3 DOWNTO 0); DP<='1';SEL<=\"100\";
WHEN \"101\"=>XSOUT<=HOUR(5 DOWNTO 4); DP<='0';SEL<=\"101\"; WHEN OTHERS=>NULL; END CASE; END IF; END PROCESS;
END ARCHITECTURE ART;
此模块中,设计了一个具有6组状态的3位计数器count,以调时时钟信号SETCLK的上升沿为激励响应。如果一个时刻的电子钟要显示的数字是六个的话,则送出并接受这一组数字需要的时间是调时时钟信号SETCLK的周期×6,即
t=T(setclk) ×6 (式1-1)
由于在后面将每个模块进行整合的时候,就存在如何协调每个计数器的周期,以减少出错,并且节约时间与资源。通过这个公式可以轻松得出,并且助于理解各模块之间的关系。
3.2.5译码模块的VHDL源程序(DELED.VHD)
程序比较简单,在此仅对译码输出和十进制中0~9对应关系列表说明。
译码B 译码H 十进制 译码B 译码H 十进制 表3.2 译码输出与十进制对应
关系 0111111 0000110 1011011 1001111 3FH 0 1101101 6DH 5 06H 1 5BH 2 4FH 3 1100110 6EH 4 1101111 6FH 9 1111101 0000111 1111111 7DH 6 07H 7 FFH 8 以下是源程序(DELED.VHD) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DELED IS
PORT (NUM: IN STD_LOGIC_VECTOR(3 DOWNTO 0);-----------二进制数值
聂敏 《基于VHDL数字时钟的设计与实现》 第16页 共24页
LED: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));-------译码后的输出数据 END DELED;
ARCHITECTURE ART OF DELED IS BEGIN process(NUM) BEGIN CASE NUM IS
WHEN \"0000\"=>LED<=\"0111111\"; ----显示0 :3FH WHEN \"0001\"=>LED<=\"0000110\"; ----显示1 :06H WHEN \"0010\"=>LED<=\"1011011\"; ----显示2 :5BH WHEN \"0011\"=>LED<=\"1001111\"; ----显示3 :4FH WHEN \"0100\"=>LED<=\"1100110\"; ----显示4 :6EH WHEN \"0101\"=>LED<=\"1101101\"; ----显示5 :6DH WHEN \"0110\"=>LED<=\"1111101\"; ----显示6 :7DH WHEN \"0111\"=>LED<=\"0000111\"; ----显示7 :07H WHEN \"1000\"=>LED<=\"1111111\"; ----显示8 :FFH WHEN \"1001\"=>LED<=\"1101111\"; ----显示9 :6FH WHEN OTHERS=>NULL; END CASE; END PROCESS;
END ARCHITECTURE ART;
以上就是这个系统的所有模块,下面是对每一个模块的编译、仿真与调试。
聂敏 《基于VHDL数字时钟的设计与实现》 第17页 共24页
4 系统仿真
4.1 秒计数模块仿真(SECOND.SCF)
秒计数模块仿真图如图4.1所示。
(2)
(1)
(3)
图 4.1秒计数模块时序仿真
(1) 从时序仿真图中可以清楚的看到在秒输出(MOUT)由59变成00时,产生一个高电平的进位由分计数(ENMIN)输出。
(2) 在分设置信号(SETMIN)高电平覆盖的区域内,系统时钟信号(CLK)经历了一个高电平和两个低电平,以及两个下降沿和一个上升沿。通过观察可以发现在分计数信号(ENMIN)出现的高电平是由系统时钟信号(CLK)的上升沿所激发的,这与程序中设计要求一致。
(3) 在系统复位信号(RESET)低电平(有效电平)的作用下,秒计数信号清零,并且两者关系为异步关系。
4.2 分计数模块仿真(MINUTE.SCF)
分计数模块仿真图如图4.2所示。
(3)
(2)
(1)
图4.2 分计数模块时序仿真
(1) 与秒计数模块相同,分计数模块中也有进位。进位信号是时计数时钟信号(ENHOUR) (2) 系统复位的功能与秒计数相同,不再赘述。
(3) 此模块同样具有调节信号,是由时设置信号(SETHOUR)以及时设置时钟信号(DIPS)
聂敏 《基于VHDL数字时钟的设计与实现》 第18页 共24页
共同作用的。同秒计数类似,此调节的信号也是有脉冲信号的上升沿所产生。不同的是时设置信号(SETHOUR)在此仅仅是作为一个使能出现的,当时设置信号(SETHOUR)满足高电平时,DIPS存在上升沿,ENHOUR便会出现高电平。DIPS可以直接接脉冲信号,也可以接在复位开关上进行调节。
4.3 时计数模块仿真(HOUR.SCF)
时计数模块仿真图如图4.3所示。
图4.3 时计数模块时序仿真
与分、秒具有相同的系统复位信号,时计数输出信号(HOUT)为24进制。
4.4 时间设置模块仿真(SET.SCF)
时间设置模块仿真图如图4.4所示,图4.4中各输入输出信号的功能介绍: SETCLK---该模块的时钟信号,用于激励某些信号(包含位控制信号,显示信号)。 RESET---系统复位信号。
SEC[3..0]秒的低四位,表示秒的个位;SEC[6..4]秒的高三位,表示秒的十位。 MIN[3..0]分的低四位,表示分的个位;MIN[6..4]分的高三位,表示分的十位。 HOUR[3..0]时的低四位,表示时的个位;HOUR[5..4]时的高两位,表示时的十位。 DP---小数点的控制位,高电平有效。
XSOUT---显示数据的输出。 SEL---位选择。 COUNT---该模块的计数器是6进制。
(1)
(2)
(4)
(2) (3)
图4.4 时间设置模块时序仿真
聂敏 《基于VHDL数字时钟的设计与实现》 第19页 共24页
(1) 如前面所有模块所描述的一样,RESET为系统的复位信号。
(2) 在SETCLK信号的上升沿激励下,将时间由秒到时钟,从低到高的设置排列下来后为“932171”,当SETCLK出现上升沿时,每一个周期发送一个数字。当发送数字到第六个周期时,全部一组数据便全部发送完毕。
(3) 在SETCLK信号的上升沿激励下,还有另外一个变化量,那就是位选择输出,用于控制数据发送给的对象,其实质就是一个6进制的计数器。
(4) 小数点的控制输出,用于控制小数点的有效,起作用是用于分隔时、分、秒的显示,方便查看。对应于数码管的位置图以及该模块时序图中的SEL位选择信号,可以观察到,在每组数据的输出中,数码管2、4的小数点总是亮的,也就是说,DP控制字的功能是正确的。
(5) 在第二条中,说到数据的发送与接受,现在对应SEL位选择的输出,可以验证一下,是否每组发出的数据都能够被完整的接受,并且显示出来。在SEL=’0’的时候,对应的XSOUT是9,而当SEL依次等于2、3、4、5时,XSOUT都对应为3、2、1、7、1,每一位都是从秒的个位到小时的十位分离后的,对应结果和预计的理论结果是完全相同的,并且中间也没有误差。
4.5 译码模块仿真(DELED.SCF)
译码模块仿真图如图4.5所示。
图4.5 译码模块仿真
此模块的功能正确性可参考表格译码输出和十进制对应关系,进行验证。
4.6 模块整合
将各模块编译完成后,将会在运行目录下生成一个.sym的文件,这个文件就是图元文件,在图形编辑器里面使用它,可以轻松完成实验的内容。编译后进行时序仿真,仿真后的时序图如下图4.6。
聂敏 《基于VHDL数字时钟的设计与实现》 第20页 共24页
图4.6 整合波形仿真
图4.6是没有加入SETCLK时钟信号时的时序图,通过此图可以方便的观察并验证系统的功能实现状况。
(1) 分调节的使能信号的实现情况:在SETMIN高电平有效的状态下,系统时钟信号(CLK)在上升沿的时候,将分钟输出信号([fen:3]SOUT)加以调整,每次加一。以上所说的两条均可实现,故分调节的使能信号是没有问题的。
(2) 小时调节的使能信号的实现情况:在SETHOUR高电平有效的状态下,小时调节信号(DIPS)在上升沿的时候,将分钟输出信号(HOUT[5..0])加以调整,每次加一。同样,从时序图中发现,该状态下没有问题,该信号的功能是可以实现的
(3) 在分钟输出信号([FEN:3]SOUT)为59并向00变化的时候,报警信号(BELL)出现一个高电平,如上图所示。
以下是加入了SETCLK时钟信号的时图,如图4.7所示。
聂敏 《基于VHDL数字时钟的设计与实现》 第21页 共24页
(1)
(2)
图4.7 加入SETCLK时钟信号的时序图
分析该时序下各功能的实现情况:
(1) 小数点信号(DP)的高电平只出现在位选信号的2、4处,根据上面的理论介绍,是完全符合条件的。
(2) 加入了SETCLK时钟信号后出现了位选信号(SEL[2..0])以及数码管驱动信号(LE D[6..0])和数码管显示输出信号XSOUT[5..0]。随着系统的时钟信号更迭,时分秒在进行累加的同时,位选信号、驱动信号、显示信号都在不断的变化。其中的联系是:显示信号对应着对应着秒分时从个位到十位、由低到高输出,并且排列的顺序和位置正好是与位选信号(SEL[2..0])现对应,符合信号的传输要求。
(3) SETCLK的脉冲周期正好是CLK的时钟周期的6倍,符合式1-1。
聂敏 《基于VHDL数字时钟的设计与实现》 第22页 共24页
结束语
课程设计是我们运用所学知识,动手实践的一个很好的机会。它既可以帮助我们加深对所学知识的理解,又能提高我们运用知识,联系实际,动手实践的能力。而且在设计过程中可能用到我们没学过的知识,需要我们去查阅资料获取相关信息,这又提高了我们查找信息和学习新知识的能力。在实物的调试与检测过程中,又会遇到许多意想不到的问题,需要我们去分析原因和解决问题。
通过这次课程设计,对VHDL的语言有了更深刻的认识,对课题设计的基本流程有了清醒的认识,把最近半年学的书本知识和实践联系在了起来。通过使用VHDL编译各模块然后使用图表编辑器绘制,更好的熟悉了使用MAX+Plus这个软件制作各类作品的方法与技巧。同时完整的形成了一个制作思路,那就是对于过繁杂了东西,先大后小的分析,然后再现小后大的动手。
聂敏 《基于VHDL数字时钟的设计与实现》 第23页 共24页
致 谢
经过两周的奋战我的课程设计终于完成了。在没有做课程设计以前觉得课程设计只是对这半年来所学知识的单纯总结,但是通过这次做课程设计发现自己的看法有点太片面。课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。在这次课程设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。
在此要感谢我们的指导老师廖老师和黄老师对我们悉心的指导,感谢老师们给我们的帮助。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
聂敏 《基于VHDL数字时钟的设计与实现》 第24页 共24页
参考文献
[1] 陈荣,陈华. VHDL芯片设计 [M]. 北京:机械工业出版社,2006年,1月. [2] 王毓银. 数字电路逻辑设计 [M]. 北京:高等教育出版社,2005年,12月. [3] 沈明山. EDA技术及可编程器件应用实训[M]. 北京:科学出版社,2005年,10月.
[4] 潘松. EDA技术实用教程[M].北京:科学出版社,2003年,9月.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务