数字电子钟.docx

上传人:b****1 文档编号:2527555 上传时间:2023-05-03 格式:DOCX 页数:24 大小:467.40KB
下载 相关 举报
数字电子钟.docx_第1页
第1页 / 共24页
数字电子钟.docx_第2页
第2页 / 共24页
数字电子钟.docx_第3页
第3页 / 共24页
数字电子钟.docx_第4页
第4页 / 共24页
数字电子钟.docx_第5页
第5页 / 共24页
数字电子钟.docx_第6页
第6页 / 共24页
数字电子钟.docx_第7页
第7页 / 共24页
数字电子钟.docx_第8页
第8页 / 共24页
数字电子钟.docx_第9页
第9页 / 共24页
数字电子钟.docx_第10页
第10页 / 共24页
数字电子钟.docx_第11页
第11页 / 共24页
数字电子钟.docx_第12页
第12页 / 共24页
数字电子钟.docx_第13页
第13页 / 共24页
数字电子钟.docx_第14页
第14页 / 共24页
数字电子钟.docx_第15页
第15页 / 共24页
数字电子钟.docx_第16页
第16页 / 共24页
数字电子钟.docx_第17页
第17页 / 共24页
数字电子钟.docx_第18页
第18页 / 共24页
数字电子钟.docx_第19页
第19页 / 共24页
数字电子钟.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字电子钟.docx

《数字电子钟.docx》由会员分享,可在线阅读,更多相关《数字电子钟.docx(24页珍藏版)》请在冰点文库上搜索。

数字电子钟.docx

数字电子钟

目录

1引言1

2EDA技术介绍2

3VHDL介绍3

4QuartusII软件简介4

4.1软件介绍4

4.2界面介绍5

4.2.1代码输入界面5

4.2.2功能仿真界面5

4.2.3波形仿真界面6

5系统总体设计7

5.1设计思路7

5.2系统设计总体框图7

6各模块详细设计8

6.1计时模块8

6.1.160进制计数器的设计8

6.1.224进制计数器10

6.2调时模块设计11

6.3报时模块设计13

6.4动态显示模块设计14

6.5顶层模块设计17

7硬件测试18

8总结19

参考文献20

 

1引言

电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。

随着人们生活环境的不断改善和美化,在许多场合可以看到数字电子钟。

20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。

由于数字集成电技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、集成电路有体积小、功耗小、功能多、携带方便等优点,因此在许多电子设备中被广泛使用。

随着电子设计自动化(EDA)的发展,电子系统的设计技术和设计工具发生了深刻的变化。

利用硬件描述语言对数字系统的硬件电路进行描述是EDA的关键技术之一。

AHDL语言是目前主流的硬件描述语言之一,它具有很强的电路描述和建模能力,且有与具体硬件电路无关和与设计平台无关的特性,在语言易读性和层次化结构设计方面表现出强大的生命力和应用潜力。

本设计是采用VHDL来实现的简易钟。

它能显示时间和报时还能进行调表。

且具体要求如下:

(1)设计一个能进行时、分、秒计时数字钟。

(2)能对时、分和秒进行手动调节以校准时间。

(3)具有整点报时功能,通过选择此功能,能在整点时间发出报时声音。

(4)系统具有整体复位功能。

(5)进阶设计:

报时声响为四低一高,最后一响正好为整点。

 

2EDA技术介绍

EDA(电子线路设计自动化)是以计算机为工作平台、以硬件描述语(AHDL)为设计语言、以可编程器件(CPLD/FPGA)为实验载体、以ASIC/SOC 芯片为目标器件、进行必要的元件建模和系统仿真的电子产品自动化设计过程。

EDA源于计算机辅助设计,计算机辅助制造、计算机辅助测试和计算机辅助工程。

利用EDA 工具,电子设计师从概念、算法、协议开始设计电子系统,从电路设计,性能分析直到PCB版图生成的全过程均可在计算机上自动完成。

