Práctica #12.

Nombre de la práctica : Sumador/Restador de 6 bits en Psoc 5LP.

Nombre: David Santiago Martínez Molina

Código: 20181005164

Asignatura: Fundamentos de circuitos digitales

Programa : Ingeniería Electrónica

Docente : César Andrey Perdomo Charry


INTRODUCCIÓN: 

Durante este  informe se mostrará el desarrollo de la práctica #12. En  este laboratorio, se pretende implementar el laboratorio #10, que corresponde al sumador/restador de 6 bits, pero ahora se realizará en Psoc 5LP. Cabe recalcar que la resta se va a realizar por complemento a 2, teniendo en cuenta si A<B o no, mediante un comparador de 6 bits, esto se encuentra más detallado en el informe de la práctica #10 (Ver Práctica #10). También se podrá observar como se implementa la visualización dinámica en Psoc para visualizar el resultado, el número A o el número B, según desee la persona.

MATERIALES Y EQUIPOS:

    -Psoc 5LP   
    -Computador con Psoc Creator  
    -Tarjeta desarrolladora.
    -Cables con conectores.
    -Dip switch.
    -Display 7 segmentos.

METODOLOGÍA:  

Teniendo en cuenta la manera en que se implemento el sumador/restador de 6 bits en la práctica #10, lo primero a realizar es el banco de memoria, en donde estarán guardados los datos A y B, pero para esta práctica el banco de memoria lo realice con Flip - Flops tipo D, de la siguiente manera:

Entonces como se puede observar, en la parte izquierda se encuentran los 6 dígitos ingresados por el usuario (D0,D1....D5), y en la parte inferior se encuentra el selector A_B, que  permite elegir si se quiere ingresar el dato A(0 lógico) o el dato B(1 lógico). Se pueden ver los salidas A0,A1,...,A5 y B0,B1,...,B5, que corresponden a los datos ingresados de A y B, que ya quedan guardados en el banco de memoria.
Ya con el banco de memoria realizado, el siguiente proceso es implementar el comparador de 6 bits que nos dice si la los datos de A son menores que B y dependiendo de esto, se realiza el complemento a 1 de A o de B. El comparador fue realizado a partir de 1 comparador de 4 bits y 1 comparador de 2 bits unidos con un circuito que me permite tener las tres salidas de A>B(G),  A=B(E), A<B(L), pero para este circuito solo nos interesa la salida A<B (L).  Entonces quedó de la siguiente manera:


Implementando el comparador al banco de memoria se tiene:


Con esta parte realizada lo siguiente a implementar es el sumador de 6 bits, este sumador fue realizado a partir de sumadores de 2 bits que se hicieron con 3 Mux 16 a 1, igual que en la práctica #10.  Entonces para el sumador de 2 bits el circuito construido es:

Para ver exactamente como se realizo este sumador y la manera en que se implemento con los Mux recomiendo ver la práctica #9 (Ver práctica #9). 
Y ahora a partir de este sumador de 2 bits, se construyo el sumador de 6 bits, de la siguiente manera:

Entonces con el sumador que ya se tiene, faltaría implementar la resta. Como lo mencione anteriormente, la resta se realizará por complemento a 2. Es necesario recordar que para realizar el complemento a 2, primero se realiza el complemento a 1, que es cambiar 0 por 1 y 1 por 0, y se le suma 1 a este resultado, y con esto ya se tiene el complemento a 2.
Teniendo en cuenta la salida del comparador, se tienen dos casos, un caso es cuando A>B, y la resta se realiza aplicando el complemento a 2 al número B, y este se suma al número A y el otro caso es cuando A< B, y para solucionar esta resta se tiene que hacer el complemento a 2 del número A y se suma al número B, o también se puede hacer aplicando el complemento a 2 al número B (como ocurre cuando A>B) y la suma obtenida se vuelve a complementar y este es el resultado final. Para este laboratorio aplique la opción de complementar A o B, dependiendo de si A<B, como mencione anteriormente. Para realizar el complemento a 1 utilice compuertas  XOR y colocando 1 entrada común para cada dato (A y B), de la siguiente manera: 


