2014 3 12 FPGA學習 按鍵消抖

2021-06-20 22:44:08 字數 2272 閱讀 6858

生性愚鈍,現在才終於明白fpga的按鍵消抖原理。

先貼一段別人的**:

dule key_debounce(sys_clk          ,

sys_rstn         ,

key_in           ,

led_out

);//輸入輸出訊號

input               sys_clk          ;

input               sys_rstn         ;

input               key_in           ;

output              led_out          ;

//暫存器定義

reg                 led_out          ;

reg      [19:0]     delay_cnt        ;

wire                key_scan         ;

wire                key_low          ;

reg                 key_samp         ;

reg                 key_samp_r       ;

reg                 key_rst          ;

reg                 key_rst_r        ; 

//邏輯部分 

always@(posedge sys_clk or negedge sys_rstn)        

begin

if(!sys_rstn)

key_samp<=1'b1;

else

key_samp<=key_in;

endalways@(posedge sys_clk or negedge sys_rstn)        

begin

if(!sys_rstn)

key_samp_r<=1'b1;

else

key_samp_r<=key_samp;

endassign key_scan=key_samp_r&(~key_samp);

always@(posedge sys_clk or negedge sys_rstn) 

begin

if(!sys_rstn)

delay_cnt<=20'h0;

else if(key_scan)

delay_cnt<=20'h0;

else

delay_cnt<=delay_cnt+1'b1;

endalways@(posedge sys_clk or negedge sys_rstn)        

begin

if(!sys_rstn)

key_rst<=1'b1;

else if(delay_cnt==20'hfffff)

key_rst<=key_in;

endalways@(posedge sys_clk or negedge sys_rstn)        

begin

if(!sys_rstn)

key_rst_r<=1'b1;

else

key_rst_r<=key_rst;

endassign key_low=key_rst_r&(~key_rst);

//always@(posedge sys_clk or negedge sys_rstn) 

begin

if(!sys_rstn)

led_out<=1'b1;

else if(key_low)

led_out<=~led_out;

else

led_out<=led_out;

endendmodule

fpga的按鍵消抖,就是用脈衝邊沿檢測法,若有下降沿,則產生乙個週期的高電平;然後這個高電平再去清零20ms的計數器;同時在這20ms期間,不對key進行取樣,所以key不管是這一週期還是上一週期都是1;當20ms過去後開始取樣,若按下,則key = 0,而前一週期key = 1,利用邊沿檢測,得到乙個週期的高電平訊號,進行按鍵程式。

邊沿檢測    =       上一週期          &     (~本週期)                    下降沿檢測                   

邊沿檢測

= (~上一週期)&   本週期      上公升沿檢測

over

FPGA學習筆記(二) 按鍵LED

無按鍵按下時,全滅 按鍵1按下時,自右向左的流水效果 按鍵2按下時,自左向右的流水效果 按鍵3按下時,閃爍 按鍵4按下時,全亮 file name my key led last modified date 2020 6 10 22 30 last version v1.1 descriptions...

FPGA學習筆記 正點原子FPGA按鍵消抖筆記

出自正點原子 開拓者fpga開發指南v1.3 第九章按鍵控制蜂鳴器實驗 暫存器 key flag 按鍵資料有效訊號 暫存器 key value 按鍵消抖後的資料 暫存器 delay cnt 延時計數 系統時鐘 50mhz 思路 一直檢測按鍵狀態,一旦按鍵狀態發現變化,給delay cnt計數器賦初值...

FPGA 按鍵消抖

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