Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module deglitcher (
- input wire clk, // el que tengas para tu sistema
- input wire clke, // enable de aprox. 100 Hz (10ms)
- input wire button, // entrada del boton con rebotes
- output reg button_deglitched // salida de la señal del boton sin rebotes
- );
- initial button_deglitched = 1'b0; // estas dos inicializaciones pueden ser todo 0
- reg [7:0] sr = 8'b00000000; // o todo 1 dependiendo del estado de reposo del boton.
- // p.ej. si al no pulsarlo, el botón envía un 0, entonces todo esto se inicializa a 0.
- // 7 bits estables a 10ms = 70ms estables antes de dar por bueno el estado del botón.
- always @(posedge clk) begin
- if (sr == 8'b01111111) // cambio el estado de la salida cuando
- button_deglitched <= 1'b1; // la entrada lleva 7 bits ya con el valor estable
- else if (sr == 8'b10000000) // La salida está registrada y sincronizada con el reloj
- button_deglitched <= 1'b0; // del sistema para evitar problemas de metaestabilidad.
- if (clke)
- sr <= {sr[6:0], button}; // sampleo el estado del botón cada aprox. 10ms.
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement