Regístrate | Conectar
El Tamiz Libros Recursos Series Únete 8 Users Online
Skip to content

Computador mágico IX – Aritmética combinacional (sumador)




La serie “El computador mágico” está disponible también en forma de libro.

En el último artículo de esta serie vimos cómo representar en binario los números naturales, y mostramos cómo se operaba con ellos de forma muy similar a como operamos habitualmente con los números decimales. En este artículo mostraremos cómo implementar un artefacto capaz de realizar esa suma con puertas lógicas en un circuito combinacional.

Vamos a partir de una de las sumas de ejemplo que veíamos:

\begin{aligned}~0011011\\+0011001\\\hline\\~0110100\\\end{aligned}

Recordad que lo que hacíamos era decir: 1 más 1, 0 y me llevo 1. Y luego hacer una y otra vez esa operación, para cada uno de los bits.

 

Así que podemos buscar primero un circuito que sume dos bits. No dos números completos, sino solamente dos bits. Y luego pondremos un montón de esos “sumadores de un bit” juntos para formar nuestro “sumador”.

Podemos construir, si quieres, la tabla de estado de este “sumador de un bit”. Llamamos A y B a los dos bits de entrada, y llamamos S a la suma y C al acarreo (“acarreo” es el nombre técnico del “me llevo…”):

A

B

S

C

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

No es difícil, ¿verdad?

Ya hemos visto que dada una tabla de verdad es posible construir un circuito digital que genere la salida. Como en este caso tenemos dos salidas, lo que tenemos son dos circuitos digitales:

 

¿Esto es un sumador de un bit? Pues no… casi, pero no del todo. Esto es lo que se llama un circuito semisumador. Lo que falta es el acarreo de entrada. Si recordáis la cantinela de la suma, no es “A más B, S y me llevo C“, sino “A más B, X, más C que me llevaba, S, y me llevo C“. Es posible que el acarreo del bit anterior fuera cero, y en ese caso no lo decíamos, pero estaba implícito (excepto en el primer bit, claro). Así que lo que tenemos en realidad es una tabla con tres entradas y dos salidas (dado que ahora tenemos dos acarreos, el de entrada y el de salida, se suele usar Cin y Cout, del inglés Carry input y Carry output):

 

A

B

Cin

S

Cout

0

0

0

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

0

1

1

0

0

1

0

1

0

1

0

1

1

1

0

0

1

1

1

1

1

1

Revisa la tabla y comprueba que es correcta.

Podemos utilizar el proceso que vimos anteriormente de tabla-FND-simplificación para encontrar el circuito de S y el de Cout:

S=A' \cdot B' \cdot C_{in} + A' \cdot B \cdot C_{in}' + A \cdot B' \cdot C_{in}' + A \cdot B \cdot C_{in}

C_{out} = A' \cdot B \cdot C_{in} + A \cdot B' \cdot C_{in} + A \cdot B \cdot C_{in}' + A \cdot B \cdot C_{in}

Luego podemos simplificarlo, si queremos, y finalmente construir el circuito. Pero ya hemos dicho que este procedimiento no siempre encuentra el mejor circuito posible, sino solamente uno que es correcto; en este caso no lo encuentra porque en realidad S y Cout no son independientes, y podemos reutilizar parte de uno para el otro. Así que en lugar de aplicar el procedimiento a lo loco, podemos pensar un poco y darnos cuenta de que las siguientes funciones son mejores:

S = A \oplus B \oplus C_{in}

C_{out} = (A \cdot B) + (C_{in} \cdot (A \oplus B))

Podemos reutilizar parte de ella para las dos salidas (el término (A \oplus B)), y entonces el circuito que suma dos bits, con acarreo tanto de entrada como de salida, sería:

Este circuito se llama sumador completo de un bit,[1] y se suele representar como una cajita de la siguiente forma:

 

De forma que ahora, si queremos hacer un sumador de 7 bits, como el que veíamos al comenzar el artículo, simplemente tenemos que poner siete cajitas juntas:

 

 

Desde A6 hasta A0 son los bits del primer número natural, y desde B6 hasta B0 son los bits del segundo; S6 a S0 son los 7 bits de la salida.

