Descargar

Proyecto ALU version 1.5.2 (página 3)

Enviado por Xakko Gris


Partes: 1, 2, 3

C

A

B

R

N

0

0

0

0

0

0

1

0

1

0

0

1

1

0

0

0

0

1

1

1

1

1

0

0

0

1

1

1

1

1

1

0

0

1

1

1

0

1

0

1

O sea, todo lo anterior para decir que a la compu se le dijo que haga esto, y eso hace, sin razonar nada…

Aquí, la bandera de la resta es la N (NEGATIVE), que se activa cuando "pido" uno a la resta siguiente, o se apaga, cuando nada pido. El acarreo de la próxima operación C toma el valor 1 si esta bandera está prendida, o 0 si está apagada.

Circuitos Lógicos.

Vamos a tener en cuenta para lo que sigue a la suma y a la resta, ya que la computadora, y la electrónica, más que nada se manejan con compuertas lógicas y, en base a ellas, o a combinaciones de ellas, hacer distintas operaciones.

En otras palabras, sólo tenemos para hacer OR, XOR, AND y NOT, pero no tenemos

Cómo hacer directamente una suma o una resta, ni sus banderas de salida (las de entrada las toman en base a las de la salida anterior, as que no hay que "hacerla").

La parte fácil: si vemos las tablas lógicas, tanto la de la suma como la de la resta, veremos que siempre que SOLO UNA de las variables de entrada esté en 1, o LAS TRES a la vez estén en 1, la respuesta R es 1, caso contrario, la respuesta es 0. No les parece conocido a la extensión del X-OR, con el tema de la imparidad? Bueno, pues es exactamente eso. Siempre que la cantidad de entradas en 1 entre A, B y C sea impar (O CADA UNA SOLA O LAS TRES A LA VEZ), R vale 1, sino (de a dos valen 1 o todas valen 0), la salida R vale 0.

Pero para el análisis de la parte lógica, en lo que nos tenemos que fijar MÁS es en las salidas 1, en las respuestas Verdaderas, ya que, como dijimos, si no cumplo algo de lo que está adelante, no es obligación NO CUPLIR con la respuesta. Se entiende? Recuerdan de la parte de proposiciones lógicas: Si llueve y hace frío entonces salgo con campera… pero… y si no llueve ni hace frío? Eso me implica que tengo que salir SIN campera? NO. Por eso, lo que más importa es la salida en 1, que son las que se analizan.

Ya tenemos cómo obtener las R de la suma y de la resta, con un par de compuertas X-OR una tras otra (por ejemplo, A con B y el resultado con C) o una compuerta X-OR de tres entradas, y ponemos a A, B y C en cada entrada.

Ahora nos queda ver el comportamiento de V (OVERFLOW) y de N (NEGATIVE) en cada caso. Para esto vamos a utilizar un poco de razonamiento y otro de lógica electrónica. El objetivo acá es saber qué salidas (tanto del V como del N) tengo positivas (en 1). Separemos entonces estos casos, veamos cuántos son, y cómo podríamos llegar a esos resultados utilizando solamente las compuertas lógicas que ya conocemos. Sacaremos entonces de la tabla de verdad solamente aquellas condiciones en las V o R es 1, y veremos qué condiciones deben cumplir las entradas para que esto sea así, SIN IMPORTARME PARA ESTO qué Resultado (R) me había dado la operación (al menos para la lógica electrónica, pero nos importa para el razonamiento nuestro, el humano.

Comencemos con el OVERFLOW (V). Saquemos lo dicho (sólo V = 1) de la tabla de la suma:

C

A

B

V

0

1

1

1

1

1

0

1

1

1

1

1

1

0

1

1

Ahora, usando un poco de razonamiento lógico, podemos decir que si tanto A vale 1 y B vale 1, 1 + 1 (binario) es 10 (binario), sin importar el valor de C. Este caso puede darse con la combinación de A y C, o de B y C también, pero como tenemos que hacer comparaciones de a 2, tomaremos las dos variables de entrada: A y B

Agrupamos entonces (solamente invertimos el orden de la 2da y 3ra fila):

C

A

B

V

0

1

1

1

1

1

1

1

1

1

0

1

1

0

1

1

  • a) Entonces, con las dos primeras filas podemos preguntar si A AND B son 1, no me importa lo que C valga (como verán en estas dos filas, C en la primera vale 0 y en la segunda vale 1, así que no me importa su comportamiento, su valor), entonces V va a valer 1. Esto es lógico ya que 1 + 1 queda ya en 10, o sea que me voy a llevar 1 sí o sí, valga lo que valga C (si valiese 0, queda en 10 y si valiese 1, queda en 11)

  • b) Descartamos entonces (momentáneamente) las dos primeras filas y veamos las dos que siguen: Veremos que si A es 1 O B es 1 y a la vez que se cumplen esas dos condiciones, C vale 1, que serían los casos que quedan para juntar a C Y A y a C Y B, entonces la salida es verdadera. Cómo el A Y B en 1 con C en 1 se cumple en la segunda fila, y ya la tenemos, acotemos entonces el O a un O-exclusivo, teniendo así: (A XOR B) es 1 AND C es 1, entonces nuestra salida V vale 1.

