Advertisement
Guest User

debouncer

a guest
Dec 21st, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module debouncer(
  2.     input wire clk,
  3.     input wire reset,
  4.     input wire bouncing,
  5.     output wire debounced
  6. );
  7. parameter CNT_WIDTH = 5;
  8. reg prvi_reg, prvi_next;
  9. reg drugi_reg, drugi_next;
  10. reg [(CNT_WIDTH-1):0] counter_reg, counter_next;
  11. reg output_reg, output_next;
  12. wire input_changed;
  13. wire input_stable;
  14.  
  15. always @(posedge clk, posedge reset) begin
  16.     if(reset == 1) begin
  17.         prvi_reg <= 0;
  18.         drugi_reg <= 0;
  19.         counter_reg <= 0;
  20.         output_reg <= 0;
  21.     end
  22.     else begin
  23.         prvi_reg <= prvi_next;
  24.         drugi_reg <= drugi_next;
  25.         counter_reg <= counter_next;
  26.         output_reg <= output_next;
  27.     end
  28. end
  29.  
  30. assign input_changed = prvi_reg ^ drugi_reg;
  31.  
  32. always @(*) begin
  33.     prvi_next = bouncing;
  34.     drugi_next = prvi_reg;
  35.     counter_next = input_changed?0:(counter_reg+1);
  36.     output_next = input_stable?drugi_reg:output_reg;
  37. end
  38.  
  39. assign input_stable = (counter_reg == (2**CNT_WIDTH - 1))?1'b1:1'b0;
  40. assign debounced = output_reg;
  41. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement