File tree Expand file tree Collapse file tree 4 files changed +177
-0
lines changed Expand file tree Collapse file tree 4 files changed +177
-0
lines changed Original file line number Diff line number Diff line change 1+ `timescale 1ns / 1ps
2+ // ////////////////////////////////////////////////////////////////////////////////
3+ // Company:
4+ // Engineer: James Swineson
5+ //
6+ // Create Date: 14:47:27 12/30/2017
7+ // Design Name: ButtonDejitter
8+ // Module Name: ButtonDejitter.v
9+ // Project Name: ButtonDejitter
10+ // Target Devices: XC6LX16
11+ // Tool versions:
12+ // Description:
13+ //
14+ // Dependencies:
15+ //
16+ // Revision:
17+ // Revision 0.01 - File Created
18+ // Additional Comments:
19+ //
20+ // ////////////////////////////////////////////////////////////////////////////////
21+
22+ // Generated by the following python code:
23+ // for i in range(1, 32): print("(x <= {})?{}:\\".format(2**i, i))
24+ // we end at 4294967295 since default int is 32 bit.
25+ // use WIDTH'dxxxx if larger int is needed.
26+ // the last -1 is used to indicater no LUT value error.
27+ `define CLOG2(x ) \
28+ (x <= 2 )?1 :\
29+ (x <= 4 )?2 :\
30+ (x <= 8 )?3 :\
31+ (x <= 16 )?4 :\
32+ (x <= 32 )?5 :\
33+ (x <= 64 )?6 :\
34+ (x <= 128 )?7 :\
35+ (x <= 256 )?8 :\
36+ (x <= 512 )?9 :\
37+ (x <= 1024 )?10 :\
38+ (x <= 2048 )?11 :\
39+ (x <= 4096 )?12 :\
40+ (x <= 8192 )?13 :\
41+ (x <= 16384 )?14 :\
42+ (x <= 32768 )?15 :\
43+ (x <= 65536 )?16 :\
44+ (x <= 131072 )?17 :\
45+ (x <= 262144 )?18 :\
46+ (x <= 524288 )?19 :\
47+ (x <= 1048576 )?20 :\
48+ (x <= 2097152 )?21 :\
49+ (x <= 4194304 )?22 :\
50+ (x <= 8388608 )?23 :\
51+ (x <= 16777216 )?24 :\
52+ (x <= 33554432 )?25 :\
53+ (x <= 67108864 )?26 :\
54+ (x <= 134217728 )?27 :\
55+ (x <= 268435456 )?28 :\
56+ (x <= 536870912 )?29 :\
57+ (x <= 1073741824 )?30 :\
58+ (x <= 2147483648 )?31 :\
59+ (x <= 4294967295 )?32 :\
60+ - 1
61+
62+ module ButtonDejitter #(
63+ parameter COUNT_TO = 5000000 ,
64+ parameter DATA_WIDTH = `CLOG2(COUNT_TO) + 1
65+ )(
66+ input BTN_IN,
67+ input CLK,
68+ output BTN_OUT
69+ );
70+
71+ reg DEJITTERED = 0 ;
72+ reg [DATA_WIDTH:0 ] count = 0 ;
73+
74+ assign BTN_OUT = DEJITTERED;
75+
76+ always @(posedge CLK) begin
77+ if (BTN_IN != DEJITTERED) count = count + 1 ;
78+ else count = 0 ;
79+
80+ if (count == COUNT_TO) begin
81+ DEJITTERED = BTN_IN;
82+ count = 0 ;
83+ end
84+ end
85+
86+ endmodule
Original file line number Diff line number Diff line change 1+ `timescale 1ns / 1ns
2+
3+ // //////////////////////////////////////////////////////////////////////////////
4+ // Company:
5+ // Engineer: James Swineson
6+ //
7+ // Create Date: 14:57:18 12/30/2017
8+ // Design Name: ButtonDejitter
9+ // Module Name: ButtonDejitterTest.v
10+ // Project Name: ButtonDejitter
11+ // Target Device: XC6LX16
12+ // Tool versions:
13+ // Description:
14+ //
15+ // Verilog Test Fixture created by ISE for module: ButtonDejitter
16+ //
17+ // Dependencies: ButtonDejitter.v
18+ //
19+ // Revision:
20+ // Revision 0.01 - File Created
21+ // Additional Comments:
22+ //
23+ // The following test runs for ~0.04s.
24+ //
25+ // //////////////////////////////////////////////////////////////////////////////
26+
27+ module ButtonDejitterTest ;
28+
29+ // Inputs
30+ reg BTN_IN = 0 ;
31+ reg CLK = 0 ;
32+
33+ // Outputs
34+ wire BTN_OUT;
35+
36+ // Instantiate the Unit Under Test (UUT)
37+ ButtonDejitter #(
38+ .COUNT_TO(250000 )
39+ )uut (
40+ .BTN_IN(BTN_IN),
41+ .CLK(CLK),
42+ .BTN_OUT(BTN_OUT)
43+ );
44+
45+ // 100 MHz Clock
46+ always @* CLK <= #10 ~ CLK;
47+
48+ initial begin
49+ // Initialize Inputs
50+ BTN_IN = 0 ;
51+
52+ // Wait 100 ns for global reset to finish
53+ #100 ;
54+
55+ // Add stimulus here
56+
57+ // Note: delay = cycles * time per cycle (#10)
58+
59+ // should trigger
60+ BTN_IN = 1 ;
61+ #6000000 ;
62+
63+ BTN_IN = 0 ;
64+ #6000000 ;
65+
66+ // should not trigger
67+ BTN_IN = 1 ;
68+ #4000000 ;
69+ BTN_IN = 0 ;
70+ #1000000 ;
71+ BTN_IN = 1 ;
72+ #3000000 ;
73+ BTN_IN = 0 ;
74+
75+ // should trigger
76+ BTN_IN = 1 ;
77+ #6000000 ;
78+
79+ // should not trigger
80+ BTN_IN = 0 ;
81+ #4000000 ;
82+ BTN_IN = 1 ;
83+ #1000000 ;
84+ BTN_IN = 0 ;
85+ #3000000 ;
86+ BTN_IN = 1 ;
87+ end
88+
89+ endmodule
90+
Original file line number Diff line number Diff line change 2828* 寄存器
2929
3030 * 移位寄存器
31+ * 按键消抖
3132
3233## 版权
3334
You can’t perform that action at this time.
0 commit comments