EDA 代表了当今电子设计技术的最新发展方向,其基本特征是设计人员以计算机为工具,按照自顶向下的设计方法,对整个系统进行方案设计和功能划分,由硬件描述语言完成系统行为级设计,利用先进的开发工具自动完成逻辑编译、化简、分割、综合、优化、布局布线、仿真及特定目标芯片的适配编译和编程下载,这被称为数字逻辑电路的高层次设计方法。

作为现代电子系统设计的主导技术,EDA具有几个明显特征。

(1)用软件设计的方法来设计硬件 

硬件系统的转换是由有关的开发软件自动完成的,设计输入可以是原理图或AHDL 语言,通过软件设计方式的测试,实现对特定功能硬件电路的设计,而硬件设计的修改工作也如同修改软件程序一样快捷方便, 设计的整个过程几乎不涉及任何硬件,可操作性、产品互换性强。

 

(2)基于芯片的设计方法 

EDA 设计方法又称为基于芯片的设计方法,集成化程度更高,可实现片上系统集成,进行更加复杂的电路芯片化设计和专用集成电路设计,使产品体积小、功耗低、可靠性高;可在系统编程或现场编程,使器件编程、重构、修改简单便利,可实现在线升级;可进行各种仿真,开发周期短,设计成本低,设计灵活性高。

(3)自动化程度高 

EDA 技术根据设计输入文件,将电子产品从电路功能仿真、性能分析、优化设计到结果测试的全过程在计算机上自动处理完成,自动生成目标系统,使设计人员不必学习许多深入的专业知识,也可免除许多推导运算即可获得优化的设计成果,设计自动化程度高,减轻了设计人员的工作量,开发效率高。

(4)自动进行产品直面设计 

EDA 技术根据设计输入文件(HDL 或电路原理图),自动地进行逻辑编译、化简、综合、仿真、优化、布局、布线、适配以及下载编程以生成目标系统,即将电子产品从电路功能仿真、性能分析、优化设计到结果测试的全过程在计算机上自动处理完成。

3VHDL介绍

VHDL语言是一种用于电路设计的高级语言。

它在80年代的后期出现。

最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。

VHDL翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。

它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。

当然在一些实力较为雄厚的单位,它也被用来设计ASIC。

主要用于描述数字系统的结构、行为、功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。

VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

与其他硬件描述语言相比,VHDL具有以下特点。