Las entradas A y B dependen, de si se tiene una suma o una resta, y de la salida que se tenga en el comparador, o sea si A< B. Esto quiere decir que solo se va a complementar A, cuando se tiene una resta y A<B. Y solo se complementa B, cuando se tiene una resta y la salida del comparador es 0 (o sea A=B o A>B). Aplicando lo anterior al circuito, se realizo así:

Donde LN corresponde a la salida del comparador negada, L la salida del comparador sin negar y Cin es la entrada que nos permite realizar la suma o resta. Ahora para realizar el complemento a 2, el 
1 que se suma, viene de la entrada Cin, que es la que me va a permitir tener un sumador o un restador. 
Ya con el restador implementado, solo quedaría mostrar el signo y la corrección al aplicar el complemento a 2. Hay que tener en cuenta que cuando se realiza una resta por complemento a 2 siempre se genera un bit de más y este se descarta. Entonces para corregir este bit y para mostrar el signo se tiene que cuando se quiere una suma , o sea S/R=0, el signo siempre va a ser positivo, y para Bit de salida 6, se va a tener el valor que salga de Cout. Y cuando se tiene la resta, para que el signo sea negativo se tiene que tener que A< B, y en el Bit de salida 6 se tiene que no puede ser 1, y así se corrige el bit de más de la resta por complemento a 2.  
Implementando todo lo anterior, junto con la corrección del complemento a 2, el circuito del SUMADOR/RESTADOR de 6 bits quedaría de la siguiente manera:


Visualización dinámica:
Faltaría implementar la visualización del resultado, del número A y del número B en los displays 7 segmentos teniendo en cuenta la visualización dinámica. Entonces para poder ver esto, utilice un Mux de 4 a 1, en el que cada entrada es un bus de 7 bits, o sea un Mux de 28 a 7, lo que significa que se tienen 2 selectores, estos selectores son los que permitirán ver en los displays el resultado, el número A o el número B, según la combinación que se tenga. Dichas combinaciones corresponden a:


Esto se logra colocando en las respectivas entradas del Mux, los datos de la visualización que se desea obtener. Y quedaría de la siguiente manera:


Como se observa en la entrada del bus 0, se encuentran los datos del resultado de la suma o resta, en el bus 1 se encuentran los datos del registro A, y en el bus 2 se encuentran los datos del registro B. Además se observa que el dato más significativo de A y B (Datos_A[6], Dato_B[6]) se le asigna un 0, ya que los datos ingresados de A y B son de 6 bits. 
Se tiene que a la salida del Mux hay un número de 7 bits, pero para poder visualizar este número en los displays, es necesario convertirlo a BCD. Esto se logra a partir del integrado 74185 que una de sus funciones es ser un conversor de binario a BCD. Y para implementar dicho integrado en Psoc, lo realice a traves del LUT, teniendo en cuenta la tabla de verdad de su funcionamiento, basándome en su hoja de datos (Ver hoja de datos Integrado 74185) , y quedaría de la siguiente manera:



Se puede ver que el conversor de binario a BCD es de 5 bits, pero como mencione anteriormente, la salida del Mux es de máximo 7 bits, para ellos se realizan las siguientes conexiones utilizando 3 de estos conversores, y se obtiene un conversor de binario 7 bits a BCD:


Las salidas C0 a C3, corresponden a las unidades, las salidas C4 a C7 a las decenas y la salida C8 corresponde al bit menos significativo de las centenas. En este punto ya se tiene el número en BCD ahora para implementar la visualización dinámica la realizare con un contador de dos bits, que se encuentra en Psoc como BasicCounter, que va tener un 1 en la entrada enable y para el Reset  se va a tener en cuenta las salidas y con una compuerta AND se logrará que el contador llegué a los bits 10 y después se resetee. También sus salidas van conectadas a un decodificador 2 a 4, que me permitirá poner en 0 los pines comunes para cada display, que corresponden a Unidades, Decenas y Centenas ya que se tienen 4 displays de cátodo común. Para poder percibir de una mejor manera la visualización dinámica el clock implementado tiene una frecuencia de 600Hz,  y esto nos permite que el ojo humano no sea capaz de percibir el cambio. Entonces el circuito implementado es: 


