diseño alu digitales 1b

Upload: fulvio-vivas

Post on 15-Jul-2015

94 views

Category:

Documents


0 download

TRANSCRIPT

DI SEO ALU Enunciado:ALU_04 Disear una unidad aritmtico-lgica de 4 bits que, en funcin de las seales de control S2 , S1 , S0 realice las operaciones aritmticas y lgicas mostradas en la tabla. S1 0 0 1 1 S0 0 1 0 1 S2 = 0 OPERACIONES LGICAS A B A+B AB S2 = 1 OPERACIONES ARITMTICAS -A+3 -A-3 -B-4 -B-3

Disear con el menor coste en circuitos integrados.

Una ALU o Unidad Aritmtico Lgica (Arithmetic Logia Unit) es un circuito combinacional, es decir, un sistemas digitales cuyas salidas en cualquier instante t dependen nicamente de los valores de las entradas en ese mismo instante t (excepto retardos en la propagacin de las seales por el circuito), que puede realizar tanto operaciones lgicas como operaciones aritmticas segn cierta combinacin de seales de seleccin de operacin. En este caso dichas seales de seleccin de operacin van a ser 3 bits, S2,S1 y S0. El primero de todos ellos, S2, ser el encargado de seleccionar entre que se muestren los resultados provenientes de la unida lgica (S2=0) o de la unidad aritmtica (S2=1). S1 y S0 se encargarn de la seleccin de la operacin a realizar dentro de dichas unidades. Las seales de datos sern 2 de 4 bits cada una, A y B. Para comenzar, plantearemos el diseo de la ALU en dos unidades diferenciadas, unidad lgica y unidad aritmtica. Las entradas de datos de cuatro bits Ai y Bi se introducirn a ambas, sin embargo a la salida deberemos que solucin mostrar mediante el uso de

cuatro multiplexores de dos a uno, cado uno encima de otro, para as conseguir ofrecer en la salida de la ALU slo una solucin SULi o SALi. Como ya hemos mencionado esta seleccin se llevar a cabo con la entrada S2. Todas ests seales sern introducidas por el usuario. Un esquema de lo que podra ser la ALU lo tenemos aqu:

Ai

Bi

S1

S0

S2

4 Multiplexores de 2 a 1

Unidad Lgica

SULi SALUi

Unidad Aritmtica

SAUi

Este mismo esquema pero realizado utilizando Orcad sera:

UnidadAritmeticoLogica SALU[3:0] A[3:0] A[3:0] SALU[3:0]

B[3:0]

B[3:0]

S[2:0]

S[2:0]

GND VCC_ARROW VCC ALU Cout Cout

Como podemos ver adems de las entradas seleccionadas por el usuario, existen otras dos entradas, VCC y GND. La primera VCC es la fuente de alimentacin, es decir donde irn unidos lo 1 por ejemplo en los multiplexores de la unidad lgica; mientras que GND, del ingls ground, es la tierra, donde uniremos los 0. Y dentro de lo que llamamos Unidad Aritmtico Lgica:

S[2:0] UnidadLogica A[3:0] B[3:0] S[1:0] GND VCC UL A[3:0] SUL[3:0] B[3:0] S[1:0] GND VCC SUL0 SUA0 SUL1 SUA1 SUL2 SUA2 SUL3 SUA3 S2 2 3 5 6 11 10 14 13 U3 1A 1B 2A 2B 3A 3B 4A 4B 1Y 2Y 3Y 4Y 4 7 9 SALU0 SALU1 SALU2 SALU[3:0] SALU[3:0]

12 SALU3

1 15 A/B G 74LS157

UnidadAritmetica A[3:0] B[3:0] S[1:0] S[1:0] GND VCC UA Cout Cout SUA[3:0]

El siguiente paso es la realizacin de los dos grandes bloques que componen la ALU, la unidad lgica y la unidad aritmtica. Diseo de la unidad lgica.La unidad lgica es la parte de la unidad aritmtico lgica que se encarga de realizar los calculo de tipo lgico entre las variables Ai y Bi.

