Hola. Continuamos con video lección 5.02: "Suma de números sin signo". ¿Cómo sumamos binario? La forma de sumar binarios es como sigue. Tenemos un binario x, un binario y, por ejemplo, 0 más 0, 0 más 1, 1 más 0 y 1 más 1. Cuando sumamos 0 más 0 nos da 0; cuando sumamos 0 más 1 o cuando sumamos 1 más 0 nos da 1, y cuando sumamos 1 más 1, en decimal debiera darnos 2 y la representación del 2 en binario es 1 0. Este 1 es la reserva, lo que en español llamamos la reserva de la suma. Sumar 1 más a 1 no da 0 y nos reservamos 1. Esa reserva en inglés se llama "carry". Nosotros vamos a hablar de "carry" en este curso. Cuando sumamos 2 dígitos binarios, 2 bits, el resultado lleva a una suma y un posible carry. Perfecto. Esos son los únicos resultados posibles. Entonces, uno puede hacer fácilmente una tabla de verdad, como ya sabemos hacerla, y la tabla de verdad me dice: mira, si yo sumo 0 con 0, la suma es 0 y el carry es 0. Si yo sumo 0 con 1, la suma es 1 y el carry es 0 y así sucesivamente hasta el 1 1. La suma de 1 1 es 0 y el carry es 1. Esa es mi tabla de verdad. Se requieren 2 bits para representar el resultado. Tiene sentido, porque si mis números son de 1 bit, mi resultado puede ser hasta de 2 bits. Sí, tiene sentido. ¿A qué funciones lógicas, corresponden c y s? Mírenlas y me cuentan. Pausa. Volvemos. ¿A cuáles funciones corresponden? Está el carry, claramente. 0 0 0 1 vale 1 solo cuando ambos son 1; por lo tanto el carry es un AND. Y el suma vale 1 solo, cuando 1 de los 2 operandos es un 1; por lo tanto, es un OR exclusivo. Entonces, la suma es OR exclusivo; el carry es un AND. Este es un ejemplo de suma. Aquí vamos a sumar 2 números, vamos a sumar x con y. Vamos a sumar esos 2 números y vamos a obtener la suma. Estos son nuestros número x e y. Aquí están sus representaciones en decimal. Entonces, sumamos 1 con 0 y nos da 1, nada más que hacer. Sumamos 1 con 1 y nos da un 0. ¿Cómo nos da un 0? Sí, 1 más 1, ya vimos aquí, es 0 y nos aparece un carry y este carry se suma con este, porque es un bit de mayor significancia. 1 más1 más 0. 1 más1 es cero, con carry. Entonces, me da un 0 y me da un carry. 1 más 1 más 1 es un 1 con carry, es un 3, en el fondo es un 3, en binario, por supuesto. Aquí está el carry. Y ese carry, finalmente, se agrega a la parte más significativa, y si nosotros lo hacemos en binario, nos damos cuenta de que el resultado del mismo aquí en decimal. Aquí no hay mucha duda. Fíjense que lo que hacemos es sumar, para una posición, el carry, el número, el dígito y el otro dígito, y el resultado es la suma y el carry siguiente, que tiene un valor mayor, una significancia mayor. ¿Cómo se suma en circuito? Existe un circuito sumador que se llama el "Half Adder". Si se llama "Half Adder", como "medio sumador", seguramente tiene que haber un sumador entero. Si lo hay, pero lo vamos a ver después. Es un circuito capaz de sumar 2 bits de entrada, es llamado un "Half Adder". "Half Adder" tiene como entradas 2 bits, solo 2 bits, y como salida tienen 1 suma y 1 carry. Este es el símbolo del "Half Adder", no es el único símbolo que he visto, pero es un posible símbolo y el circuito es simplemente un OR exclusivo para la suma y un AND para el carry. Y esa es la tabla de verdad de mi "Half Adder". Yo puedo hacer sumas sencillas de 1 bit. ¿Cómo hago sumas de más bits? Ya vamos a aprender. Hagamos un sumador de palabras de 5 bits. Hagámoslo sin saber mucho. Voy a partir con x_5, x_4, x_3, x_2. Son 5 bits solamente, entonces voy a hacerlo. x_4, x_3, x_2, x_1, x_0, eso lo quiero sumar a y_4, y_3, y_2, y_1, y_0. ¿De cuantos bits va a ser la suma? La suma debería ser de 1 bit más que estos números; por lo tanto, la suma va a ser: s_5, s_4, s_3, s_2, s_1, s_0. Perfecto. Entonces son 6 salidas. Partamos. 0 0 0 0 0. Con 0 0 0 0 0, este está fácil, la suma es 0. Sí, tal vez queda un poco largo. 0 0 0 1, 0 0 0 1 0, 0 0 0 1 1, 0 0 1 0 0,y estos son todos 0 hasta ahora. Parece que es grande el circuito, porque recién estoy haciendo los 0 aquí. Aquí están los 0, pero después tengo que hacer esto mismo cuando y vale 1, después cuando y vale 2. No, imposible hacer esto es imposible. ¿Cómo puedo sumar bits con una tabla de verdad razonable? Parece que hay una solución que se llama el "Full Adder". Gracias a el "Full Adder" o sumador completo, es que es concatenable. El "Full Adder", su símbolo es este, que es el mismo símbolo que usamos para la ALU, donde estos son los operandos y esta es la salida. El "Full Adder" es un circuito que es capaz de sumar 2 bits de entrada e incorporar un carry en la entrada. Entonces la única diferencia entre el "Half Adder" y el "Full Adder", es que el "Full Adder" tiene una entrada adicional y esa entrada adicional es el carry de una suma anterior. El "Full Adder" es parecido al "Half Adder". Aquí tenemos entradas, x y, y un carry de la etapa anterior. Y ese carry, finalmente, lo sumamos y gracias a estos "Half Adder" terminamos con una suma y un carry. Perfecto. Esta es una posible implementación que utiliza 2 "Half Adders" y 1 OR, un "full Adder" simple. Y aquí vemos nuestra tabla de verdad que nos permite sumar 3 bits. La gran diferencia ocurre cuando el "carry in" es 1. Si el "carry in" es 1, en el fondo estamos sumando 3 bits. Y puede ocurrir que tenemos "carry in", este es el "carry in", me equivoque. Esto de aquí es el "carry in"; y si el "carry in" es 1 y mis 2 bits de entrada son 1, la salida va a ser 3 y 3 es 1 1 en binario. La tabla de verdad de este sumador es sencilla, no es terriblemente complicada y nos permite concatenar. Nos permite concatenar un sumador para llegar a algo que se conoce como "Ripple-carry Adder". "Ripple" son olitas. Entonces, el carry hace olitas entre sumadores y se va pasando del menos significativo al siguiente, al siguiente, hasta que llega hasta el más significativo. ¿Cómo lo hacemos? Partimos con un carry inicial que puede ser 0. Este carry puede ser 0. Luego vienen mis 2 bits menos significativos, los sumamos y me daba un suma y me da un carry, y ese carry entra al siguiente sumador completo y lo sumo con mis otros bits y me da una suma y me da un carry, y ese carry avanza y avanza, hasta el bit final y tenemos nuestra suma, y este carry corresponde al dígito más significativo. Eventualmente, podríamos usar un "Half Adder" aquí y no ponerle un carry al primero de los sumadores, y hacer todos los demás "Full Adders". El carry se propaga como en olitas hacia la izquierda y eso es lo que permite llevar el carry hasta el bit más significativo. En sumadores de muchos bits, se podrán imaginar ustedes 32 o 64 bits, esa propagación del carry, saber si habrá o no carry va a depender de quien venía antes, el carry va pasando, de alguna forma va produciendo "carrys" en bits más significativos, eso produce un retardo, porque cada uno de estos produce un retardo. Entonces, puede ser un circuito muy lento en el caso de sumadores de muchos bits, tan lento que no se usa, no se usan hartos bits, pero sí se usan poco bits. Este es un ejemplo de diseño. Vamos a hacer un circuito que multiplica por 3. ¡Guau! Estamos grande. Entonces, toma un dígito, toma una palabra binaria A... Esta es mi entrada y mi salida es 3 por A. Entonces, una forma de hacerlo, por ejemplo, es con 2 "Full Adders". Yo primero sumo A, aquí está mi A. Sumo A consigo mismo. El sumar A consigo mismo me da aquí 2A. Tal vez había formas más fáciles de obtener 2A, Y luego, entra mi 2A. Aquí entra mi 2A y lo sumo con A, usando otro sumador, y mi resultado es 3A. Perfecto. Yo puedo sumar A con A con A y me da 3A. Ya hice un circuito que multiplica gracias a sumadores. Sí, podríamos haberlo hecho un poquito más fácil. ¿Cómo? Bueno, 3A, finalmente, es 2A más A y 2A, ustedes se dan cuenta de que es simplemente A con un chip hacia la izquierda. Entonces, yo puedo, por ejemplo, sumar A y sumar 2A que está aquí, que es A con un chip a la izquierda, y el resultado es 3A. Hicimos un ejemplo de sumar para obtener un producto. ¿Por qué desplazamos los bits x una posición a la izquierda? ¿Qué significa eso? ¿Qué es eso de "shitf left"? Claro, si yo tengo el número 3, por ejemplo, 0 1 1, y hago un "shift" a la izquierda, me lo multiplica por la base, por 2, o sea, 1 1 0 me queda 6. En base 2 es lo mismo que 3 en base 10 y, al moverlo hacia la izquierda, me queda 6 en base 10. Y cuando yo muevo dígitos a la izquierda en un número en base 10, por ejemplo 34, yo muevo hacia la izquierda, me queda 3 4 0, es como multiplicar por la base. Un "shitf left" o desplazamiento a la izquierda es lo mismo que multiplicar por la base. Perfecto. Yo sé multiplicar por 2, por 4, por 8, etcétera. Excelente. ¿Qué aprendimos? Aprendimos a sumar binarios sin signo. Aprendimos lo que es un "Half Adder". Aprendimos lo que es un "Full Adder", que tiene un carry de entrada. Aprendimos lo que es el "Ripple-carry Adder", que es un sumador al que uno le puede concatenar diferentes sumadores individuales. Y después hicimos un ejemplo de diseño. Muchas gracias.