Componentes Combinacionales en Procesadores
Componentes Combinacionales en Procesadores
Febrero 2021
ÍNDICE GENERAL
1.1 DECODIFICADOR
C2 C1 C0 S0 S1 S2 S3 S4 S5 S6 S7
0 0 0 1 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0
1 0 1 0 0 0 0 0 1 0 0
1 1 0 0 0 0 0 0 0 1 0
1 1 1 0 0 0 0 0 0 0 1
1.2 MULTIPLEXOR
2
1.3. DESPLAZADORES
la misma técnica que con los decodificadores, es fácil extender los multiplexores para
mayor número de entradas. La figura 1.2 (derecha) muestra un multiplexor 4x1.
En general, en un multiplexor con n líneas de entrada y una única salida, se deter-
mina cuál de las líneas de entrada (Dn−1 Dn−2 Dn−3 ...D1 D0 ) se conecta a la única línea
de salida (Y) mediante un código de selección (Sk−1 Sk−2 Sk−3 · · · S1 S0 ) donde necesaria-
mente n = 2k . Así, por ejemplo, para un multiplexor con n = 4 (y por tanto k = 2), la
ecuación lógica de la salida Y queda:
1.3 DESPLAZADORES
3
CAPÍTULO 1. COMPONENTES COMBINACIONALES DE UN PROCESADOR
Figura 1.3: Implementación de un MUX 2x1 para palabras de 32 bits y bloque lógico
correspondiente. Obsérvese que es necesario sólo un bit de control para el multiplexor.
A31A30A29A28A27A26A25A24A23A22A21A20A19A18A17A16A15A14A13A12A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 0
B31B30B29B28B27B26B25B24B23B22B21B20B19B18B17B16B15B14B13B12B11B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
32 32
A <<2 B = A×4
de la entrada de datos de n bits, también habría una entrada de control para especificar
el desplazmiento que se desea en cada momento.
En el caso del procesador que diseñaremos en el tema siguiente vamos a emplear
desplazadores a la izquierda fijos de 2 bits y 16 bits. El primero se usará para realizar
multiplicaciones por 4 de forma rápida y su implementación y el bloque lógico co-
rrespondiente se muestran en la figura 1.4. El desplazador a la izquierda de 16 bits se
empleará para poder cargar una constante de 16 bits en la mitad izquierda (los bits más
significativos) de un registro, y su implementación sería análoga a la del desplazador de
2 bits, tal y como se muestra en la figura 1.5.
1.4 EXTENSORES
En algunas ocasiones nos podemos encontrar con que uno de los operandos con los
que queremos que trabaje una unidad funcional tiene menos bits que los que maneja
la entrada de la unidad funcional a través de la cual se lo hemos de proporcionar. En
estos casos, si la operación a realizar por parte de la unidad funcional es una operación
lógica (por ejemplo, AND) o una operación aritmética con enteros sin signo, los bits
4
1.5. UNIDAD ARITMÉTICO LÓGICA
A15A14A13A12A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
B31B30B29B28B27B26B25B24B23B22B21B20B19B18B17B16B15B14B13B12B11B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
16 32
A <<16 B
A15A14A13A12A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
B31B30B29B28B27B26B25B24B23B22B21B20B19B18B17B16B15B14B13B12B11B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
16 Extensión 32
A B
cero
más significativos que faltan hasta completar el número total de bits que tiene la entrada
se fijan a 0. A los circuitos combinacionales que llevan a cabo esta operación se les
denomina extensores de cero. Por el contrario, cuando la operación a realizar es una
operación aritmética de enteros con signo (que como ya se ha visto en la asignatura de
Fundamentos de Computadores, se representan en complemento a 2) los bits más signi-
ficativos restantes se rellenan replicando el bit de signo del operando en cuestión. Para
la realización de esta última operación emplearemos otros circuitos combinacionales
denominados extensores de signo.
Un extensor de cero recibe como entrada un patrón de m bits y genera como salida el
patrón de entrada representado en n bits, donde n > m. El extensor de cero asignará a los
n − m bits más significativos de la salida el valor «0». La figura 1.6 muestra el bloque
lógico correspondiente a una unidad de extensión de cero y su implementación.
Por su parte, un extensor de signo recibe también como entrada un patrón de m bits,
que esta vez se interpretará como un número entero con signo. La salida del extensor de
signo será el operando de entrada representado en n bits, donde n > m. El extensor de
signo replicará en los n − m bits más significativos de la salida el bit de signo del ope-
rando de entrada (bit m − 1, numerando los bits a partir del 0). La figura 1.7 muestra el
bloque lógico correspondiente a una unidad de extensión de signo y su implementación.
Una ALU (de Arithmetic Logic Unit) es un circuito capaz de realizar operaciones
aritméticas y lógicas sobre dos operandos de entrada, para producir como resultado el
correspondiente operando de salida. La operación concreta a realizar vendrá dada por
unos bits de control, con los que indicaremos a la ALU si se desea realizar una suma,
una resta, un AND lógico, etc. Hay que distinguir entre ALUs enteras y ALUs de punto
5
CAPÍTULO 1. COMPONENTES COMBINACIONALES DE UN PROCESADOR
A15A14A13A12A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
B31B30B29B28B27B26B25B24B23B22B21B20B19B18B17B16B15B14B13B12B11B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
16 Extensión 32
A B
signo
operando A
32
ALU resultado
32
operando B
32
flotante, dependiendo del tipo de datos con los que trabaje el circuito. En este apartado
estudiaremos únicamente el diseño de una sencilla ALU combinacional para trabajar
con números enteros.
Cada uno de los operandos será una ristra de bits de una determinada longitud. En
nuestro caso, trabajaremos con palabras de 32 bits, tamaño de palabra que utiliza el pro-
cesador MIPS que construiremos en el tema siguiente. El bloque lógico de esta unidad
es el mostrado en la figura 1.8.
En lo que sigue diseñaremos esta unidad hasta llegar al nivel de puertas lógicas ele-
mentales.
6
1.5. UNIDAD ARITMÉTICO LÓGICA
7
CAPÍTULO 1. COMPONENTES COMBINACIONALES DE UN PROCESADOR
Figura 1.9: Unidad lógica de 1 bit con las operaciones lógicas AND y OR.
8
1.5. UNIDAD ARITMÉTICO LÓGICA
posible acarreo de salida que pudiera tener. Un sumador con sólo dos entradas y una
salida se conocería como half adder (semisumador). La relación entre las entradas y las
salidas de un sumador total está especificado en siguiente tabla de verdad:
Puesto que los grupos de unos no pueden hacerse más grandes, la ecuación booleana
correspondiente sería:
Suma = (a ⊕ b ⊕ AcE)
Nos quedamos, sin embargo, con la primera implementación, puesto que no siempre
es fácil la implementación física de una puerta XOR.
9
CAPÍTULO 1. COMPONENTES COMBINACIONALES DE UN PROCESADOR
Una vez analizados cada uno de los componentes individuales de una ALU de 1 bit,
sólo queda juntarlos en un sólo circuito, incorporando la lógica de control necesaria para
seleccionar la operación lógica (OR o AND) o aritmética (SUMA) que se quiera utilizar.
En este caso, la señal de entrada Operación necesita 2 bits para poder seleccionar una
de las tres posibles operaciones, AND, OR o SUMA. En la figura 1.12 se muestra el
resultado.
Operación
a
0
1
Resultado
AcarreoE
b
+ 2
AcarreoS
Figura 1.12: Unidad lógica de 1 bit con las operaciones AND, OR y suma.
10
1.5. UNIDAD ARITMÉTICO LÓGICA
Operación 0
Operación
a
0
1
Resultado
AcarreoE
Resta
b 0
+ 2
AcarreoS
Figura 1.14: Unidad aritmético lógica de 1 bit, con posibilidad de restar (todos los bits
menos el de mayor peso y el de menor peso).
acarreo (ripple carry adder). La ineficiencia de este sumador radica en el hecho que
para calcular el bit i-ésimo de la suma es necesario haber calculado los i − 1 bits ante-
riores, es decir, el bit 1 se calcula después del 0, el 2 después del 1 y así sucesivamente
hasta el bit 31. El retardo del circuito completo queda, pues, como el de cada sumador
individual multiplicado por el total de bits a calcular. Existen modos de solucionar este
problema, mediante los llamados circuitos con acarreo anticipado (look ahead carry).
En estos circuitos, el acarreo de salida de cada sumador no tiene que esperar a atravesar
tantos niveles de puertas como ocurre en el sumador con propagación. De todos modos,
el estudio detallado de estos últimos queda fuera del alcance de este curso.
Una ALU de 32 bits formada a partir del encadenamiento de ALUs de 1 bit quedaría
como se indica en la figura 1.13.
La resta se implementa utilizando la aritmética en complemento a 2 y, por tanto, basta
con sumar el complemento a 2 del operando B para conseguir el resultado deseado.
Como ya hemos explicado, para obtener el complemento a 2 basta con negar el número
bit a bit y sumarle uno. Así, para invertir el segundo operando bit a bit se añade un
multiplexor que seleccione entre bi o bi en función de si la operación solicitada es la de
sumar o la de restar. Para terminar de obtener el complemento a 2, aún falta sumarle 1.
Para ello, si utilizamos la ALU de 32 bits antes explicada, basta con poner a 1 el acarreo
de entrada de la ALU0, es decir la de menos peso, que para el resto de operaciones
siempre estará a 0. La ALU de un bit quedaría como se indica en la figura 1.14 (en la
figura 1.15 se muestra la ALU0 y en la figura 1.16 la ALU31, las cuales son ligeramente
diferentes).
Nótese que, para la ALU de menor peso, si la entrada Resta vale 0, es decir, la ope-
11
CAPÍTULO 1. COMPONENTES COMBINACIONALES DE UN PROCESADOR
Operación
a
0
1
Resultado
Resta AcarreoE
b 0
+ 2
AcarreoS
Figura 1.15: Unidad aritmético lógica de 1 bit, con posibilidad de restar (ALU0, bit de
menos peso).
Operación
a
0
AcarreoE Resultado
Resta
b 0
+ 2
1
Menor 3
Comparación
Figura 1.16: Unidad aritmético lógica de 1 bit, con posibilidad de restar y comparar
(ALU31, bit de más peso).
12
1.5. UNIDAD ARITMÉTICO LÓGICA
13
CAPÍTULO 1. COMPONENTES COMBINACIONALES DE UN PROCESADOR
Operación
a
0
1
Resta
Resultado
AcarreoE
b 0
+ 2
1
Menor 3
Comparación
Detección de
desbordamiento Desbordamiento
Resta a31
00 01 11 10
00
0
0 4
0 12
1 8
0
01
1
1 5
0 13
0 9
0
b31 signsal
11
3
0 7
0 0
15 11
1
10
2
0 6
1 0
14 10
0
14
1.5. UNIDAD ARITMÉTICO LÓGICA
Operación
Resta ...
AcE Resta AcE Resta AcE Resta AcE Resta
a0 ALU0 a1 ALU1 a2 ALU2 a31 ALU31
Menor 0 Menor 0 Menor ... 0 Menor
b0 AcarreoS b1 AcarreoS
b2 AcarreoS
b31 Compar.
...
...
Cero Desbordamiento
3
32
A
32
Resultado
ALU
Cero
32 Desbord.
B
ALU completa de 32 bits que realiza sumas, restas, operaciones lógicas AND y OR (bit
a bit), y comparaciones de magnitud e igualdad quedaría, finalmente, como aparece en
la figura 1.19.
La relación entre las entradas de control y la operación que se llevaría a cabo en la
ALU está especificado en la siguiente tabla:
15
CAPÍTULO 1. COMPONENTES COMBINACIONALES DE UN PROCESADOR
16
1.7. SOLUCIÓN A EJERCICIOS SELECCIONADOS
O S O S
000 A+B 100 A−B
001 A+C 101 A−C
010 B+C 110 B−C
011 −1 111 0
Para su realización puedes usar una ALU como la explicada en el apartado 1.5,
un decodificador 3 × 8, y tantos multiplexores 2 a 1 de 32 bits y puertas lógicas
básicas como necesites.
<< 1
a r
32 32
<< 3
4. Cuando el bit de control indique que hay que realizar una multiplicación, la salida
O correspondiente será el valor de la entrada I desplazada un bit a la izquierda.
Esto es, I0 debe conectarse con O1 , I1 con O2 e I2 con O3 . O0 deberá mostrar el
valor 0. En la caso de la división, el desplazamiento será a la derecha, poniendo
el O3 el valor 0.
17
CAPÍTULO 1. COMPONENTES COMBINACIONALES DE UN PROCESADOR
0 0
I0 O0
Mux
1
I1 0 O1
Mux
1
I2 0 O2
Mux
1
I3 O3
0
Mux
0 1
A B
8 8
0
1
2
3 Dec 3
Control MUX 2 a 1
C 3a8
4
5
6
7
8
Otra solución, que requeriría una puerta OR con sólo dos entradas, consistiría en
conectar el bit más significativo de la entrada del decodificador (C2 ) directamente
con la puerta OR, en vez de los 4 bits (del 4 al 7) de salida del decodificador.
18
1.7. SOLUCIÓN A EJERCICIOS SELECCIONADOS
19