FPGA流水灯和跑马灯
流水灯和跑马灯的区别:
流水灯顾名思义就是让 LED 如同流水一般,从无灯亮,到亮一个,再到亮二个,以此类推,亮 3 个、 4…12 个,最后全部熄灭,再周而复始的循环下去。
而跑马灯就是每次只亮一个,以极快的速度循环,看起来就像led灯跑起来了一样。
流水灯具体实现:
首先新建一个工程项目取名叫led_water
文件夹中再新建duc,prj,src,sim,tcl文件夹:
在quartus II中新建工项目:
在这里插入图片描述
之后编写代码:
module led_water(
input clk ,//50MHz
input rst_n ,//system reset
output reg [3:0] led //LED
);
parameter CNT_MAX = 25'd25_000_000;
reg [24:0] cnt; //500ms计数器
wire add_cnt;//计数器使能信号
wire end_cnt;//计数器清零信号
//计数器描述
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 25'd0; //复位清零
end
else if(add_cnt)begin //计数器使能
if(end_cnt)begin
cnt <= 25'd0; //计数器清零
end
else begin
cnt <= cnt + 1'b1;
end
end
else begin
cnt <= 25'd0; //意外情况、清零
end
end
assign add_cnt = 1'b1;
assign end_cnt = add_cnt && (cnt == CNT_MAX - 1'd1);
//输出LED信号描述
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
led <= 4'b0000; //复位全灭
end
else if