框图如下,要实现呼吸灯的效果,这里是改变输出信号的占空比来达到慢慢点亮的效果,低电平的占空比逐渐增大,灯也会逐渐变亮。
下面是手画的波形图,cnt_en是作为开关来区分灯灭和亮
rtl代码如下,cnt_1us每个周期代表占空比最低的一个单元,从1单元依次累加。cnt_1ms一个周期只会存在一个低电平占空比,随周期占空比依次增大。cnt_en是区分低电平和高电平的开关
module breath_led
#(
parameter CNT_1US_MAX = 6'd49,
parameter CNT_1MS_MAX = 10'd999,
parameter CNT_1S_MAX = 10'd999
)
(
input wire sys_clk,
input wire sys_rst_n,
output reg led_out
);
reg [9:0] cnt_1s ;
reg [9:0] cnt_1ms;
reg [5:0] cnt_1us;
reg cnt_en;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0)
cnt_1us <= 6'd0