mcleod_ideafix

Modulo deglitcher para entradas de una FPGA

Oct 29th, 2020
1,113
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module deglitcher (
  2.   input wire clk,    // el que tengas para tu sistema
  3.   input wire clke,   // enable de aprox. 100 Hz (10ms)
  4.   input wire button, // entrada del boton con rebotes
  5.   output reg button_deglitched  // salida de la señal del boton sin rebotes
  6.   );
  7.  
  8.   initial button_deglitched = 1'b0; // estas dos inicializaciones pueden ser todo 0
  9.   reg [7:0] sr = 8'b00000000;       // o todo 1 dependiendo del estado de reposo del boton.
  10.                                     // p.ej. si al no pulsarlo, el botón envía un 0, entonces todo esto se inicializa a 0.
  11.   // 7 bits estables a 10ms = 70ms estables antes de dar por bueno el estado del botón.
  12.   always @(posedge clk) begin
  13.     if (sr == 8'b01111111)         // cambio el estado de la salida cuando
  14.       button_deglitched <= 1'b1;   // la entrada lleva 7 bits ya con el valor estable
  15.     else if (sr == 8'b10000000)    // La salida está registrada y sincronizada con el reloj
  16.       button_deglitched <= 1'b0;   // del sistema para evitar problemas de metaestabilidad.
  17.     if (clke)
  18.       sr <= {sr[6:0], button};  // sampleo el estado del botón cada aprox. 10ms.
  19.   end
  20. endmodule
  21.  
RAW Paste Data