module top(
input clk,
input rst_n,
output reg[4:0]led
);
reg [32:0] cnt;
reg [4:0] led_count;
parameter CLOCK_FREQ =50000000;
parameter COUNTER_MAX = CLOCK_FREQ-1; //clk 记录半秒的时间
always @(posedge clk,negedge rst_n)begin
if(!rst_n)begin
cnt<=31'd0;
led_count <=4'b0;
end
else begin
cnt <= cnt+1'b1;
if(cnt==COUNTER_MAX)begin
cnt<=31'd0;
led_count<=led_count+1'b1;
if(led_count==4'b1000)begin
led_count<=4'b0;
end
end
led<=led_count;
end
end
endmodule
这就是一个简单的led二进制计数。但是现在有一个问题,4个LED灯会不会再1000的状态停留。
按理说,led_count在1000这个状态后,马上会被检查归零,在检查之后才会被赋值给led,不可能被显示出来。
但是实际上led会显示1000这个状态,并且和其他状态一样,会停留半秒。
input clk,
input rst_n,
output reg[4:0]led
);
reg [32:0] cnt;
reg [4:0] led_count;
parameter CLOCK_FREQ =50000000;
parameter COUNTER_MAX = CLOCK_FREQ-1; //clk 记录半秒的时间
always @(posedge clk,negedge rst_n)begin
if(!rst_n)begin
cnt<=31'd0;
led_count <=4'b0;
end
else begin
cnt <= cnt+1'b1;
if(cnt==COUNTER_MAX)begin
cnt<=31'd0;
led_count<=led_count+1'b1;
if(led_count==4'b1000)begin
led_count<=4'b0;
end
end
led<=led_count;
end
end
endmodule
这就是一个简单的led二进制计数。但是现在有一个问题,4个LED灯会不会再1000的状态停留。
按理说,led_count在1000这个状态后,马上会被检查归零,在检查之后才会被赋值给led,不可能被显示出来。
但是实际上led会显示1000这个状态,并且和其他状态一样,会停留半秒。