EDA数字时钟设计说明Word格式.docx
《EDA数字时钟设计说明Word格式.docx》由会员分享,可在线阅读,更多相关《EDA数字时钟设计说明Word格式.docx(6页珍藏版)》请在冰豆网上搜索。
instd_logic;
reset:
sec2,sec1:
bufferstd_logic_vector(3downto0);
--秒的十位和个位
seco:
outstd_logic);
--秒计时器的进位输出
end;
architectureAofsecond1is
begin
process(clk1s,reset)
ifreset='
0'
then
sec2<
="
0000"
;
sec1<
--清零秒计时器
seco<
='
elsifclk1s'
eventandclk1s='
1'
if(sec1="
1001"
andsec2="
0101"
)then
sec1<
="
--在59秒时回零
--进位
elsif(sec1="
=sec2+1;
else
=sec1+1;
endif;
endprocess;
3.分计时器模块设计
entityminute1is
port(clkm,clk1s,setm:
--秒进位输入,1HZ校分时钟输入信号,校分控制信号
min2,min1:
--分计时器的十位和个位
minco:
outstd_logic);
architectureAofminute1is
signalclkx:
std_logic;
Pclkm:
process(clkm,clk1s,setm)
begin--根据是否校分选择计时时钟
ifsetm='
thenclkx<
=clk1s;
--利用clk1s信号对分的初值进行快速设置
elseclkx<
=clkm;
--利用秒的进位信号正常计时
Pcontm:
process(clkx)
ifclkx'
eventandclkx='
if(min1="
andmin2="
min1<
min2<
minco<
='
--59分时回零并进位
elsif(min1="
=min2+1;
minco<
=min1+1;
4.时计时器模块设计
entityhour1is
port(clkh,clk1s,seth:
hou2,hou1:
bufferstd_logic_vector(3downto0));
--时的十位和个位
architectureAofhour1is
signalclky:
Pclkh:
process(clkh,clk1s,seth)
Begin--根据是否校时选择计时时钟
ifseth='
thenclky<
=clk1s;
--利用clk1s信号对时的初值进行快速设置
elseclky<
=clkh;
--利用分的进位信号正常计时
endprocess;
Pconth:
process(clky)
ifclky'
eventandclky='
if(hou1="
0011"
andhou2="
0010"
)then
hou1<
hou2<
--23时回零
elsif(hou1="
hou2<
=hou2+1;
else
=hou1+1;
5.报时模块设计
entityalarm1is
port(clk1s,clk500,clk1k:
instd_logic;
sec2,sec1,min2,min1:
instd_logic_vector(3downto0);
alarm:
architectureAofalarm1is
process(clk1s)
variableflag500:
variableflag1k:
ifclk1s'
eventandclk1s='
if(min1="
andmin2="
andsec2="
)then--59分50秒时开始报时
casesec1is
when"
=>
flag500:
0100"
0110"
0111"
1000"
--50,52,54,56,58,59秒时低频率报时
whenothers=>
flag1k:
endcase;
elseflag500:
if(min1="
andsec1="
flag1k:
--整点时高频率报时
ifflag500='
thenalarm<
=clk500;
elsifflag1k='
=clk1k;
elsealarm<
endif;
三.仿真结果
1.秒计时器仿真结果
2.分计时器仿真结果
3.时计时器仿真结果
4.报时模块仿真结果
5.timer仿真结果
四.疑惑
1.仿真结果中,由于输出信号向量(比如sec1(0),sec1
(1),sec1
(2),sec1(3))变化的不同时,使得组合后的sec1,sec2,min1,min2均出现毛刺,尝试了引入中间变量,中间信号的方法,都不能解决问题。
怎么办才好?