X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/bc75fc673a7453cb5b9077d70695d3525d13366d..eaec80f24007825c7abba2affd76f74d520ce4cd:/PS2Button.v?ds=sidebyside diff --git a/PS2Button.v b/PS2Button.v index 571af43..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,11 +11,31 @@ 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(parity != (^ key)) begin if(keyarrow) begin keyarrow <= 0; case(key)