Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module debouncer(
- input wire clk,
- input wire reset,
- input wire bouncing,
- output wire debounced
- );
- parameter CNT_WIDTH = 5;
- reg prvi_reg, prvi_next;
- reg drugi_reg, drugi_next;
- reg [(CNT_WIDTH-1):0] counter_reg, counter_next;
- reg output_reg, output_next;
- wire input_changed;
- wire input_stable;
- always @(posedge clk, posedge reset) begin
- if(reset == 1) begin
- prvi_reg <= 0;
- drugi_reg <= 0;
- counter_reg <= 0;
- output_reg <= 0;
- end
- else begin
- prvi_reg <= prvi_next;
- drugi_reg <= drugi_next;
- counter_reg <= counter_next;
- output_reg <= output_next;
- end
- end
- assign input_changed = prvi_reg ^ drugi_reg;
- always @(*) begin
- prvi_next = bouncing;
- drugi_next = prvi_reg;
- counter_next = input_changed?0:(counter_reg+1);
- output_next = input_stable?drugi_reg:output_reg;
- end
- assign input_stable = (counter_reg == (2**CNT_WIDTH - 1))?1'b1:1'b0;
- assign debounced = output_reg;
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement