Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module stopwatch(
- input clock,
- input reset,
- input start,
- output [6:0]hex0,
- output [6:0]hex1,
- output [6:0]hex2,
- output [6:0]hex3
- );
- reg [3:0] reg_d0, reg_d1, reg_d2, reg_d3; //registers that will hold the individual counts
- reg [22:0] ticker; //23 bits needed to count up to 5M bits
- wire click;
- //the mod 5M clock to generate a tick ever 0.1 second
- always @ (posedge clock or posedge reset)
- begin
- if(reset)
- ticker <= 0;
- else if(ticker == 50000000) //if it reaches the desired max value reset it
- ticker <= 0;
- else if(start) //only start if the input is set high
- ticker <= ticker + 1;
- end
- assign click = ((ticker == 50000000)?1'b1:1'b0); //click to be assigned high every 0.1 second
- always @ (posedge clock or posedge reset)
- begin
- if (reset)
- begin
- reg_d0 <= 0;
- reg_d1 <= 0;
- reg_d2 <= 0;
- reg_d3 <= 0;
- end
- else if (click) //increment at every click
- begin
- if(reg_d0 == 9) //xxx9 - the 0.1 second digit
- begin //if_1
- reg_d0 <= 0;
- if (reg_d1 == 9) //xx99
- begin // if_2
- reg_d1 <= 0;
- if (reg_d2 == 5) //x599 - the two digit seconds digits
- begin //if_3
- reg_d2 <= 0;
- if(reg_d3 == 9) //9599 - The minute digit
- reg_d3 <= 0;
- else
- reg_d3 <= reg_d3 + 1;
- end
- else //else_3
- reg_d2 <= reg_d2 + 1;
- end
- else //else_2
- reg_d1 <= reg_d1 + 1;
- end
- else //else_1
- reg_d0 <= reg_d0 + 1;
- end
- end
- reg [6:0]hex0_temp;
- reg [6:0]hex1_temp;
- reg [6:0]hex2_temp;
- reg [6:0]hex3_temp;
- always @ (*)
- begin
- case(reg_d0)
- 4'd0 : hex0_temp = 7'b0111111;
- 4'd1 : hex0_temp = 7'b0000110;
- 4'd2 : hex0_temp = 7'b1011011;
- 4'd3 : hex0_temp = 7'b1001111;
- 4'd4 : hex0_temp = 7'b1100110;
- 4'd5 : hex0_temp = 7'b1101101;
- 4'd6 : hex0_temp = 7'b1111101;
- 4'd7 : hex0_temp = 7'b0000111;
- 4'd8 : hex0_temp = 7'b1111111;
- 4'd9 : hex0_temp = 7'b1101111;
- default : hex0_temp = 7'b1000000; //dash
- endcase
- case(reg_d1)
- 4'd0 : hex1_temp = 7'b0111111;
- 4'd1 : hex1_temp = 7'b0000110;
- 4'd2 : hex1_temp = 7'b1011011;
- 4'd3 : hex1_temp = 7'b1001111;
- 4'd4 : hex1_temp = 7'b1100110;
- 4'd5 : hex1_temp = 7'b1101101;
- 4'd6 : hex1_temp = 7'b1111101;
- 4'd7 : hex1_temp = 7'b0000111;
- 4'd8 : hex1_temp = 7'b1111111;
- 4'd9 : hex1_temp = 7'b1101111;
- default : hex1_temp = 7'b1000000; //dash
- endcase
- case(reg_d2)
- 4'd0 : hex2_temp = 7'b0111111;
- 4'd1 : hex2_temp = 7'b0000110;
- 4'd2 : hex2_temp = 7'b1011011;
- 4'd3 : hex2_temp = 7'b1001111;
- 4'd4 : hex2_temp = 7'b1100110;
- 4'd5 : hex2_temp = 7'b1101101;
- 4'd6 : hex2_temp = 7'b1111101;
- 4'd7 : hex2_temp = 7'b0000111;
- 4'd8 : hex2_temp = 7'b1111111;
- 4'd9 : hex2_temp = 7'b1101111;
- default : hex2_temp = 7'b1000000; //dash
- endcase
- case(reg_d3)
- 4'd0 : hex3_temp = 7'b0111111;
- 4'd1 : hex3_temp = 7'b0000110;
- 4'd2 : hex3_temp = 7'b1011011;
- 4'd3 : hex3_temp = 7'b1001111;
- 4'd4 : hex3_temp = 7'b1100110;
- 4'd5 : hex3_temp = 7'b1101101;
- 4'd6 : hex3_temp = 7'b1111101;
- 4'd7 : hex3_temp = 7'b0000111;
- 4'd8 : hex3_temp = 7'b1111111;
- 4'd9 : hex3_temp = 7'b1101111;
- default : hex3_temp = 7'b1000000; //dash
- endcase
- end
- assign hex0 = hex0_temp;
- assign hex1 = hex1_temp;
- assign hex2 = hex2_temp;
- assign hex3 = hex3_temp;
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement