1.学习要求
目标:实现LED灯(D8)间隔1s闪烁一次
需求分解:D8所对应的输出信号为LED0,对应FPGA管脚号为G15,置该位为低电平,LED灯点亮。间隔1s闪烁1次,即D8的LED灯点亮500ms,再熄灭500ms,便实现了1s闪烁1次的效果。
2.仿真分析
clk是50Mhz时钟,那么一个周期为(1X10^9)/(50X10^6)=20ns,1秒对应50000000个时钟周期,500ms=25000000个时钟周期。
注:rst_n为高电平有效,当其置高后,遇到的第一个clk上升沿,led灯为低电平点亮。
3.代码编写
module led_ctrl(
input clk,
input rst_n,
output reg led
);
parameter time_500m=25000000;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
cnt<=0;
else if(cnt==time_500m-1)
cnt<=0;
else
cnt<=cnt+1;
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
led<=1;
else if(cnt==time_500m-1)
led<=~led;
else;
end
endmodule