TEMA 8: SUMADORES Y RESTADORES A NIVEL SSI Y MSI. UN EJEMPLO DE APLICACIÓN: EL SUMADOR BCD



BREVE INTRODUCCIÓN A LOS NIVELES DE INTEGRACIÓN

SSI y MSI son niveles de integración de compuertas lógicas. Ustedes investigarán acerca de ésto en su trabajo especial pero de igual forma aquí les hablaré básicamente qué es eso y con qué se come.

Los niveles de integración son:

SSI: (Small-Scale Integration o integración a pequeña escala). Es el nivel de integración más básico y comprende todos aquellos circuitos integrados (desde ahora IC por sus siglas en inglés) que poseen hasta un máximo de diez (10) compuertas. (He leído documentación que habla de hasta doce compuertas, pero decidí tomar esta descripción debido a que aparecía en más oportunidades y porque me parece más lógico debido a las compuertas que integran el resto de los niveles). En este nivel tenemos las compuertas lógicas como las NAND (por ejemplo, el IC 7400 tiene 4 compuertas NAND de dos entradas), las NOT (IC 7404 con 6 compuertas NOT), las AND (IC 7408 de 4x2), las OR (IC 7432 de 4x2), las XOR (IC 7486), memorias de 1 bit, flip-flops, el IC7480 que es un sumador completo de 1 bit, etc. Estas compuertas integran de 10 a 100 transistores.

MSI: (Medium-Scale Integration o integración de mediana escala). Es el nivel de integración que le sigue al SSI. Comprenden IC de que tienen entre 10 y 100 compuertas (entre 100 y 1000 transistores). En este campo tenemos memorias de palabra (8 bits), multiplexores, decodificadores, sumadores completos -entre ellos el IC7482 que es de 2 bits y el 7483 que es de 4 bits-, registros, contadores, etc.)

LSI: (Large-Scale Integration o integración de alta escala). Comprenden IC's de entre 100 y 1000 compuertas (o entre 1000 y 10000 transistores. Tenemos como ejemplos aquí : memorias ROM y RAM, ALU's (Unidades Lógicas y Aritméticas), microprocesadores de 8 y 16 bits, PLD (Dispositivos Lógicos Programables), etc.

A parte de éstos están los VLSI (Very Large-Scale Integration) que tienen entre 1000 y 10000 compuertas y ahora los ULSI (Ultra Large) que son usados en los procesadores más modernos como los de 32 bits.

Todos los IC comentados hasta ahora son de la serie TTL 74XX que será los que más usemos en los próximos meses. La serie CMOS es la 4000.

Más información en: http://en.wikipedia.org/wiki/Integrated_circuit



SUMADORES

Antes de empezar quisiera recordarles las compuertas XOR (el símbolo de la operación es un signo de más circunscrito pero por comodidad usaremos aquí el ◊ para no tener que agregar una imagen cada vez que se requiera mostrar el signo. OJO no es una convención natural, me lo acabo de inventar por comodidad).La XOR u OR exclusivo es parecida a la OR con la única diferencia que para cuando sus entradas son ambas 1 la salida es cero (por eso lo de exclusivo). La función XOR pude por supuesto ser presentado con compuertas AND, OR y NOT. Por ejemplo, la función F = A ◊ B (Léase A XOR B), es también F = A'B+AB'. Existe también la compuerta XNOR o NOR exclusivo que es la función negada de la XOR. El símbolo de ésta es un punto en el centro de un círculo. La función F= A XNOR B tiene su equivalencia en F = AB+A'B'. Recuerden que los diagramas de las compuertas XOR y XNOR son:


y


respectivamente.

Dicho ésto, empecemos por hablar del “semisumador”. El circuito semisumador (o H.A. Por Half Adder) es aquel que realiza la suma de dos bits SIN tomar en cuenta algún posible acarreo previo.

Digamos que A y B son los bits a sumar, que S es la suma de ellos y que Co es el bit de acarreo de salida, la tabla de la verdad de este circuito es:

A

B

S

Co

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

Vemos entonces que Co(A,B)=∑(3) y que S(A,B)=∑(1,2). Resolviendo estas funciones obtenemos que: Co = AB y S = A'B + AB'. Si ven la última función se dará cuenta de por qué razón les hablé antes de la compuerta XOR. O sea, que S=A◊B. La diagramación de este circuito es:


Ok. Pero este circuito nos serviría como sumador de un sólo bit (o para el bit menos significativo de una suma) pero en realidad es de poca utilidad para sumas de varios bits. En los casos que se requiera un sumador de varios bits, se hace uso de un Sumador Completo (F.A. Por Full Adder).

