TODOPIC

Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: Lunalovegood en 09 de Junio de 2021, 09:41:46

Título: circuito antirrebotes
Publicado por: Lunalovegood en 09 de Junio de 2021, 09:41:46
Hola a todos, estoy realizando un proyecto, en VHDL, para la placa Basys 3. El proyecto consiste en escribir en un display OLED a traves de un teclado hexadecimal.

El sistema a diseñar hace uso de una señal (CLK) de frecuencia igual a 100 MHz (periodo T=10 ns), la cual se genera en un oscilador presente en la placa Basys 3. Esta señal se va a utilizar como señal de sincronismo (reloj) de todos los módulos secuenciales del diseño. Por su parte, la entrada RST funciona como señal ASÍNCRONA de inicialización activa a nivel alto para llevar todos los bloques secuenciales a su estado inicial. 
Este es el esquema general

  - Tienes que ingresar para ver archivos adjuntos -  
Me encuentro diseñando el bloque KYPD_controller, en el cual hay que instanciar un circuito antirrebotes que siga el siguiente diseño.

  - Tienes que ingresar para ver archivos adjuntos -  

En primer lugar, estoy diseñando el circuito antirrebotes, denominado debounce_module, y  he realizado el siguiente diseño en VHDL pero no consigo avanzar y me gustaría que me echárais una mano para ve que le falta y como tendría que hacerlo. Gracias

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity debounce_module is
  port (
    RST   : in  std_logic;
    CLK   : in  std_logic;
    ROW_I : in  std_logic;
    CE    : in  std_logic;
    Q_I   : out std_logic);

end entity;
architecture rtl of debounce_module is
signal Q0 ,Q1 ,Q2 ,Q3 : std_logic :=   '0' ;
begin  -- rtl
process   ( CLK )   is 
 begin 
  if   ( CLK 'event   and  CLK =   '1' )   
  then Q0 <= ROW_I   ;
  Q1 <=  Q0 ;
  Q2 <=  Q1 ; 
  Q3 <=  Q2 ;
  end   if ; 

 end   process ;
 Q_I <=  Q0 and  Q1 and   ( not  Q2 );
 Q_I <=  Q1 and  Q2 and   ( not  Q3 );
 end  Behavioral ;   

end rtl;