martes, 20 de mayo de 2008

CONTROLADOR DEL TECLADO

Na primeira parte do diagrama de bloques podemos atopar a parte correspondente coa interface humana do sistema: o controlador do teclado. Este está deseñado para cumprir coa tarefa de xerar os sinais de entrada ao sistema cando o usuario pulsa algunha das teclas do teclado matricial.


Na páxina web do departamento puidemos atopar uns ficheiros que xa resolvían o noso problema, pero decidimos adaptalos á nosa aplicación para facer un deseño máis óptimo desde o punto de vista da FPGA (terminales, liñas, reloxos, ...)


Os cambios máis importantes atópanse no ficheiro ucf (fixemos un que realiza unha pequena proba do mesmo na placa), no controlador do teclado, na unidade de control (máquina de estados) e na interface, que é o ficheiro principal do proxecto, xa cos reloxos integrados e coas entradas e saídas correctas.


De calquera maneira, seguimos en liñas xerais os pasos da aplicación que se atopa na web. A nosa interface co teclado matricial consta de:

1) Unidade de control do controlador (ficheiro keypad_control_unit.vhd), que sincroniza os sinais de entrada e saída do teclado co sistema e co propio controlador. A súa función principal é mostrar en "fila(1:0)" e "columna(1:0)" o código da tecla pulsada á vez que se xera o sinal "pulsada" todo o tempo que a tecla estea pulsada.

2) Temporizador do teclado (keypad_timer.vhd), que temporiza determinados retardos necesarios na máquina de estados da unidade de control. Estes son de exactamente 5 e 500 milisegundos.

3) Divisor de frecuencia (frequency_divider.vhd), que xera o sinal de 1kHz a partir dun reloxo de 50MHz que usaremos para a aplicación.


4) Interfaz do teclado sen o divisor de frecuencia (keypad_16_kaeys_interface.vhd), onde se instancian as tres unidades anteriores.

4) Ficheiro principal (top_keypad_16_keys_interface.vhd), que realiza as funcións necesarias desta parte do diagrama de bloques, instanciando o divisor de frecuencia e a interfaz.


Para comprobar o bo funcionamento do sistema, seguimos a política de realizar simulacións con test benchs de todos e cada un dos ficheiros que necesitamos para realizar a interface co teclado matricial.


SIMULACIÓN TEMPORAL DO TEMPORIZADOR

Para comprobar o funcionamento de temporizador (keypad_timer.vhd) fixemos un test-bench no que se comproba a posta a un dos sinais de fin de temporización de 5 ms e de 500 ms, tras a excitación dos sinais de reset e de start. Para poder velo mellor, representaremos o resultado en dous anacos (un é un fragmento ampliado do outro):

a) Posta a un dos sinal de fin de temporización de 5ms:


b) Posta a un do sinal de fin de temporización de 500ms:


UNIDADE DE CONTROL DA INTERFACE

Por mor da natureza da aplicación e coa idea de poder optimizar o circuito, decidimos facer unha nova máquina de estados para que faga de unidade de control da interface co teclado matricial. Esto responde ás seguintes cuestións:

1)O sinal "pulsada" ha de permanecer a '1' todo o tempo que unha tecla estea pulsada no teclado, o que se pode implementar de maneira sinxela dende a máquina de estados.

2)Cando "pulsada" esté a '1' ten que haber un valor correcto en "fila(1:0)" e en "columna(1:0)", o que se produce cando o sinal "ce_key" estea a '1', que é unha das saídas da unidade de control.

3) Durante todo o tempo que se estea a pulsar unha das teclas ten que suceder o anteriormente descrito, cosa que a unidade de control anterior non facía, xa que ós 500 ms volvía facer unha nova exploración aínda que a mesma tecla seguira pulsada.

A máquina de estados implementada no ferramenta StateCad é a seguinte:

De cara á comprobación da mesma, onde se incluíu o sinal interno "sreg", que define o estado no que se encontra a FSM, estes son os resultados da simulación:

INTERFAZ CO TECLADO MATRICIAL DE 16 TECLAS

O esquemático final da interface co teclado é o seguinte (xa co divisor de frecuencia incluído):

A primeira instancia que se ve é o divisor de frecuencia usado para xerar o sinal de 1 kHz a partires do reloxo do sistema de 50 MHz e a outra instancia é a interfaz do teclado propiamente dita, con tódolos rexistros, máquina de estados, temporizador, ... necesarios para o funcionamento.

Da simulación temporal destacaremos dúas gráficas que amosan o bo funcionamento da interface, desde o punto de vista da exploración e das restriccións adicionais que lle engadimos ó sistema:

1) EXPLORACIÓN:
2) FUNCIONAMENTO:

No hay comentarios: