Laboratorio 10:Decodificador matricial y Biestables
Juan Pablo López Guevara 20171005073
Universidad Distrital francisco José de caldas. Bogotá octubre
2020
Introducción
Debido a la necesidad de manejar entradas como teclados y similar, agregamos ahora el teclado matricial de la tarjeta de desarrollo con el fin de no tener que usar los dip switch. Los transistores nos permiten almacenar datos en forma de bits, comprobaremos las tablas de verdad de los circuitos biestables disponibles en PSoC creator, así como programaremos algunos en Verilog.
Objetivos
- Implementar el decodificador de teclado matricial propuesto por la guía
- Con mapas, convertir el código resultante en código Binario
- Programar los biestables asíncronos por componentes y los sincronos por código Verilogl.
Marco Teórico
Teclado matricial
El uso de teclados para introducir información en un dispositivo es muy común debido a que simplifica el manejo de datos. Por esto, se encuentran ampliamente en dispositivos de uso cotidiano como cajeros y múltiples sistemas de seguridad.
Los teclados matriciales por lo general usan un arreglo de botones que se ubican por filas y columnas. Un teclado matricial 4x4 (como el de la tarjeta) permite manejar 16 botones con solamente 8 lineas. El método para saber que botón se ha presionado consta de un barrido en las filas de tal manera que se encuentre el botón presionado buscando un cero en las columnas.
 |
Figura 1. teclado matricial
|
Biestables
Existen de dos tipos, latch y flip-flop. Los latch son aquellos cuya respuesta solo depende de las entradas de exitación, pero no hay un control como un reloj. A diferencia de estos, los flip-flop se caracterizan por tener señales de control como lo puede ser un reloj. Sin embargo, en muchos de los casos podremos construir un flip-flop a partir del funcionamiento de un latch, como lo veremos en seguida.
Latch SR
Este tipo de biestable tiene 2 entradas y 2 salidas (la salida y su complemento). La tabla de verdad es la tabla 1.
 |
tabla 1. Tabla de verdad biestable SR
|
De aqui tenemos Q+=S+R'Q para compuertas NOR,
Q+=(S'*(R'Q)')' para compueras NAND
Así, tenemos 2 opciones para usar este latch
 |
Figura 1. Biestable SR con NOR
|
 |
Figura 2. Biestable SR con NAND
|
Flip-flop SR
Para construir este flip-flop, basta con agregar un habilitador de las entradas S y R. Para hacerlo con el mismo tipo de compuerta, analizaremos el comportamiento de una compuerta NAND como habilitador (negativo).

Si tomamos la entrada A como reloj, veremos que cuando es 0, tenemos siempre de salida HIGH (lo que en logica negativa seria 0) y cuando tenemos 1, tenemos el complemento de B. Esto nos permite hacer un habilitador para el circuito de la figura 2. de donde este será la señal reloj.
 |
Figura 3. Flip-flop SR
|
 |
Tabla 2. Flip-flop SR. No cambia de estado si E no esta en HIGH
|
Latch D (delay)
Sirve a modo de memoria o como delay. Su tabla de verdad es la siguiente
y su funcion logica es Q+=D
Podemos construir un latch D a partir del latch SR de la figura 1.
 |
Figura 4. latch D a partir de SR
|
Flip-flop D
A partir del flip flop SR de la figura 3 podemos construir el flip-flip D
latch jK
Es la mejor del SR, eliminando la restricción en que no podian ser iguales en nivel alto las entradas. Su tabla de vedad es la siguiente
y su funcion logica es Q+=QK'+Q'J
Flip-flip JK
Básicamente, aprovechamos la logica del Flip-flop SR agregándole una nueva entrada para el reloj

Latch T
Basicamente es un latch JK con ambas entradas (J y K) en una unica entrada, su tabla de verdad es la siguiente
y su función lógica es Q+=T'Q+TQ'=T(+)Q
Flip-Flop T
Es un flip-flop JK con las entradas J y K siendo la misma

Metodología
Para este laboratorio, implementaremos el circuito dado en la guía, tomaremos la tabla de datos de salida del teclado matricial, usando mapas construiremos un deco para convertirlos a binario y programaremos los biestables vistos en el apartado anterior.
Decodificador de teclado matricial
 |
| circuito dado en la guía |
Para implementarlo más facil, crearemos un bloque para el deco2a4 y el codificador 4 a 2.
 |
| Decodificador 2 a 4 |
 |
| Codificador 2 a 4 |
Así, tenemos la implementación del decodificador dado en la guia
 |
| Decodificador matricial |
Usando este decodificador, encontramos la siguiente tabla de verdad
Por medio de mapas, encontramos las siguientes funciones logicas
para B0
y su función lógica resumida sería: S3(S1S2'+S0S2)+(S1+S3)'
Para B1
y su función lógica B1=(S0+S1)'S2+S1(S2+S3)'+S0(S2'+S1'S3)
Para B2
Y su función lógica B2=S3((S0+S2)'+S0S1')+S2(S0(+)S1)'
Para B3
y su función logica B3=S0(S2+S1)+S2(S1(+)S3)
Luego juntamos todo en un único deco
Así juntamos ambos circuitos y tenemos el siguiente resultado
Biestables
Comenzamos por los Biestables asíncronos
SR
D
JK
T
ahora con los síncronos (código verilog)
SR (usando compuertas nand, figura 2)
D
JK (usando case, ya que de la forma vista en el apartado teórico nos surgieron problemas)

T (instanciando el JK anterior)
A través de este link podemos evidenciar el funcionamiento de los circuitos desarrollados en esta practica.
Conclusiones
Concluimos que claramente es importante el uso de la tarjeta de desarrollo, ya que sin esta no seriamos capaces de evidenciar correctamente los errores a la hora de programar los pasos en verilog, ya que como nos pasó con el biestable sincrono JK, tuvimos que recurrir a un case recomendado en internet, ya que el circuito no tenia el comportamiento deseado cuando se usaban compuertas.
Es más que claro que se comprobó que los biestables son circuitos secuenciales en los que toca tener en cuenta los estados anteriores para entender el estado siguiente. Estos nos brindan un gran abanico de posibilidades, desde memorias, comparadores, divisores de frecuencia y demás.
Por otro lado, vemos lo útil de usar teclado envés de usar los pull up de la tarjeta, ya que aumenta la comodidad del usuario.