EDA课程设计多功能数字钟.docx
- 文档编号:11819357
- 上传时间:2023-04-03
- 格式:DOCX
- 页数:20
- 大小:59.91KB
EDA课程设计多功能数字钟.docx
《EDA课程设计多功能数字钟.docx》由会员分享,可在线阅读,更多相关《EDA课程设计多功能数字钟.docx(20页珍藏版)》请在冰豆网上搜索。
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);
endkey_press;
architecturebehofkey_pressis
signalkey1,key2:
std_logic;
signalsce_reg,mce_reg,hce_reg:
std_logic;
signalssl,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;
architecturebeho
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 多功能 数字