FPGA之按鍵消抖

2021-10-06 06:56:23 字數 2078 閱讀 4572

按鍵是一種常用的人機互動輸入介面,對於機械按鍵來說,在按下或彈起的時候,按鍵輸入值往往伴隨著輸入抖動。消除抖動的方式有很多種,以下是用fpga實現按鍵消抖。實現原理:當檢測到按鍵按下(一般按下為低電平)時開始計時(用計數器實現),大概10ms後檢測按鍵狀態,如果按鍵狀態為低電平,說明按鍵按下,輸出低電平;如果按鍵狀態為高電平,說明是按鍵抖動。按鍵彈起同理。

下面對按鍵消抖的**(ax_debounce.v)進行分析:

module ax_debounce(

input clk,

input rst,

input button_in,

output reg button_posedge,

output reg button_negedge,

output reg button_out

);

ax_debounce模組定義:時鐘輸入引腳clk、復位引腳rst、按鍵輸入引腳button_in。按鍵上公升沿輸出暫存器、按鍵下降沿輸出暫存器和按鍵狀態輸出暫存器。

assign q_reset = (def1 ^ def2);
通過按鍵的兩個輸入暫存器異或來檢測按鍵輸入的電平變化。

assign q_add = ~(q_reg == timer_max_val);
通過暫存器q_reg累加後與timer_max_val進行判斷,從而確定是否到達按鍵消抖時間。

always @(q_reset, q_add, q_reg)

begin

case ()

2'b00:

q_next <= q_reg;

2'b01:

q_next <= q_reg + 1;

default:

q_next <= };

endcase

end

以上**用於時間計數,計數值儲存到q_next中。

always @(posedge clk or posedge rst)

begin

if(rst == 1'b1)

begin

def1 <= 1'b0;

def2 <= 1'b0;

q_reg <= };

endelse

begin

def1 <= button_in;

def2 <= def1;

q_reg <= q_next;

end

end

以上**用於實時記錄按鍵輸入狀態,並依次儲存到def1 和def2中。

always @(posedge clk or posedge rst)

begin

if(rst == 1'b1)

button_out <= 1'b1;

else if(q_reg == timer_max_val)

button_out <= def2;

else

button_out <= button_out;

end

以上**表示按鍵狀態變化時把def2賦給按鍵輸出暫存器。

always @(posedge clk or posedge rst)

begin

if(rst == 1'b1)

begin

button_out_d0 <= 1'b1;

button_posedge <= 1'b0;

button_negedge <= 1'b0;

endelse

begin

button_out_d0 <= button_out;

button_posedge <= ~button_out_d0&button_out;

button_negedge <= button_out_d0& ~button_out;

endend

endmodule

以上**通過button_posedge和button_negedge的值來判斷當前的按鍵狀態是按鍵按下還是彈起。

FPGA 按鍵消抖

今天簡單的說說按鍵消抖,原理特別好理解,其實就是延時,做一定時間的延時後取值一次,就能夠得到特定的消抖後的狀態了。為什麼要消抖?見圖 我們可以看到,但按鍵按下的那一刻,存在一段時間的抖動,同時在釋放按鍵的一段時間裡也是存在抖動的,這就可能導致狀態在識別的時候可能檢測為多次的按鍵,因為執行過程中普通的...

FPGA按鍵消抖

fpga按鍵消抖key s0 判斷按鍵是否按下,如果是,轉移到狀態 key s1 key s1 10ms 後再次判斷按鍵是否按下,如果是,轉移狀態到 key s2,否則繼續回到 key s0 key s2 判斷按鍵是否抬起,如果是,轉移狀態到 key s3 key s1 10ms 後再次判斷按鍵是否...

2014 3 12 FPGA學習 按鍵消抖

生性愚鈍,現在才終於明白fpga的按鍵消抖原理。先貼一段別人的 dule key debounce sys clk sys rstn key in led out 輸入輸出訊號 input sys clk input sys rstn input key in output led out 暫存器定...