1、呼吸灯。
控制一个LED灯在1s内从灭慢慢到亮,下一秒内从亮慢慢到灭。循环往复。
提示:LED的亮度可以由点亮时间与熄灭时间长度来控制。比如一个毫秒里,亮0us,灭1000us,下一毫秒亮1us灭999us,下一下毫秒里,亮2us灭998us,在下一毫秒里,亮3us灭997us,依次进行下去,直到1000us亮,0us灭。
`timescale 1ns / 1ps
module breathing_led(
input wire clk,//50M始终
input wire nrst,
output reg [7:0] led
);
localparam T_1ms = 50_000; //1ms 50_000个周期
localparam T_cycle = 1000;
reg [9:0] dis_cnt = 0; //灯亮的时间 计数单位
reg [25:0] cnt = 0; //计数
reg flag = 0; //标记 向前 翻转
always @(posedge clk or negedge nrst ) begin
if(~nrst) begin
cnt <= 0;
dis_cnt <= 0;
led <= 8'b0000_0000;
end
else if(cnt == T_1ms -1 ) begin
cnt <= 0;
if(dis_cnt == T_cycle) begin
dis_cnt <= 0;
flag <= ~flag;