Está en la página 1de 19

Construcción de una Unidad Aritmética y Lógica

1. Circuitos para operaciones lógicas


Las implementación de circuitos para operaciones lógicas es muy sencilla: basta
simplemente con una batería de puertas lógicas y un multiplexor accionado por
las correspondientes señales de selección.
A 0
M A
u C
x
C
B 1

B
S S

Ejemplo: circuito para realizar AND y OR de dos datos de un bit.


 Operation: señal de selección de un único bit.
Operation

a
0
Result
1
b
5

Construcción de una Unidad Aritmética y Lógica

2. Sumadores binarios elementales


Son sumadores que suman datos de un solo bit.

Semisumador (half adder):


 Dos entradas: dígitos ai y bi.
 Dos salidas: acarreo ci y bit resultado zi.

Tabla de verdad, funciones lógicas, circuito y símbolo del semisumador:

a b cs s
cs = a·b a cs
0 0 0 0
0 1 0 1 s=ab
1 0 0 1
a
1 1 1 0
+ Sum
b s
b

CarryOut

6
Construcción de una Unidad Aritmética y Lógica

Sumadores binarios elementales


ce
Sumador completo (full adder): a b
a
 Tres entradas: dígitos ai y bi y acarreo ci-1. s
 Dos salidas: acarreo ci y bit resultado zi. + ce +
cs
s b
cs
Tabla de verdad, funciones lógicas, circuito y
símbolo del sumador completo:

a b ce cs s cs = a·b + a·ce+b·ce = a·b + (ab)·ce


0 0 0 0 0 s = a  b  ce
0 0 1 0 1 a s
0 1 0 0 1
0 1 1 1 0
b
1 0 0 0 1
cs
1 0 1 1 0
ce
1 1 0 1 0
1 1 1 1 1 Ejercicio: calcular el retardo del sumador.
7

Construcción de una Unidad Aritmética y Lógica

3. Circuitos para sumar números de N bits


Vamos a estudiar distintos tipos de circuitos para calcular sumas de números
binarios:
•Sumador de 2 números de N bits con propagación de acarreo en serie
(CPA: carry propagation adder)
•Sumador de acarreo almacenado (CSA: carry save adder)

Hay otras alternativas para circuitos sumadores de 2 números:


•Sumador con anticipación de acarreo (lo veremos al final del tema).
•Sumador con salto de acarreo.
•Sumador con predicción de acarreo.
•Etc.

Estudiaremos también cómo sumar varios números (matrices de sumadores):


•Con CPA
•Con CSA

8
Construcción de una Unidad Aritmética y Lógica

Sumador con propagación de acarreo


SUMADOR DE N BITS CON PROPAGACIÓN DE ACARREO EN SERIE
(CPA: carry propagation adder): permite sumar dos datos de n bits
encadenando sumadores binarios elementales completos.
•Sirve para números en binario puro o en complemento a 2.
an-1 bn-1 a1 b1 a0 b0

a b a b a b

cn-1 cs
+ ce
... cs
+ ce cs
+ ce
c-1
s s s

sn-1 s1 s0
A B A B

n n n n

CPA de
cs + ce cs CPAn ce
n bits
n n

S S 9

Construcción de una Unidad Aritmética y Lógica

Sumador de acarreo almacenado


SUMADOR DE N BITS CON ACARREO ALMACENADO (CSA: carry save
adder): no propaga los acarreos, y proporciona dos resultados:
•N bits de suma parcial.
•N bits de acarreos (que no se propagan en esta etapa).
xn-1 yn-1 zn-1 x1 y1 z1 x0 y0 z0

a b a b a b

cs
+ ce
... cs
+ ce cs
+ ce
s s s

cn-1 sn-1 c1 s1 c0 s0
X Y Z

n n n

CSA de CSAn
n bits
n n

C S 10
Construcción de una Unidad Aritmética y Lógica

Matriz de sumadores con acarreo propagado


Si queremos sumar más de dos datos de n bits podemos usar una matriz de
sumadores elementales con acarreo propagado.
 Pega: el retardo de la suma total es bastante grande.
a3 b3 a2 b2 a1 b1 a0 b0
A B E F