Y el circuito del decodificador:

Ahora para pasar los datos de las unidades,decenas, y centenas a los displays, es necesario realizar un Mux de 16 a 1, para esto igual que antes, se utiliza un Mux 4 a 1 poniendo en cada entrada un bus de 4 bits. Los selectores de este Mux van conectados con las salidas del contador mencionado anteriormente. Teniendo en cuenta esto, las salidas del Mux van conectadas a un decodificador de BCD a 7 segmentos y ya se tiene la visualización dinámica deseada. De esta manera el circuito para realizar la visualización en los displays queda así:


Hay que tener en cuenta que en la visualización también se tiene que poder ver el signo del resultado cuando es una resta y el número A es menor que el número B. En la imagen anterior se puede ver que se encuentra un componente adicional conectado a las salidas del decodificador BCD a 7 segmentos, este componente es el que me permite visualizar el resultado, el número A, y el número B con su signo correspondiente. Para realizar este componente, hay que tener en cuenta que cuando algún número es negativo se deben des-habilitar las salidas de los segmentos, excepto la salida del segmento g, ya que este es el que permite visualizar el signo - . Analizando esto, los casos donde únicamente se mostraría el signo serían los siguientes:


Teniendo en cuenta que los selectores de visualización (Selec1 y Selec0) cuando están en 00, se tiene que visualizar el resultado y cuando están en 01 se visualiza el número A, y  que las salidas del contador (Sel1 y Sel0), que a su vez son los selectores del Mux, cuando están en 10 se tienen las centenas y en ese display es donde se requiere que se visualice el signo según corresponda. Entonces la función de salida corresponde a:

Aplicando álgebra de Boole se tiene:

Esta ecuación corresponde a la salida cuando se necesita mostrar el signo, pero cabe recordar que también hay que des-habilitar los otros segmentos y solo se tiene activo el segmento g. Esto se realiza con compuertas AND y colocando una entrada común que va a ir a la función de SALIDA negada. Quiere decir que cuando SALIDA sea 1, o sea se visualiza el signo, los segmentos del a al f seran des-habilitados. 
Implementando el circuito se tiene:


Finalmente, ya se obtiene la visualización dinámica del resultado, número A y número B, con el respectivo signo, según la operación. Por ende, el circuito total del SUMADOR/RESTADOR de 6 bits con visualización dinámica es:



ANÁLISIS DE RESULTADOS:  

Con el circuito ya realizado en Psoc, ahora solo queda comprobar su funcionamiento, utilizando la tarjeta desarrolladora. Por ende las conexiones necesarias para probar este circuito requeridas por el docente son:


Siguiendo este montaje, las conexiones realizadas en la tarjeta desarrolladora quedan de la siguiente manera:



Entonces con el montaje ya realizado y con las conexiones adecuadas, en el siguiente vídeo se muestra su funcionamiento:

LINK DEL VÍDEO : https://youtu.be/CJSb4IE-Eag



LINK DE LOS ARCHIVOS: Ver laboratorio #12

CONCLUSIONES: 

-Después de comprobar el funcionamiento del sumador/restador de 6 bits en la placa desarrolladora, se puede ver que funciona correctamente y se visualiza el resultado, el número A ingresado y el número B.
-A la frecuencia que puse para el contador, se puede ver que el efecto de la visualización dinámica  no es perceptible al ojo humano, y el efecto deseado es correcto. Tal vez si se pone a una frecuencia inferior a los 100Hz, ya se podría percibir el efecto.
-Después de ejecutar el programa, se pudo ver los recursos utilizados de UDB son:
        Macrocells: 39.58%
        Unique P-terms: 78.65%

FUENTES:

- Simulador utilizado : Psoc 5LP.
-Hoja de datos integrado 74185: https://pdf1.alldatasheet.es/datasheet-pdf/view/98237/TI/74185.html