Ves que enlazamos cada bit con el siguiente, del mismo modo que con la cantinela en la que el “me llevo” de una columna se trasladaba a la siguiente columna. Las excepciones son el primer paso y el último: en el primer paso metemos siempre un 0, puesto que en ese bit jamás podemos tener acarreo de entrada; y en el último, simplemente lo sacamos hacia la salida y lo llamamos Overflow (desbordamiento), tal y como veíamos en el artículo anterior. Si ese bit de Overflow es un 1, es que el resultado de lo que hemos sumado es mayor de lo que podemos representar con 7 bits.

Comprueba si quieres que el circuito funciona, por ejemplo aplicándolo sobre los dos números que veíamos al principio.

El circuito de multiplicación es más complicado (y más complicado aún será a partir del siguiente capítulo, cuando veamos los números negativos), de modo que no lo vamos a contar. Espero no obstante que te haya quedado claro que el hecho de que no lo contemos no quiere decir que no exista: hemos visto que siguiendo el proceso de tabla-FND-simplicación podemos siempre conseguir al menos un circuito que, dadas unas entradas, genera una (o varias) salidas. Puede que no sea óptimo, pero será correcto. Si quieres, puedes hacerlo como ejercicio.

En el próximo capítulo seguiremos contando la representación binaria, esta vez la de los números enteros.

 

  1. En realidad habitualmente tampoco se implementa así cuando se mete en un chip, sino que se baja un nivel más y se disponen los transistores directamente para cumplir la tabla de verdad, sin pasar por el nivel intermedio de las puertas lógicas. No obstante, no te obsesiones con eso, porque lo importante es la idea: a base de puertas lógicas podemos hacer el sumador; hay y habrá muchas otras optimizaciones que no contamos en esta serie, pero que los fabricantes utilizan a bajo nivel. []

Sobre el autor:

J ( )

 

{ 3 } Comentarios

  1. Gravatar Matematicofisico | 27/11/2012 at 06:17 | Permalink

    Esta serie va genial J.

    Hasta ahora he entendido todo de una manera increíble (lástima que el profe que me enseña esto en la Universidad es terrible), sino fuera por esta página tan genial, probablemente estaría odiando los transistores (y eso que estudio ingeniería jeje).

    Es una pena que escribas que no contarás con el circuito multiplicador, que a mi modo de ver no es tan complicado. Bueno, tal vez los dibujos :)

    Espero con ansias al siguiente articulo para la representación de números negativos!!

    Por cierto, hablarás de los distintos formatos para la representación de los números en bits (complemento a dos, punto fijo, punto flotante, formato IEEE). Bueno creo que eso seria demasiado pedir jeje.

    Muchas gracias por la serie J!!!

  2. Gravatar J | 27/11/2012 at 07:08 | Permalink

    Matematicofisico,

    ten en cuenta que la serie no pretende sustituir un curso universitario, solo dar unas pinceladas; por eso no contaré la multiplicación más que lo que ya hemos visto (seguro que puedes deducir el circuito tú solo).

    Contaremos todo eso, pero siempre sin profundidad.

  3. Gravatar Matematicofisico | 29/11/2012 at 02:01 | Permalink

    Pinceladas? yo diría que con esta serie he aprendido mucho mas que sólo pinceladas :)

    Pero no me mal interpretes J, nunca pretendí que esto fuera un curso universitario (este blog y el tamiz me encantan porque todo lo exponen de una manera sorprendentemente simple y clara).

    Lo del multiplicador lo conozco muy bien, pero esta serie me ha mostrado que los transistores son mucho más faciles y hermosos de lo que yo pensaba. Ya los conocía, pero en mi concepción eran unos aparatos que funcionaban por arte de magia (En mis cursos sólo había visto las ecuaciones que conciernen a los transistores y nada más, tal vez por eso los veía como algo no muy agradable que digamos)

    Muchisimas gracias por la serie J, espero con ansias a la siguiente entrada ;)

Escribe un comentario

Tu dirección de correo no es mostrada. Los campos requeridos están marcados *

Al escribir un comentario aquí nos otorgas el permiso irrevocable de reproducir tus palabras y tu nombre/sitio web como atribución.