//NOTE: you should drive this with a slow clock to actually debounce input module debouncer(input logic clk, input reset, input source, output logic out); logic pressed; always_ff @(posedge clk) begin if (reset) pressed <= 0; if (!source) begin pressed <= 0; out <= 0; end else if (pressed) out <= 0; else begin pressed <= 1; out <= 1; end end endmodule