基于FPGA的电子钟设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录第一章绪论1
第二章可编程逻辑器件概述及设计方案2
2.1 CPLD/FPGA概述及VHDL语言的特点2 2.2可编程逻辑器件的分类和发展历程4
2.3 EPF10K10LC84-4芯片简介5
2.4 电子时钟的设计方案6
第三章系统电路设计7
3.1 总体设计7
3.2 显示电路设计8
3.2.1 分频器电路10
3.2.2 扫描电路电路11
3.2.3 BCD码多路选择器12
3.2.4 BCD译码器13
3.2.5 位选码电路15
3.3 电子时钟计数器电路设计15
3.3.1 秒和分计数器设计16
3.3.2 小时计数器设计17
总结22
参考文献23
致谢错误!未定义书签。
第一章绪论
时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。
现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能更进一步,产品更新换代的节奏也越来越快。
现代电子设计技术的核心是EDA ( Electronic Design Automation ) 技术。
EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL (Hardware Description Language)为系统逻辑描述手段完成的设计文件。
20世纪80年代末,出现了FPGA(Field Programmable Gate Array),CAE和CAD 技术的应用更为广泛,它们在PCB设计的原理图输入,自动布局布线及PCB分析,以及逻辑设计、逻辑仿真、布尔综合和化简等方面担任了重要的角色,为电子设计自动化必须解决的电路建模、标准文档及仿真测试奠定了基础。
硬件描述语言是EDA技术的重要组成部分,VHDL是作为电子设计主流硬件的描述语言。
本论文就是应用VHDL语言来实现秒表的电路设计。
VHDL语言是标准硬件描述语言,它的特点就是能形式化抽象表示电路结构及行为,支持逻辑设计中层次领域的描述,借用了高级语言的精巧结构简化电路描述,具有电路模拟与验证及保证设计的正确性,支持电路由高层向低层的综合变换,便于文档管理,易于理解和设计重用。
本课题选用了Altera公司的FPGA产品并以其专门开发软件为平台,运用VHDL硬件描述语言设计一个电子时钟。
CPLD/FPGA以高集成度、高速度和高可靠性而著称,运用FPGA进行产品开发,其开发周期短,投资风险小,产品上市速度快,决定其有着无比的市场前景,是现代EDA技术中广泛运用的硬件。
该系统通过VHDL语言和原理图混合应用的方式来实现电子时钟的设计,并下载到硬件之中进行验证。
我们将电子时钟的设计分成了四大模块,分别是时间计数器模块;键盘控制模块;显示电路模块和时间调整模块。
本次设计主要让我们掌握CPLD/FPGA的研发过程,掌握VHDL语言的编程思想及过程,以及电子时钟基本功能和实现的基本原理。
第二章可编程逻辑器件概述及设计方案
可编程逻辑器件PLD(Programmable Logic Device)是20世纪70年代发展起来的一种新的集成器件。
PLD是大规模集成电路技术发展的产物,是一种半定制的集成电路,结合计算机的软件技术(EDA技术)可以快速、方便地构建数字系统。
2.1 CPLD/FPGA概述及VHDL语言的特点
1、CPLD/FPGA概述
不论是简单的还是复杂的数字系统都是由基本门来构成的,如与门、或门、非门、传输门等。
人们发现,不是所有的基本门都是必须的,如用与非门单一基本门就可以构成其他的基本门。
任何的组合逻辑函数都可以化为“与—或”表达式。
即任何的组合电路(需要提供输入信号的非信号),可以用“与门—或门”二级电路实现。
同样,任何时序电路都可由组合电路加上存储元件,即锁存器、触发器、RAM 构成的。
由此人们提出了一种可编程电路结构,即乘积项逻辑阵列结构。
当然,“与—或”结构组成的PLD器件的功能比较简单。
此后,人们又从ROM 工作原理、地址信号与输出数据间的关系以及ASIC 的门阵列法中获得启发,构造另外一种可编程的逻辑结构,那就是SRAM查表的方式,并使用多个查找表构成了一个查表阵列,称为可编程门阵列(Programmable Gate Array)。
可编程逻辑器件的两种主要类型是现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。
在这两类可编程逻辑器件中,FPGA提供了最高的逻辑密度、最丰富的特性和最高的性能。
现在最新的FPGA器件,如Xilinx Virtex™系列中的部分器件,可提供八百万"系统门"(相对逻辑密度)。
这些先进的器件还提供诸如内建的硬连线处理器(如IBM Power PC)、大容量存储器、时钟管理系统等特性,并支持多种最新的超快速器件至器件(device-to-device)信号技术。
FPGA被应用于X围广泛的应用中,从数据处理和存储,以及到仪器仪表、电信和数字信号处理等。
与此相比,CPLD提供的逻辑资源少得多- 最高约1万门。
但是,CPLD提供了非常好的可预测性,因此对于关键的控制应用非常理想。
而且如Xilinx CoolRunner™系列CPLD器件需要的功耗极低,并且价格低廉,从而使其对于成本敏感的、电池供电的便携式应用(如移动和数字手持助理)非常理想。
FPGA基于SRAM的架构,集成度高,以LE(包括查找表、触发器及其他)为基本单元,有内嵌Memory、DSP等。
具有易挥发性,需要有上电加载过程。
在实现复杂算法、队列调度、数据处理、高性能设计、大容量缓存设计等领域中有
广泛应用,如Altera Stratix系列。
CPLD基于EEPROM工艺,集成度低,以MicroCell(包括组合部分与寄存器)为基本单元。
具有非挥发特性,可以重复写入。
在粘合逻辑、地址译码、简单控制、FPGA加载等设计中有广泛应用,如Altera MAX3000A系列。
详细比较:尽管FPGA和CPLD有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点:①CPLD更适合完成各种算法和组合逻辑,FP GA更适合于完成时序逻辑。
换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。
②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA 的分段式布线结构决定了其延迟的不可预测性。
③在编程上FPGA比CPLD具有更大的灵活性。
CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FP GA可在逻辑门下编程,而CPLD是在逻辑块下编程。
④FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。
⑤CPLD比FPGA使用起来更方便。
CPLD的编程采用EPROM或FASTFLASH 技术,无需外部存储器芯片,使用简单。
而FPGA的编程信息需存放在外部存储器上,使用方法复杂。
⑥CPLD的速度比FPGA快,并且具有较大的时间可预测性。
这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。
⑦在编程方式上,CPLD主要是基于EPROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。
CPLD又可分为在编程器上编程和在系统编程两类。
FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。
其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。
⑧CPLDXX性好,FPGAXX性差。
⑨一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。
2、VHDL语言的特点
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,
高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
2.2可编程逻辑器件的分类和发展历程
可编程逻辑器件的分类很多,几乎每个大的可编程逻辑器件供应商都能提供具有自身结构特点的PLD器件。
由于历史的原因,可编程器件的命名各异,在介绍可编程逻辑器件之前,有必要介绍几种PLD的分类方法。
较常见的是按集成度来分区分不同的PLD器件,一般可分为两大类器件:一类是芯片集成度较低的。
另一类芯片集成度较高的。
前面已经提到,常用的可编程逻辑器件都是从“与—或阵列”和“门阵列”两类基本结构发展起来的,所以可编程器件从结构上分为两大类器件:
⑴查找表结构器件。
构成可编程门,再构成阵列形式。
FPGA是属于此类器件。
⑵乘积项结构器件。
其基本结构为“与—或阵列”的器件,大部分简单PLD 和CPLD都属于这个X畴。
第三种分类方法是从编程工艺上划分:
熔丝(Fuse)型器件。
早期的PROM器件就是采用熔丝结构的,编程过程就是根据设计的熔丝图文件来烧断对应的熔丝达到编程目的。
⑶反熔丝型器件。
是对熔丝技术的改进,在编程处通过击穿漏层使得两点之间导通。
与熔丝烧断获得开路正好相反。
某些FPGA采用此种编程方式,如Actel 公司的FPGA器件。
无论是熔丝还是反熔丝结构,都只能编程一次,因而又合称为OTP器件,即一次性可编程(One Time Programmable)器件。
⑷EPROM型。
称为紫外线擦除点可编程逻辑器件。
是用较高的编程电压进行编程,当需要再次编程时,用紫外线进行擦除。
与熔丝、反熔丝型不同,可多次编程。
有时为降低生产成本,在制造EPROM型器件时不加用于紫外线擦除的石英窗口,于是就不能用紫外线擦除,而只能编程一次,也被称为OTP器件。
很早以前人们就曾设想设计一种逻辑可再编程的器件,不过由于受到当时集成电路工艺技术的限制,一直未能如愿。
直到20世纪后期,集成技术有了飞速的发展,可编程逻辑器件才得以实现。
历史上,可编程逻辑器件经历了从PROM(Programmable Read Only Memory ),PLA(Programmable Logic Array),PAL(Programmable Array Logic )可重复编程GAL(Generic Array Logic)到采用大规模集成技术的EPLD到CPLD和
FPGA的发展过程。
在结构、工艺、集成度、功能、速度和灵活性方面都有很大的改进和提高。
可编程逻辑器件大致的演变过程如下:
⑴20世纪70年代熔丝编程的PROM和PLA器件是最早的可编程的逻辑器件。
⑵20世纪70年代末,对PLA进行了改进,AMD公司推出PAL器件。
⑶20世纪80年代初,Lattice公司发明点可擦写的比PAL使用灵活的GAL 器件。
⑷20世纪80年代中期,Xilinx公司提出现场可编程概念,同时产生了世界上第一片FPGA器件。
同一时期,Altera公司推出EPLD器件,较GAL器件有更高的集成度,可以用紫外线或点擦除。
⑸20世纪80年代末,Lattice公司又提出在系统可编程技术,并且推出了一系列具备在系统可编程能力的CPLD器件,将可编程逻辑器件的性能和应用技术推向一个全新的高度。
进入20世纪90年代后,可编程逻辑集成电路技术进入飞速发展时期。
器件的可用逻辑门数超过了百万门,并出现了内嵌复杂功能模块(如加法器、乘法器、RAM、CPU核、DSP核、PLL等)的SOPC(System on programmable chip)。
2.3 EPF10K10LC84-4芯片简介
本设计采用EPF10K10LC84-4芯片,下面将对其进行简单介绍。
Altera公司的FPGA器件Flex10K EPF10K10LC84-4,FLEX(灵活逻辑单元矩阵)系列是Altera应用非常广泛的产品,这些器件具有比较高的集成度及丰富的寄存器资源,采用了快速,可预测延时的连续式布线结构,是一种将CPLD和FPGA的优点结合于一体的器件。
EPF10K10LC84-4是84pinPLCC封装,另外还有其它类型的管脚和封装,有很强的选择性。
具有以下主要特点:
1.1万个等效逻辑门,含有572个逻辑单元(LEs)、72个逻辑阵列块(LABs)、3个嵌入式阵列块(EAB s),并具有720个片内寄存器,可以在不占用内部资源的条件下实现6144 bit的片内存储器;
2.内部模块间采用高速、延时可预测的快速通道连接,最高工作频率可以达到150 MHz以上;
3.逻辑单元间具有高速、高扇出的级联链和快速进位链;
4.片内还有三态网络和6个全局时钟、4个全局清零信号以及丰富的I/O资源;
5.每个I/O引脚可以选择为三态控制或集电极开路输出,可以通过编程控
制每个I/O引脚的速度以及I/O寄存器的使用。
2.4电子时钟的设计方案
数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等
方案一:运用单片机内部的定时/计数器来实现电子时钟的方法,该方案设计由单片机AT89S51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。
时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。
10秒位到5后,即59秒,分钟加1,10秒位回0。
依次类推,时钟最大的显示值为23小时59分59秒。
这里只要确定了1秒的定时时间,其它位均以此为基准往上累加。
方案二:采用专用的时钟芯片实现,通过单片机读取时钟芯片的计时时间,在数码管上显示出来,就可以实现电子时钟功能,典型的时钟芯片有:DS1302,DS12887,X1203,PCF8583等都可以实现电子时钟功能。
方案三:采用FPGA来实现电子时钟功能,运用VHDL语言来描述电子时钟的各个功能模块。
将电子时钟分为六十进制计数器和二十四进制计数器两个基本的功能模块,然后将两个六十进制计数器和一个二十四进制计数器相级联,就构成一个具有时、分、秒的电子时钟。
比较方案一、方案二和方案三:方案一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;方案二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,但该方案还具备日历功能,造成功能上的浪费;方案三是采用FPGA实现,运用VHDL语言描述,设计方法简单,而且运用有源晶振作为系统的时钟源,通过分频得到1HZ的信号,计时精度很高,不低于方案二的计时精度,而且运用VHDL语言来描述电子时钟是完全的硬件实现。
通过以上比较,系统中采用FPGA来实现电子时钟功能。
第三章系统电路设计
3.1 总体设计
设计一个显示时(2位)、分(2位)、秒(2位)共六位的多功能电子钟,它的主要功能是进行准确的计时。
利用VHDL语言对硬件进行描述,通过下载到FPGA之中进行硬件验证。
系统采用4MHz的石英晶体振荡器作为时钟源,经过分频之后得到1HZ的秒钟信号,秒计满60即得1分钟,分计满60便得1小时的信号,小时计满24即得一天,电子时钟的外观图如图3.1所示。
其中有六个按键用于调整时间,复位等功能。
具体功能如下:
图3.1 电子钟的外观图
OK键:开始计时。
SET键:与调时、调分、调秒键配合,可以调整到指定的时间。
RESET键:清零。
电子时钟硬件总体框图如图3.2所示。
图3.2 电子时钟硬件总体框图
在每个功能模块分项设计和组合前,先简单介绍一下每个方块的功能作用。
⑴分频器通过分频将4MHz的信号分频为1Hz的秒信号和100Hz的同步扫描时钟信号。
⑵1Hz的秒信号输入到秒计数电路,当计数器溢出时,向分计数器进位,当分计数器溢出时,向时计数器进位。
⑶BCD译码电路是将计数器的十六进制计数值转换为数码管显示所需要的段码。
⑷位码电路是用来选通某一位数码管,使其显示数字。
⑸扫描同步电路作用控制同一个数码管的段码和位码同步,同时对多个数码管轮流扫描。
⑹键盘控制电路作用是启动电子时钟计时,设定时间等。
3.2 显示电路设计
显示电路有LCD和LED显示电路,系统中选用LED显示电路,LED器件是一种发光二极管显示器。
其特点如下:
(1)LED显示器具备稳定、高速、简单的系统;
(2)LED显示结构简单、性能稳定;
(3)LED显示应用在成熟的生产技术上。
发光二极管组成的显示器是单片机应用产品中最常用的廉价输出设备。
八段发光二极管结构如图3.3所示。
图3.3 八段发光二极管外型
发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的称为共阴极显示器。
1位显示器有8个发光二极管组成,其中7个发光二极管a~g控制7个笔段的亮或暗,另一个控制一个小数点的亮和暗,这种笔画式的八段显示器能显示的字符少。
字符的形象有些失真,但控制方便,使用简单。
图3.4共阴极数码管
图3.5共阳极数码管
显示器的显示方法有静态和动态两种方法。
显示器位数较少时,采用静态显示的方法是合适的。
当位数较多时,用静态显示所需的I/O太多,一般采用动态显示方法,所以在系统中我们采用动态显示。
此类数码管的工作特点是:
⑴数码管片选端清0时,对应位的数码管才有可能亮;
⑵每次只能有一个片选端清0,即只能动态移位显示相应的数据;
⑶控制器通过控制数码管显示相应数字要用查表子程序来实现。
系统中显示电路是由分频电路、扫描电路、BCD码多路选择器、位选码电路和BCD译码器构成的。
数码管动态扫描电路如图3.6所示,其中FPQ为分频器,通过分频得到扫描时钟信号,时钟信号为100Hz;SCAN为扫描电路,它是由状态机组成的,循环扫描数码管,使得数码管稳定的显示数据;BCDYMQ为BCD译码器,作用是将计数器输出的十六进制数转换为数码管显示所需要的段码;BIT为位码,作用是轮流选择数码管的位。
3.2.1 分频器电路
扫描电路所需要的扫描时钟信号为100Hz,是通过分频器将系统的4MHz时钟信号经过10000分频之后,再通过四分频得到的。
系统中采用四个十进制计数器相级联实现10000分频,然后通过两个T触发器实现四分频得到100Hz信号。
十进制计数器的VHDL语言描述如下:
LIBRARY IEEE;
USE IEEE. STD_LOGIC_1164.ALL;
图3.6 数码管动态扫描
电路
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY T10 IS
PORT(CLK,RST,EN:IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT:OUT STD_LOGIC);
END T10;
ARCHITECTURE behav OF T10 IS
BEGIN
PROCESS(CLK,RST,EN)
V ARIABLE CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST= '1' THEN CQI:= (OTHERS =>'0');
ELSIF CLK'EVENT AND CLK='1' THEN
IF EN = '1' THEN
IF CQI < "1001" THEN CQI := CQI + 1;
ELSE CQI:= (OTHERS =>'0');
END IF;
END IF;
END IF;
IF CQI = "1001" THEN COUT <= '1';
ELSE COUT <= '0';
END IF;
CQ <= CQI;
END PROCESS;
END behav;
其中,CLK为外部脉冲输入端;RST为复位端,高电平有效,EN为使能端,高电平有效;CO为计数器的计数值输出端;COUT为进位输出端。
十进制计数器的仿真图如图3.7所示。
图3.7 十进制计数器的仿真图
3.2.2 扫描电路电路
扫描电路是动态数码管显示的核心部件,通过扫描电路使得同一位数码管的段码、位码能够同步选择并稳定显示数据。
其VHDL语言描述如下:LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SCAN IS
PORT(
SCAN:IN STD_LOGIC;
CLK:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END;
ARCHITECTURE BEHA VE OF SCAN IS
SIGNAL Q:STD_LOGIC_VECTOR(1 DOWNTO 0):="00";
BEGIN
PROCESS(SCAN)
BEGIN
IF SCAN'EVENT AND SCAN='1' THEN
IF Q=3 THEN
Q<="00";
ELSE
Q<=Q+1;
END IF;
END IF;
END PROCESS;
CLK<=Q;
END;
图3.8 扫描电路仿真图
扫描电路是由四位二进制计数器组成的状态机构成的,其仿真图如图3.8所示。
其中SCAN为扫描时钟信号输入端,CLK为状态输出端。
3.2.3 BCD码多路选择器
BCD码多路选择器是输入的四位的BCD码根据扫描电路的输出进行选择,然后通过BCD译码器将对应的BCD码转换成显示所需要的段码。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY BCDMUX IS
PORT( CLK:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
BCDDATA:IN STD_LOGIC_VECTOR(15 DOWNTO 0);
BCDLED:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END;
ARCHITECTURE BEHA VE OF BCDMUX IS
BEGIN
BCDLED(3 DOWNTO 0)<=BCDDATA(3 DOWNTO 0) AFTER 5 ms WHEN CLK="00" ELSE
BCDDATA(7 DOWNTO 4) AFTER 5 ms WHEN CLK="01" ELSE
BCDDATA(11 DOWNTO 8) AFTER 5 ms WHEN CLK="10" ELSE
BCDDATA(15 DOWNTO 12) AFTER 5 ms ;
END;
其中,CLK为输入选择,BCDDATA 为输入数据,BCDLED为输出数据。
3.2.4 BCD译码器
BCD译码器是将输入的四位二进制数转换成七段显示代码,通过对应的显示代码驱动LED显示相应的数据,其VHDL语言描述如下:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY bcdymq IS
PORT (
bcdin :IN std_logic_vector(3 DOWNTO 0);
bcdout :BUFFER std_logic_vector(7 DOWNTO 0)
);
END bcdymq;
ARCHITECTURE behave OF bcdymq IS
BEGIN
bcdout(7 DOWNTO 0)<="00111111" WHEN bcdin(3 DOWNTO 0)="0000"
ELSE --0
"00000110" WHEN bcdin(3 DOWNTO 0)="0001" ELSE --1
"01011011" WHEN bcdin(3 DOWNTO 0)="0010"
ELSE --2
"01001111" WHEN bcdin(3 DOWNTO 0)="0011"
ELSE --3
"01100110" WHEN bcdin(3 DOWNTO 0)="0100"
ELSE --4
"01101101" WHEN bcdin(3 DOWNTO 0)="0101"
ELSE --5
"01111101" WHEN bcdin(3 DOWNTO 0)="0110"
ELSE --6
"00000111" WHEN bcdin(3 DOWNTO 0)="0111"
ELSE --7
"01111111" WHEN bcdin(3 DOWNTO 0)="1000"
ELSE --8
"01101111" WHEN bcdin(3 DOWNTO 0)="1001"
ELSE --9
"01110111" WHEN bcdin(3 DOWNTO 0)="1010"
ELSE --A
"01111100" WHEN bcdin(3 DOWNTO 0)="1011"
ELSE --B
"00111001" WHEN bcdin(3 DOWNTO 0)="1100"
ELSE --C
"01011110" WHEN bcdin(3 DOWNTO 0)="1101"
ELSE --D
"01111001" WHEN bcdin(3 DOWNTO 0)="1110"
ELSE --E
"01110001" WHEN bcdin(3 DOWNTO 0)="1111"
ELSE --F
ZZZZZZZZ";
END behave;
其中,bcdin为四位二进制数输入端,bcdout为七段显示代码输出端,其仿真波形如图3.9所示。
图3.9 BCD译码器仿真波形
3.2.5 位选码电路
位选码电路的作用是在扫描电路作用下,依次输出对应的数码管的位选码。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY BIT IS
PORT( CLK:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
LEDENABLE:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END;
ARCHITECTURE BEHA VE OF BIT IS
BEGIN
LEDENABLE<="1110" WHEN CLK="00" ELSE
"1101" WHEN CLK="01" ELSE
"1011" WHEN CLK="10" ELSE
"0111";
END;
其中,CLK为扫描选择信号输入端,LEDENABLE为位选码数据输出端,其仿真波形如图3.10所示。
图3.10 位选码仿真波形
3.3 电子时钟计数器电路设计
电子时钟是由两个60进制计数器和一个二十四进制计数器组成的,其中二
十四进制计数器用于时计数器,60进制计数器用于秒和分计数器。
3.3.1 秒和分计数器设计
秒和分计数器是由六十进制计数器组成的,而六十进制计数器是由一个十进制计数器和一个六进制计数器组成的。
1、系统中采用的十进制计数器采用74161来设计,
其设计原理图如图3.11所示,其中CLK为外部时钟脉冲输入端,Q0~Q3为计数器计数值输出端,T为进位输出端,ENT为十进制计数器使能端,CLRN 为十进制计数器清零端,十进制计数器仿真图如图3.12所示。
图3.11 十进制计数器原理图
图3.12 十
进制计数器仿真图
2、六进制计数器设计
系统中采用的六进制计数器采用74161来设计,其设计原理图如图3.13所示,其中CLK1为外部时钟脉冲输入端,QQ0~QQ3为计数器计数值输出端,T1为进位输出端,ENT1为十进制计数器使能端,CLRN1为十进制计数器清零端,六进制计数器仿真图如图3.14所示。
图3.13 六进制计数器原理图
图3.14 六进制计数器仿真图时序图
3、六十进制计数器设计
系统中采用的十进制计数器与六进制计数器级联构成六十进制计数器,其设计原理图如图3.15所示,其中CLK2为外部时钟脉冲输入端,Q0~Q7为计数器计数值输出端,T2为进位输出端,ENT2为十进制计数器使能端,CLRN2为十进制计数器清零端,其中T10、T6是十进制计数器和六进制计数器所生成的封装库。
图3.15 六十进制计数器原理图
3.3.2 小时计数器设计
电子时钟电路的小时计数器是由二十四进制计数器组成的,系统需要将二十四进制计数器的计数值分解为两位的BCD码,然后再送到数码管上显示。
1、二十四进制计数器。