一 理论
几个led灯依次被点亮,即为流水灯。
二
开发板:
使用fpga开发板上led灯。
在一定的时间间隔内依次亮起。
原理图:
led灯低电平控制下处于点亮状态。
三信号
框图:
波形图:
四 代码
module water_led
#(
parameter CNT_MAX = 25'd24_999_999
)
(
input wire sys_clk,
input wire sys_rst_n,
output wire [3:0] led_out
);
reg [24:0] cnt;//定义中间变量。
reg cnt_flag
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==1'b0)//异步复位。
cnt <= 25'd0;//赋初值。
else if(cnt==CNT_MAX)
cnt <= 25'd0;//清零。
else
cnt == cnt + 25'd1;//计数。
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==1'b0)//异步复位。
cnt_flag<=1'b0;//赋初值。
else if(cnt ==(CNT_MAX -25'd1)
cnt_flag <=1'b1;//高电平有效。
else
cnt_flag <=1'b0;//取低电平。
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==1'b0)//异步复位。
led_out<=4'b1110;//赋初值。
else if((led_out==4'b0111)&&(cnt_flag ==1'b1))
led_out<=4'b1110;//循环
else if(cnt_flag ==1'b1)
led_out<=led_out<<1;//移位
endmodule