Traditional adder
e3 e2 e1 e0

Traditional adder

f3 f2 f1 f0

Traditional adder

S
s5 s4 s3 s2 s1 s0
11

Construcción de una Unidad Aritmética y Lógica

Matriz de sumadores con acarreo almacenado


Podemos acelerar el proceso si usamos CSAs.
•Al final se debe incluir una etapa de propagación del acarreo (este paso puede
acelerarse con un sumador rápido).

b3 e3 f3 b2 e2 f2 b1 e1 f1 b0 e0 f0 A B E F

Carry save adder

a3 a2 a1 a0

Carry save adder

C' S'
s'4 c'3 s'3 c'2 s'2 c'1 s'1 c'0 s'0
Traditional adder

s5 s4 s3 s2 s1 s0
12
Construcción de una Unidad Aritmética y Lógica

4. Operación de extensión de signo


 La operación de extensión de signo es distinta dependiendo del sistema de
representación utilizado.

•En binario puro, simplemente se añaden ceros a la izquierda.

•En complemento a 1 ó a 2, se replica el bit de signo.

•En magnitud y signo, se intercalan ceros entre el bit de signo y los bits de
módulo.

•En exceso a M, la operación suele implicar un cambio en el exceso, aunque


si el exceso se mantiene, bastaría con añadir ceros igual que en binario puro.

 Los circuitos para realizar extensión de signo son sumamente sencillos.

13

Construcción de una Unidad Aritmética y Lógica

5. Operación de cambio de signo


La operación de cambio de signo es distinta dependiendo del sistema de
representación utilizado.

 En binario puro, esta operación no es posible.

 En complemento a 1 ó a 2, basta con complementar el resultado.

 En magnitud y signo, basta con invertir el bit de signo.

 En exceso a M, la operación no es obvia y depende del valor del exceso.

14
Construcción de una Unidad Aritmética y Lógica

6. Circuitos para restar números binarios


Semirrestador binario Restador binario elemental completo

a b a b

- cs
- ce
cs
s s

Restador de N bits con propagación de acarreo en serie


an-1 bn-1 a1 b1 a0 b0

a b a b a b

cn-1 cs
- ce
... cs
- ce cs
- ce
c-1
s s s

sn-1 s1 s0
15

Construcción de una Unidad Aritmética y Lógica

Circuitos para restar números binarios


Otra opción: hacer una suma del minuendo con el complementario del sustraendo.
 Para complementar el sustraendo, invertimos todos sus bits e introducimos
un 1 en el acarreo de entrada del sumador menos significativo.
 Por este procedimiento también había que invertir el acarreo de salida.
 Esto funciona tanto para binario puro como para complemento a 2 (en
complemento a 2 el acarreo se desprecia, y el desbordamiento se detecta de
otro modo).
an-1 bn-1 a1 b1 a0 b0

a b a b a b

+ + + '1'
cn-1 cs ce cs ce cs ce
s s s

sn-1 s1 s0
16
Construcción de una Unidad Aritmética y Lógica

7. Circuitos para sumar y restar números binarios


Como se puede sumar y restar con un único sumador, puede diseñarse un único
circuito que realice ambas operaciones en función de una señal de control Op.
•Op = 0: suma.
•Op = 1: resta.

Es preciso contar con un circuito que complemente condicionalmente el sustraendo


en función de dicha señal Op.

b b
Op

equivale a

0 1 Op

17

Construcción de una Unidad Aritmética y Lógica

Circuito sumador / restador de N bits


an-1 bn-1 an-2 bn-2 a1b1 a0 b0
Op

a b a b a b a b

cs
+ ce cs
+ ce
... cs
+ ce cs
+ ce
s s s s

sn-1 sn-1 s1 s0

Op = 0  OPERACIÓN DE SUMA
C Op = 1  OPERACIÓN DE RESTA

Ejercicio: calcular el retardo de los sumadores / restadores de 4, 16 y 32 bits.


18
Construcción de una Unidad Aritmética y Lógica

8. Indicadores de resultado
En los circuitos anteriores se ha contemplado el bit de acarreo.
Otros indicadores usuales son:

 Z: indicador de resultado nulo (Z=1 si el resultado es 0, Z=0 si no). Basta con


