EDA课程设计多功能数字钟.docx

上传人:b****7 文档编号:9850763 上传时间:2023-02-07 格式:DOCX 页数:18 大小:18.56KB
下载 相关 举报
EDA课程设计多功能数字钟.docx_第1页
第1页 / 共18页
EDA课程设计多功能数字钟.docx_第2页
第2页 / 共18页
EDA课程设计多功能数字钟.docx_第3页
第3页 / 共18页
EDA课程设计多功能数字钟.docx_第4页
第4页 / 共18页
EDA课程设计多功能数字钟.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

EDA课程设计多功能数字钟.docx

《EDA课程设计多功能数字钟.docx》由会员分享,可在线阅读,更多相关《EDA课程设计多功能数字钟.docx(18页珍藏版)》请在冰豆网上搜索。

EDA课程设计多功能数字钟.docx

EDA课程设计多功能数字钟

哈尔滨工业大学(威海)

电子学课程设计报告

带有整点报时的数字钟设计与制作

 

姓名:

蒋栋栋

班级:

0802503

学号:

080250331

指导教师:

井岩

 

 

 

一、课程设计的性质、目的和任务………………………………3

二、课程设计基本要求……………………………………………3

三、设计课题要求…………………………………………………3

四、课程设计所需要仪器…………………………………………4

五、设计步骤………………………………………………………4

1、整体设计框图…………………………………………………4

2、各个模块的设计与仿真………………………………………4

2.1分频模块……………………………………………………………4

2.2计数器模块…………………………………………………………6

2.3控制模块…………………………………………………………10

2.4数码管分配………………………………………………………13

2.5显示模块…………………………………………………………14

2.6报时模块…………………………………………………………16

六、调试中遇到的问题及解决的方法……………………………18

七、心得体会………………………………………………………18

一、课程设计的性质、目的和任务

创新精神和实践能力二者之中,实践能力是基础和根本。

这是由于创新基于实践、源于实践,实践出真知,实践检验真理。

实践活动是创新的源泉,也是人才成长的必由之路。

通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。

二、课程设计基本要求

掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。

三、设计课题要求

(1)构造一个24小时制的数字钟。

要求能显示时、分、秒。

(2)要求时、分、秒能各自独立的进行调整。

(3)能利用喇叭作整点报时。

从59分50秒时开始报时,每隔一秒报时一秒,到达00分00秒时,整点报时。

整点报时声的频率应与其它的报时声频有明显区别。

#设计提示(仅供参考):

(1)对频率输入的考虑

数字钟内所需的时钟频率有:

基准时钟应为周期一秒的标准信号。

报时频率可选用1KHz和2KHz左右(两种频率相差八度音,即频率相差一倍)。

另外,为防止按键反跳、抖动,微动开关输入应采用寄存器输入形式,其时钟应为几十赫兹。

(2)计时部分计数器设计的考虑

分、秒计数器均为模60计数器。

小时计数为模24计数器,同理可建一个24进制计数器的模块。

(3)校时设计的考虑

数字钟校准有3个控制键:

时校准、分校准和秒校准。

微动开关不工作,计数器正常工作。

按下微动开关后,计数器以8Hz频率连续计数(若只按一下,则计数器增加一位),可调用元件库中的逻辑门建一个控制按键的模块,即建立开关去抖动电路(见书70页)。

(4)报时设计的考虑

可以将高频时钟分频得到约2KHz和1KHz的音频,作为数字钟的报时频率。

当电子钟显示XX:

59:

50时,数字钟开始报时“DO",持续一秒,而且每隔一秒报一下,直至显示XX:

00:

00时报“DI",持续一秒后停止。

最后输出至喇叭。

应调用元件库中的逻辑门建一个控制报时的模块。

(5)建一个七段译码的模块

因在系统可编程器件实验箱上的数码管没有经过译码,故要用AHDL语言写一个七段译码的模块,且应考虑数码管为共阳极。

数码管上的点(D2、D4、D6)应置Vcc。

四、课程设计所需要仪器

1、计算机一台

2、quartusⅡ软件

3、FPGA开发板

五、设计步骤

1、模块介绍

(1)分频模块:

产生1Hz、1KHz、2KHz频率

(2)计数器模块:

生成60进制、24进制计数器

(3)控制模块:

按键控制、按键消抖

(4)显示模块:

7段数码管显示器,分别显示小时、分钟、秒

(5)报时模块:

进行整点报时

2、各个模块的设计与仿真

2.1分频模块

CLK晶振频率50MHZ,分成2KHZ,1KHZ,1HZ的信号。

基准1HZ信号作为时钟计时的秒计数时钟信号;分频的1KHZ,2KHZ信号用于报时电路的不同声讯。

程序代码:

libraryieee;

useieee.std_logic_1164.all;

entityfreis

port(

clk,sel:

instd_logic;

clk1hz,clk1khz,clk2khz:

outstd_logic);

endfre;

architecturebehoffreis

signaldata1khz,data2khz,data1hz:

std_logic:

='0';

begin

clk1hz<=data1hz;

clk1khz<=data1khz;