Lo primero que haremos ser realizar la tabla de verdad de la unidad lgica, que se utilizar cuando la entrada en S2 este a nivel bajo. Por lo que la tabla de verdad deberemos hacerla en funcin a cuatro entradas, las de control, S1 y S0, y las de datos Ai y Bi. La tabla de verdad nicamente deberemos hacerla una vez, sin embargo, a la hora de implementar las funciones mediante multiplexores, deberemos repetir el procedimiento cuatro veces, uno por cada bit, en este caso cuatro. As quedarn cuatro salidas SULi (SUL0, SUL1, SUL2, SUL3) que sern el resultado de las operaciones realizadas con las entradas de datos Ai (A0, A1, A2, A3,) y Bi (B0, B1, B2, B3).

S1 0 0 1 1

S0 0 1 0 1

Operacin Lgica Negacin de A Negacin de B Suma lgica de A y el complemento de B (OR) Multiplicacin lgica de A y B (AND)

Tabla de verdad: S1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 S0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 Ai 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 Bi 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 SULi 1 1 0 0 1 0 1 0 1 0 1 1 0 1 1 1

1 0 Bi Bi Bi 1 Bi 1

Podemos simplificar la tabla de verdad haciendo que SULi est en funcin de Bi. As haramos una tabla de verdad de 3 variables, las de control, S1 y S0, y esta vez nicamente la de datos Ai. Podramos haber simplificado igualmente por cualquier otra

variable que no fuera Bi sin embargo la he escogido por simple cuestin de comodidad ya que al haberla representado como bit menos significativo (LSB), est situada en la columna ms exterior en la derecha y es muy fcil reducir la tabla de verdad as. S1 0 0 0 0 1 1 1 1 S0 0 0 1 1 0 0 1 1 Ai 0 1 0 1 0 1 0 1 SULi 1 0 Bi Bi Bi 1 Bi 1

Una vez tenemos la tabla de verdad reducida, podemos implementar la funcin SULi con un multiplexor de 8 a 1, utilizando las entradas S1 (MSB), S0, Ai (LSB) como entradas de control del multiplexor, y los valores 1, 0 y la entrada Bi y su complemento como entradas del multiplexor. La salida de dicho multiplexor ser SULi. Como ya he comentado antes, al ser una unidad lgica con 4 bits este procedimiento habremos de repetirlo cuatro veces. Para asignar las entradas del multiplexor nos basaremos en la tabla de verdad anterior. El orden de peso en los bits es el antes ya comentado S1, S0, Ai (LSB).

S1 S 01 0 Bi Bi Bi 1 Bi 10 1 2 3 4 5 6 7 2 1

Ai0

SULi

Una vez hecho esto ya tendramos la solucin de la unidad lgica para i=0,1,2,3. El equivalente de este circuito en Orcad, utilizando el inversor 74LS04 y el multiplexor 74LS151 sera:

GND U1 U2A 1 2 4 3 2 1 15 14 13 12 S1 S0 11 10 9 7 D0 D1 D2 D3 D4 D5 D6 D7 A B C G 74LS151 W Y 6 5 SULi' SULi

74LS04 Bi VCC

S[1:0]

Ai

Este es el circuito para cada bit i, a continuacin, mostraremos el circuito donde estn implementados todos los bit de solucin de la unidad lgica. Es decir, repetiremos el proceso para este bit, pero nombraremos en vez de i, el bit correspondiente (0,1,2,3). La forma ms rpida de realizar este procedimiento es utilizar los llamados mdulos jerrquicos, donde en cada uno implementaremos este circuito. El circuito completo de la unidad lgica quedara de esta manera:SolucionUnidadLogica0 A[3:0] B[3:0] S[1:0] GND VCC A0 B0 Ai Bi S[1:0] GND VCC SULi' SULi SUL0 SUL[3:0]

