基于VHDL的数字电子时钟的设计.docx
- 文档编号:2384753
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:37
- 大小:1.50MB
基于VHDL的数字电子时钟的设计.docx
《基于VHDL的数字电子时钟的设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL的数字电子时钟的设计.docx(37页珍藏版)》请在冰点文库上搜索。
基于VHDL的数字电子时钟的设计
基于VHDL的数字电子时钟的设计
摘要
随着人类的不断进步,现代电子设计技术已进入一个全新的阶段,传统的电子设计方法、工具和器件在更大的程度上被EDA所取代。
本实验则是基于VHDL语言设计的数字钟,具有时、分、秒显示功能。
电路主要有时间计数模块、时间显示模块以及译码模块。
数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。
它的基本功能是计时,计时周期为24小时,显示满刻度23时59分59秒;数字钟学习的目的是掌握各类计数器及它们相连的设计方法,熟悉多个数码管显示的原理与方法以及模块化设计方式;掌握用VHDL语言的设计思想以及整个数字系统的设计。
此数字钟具有时,分,秒计数显示功能,以24小时为计数循环,能实现清零,调时,调分以及闹钟等功能。
本设计是一个显示时(2位)分(2位)秒(2位)共六个数字的多功能电子钟。
因此将其分频得1Hz的秒钟信号,秒计满60即得1分钟,分满60即得1小时信号,小时满24即得一天。
关键词:
数字钟,计数器,数码管,模块化设计,VHDL
引言
本设计采用的VHDL是一种全方位的硬件描述语言具有极强的描述能力能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计。
当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。
它与传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低.同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。
EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。
美国ALTERA公司的可编程逻辑器件采用全新的结构和先进的技术,加上MaxplusII(或最新的QUARTUS)开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计。
EDA技术,技术以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译,逻辑化简,逻辑分割,逻辑映射,编程下载等工作。
最终形成集成电子系统或专用集成芯片的一门新技术。
本设计利用VHDL硬件描述语言结合可编程逻辑器件进行的,并通过数码管动态显示计时结果。
数字钟可以由各种技术实现,如单片机等.利用可编程逻辑器件具有其他方式没有的特点,它具有易学、方便、新颖、有趣、直观设计与实验项目成功率高,理论与实践结合紧密,体积小,容量大,I/O口丰富,易编程和加密等特点。
并且它还具有开放的界面,丰富的设计库,模块化的工具以及LPM定制等优良性能,应用非常方便。
因此,本设计采用可编程逻辑器件实现。
本设计主要研究基于FPGA的数字钟,要求时间以24小时为一个周期,显示时、分、秒。
具有校时以及报时功能,可以对时、分及秒进行单独校对,使其校正到标准时间。
一、设计分析
1.1设计要求
1)具有时、分、秒计数显示功能,以24小时循环计时。
2)要求走时误差不大于每天10秒。
3)具有调节小时、分钟,秒及清零的功能。
4)定时闹钟,实现整点报时,又扬声器发出报时声音,发出滴答的声音。
可编程逻辑器件及外围电子元器件,设计一个数字电子钟,利用EDA软件(QUARTUSⅡ)进行编译及仿真,设计输入可采用VHDL硬件描述语言输入法)和原理图输入法,并下载到EDA实验开发系统,连接外围电路,完成实际测试。
1.2性能指标及功能设计性能指标
1)时钟计数:
完成时、分、秒的正确计时并且显示所计的数字;对秒、分60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。
2)时间设置:
手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:
reset为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。
产生“滴答.滴答”的报警声音。
,当闹钟计数至我们预先设定的时间时,闹钟的铃声响起,以提示人们时间到了。
二、设计方案
本设计采用自顶向下的设计方法和模块化设计方式,它由秒计数模块,分计数模块,小时计数模块,报警模块,秒分时设置模块和译码模块,程序包,entity模块(顶层模块)八部分组成。
优点:
设计简单方便,层次清晰,工程的建立方便,无需单独设计各个组件模块产生原理图文件后再进行电路连接设计。
用顶层设计采用原理图输入设计、底层设计采用VHDL设计的原理图与VHDL混合设计方法设计带整点报时功能的数字钟,所以此设计可分为顶层与底层设计,共分为六个模块。
即时模块、分模块、秒模块、动态扫描控制模块、段码译码模块和整点报时模块。
秒模块主体为60进制的计数器,ss为向动态扫描控制模块提供秒的个位和十位数据的信号。
reset为秒清零,mm为分钟进位,每60秒产生一个高电平的信号,作为分模块的时钟输入,clk为秒模块的时钟输入,接1Hz脉冲信号,mm为分钟设置,低电平是不影响秒模块工作,当它为高电平时,mm信号会随之产生一个和clk频率相同的信号,达到调整分钟的目的。
分模块主体为60进制的计数器,daout为向动态扫描控制模块提供分的个位和十位数据的信号。
分钟进位,每60分产生一个高电平的信号,作为时模块的时钟输入,秒计数到60时的进位输出信号hh和分钟调整输入信号mm,经或关系后接分的脉冲输入端clk,clk1为时调整脉冲,接1Hz脉冲,hh时钟设置,低电平是不影响分模块工作,当它为高电平时,mm信号会随之产生一个和clk频率相同的信号,达到调整时的目的。
时模块为一个24进制的计数器,动态扫描控制模块提供秒的个位和十位数据的信号。
分计数到60时的进位输出信号和时调整输入信号,经或关系后接时脉冲输入端clk。
为向动态扫描控制模块提供时的个位和十位数据的信号。
动态扫描模块中为动态扫描控制模块的脉冲输入,由外部脉冲发生电路提供,频率约为1kHz,sel0、sel1、sel2接外部38译码器74LS138的输入端A、B、C,ss[6..0]、mm[6..0]、hh[5..0]分别为秒模块、分模块、时模块计数段码输出控制信号。
该模块实现时间的动态扫描显示控制。
字系统采用自顶向下、由粗到细,逐步分解的设计方法,最顶层电路是指系统的整体要求,最下层是具体的逻辑电路实现。
自顶向下的设计方法将一个复杂的系统逐步分解成若干功能模块,从而进行设计描述,并且应用EDA软件平台自动完成各功能模块的逻辑综合与优化。
利用QuartusⅡ进行具体设计编程、处理、检查以及器件编程
三、设计环境
3.1硬件设计环境
本设计使用VHDL硬件开发板,可编程逻辑器件EP2C5Q208C8N系列。
设计过程中用到的外围电路的以及设计条件:
3.1.1可编程器件EP2C5Q208C8N及开发板系统
3.1.2.1CPLD–JTAG接口
3.1.3.2晶振和蜂鸣器
3.1.4.3LED数码管显示
3.1.5.4独立按键
3.1.6.5拨码开关
3.1.264位的计算机一台
3.2软件设计环境
3.2.1QuartusⅡ软件开发平台(8.0版本)
3.2.2Windows7操作系统
3.2.3硬件描述语言VHDL
3.2.3.1VHDL的简介
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语言将承担起大部分的数字系统设计任务。
3.2.3.2VHDL的特点
(1)用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
(2)VHDL元件的设计与工艺u无关,与工艺独立,方便工艺转换。
(3)VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。
(4)可以进行从系统级到逻辑级的描述,即混合描述。
(5)VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。
3.2.3.3VHDL的设计流程
1)设计规范的定义明确这个系统有哪些设计要求,和你要想到达的目标。
2)采用VHDL进行设计描述这部分包括设计规划和程序的编写。
设计规划主要包括设计方式的选择及是否进行模块划分。
设计方式一般包括直接设计,自顶向下和自底向下设计,这个和其他软件语言差不多。
最重要还是模块划分。
3)VHDL程序仿真
4)综合、优化和布局布线综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。
5)仿真,这个与VHDL程序仿真不同,这个不仅是对逻辑方面的验证,还要进行时序功能验证。
6)器件编程
四、整体设计流图
4.1各模块的原理性功能介绍
4.1.1可编程器件EP2C5Q208C8N
4.1.2CPLD-JTAG接口
4.1.3晶振和蜂鸣器
晶体振荡电路是构成数字式时钟的核心,它保证了时钟走时准确及稳定。
晶体振荡器它的作用是产生时间标准信号。
数字钟的精度主要取决于时间标准信号的频率及其稳定度。
因此,一般采用石英晶体振荡器经过分频得到这一信号。
晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。
不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路
4.1.4LED数码管显示
译码是把给定的代码进行翻译,本设计即是将时、分、秒计数器输出的四位二进制数代码翻译为相应的十进制数,并通过显示器显示。
译码为编码的逆过程。
它将编码时赋予代码的含义“翻译”过来。
实现译。
码的逻辑电路成为译码器。
译码器输出与输入代码有唯一的对应关系。
74LS47是输出低电平有效的七段字形译码器,它在这里与数码管配合使用,下表列出了74LS47的真值表,表示出了它与数码管之间的关系。
译码是把给定的代码进行翻译,本设计即是将时、分、秒计数器输出的四位二进制数代码翻译为相应的十进制数,并通过显示器显示,通常显示器与译码器是配套使用的。
我们选用的七段译码驱动器(74LS47)和LA5611数码管。
4.1.5独立按键
此次设计主要外部电路的触发,每按一下将记一次数。
S1校对秒的按键
S3校对分的按键
S6校对时的按键
多功能数字钟的闹钟功能部分通过按键s1,s3,s6,设定闹钟时间,当时钟进入闹钟设定的时间
4.1.6拨码开关
此次设计拨码开关的主要作用是清零,和选择模式即状态的切换
4.1.7QuartusⅡ软件开发平台(8.0版本)
本程序设计的是基于VHDL的数字时钟,,,,采用采用采用采用EDA开发工具,VHDL语言为硬件描述语言,QUARTUSII作为程序的运行平台,所开发的程序经过调试运行,波形仿真验证,初步实现了设计目标。
4.2设计的整体框架
4.2.1在各个模块都编译通过的基础上在顶层用原理图的方法实现。
具体步骤如下:
1)确定总体结构这是在进行系统具体编程设计之前就应该做的工作。
有了这一步,就对数字钟的模块有了了解。
在具体设计时只要根据这些模块各自的功能编写程序就大大的提高工作效率。
系统总体框图如图1所示。
2)系统功能分析整个系统以Altera的芯片为核心,外部设备比较简单,只需要几个拨码开关和6个数码管,开关分别作系统复位和校时用,6个数码管分别显示秒、分和小时。
核心部分由3大模块组成,即时间计数模块、控制模块和显示模块。
在系统设计时将控制模块和时间计数模块集成在一起。
时间计数模块是通过计数产生秒、分和小时信号,显示模块对时间计数模块产生的秒、分和小时的信号,通过时钟扫描逐个在数码管上显示。
校时功能主要是在计数器的设计上实现,通过设计正常计时和校时2个选通完成正常计时和校时的切换。
3)系统核心模块功能分析及实现①时间计数模块。
时间计数模块由一系列的计数器进行级联实现,包括六进制、十进制、二十四进制计数器。
秒和分钟的计数器的各位为十进制计数器。
小时位为二十四进制计数器则由一个VHDL程序实现。
②显示模块。
显示模块由一个没有进位的六进制计数器、一个六选一选择器和一个七段译码管组成。
六进制计数器为六选一选择器的选择判断提供输入信号,六选一选择器的选择输入端段分别接秒各位、分个位、分十位和小时位计数器的输出,用来完成动态扫描显示。
细化后的原理框图:
4.2.2设计原理及流程图
数字电子钟的逻辑框图如下,它由振荡器、分频器、计数器、译码器显示器和校时电路组成。
振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。
秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。
计数器的输出分别经译码器送显示器显示。
计时出现误差时,可以用校时电路校时、校分
4.2.3逻辑流程图
4.2.4状态转移图
五、系统的模块化设计
5.1软件程序模块化设计
5.1.1秒/分/时输入模块的软件设计
60进制计数器(分、秒计数器)工作原理:
“秒”计数器电路与“分”计数器电路都是60进制,它由一级10进制计数器和一级6进制计数器连接构成,如图三所示,采用两片中规模集成电路74LS90串接起来构成的“秒”、“分”计数器,实现时采用反馈清零法。
(秒分时模块程序一样不再重复)
architectureartofdisshkis
begin
process(clk,d)
variablecount:
integerrange0to100;--d为置位,计数段为100次
begin
ifd='0'then
ifclk'eventandclk='1'then--信号为1时有效
if(count=100)then当扫描为次数为100次时
q<='0';--
count:
=0;
else
count:
=count+1;--否则开始计数
endif;
endif;
elseq<='1';
endif;
5.1.2秒/分/时计数模块的软件设计
entitycountis
port(cl_r,clk,add:
instd_logic;
gsec,ssec:
outstd_logic_vector(3downto0);
c:
outstd_logic);
endentity;
architectureartofcountis
signalco,rclk:
std_logic;
begin
process(cl_r,clk,rclk,co,add)is
variablesecg,secs,ad:
std_logic_vector(3downto0);定义秒的端口个位,十位
begin
rclk<=addxnorclk;扫描时钟要低于系统时钟
ifcl_r='0'then
secg:
="0000";secs:
="0000";co<='0';
elsif(rclk='1'andrclk'event)then
Ifsecg="1001"andsecs="0101"thensecg:
="0000";secs:
="0000";co<='1';-elsifsecg="1001"thensecs:
=secs+1;secg:
="0000";co<='0';
elsifsecg<"1001"thensecg:
=secg+1;
endif;
----当计数个位为9,十位为5,计数值为59时,秒的个位十位都为零,进位为一,说明此时计数为一分钟。
秒的个位一直计数,计数值不到9时,一直加,直到出现个位出现9,十位加一。
5.1.3模式选择模块的软件设计
entityslcis
port(
add:
instd_logic_vector(2downto0);
sel:
instd_logic;
naout,clkout:
outstd_logic_vector(2downto0));
endentity;
architectureartofslcis
begin
process(sel,add)
begin
if(sel='1')then------sel为一时,闹钟模式开启,否则继续时钟的显示
naout<=add;
else
clkout<=add;
5.1.4数码管
位选和段选
architectureartofselis
signaldata:
std_logic_vector(3downto0);
begin
process(sel,f0,f1,f2,f3,f4,f5)
begin
caseselis-------数码管的位选,数码管为共阳极的,秒分时共用六个when"000"=>data<=f0;wei<="111110";---------数码管显示
when"001"=>data<=f1;wei<="111101";
when"010"=>data<=f2;wei<="111011";
when"011"=>data<=f3;wei<="110111";
when"100"=>data<=f4;wei<="101111";
when"101"=>data<=f5;wei<="011111";
whenothers=>data<=f0;wei<="111111";
endcase;
endprocess;
process(data,sel)
begin
ifsel="010"orsel="100"then若是第二个或是第四个数码管亮,则低位的两个点要显示,低电平有效。
casedatais
when"0000"=>du<="01000000";
when"0001"=>du<="01111001";
when"0010"=>du<="00100100";
when"0011"=>du<="00110000";
when"0100"=>du<="00011001";
when"0101"=>du<="00010010";
when"0110"=>du<="00000010";
when"0111"=>du<="01111000";
when"1000"=>du<="00000000";
when"1001"=>du<="00010000";
whenothers=>du<="01000000";
endcase;
else
casedatais
when"0000"=>du<="11000000";
when"0001"=>du<="11111001";
when"0010"=>du<="10100100";
when"0011"=>du<="10110000";
when"0100"=>du<="10011001";
when"0101"=>du<="10010010";
when"0110"=>du<="10000010";
when"0111"=>du<="11111000";
when"1000"=>du<="10000000";
when"1001"=>du<="10010000";
whenothers=>du<="11000000";----------段选
endcase;
endif;
endprocess;
5.1.5闹钟模块的软件设计
闹钟能否正常计数、能否对计时时间进行调整,定时闹铃功能是否正常,动态扫描显示是否正常。
原理框图:
(1)计数模块:
按照时钟模式完成一天24小时的计时功能。
(2)译码模块:
根据计时模块的状态输出值来确定对应位的数据的,其输出是7段高低电平,以点亮相应的数码管;
(3)计数控制模块:
根据外部控制信号,进行时钟计数的调整和计时的控制;
(4)响铃控制模块:
根据外部闹钟控制信号完成闹钟的定时,当计数模块技术到和该模块所设定时间一致时,该模块将驱动蜂鸣器响铃。
(5)分频器:
根据外部的输入时钟,将外部时钟成两路信号,一路用于正常的计数,一路用于七段显示数码管的动态扫描输出。
architectureartofbeepis
signalbep:
std_logic;
begin
process(bep,clk,hh1,hh2,mm1,mm2,h1,h2,m1,m2)
begin
if(h1=hh1andh2=hh2andmm1=m1andmm2=m2)OR(mm1="0000"andmm2="0000")then----当前时间的时分秒完全等于设置的闹钟时间,蜂鸣器才有效,否则蜂鸣器不响,继续显示当前的时间
ifclk='1'andclk'eventthen
bep<=notbep;
endif;
elsebep<='1';
endif;
5.1.5系统时钟的软件设计
process(clk)
variablecounts:
integerrange0to50000000;---系统时钟为50MHZ
begin
ifclk'eventandclk='1'then-----时钟高电平有效
if(counts<25000000)then-----计数周期为1ms,1ms扫描100次,
clks<='1';----0到0.5毫秒为高电平
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 数字 电子 时钟 设计