久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

按鍵消抖的原理和基于fpga的消抖設(shè)計_明德?lián)P資料

 FPGA培訓(xùn) 2017-08-02

按鍵消抖

1功能概述

按鍵開關(guān)是各種電子設(shè)備不可或缺的人機接口,,如電腦的鍵盤等。實際應(yīng)用中,,按鍵開關(guān)通常為機械式彈性開關(guān),。當機械點斷開、閉合時,,由于機械觸點的彈性作用,,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定接通,斷開時也不會馬上斷開,,在閉合和斷開的瞬間均伴隨有一連串的抖動,。為保證系統(tǒng)及時正確識別,必須對這種情況作出相應(yīng)處理,。我們稱之為按鍵消抖,。

按鍵消抖可分為硬件消抖和軟件消抖。硬件消抖的原理是在信號輸入系統(tǒng)之前消除抖動干擾,,在按鍵較少的情況下比較適宜,。如果按鍵較多,則使用軟件消抖,。軟件消抖的實質(zhì)在于降低鍵盤輸入端口的采樣頻率,,將高頻抖動略去。需要注意的是,,軟件消抖需要占據(jù)一定的系統(tǒng)資源,。

盡管硬件消抖和軟件消抖能實現(xiàn)按鍵消抖功能,串行處理的方式都存在一定的局限性,,顯得不那么完美,。而硬件資源豐富的FPGA系統(tǒng)采用并行處理的模式,利用硬件來減輕軟件工作量,,通過硬件加速軟件消抖處理,,即可做到軟件消抖并行化,,因而在按鍵消抖處理方面具備非常明顯的優(yōu)勢。

優(yōu)秀的設(shè)計程序應(yīng)該是用最簡單的代碼(架構(gòu),、信號)實現(xiàn)功能,。在本例中,我們的只需要用4個信號界定,,并用很短的代碼即可,。下面我們先來看看功能要求:

在系統(tǒng)設(shè)計中,消除按鍵抖動的方法五花八門,,無論是硬件電路和軟件設(shè)計都十分成熟,。在本項目中,我們將用Verilog語言給出具體實現(xiàn)過程,,設(shè)計一個程序來檢查鍵值,,有效濾除按鍵抖動區(qū)間20 ms的毛刺脈沖。

 

2 設(shè)計思路

一般按鍵所用開關(guān)為機械彈性開關(guān),,由于機械觸點的彈性作用,每個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,,在斷開時也不會一下子斷開,。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,如下圖,。抖動時間的長短由按鍵的機械特性決定,,一般為5 ms10 ms

 

1  按鍵抖動過程示意

    當系統(tǒng)檢測出按鍵閉合后,,執(zhí)行一個延時程序,,產(chǎn)生5ms10ms的延時;前沿抖動消失后,,再一次檢測鍵的狀態(tài),;如果仍保持閉合狀態(tài)電平,則確認為真正有鍵按下,。當檢測到按鍵釋放后,,也要給5ms10ms的延時,待后沿抖動消失后才能轉(zhuǎn)入該鍵的處理程序,。本案例我們設(shè)置經(jīng)過20 ms后的高電平才是真正的按鍵功能,。

    信號列表如下

信號名

I/O

位寬

說明

clk

I

1

系統(tǒng)工作時鐘50MHz。

rst_n

I

1

系統(tǒng)復(fù)位信號,,低電平有效,。

key_in

I

4

按鍵輸入信號,按下高電平,。

key_vld

O

4

按鍵有效信號,,高電平有效,。

 

3   程序設(shè)計

模塊代碼

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

module key_module(

                  clk         ,

                  rst_n       ,

                  key_in      ,

        key_vld

    );

    parameter                        DATA_W = 20        ;

    parameter                        KEY_W     = 4         ;

    parameter                        TIME_20MS = 1_000_000  ;

    

    input                         clk                     ;

    input                         rst_n                   ;

    input           [KEY_W-1 :0] key_in                  ;

    output          [KEY_W-1 :0]   key_vld                 ;

    reg             [KEY_W-1 :0]   key_vld                 ;

    reg             [DATA_W-1:0]   cnt                     ;

    wire                             add_cnt                 ;

    wire                             end_cnt                 ;

    reg flag                    ;

    reg             [KEY_W-1 :0]    key_in_ff1               ;

    reg             [KEY_W-1 :0]    key_in_ff0               ;

    

    always  @(posedge clk or negedge rst_n)begin

        if(rst_n==1'b0)begin

            cnt <= 20'b0;

        end

        else if(add_cnt)begin

            if(end_cnt)

                cnt <= 20'b0;

            else

                cnt <= cnt + 1'b1;

        end

        else begin

            cnt <= 0;

        end

    end

    assign add_cnt = flag==1'b0 && (key_in_ff1!=0);

    assign end_cnt = add_cnt && cnt == TIME_20MS - 1;

    

    always  @(posedge clk or negedge rst_n)begin

        if(rst_n==1'b0)begin

            flag <= 1'b0;

        end

        else if(end_cnt)begin

            flag <= 1'b1;

        end

        else if(key_in_ff1==0)begin

            flag <= 1'b0;

        end

    end

    

    always  @(posedge clk or negedge rst_n)begin

        if(rst_n==1'b0)begin

            key_in_ff0 <= 0;

            key_in_ff1 <= 0;

        end

        else begin

            key_in_ff0 <= key_in    ;

            key_in_ff1 <= key_in_ff0;

        end

    end

    

    always  @(posedge clk or negedge rst_n)begin

        if(rst_n==1'b0)begin

            key_vld <= 0;

        end

        else if(end_cnt)begin

            key_vld <= key_in_ff1;

        end

        else begin

            key_vld <= 0;

        end

    end

endmodule

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多