# count clock ```=v module top_module( input clk, input reset, input ena, output reg pm, output reg [7:0] hh, output reg [7:0] mm, output reg [7:0] ss); //reg reg [7:0] sec_cnt; reg [7:0] min_cnt; reg [7:0] hour_cnt; //reg assign always@(*) begin ss=sec_cnt; mm=min_cnt; hh=hour_cnt; end //sec_cnt ////sec_cnt個位 always@(posedge clk) begin if (reset) sec_cnt[3:0]<=1'd0; else if (ena) begin if (sec_cnt[3:0]==4'd9) sec_cnt[3:0]<=1'd0; else sec_cnt[3:0]<=sec_cnt[3:0]+1'd1; end end ////sec_cnt十位 always@(posedge clk) begin if (reset) sec_cnt[7:4]<=1'd0; else if (ena) begin if (sec_cnt[7:4]==3'd5 && sec_cnt[3:0]==4'd9) sec_cnt[7:4]<=1'd0; else if(sec_cnt[3:0]==4'd9) sec_cnt[7:4]<=sec_cnt[7:4]+1'd1; else sec_cnt[7:4]<=sec_cnt[7:4]; end end //min_cnt //min_cnt 個位 always@(posedge clk) begin if (reset) min_cnt[3:0]<=1'd0; else if (ena) begin if (min_cnt[3:0]==4'd9 && sec_cnt[7:0]==8'b0101_1001) min_cnt[3:0]<=1'd0; else if (sec_cnt[7:0]==8'b0101_1001) min_cnt[3:0]<=min_cnt[3:0]+1'd1; else min_cnt[3:0]<=min_cnt[3:0]; end end //min_cnt 十位 always@(posedge clk) begin if (reset) min_cnt[7:4]<=1'd0; else if (ena) begin if (min_cnt[7:4]==3'd5 && sec_cnt[7:0]==8'b0101_1001 && min_cnt[3:0]==4'd9) min_cnt[7:4]<=1'd0; else if (sec_cnt[7:0]==8'b0101_1001 && min_cnt[3:0]==4'd9) min_cnt[7:4]<=min_cnt[7:4]+1'd1; else min_cnt[7:4]<=min_cnt[7:4]; end end //hour_cnt //hour_cnt 個位 always@(posedge clk) begin if (reset) hour_cnt[3:0]<=2'd2; else if (ena) begin if ((hour_cnt[3:0]==4'd9 && sec_cnt[7:0]==8'b0101_1001 && min_cnt[7:0]==8'b0101_1001) ) hour_cnt[3:0]<=1'd0; else if ((hour_cnt==8'h12 && sec_cnt[7:0]==8'b0101_1001 && min_cnt[7:0]==8'b0101_1001)) hour_cnt[3:0]<=1'd1; else if (sec_cnt[7:0]==8'b0101_1001 && min_cnt[7:0]==8'b0101_1001) hour_cnt[3:0]<=hour_cnt[3:0]+1'd1; else hour_cnt[3:0]<=hour_cnt[3:0]; end end //hour_cnt 十位 always@(posedge clk) begin if (reset) hour_cnt[7:4]<=1'd1; else if (ena) begin if (hour_cnt==8'b0001_0010 && sec_cnt[7:0]==8'b0101_1001 && min_cnt[7:0]==8'b0101_1001) hour_cnt[7:4]<=1'd0; else if (hour_cnt[3:0]==4'd9 && sec_cnt[7:0]==8'b0101_1001 && min_cnt[7:0]==8'b0101_1001) hour_cnt[7:4]<=hour_cnt[7:4]+1'd1; else hour_cnt[7:4]<=hour_cnt[7:4]; end end //pm always@ (posedge clk) begin if (reset) pm<=1'd0; else if (hh==8'h11 && mm==8'h59 && ss==8'h59) pm<=~pm; else pm<=pm; end endmodule ```