una NOR de todos los bits del resultado.

 N: indicador de signo (N=1 si el resultado es negativo, N=0 si es positivo ó 0).


Es el bit más significativo del resultado.

 V: indicador de desbordamiento (V=1 si hay desbordamiento, V=0 si no).


•En sumas (Op=0), V=1 si An-1 = Bn-1  Sn-1.
•En restas (Op=1), V=1 si An-1  Bn-1 = Sn-1.


V Op A
n-1
B S
n-1 n-1
A B S
n-1 n-1 n-1
Op A B S
n-1 n-1 n-1
A B S
n-1 n-1 n-1

•Ambas condiciones se resumen en la expresión V C C
n-1 n-2
19

Construcción de una Unidad Aritmética y Lógica

Sumador / restador con indicadores de resultado


an-1 bn-1 an-2 bn-2 a1b1 a0 b0
Op

a b a b a b a b

cs
+ ce cs
+ ce
... cs
+ ce cs
+ ce
s s s s

sn-1 sn-2 s1 s0

...

C V N
Z
20
Construcción de una Unidad Aritmética y Lógica

9. Comparaciones
La comparación de dos números se realiza mediante una resta.
• El valor del resultado en sí no es relevante.
• Lo que importa son las características del resultado.
• Las características del resultado se pueden analizar mediante los códigos de
condición obtenidos tras la resta.

MIPS tiene instrucciones condicionales que realizan una resta entre dos operandos,
calculan los códigos de condición y toman una decisión:

1.Scond rdest,rf1,rf2: si rf1 cond rf2 es cierto pone rdest a 1, si no lo pone a 0.

2.Bcond rf1,rf2,etiq: si rf1 cond rf2 es cierto salta a etiq, si no continúa.

3. Bcond rf,etiq: si rf1 cond 0 es cierto salta a etiq, si no continúa.

Otras: BCzT y BCzF testean un flag del coprocesador z (z  [0,3]) y ramifican si


corresponde.
21

Construcción de una Unidad Aritmética y Lógica

Condiciones en MIPS
Condición Nemotécnico Expresión booleana Instrucciones
Menor que con signo LT (less than) r31·V + r31·V SLT, SLTI, BLT
Menor que sin signo LTU (less than unsigned) C SLTU, SLTIU, BLTU
Menor o igual que con signo LE (less or equal than) SLE, BLE
Menor o igual que sin signo LEU (less or equal than unsigned) SLEU, BLEU
Igual que EQ (equal) Z SEQ, BEQ
Distinto a NE (not equal) Z SNE, BNE
Mayor o igual que con signo GE (greater or equal than) SGE, BGE
Mayor o igual que sin signo GEU (greater or equal than unsigned) SGEU, BGEU
Mayor que con signo GT (greater than) SGT, BGT
Mayor que sin signo HI (higher) SGTU, BGTU
Menor que 0 LTZ (less than 0) N BLTZ, BLTZAL
Menor o igual que 0 LEZ (less or equal than 0) N+Z BLEZ
Igual a 0 EQZ (equal to 0) BEQZ
Distinto de 0 NEZ (not equal to 0) BNEZ
Mayor o igual que 0 GTZ (less than 0) N BGEZ, BGEZAL
Mayor que 0 GEZ (less or equal than 0) N·Z BGTZ
Cierto T Flag(coprocesador z) BCzT
Falso F  Flag(coprocesador z) BCzF

Pseudoinstrucciones en negrita
22
Construcción de una Unidad Aritmética y Lógica

11. Diseño modular de una UAL


Vamos a acometer el diseño de una UAL reducida para el MIPS con las siguientes
operaciones:
 AND lógico
 OR lógico
 Suma aritmética
 Resta aritmética
 Comparación de menor que

La UAL detectará las condiciones de desbordamiento y resultado nulo.


ALU operation

La UAL se diseñará en forma modular:


a
partiendo de una célula elemental de UAL
para operandos de 1 bit, construiremos la Zero
ALU Result
UAL completa para trabajar con Overflow
operandos de 32 bits. b

CarryOut 23

Construcción de una Unidad Aritmética y Lógica