Juntamos así estas dos condiciones, y las unimos con un OR: SI se cumple que (A AND B son 1) OR se cumple que ((A XOR B) es 1 AND C es 1) entonces la salida V será 1

Del mismo modo veremos la resta. Saquemos lo que nos interesa:

C

A

B

N

0

0

1

1

1

1

1

1

1

0

0

1

1

0

1

1

Agrupemos a conveniencia (ya veremos la conveniencia) alternando columnas (la C):

A

B

C

N

0

1

0

1

1

1

1

1

0

0

1

1

0

1

1

1

Y luego filas (2da y 3ra)

A

B

C

N

0

1

0

1

0

0

1

1

1

1

1

1

0

1

1

1

  • a) veamos la 3ra y 4ta fila, que me dicen que si B AND C son 1, sin importarme lo que A valga, la salida N va a valer 1. Esto quiere decir que si alguien me pedía 1 (C = 1) y B vale 1, no importa lo que valga A, voy a terminar pidiendo otra vez, porque si A valiese 1, este se lo daría al que le pidió y quedaría en 0 y no podría restarle al 1 que ya vale B, y así tendría que pedir, y, peor aún, si A valiese 0 y B valiese 1 y encima le están pidiendo (C = 1), sí o sí va a tener que pedir.

  • b) Veamos las dos primeras columnas. Acá lamentablemente hay que complicarla más. Es similar a las últimas dos analizadas con la suma, con un XOR pero entre B y C, y a esto hay que decirle: "siempre y cuando A valga 0". Pensemos primero qué pasa acá: decimos que si A vale 0 y, o bien B vale 1 o bien me están pidiendo (descartamos otra vez el "los dos a la vez valen 1" porque ya lo tenemos en la condición anterior) queda mas que claro que vamos a tener que pedir, porque A no puede dar a quien le pide aunque B valga 0 (C = 1 y B = 0), como tampoco A valiendo 0, puedo restarle un B valiendo 1, por más que nadie pida (en este caso: B = 1 y C = 0). Hasta acá quedamos claros. Pero yo no puedo hacer una comparación lógica con un "algo = 0", todas las comparaciones se hacen con un "algo verdadero", con un "algo = 1". Entonces aparece nuestro conocido amigo NOT, el inversor, e invertimos acá el valor de A para ponerlo en 1 en vez de 0, y nos queda entonces: (B XOR C) es 1 AND NOT(A) es 1, entonces la salida R vale 1.

Juntamos otra vez las dos condiciones, uniéndolas también con un OR: SI se cumple que (B AND C son 1) OR se cumple que ((B XOR C) es 1 AND NOT(A) es 1) entonces la salida R será 1.

Ahora veamos estas compuertas lógicas, cómo se representan con sus respectivos gráficos:

edu.red

En las compuertas, como verán, hay dos "palitos" al costado izquierdo y un "palito" al costado derecho. Estos vienen a representar las entradas y la salida respectivamente de cada compuerta. Es la forma de representarlos y gráficamente se dibujan sobre el chip mismo que tiene estas compuertas estos esquemas, poniendo las entradas en las patas donde debemos poner los cables con las entradas y en la patita de la salida, la salida. Habitualmente estos chips en donde están los circuitos tienen 7 patitas de cada lado, son rectangulares finitos con dos lados largos y dos cortitos. Sobre los largos están estas 7 patitas, dando un total de 14 patitas. En uno de los lados chiquitos hay una muesca; esta muesca me dice que su pata más próxima del lado izquierdo es la número 1, así no nos equivocamos al poner los cables, pudiendo dañar al chip. Cada integrado que posee las compuertas XOR, OR o AND tiene cuatro adentro, y las que tienen la negación tiene seis. Así, en las primeras, tenemos 3 patas por cada una de las 4 compuertas y dan un total de 12 patitas y en las NOT, son 2 patas por cada una de las 6 compuertas, dando un total de 12 patitas también. Como todo componente electrónico, necesita energía para hacerlo andar, así que en las dos que sobran (dijimos que eran 2 filas de 7 para cada una, 14 patitas en total), van: en una la masa o tierra (en la última de la fila de la izquierda, debajo de todo, poniendo la muesca para arriba), y en la otra la alimentación (la primera de la derecha, al lado de la muesca). En un chip de estos, de 14 patas, serían la para 7 y la pata 14 respectivamente.

Veamos como representamos algo entonces: Tenemos las entradas de las variables A y B y obtenemos una respuesta R. Para esto si ingresaremos una entrada positiva en la pata que representaría a la variable A, dándole 5Voltios o ingresamos una entrada positiva en la pata que representaría a la variable B (pero no las dos a la vez), tendríamos una salida similar a esas entradas (5V) en la pata R que representa la salida. Gráficamente:

edu.red

Combinando salidas con entradas en estos chips, podemos hacer las combinaciones que queramos, para obtener los resultados que deseemos. Así, por ejemplo, si yo sé que la suma la logramos haciendo un XOR entre las variables de entrada A y B, y a ese resultado le aplicamos OTRO XOR con la variable de entrada C (el acarreo), podríamos graficarlo de la siguiente manera:

edu.red

Y así, en la variable de salida R (final) podemos tener el resultado de la suma binaria dependiendo de los valores que tengan cada una de las variables de entrada A, B y C.

Con esta misma combinación, podemos interpretar la resta, ya que, como vimos, es el mismo resultado, sólo que con la resta tomamos en la variable de entrada C, el valor que tenga la bandera N

Y un poco más complicado para las banderas. Por ejemplo, con la resta (más difícil). Claramente veremos los dos bloques, los puntos a) con B AND C y b) con (B XOR C) AND NOT(A), ambos dos unidos con un OR, o sea, que sale positivo (se enciende la bandera N) si en cualquiera de los dos casos (a o b) tuviese una respuesta positiva:

edu.red

Similar es el gráfico de la bandera de la suma: a) A AND B y b) (A XOR B) AND C también unidos con un OR:

edu.red

Todo esto lo tenemos que juntar para hacer el diagrama lógico, y luego pasar eso directamente a los circuitos integrados.

Para la parte de las comparaciones lógicas, con una compuerta de cada chip que posea esa compuerta en particular, ya alcanza. Pero para la suma y para la resta, debemos armar el circuito para ver como terminamos uniendo las entradas con las salidas, en el circuito final, por medio de cables.

Dado que por cada chip (circuito integrado) tenemos sólo cuatro compuertas iguales de la operación lógica que realice ese chip en particular, llegamos justo a utilizar solamente un chip de cada tipo de compuertas. El chip con cuatro compuertas, es llamado 74xxNN, donde xx es el tipo de chip, en nuestro caso en particular usaremos o LS (que son rápidos y utilizan sólo entradas de 5V) o HC (rápidos, pero con un rango de entradas mas amplio, entre 3V y 6V) y NN son dos (o tres) números que nos dice el tipo de compuerta que tiene ese chip.

Veamos entonces. Comencemos viendo cuántos XOR tenemos:

  • 1) A XOR B (de la operación lógica XOR en sí)

  • 2) A XOR B (de la primera parte de la suma)

  • 3) A XOR B (del punto b de la bandera de la suma)

  • 4) B XOR C (del punto b de la resta)

  • 5) Salida de A XOR B junto con el acarreo C de la suma, para el resultado de la suma

  • 6) Salida de B XOR C (acarreo de la resta) junto con A, para el resultado de la resta

Agrupándolos entonces nos quedan sólo 4, ya que los tres primeros son exactamente lo mismo, y no vale la pena utilizar distintas compuertas para obtener el mismo resultado con las mismas entradas.