(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。

强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。

符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。

 

4QuartusII软件简介

4.1软件介绍

QuartusII是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL以及AHDL(AlteraHardware支持DescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快、界面统一、功能集中、易学易用等特点。

QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。

对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

QuartusII提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:

(1)可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;

(2)芯片(电路)平面布局连线编辑;

(3)LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;

(4)功能强大的逻辑综合工具;

(5)完备的电路功能仿真与时序逻辑仿真工具;

(6)定时时序分析与关键路径延时分析;

(7)可使用SignalTapII逻辑分析工具进行嵌入式的逻辑分析;

(8)支持软件源文件的添加和创建,并将它们链接起来生成编程文件;

(9)使用组合编译方式可一次完成整体设计流程;

(10)自动定位编译错误;

(11)高效的期间编程与验证工具;

(12)可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;

(13)能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。

4.2界面介绍

4.2.1代码输入界面

代码输入界面如图4-1所示。

图4-1代码输入界面

4.2.2功能仿真界面

功能仿真界面如图4-2所示。

图4-2功能仿真界面

 

4.2.3波形仿真界面

波形仿真界面如图4-3、4-4所示。

图4-3波形赋值界面

图4-4波形仿真界面

 

5系统总体设计

5.1设计思路

电子钟的时钟信号的分、秒都是60进制的计数信号,小时则为24进制的计数信号。

由此,可以设置4个模块,分别为秒模块、分模块和小时模块。

另外,由于电子时钟还要有复位和校准功能,因此还要调时模块。

而这些功能可以通过计数器的相关功能来实现,首先开关打开后,秒模块开始计时,每当计满一个周期后会向下一个分模块产生进位信号,同时向秒模块发出重置信号,分模块也开始计时。

当分模块计满一个周期后,同样向小时模块产生进位信号并向本模块发出重置信号,以此来实现24小时的计时功能。

在调时模块的设计方面,可以将其穿插至各个计时模块中。

例如,可以利用控制计时模块的时钟脉冲的有无来实现整个时钟的暂停功能;而复位功能的设计,可以用控制信号控制各个模块的重置功能即可实现。

因此,本设计包括以下几个模块:

动态显示模块、计时模块、报时模块、调时模块。

5.2系统设计总体框图

系统设计框图如图5-1所示。

图5-1系统设计框图

 

6各模块详细设计

6.1计时模块

6.1.160进制计数器的设计

(1)设计原理如下。

60进制计数器的设计思想是将输入进来的脉冲进行计数,每来一个上升沿记一次数,当计到60是清零并且进位端输出1,否则输出0。

输出用两个四位二进制数来输出。

(2)60进制的VHDL代码如下。

libraryieee;

useieee.std_logic_1164.all;

entitymiaois

port(clk,rst:

instd_logic;

m1,m2:

outstd_logic_vector(3downto0);

cin:

outstd_logic);

endmiao;

architecturebhvofmiaois

begin

process(clk,rst)

variabletemp1:

integerrange0to10;

variabletemp2:

integerrange0to6;

begin

ifrst='1'then

temp1:

=0;

temp2:

=0;

elsifclk'eventandclk='1'then

temp1:

=temp1+1;

iftemp1=10then

temp1:

=0;

temp2:

=temp2+1;

iftemp2=6then

temp2:

=0;

cin<='1';

elsecin<='0';

endif;

endif;

endif;

casetemp1is

when0=>m1<="0000";

when1=>m1<="0001";

when2=>m1<="0010";

when3=>m1<="0011";

when4=>m1<="0100";

when5=>m1<="0101";

when6=>m1<="0110";

when7=>m1<="0111";

when8=>m1<="1000";

when9=>m1<="1001";

whenothers=>null;

endcase;

casetemp2is

when0=>m2<="0000";

when1=>m2<="0001";

when2=>m2<="0010";

when3=>m2<="0011";

when4=>m2<="0100";

when5=>m2<="0101";

whenothers=>null;

endcase;

endprocess;

endbhv;

当来60个上升沿的时候就会清零。

(3)60进制计数器的原件例化如图6-1所示。

图6-160进制计数器原件例化

6.1.224进制计数器

(1)设计原理如下。

24进制计数器的设计思想是将输入进来的脉冲进行计数,每来一个上升沿记一次数,当计到24是清零。

(2)24进制的VHDL代码如下。

libraryieee;

useieee.std_logic_1164.all;

entityshiis

port(clk,rst:

instd_logic;

h1,h2:

outstd_logic_vector(3downto0));

endshi;

architecturebhvofshiis

begin

process(clk,rst)

variabletemp1:

integerrange0to10;

variabletemp2:

integerrange0to2;

begin

ifrst='1'then

temp1:

=0;

temp2:

=0;

elsifclk'eventandclk='1'then

temp1:

=temp1+1;

iftemp1=10then

temp1:

=0;

temp2:

=temp2+1;

elsiftemp2=2andtemp1=4then

temp2:

=0;

temp1:

=0;

endif;

endif;

casetemp1is

when0=>h1<="0000";

when1=>h1<="0001";

when2=>h1<="0010";

when3=>h1<="0011";

when4=>h1<="0100";

when5=>h1<="0101";

when6=>h1<="0110";

when7=>h1<="0111";

when8=>h1<="1000";

when9=>h1<="1001";

whenothers=>null;

endcase;

casetemp2is

when0=>h2<="0000";

when1=>h2<="0001";

when2=>h2<="0010";

whenothers=>null;

endcase;

endprocess;

endbhv;

时钟信号clk每出现一个上升沿,低位就加1,如果低位加到10低位清零高位加1,如果低位为4并且高位为2则低位高位全部清零。

(3)24进制计数器的原件例化如图6-2所示。

图6-224进制计数器的原件例化

6.2调时模块设计

(1)调时模块的设计原理如下。

调时模块只需要调节时分秒这三个量,因此调时程序就是一个三选一的程序。

(2)调时程序的VHDL代码。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitytiaoshiis

port(k1,k2:

instd_logic;

c1,c2,c3:

instd_logic;

out1,out2,out3:

outstd_logic);

endtiaoshi;

architecturebhvoftiaoshiis

begin

process(k1)

variablemoshi:

integerrange0to4;

begin

ifk1='1'then

moshi:

=moshi+1;

ifmoshi=4then

moshi:

=0;

endif;

endif;

casemoshiis

when0=>out1<=c1;out2<=c2;out3<=c3;

when1=>out1<=k2;out2<='1';out3<='1';

when2=>out1<='1';out2<=k2;out3<='1';

when3=>out1<='1';out2<='1';out3<=k2;

whenothers=>null;

endcase;

endprocess;

endbhv;

当k1不按的时候ou1=c1out2=c2out3=c3当k2按一下时out1=k2k2按2下时out2=k2k1按3下时out3=c3;

(3)调时程序的原件例化如图6-3所示。

图6-3调时程序的原件例化

6.3报时模块设计

(1)报时模块程序设计原理如下。

蜂鸣器的发声为输入波形不一样,其发声的高低也不一样。

通过这个控制当为整点的时候发高音,整点之前3秒发低音,其他时间不发声音。

(2)报时模块的VHDL代码。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitybaoshiis

port(clk:

instd_logic;--高频率的脉冲信号

m1,m2,f1,f2,h1,h2:

instd_logic_vector(3downto0);

alarm:

outstd_logic);

endbaoshi;

architecturebhvofbaoshiis

signala:

std_logic;

begin

process(clk)

variablecnt:

integerrange0to10000;

variablec:

std_logic;

begin

ifclk'eventandclk='1'then

ifcnt<10000then

cnt:

=cnt+1;

else

cnt:

=0;

c:

=notc;

endif;

endif;

a<=c;

endprocess;

process(f1,f2,m1,m2)

begin

iff1="0000"andf2="0000"andm1="0000"andm2="0000"then

alarm<='1';

elsiff1="1001"andf2="0101"andm1="0110"andm2="0101"then

alarm<=a;

elsiff1="1001"andf2="0101"andm1="0111"andm2="0101"then

alarm<=a;

elsiff1="1001"andf2="0101"andm1="1000"andm2="0101"then

alarm<=a;

elsiff1="1001"andf2="0101"andm1="1001"andm2="0101"then

alarm<=a;

else

alarm<='0';

endif;

endprocess;

endbhv;

(3)报时模块的原件例化如图6-4所示。

图6-4报时模块的原件例化

6.4动态显示模块设计

(1)动态显示的原理如下。

动态显示的原理为运用了人眼的视觉停留效果。

扫描的速度足够快人眼根本就分辨不出来了,其实数码管是一个一个显示的。

(2)动态显示的VHDL代码。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityxianshi1is

port(

c1,c2,c3:

instd_logic_vector(3downto0);

Clk:

instd_logic;

rst:

instd_logic;

led_out1:

outstd_logic_vector(7downto0);

led_bit1:

outstd_logic_vector(3downto0));

endxianshi1;

architecturebhvofxianshi1is

signaldongtai:

std_logic_vector(5downto0);

signaldata:

std_logic_vector(3downto0);

signalm_bit:

std_logic_vector(3downto0);

begin

process(clk,rst)

begin

if(rst='1')then

dongtai<="000000";

elsif(clk'eventandclk='1')then

dongtai<=dongtai+1;

endif;

endprocess;

process(dongtai(5downto4))

begin

casedongtai(5downto4)is

when"00"=>m_bit<="0001";

when"01"=>m_bit<="0010";

when"10"=>m_bit<="0100";

when"11"=>m_bit<="1000";

whenothers=>m_bit<="0001";

endcase;

endprocess;

process(m_bit,c1,c2,c3)

begin

casem_bitis

when"0001"=>data<=c1;

when"0010"=>data<=c2;

when"0100"=>data<="1010";

when"1000"=>data<=c3;

whenothers=>data<=null;

endcase;

endprocess;

process(data)

begin

casedatais

when"0000"=>

led_out1<="11111100"

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2