clk2khz<=data2khz;

clk1khz_pro:

process(clk)            --产生1khz信号

variablecnt:

integerrange0to24999;

begin

ifclk'eventandclk='1'then

ifcnt=24999then

cnt:

=0;data1khz<=notdata1khz;

else

cnt:

=cnt+1;

endif;

endif;

endprocessclk1khz_pro;

clk2khz_pro:

process(clk)             --产生2khz信号

variablecnt:

integerrange0to12499;

begin

ifclk'eventandclk='1'then

ifcnt=12499then

cnt:

=0;data2khz<=notdata2khz;

else

cnt:

=cnt+1;

endif;

endif;

endprocessclk2khz_pro;

clk1hz_pro:

process(data1khz)           --产生1hz信号

variablecnt:

integerrange0to499;

begin

ifdata1khz'eventanddata1khz='1'then

ifsel='0'thencnt:

=0;

elseifcnt=499then

cnt:

=0;data1hz<=notdata1hz;

else

cnt:

=cnt+1;

endif;

endif;

endif;  

endprocessclk1hz_pro;

endbeh;

输入模块电路图:

2.2计数器模块

由秒计数器,分计数器,时计数器组成了最基本的数字钟计时电路,两个六十进制计数器与二十四进制计数器组合构成。

程序代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useIEEE.STD_LOGIC_ARITH.ALL;

entityshuzizhongis

port(

clk_change:

instd_logic;

s_en,m_en,h_en:

instd_logic;

sel:

instd_logic;

secout,minout,hourout:

outstd_logic;

sl,sh,ml,mh,hl,hh:

outstd_logic_vector(3downto0);

a:

outstd_logic_vector(15downto0)

);

endshuzizhong;

architecturebehavofshuzizhongis

signallow_rega,high_rega,low_regb,high_regb,low_regc,high_regc:

std_logic_vector(3downto0):

="0000";

signalsout,mout,hout:

std_logic:

='0';

begin

--秒的60进制进制                            

counter_sec_l:

process(clk_change,s_en)

begin

sl<=low_rega;sh<=high_rega;ml<=low_regb;mh<=high_regb;hl<=low_regc;hh<=high_regc;

ifclk_change'eventandclk_change='1'then

ifs_en='1'then

iflow_rega="1001"then

low_rega<="0000";

else 

low_rega<=low_rega+'1';

endif;

endif;

endif;

endprocesscounter_sec_l;

counter_sec_h:

process(clk_change,s_en,low_rega)

begin

ifclk_change'eventandclk_change='1'then

ifs_en='1'then

iflow_rega="1001"then

ifhigh_rega="0101"then

high_rega<="0000";

else

high_rega<=high_rega+'1';

endif;

endif;

endif;

endif;

endprocesscounter_sec_h;

sout<='1'whenlow_rega="1001"andhigh_rega="0101"else'0';

 

----分钟的60进制设置

counter_min_l:

process(clk_change,m_en)

begin

ifclk_change'eventandclk_change='1'then

ifm_en='1'then

ifsout='1'orsel='0'then

iflow_regb="1001"then

low_regb<="0000";

else 

low_regb<=low_regb+'1';

endif;

endif;

endif;

endif;

endprocesscounter_min_l;

counter_min_h:

process(clk_change,m_en,low_regb)

begin

ifclk_change'eventandclk_change='1'then

ifsout='1'orsel='0'then

ifm_en='1'then

iflow_regb="1001"then

 

ifhigh_regb="0101"then

 

high_regb<="0000";

else

high_regb<=high_regb+'1';

endif;

endif;

endif;

endif;

endif;

endprocesscounter_min_h;

mout<='1'whenlow_regb="1001"andhigh_regb="0101"andsout='1'else'0';

--小时的24进制设置

counter_hour_l:

process(clk_change,h_en)

begin

ifclk_change'eventandclk_change='1'then

ifh_en='1'then

ifmout='1'orsel='0'then

iflow_regc="1001"orhout='1'then

low_regc<="0000";

else 

low_regc<=low_regc+'1';

endif;

endif;

endif;

endif;

endprocesscounter_hour_l;

counter_hour_h:

process(clk_change,h_en,hout)

begin

ifclk_change'eventandclk_change='1'then

ifmout='1'orsel='0'then

ifh_en='1'then

ifhout='1'then

high_regc<="0000";

elseiflow_regc="1001"then

high_regc<=high_regc+'1';

endif;

endif;

endif;

endif;

endif;

endprocesscounter_hour_h;

hout<='1'whenlow_regc="0011"andhigh_regc="0010"else'0';

secout<=sout;minout<=mout;hourout<=hout;

a<=high_regb&low_regb&high_rega&low_rega;

endbehav;

输入模块电路图:

2.3控制模块

分五个状态0状态正常计时,按下按键进入下一状态开始调时模式1,按下按键进入调秒模式2,按下按键进入调分模式3,按下按键进入调小时模式4.按下按键恢复正常计时模式。

程序代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitykey_pressis