UAL de 1 bit (I): operaciones lógicas


 Tiene dos entradas de datos: a y b.
 Es necesaria una entrada de selección de 1 bit por Operation.
 Ofrece un bit de resultado: Result.

Operation

Operation Result
a
0 a AND b 0
1 a OR b Result
1
b

Ejercicio propuesto: calcular el retardo del circuito.

24
Construcción de una Unidad Aritmética y Lógica

UAL de 1 bit (II): añadiendo la suma


 A la versión anterior se le añade la operación de suma con un
sumador binario elemental completo.
 Se añade una entrada de datos: el acarreo de entrada (CarryIn).
 Se añade una nueva señal de salida: el acarreo de salida (CarryOut).
 Operation ya tiene 2 bits.
Operation
CarryIn

Operation Result
a
0 (00) a AND b 0
1 (01) a OR b
2 (10) a + b + CarryIn 1
Result

Ejercicio propuesto: calcular el


2
retardo del circuito para la b
operación de suma.

CarryOut
25

Construcción de una Unidad Aritmética y Lógica

UAL de 32 bits: primera versión


CarryIn Operation

 Se construye uniendo 32 UAL de 1 bit.


a0 CarryIn
Result0
ALU0
b0
CarryOut

a1 CarryIn
Result1
ALU1
b1
Ejercicio propuesto: calcular el retardo CarryOut

del circuito para la operación de suma.


a2 CarryIn
Result2
ALU2
b2
CarryOut

a31 CarryIn
Result31
ALU31
b31
26
Construcción de una Unidad Aritmética y Lógica

UAL de 1 bit (III): añadiendo la resta


 Para añadir la operación de resta es preciso permitir negar el segundo
operando del sumador.
 La señal Binvert es una nueva entrada de control para indicar la operación
realizada (suma o resta). Binvert Operation
CarryIn

Binvert Operación Result


X 0 (00) a AND b a
0
X 1 (01) a OR b
0 2 (10) a + b + CarryIn
1
1 2 (10) a + ¬b + CarryIn Result

b 0 2

Ejercicio propuesto: calcular el


retardo del circuito para la
operación de suma o la de resta. CarryOut
27

Construcción de una Unidad Aritmética y Lógica

UAL de 1 bit (IV): añadiendo slt


 Al añadir la operación de activación si menor se añade la entrada Less, que
contiene el bit resultante de la comprobación de la condición LT:
• Lessi = 0  i  [1,31].
• Less0 = 0 si la condición es falsa, Less0 = 1 si es cierta.
Binvert Operation
Binvert Operation Result CarryIn

X 0 (00) a AND b
X 1 (01) a OR b a
0
0 2 (10) a + b + CarryIn
1 2 (10) a + ¬b + CarryIn 1
1 3 (11) Less
Result
b 0 2
Para las celdas 1 a 31 de la
1
UAL, Less = 0.
Less 3
Para la celda 0, por Less entra
el resultado de la comparación.
CarryOut
28
Construcción de una Unidad Aritmética y Lógica

Cálculo de la condición LT (less than)


Dos números positivos Dos números negativos Un número positivo y el
(en complemento a 2): (en complemento a 2): otro negativo:
A = 6, B = 4: A = -4, B = -6: A = 4, B = -2:
A-B ≥ 0  A-B ≥ 0  A-B ≥ 0 
A < B FALSE A < B FALSE A < B FALSE
0110 1100 0100
- 0100 - 1010 - 1110
0010 0010 0110

A = 4, B = 6: A = -6, B = -4: A = -4, B = 2:


A-B < 0  A-B < 0  A-B < 0 
A < B TRUE A < B TRUE A < B TRUE
0100 1010 1100
- 0110 - 1100 - 0010
1110 1110 1010
29

Construcción de una Unidad Aritmética y Lógica

Cálculo de la condición LT (less than)


 Del análisis anterior se deduce que la condición LT se puede evaluar mediante
una resta, de la cual sólo nos interesará el signo del resultado:
•Si el resultado es positivo o 0, la condición es FALSA.
•Si el resultado es negativo, la condición es CIERTA.

 Dicho signo se puede obtener de la celda UAL que opera con la pareja de bits