SULi SolucionUnidadLogica1 A1 B1 Ai Bi S[1:0] GND VCC SULi' SULi SUL1

SULi SolucionUnidadLogica2 A2 B2 Ai Bi S[1:0] GND VCC SULi' SULi SUL2

SULi SolucionUnidadLogica3 A3 B3 Ai Bi S[1:0] GND VCC SULi SULi' SULi SUL3

Cada mdulo jerrquico recibe de entrada los dos bit de datos correspondientes (Ai y Bi) y los dos bit de control que controlan que operacin se realiza, es decir S1 y S0. Estos dos ltimos se introducen al mdulo jerrquico directamente mediante un bus de dos bit. La salida de cada mdulo jerrquico nos proporciona la solucin para cada bit, y su negado, que no utilizamos.

Diseo de la unidad aritmtica.La unidad aritmtica se encargar de realizar los clculos de carcter aritmtico, valga la redundancia, que le indicaremos mediante las seales de control. Todos stos clculos se realizarn en complemento a dos, puesto que as ahorramos circuitera con respecto a otro tipo de representaciones de cantidades negativas. Los clculos a realizar son los siguientes:

S1 0 0 1 1

S0 0 1 0 1

OPERACIONES ARITMTICAS -A+3 -A-3 -B-4 -B-3

Para poder realizarla con el mnimo coste en circuito integrados tendremos que hacer ciertas manipulaciones:

A + 3 = A +1+ 3 A 3 = A +1 3 = A 2 = A + 2 +1 B 4 = B +1 4 = B 3 = B + 3 +1 B 3 = B +1 3 = B 2 = B + 2 +1La implementaremos utilizando sumadores en paralelo de 4 bit 74LS83 como el siguiente:U? 10 8 3 1 11 7 4 16 13 A1 A2 A3 A4 B1 B2 B3 B4 C0 74LS83 C4 14 S1 S2 S3 S4 9 6 2 15

Puesto que necesitamos introducir los datos dentro de l a partir de 2 entradas de 4 bits (A1A4 y B1B4 en el dibujo) y una entrada de un bit que representar el acarreo de entrada vamos a construir una tabla con los datos obtenidos en la manipulaciones algebraicas anteriormente realizadas.

S1 S0 0 0 1 1 0 1 0 1

OPERACIONES ARITMTICAS -A+3 -A-3 -B-4 -B-3

EQUIVALENTE A +1+ 3 A + 2 +1 B + 3 +1 B + 2 +1

X

Y 3 2 B B

Cin 1 1 1 1

A A 3 2

X e Y representarn los 4 bits de entrada de A y B del sumador respectivamente. Cin el acarreo de entrada. En el bloque X para elegir entre A, 3 y 2 utilizaremos multiplexores, lo mismo en el bloque Y. Por otro lado, para negar la variable o el nmero utilizaremos, puertas XOR de la siguiente manera:

a 0 XOR2

a

a 1 XOR2

a'

Para las entradas de control de los multiplexores que controlen la entrada en X e Y, utilizaremos una funcin de S1 y S0. Tambin sern en funcin de S1 y S0 las entradas de las puertas XOR que se encargarn de negar las variables. F1: Elegir para X: A (F1=0) o un nmero (F1=1) F2: Elegir para Y: B(F2=0) o un nmero (F2=1) F3: Negar el contenido que entrar en BA1B4 si F3=1, o la dejar sin negar si F3=0 Adems se nos presenta una nueva cuestin que resolver, habremos de elegir en ambos bloques entre 2 y 3 para F1=0 o F3=0. En el bit de peso 0 o LSB (bit menos significante)

para elegir entre 2 y 3 pondremos S0 negado ya que se corresponde dicho valor con el requerido, en vez de poner 0 o 1 constantes. Vamos a representar la tabla de verdad de las diferentes funciones:

S1 0 0 1 1

S0 0 1 0 1

