用verilog實現按鍵抖動消除電路,抖動小於15ms,輸入時鐘 12mhz
設計思路:
使用計數器,計算按鍵時間,如果大於15ms,則認為是有效訊號,若小於15ms,則認為是無效訊號
12mhz 1 clk =83ns 15ms/83ns =180722 = 0x2c1f2
module rebounce(
input clk,
input rst_n,
input key_in,
output key_out);
reg key_out;
reg key_in_dly;
reg [19:
0] cnt;
wire change;
parameter jitter =
20'h2c1f2;
// 檢測key訊號變化,使用原訊號+dly
always @(posedge clk or negedge rst_n)
if(!rst_n) key_in_dly <=0;
else key_in_dly <= key_in;
assign change =
(key_in & !key_in_dly)
|(!key_in & key_in_dly)
;// 當沒有變化時,計數器才工作,否則復位重新計數
always @(posedge clk or negedge rst_n)
if(!rst_n) cnt <=
20'h0;
else
if(change) cnt <=
20'h0;
else cnt <= cnt +1;
// 輸出判斷
always @(posedge clk or negedge rst_n)
// key_out =
1 為 未按下
if(!rst_n) key_out <=1;
else
if(cnt ==
20'h2c1f2 -
1) key_out <= key_in;
else key_out <= key_out;
endmodule
按鍵消抖電路原理
按鍵消抖電路原理 fpga開發中按鍵消抖與單脈衝發生器電路 為了使按鍵消抖電路模組簡潔,移植性好,在此用計數器的方式實現按鍵消抖的功能。計數器模值n根據抖動訊號的脈衝寬度和取樣脈衝訊號clk的週期大小決定。計數模值n 延時 脈衝訊號取樣週期。一般按鍵抖動時間為5 10 ms,甚至更長。筆者用的開發板...
FPGA Verilog按鍵消抖
硬體 鋯石a4開發板,altera ep4ce10f17c8 語言 verilog hdl 原理 機械式按鍵大概有20ms的抖動,所以檢測到按鍵變化後等20ms再判斷一次,如果鍵值相同才視為有效 頂級模組按鍵切換led顯示 module key led,key,clock,reset input c...
FPGA 按鍵消抖
今天簡單的說說按鍵消抖,原理特別好理解,其實就是延時,做一定時間的延時後取值一次,就能夠得到特定的消抖後的狀態了。為什麼要消抖?見圖 我們可以看到,但按鍵按下的那一刻,存在一段時間的抖動,同時在釋放按鍵的一段時間裡也是存在抖動的,這就可能導致狀態在識別的時候可能檢測為多次的按鍵,因為執行過程中普通的...