port( set,mode:

instd_logic;

clk1khz,clk1hz:

instd_logic;

secout,minout:

instd_logic;

clk_change,clk2hz_en:

outstd_logic;

sel,s_ce,m_ce,h_ce:

outstd_logic;

s_en,m_en,h_en:

outstd_logic);

end key_press;

architecturebehofkey_press is

signalkey1,key2:

std_logic;

signal sce_reg,mce_reg,hce_reg:

std_logic;

signal ssl,ssen,mmen,hhen:

std_logic;

signalcon:

integerrange0to4:

=0;

--按键按下(延时)

begin

key_press2:

process(set,clk1khz)

variablecnt:

integerrange0to999;

begin

ifset='0'then

ifclk1khz'eventandclk1khz='1'then

ifcnt=50andset='0'then

cnt:

=cnt+1;key2<='1';

elsecnt:

=cnt+1;key2<='0';

endif;

endif;

else

cnt:

=0;key2<='0';

endif;

endprocesskey_press2;

key_press1:

process(mode,clk1khz)

variablecnt:

integerrange0to999;

begin

ifmode='0'then

ifclk1khz'eventandclk1khz='1'then

ifcnt=50andmode='0'then

cnt:

=cnt+1;key1<='1';

elsecnt:

=cnt+1;key1<='0';

endif;

endif;

else

cnt:

=0;key1<='0';

endif;

endprocesskey_press1;

count:

process(key1,key2) 

begin

ifkey1'eventandkey1='1'then

ifcon=4then

con<=0;

else

con<=con+1;

endif;

endif;

endprocesscount;

con_pro:

process(con)

begin

caseconis

when0=>ssl<='1';

sce_reg<='0';ssen<='1';

mce_reg<='0';mmen<='1';

hce_reg<='0';hhen<='1';

clk2hz_en<='0';

when1=>ssl<='0';

sce_reg<='0';ssen<='1';

mce_reg<='0';mmen<='1';

hce_reg<='0';hhen<='1';

clk2hz_en<='1';

when2=>ssl<='0';

sce_reg<='1';ssen<='1';

mce_reg<='0';mmen<='0';

hce_reg<='0';hhen<='0';

clk2hz_en<='1';

when3=>ssl<='0';

sce_reg<='0';ssen<='0';

mce_reg<='1';mmen<='1';

hce_reg<='0';hhen<='0';

clk2hz_en<='1';

when4=>ssl<='0';

sce_reg<='0';ssen<='0';

mce_reg<='0';mmen<='0';

hce_reg<='1';hhen<='1';

clk2hz_en<='1';

whenothers=>ssl<='0';

sce_reg<='0';ssen<='1';

mce_reg<='0';mmen<='1';

hce_reg<='0';hhen<='1';

clk2hz_en<='0';

endcase;

endprocesscon_pro;

sel_pro:

process(ssl)

begin

casesslis

when'0'=>s_ce<=sce_reg;

m_ce<=mce_reg;

h_ce<=hce_reg;

clk_change<=key2;

when'1'=>s_ce<=ssen;

m_ce<=mmen;

h_ce<=hhen;

clk_change<=clk1hz;

whenothers=>s_ce<=ssen;

m_ce<=secout;

h_ce<=minout;

clk_change<=clk1hz;

endcase;

endprocesssel_pro;

sel<=ssl;s_en<=ssen;m_en<=mmen;h_en<=hhen;

endbeh;

输入模块电路图:

2.4数码管分配

程序代码:

libraryieee;

useieee.std_logic_1164.all;

entitydisplayis

port(

datain :

instd_logic_vector(3downto0);

dataout:

outstd_logic_vector(7downto0));

enddisplay;

architectureduanofdisplayis

begin

process(datain)

begin

casedatainis

when"0000"=>dataout<="11000000";--dp,g,f,e,d,c,b,a

when"0001"=>dataout<="11111001";

when"0010"=>dataout<="10100100";

when"0011"=>dataout<="10110000";

when"0100"=>dataout<="10011001";

when"0101"=>dataout<="10010010";

when"0110"=>dataout<="10000010";

when"0111"=>dataout<="11111000";

when"1000"=>dataout<="10000000";

when"1001"=>dataout<="10010000";

when"1010"=>dataout<="10111111";

when"1011"=>dataout<="10000011";

when"1100"=>dataout<="10100111";

when"1101"=>dataout<="10100001";

when"1110"=>dataout<="10000110";

when"1111"=>dataout<="10001110";

whenothers=>null;

endcase;

endprocess;

end;

输入模块电路图:

2.5显示模块

使用七段数码管显示小时、分钟与秒

程序代码:

libraryieee;

useieee.std_logic_1164.all;

entityscanis

port(

clk1khz     :

instd_logic;

sl,sh,ml,mh,hl,hh:

instd_logic_vector(3downto0);

clk2hz_en    :

instd_logic;

s_ce,m_ce,h_ce  :

instd_logic;

en_out      :

outstd_logic_vector(7downto0);

dataout     :

outstd_logic_vector(3downto0));

endscan;

architecturebehofscanis

signalcnt            :

integerrange0to7;

signalen            :

std_lo

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

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1