F1 0 0 1 1

F2 1 1 0 0

F3 0 1 1 1

F1 = S1 ( S 0 + S 0 ) = S1 F2 = S1 ( S 0 + S 0 ) = S1 = F1 F3 = S1 S 0 + S1 S 0 + S1 S 0 = S1 + S 0Otra situacin que se nos plantea sera poner un multiplexor de 2 a 1 que eligiera entre 0 y 1. Como los multiplexores de 2 a 1 no estn disponibles como circuitos integrados (el CI disponible son 4 puestos en cascada) vamos a realizar el diseo de dicho multiplexor:

M1 U7A

U6A 1 3 2 1 2 74LS08 1 3 2 U9A 1 3 2 74LS32 SM U8A

CM

74LS04

M2

74LS08

Siendo M1 y M2 las entradas a coger, CM la seal de control del multiplexor y SM la salida. Vamos a ver la tabla de verdad de ste multiplexor: CM 0 1 SM M1 M2

CM ser la seal de control que controle por lo tanto (si est el multiplexor situado en el LSB) entre 2 y 3. Sin embargo esta solucin es mucho ms costosa en circuitos integrados ya que requiere la utilizacin de puertas lgicas mientras que la otra solucin es directa. Pasemos a implementar el diseo del bloque X (el que se encargar de seleccionar y modificar las entradas para las variables A1A4 del 74LS83). El bloque lgico X es el siguiente:

U?A A[3:0] U4 A0 A1 VCC GND A2 A3 2 3 5 6 11 10 14 13 1A 1B 2A 2B 3A 3B 4A 4B 1Y 2Y 3Y 4Y 4 2 7 9 1 12 2 74LS86 U?A 1 3 2 U?A S0 1 2 1 3 S[1:0] 74LS04 S1 74LS86 2 X3 74LS86 U?A X2 3 X1 74LS86 U?A 1 3 X0 X[3:0] X[3:0]

1 15 A/B G 74LS157

Ahora que ya tenemos el bloque lgico X, el siguiente paso ser implementar el bloque lgico Y, y de esta manera ya trabajar directamente sobre el sumador una vez que ya han sido seleccionadas las entradas.

U?A 1 3 2 B[3:0] VCC U? 2 3 5 6 11 10 14 13 1A 1B 2A 2B 3A 3B 4A 4B 1Y 2Y 3Y 4Y 4 7 9 12 1 3 2 74LS86 U?A 1 S0 1 2 2 U?A S[1:0] 74LS04 S1 1 2 74LS86 3 SUA3 SUA2 1 3 2 74LS86 U?A SUA1 74LS86 U?A SUA0 SUA[3:0]

GND

1 15 A/B G 74LS157 U?A

74LS04 U?A 1 3 2 74LS32

Como podemos observar la diferencia ms importante con el bloque lgico X, es la suma lgica S1 y S0 para negar las variables en las puertas XOR.

Una vez ya tenemos implementados ambos bloques, la unidad aritmtica estar formada como ya hemos mencionado por un sumador 74LS83 al que se le conectarn las salidas de ambos bloques lgicos y tambin el acarreo de entrada que ir conectado a la alimentacin. Finalmente las salidas sern el resultado de la operacin que saldr en un bus de 4 bits, y el acarreo de salida, formado por un solo bit de datos.

BloqueLogicoX A[3:0] S[1:0] A[3:0] GND VCC B[3:0] BloqueX S[1:0] GND BloqueLogicoY VCC B[3:0] S[1:0] GND VCC BloqueY Y[3:0] Y[3:0] X[3:0] X[3:0] U5 10 8 A1 3 A2 1 A3 A4 11 7 B1 4 B2 16 B3 B4 13 C0 74LS83 C4 14 Cout 9 S1 6 S2 2 S3 15 S4 SUA0 SUA1 SUA2 SUA3 SUA[3:0]

X0 X1 X2 X3 Y0 Y1 Y2 Y3