OpenCores
URL https://opencores.org/ocsvn/vtach/vtach/trunk

Subversion Repositories vtach

[/] [vtach/] [trunk/] [debounce.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 wd5gnr
`timescale 1ns / 1ps
2
// Debounce switch inputs
3
module debounce (
4
        // Global system resources:
5
        input clk,      // System clock (must be 50 MHz)
6
        input rst,      // Master reset (asynchronous, active high)
7
 
8
        // Inputs:
9
        input rawinput, // Bouncy switch signal
10
 
11
        // Outputs:
12
        output reg btnout       // Debounced replica of switch signal
13
);
14
 
15
// Constant parameters
16
parameter initval = 0;  // default button state
17
parameter timerwidth = 19;
18
parameter inittimer = 19'd100_000; // for synthesis
19
//parameter inittimer = 19'd2; // for simulation
20
 
21
// Registered identifiers:
22
reg     rInitializeTimer;
23
reg     rWaitForTimer;
24
reg     rSaveInput;
25
reg     rBouncy_Syncd;
26
reg     [timerwidth-1:0] rTimer;
27
 
28
// Wire identifiers:
29
wire    wTransitionDetected;
30
wire    wTimerFinished;
31
 
32
// Controller:
33
always @ (posedge clk or posedge rst)
34
        if (rst)
35
                {rInitializeTimer,rWaitForTimer,rSaveInput} <= {3'b100};
36
        else begin
37
                rInitializeTimer <= rInitializeTimer && !wTransitionDetected ||
38
                                                        rSaveInput;
39
                rWaitForTimer <= rInitializeTimer && wTransitionDetected ||
40
                                                        rWaitForTimer && !wTimerFinished;
41
                rSaveInput <= rWaitForTimer && wTimerFinished;
42
        end
43
 
44
// Datapath:
45
always @ (posedge clk or posedge rst)
46
        if (rst) begin
47
                rBouncy_Syncd <= 0;
48
                btnout <= initval;
49
                rTimer <= inittimer;
50
        end
51
        else begin
52
                rBouncy_Syncd <= rawinput;
53
                btnout <= (rSaveInput) ? rBouncy_Syncd : btnout;
54
                rTimer <= (rInitializeTimer) ? inittimer : rTimer - 1;
55
        end
56
 
57
assign wTransitionDetected = rBouncy_Syncd ^ btnout;
58
assign wTimerFinished = (rTimer == 0);
59
 
60
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.