📄 minusself23to0.v
字号:
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date: 15:17:31 04/12/2008 // Design Name: // Module Name: minusself23to0 // Project Name: // Target Devices: // Tool versions: // Description: //// Dependencies: //// Revision: // Revision 0.01 - File Created// Additional Comments: ////////////////////////////////////////////////////////////////////////////////////module minusself23to0 (clk , set , adj , cf , timmer , mode ,sback, mback, hback); input clk; input set; input adj; input cf; input timmer; input mode ; output [7:0] sback; output [7:0] mback; output [7:0] hback;reg[7:0] hcb=8'h23 , scb=8'h59 , mcb=8'h59 ; //cb is clock backreg[7:0] hback=8'h23 , sback=8'h59 , mback=8'h59 ; reg[3:0] setcb = 4'h0;reg timmergo = 1 ;reg[1:0] modestate = 2'b10 ;//reg[7:0] dclk1 = 8'b0000000 , dclk2 = 8'b0000000 , dclk3 = 8'b0000000 ,dclk4 = 8'b0000000 ,dclk5 = 8'b0000000;reg[7:0] count1 = 0;reg reset = 0 ;reg[1:0] transfer = 00;reg clh =0 ,cls =0 ;//-------------------------control singal timmer , describe-------------------------------always @(posedge clk)beginif(timmer == 1) begin timmergo = timmergo + 1; //timmergo = 0 is stop end else if(mode == 1 & setcb == 0) modestate = modestate + 1;end //----------------------------------no singal 60 seconds or get mode singal ----------------------------------------------always @(posedge clk)beginreset = 0;begin if(adj==0 & cf ==0 & set ==0 ) begin if (count1 == 59) begin reset = 1; end else count1 = count1 + 1 ; end else if ( adj==1 ) count1=0; else if ( cf==1 ) count1=0; else if ( set==1 ) count1=0; end end/*//-----------------------set initial hour ,minute , second------------------------always @(posedge clk ) //begin to start ,and going ,if going to 00:00:00,alarm and out of this state //in this state , if we give set ,begin to set1,2,3 hour , minute , second ,out ; if @timmer ,go back beginif(reset==1) setcb = 0;else begin if ( set==1 ) begin setcb = setcb + 1 ; if(setcb==1) begin hcb = hback; mcb = mback; scb = sback; end end else if(modestate==2'b10 & setcb>0) transfer = 2'b00 ; begin case(setcb) 4'h1: //hour set begin if(timmer == 1) setcb = 0; else begin if(adj==1 & cf ==0) begin if(hcb[7:4]==4'h2) begin if(hcb[3:0]>= 4'h3) begin hcb = 0; end else hcb[3:0]=hcb[3:0]+1; end else begin if(hcb[3:0] == 4'h9) begin hcb[3:0] =0; hcb[7:4] = hcb[7:4]+1; end else hcb[3:0]=hcb[3:0]+1; end transfer = 2'b01; end else if(adj == 0 & cf == 1) begin if(hcb[7:4]==4'h0) begin if(hcb[3:0]== 4'h0) begin hcb[7:4] = 2; hcb[3:0] = 3; end else hcb[3:0]=hcb[3:0] - 1; end else begin if(hcb[3:0] == 0) begin hcb[3:0] =9; hcb[7:4] = hcb[7:4] - 1; end else hcb[3:0]=hcb[3:0] - 1; end transfer = 2'b01; end end end 4'h2: //minute set begin if(timmer == 1) setcb = 0; else begin if(adj == 1 & cf == 0) begin if(mcb[7:4]==4'h5) begin if(mcb[3:0]== 4'h9) begin mcb = 0; end else mcb[3:0]=mcb[3:0]+1; end else begin if(mcb[3:0] == 4'h9) begin mcb[3:0] =0; mcb[7:4] = mcb[7:4]+1; end else mcb[3:0]=mcb[3:0]+1; end transfer = 2'b10; end else if(adj == 0 & cf == 1) begin if(mcb[7:4]==4'h0) begin if(mcb[3:0]== 4'h0) begin mcb[7:4] = 5; mcb[3:0] = 9; end else mcb[3:0]=mcb[3:0] - 1; end else begin if(mcb[3:0] == 0) begin mcb[3:0] =9; mcb[7:4] = mcb[7:4] - 1; end else mcb[3:0]=mcb[3:0] - 1; end transfer = 2'b10; end end end 4'h3: //second set begin if(timmer == 1) setcb = 0; else begin if(adj == 1 & cf == 0) begin if(scb[7:4]==4'h5) begin if(scb[3:0]== 4'h9) begin scb = 0; end else scb[3:0]=scb[3:0]+1; end else begin if(scb[3:0] == 4'h9) begin scb[3:0] =0; scb[7:4] = scb[7:4]+1; end else scb[3:0]=scb[3:0]+1; end transfer = 2'b11 ; end else if(adj ==0 & cf==1) begin if(scb[7:4]==4'h0) begin if(scb[3:0]== 4'h0) begin scb[7:4] = 4'h5; scb[3:0] = 4'h9; end else scb[3:0]=scb[3:0] - 1; end else begin if(scb[3:0] == 0) begin scb[3:0] =9; scb[7:4] = scb[7:4] - 1; end else scb[3:0]=scb[3:0] - 1; end transfer = 2'b11 ; end end end default: //out of set , back time going begin transfer = 2'b00 ; setcb = 000; end endcase end endend*///---------------------set=000,timmer=1-----time stop -----------------------------------//--------------------- if this time ,we give ADJ=1 , give hour , minute ,second =0-----------------//---------------------------set=000 and timmer=1,time begin-------------going back clockalways @(posedge clk)beginif(transfer == 2'b11) sback = scb ;elsebegin cls = 0; begin if(setcb ==000 & modestate == 2'b10 ) if(timmergo == 0) begin if (adj == 1) sback = 0; end else if(setcb ==0 & modestate == 2'b10 ) if(timmergo == 1) begin if(transfer == 2'b11) sback = scb; else begin // second go if(sback[7:4]==0) begin if(sback[3:0]== 0) begin begin if(mback>0 | hback>0) begin sback[7:4] = 5 ; sback[3:0] = 9 ; cls = 1 ; end end end else sback[3:0]=sback[3:0] - 1; end else begin if(sback[3:0] == 0) begin sback[3:0] =9; sback[7:4] = sback[7:4] - 1; end else sback[3:0]=sback[3:0] - 1; end end end end endendalways @(posedge clk ) //minute gobeginif(transfer == 2'b10) mback = mcb ; elsebegin clh=0;begin if(setcb ==000 & modestate == 2'b10 ) if(timmergo == 0) begin if (adj == 1) mback = 0; end else if(setcb ==0 & modestate == 2'b10 ) if(cls ==1) if(timmergo == 1) begin if(transfer == 2'b10) mback = mcb; if(mback[7:4]==4'h0) begin if(mback[3:0]== 4'h0) begin if(hback>0) begin mback[7:4] = 5; mback[3:0] = 9; clh = 1; end end else mback[3:0]=mback[3:0] - 1; end else begin if(mback[3:0] == 0) begin mback[3:0] =9; mback[7:4] = mback[7:4] - 1; end else mback[3:0]=mback[3:0] - 1; end end end end end always @(posedge clk )beginif(transfer == 2'b01) hback = hcb ;elsebegin if(setcb ==000 & modestate == 2'b10 ) //hour go if(timmergo == 0) begin if (adj == 1) hback = 0; end else if(setcb ==0 & modestate == 2'b10 ) if(timmergo == 1) if(clh == 1) begin if(transfer == 2'b01) hback = hcb; else if(hback[7:4]==4'b0000) begin if(hback[3:0]== 4'b0000) begin hback =0 ; end else hback[3:0]=hback[3:0] - 1; end else begin if(hback[3:0] == 0) begin hback[3:0] =9; hback[7:4] = hback[7:4] - 1; end else hback[3:0]=hback[3:0] - 1; end end end end endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -