Verilog之呼吸灯

呼吸灯

我今天分享一个呼吸灯的代码,挺有意思的!

呼吸灯字意就像人的呼吸一样的变化的灯,什么变化呢?指的是灯的暗慢慢变亮,再由亮慢慢变暗重复变化。

生活中常见的呼吸灯也就是手机上来消息时那个灯一闪一闪的变化。

我是怎么设计的这个呼吸灯的呢?

其中涉及到了脉宽调制的手段,利用占空比的变化来改变灯的暗慢慢到亮的状态!具体请见如下代码:

大家测试的时候需要用到FPGA的开发板,利用Altera或者Xilinx的开发环境将程序下载到FPGA芯片即可!


程序哪有疑问可以找我哦,我会帮你解答的哦。

module breathe(
	input    wire    sys_clk    ,
	input    wire    sys_rst_n  ,
	
	output   reg     led
);

reg    [6:0]    cnt_2us       ;
reg    [9:0]    cnt_2ms       ;
reg    [9:0]    cnt_2s        ;
reg             wave_flag     ;

parameter       CNT_MAX     =  100 ;
parameter       T_2US       =  1,
				T_2MS       =  1000,
				T_2S        =  1000_000;
				
always @ (posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		cnt_2us <= 7'd0;
	else
		if(cnt_2us == CNT_MAX - 1'b1)
			cnt_2us <= 7'd0;
		else
			cnt_2us <= cnt_2us + 1'b1;
	
always @ (posedge sys_clk or negedge sys_rst_n)	
	if (sys_rst_n == 1'b0)
		cnt_2ms <= 10'd0;
	else if ((cnt_2us == CNT_MAX - 1'b1)&&(cnt_2ms == T_2MS / T_2US - 1'b1))
			cnt_2ms <= 10'd0;
	else if (cnt_2us == CNT_MAX - 1'b1)
			cnt_2ms <= cnt_2ms + 1'b1;
	else   
			cnt_2ms <= cnt_2ms;

always @ (posedge sys_clk or negedge sys_rst_n)	
	if (sys_rst_n == 1'b0)			
		cnt_2s <= 10'd0;
	else if((cnt_2us == CNT_MAX - 1'b1)&&(cnt_2s == T_2S / T_2MS - 1'b1)&&(cnt_2ms == 10'd1000 - 1'b1))
		cnt_2s <= 10'd0;
	else if ((cnt_2ms == 10'd1000 - 1'b1)&&(cnt_2us == CNT_MAX - 1'b1))
		cnt_2s <= cnt_2s + 1'd1;
	else 
		cnt_2s <= cnt_2s;
		
always @ (posedge sys_clk or negedge sys_rst_n)	
	if (sys_rst_n == 1'b0)		
		wave_flag <= 1'b0;
	else if ((cnt_2us == CNT_MAX - 1'b1)&&(cnt_2s == T_2S / T_2MS - 1'b1)&&(cnt_2ms == 10'd1000 - 1'b1))
		wave_flag <= ~ wave_flag;
	else 
		wave_flag <= wave_flag; 
		
 always @ (posedge sys_clk or negedge sys_rst_n)	
	if (sys_rst_n == 1'b0)		
		led <= 0;
	else if ((cnt_2s > cnt_2ms)&&(wave_flag == 1'b0))
			led <= 1'b1;
	else if((cnt_2s < cnt_2ms)&&(wave_flag == 1'b1))
			led <= 1'b1;
	else 
			led <= 1'b0;
	
endmodule	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值