X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/77ab69d7bb0902e6ebf0994159ed2205f8413e34..a51c6ed32f1bae3563341486a8ad545c5c801329:/PS2Button.v diff --git a/PS2Button.v b/PS2Button.v index 169346c..81a0e89 100644 --- a/PS2Button.v +++ b/PS2Button.v @@ -1,4 +1,5 @@ module PS2Button( + input clk, input inclk, input indata, output wire [7:0] buttons @@ -10,9 +11,29 @@ module PS2Button( reg key_a = 0,key_b = 0,key_st = 0,key_sel = 0,key_up = 0,key_dn = 0,key_l = 0,key_r = 0; assign buttons = {key_st,key_sel,key_b,key_a,key_dn,key_up,key_l,key_r}; + + /* Clock debouncing */ + reg lastinclk = 0; + reg [5:0] debounce = 0; + reg fixedclk = 0; + reg [9:0] resetcountdown = 0; + + always @(posedge clk) begin + if (inclk != lastinclk) begin + lastinclk <= inclk; + debounce <= 1; + resetcountdown <= 10'b1111111111; + end else if (debounce == 0) begin + fixedclk <= inclk; + resetcountdown <= resetcountdown - 1; + end else + debounce <= debounce + 1; + end - always @ (negedge inclk) begin - if(bitcount == 10) begin + always @(negedge fixedclk) begin + if (resetcountdown == 0) + bitcount <= 0; + else if (bitcount == 10) begin bitcount <= 0; if(parity != (^ key)) begin if(keyarrow) begin