Sigamos con cantidad de AND:

  • 1) A AND B (de la operación lógica AND en sí)

  • 2) A AND B (del punto a de la bandera de la suma)

  • 3) B AND C (del punto a de la bandera de la resta)

  • 4) Junto A XOR B con C con un AND en el punto b de la bandera de la suma

  • 5) Junto B XOR C con -A con un AND en el punto b de la bandera de la resta

Los dos primeros son lo mismo, así que me quedan 4 también.

Seguimos con OR:

  • 1) A OR B (de la operación lógica OR en sí)

  • 2) La unión final de las dos partes en la bandera de la suma

  • 3) La unión final de las dos partes en la bandera de la resta

Y no tenemos más. Acá sólo usaremos 3 de las 4 compuertas.

Ahora NOT: Por ahora sólo la tenemos para negar a la variable A en la bandera de la resta, en un ratito vamos a utilizar dos más.

Conozcamos ahora otro chip, de la misma familia de los TTL, pero este no posee compuertas lógicas, sino un circuiterío especial llamado multiplexor. La función del multiplexor es, teniendo unas cuantas entradas, sólo una salida y una forma se seleccionar, elige entonces el dato de qué entrada quiero en la salida. Así, pondremos por medio de cablecitos: en una entrada: la salida de la compuerta A XOR B, en otra: la salida de la compuerta A AND B, en otra: la salida de la compuerta A OR B, en otra, la salida de las suma entre A, B y el C de la suma y en otra: la salida de las restas entre A, B y el C de la resta. Ocuparemos así 5 de las 8 entradas que tiene este chip.

La forma que tiene para seleccionar es por medio de una combinación de 3 patas llaves especiales de entrada. Combinando entre las 3 (poniendo 5V en algunas y las otras sin carga), podemos elegir el valor de cuál de las 8 entradas queremos ver en la salida, ya que puedo hacer 2 (posibilidades en cada pata: hay o no hay voltaje) al cubo (son 3 llaves) igual a 8. Esto digamos que es el "control" que haríamos sobre la ALU. Todas las operaciones se hacen ni bien entran A y B y las banderas activan los acarreadores, entonces yo como "controlador" debo decidir cuál de todas es la que necesito como respuesta de salida. Digamos que seríamos nosotros la "unidad de control" de la CPU, los que le vamos a dar los valores de A, de B y qué operación tiene que realizar.

Utilizaremos un sexto circuito en nuestro proyecto, que es un chip que tiene dos compuertas AND de cuatro entradas cada una, o sea, obtengo una salida positiva siempre y cuando TODAS las entradas (las 4) estén en 1 (tengan voltaje). A este circuito lo vamos a utilizar para que el resultado de las banderas salga cuando debe salir, dependiendo de la operación que estemos realizando con el multiplexor. Si estoy diciendo que quiero el resultado de la compuerta AND, y A y B están en 1, la salida correctamente estará en 1, pero A + B es 10, tendría un overflow (V) y esta bandera saldría activada, a menos que usemos este circuito para decirle: salí activada, siempre y cuando estés activada, pero esté siendo utilizada la operación que corresponde (en una suma en este caso, y no en un AND). Esta "operación que corresponde" la dan las 3 llaves que controlan el multiplexor, así que da ahí mismo las sacaremos.

Entonces, si para decir que la suma la tengo cuando tengo la combinación de las llaves 1 y 3 prendidas y la llave 2 apagada, y la resta la tengo cuando tengo la combinación de las llaves 2 y 3 prendidas y la llave 1 apagada. Conecto entonces con cablecitos en cada una de las 4 entradas: para la suma: la salida en sí de la bandera de overflow, la llave 1 y la llave 3. Todavía queda poner "algo" en la 4ta pata de esta compuerta. Ya vamos a ver que va ahí. Por ahora pasemos momentáneamente a la resta, y hacemos lo mismo: en una de las cuatro patas de entrada de la OTRA compuerta AND de este chip, pondremos a la salida en sí de la bandera de negative, la llave 2 y la llave 3. Y también me queda libre una pata acá, que también tenemos que ocupar.