más significativos (ALU31):
Set = s31
donde:
•Set: señal de evaluación de la condición LT (1 si cierta, 0 si falsa).
•s31: salida del sumador de ALU31 (1 si negativo, 0 si positivo o nulo).

 De la celda ALU31 también se puede obtener la condición de desbordamiento:



Overflow Binvert a b s a b s  

Binvert a b s a b s 
n-1 n-1 n-1 n-1 n-1 n-1
n-1 n-1 n-1 n-1 n-1 n-1
30
Construcción de una Unidad Aritmética y Lógica

UAL de 1 bit (IV): celda más significativa


El bit más significativo exige entonces una celda UAL especial:
Binvert Operation
 Se añade un circuito para detectar la CarryIn

posible existencia de desbordamiento.


a
0
 La salida Set indica el resultado de la
condición LT.
1
•Set irá a la entrada Less de la UAL
del bit 0. Result
b 0 2

Less 3

Set
¡CUIDADO!
Overflow
Si hay desbordamiento en la resta, detection
Overflow
¿la condición LT está bien evaluada?
31

Construcción de una Unidad Aritmética y Lógica

Cálculo de la condición LT (less than)


 Analizando casos de resta con desbordamiento, se observa lo siguiente:

A = 6, B = -4: A = -6, B = 4:
A-B ≥ 0  A-B < 0 
A < B FALSE A < B TRUE
¡y la resta da ¡y la resta da
resultado resultado
negativo! positivo!
0110 1010
- 1100 - 0100
1010 0110
V=1 V=1

 La condición LT para números en complemento a 2 debe considerar el signo


del resultado de la resta y el valor del flag de desbordamiento (ver transparencia
22 con tabla de condiciones):
Set = s31  Overflow
32
Construcción de una Unidad Aritmética y Lógica

UAL de 32 bits: segunda versión


Binvert CarryIn Operation

 Se construye uniendo 32 UAL de 1 bit, a0 CarryIn


recordando que la del bit más b0 ALU0 Result0
Less
significativo es distinta de las demás. CarryOut

a1 CarryIn
b1 ALU1 Result1
0 Less
CarryOut
Ejercicio propuesto: calcular el retardo del
circuito para las siguientes operaciones: a2 CarryIn
• add o sub. b2 ALU2 Result2
0 Less
• or o and. CarryOut

• slt.

CarryIn

a31 CarryIn Result31


b31 ALU31 Set
0 Less Overflow

33

Construcción de una Unidad Aritmética y Lógica

UAL de 32 bits: tercera versión


Bnegate Operation

 Bnegate = CarryIn (suma/resta


en complemento a 2) a0 CarryIn Result0
b0 ALU0
Less
CarryOut
 Añadido código de condición Z.
a1 CarryIn
 Operation y Bnegate: señales de b1 ALU1
Result1
0 Less
control de la UAL (3 bits). CarryOut Zero

a2 CarryIn Result2
b2 ALU2
Bnegate Operation Result 0 Less
CarryOut
X 0 (00) a AND b
X 1 (01) a OR b
0 2 (10) a+b
a + ¬b + 1  Result31
1 2 (10) a31 CarryIn
a-b b31 ALU31 Set
0 Less Overflow
1 3 (11) Less

34
Construcción de una Unidad Aritmética y Lógica

12. Anticipación de acarreo


El sumador con propagación de acarreo en serie es muy lento  es muy
importante acelerar su funcionamiento.
 Nos basaremos en el enfoque de la anticipación de acarreo.

Ecuaciones del sumador binario elemental completo: ce


cs = a·b + (ab)·ce a
s
s = a  b  ce +
b
c
s

Para el bit 0: c0 = a0·b0 + (a0b0)·c-1


s0 = a0  b0  c-1

c1 = a1·b1 + (a1b1)·c0 = a1·b1 + (a1b1)·[a0·b0 + (a0b0)·c-1]


Para el bit 1:
s1 = a1  b1  c0 = a1  b1  [a0·b0 + (a0b0)·c-1]

En realidad no haría falta propagar los acarreos, pero las ecuaciones se


complican enormemente al incrementar el número de bits.
35

Construcción de una Unidad Aritmética y Lógica

