module Breath_Led(
input sys_clk;
input sys_rst_n;
output breath_led
);
reg led;
parameter counter_2us_max = 7'd100;
parameter counter_2ms_max = 10'd1000;
parameter counter_2s_max = 10'd1000;
reg [6:0] counter_2us;
reg [9:0] counter_2ms;
reg [9:0] counter_2s;
reg incline_decline_flag;
always@(posedge sys_clk or negedge sys_clk)begin
if(!sys_clk)
counter_2us <= 7'd0;
else if(counter_2us == counter_2us_max - 7'd1)
counter_2us <= 7'd0;
else if(counter_2us < counter_2us_max - 7'd1)
counter_2us <= 7'd1 + counter_2us;
else
counter_2us <= counter_2us;
end
always@(posedge sys_clk or negedge sys_clk)begin
if(!sys_clk)
counter_2ms <= 10'd0;
else if(counter_2ms == counter_2ms_max - 10'd1 && counter_2us == counter_2us_max - 7'd1)
counter_2ms <= 10'd0;
else if(counter_2us == counter_2us_max - 7'd1)
counter_2ms <= counter_2ms + 10'd1;
else
counter_2ms <= counter_2ms;
end
always@(posedge sys_clk or negedge sys_clk)begin
if(!sys_clk)
counter_2s = 10'd0;
else if(counter_2s == counter_2s_max - 10'd1 && counter_2ms == counter_2ms_max - 10'd1 && counter_2us == counter_2us_max - 7'd1)
counter_2s <= 10'd0;
else if(counter_2ms == counter_2ms_max - 10'd1 && counter_2us == counter_2us_max - 7'd1)
counter_2s <= counter_2s + 10'd1;
else
counter_2s <= counter_2s;
always@(posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
inc_dec_flag <= 1'b0;
else if(counter_2s == (counter_2s_max - 10'b1)
&& counter_2ms ==( counter_2ms_max - 10'b1)
&& cnt_2us == (CNT_2US_MAX - 7'b1))
incline_decline_flag <= ~incline_decline_flag;
else
incline_decline_flag <= incline_decline_flag;
end
always@(posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
led <= 1'b0;
else if((incline_decline_flag == 1'b1 && counter_2ms >= counter_2s)
|| (incline_decline_flag == 1'b0 && counter_2ms <= counter_2s))
led <= 1'b1;
else
led <= 1'b0;
end
endmodule
呼吸灯设计
于 2024-04-05 23:35:42 首次发布