modulechronograph( inputclk,pause,reset,reversal,cnt, outputreg[3:0] bai1,bai2,miao1,miao2,fen1,fen2,buzzer=0);//buzzer蜂鸣不用4位寄存器,懒得另外写了 always@(posedge clk, posedge reset)//百分秒计时 if(!reversal) begin if(reset)beginbai1<=0;bai2<=0; end //复位信号 //else if(pause);//begin bai1<=bai1;a<=bai1;end elseif(!pause) beginif(bai2==9&&bai1==9) begin bai2<=0;bai1<=0;miao1<=miao1+1; end //百分秒计满后秒进位 elsebegin if(bai1==9) begin bai1<=0;bai2<=bai2+1;end //百分秒第一位进位 elsebegin bai1<=bai1+1;end end end end elseif(reversal) //倒计时 begin if(reset)beginbai1<=0;bai2<=0; end//复位 elseif(!pause&&cnt==0)//从当前时间倒计时 beginif(bai2==0&&bai1==0&&miao1>0) begin bai2<=9;bai1<=9;miao1<=miao1-1; end elseif(bai2==0&&bai1==0&&miao1==0&&miao2>0)begin miao1<=9;bai1<=9;bai2<=9;miao2<=miao2-1;end//代码有瑕疵,其实还有别的情况,但是懒得改了,功能基本完成 elsebegin//同正常计时的逆向 if(bai1==0&&bai2>0) begin bai1<=9;bai2<=bai2-1;end elseif(bai2==0&&bai1==0&&miao1==0); elsebegin bai1<=bai1-1;end end end elseif(!pause&&cnt) beginfen2<=0;fen1<=0;miao2<=6;miao1<=0;bai2<=0;bai1<=0;end end elseif(reset)begin bai1<=0;bai2<=0; end always@(bai1,bai2,pause,reset)//秒计时,基本和百分秒相同 if(!reversal) begin if(reset)beginmiao1<=0;miao2<=0;end //else if(pause);//begin miao1<=miao1;end elseif(!pause) beginif(miao2==5&&miao1>9) begin miao2<=0;miao1<=0;fen1<=fen1+1; end elsebegin if(miao1>9)begin miao1<=0;miao2<=miao2+1;end end if(miao1==9&&miao2==5&&bai1==9&&bai2==9) buzzer<=1;//在每次计时到59秒99时短暂蜂鸣 elsebuzzer<=0; end end elseif(reversal) begin if(reset)beginmiao1<=0;miao2<=0;end elseif(!pause&&cnt==0) beginif(miao2==0&&miao1==0&&(fen1>0||fen2>0)) begin miao2<=5;miao1<=9; bai2<=9;bai1<=9;fen1<=fen1-1; end elsebegin if(miao1==0&&miao2>0) begin miao1<=9;miao2<=miao2-1;end if(miao1==0&&miao2==0&&bai1==0&&bai2==0) buzzer<=1;//倒计时结束后持续蜂鸣,可能还要加上分也等于0? elsebuzzer<=0; end end elseif(!pause&&cnt) beginfen2<=0;fen1<=0;miao2<=6;miao1<=0;bai2<=0;bai1<=0;end//cnt信号表示进行60秒倒计时 end elseif(reset)begin miao1<=0;miao2<=0;end always@(miao1,miao2,pause,reset)//分计时 if(!reversal) begin if(reset) beginfen1<=0;fen2<=0;end //else if(pause);//begin fen1<=fen1;end elseif(!pause) beginif(fen2==5&&fen1>9)begin fen2<=0;fen1<=0;end elsebegin if(fen1>9)beginfen1<=0; fen2<=fen2+1;end end end end elseif(reversal) begin if(reset)beginfen1<=0;fen2<=0;end elseif(!pause&&cnt==0) beginif(fen1==0&&fen2>0)begin fen1<=9;miao2<=5;miao1<=9; bai2<=9;bai1<=9;fen2<=fen2-1;end end end elseif(!pause&&cnt) beginfen2<=0;fen1<=0;miao2<=6;miao1<=0;bai2<=0;bai1<=0;end elseif(reset) begin fen1<=0;fen2<=0;end endmodule