X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/714630d3e8be5d536b67fa25f4b4745e9aaf42a3..e7fe9dc201afb96f401fb2d3cf5aa19aa7e8e796:/PS2Button.v diff --git a/PS2Button.v b/PS2Button.v index e65226c..81a0e89 100644 --- a/PS2Button.v +++ b/PS2Button.v @@ -1,26 +1,41 @@ module PS2Button( + input clk, input inclk, input indata, - input rst, - output outclk, - output outdata, - output reg [7:0] buttons + output wire [7:0] buttons ); - assign outdata = 1'b1; - assign outclk = 1'b1; - - reg bitcount [3:0] = 0; - reg [7:0] key; - reg keyarrow, keyup, parity; - reg key_a,key_b,key_st,key_sel,key_up,key_dn,key_l,key_r; + reg [3:0] bitcount = 0; + reg [7:0] key = 0; + reg keyarrow = 0, keyup = 0, parity = 0; + 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(parity != (^ key)) begin if(keyarrow) begin keyarrow <= 0; case(key)