Anticipación de acarreo
Es posible definir dos funciones:
 gi: vale 1 si la pareja de bits ai y bi generan acarreo  gi = ai · bi
 pi: vale 1 si la pareja de bits ai y bi pueden propagar un acarreo procedente
de una pareja de bits anterior  pi = ai  bi
Entonces: ci = ai·bi + (aibi)·ci-1 = gi + (aibi) · ci-1
si = ai  bi  ci-1 = pi  ci-1
Si conseguimos construir un circuito aparte que se encargue de calcular los
acarreos, el sumador elemental es más sencillo, ya que proporciona como salida
sólo los bits si, gi y pi.

ai
gi a b ce
a s
bi + g
pi ce +
g p s b p
ci-1 si

36
Construcción de una Unidad Aritmética y Lógica

Anticipación de acarreo
El circuito que calcule los acarreos materializará las siguientes funciones lógicas:
c0 = g0 + p0· c-1
c1 = g1 + p1·c0 = g1 + p1·[g0 + p0·c-1] = g1 + p1· g0 + p1· p0 · c-1
c2 = g2 + p2·c1 = g2 + p2·[g1 + p1·g0 + p1·p0 ·c-1] = g2 + p2·g1 + p2·p1·g0 + p2·p1·p0 ·c-1
c3 = g3 + p3·c2 = g3 + p3·[g2 + p2·g1 + p2·p1·g0 + p2·p1·p0 ·c-1] =
= g3 + p3·g2 + p3·p2·g1 + p3·p2·p1·g0 + p3·p2·p1·p0 ·c-1

Sobre la expresión de c3 podemos definir sendas funciones G y P de generación y


propagación de acarreo en un bloque de cuatro bits:
•G = g3 + p3·g2 + p3·p2·g1 + p3·p2·p1·g0
•P = p3·p2·p1·p0
Y entonces la expresión de c3 queda así:
c3 = g3 + p3·g2 + p3·p2·g1 + p3·p2·p1·g0 + p3·p2·p1·p0 ·c-1 = G + P · c-1
37

Construcción de una Unidad Aritmética y Lógica

Anticipación de acarreo
De este modo podemos definir un bloque de anticipación de acarreo de 4 bits que
recibirá como entradas {gi}i=0...3 , {pi}i=0...3 y c-1 y tendrá como salidas c0, c1, c2, G y P.
•Las fórmulas de un módulo de anticipación de acarreo para más de 4 bits se
complican mucho y dejan de ser viables.
•El módulo de 4 bits será conectable en cascada para formar anticipadores de
acarreo en varios niveles jerárquicos.

3 3 2 2 2 1 1 1 0 0 0

-1

38
Construcción de una Unidad Aritmética y Lógica

Circuito anticipador de acarreo de 4 bits


p3 g3 p2 g2 p1 g1 p0 g0

P c-1

Ejercicio: añadir la salida c3 al circuito. c2 c1 c0 39

Construcción de una Unidad Aritmética y Lógica

Anticipación de acarreo CarryIn

La anticipación de acarreo se puede realizar a0 CarryIn


b0 Result0--3
en forma
* jerárquica, gracias a las salidas G* a1
b1 ALU0
a2 pi
P0
y P del anticipador. b2
a3
G0 gi
b3 Carry-lookahead unit
C1
ci + 1
Figura: UAL de 16 bits con dos niveles de
a4 CarryIn
anticipación de acarreo. b4 Result4--7
a5
b5 ALU1
a6 P1 pi + 1
•Cada UAL de 4 bits contiene una unidad de b6
a7
G1 gi + 1
b7
anticipación de acarreo, y genera 4 bits de C2
ci + 2

resultado, Pi y Gi. a8 CarryIn


b8 Result8--11
a9

•El segundo nivel de anticipación calcula los


b9 ALU2
a10 P2 pi + 2
b10 G2 gi + 2
acarreos de entrada de las UAL 1, 2 y 3. a11
b11
C3
ci + 3

a12 CarryIn
b12 Result12--15
a13
b13 ALU3
a14 P3 pi + 3
b14 G3 gi + 3
a15 C4
b15 ci + 4

CarryOut 40

También podría gustarte