/******************秒记数器, 0-9循环****************/
/**************************************************/
/**************************************************/
/******************20250610************************/
`timescale 1ns/10ps
module s_counter
(
clk,
res,
s_num
);
input clk;
input res;
output[3:0] s_num;
parameter frequency_clk =24; //24MHz
reg[24:0] con_t; //秒脉冲分频计数器;
reg s_pulse; //秒脉冲尖;
reg [3:0] s_num;
/**************************************************/
always@(posedge clk or negedge res)
if(~res)
begin
con_t <=0;
s_pulse <=0;
s_num <=0;
end
/**************************************************/
else
begin
//if(con_t ==24000000-1)
//if(con_t ==frequency_clk*1000_000 -1)
if(con_t ==frequency_clk-1)
begin
con_t <=0;
end
else
begin
con_t <=con_t +1;
end
/**************************************************/ //秒脉冲尖
if(con_t ==0)
begin
s_pulse <=1;
end
else
begin
s_pulse <=0;
end
/**************************************************/
if(s_pulse)
begin
if(s_num ==9)
begin
s_num <=0;
end
else
begin
s_num <=s_num+1;
end
end
/**************************************************/
end
/**************************************************/
endmodule
/*************testbench of s_counter***************/
module s_counter_tb;
reg clk,res;
wire[3:0] s_num;
s_counter s_counter
(
.clk(clk),
.res(res),
.s_num(s_num)
);
initial
begin
clk <=0;
res <=0;
#17 clk <=1;
res <=1;
#1000 $stop;
end
always #5 clk <=~clk;
endmodule
/**************************************************/
/**************************************************/
|