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

Subversion Repositories sockit_owm

[/] [sockit_owm/] [trunk/] [demo/] [Terasic_DE1/] [debouncer.v] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 iztok
module debouncer #(
2
  parameter CN = 8,         // counter number (sequence length)
3
  parameter CW = $clog2(CN) // counter width in bits
4
)(
5
  input      clk,           // clock
6
  input      d_i,           // debouncer input
7
  output reg d_o            // debouncer output
8
);
9
 
10
reg [CW-1:0] cnt;           // counter
11
reg          d_r;           // input register
12
 
13
// TODO, check if this is done acording to Altera specifications
14
initial cnt <= 0;
15
 
16
// prevention of metastability problems
17
always @ (posedge clk)
18
d_r <= d_i;
19
 
20
// the counter should start running on a change
21
always @ (posedge clk)
22
if (|cnt)          cnt <= cnt - 1;
23
else if (d_r^d_o)  cnt <= CN;
24
 
25
// when the counter is zero the output should follow the input
26
always @ (posedge clk)
27
if (~|cnt) d_o <= d_r;
28
 
29
endmodule

powered by: WebSVN 2.1.0

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