Veamos entonces como sería un sumador completo de 1 bit (lo que es el IC 7480 internamente).

Digamos que A y B son los bits a sumar, que S es la suma de ellos, que Ci es el acarreo de entrada y que Co es el bit de acarreo de salida, la tabla de la verdad de este circuito es:

Ci

A

B

Co

S

0

0

0

0

0

0

0

1

0

1

0

1

0

0

1

0

1

1

1

0

1

0

0

0

1

1

0

1

1

0

1

1

0

1

0

1

1

1

1

1

Analicen la tabla y corrobórenla.

De la tabla observamos que: Co(Ci,A,B)=∑(3,5,6,7) y que S(Ci,A,B)=∑(1,2,4,7). O sea que Co=A'BCi+AB'Ci+ABCi'+ABCi y S=A'B'Ci+A'BCi'+AB'Ci'+ABCi. Simplificando vemos que:

Co=AB+ACi+ BCi

y que S=Ci'(A'B+AB')+Ci(A'B'+AB), como (A'B'+AB)=(A'B+AB')'=(A◊B)' (XOR es una XNOR negada), si cambiamos las variables (para verlo fácil) y hacemos (A◊B)=T => S=Ci'T+CiT' => S = CiT , entonces

S=Ci◊A◊B

Si doble negamos la función del acarreo de salida para implementar con compuertas NAND, obtendríamos la función Co=[(AB)'(ACi)'(BCi)']' y el diagrama del circuito se vería:




Este es un sumador completo de un bit, el mismo implementado en el IC 7480. En forma de bloque veríamos algo como:




Estas implementaciones son hechas con puras compuertas y los IC's usados usan menos de 10 de ellas por lo que estos sumadores son a nivel de SSI. Si queremos construir un sumador de, por ejemplo, 4 bits, deberemos poner en cascada cuatro sumadores completos de un bit tal como se muestra a continuación:


Esto no es más que el IC 7483 (que es un sumador a escala MSI debido al número de compuertas que éste usa). El IC7483 es algo como:




y estos sumadores a su vez también pueden ser organizados en cascada para implementar sumadores de 8, 12, 16, ... 4n, bits. El acarreo de entrada del primer sumador (quien incluirá el bit menos significativo) debe ir a tierra para indicar el cero.

Recuerden, cuando la implementación se hace con puras compuertas lógicas, el tipo de circuito integrado usado tiene nivel de integración SSI. Puedo diseñar un circuito con 30 compuertas lógicas, pero por el sólo hecho de usar sólo compuertas, estamos realizando la implementación a nivel SSI. Si en nuestro circuito usamos, además de las compuertas, también IC's como el sumador de 4 bits IC7483, estamos haciendo una implementación que usa tecnología a nivel MSI. O sea, que si les digo que diseñen un sumador BCD a nivel SSI quiere decir que pueden usar única y exclusivamente chips de compuertas lógicas como el 7400, 7408, etc pero si les digo que pueden realizar su implementación a nivel MSI, quiere decir que pueden incluir IC's como por ejemplo el 7483 en su diseño.

Otro punto de vista para ver el sumador completo en: http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/fulladd.html

Quisiera comentar algo: cuando se realiza la suma de dos números en paralelo, utilizando sumadores completos, se supone que todos los bits están disponibles al mismo tiempo para poder realizar la operación; sin embargo, esto no sucede en forma instantánea, ya que analizando el circuito de la Figura 2a, se observa que para obtener el acarreo de salida se tiene más de un nivel de ejecución y el tiempo de propagación total será igual al retardo de propagación de una compuerta típica multiplicado por el número de niveles de ejecución en el circuito. Por lo tanto, si observamos el circuito de la Figura 3, el tiempo mayor de propagación será el tiempo que se tome el bit de acarreo en propagarse por los sumadores completos. Como cada bit de salida de la suma depende del valor del acarreo de entrada, esta salida ocurrirá solamente cuando el bit de acarreo se haya propagado. Por ejemplo S3, de la Figura 3, ocurrirá solamente cuando C3 se genere, pero a su vez C3 se genera cuando S2 ocurra y S2 ocurre cuando se genera C2, y así sucesivamente. El tiempo de propagación del acarreo es un factor que limita la rapidez con que se suman dos números en paralelo y si recordamos que las operaciones aritméticas se efectúan por medio de sumas sucesivas, el resultado obtenido viene siendo crítico, si no se le da el tiempo necesario para la propagación del acarreo. Una de las técnicas más usadas es haciendo “Circuitos Generadores de Acarreo”, la cual probablemente será explicado en el futuro de ser necesario y si nos da tiempo.

RESTADORES

De la misma forma que pueden implementarse circuitos sumadores, pueden también implementarse los restadores. Veamos primero el caso del semi-restador. Para éste, asumiendo que tenemos la resta de A – B siendo A y B bits, R el resultado de la resta y Po el bit de “préstame”, tenemos la siguiente tabla de a verdad:

A

B

R

Po

0

0

0

0

0

1

1

1

1

0

1

0

1

1

0

0

ya que 1-1 = 0-0 = 0, 1-0=1 y, el más interesante, 0-1 que debe pedir 1 prestado para formar la resta 10-1 = 1 y por esa razón en este caso la resta es 1 y el bit de préstame también es 1.

Como ya se ha comentado, y veremos con más calma más adelante, lo normal en los sistemas lógicos y la forma en que las computadoras procesan los números negativos es a través del complemento a dos del número. Es por ello que en las computadoras el bit más significativo representa el bit de signo. Si está activo se dice que el número es negativo y el valor del mismo es el complemento a dos de dicho número. Así pues, para el caso de 0-1, tenemos que el resultado es 11, que es negativo y cuyo complemento a dos es 1, por lo que representa el -1... correcto. OJO: El bit más significativo es el Po .

Vemos entonces que R(A,B)=∑(1,2) y que Po(A,B)=∑(1). Resolviendo estas funciones obtenemos que: Po= A'B y R = A'B + AB'. Si ven la última función se darán cuenta de que es igual al resultado en la operación de la suma, o sea, R=A◊B. La diagramación de este circuito, y un diagrama en bloque del mismo, se ve a continuación:




Para el caso del restador completo, tenemos la siguiente tabla:


A

B

Pi

Po

R

0

0

0

0

0

0

0

1

1

1

0

1

0

1

1

0

1

1

1

0

1

0

0

0

1

1

0

1

0

0

1

1

0

0

0

1

1

1

1

1

De la tabla observamos que: Po(A,B,Pi)=∑(1,2,3,7) y que R(A,B,Pi)=∑(1,2,4,7). O sea que Po=A'B'Pi+A'BPi'+A'BPi+ABPi y R=A'B'Pi+A'BPi'+AB'Pi'+ABPi. Simplificando vemos que:

Po=A'B+A'Pi+ BPi

Si lo negamos dos veces para tener su forma con compuertas NAND tendríamos que

Po=[(A'B)'(A'Pi)'(BPi)']'

y que R=Pi'(A'B+AB')+Pi(A'B'+AB), como (A'B'+AB)=(A'B+AB')'=(A◊B)', entonces

R=Pi◊A◊B

función que es igual a la de la suma.

El diagrama del circuito restador completo y su respectivo diagrama de bloque lo vemos a continuación:



Como ya les comenté, las computadoras actuales utilizan complementos a dos (aparte de por lo práctico que resulta trabajar con los resultados, debido a que con el complemento a 1 podría haber ambiguedad con el número cero) para efectuar la operación resta y para la representación de números negativos. Los complementos se usan en las computadoras para simplificar y hacer más rápidas las operaciones aritméticas. La forma en que funciona la resta por complemento ya ha sido estudiada por lo que no será revisada aquí (si lo desea puede volver a ver el tema 1 y releer la parte de resta por complemento). Entonces, de todo ésto podemos inferir que para realizar restas podemos usar también nuestros circuitos sumadores tradicionales ya que la representación de los números negativos vendrá dada por un “1” en el bit más significativo del número y el complemento a dos del resto de los bits.

Entonces, la forma más fácil de trabajar con números negativos es asumiendo que en nuestros circuitos todos ellos estarán expresados en la forma de complemento a dos. Veamos un par de ejemplos: Si queremos realizar la resta: 7-3 en binario, tenemos que (7)10=0111 y que (-3)10=1101. Al realizar la suma tenemos que el resultado es 0100 con acarreo 1. Sabemos que en el caso de restas por complemento a dos, este acarreo no tiene efecto, por lo que el resultado es correcto y es (4)10. Pero que pasa si hacemos 3-7. Aquí (3)10=0011 y (-7)10=1001. La suma es 1100 SIN acarreo que es un número negativo y representa al (-4)10 lo que es correcto. Cuando trabajamos de esta forma debemos estar consientes de que 1010 NO representa el número 10 sino al -6. Con cuatro bits sólo podemos trabajar con números comprendidos entre -8 y 7 (Obvio), así que si queremos trabajar con números más grandes debemos trabajar a su vez con más bits.


Si en todo caso, queremos “convertir” los números positivos a complemento a dos en nuestros circuitos (por cualquiera que fuera la razón), podemos sencillamente implementarlo con el uso de inversores y un sumador para sumar el uno necesario para convertir el complemento a uno en complemento a dos, o usando también circuitos sumadores en el que una de las entradas tenga una implementación con compuertas XOR, tal y como se vio en clase y que por razones de tiempo no colocaré el diagrama aquí ahora (4 XOR, cada uno de dos entradas siendo una de las mismas común a las 4 compuertas... en el caso que esta entrada común sea cero, las otras cuatro entradas pasarán directas o si es uno, negándolas y llevando ese mismo uno a la pata de acarreo de entrada para sumar el uno necesario para convertir un complemento a uno a un complemento a dos. Este circuitos sirve para sumas, con cero en la entrada común de las xor, y para restas con un uno. De haber acarreo, éste sólo debe ser considerado si se está realizando una suma).


UN EJEMPLO DE APLICACIÓN: EL SUMADOR BCD

Veamos ahora un ejemplo usando los sumadores 7483, en este caso particular el de la suma BCD.

Como ya hemos dicho, posiblemente el código más comúnmente empleado sea el CÓDIGO DECIMAL CODIFICADO EN BINARIO, generalmente llamado código BCD, utilizado en computadoras digitales para representar números decimales. Una característica particular de este código es que por cada dígito decimal se requieren 4 dígitos binarios (bits), esto quiere decir que se tendrán 16 combinaciones, de las cuales sólo son válidas del 0 al 9, quedando como opcionales 6 combinaciones.

Fíjense, las sumas 1+2=3, 3+4=7, 8+1=9, etc, o sea, todas cuya suma sea menor o igual a nueve no tienen problemas en BCD ya que todas esas sumas son iguales en binario y en BCD. Pero en el caso de 5+5=10, que es 0101+0101 el resultado es 1010 que tiene sentido en binario pero NO en BCD. El resultado en BCD es 1 y 0000, que son los dos códigos binarios de los números decimales 1 y 0 que juntos representan el 10. Recuerden que los números BCD son una forma de trabajar los números DECIMALES pero expresados con código binario. Entonces, toda suma cuyo resultado esté por encima de 9 debe tener un procesamiento especial. Por otro lado, el número máximo que puede formarse de la suma de dos números BCD es el 18 (9+9) o en todo caso el 19 si tomamos en cuenta el acarreo de entrada (9+9+1). La primera etapa de nuestro circuito es elemental, son nuestros dos números binarios de entrada a un circuito sumador. Lo que requerirá de procesamiento será la salida de esta primera etapa.

Veamos entonces la siguiente tabla de la verdad:

Resultado de la suma en decimal.

Resultado de la suma en Binario

Resultado de la suma en BCD (binario corregido)


C4

S3

S2

S1

S0

Cn

R3

R2

R1

R0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

0

1

0

0

0

0

1

2

0

0

0

1

0

0

0

0

1

0

3

0

0

0

1

1

0

0

0

1

1

4

0

0

1

0

0

0

0

1

0

0

5

0

0

1

0

1

0

0

1

0

1

6

0

0

1

1

0

0

0

1

1

0

7

0

0

1

1

1

0

0

1

1

1

8

0

1

0

0

0

0

1

0

0

0

9

0

1

0

0

1

0

1

0

0

1

10

0

1

0

1

0

1

0

0

0

0

11

0

1

0

1

1

1

0

0

0

1

12

0

1

1

0

0

1

0

0

1

0

13

0

1

1

0

1

1

0

0

1

1

14

0

1

1

1

0

1

0

1

0

0

15

0

1

1

1

1

1

0

1

0

1

16

1

0

0

0

0

1

0

1

1

0

17

1

0

0

0

1

1

0

1

1

1

18

1

0

0

1

0

1

1

0

0

0

19

1

0

0

1

1

1

1

0

0

1

S es la salida originada por la suma de nuestra primera etapa del circuito y C4 es el acarreo generado en la misma. Vemos que los resultados en AZUL son los generados por nuestra primera etapa. Vemos que para nuestro circuito de salida ninguno de los resultados en VERDE CLARO requieren corrección (El resultado en BCD es el mismo que en binario). En cambio, para todos nuestros resultados en ROJO si requeriremos de una corrección.

De aquí podemos concluir que el “procesamiento especial” al que hice referencia puede resolverse con tan sólo sumar 6 (0110) a los resultados de la suma de nuestra primera etapa cuyos valores estén por encima del nueve (ejemplos: 10=1010 que + 0110 es 1 0000, 12=1100 que + 0110 es 1 0010, 19=10011 que + 0110 es 1 1001) y que en todos los casos que se requieren corrección el bit más significativo de nuestro resultado a obtener es UNO (Cn=1). CONCLUSIÓN: R=S si S<=9 y R=S+6 si S>9.

De la tabla también podemos también obtener que: Cn(C4,S3,S2,S1,S0)=∑(10,11,12,13,14,15,16,17,18,19) o lo que es lo mismo: Cn=C4+F(S3,S2,S1,S0) donde F(S3,S2,S1,S0)=∑(10,11,12,13,14,15). Este es en realidad nuestro circuito corrector ya que será éste quien indique cuando es que deben sumarse 0110 (como ya comenté, la corrección es siempre que Cn=1).

Ejercítese con mapas de K. y resuelva las funciones anteriores. Se dará cuenta de que el resultado de la simplificación es: Cn=C4+S3S2+S3,S1 y que a su vez, llevándolo a compuertas universales en este caso a NAND, será: Cn=[(C4)'(S3S2)'(S3,S1)']'

Veamos entonces nuestro circuito:




Analizando el circuito, se observa que en los resultados del 0 al 9 no se se realiza ninguna corrección. Por ejemplo, si el resultado es 1001 (910), C4=0 y la salida de la compuerta (1) es 1; S3=1 y S2=0, por lo que la salida de la compuerta (2) es 1; para la compuerta (3), las entradas son 1 y 0 y la salida es 1. Las tres entradas de la compuerta (4) son 1, lo que da como resultado que su salida sea 0. En forma similar se analizan los resultados del 10 al 15 y del 16 al 19 (este último el más fácil de explicar ya que al ser C4=1 la salida de la compuerta (1) es cero por lo que automáticamente la salida de la compuerta (4) es 1); en estos casos la salida Cn=1, por lo que se requiere la corrección y el 1 generado en el circuito corrector va a las entradas del segundo sumador para originar el 0110 (610) así como también a formar parte del número final usándose como el bit más significativo de nuestro resultado en BCD. Como algunos notarán, en todos los casos en que se usa la corrección el acarreo del segundo sumador es 1. Este bit de acarreo SI puede ser usado como el bit más significativo del resultado BCD. Lo único que podría ser una factor importante a tomar en cuenta es el tiempo de propagación. Obviamente Cn está disponible antes que el acarreo de salida del segundo sumador y es por ello que suele usarse éste sobre todo si se colocarán varios circuitos de este tipo en cascada. Por lo tanto, si el tiempo no es un factor importante en su circuito, es indiferente usar cualquiera de los dos, así que pueden utilizar el que le resulte más cómodo de cablear.

Espero que les haya quedado claro. Cualquier cosa pregúntenme en la clase virtual. Ahora les dejo algunos ejercicios.

EJERCICIOS

  1. Diseñe un circuito combinacional para obtener el complemento a 2 y el complemento a 1, a partir del código binario de 4 variables.

  2. Obtener el diagrama lógico de un sumador completo de dos variables A y B, usando sólo compuertas NAND.

  3. Diseñe un circuito lógico que genere el complemento a NUEVE de un número en BCD de 4 bits. Utilice para tal fin el sumador completo de 4 bits 7483.

  4. Usando 4 compuertas XOR y un circuito MSI de sumadores completos de 4 bits (7483), construya un sumador-restador paralelo. Use una variable de selección de entrada Op, de tal manera que cuando Op=0 el circuito sumará y cuando Op=1 este restará. Ya saben como hacerlo ya que se vio en clases.

  5. Diseñe un multiplicador binario que multiplique un número de 4 bits B=b3b2b1b0 por un número de 2 bits A=a1a0, para formar el producto C=c5c4c3c2c1c0. Esto puede lograrse mediante compuertas AND y sumadores paralelos de 4 bits.

  6. Partiendo del código BCD de 4 bits, diseñe un circuito que genere el código EXCESO en 3, y el complemento a nueve de este último (por supuesto, también en exceso a 3) utilizando tecnología SSI y MSI.

En la próxima clase se verá el TEMA 9: Multiplexores y demultiplexores a nivel SSI y MSI. Aplicaciones.