【FPGA】PWM_LED呼吸灯

PWM呼吸灯
调制PWM波占空比来实现LED从暗到亮,从亮到暗

// A code block
var foo = 'bar';
// An highlighted block
module pwm_led (
	input               	clk     ,
	input               	rst_n   ,
	input      		    	key_down,
	output  reg  	[3:0]  	led     
);
	
	parameter        			FRQ = 100_000; //频率100KHz  frequency
	    
	reg      		[16:0]      cnt_frq 	 ; //对应固定频率
	wire     		        	add_cnt_frq	 ; 
	wire     		        	end_cnt_frq	 ; 
	reg      		[16:0]      cnt_compare	 ; //对应占空比
	 
	reg                 		flag    	 ; //翻转的标志,实现由暗到亮,在从亮到按
	reg				  			led_flag	 ;


always @(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		led_flag <=0;
	end
	else if(key_down)begin
			led_flag <= ~led_flag;
		end
	else begin
			led_flag <= led_flag;
		end
end		
		

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cnt_frq <= 0;
    end
    else if(add_cnt_frq)begin
				 if(end_cnt_frq)begin
					 cnt_frq <= 0;
				end
				else begin
					 cnt_frq <= cnt_frq + 1;
				end
    end
end

assign add_cnt_frq = 1'b1;
assign end_cnt_frq = add_cnt_frq && cnt_frq == FRQ-1;//调整效果
	

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cnt_compare <= 0;
    end
    else if(cnt_compare >= FRQ)begin
            cnt_compare <= 0;
        end
        else if(end_cnt_frq) begin
            cnt_compare <= cnt_compare + 50;//步进可设置,调整效果
        end
			else begin
            cnt_compare <= cnt_compare ;
        end
end
	
//flag
always @(posedge clk or negedge rst_n)begin 
    if(!rst_n)begin
        flag <= 0;
    end 
    else if((flag == 0) && (cnt_compare >= FRQ))begin 
        flag <= 1'b1;
    end 
    else if((flag == 1'b1) && (cnt_compare >= FRQ))begin 
        flag <= 1'b0;
    end 
end
	
//led                   
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        led <= 8'b1111;  
    end                     
    else if(led_flag)begin
		 if(((flag == 1'b0) && cnt_frq < cnt_compare) || ((flag == 1'b1)
		  && (cnt_frq >cnt_compare)) )begin
			  led <= 8'b0000;
		 end
		 else begin
			  led <= 8'b1111;
		 end
	end
	else begin
	 led <= 8'b1111;
	end
end

endmodule


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值