Led初始不亮,灯0.5s亮,0.5秒之后灭,周期为1s
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位 //可以据此设计寄存器变量 counterreg [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;//因为上面计数器的值是十进制,这边也跟着用十进制,但是要注意加法器是按照//二进制来设计的,要注意位宽elsecounter <= 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