基于EDA的数字时钟课程设计报告Word下载.docx
《基于EDA的数字时钟课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《基于EDA的数字时钟课程设计报告Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
只需使清零开关按下时各计数器的清零端均可靠接入有效电平(本实验中是低电平),而清零开关断开时各清零端均接入无效电平即可。
校分校时功能由防抖动开关、逻辑门电路实现。
其基本原理是通过逻辑门电路控制分计数器的计数脉冲,当校分校时开关断开时,计数脉冲由低位计数器提供;
当按下校分校时开通时,既可以手动触发出发式开关给进位脉冲,也可以有恒定的1Hz脉冲提供恒定的进位信号,计数器在此脉冲驱动下可快速计数。
为实现可靠调时,采用防抖动开关(由D触发器实现)克服开关接通或断开过程中产生的一串脉冲式振动。
保持功能是通过逻辑门控制秒计数器输入端的1Hz脉冲实现的。
正常情况下,开关不影响脉冲输入即秒正常计数,当按下开关后,使脉冲无法进入计数端,从而实现计时保持功能。
整点报时功能可以通过组合逻辑电路实现。
当计数器的各位呈现特定的电平时,可以选通特定的与门和或门,将指定的频率信号送入蜂鸣器中,实现在规定的时刻以指定频率发音报时。
四、各个模块设计原理
总体的顶层原理图如下:
4.1分频电路模块设计
一、原理图:
二、源代码:
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
EntityfenpIS
Port(clk:
INSTD_LOGIC;
clk1k:
OUTSTD_LOGIC;
clk500:
clk1hz:
OUTSTD_LOGIC
);
End;
Architectureoneoffenpis
SignalF1k:
STD_LOGIC;
signalF500:
std_logic;
signalF1:
begin
p1:
process(clk)
variablecnt1:
std_logic_vector(1downto0);
variablecnt12:
std_logic_vector(2downto0);
variablecnt13:
std_logic_vector(11downto0);
ifclk='
1'
andclk'
eventthen
ifcnt1="
11"
thenF1k<
='
;
cnt1:
="
00"
--11-00=4fenping
elsecnt1:
=cnt1+1;
F1k<
0'
--111-000=8fenping
endif;
--111110011111-000000000000=4000fenping
ifcnt12="
111"
thenF500<
cnt12:
000"
elsecnt12:
=cnt12+1;
F500<
ifcnt13="
111110011111"
thenF1<
cnt13:
000000000000"
elsecnt13:
=cnt13+1;
F1<
endif;
endprocess;
p2:
process(F1k,F500,F1)
variablecnt2:
variablecnt22:
variablecnt23:
begin
ifF1k'
eventandF1k='
then
cnt2:
=notcnt2;
ifcnt2='
thenclk1k<
elseclk1k<
endif;
ifF500'
eventandF500='
cnt22:
=notcnt22;
ifcnt22='
thenclk500<
elseclk500<
ifF1'
eventandF1='
cnt23:
=notcnt23;
ifcnt23='
thenclk1hz<
elseclk1hz<
end;
三、时序仿真图:
四、功能说明
通过对输入时钟上升沿进行计数,以计数的溢出值F1k、F500、F1的上升沿对计数器输出进行取反操作。
从而可以对讲计数频率偶数次分频,且输出方波,占空比50%;
4.2秒计时器模块设计
一、电路原理:
二、源代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
Entitysecond1is
port(clk1s:
instd_logic;
reset:
instd_logic;
sec2,sec1:
bufferstd_logic_vector(3downto0);
--miaogaodiwei
sec0:
outstd_logic--miaojinwei
endsecond1;
ArchitectureAofsecond1is
begin
process(clk1s,reset)
begin
ifreset='
then--qingling
sec1<
0000"
sec2<
sec0<
elsifclk1s'
eventandclk1s='
then
if(sec1="
1001"
andsec2="
0101"
)then--jidao59s
sec2<
sec1<
sec0<
elsif(sec1="
)then--jidao9s
sec1<
sec2<
=sec2+1;
sec0<
elsesec1<
=sec1+1;
--zhengchangjishu1s
endif;
endprocess;
三、时序仿真:
四、功能说明:
对输入1Hz的频率进行计数,用reset进行复位清零;
只有reset为高时才开始计数;
输出2组4位的BCD码,用于数码管显示;
达到59s时输出进位信号色sec0;
4.3分计时器模块设计
一、原理图设计:
entityminute1is
port(clkm:
--miaojinwei
clk1s:
--jiaofengxinhao
setm:
--jiaofengkongzhi
min2,min1:
--fengzhonggaodiwei
minco:
outstd_logic--fengzhongjinwei
ArchitectureAofminute1is
signalclkx:
pclkm:
process(clkm,clk1s,setm)
begin
ifsetm='
thenclkx<
=clk1s;
elseclkx<
=clkm;
endprocess;
pcontm:
process(clkx)
begin
ifclkx'
eventandclkx='
if(min1="
andmin2="
)then
min1<
min2<
minco<
elsif(min1="
)then
=min2+1;
elsemin1<
=min1+1;
endif;
、
对输入的秒进位进行计数,记满59min时产生进位信号minco,正常分计数值由两组4位BCD码送出,用于数码管显示;
setm引入快速计分信号1Hz;
4.4小时计时器模块设计
entityhour1is
port(clkh:
seth:
hou2,hou1:
bufferstd_logic_vector(3downto0)
ArchitectureAofhour1is
signalclky:
std_logic;
pclkh:
process(clkh,clk1s,seth)
ifseth='
thenclky<
elseclky<
=clkh;
pconth:
process(clky)
ifclky'
eventandclky='
if(hou1="
0011"
andhou2="
0010"
hou1<
hou2<
elsif(hou1="
hou1<
hou2<
=hou2+1;
elsehou1<
=hou1+1;
对输入的分计数进位脉冲进行计数;
输出2组4位BCD码,用于数码管显示;
seth引入1Hz脉冲对小时进行快速计数;
4.5报时模块设计
entityalarm1
is
clk500:
clk1k:
instd_logic_vector(3downto0);
alarm:
outstd_logic
);
ArchitectureAofalarm1is
begin
process(clk1s)
variableflag500:
variableflag1k:
--variablehou:
std_logic_vector(7downto0);
ifclk1s'
if((hou2="
andhou1="
)andmin1="
)then--0xiaoshi59fen50miao
casesec1is--mingjiao2ci1di1gao49
--when"
=>
flag500:
when"
0100"
0110"
flag1k:
whenothers=>
flag1k:
endcase;
--elseflag500:
elsif((hou2="
0001"
)andmin1="
)then--12xiaoshi59fen50miao
casesec1is--mingjiao2ci1gao1di94
elsif((hou2="
)then--3xiaoshi59fen50miao
casesec1is--mingjiao3ci2di1gao149
)then--15xiaoshi59fen50miao
casesec1is--mingjiao3ci2gao1di149
)then--6xiaoshi59fen50miao
casesec1is--mingjiao4ci3di1gao1359
0111"
1000"
)then--18xiaoshi59fen50miao
casesec1is--mingjiao4ci3gao1di1359
)then--9xiaoshi59fen50miao
casesec1is--mingjiao5ci4di1gao13579
)then--21xiaoshi59fen50miao
casesec1is--mingjiao5ci4gao1di13579
elseflag500:
ifflag500='
thenalarm<
=clk500;
elsifflag1k='
=clk1k;
elsealarm<
三:
时序仿真:
以下是报时表和对应的整点对应关系
报时时刻
报时方式
0点
1高声+1低声
12点
1低声+1高声
3点
2高声+1低声
15点
2低声+1高声
5点
3高声+1低声
18点
3低声+1高声
9点
4高声+