Dado que para activar la salida de una compuerta AND de la cantidad de entradas que sean, TODAS sus entradas deben estar encendidas, y la condición para que sea, por ejemplo, una "suma" lo que esté trabajando, y eso lo digo con que la llave 1 esté prendida, la llave 3 esté prendida y la llave 2 esté apagada, entonces lo más fácil por hacer sería sacar un cablecito de la llave 2, llevarla al chip que tiene las puertas NOT (donde usé solo una de las seis que tiene), invertirla, y el resultado este, llevarlo a la cuarta pata que me quedaba libre del chip, del lado de la suma. Así, si la llave 2 estaba apagada, al pasarla por el inversor la enciendo, y va encendida a la compuerta AND "grande". Del mismo modo hacemos con la llave 1 en la resta, en otra compuerta inversora y a la pata que faltaba en el AND "grande", pero del lado de la resta.

Un punto extra, no realizado en este proyecto, es agregarle un par de circuitos más, los 74LS367, y conectar a la computadora, y, en vez de hacer a mano y ver en leds como en el video, controlar todo y ver los resultados con alguna interfaz con algún lenguaje de programación (visual Fox o visual Basic sirven recontra bien). Estos TTL extras son para proteger a la computadora de no meter la pata con los conectores de afuera, corriendo el riesgo de quemarla.

Para hacerlo, tendremos que usar el puerto paralelo. Por el "bus de datos" del mismo pasaremos las variables A, B, C de la suma y C de la resta. Se utilizará para esto el puerto 378h (888d) y los pines físicos del 2 al 5 (D0 a D3). Por el "bus de estado" pueden volver los resultados: R, N (negative) y V (overflow). Se usa el puerto 379h (889d) y los pines físicos 10, 12 y 13. Tendríamos que utilizar también el "bus de control" del puerto para activar las llaves "de control", utilizando el puerto 37Ah (890d) y los pines físicos 14, 16 y 17. El programa me queda como tarea pendiente.

Interpretando un poco el párrafo anterior, podemos ver cómo trabajarían en conjunto los tres buses principales de la computadora. Datos de entrada, estados de salida y algo que controle la situación.

Armado del Circuito ALU

Los circuitos utilizados son:

  • 1) 74LS86: 4 XOR doble entrada

  • 2) 74LS08: 4 AND doble entrada

  • 3) 74LS32: 4 OR doble entrada

  • 4) 74LS04: 6 NOT

  • 5) 74LS21: 2 AND cuádruple entrada

  • 6) 74LS151: un multiplexor de 8 entradas.

Todo esto se construirá sobre un protoboard, o placa experimental, en donde podemos poner los circuitos en el medio de la misma, y a sus costados (sobre la misma línea) poner los cables para unir entre las patas de los distintos circuitos. Se pondrán los 6 circuitos uno debajo del otro, en el mismo orden detallado arriba, y se interconectarán como se ve en el gráfico del final por medio de cables monofilares (desarmen un cable de red).

Al circuito lo alimentaremos con una fuente de 7,5V para luego bajarla y regularla con un circuito especial que mantiene 5V de salida, un 7805.

Las entradas de las variables A, B, C de suma y C de resta, las daremos con un switch cuádruple, conectado la entrada a 5V. Las llaves para la selección de la operación a realizar, las activaremos mediante conexión directa de cablecitos. Todas las salidas las monitorearemos con leds (diodos emisores de luz) de distintos colores, para distinguir entre cada una: las salidas de las operaciones serán en rojo, las banderas en amarillo y la salida general del multiplexor en verde.

Las resistencias que dan el 0 lógico a las entradas de las compuertas son de 820 o de 1000 ohmios, y las que prenden los leds son de 150 ohmios. No concierne al trabajo esta parte de la construcción, para qué sirven el resto de los componentes, sólo doy los valores para aquel que quiera intentar hacer algo. Estas resistencias van entre las entradas y masa. Los switches y las llaves cierran las conexiones con los 5V.

Aquí les dejo las páginas en donde están los dos videos del funcionamiento del proyecto:

Parte 1: Introducción y operaciones lógicas

http://www.youtube.com/watch?v=KjEb__iPR0c

Parte 2: Operaciones aritméticas: Suma y Resta http://www.youtube.com/watch?v=MrF0ByDcMl8

Y acá está el diagrama general del proyecto:

edu.red

edu.red

edu.red

 

 

Autor:

Xakko Gris

Partes: 1, 2, 3
 Página anterior Volver al principio del trabajoPágina siguiente