1s周期+20MHZ时钟==25_000_000计数器,25位二进制
module led_flash
(//端口列表
CLK,
reset_n,
led
);
input CLK;
input reset_n;
output reg led;
//计数器最大值 CNT_MAX counter_max
//计数器周期 T_CLK 时钟频率是50MHZ 周期是1/50_000000s=2e-08s 即20ns MHZ=百万HZ
//计数器计数时间 T, 计数器最大值CNT_MAX=计数器时间T/计数器周期T_CLK
//若计数时间是500ms=0.5s ,得计数器最大值是25,000,000
//二进制是 ?0001_0111_1101_0111_1000_0100_0000? 则计数器至少25位
//可以据此设计寄存器变量 counter
reg [24:0]counter;
always@(posedge CLK or negedge reset_n)
//问题来了,这个下降沿之后,是一整个的低电平,不用担心,因为上面有
//always@做判断,只执行一次
if(!reset_n)
counter <=0;
else if( counter==25_000_000-1)
counter <=0;
//因为上面计数器的值是十进制,这边也跟着用十进制,但是要注意加法器是按照
//二进制来设计的,要注意位宽
else
counter <= counter +1'd1;
always@(posedge CLK or negedge reset_n)
if(!reset_n)
led <=1'b0;
else if(counter == 25_000_000-1)
led <= !led;
endmodule