verilog消抖电路

1、请设计一个去抖动电路,要求能过滤脉冲宽度在2个时钟周期内的抖动。

module dbc(
input clk,
input rst_n,
input signal_i,
output signal_o
);
reg [2:0] signal_3;

always@(posedge clk or negedge rst_n) begin
	if(!rst_n)
		signal_3 <= 0;
	else begin
		signal_3 <= { signal_3[1:0],signal_i };
	end
end

always@(posedge clk or negedge rst_n) begin
	if(!rst_n)
		signal_o <= 0;
	else if( signal_3 == 3'b111 ) 
		signal_o <= 1'b1;
	else if( signal_3 == 3'b000 )
		signal_o <= 1'b0;
	else ;
end

endmodule

2、用verilog实现按键抖动消除电路,抖动小于15ms,输入时钟12MHz。
添加计数器,计数时间为15ms。若这段时间key_in保持不变,则key_in连接输出。若计数到中间,输入有变化,则重新计时。
(若未给出抖动时间,按经验,抖动时间一般会少于20ms. 也就是说,如果数据稳定20ms,认为可以采集该数据。)

module key(
input clk,
input rst_n,
input sw_in,
output sw_out
);
reg [19:0] cnt;
reg sw_in_r;
wire edge_p,edge_n,edge_en;

assign edge_en = edge_p | edge_n;
assign edge_p = sw_in & (~sw_in_r);  //上升沿检测
assign edge_n = (~sw_in) & (sw_in_r); //下降沿检测

always@(posedge clk or negedge rst_n) begin
	if(!rst_n) begin
		sw_in_r <= 0;
	end
	else begin
		sw_in_r <= sw_in;
	end
end

always@(posedge clk or negedge rst_n) begin
	if(!rst_n) begin
		cnt <= 0;
	end
	else if(edge_en)
		cnt <= 0;
	else if(cnt == 180000)
		cnt <= 0;
	else
		cnt <= cnt + 1;
end

always@(posedge clk or negedge rst_n) begin
	if(!rst_n) begin
		sw_out <= 0;
	end
	else if(cnt == 180000)
		sw_out <= sw_in;
	else ;
end

endmodule

参考:https://blog.csdn.net/Reborn_Lee/article/details/89927569

矩阵键盘是一种常用的输入设备,但是由于按键的物理特性,可能会产生按键抖动现象,也就是按键在按下或释放时会产生多个非预期的信号过渡。为了解决这个问题,可以使用Verilog代码来实现按键消抖功能。 在Verilog中,可以使用有限状态机(FSM)来设计按键消抖电路。首先,需要定义状态机的各个状态以及输入输出信号。状态机可以包含“等待”、“按下”和“释放”等状态。 首先,在“等待”状态下,检测按键是否被按下。如果按键被按下,则状态转移到“按下”状态;如果未按下,则状态保持在“等待”状态。 在“按下”状态下,持续检测按键是否保持按下。如果按键保持按下,则状态保持在“按下”状态;如果按键释放,则状态转移到“释放”状态。 在“释放”状态下,持续检测按键是否保持释放。如果按键保持释放,则状态转移到“等待”状态;如果按键再次被按下,则状态转移到“按下”状态。 通过这样的FSM设计,可以实现按键消抖。当按键按下或释放时,只有当稳定状态持续一段时间之后,才会被认定为按键的有效信号。 需要注意的是,消抖时间应根据具体的按键特性来设定,一般情况下大约在5-20毫秒之间。此外,还需要合理设置信号的触发边沿(上升沿或下降沿),以便于检测按键的变化。 综上所述,通过使用Verilog代码实现矩阵键盘的按键消抖功能,可以有效解决按键抖动问题,提高系统稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值