时间: 下载该word文档
【例3】多功能数字钟
moduleclock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_min;
inputclk,clk_1k,mode,change,turn;outputalert,LD_alert,LD_hour,LD_min;output[7:0]hour,min,sec;
reg[7:0]hour,min,sec,hour1,min1,sec1,ahour,amin;reg[1:0]m,fm,num1,num2,num3,num4;
reg[1:0]loop1,loop2,loop3,loop4,sound;regLD_hour,LD_min;
regclk_1Hz,clk_2Hz,minclk,hclk;regalert1,alert2,ear;
regcount1,count2,counta,countb;wirect1,ct2,cta,ctb,m_clk,h_clk;always@(posedgeclkbegin
clk_2Hz<=~clk_2Hz;
if(sound==3beginsound<=0;ear<=1;endelsebeginsound<=sound+1;ear<=0;endend
always@(posedgeclk_2Hzclk_1Hz<=~clk_1Hz;
always@(posedgemode
beginif(m==2m<=0;elsem<=m+1;endalways@(posedgeturnfm<=~fm;alwaysbegincase(m
2:beginif(fm
begincount1<=change;{LD_min,LD_hour}<=2;endelse
begincounta<=change;{LD_min,LD_hour}<=1;end{count2,countb}<=0;end
1:beginif(fm
begincount2<=change;{LD_min,LD_hour}<=2;endelse
begincountb<=change;{LD_min,LD_hour}<=1;end{count1,counta}<=2'b00;end
default:{count1,count2,counta,countb,LD_min,LD_hour}<=0;endcaseend
always@(negedgeclkif(count2begin
if(loop1==3num1<=1;
else
beginloop1<=loop1+1;num1<=0;endend
elsebeginloop1<=0;num1<=0;endalways@(negedgeclkif(countbbegin
if(loop2==3num2<=1;else
beginloop2<=loop2+1;num2<=0;endend
elsebeginloop2<=0;num2<=0;endalways@(negedgeclkif(count1begin
if(loop3==3num3<=1;else
beginloop3<=loop3+1;num3<=0;endend
elsebeginloop3<=0;num3<=0;endalways@(negedgeclkif(countabegin
if(loop4==3num4<=1;else
beginloop4<=loop4+1;num4<=0;endend
elsebeginloop4<=0;num4<=0;end
assignct1=(num3&clk|(!num3&m_clk;assignct2=(num1&clk|(!num1&count2;assigncta=(num4&clk|(!num4&h_clk;assignctb=(num2&clk|(!num2&countb;always@(posedgeclk_1Hzif(!(sec1^8'h59|turn&(!mbegin
sec1<=0;if(!(turn&(!mminclk<=1;end
elsebegin
if(sec1[3:0]==4'b1001
beginsec1[3:0]<=4'b0000;sec1[7:4]<=sec1[7:4]+1;elsesec1[3:0]<=sec1[3:0]+1;minclk<=0;end
assignm_clk=minclk||count1;always@(posedgect1begin
if(min1==8'h59beginmin1<=0;hclk<=1;endelsebegin
if(min1[3:0]==9
beginmin1[3:0]<=0;min1[7:4]<=min1[7:4]+1;endelsemin1[3:0]<=min1[3:0]+1;hclk<=0;
end
endend
assignh_clk=hclk||counta;always@(posedgecta
if(hour1==8'h23hour1<=0;elseif(hour1[3:0]==9
beginhour1[7:4]<=hour1[7:4]+1;hour1[3:0]<=0;endelsehour1[3:0]<=hour1[3:0]+1;always@(posedgect2if(amin==8'h59amin<=0;elseif(amin[3:0]==9
beginamin[3:0]<=0;amin[7:4]<=amin[7:4]+1;endelseamin[3:0]<=amin[3:0]+1;