1、 1 引 言 伴随科学技术不停发展,大家对时间计量精度要求越来越高。相对机械钟而言,数字钟能实现正确计时,并显示时,分,秒,而且能够方便,正确对时间进行调整。在此基础上,还能够实现整点报时功效。所以,数字钟应用十分广泛。所谓数字时钟,是指利用电子电路组成计时器。 1.1课题背景、目标 电子技术是一门应用很广,发展极为快速科学技术,尤其因为数字电子技术含有高抗干扰能力、更高可靠性和便于计算机处理等特点,多年来得到愈加快速发展,数字通讯设备、数字电视、数字摄影机、数字摄象机等数字化产品多年如雨后春笋般大量涌现,数字电子技术已经成为以后电子技术发展关键方向。现代电子产品几乎渗透了社会
2、各个领域,有力地推进了社会生产力发展和社会信息化程度提升,同时也使现代电子产品性能深入提升,产品更新换代节奏也越来越快。 钟表数字化给大家生产生活带来了极大方便,而且大大地扩展了钟表原先报时功效。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至多种定时电气自动启用等,全部这些,全部是以钟表数字化为基础。所以,研究数字钟及扩大其应用,有着很现实意义。 经过数字时钟设计,巩固计算机组成原理课程,理论联络实际,提升分析、处理计算机技术实际问题独立工作能力;掌握用VHDL语言编制简单小型模块,学会数字钟设计方法,熟悉集成电
3、路使用方法,初步掌握电子钟设计方法并实现时间显示和校对,和报时功效,并能对数字电子钟进行扩展。数字钟是一个用数字电路技术实现时、分、秒计时装置,和机械式时钟相比含有更高正确性和直观性,且无机械装置,含有更更长使用寿命,所以得到了广泛使用。 1.2 课程设计内容 本课程设计实现一个数字时钟,含有按秒走时功效,能够分别显示小时(2位二十四小时)、分钟(2位)、秒(2位)。含有整点报时、时间调整功效,且能够对计时系统小时、分钟进行调整。也可设计成十二小时计时方案(AM,PM)。含有美观、清楚、人性化显示界面设计,走时精度不劣于±3秒/月。本课程设计采取VHDL语言,以MAXPLUSII
4、开发工具。依据系统设计要求,系统设计采取自顶向下设计方法,能够将该系统中各功效模块细分为:秒计数模块、分计数模块、小时计数模块、报警模块、时间设置模块和译码显示模块六个部分。 2 EDA、VHDL介绍 2.1 EDA介绍 现代电子设计技术关键就是EDA(Electronic Design Automatic)技术。利用EDA技术,电子设计师能够方便地实现IC设计、电子电路设计和PCB设计等工作。EDA技术已经有30年发展历程。现在EDA技术应用广泛,包含在机械、电子、通信、航空航天、化工等各个领域,全部有EDA应用。不管是在产品设计、制造方面,还是在科研和教学方面,EDA
5、已成为必不可少一部分。掌握EDA技术已成为通信电子类专业学生学习及就业基础素质。 2.1.1 EDA技术概念 EDA技术是在电子CAD技术基础上发展起来通用软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术最新结果,进行电子产品自动设计。 EDA 设计可分为系统级、电路级和物理实现级。物理级设计关键指IC版图设计,通常由半导体厂家完成;系统级设计关键面对大型复杂电子产品;而通常民用及教学所包含基础是电路级设计。我们常见EDA软件多属于电路级设计。 电路级设计工作,是在电子工程师接收系统设计任务后,首先确定设计方案,并
6、选择适宜元器件,然后依据具体元器件设计电路原理图,接着进行第一次仿真。其中包含数字电路逻辑模拟、故障分析、模拟电路交直流分析、瞬态分析等。这一次仿真关键是检验设计方案在功效方面正确性。 仿真经过后,依据原理图产生电气连接网络表进行PCB板自动布局布线,有条件还能够进行PCB后分析。其中包含热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后结果参数反馈回电路图,进行第二次仿真,也称作后仿真。后仿真关键是检验PCB板在实际工作环境中可行性。 2.1.2 EDA技术历史和发展 EDA技术发展历程大致可分为三个阶段。20世纪70年代为计算机辅助设计(CAD)阶
7、段,大家开始用计算机替换手工操作进行IC版图编辑、PCB布局布线。80年代为计算机辅助工程(CAE)阶段。和CAD相比,CAE除了有纯粹图形绘制功效外,又增加了电路功效分析和结构设计,而且经过电气连接网络表将二者结合在一起,实现了工程设计。20世纪90年代为电子系统设计自动化(EDA)阶段,同时又出现了计算机辅助工艺(CAPP)、计算机辅助制造(CAM)等。 2.1.3 EDA应用 现在EDA技术应用广泛,包含在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,全部有EDA应用。现在EDA 技术已在各大企业、科研和教学部门广泛使用。 在产品设计
8、和制造方面,EDA 技术可实现前期计算机仿真、系统级模拟及测试环境仿真、PCB制作、电路板焊接、ASIC设计等。 在教学方面,中国高校是从九十年代中期开始EDA教育,现在几乎全部理工科类高校全部开设了EDA课程。这些课程关键是让学生了解EDA基础概念和原理,使用EDA软件进行电子电路课程试验及从事简单系统设计。 2.1.4 EDA常见软件 EDA工具层出不穷,现在进入中国并含有广泛影响EDA软件有:EWB、PSpice、OrCAD、PCAD、Protel、Viewlogic、Mentor、Graphics、Synopsys、LSIlogic、Cadence等等。这
9、些工具全部有较强功效,通常可用于多个方面,比如很多软件全部能够进行电路设计和仿真,同时也能够进行PCB自动布局布线,可输出多个网表文件和第三方软件接口。下面按关键功效或关键应用场所进行划分。 1. 电子电路设计和仿真工具 电子电路设计和仿真工具包含PSpice、EWB、Matlab、SystemView、MMICAD等。下面简单介绍前两种软件。 (1)PSpice:基于SpicePC版软件。Spice(Simulation Program with Integrated Circuit Emphasis)是由美国加州大学推出电路分析仿真软件,是20世纪80年代世界上应用最
10、广电路设计软件,1988年被定为美国国家标准。1984年,美国MicroSim企业推出了PSpice。PSpice是一个强大模拟和数字电路混合信号仿真软件,包含对中规模集成电路(MSI)和大规模集成电路(LSI)提供多个分析功效,而且仿真精度高,在中国普遍使用。 (2)EWB(Electronic Workbench)软件:Interactive ImageTechnologies Ltd在20世纪90年代初推出电路仿真软件,关键用于模拟和数字电路仿真。高版本已更名为Multisim。相对于其它EDA软件,它提供了万用表、示波器、信号发生器等虚拟仪器。该软件界面直观,易学易用。它很多功效模
11、拟了Spice设计,分析功效也较强。 2. PCB设计软件 PCB(Printed—Circuit Board)设计软件种类很多,如Protel、OrCAD、PowerPCB、Cadence PSD、MentorGraphicesExpedition PCB、Winboard/Windraft/IvexSPICE、PCB Studio等等。现在在中国使用最普遍应属Protel。 Protel是PROTEL(现更名为Altium)企业在20世纪80年代末推出CAD工具。它较早在中国使用,普及率很高。早期Protel关键作为印刷板自动布线工具使用,现在普遍使用是Protel 9
12、9 SE。它是个完整全方位电路设计系统,包含了电原理图绘制、模拟电路和数字电路混合信号仿真、多层印刷电路板设计,可编程逻辑器件设计等功效,并含有Client/Server体系结构,同时还兼容部分其它设计软件文件格式。Protel软件功效强大、界面友好、使用方便。它最具代表性是电路设计和PCB设计。 3. IC设计软件 IC设计工具很多,其中按市场所占份额排行为Cadence、Mentor Graphics和Synopsys。这三家全部是ASIC设计领域相当有名软件供给商。其它企业软件相对来说使用者较少。 4. 其它EDA软件 (1)VHDL语言:超高速集成电路硬件描述
13、语言(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,诞生于1
14、982年。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企业支持,在电子工程领域,已成为实际上通用
15、硬件描述语言。有教授认为,在新世纪中,VHDL于Verilog语言将负担起大部分数字系统设计任务。 VHDL语言是一个用于电路设计高级语言。它在80年代后期出现。最初是由美国国防部开发出来供美军用来提升设计可靠性和缩减开发周期一个使用范围较小设计语言 。 VHDL英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Descriptiong Language.翻译成汉字就是超高速集成电路硬件描述语言。所以它应用关键是应用在数字电路设计中。现在,它在中国应用多数是用在FPGA/CPLD/EPLD设计中。当然在部分实力较为雄厚
16、单位,它也被用来设计ASIC。 VHDL关键用于描述数字系统结构,行为,功效和接口。除了含有很多含有硬件特征语句外,VHDL语言形式和描述风格和句法是十分类似于通常计算机高级语言。VHDL程序结构特点是将一项工程设计,或称设计实体(能够是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既包含实体内部功效和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其它设计就能够直接调用这个实体。这种将设计实体分成内外部分概念是VHDL系统设计基础点。 和其它硬件描述语言相比,VHDL含有以下特点: 功效强大、设计灵活。V
17、HDL含有功效强大语言结构,能够用简练明确源代码来描述复杂逻辑控制。它含有多层次设计描述功效,层层细化,最终可直接生成电路级描述。VHDL支持同时电路、异步电路和随机电路设计,这是其它硬件描述语言虽不能比拟。VHDL还支持多种设计方法,既支持自底向上设计,又支持自顶向下设计;既支持模块化设计,又支持层次化设计。 支持广泛、易于修改。因为VHDL已经成为IEEE标准所规范硬件描述语言,现在大多数EDA工具几乎全部支持VHDL,这为VHDL深入推广和广泛应用奠定了基础。在硬件电路设计过程中,关键设计文件是用VHDL编写源代码,因为VHDL易读和结构化,所以易于修改设计。 强大系统硬件描
18、述能力。VHDL含有多层次设计描述功效,既能够描述系统级电路,又能够描述门级电路。而描述既能够采取行为描述、寄存器传输描述或结构描述,也能够采取三者混合混合级描述。另外,VHDL支持惯性延迟和传输延迟,还能够正确地建立硬件电路模型。VHDL支持预定义和自定义数据类型,给硬件描述带来较大自由度,使设计人员能够方便地创建高层次系统模型。 独立于器件设计和工艺无关。设计人员用VHDL进行设计时,不需要首先考虑选择完成设计器件,就能够集中精力进行设计优化。当设计描述完成后,能够用多个不一样器件结构来实现其功效。 很强移植能力。VHDL是一个标准化硬件描述语言,同一个设计描述能够被不一样工具
19、所支持,使得设计描述移植成为可能。 易于共享和复用。VHDL采取基于库(Library)设计方法,能够建立多种可再次利用模块。这些模块能够预先设计或使用以前设计中存档模块,将这些模块存放到库中,就能够在以后设计中进行复用,能够使设计结果在设计人员之间进行交流和共享,降低硬件电路设计。 (1)和其它硬件描述语言相比,VHDL含有更强行为描述能力,从而决定了她成为系统设计领域最好硬件描述语言。强大行为描述能力是避开具体器件结构,从逻辑行为上描述和设计大规模电子系统关键确保。 (2)VHDL丰富仿真语句和库函数,使得在任何大系统设计早期就能查验设计系统功效可行性,随时可对设计进行仿真模拟。
20、 (3)VHDL语句行为描述能力和程序结构决定了她含有支持大规模设计分解和已经有设计再利用功效。符合市场需求大规模系统高效,高速完成必需有多人甚至多个代发组共同并行工作才能实现。 (4)对于用VHDL完成一个确定设计,能够利用EDA工具进行逻辑综合和优化,并自动把VHDL描述设计转变成门级网表。 (5)VHDL对设计描述含有相对独立性,设计者能够不懂硬件结构,也无须管理最终设计实现目标器件是什么,而进行独立设计。 3 数字时钟设计过程 3.1设计计划 依据系统设计要求,系统设计采取自顶向下设计方法,能够将该系统中各功效模块细分为:秒计数模块、分计数模块、小时计数模块、报警模块、时间
21、设置模块和译码显示模块六个部分。先使用VHDL语言设计编译将这每个模块制作成图元,然后再使用图形编辑器进行总体整合,系统整体组装设计草图图3.1所表示。 秒计数器模块 分计数器模块 时计数器模块 译码显示模块 时间调整模块 报警模块 7段 数码管 显示 喇叭 系统时钟 基础功效 扩展功效 外部设备 秒高位 进位 分高位 进位 图3.1 系统总体设计草图 3.2 各模块原理及程序 现在就先对本系统中最基础三项内容设计进行叙述: 3.2.1秒计数模块VHDL程序(MIAO.VHD) 秒计数模块中是以60进制进行循环,故需要秒数据输出应该
22、是7位(其中低4位用于秒低位,而高3位在作为秒高位)。另外在该模块下程序因为考虑到系统功效中调整时钟和分钟要求,故要在秒计数模块中另外加入复位信号和分钟设置信号。以下是该模块VHDL源程序。 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MIAO IS PORT (CLK: IN STD_LOGIC;-------------------系统时钟信号 RESET: IN STD_LOGIC; ------------------系
23、统复位信号 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
24、 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-----初始化,即系统复位信号功效
25、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.且co
26、unt值为59 ENMIN_1<='1';COUNT<="0000000"; ---则ENMIN_1置1,count清零 ELSE ------------不然,若只满足条件1、2 COUNT<=COUNT+7;------则直接向count高3位进1 END IF; ELSE---------------------------若不满足count值小于60
27、 COUNT<="0000000";------------则直接将count清零 END IF; ELSIF(COUNT<16#60#) THEN-------若count低四位不满足条件1,满足2. COUNT<=COUNT+1; ENMIN_1<='0';---------------count加计数,进位标志字为零 ELSE -------------------------若条件1、2均不满足 COUN
28、T<="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_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FEN IS PORT (INMIN: IN
29、 STD_LOGIC;-------------------系统时钟信号 RESET: IN STD_LOGIC; ------------------系统复位信号 DIPS: IN STD_LOGIC;-------------------时设置时钟信号 SETHOUR: IN STD_LOGIC; --------------------时设置信号 ENHOUR: OUT STD_LOGIC;-----------------时计数时钟信号 SOUT: OUT STD_LOG
30、IC_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<=(SETHO
31、UR AND DIPS); 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
32、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";
33、 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怎样获取,原来构思时把报警作为一个单独功效模
34、块来处理,可是在编程试验程序,和具体调试中发觉BELL作为整点报时信号,其功效和分钟计数中ENHOUR_1是完全相同,故只需将BELL放在分钟模块中一起进行处理。立即ENHOUR_1值赋给了BELL。 3.2.3时计数模块VHDL程序(SHI.VHD) LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SHI IS PORT (INHOUR: IN STD_LOGIC;-------------------时。时钟信号 RESET:
35、 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
36、初始化 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
37、 ----------------------若不满足条件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
38、 PROCESS; END ARCHITECTURE ART; 现在对图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
39、 010 2 分低四位 1 4 011 011 3 分高三位 0 5 100 100 4 时低四位 1 6 101 101 5 时高两位 0 数码管编号对应关系和其它具体内容在后面硬件分析中将做具体介绍。以下是该模块程序: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SET IS PORT (SETCLK: IN STD_LOGIC;------------------调时时钟信号
40、 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:
41、 OUT STD_LOGIC_VECTOR(2 DOWNTO 0));-------位选择输出 END ENTITY SET; ARCHITECTURE ART OF SET IS SIGNAL COUNT :STD_LOGIC_VECTOR(2 DOWNTO 0);-----设计一个3位计数器 BEGIN PROCESS(SETCLK,RESET) BEGIN IF (RESET='0') THEN -----------初始化 COUNT<="000"; ELSIF(SETCLK'EV
42、ENT 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)---------对各状态具体内容进行细化
43、 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
44、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);----------后面均可照此法进行 D
45、P<='0';SEL<="011"; 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位计数
46、器count,以调时时钟信号SETCLK上升沿为激励响应。假如一个时刻电子钟要显示数字是六个话,则送出并接收这一组数字需要时间是调时时钟信号SETCLK周期×6,即 t=T(setclk) ×6 (式1-1) 因为在后面将每个模块进行整合时候,就存在怎样协调每个计数器周期,以降低犯错,而且节省时间和资源。经过这个公式能够轻松得出,而且助于了解各模块之间关系。 3.2.5译码模块VHDL源程序(DELED.VHD) 程序比较简单,在此仅对译码输出和十进制中0~9对应关系列表说明。 表3.2 译码输出和十进制对应关系 译码B 011111
47、1 0000110 1011011 1001111 1100110 译码H 3FH 06H 5BH 4FH 6EH 十进制 0 1 2 3 4 译码B 1101101 1111101 0000111 1111111 1101111 译码H 6DH 7DH 07H FFH 6FH 十进制 5 6 7 8 9 以下是源程序(DELED.VHD) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DE
48、LED IS PORT (NUM: IN STD_LOGIC_VECTOR(3 DOWNTO 0);-----------二进制数值 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<="
49、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";
50、 ----显示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; 以上就是这个系统全部模块,下面是对每一个模块编译、






