Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- `timescale 1ns / 1ps
- //////////////////////////////////////////////////////////////////////////////////
- // Company:
- // Engineer: Larry Qu
- //
- // Create Date: 23:26:35 01/13/2020
- // Design Name:
- // Module Name: swcounter
- // Project Name:
- // Target Devices:
- // Tool versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //////////////////////////////////////////////////////////////////////////////////
- module swcounter(
- //inputs
- SEL, ADJ, RST_S, PSE_S, CLK1, CLK2,
- //outputs
- M_H, M_L, S_H, S_L
- //seconds
- );
- output reg[2:0] M_H = 3'b0; //tens digit of minutes
- output reg[3:0] M_L = 4'b0; //ones digit of minutes
- output reg[2:0] S_H = 3'b0; //tens digit of seconds
- output reg[3:0] S_L = 4'b0; //ones digit of seconds
- input SEL; //select button
- input ADJ; //adjust button
- input RST_S; //reset button
- input PSE_S; //pause button
- input CLK1; //1 Hz clock
- input CLK2; //2 Hz clock
- //output[11:0] seconds;
- //reg[11:0] seconds = 12'b0; //register to store 0 to 3599
- reg[0:0] pause = 1'b0; //register to store pause value
- //use one always block for everything, use conditionals to separate
- always @(posedge PSE_S or posedge RST_S or posedge CLK1 or posedge CLK2)
- begin
- //if pause button is hit
- if(PSE_S)
- begin
- pause <= ~pause;
- end
- //if reset button is hit
- else if(RST_S)
- begin
- S_L <= 4'b0;
- S_H <= 3'b0;
- M_L <= 4'b0;
- M_H <= 3'b0;
- end
- //if adjustment is high, run adjustment mode
- else if(ADJ && !pause && CLK2)
- begin
- //if(!pause && CLK2) //if not paused and adj is selected, enter adjustment mode, otherwise do nothing
- //begin
- if(SEL) //is SEL == 1, then increment seconds, otherwise increment minutes
- begin
- if (M_H == 3'b101 && M_L == 4'b1001 && S_H == 3'b101 && S_L == 4'b1000) //if we hit 59:59, pause
- begin
- S_L = 4'b1001;
- pause <= 1'b1;
- end
- else
- begin
- if(S_L == 4'b1001) //otherwise, increment
- begin
- S_L = 4'b0;
- if(S_H == 3'b101) //seconds high
- begin
- S_H = 3'b0;
- if(M_L == 4'b1001) //minutes low
- begin
- M_L = 4'b0;
- if(M_H == 3'b101) //minutes high
- begin
- pause = 1;
- end
- else
- begin
- M_H = M_H + 1;
- end
- end
- else
- begin
- M_L = M_L + 1;
- end
- end
- else
- begin
- S_H = S_H + 1;
- end
- end
- else
- begin
- S_L = S_L + 1;
- end
- end
- if (M_H == 3'b101 && M_L == 4'b1001 && S_H == 3'b101 && S_L == 4'b1000) //if we hit 59:59, pause
- begin
- S_L = 4'b1001;
- pause <= 1'b1;
- end
- else
- begin
- if(S_L == 4'b1001) //otherwise, increment
- begin
- S_L = 4'b0;
- if(S_H == 3'b101) //seconds high
- begin
- S_H = 3'b0;
- if(M_L == 4'b1001) //minutes low
- begin
- M_L = 4'b0;
- if(M_H == 3'b101) //minutes high
- begin
- pause = 1;
- end
- else
- begin
- M_H = M_H + 1;
- end
- end
- else
- begin
- M_L = M_L + 1;
- end
- end
- else
- begin
- S_H = S_H + 1;
- end
- end
- else
- begin
- S_L = S_L + 1;
- end
- end
- end
- else
- begin
- if (M_H == 3'b101 && (M_L == 4'b1001) ) //if we hit 58:xx or 59:xx, pause
- begin
- M_L = 4'b1001;
- pause <= 1'b1;
- end
- else
- begin
- if(M_L == 4'b1000) //minutes low
- begin
- M_L = 4'b0;
- if(M_H == 3'b101) //minutes high
- begin
- pause = 1;
- end
- else
- begin
- M_H = M_H + 1;
- end
- end
- else
- begin
- M_L = M_L + 1;
- end
- end
- if (M_H == 3'b101 && (M_L == 4'b1001) ) //if we hit 58:xx or 59:xx, pause
- begin
- M_L = 4'b1001;
- pause <= 1'b1;
- end
- else
- begin
- if(M_L == 4'b1000) //minutes low
- begin
- M_L = 4'b0;
- if(M_H == 3'b101) //minutes high
- begin
- pause = 1;
- end
- else
- begin
- M_H = M_H + 1;
- end
- end
- else
- begin
- M_L = M_L + 1;
- end
- end
- end
- //end
- end
- //otherwise run normally on regular clock pulse
- else if(!ADJ && CLK1 && !pause)
- begin
- //if(!pause && !ADJ) //if not paused and not in adjustment mode, run normally
- //begin
- if (M_H == 3'b101 && M_L == 4'b1001 && S_H == 3'b101 && S_L == 4'b1000) //if we hit 59:59, pause
- begin
- S_L = 4'b1001;
- pause <= 1'b1;
- end
- else
- begin
- if(S_L == 4'b1001) //otherwise, increment
- begin
- S_L = 4'b0;
- if(S_H == 3'b101) //seconds high
- begin
- S_H = 3'b0;
- if(M_L == 4'b1001) //minutes low
- begin
- M_L = 4'b0;
- if(M_H == 3'b101) //minutes high
- begin
- pause = 1;
- end
- else
- begin
- M_H = M_H + 1;
- end
- end
- else
- begin
- M_L = M_L + 1;
- end
- end
- else
- begin
- S_H = S_H + 1;
- end
- end
- else
- begin
- S_L = S_L + 1;
- end
- end
- //end
- end
- else
- begin
- end
- end
- /*
- //pause button
- always @(posedge PSE_S) //every time we press the pause button, change value of pause
- begin
- pause <= ~pause;
- end
- */
- /*
- //reset button
- always @(posedge RST_S)
- begin
- seconds <= 12'b0;
- end
- */
- /*
- //standard counting
- always @(posedge CLK1)
- begin
- if(!pause && !ADJ) //if not paused and not in adjustment mode, run normally
- begin
- if (seconds == 12'b111000001111) //if we hit 59:59, pause
- begin
- seconds <= seconds;
- pause <= 1'b1;
- end
- else
- begin
- seconds <= seconds + 1; //otherwise, increment
- end
- end
- end
- */
- /*
- //fast counting for adjustment, always clk2, use enable
- always @(posedge CLK2)
- begin
- if(!pause && ADJ) //if not paused and adj is selected, enter adjustment mode, otherwise do nothing
- begin
- if(SEL) //is SEL == 1, then increment seconds, otherwise increment minutes
- begin
- seconds <= seconds + 2;
- if (seconds >= 12'b111000001111) //if we hit 59:59, pause
- begin
- seconds <= 12'b111000001111;
- pause <= 1'b1;
- end
- end
- else
- begin
- seconds <= seconds + 60;
- if (seconds >= 12'b111000001111) //if we hit 59:59, pause
- begin
- seconds <= 12'b111000001111;
- pause <= 1'b1;
- end
- end
- end
- end
- */
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement