Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EL PROCESADOR
4.1. Introducción
Un computador es un dispositivo electrónico formado por componentes y subsistemas
digitales que permite el procesamiento de datos.
Desde el punto de vista estructural, el computador se considera dividido en varios ni-
veles organizados jerárquicamente. La Figura 4.1 muestra la organización del computador
según estos niveles. Se distinguen 5 niveles básicos:
Nivel Digital: Se corresponde con la máquina fı́sica y engloba todos los circuitos
digitales que constituyen el computador y que han sido estudiados en los capı́tulos
anteriores.
Nivel Instrucciones Máquina: En este nivel se construyen programas en lenguaje
máquina (secuencias de 0’s y 1’s), que es el lenguaje capaz de entender la CPU.
También se incluye en este nivel la programación en ensamblador. El lenguaje en-
samblador es la notación simbólica del lenguaje máquina.
Nivel Sistema Operativo: Los sistemas operativos son un conjunto de programas
que ayudan al usuario en la explotación del computador, siendo por tanto, una capa
software con la que se rodea el hardware para facilitar su utilización.
Nivel Lenguajes Alto Nivel: El objetivo de este nivel es facilitar al programador
la utilización del computador. Los programas escritos en un leguaje de alto nivel
deberán pasar por un proceso intermedio de traducción, denominado compilación,
antes de ejecutarse. El objetivo de la compilación es traducir el lenguaje de alto
nivel a un lenguaje de bajo nivel que la máquina pueda entender. La figura 4.2
muestra un ejemplo de traducción de un trozo de código codificado en un lenguaje
de alto nivel (lenguaje C) a lenguaje ensamblador para el procesador MIPS y de
lenguaje ensamblador a lenguaje máquina. El programa que traduce el código es-
crito en lenguaje ensamblador al código equivalente en lenguaje máquina se llama
ensamblador.
1
2 TEMA 4. EL PROCESADOR
Aplicaciones
Lenguaje maquina
Logica digital
Nivel Aplicaciones: Este nivel está formado por paquetes de programas de aplicación
que sirven para resolver problemas en campos especı́ficos de la ciencia o la gestión.
High-level swa p ( i n t v [ ] , i n t k )
language { i n t t emp ;
program t emp = v [ k ] ;
(in C) v [ k ] = v [ k +1 ] ;
v [ k + 1 ] = t emp ;
}
C compiler
Assembly swa p :
language mu l i $ 2 , $5 , 4
program a dd $ 2 , $4 , $2
(for MIPS) lw $ 1 5 , 0 ( $2 )
lw $ 1 6 , 4 ( $2 )
sw $ 1 6 , 0 ( $2 )
sw $ 1 5 , 4 ( $2 )
jr $31
Assembler
su tamaño, en número de bits, se denomina ancho de palabra. Todos los elementos del
computador (registros, buses, memorias, periféricos, ALUs) están diseñados para transfe-
rir, almacenar o procesar palabras.
El modo de funcionamiento de un computador consiste en la ejecución continua de
instrucciones que operan sobre diferentes datos. El proceso de ejecución de una instrucción
sigue una secuencia de 4 pasos:
PROCESADOR
PC IR
Instrucciones
ENTRADA
REGISTROS
UNIDAD DE
MEMORIA
Datos
SALIDA
UNIDAD DE
ALU
CONTROL
Cada instrucción máquina debe contener la información que necesita la CPU para su
ejecución. Los elementos constitutivos de una instrucción máquina son:
4.2. EL REPERTORIO DE INSTRUCCIONES 5
16 bits
Los operandos fuente y resultado pueden estar en algunas de las siguientes áreas:
Registro de la CPU: Salvo raras excepciones, una CPU contiene uno o más registros
que pueden ser referenciados por instrucciones máquina. Si existe más de uno, cada
registro tendrá asignado un número único, y la instrucción debe contener el número
del registro deseado.
Dentro del computador, cada instrucción se representa por una secuencia de bits. Esta
secuencia se puede interpretar dividida en campos, correspondientes cada uno de ellos a
los elementos constitutivos de la instrucción. La descripción de la instrucción en campos
y bits se denomina formato de instrucción. La figura 4.4 muestra un ejemplo sencillo de
formato de instrucción. En la mayorı́a de los repertorios de instrucciones se emplea más
de un formato. Durante su ejecución, la instrucción se escribe en el registro de instrucción
(IR) de la CPU. La CPU debe ser capaz de extraer los datos de los distintos campos de
la instrucción para realizar la operación requerida.
Los aspectos más importantes a tener en cuenta en el diseño del repertorio de instruc-
ciones son:
6 TEMA 4. EL PROCESADOR
Tipos de datos: Los distintos tipos de datos con los que se efectúan operaciones.
Registros: Número de registros de la CPU que pueden ser referenciados por instruc-
ciones, y su uso.
Modelo de pila: En este modelo los operandos se almacenan en una pila de modo
que se opera con datos de la pila y el resultado es colocado encima de la pila. Se
denota por POP a la instrucción que retira de la pila un dato y lo copia a memoria
o a un registro. Se denomina PUSH a la instrucción que inserta en la pila un valor
de memoria o de un registro.
4.2.2. Direccionamiento
De control del sistema. Llamadas al sistema operativo para que realice algún
servicio: E/S, detener la ejecución del programa, ...
Memory
Registers Registers
$0 $0
$ 31 $31
Arithmetic Multiply
unit divide
Arithmetic
Lo Hi unit
BadVAddr Cause
Status EPC
$0 solo de lectura y con valor cero. De los restante registros, solo el $31 es implı́citamente
usado por una instrucción. Concretamente, por la instrucción de invocación de una subru-
tina (jal) y se utiliza para guardar la dirección de retorno, como veremos más adelante.
Adicionalmente, el MIPS contiene dos registros para poder operar con operandos de 64
bits, como sucede en el caso de la multiplicación y división, llamados hi (high) y lo (low).
En el cuadro 4.1 se puede ver la lista de registros del MIPS y sus usos.
Como se ha comentado antes, estos procesadores MIPS no disponen de unidad de coma
flotante incluida en el microprocesador, implementando estas funciones en coprocesadores
separados. La arquitectura MIPS tiene en cada coprocesador 32 registros de 32 bits para
coma flotante ($f0-$f31), que pueden ser organizados en 16 registros de doble precisión
con 64 bits (las designaciones par de los registros).
En cuanto al direccionamiento de la memoria, éste se realiza por bytes. Esto quiere
decir que las direcciones de memoria de 2 palabras consecutivas estarán separadas en 4
unidades (ya que las palabras son de 4 bytes). Cuando una palabra se carga desde memoria
a un registro o se pasa a memoria desde un registro, la dirección de memoria involucrada
ha de ser múltiplo de 4. Esto es lo que se denomina restricción de alineamiento. Las
direcciones que son múltiples de 4 se llaman direcciones alineadas.
Un aspecto importante en cualquier procesador con un ancho de palabra superior a 1
12 TEMA 4. EL PROCESADOR
byte es el ordenamiento de los bytes dentro de una palabra. Dicho ordenamiento puede
tomar dos alternativas: big endian o little endian. En little endian la dirección de un dato
es la dirección del byte menos significativo del dato. En big endian la dirección del dato
es el byte más significativo del mismo:
palabra de 4 bytes
Big Endian
A B C D
Little Endian
Este aspecto ha de tenerse en cuenta cuando se intercambia información entre dis-
tintas máquinas. Ejemplos de arquitecturas little endian son los procesadores x86, DEC
ALPHA y VAX. Ejemplos de arquitecturas big endian son IBM POWER, Motorola 6800
y 68k. Algunos procesadores (por ejemplo MIPS, PowerPC, Alpha y SPARC v9) permiten
configurar el comportamiento, estas arquitecturas reciben el nombre de bi-endian.
Los tipos básicos de instrucciones que soporta el MIPS son los siguientes:
Transferencia de datos
Aritméticas y lógicas
De Control de Flujo
4.3. REPERTORIO DE INSTRUCCIONES DEL MIPS 13
• Salto condicional
• Bifurcación
Los operandos de las operaciones aritméticas son siempre registros. MIPS es, por
tanto, una arquitectura de carga/almacenamiento (registro-registro).
Para acceder a una palabra en memoria hay que indicar su dirección. MIPS direc-
ciona bytes individuales. No obstante, debe tenerse en cuenta que la mayor parte
de las instrucciones que acceden a memoria lo hacen de forma alineada, por lo que
la dirección a la que se accede debe ser múltiplo de 4.
funct: función. Este campo selecciona la variante especı́fica de la operación del campo
op, y a veces se le denomina código de función.
El compromiso elegido por los diseñadores del MIPS es guardar todas las instrucciones
con la misma longitud, pero utilizar diferentes clases de formatos de instrucción para
diferentes clases de instrucciones. Los tres tipos de formatos posibles en MIPS son:
Formato tipo I: utilizado por las instrucciones de transferencia, las de salto con-
dicional y las instrucciones con operandos inmediatos.
14 TEMA 4. EL PROCESADOR
Tipo - R
op rs rt rd shamt funct
Tipo - I
op rs rt direccion
Tipo - J
op direccion
6 bits 26 bits
En la figura 4.7 se muestran los campos para cada uno de los tres tipos de formato.
Aunque tener múltiples formatos complica la circuiterı́a, se puede reducir la complejidad
guardándolos de forma similar. Por ejemplo, los tres primeros campos de los formatos
tipo-R y tipo-I son del mismo tamaño y tienen los mismos nombres. Los formatos se
distinguen por el valor del primer campo: a cada formato se le asigna un conjunto de
valores distintos en el primer campo y por lo tanto la circuiterı́a sabe si ha de tratar
la última mitad de la instrucción como tres campos (tipo-R) o como un campo simple
(tipo-I), o si la instrucción es tipo-J.
add $7,$3,$6
0 3 6 7 0 32
31 25 20 15 10 5 0
sub $7,$3,$6
0 3 6 7 0 34
31 25 20 15 10 5 0
addi $8,$8,4
8 8 8 4
31 25 20 15 0
Los operandos constantes aparecen con frecuencia, y situarlos dentro de las instruc-
ciones aritméticas hace que se ejecuten mucho más rápido.
Los 16 bits para especificar el desplazamiento significan que una instrucción de carga
puede cargar cualquier palabra dentro de la región ±215 de la dirección del registro base
$rs.
lw $8,1200($15)
35 15 8 1200
31 25 20 15 0
sw $8,1200($15)
43 15 8 1200
31 25 20 15 0
Figura 4.10: Estructura del lenguaje MIPS para las instrucciones de transferencia
beq $19,$20,L1
4 19 20 L1
31 25 20 15 0
bne $19,$20,L1
5 19 20 L1
31 25 20 15 0
slt $8,$19,$20
0 19 20 8 0 42
slti $8,$19,10
10 18 8 10
2 L1
jr $8
0 8 0 0 0 8
5. Situar el valor del resultado en un lugar donde el programa que lo ha llamado pueda
acceder a él.
x4
x4
4 bits
Dynamic data
$gp 1000 8000 h e x Static data
1000 0000 h e x
Text
pc 0040 0000 h e x
Reserved
0
siguiente elemento a volcar, o para saber dónde se pueden encontrar los valores guardados.
Por razones históricas, la pila crece de direcciones de memoria superiores a inferiores. Por
tanto, para poner valores en la pila tendremos que restar al puntero de pila y para quitar
valores tendremos que sumar al puntero de pila.
Los programas del MIPS reservan un registro solo para la pila, stack pointer ($sp) o
puntero de pila. Veamos un par de ejemplos de como introducir datos en la pila y como
transferirlos desde ella.
Para realizar la operación de push (guardar) salvando dos registros en la pila:
Para realizar la operación de pop (recuperar) transfiriendo los datos de la pila a dos
registros:
jal direccion_subrutina
3 direccion_subrutina
Salvaguarda de registros
Si un procedimiento modifica los registros utilizados por la rutina invocadora los va-
lores de los registros deben ser guardados y restaurados utilizando para ello la pila. Los
dos convenios estándares para guardar y restaurar registros son:
Para evitar salvar y restaurar un registro cuyo valor nunca se usa, los programas MIPS
ofrecen dos clases de registros (ver cuadro 4.1):
Registros salvados ($s0-$s7): Se utilizan para almacenar valores de vida más larga
que se deben preservar durante las llamadas. Si el invocado los usa salva previamente
su valor.
Camino de Datos: se encarga de realizar todas las operaciones requeridas por las
instrucciones del nivel de lenguaje máquina. Contiene los siguientes elementos (ver
Figura 4.18):
• Unidad Aritmético-Lógica (ALU): está formada por los circuitos digitales ne-
cesarios para realizar las operaciones aritméticas y lógicas requeridas por las
instrucciones.
• Banco de Registros: contiene los registros que almacenan temporalmente los
datos y resultados con los que opera la ALU.
• Registros Especiales: contienen información necesaria para la correcta ejecución
de las instrucciones y del programa. Por ejemplo, la instrucción en ejecución
(registro de instrucciones, IR), la dirección de la siguiente instrucción a ejecutar
(contador de programa, PC), etc.
• Buses internos: son los caminos de conexión entre los distintos elementos que
forman la Unidad de Proceso.
Interpretar las instrucción: La instrucción debe decodificarse para determinar qué ac-
ción es necesaria.
Procesar datos: La ejecución de una instrucción puede exigir llevar a cabo alguna
operación aritmética o lógica.
Escribir datos: Los resultados de una ejecución pueden tener que ser escritos en la
memoria o en un módulo de E/S.
En las siguientes secciones estudiaremos como llevar a cabo el diseño de una Unidad
Central de Proceso (Camino de Datos y Unidad de Control). Para ello tomaremos como
ejemplo el procesador MIPS. En concreto, diseñaremos una Unidad Central de Proceso
para ejecutar el siguiente subconjunto del repertorio de instrucciones del MIPS:
Para ejecutar cualquier instrucción se debe empezar por cargar la instrucción desde
memoria. La dirección de memoria nos la indica el registro de 32 bits contador de programa
(PC). Para ejecutar la siguiente instrucción el contador de programa ha de incrementarse
para que apunte 4 bytes más adelante. El Camino de Datos para este paso se muestra en
la figura 4.19.
Sumador
4
PC Dirección
Instrucción
Memoria de
instrucciones
Las instrucciones aritmético-lógicas son instrucciones tipo R que leen dos registros,
operan con la ALU los contenidos de estos registros y escriben el resultado. El ejemplo
tı́pico de este tipo de instrucciones es add $t1, $t2, $t3, que suma los contenidos de
$t2 y $t3 y escribe el resultado en $t1. En la figura 4.20 se muestra el Camino de Datos
para estas instrucciones suponiendo que ya se ha obtenido la instrucción. Los registros
de 32 bits del procesador se agrupan en un banco de registros. Se puede acceder a cada
uno de los registros especificando su número. El banco de registros tiene dos puertos de
lectura y uno de escritura. Para escribir hay que activar explı́citamente la señal de control
de escritura. Las entradas que indican el número de registro a leer o escribir son todas de
5 bits, mientras que las salidas (lı́neas de datos) son de 32 bits.
Necesitaremos una ALU que pueda realizar las operaciones sumar, restar, AND, OR
y realizar la comparación set on less than (slt). El cuadro 4.2 muestra las lı́neas de
control de la ALU con las correspondientes operaciones. La ALU admitirá como entrada
dos operandos de 32 bits (a y b) y una lı́nea de control de tres bits para seleccionar la
operación a realizar. Ofrecerá como salida el resultado de la operación, también de 32 bits,
un bit de acarreo, una salida de detección de desbordamiento y una salida de detección de
cero como se ilustra en la figura 4.21. La salida Cero de la ALU se utilizará en la realización
de los saltos condicionales como veremos más adelante. La salida de Desbordamiento se
usará para la detección de excepciones.
4.5. CONSTRUCCIÓN DEL CAMINO DE DATOS 27
3 Operación de la ALU
Reg. de
Instrucción lectura 1
REGISTROS
Dato ALU
Reg. de leído 1
lectura 2 Cero
Reg. de Resultado
escritura Dato de la ALU
Dato a leído 2
escribir
EscribirReg
Figura 4.20: Parte del Camino de Datos correspondiente a las instrucciones aritmético-
lógicas (tipo R)
Cuadro 4.2: Valores de las tres lı́neas de control de la ALU y las operaciones correspon-
dientes.
Dato ALU
Reg. de leído 1
lectura 2 Cero
Figura 4.22: Parte del Camino de Datos correspondiente a las instrucciones de acceso a
memoria
Dato
Reg. de leído 1
lectura 2 Decidir si se
Cero hace el salto
Reg. de
escritura Dato ALU
Dato a leído 2
escribir
EscribirReg
16 32
Extensión
de signo
Figura 4.23: Parte del Camino de Datos correspondiente a la instrucción de salto condi-
cional (beq)
cantidad de hardware empleado. Ası́ por ejemplo, las sumas realizadas para calcular la
siguiente instrucción a ejecutar (ver figuras 4.19 y 4.23) se pueden realizar con la ALU
y no se necesitan sumadores independientes para esa operación. La ALU llevará a cabo
diferentes operaciones dependiendo de la instrucción que se ejecute y del ciclo de ejecución
en el que nos encontremos:
Del mismo modo, no se necesita una memoria para instrucciones y otra para datos, ya
que el acceso a la memoria de instrucciones y a la de datos se realiza en ciclos diferentes
de la ejecución.
Al finalizar cada ciclo todos los datos que vayan a utilizarse en el siguiente ciclo se
deben almacenar en un elemento de almacenamiento (memoria o registro). Los datos a
utilizar por las siguientes instrucciones en ciclos posteriores se almacenarán en elementos
de almacenamiento visibles al programador (el banco de registros, el PC o la memoria).
En cambio, los datos que va utilizar la misma instrucción en ciclos posteriores deben
guardarse en registros temporales.
Registro de Reg. de
instrucciones lectura 1
Memoria
REGISTROS
Dato A
P Reg. de
Dirección leído 1
C lectura 2 Salida
Instrucciones ALU
o datos Reg. de ALU
escritura Dato
Dato Registro de leído 2 B
Dato a
datos de escribir
memoria
Figura 4.24: Visión de alto nivel del Camino de Datos del MIPS
La figura 4.24 muestra una visión de alto nivel del Camino de Datos completo. En
este diseño se utiliza una única ALU en vez de una ALU y dos sumadores, una memoria
4.5. CONSTRUCCIÓN DEL CAMINO DE DATOS 31
única para instrucciones y datos, y se han añadido registros temporales tras cada unidad
funcional para almacenar la salida de dicha unidad hasta que este valor vaya a utilizarse
en el siguiente ciclo. En concreto, se han añadido los siguientes registros temporales:
Todos los registros, excepto el IR, guardan datos entre dos ciclos de reloj consecutivos
y por tanto no necesitarán señal de escritura. El IR sı́ necesita conservar la instrucción
hasta el final de su ejecución y por lo tanto sı́ requiere de esa señal de control.
Debido a que se utilizarán varias unidades funcionales para diferentes propósitos,
será necesario introducir multiplexores para poder escoger entre diferentes entradas. Se
necesita un MUX para seleccionar:
La figura 4.25 muestra el Camino de Datos completo para ejecutar las instrucciones
básicas del MIPS.
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
Figura 4.25: Camino de Datos para ejecutar las instrucciones básicas del MIPS
A continuación describiremos como se utiliza este Camino de Datos para cada una de
las instrucciones consideradas.
Instrucciones aritmético-lógicas
La figura 4.27 muestra la parte del Camino de Datos que se utiliza para la búsqueda de
los registros. En esta etapa se leen los dos registros indicados por rs y rt y se almacenan
en los registros temporales A y B.
4.5. CONSTRUCCIÓN DEL CAMINO DE DATOS 33
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
La figura 4.28 muestra en rojo la parte del Camino de Datos que se utiliza para la
ejecución de la operación y en rosa lo que se utiliza de ciclos anteriores. En esta etapa
la ALU lleva a cabo la operación especificada en el código de función sobre los datos
almacenados en A y B en el ciclo anterior y almacena el resultado en el registro SalidaALU.
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
La figura 4.29 muestra en rojo la parte del Camino de Datos que se utiliza para escribir
el resultado (almacenado en el ciclo anterior en el registro SalidaALU) en el registro destino
especificado por el campo rd de la instrucción (bits 15-11).
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
Instrucción lw
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
La figura 4.31 muestra la parte del Camino de Datos que se utiliza para calcular la
dirección de memoria utilizando el dato almacenado en el registro A en el ciclo anterior.
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
Instrucción sw
Instrucción beq
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
En caso de que los operandos sean iguales, el salto será efectivo y se escribirá el PC con
el valor de salto calculado previamente.
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
Figura 4.36: Camino de Datos: instrucción beq, búsqueda de los registros y cálculo de la
dirección de salto
A continuación se utiliza la ALU para restar los dos operandos leı́dos en el paso
anterior y comprobar de esta forma si son iguales. La señal de Cero de la ALU se utiliza
para determinar si el salto se toma o no. Si se toma el salto se escribe el PC con el nuevo
valor (la figura 4.37 muestra en rojo la parte del Camino de Datos que se utiliza y en rosa
lo que se utiliza de ciclos anteriores), si no se cumple la condición de igualdad el PC no se
modifica (la figura 4.38 muestra la parte del Camino de Datos que se usa en este caso).
Instrucción j
Si lo que tenemos es una instrucción de salto incondicional lo único que tendremos que
hacer es escribir el PC con la dirección de salto. La figura 4.39 muestra en rojo la parte
del Camino de Datos que se utiliza.
Esta instrucción necesitarı́a solamente 2 ciclos para ejecutarse, pero como veremos
más adelante, se ejecutará en tres para simplificar el diseño de la Unidad de Control.
40 TEMA 4. EL PROCESADOR
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
M
REGISTROS
C Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2
Dato a M ALU
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
Figura 4.37: Camino de Datos: instrucción beq, ejecución cuando se cumple la condición
de salto
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
M
REGISTROS
C Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2
Dato a M ALU
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
Figura 4.38: Camino de Datos: instrucción beq, ejecución cuando no se cumple la condición
de salto
4.5. CONSTRUCCIÓN DEL CAMINO DE DATOS 41
0
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
signo 32 2 bits a
16 la izq.
Cuadro 4.3: Cálculo de los bits de control de la ALU en función de ALUop y el código de
función de las instrucciones tipo R
0
IoD Mem2Reg
1
M
Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
2 bits a Control
16 signo 32 ALU
la izq.
ALUop
Figura 4.40: El Camino de Datos de la figura 4.25 mostrando las señales de control
4.6. DISEÑO DE LA UNIDAD DE CONTROL 43
a ella. La principal diferencia con la figura 4.40 es la incorporación de las señales EscrPC
y EscrPCCond. El PC deberı́a escribirse en caso de salto incondicional (EscrPC=1) o en
caso de salto condicional si se cumple la condición de igualdad (EscrPCCond=1 y Cero
ALU=1).
EscrPC Cond
EscrPC FuentePC
IoD ALUop
LeerMem SelALUB
EscrMem Control SelALUA
Mem2Reg 0
EscrReg M
EscrIR OP RegDest 1
[31-26] Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x
de datos de
memoria Exten. Desp.
2 bits a Control
16 signo 32 ALU
la izq.
Las figuras 4.42 y 4.43 muestran qué hace cada señal de control cuando está activa e
inactiva.
La unidad de control debe especificar qué señales se van a activar en cada paso y cuál
es el siguiente paso de la secuencia. Se construye como un sistema secuencial o autómata
que va pasando por diferentes estados, indicando cada estado qué puntos de control se
activan (salidas del autómata) y, en función de las condiciones (entradas del autómata),
cual es el estado siguiente. Las condiciones de la unidad de control serán los bits de la
instrucción y los indicadores internos (por ejemplo, la salida Cero de la ALU).
Cada estado del autómata representará una etapa de la ejecución de la instrucción
y tardará un ciclo de reloj. Como hemos visto en la sección anterior, cada instrucción
necesita de tres a cinco etapas para ejecutarse. Gran parte de lo necesario para la ejecución
de estas instrucciones será común a todas ellas, de hecho, para cada instrucción los dos
primeros pasos serán idénticos. A partir de aquı́, las acciones necesarias para completar la
44 TEMA 4. EL PROCESADOR
En las siguientes subsecciones se muestra lo que ocurre en cada una de las etapas
dependiendo de la instrucción.
EscrPC Cond
EscrPC FuentePC
IoD ALUop
LeerMem SelALUB
EscrMem Control SelALUA
Mem2Reg 0
EscrReg M
EscrIR OP RegDest 1
[31-26] Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
M
REGISTROS
C Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2
Dato a M ALU
instrucción 4 1
Estado 0 escribir u
Instr. 0 2
LeerMem M x
[15-0] u 3
SelALUA = 0
Registro
selALUB = 01 A 1x
Inicio deEstado
datos de1
ALUOp = 00 Desp.
memoria Exten.
IoD = 0 2 bits a Control
16 signo 32 ALU
EscrIR la izq.
EscrPC
FuentePC = 00
EscrPC Cond
EscrPC FuentePC
IoD ALUop
LeerMem SelALUB
EscrMem Control SelALUA
Mem2Reg 0
EscrReg M
EscrIR OP RegDest 1
[31-26] Salto u
Desp. 28 incond. [31-0] x
Instrucción [25-0] 26
2 bits a 2
la izq.
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
Estado 1 [15-0] u 3
Registro
1x
De Estado 0 SelALUA = 0 Estado
de datos?de
memoria Exten. Desp.
selALUB = 11 Control
signo 32 2 bits a
ALUOp = 00 16 ALU
la izq.
A partir de aquı́ las operaciones del Camino de Datos vienen determinadas por el
tipo de instrucción. Las siguientes subsecciones describen las diferentes etapas por las que
pasan cada una de las instrucciones consideradas.
4.6. DISEÑO DE LA UNIDAD DE CONTROL 47
La figura 4.46 muestra los diferentes estados por los que se pasa en la ejecución de una
instrucción de acceso a memoria, ası́ como las señales de control que se activan en cada
paso. En los siguientes apartados se explican con más detalle cada una de las etapas.
De Estado 1
(Op = “LW”) o (Op = “SW”)
Estado 2
SelALUA = 1 Cálculo
selALUB = 10 dirección de
ALUOp = 00 memoria
Estado 4
Etapa de escritura
EscrReg
Mem2Reg = 1 Vuelta al
RegDest = 0 Estado 0
Esta etapa se corresponde con el estado 2 de la figura 4.46. La ALU debe efectuar
una suma para calcular la dirección de memoria (ver figuras 4.31 y 4.34). Para efectuar la
operación la señal de control SelALUA debe estar a 1 (el primer operando de la ALU es
el registro A) y SelALUB a 10 (el segundo operando de la ALU son los 16 bits de menor
peso de la instrucción con el signo extendido). La señal de ALUop vale 00 para hacer una
suma.
poner a 1 IoD para forzar que la dirección con la que se va a acceder a la memoria provenga
de la ALU. El registro MDR se escribe en cada ciclo de reloj, no necesita ninguna señal de
control de escritura explı́cita. Esta etapa se corresponde con el estado 3 en la figura 4.46.
Si es un store, el operando fuente almacenado en B se escribe en la memoria en la
dirección que se encuentra almacenada en SalidaALU y que ha sido calculada en el ciclo
anterior (ver figura 4.35). Se ha de activar la señal de control EscrMem y poner IoD a 1
para coger la dirección de memoria almacenada en SalidaALU. Esta etapa se corresponde
con el estado 5 en la figura 4.46. La instrucción sw finaliza aquı́, con lo cual en el siguiente
ciclo se volverı́a al estado 0.
La figura 4.47 muestra los diferentes estados por los que se pasa en la ejecución de
una instrucción aritmético-lógica, ası́ como las señales de control que se activan en cada
paso. Las siguientes subsecciones explican en más detalle cada una de las etapas.
De Estado 1
(Op = Aritmético-lógica)
Estado 6
SelALUA = 1 Ejecución de la
selALUB = 00 operación
ALUOp = 10
Estado 7
RegDest = 1 Finalización de
EscrReg la operación
Mem2Reg=0
Vuelta al
Estado 0
estar a 0 para que se escriba la salida de la ALU en lugar del dato obtenido de memoria.
Esta etapa se corresponde con el estado 7 en la figura 4.47.
Esta instrucción necesita solamente una etapa más, etapa 3. En esta etapa, la ALU
se utiliza para efectuar la comparación de igualdad entre los dos registros leı́dos en el
paso anterior. La señal de Cero de la ALU se utiliza para determinar si el salto se toma
o no (ver figuras 4.37 y 4.38). La señal SelALUA está a 1 y SelALUB a 00 para tomar
las salidas del banco de registros como entradas de la ALU. La señal ALUop está a 01
para realizar la resta y efectuar ası́ la comprobación de igualdad. La señal EscrPCCond
está activa para ası́ modificar el PC en caso de que la señal de Cero de la ALU también
lo esté. La señal FuentePC está a 01 indicando que el valor a escribir en el registro de
PC es almacenado en SalidaALU, el cual guarda la dirección de destino de salto que se
calculó en la etapa previa.
La figura 4.48 muestra el estado correspondiente a esta etapa, estado 8. Una vez
finalizado se vuelve al estado 0 para procesar la siguiente instrucción.
De Estado 1
(Op = “beq”)
Estado 8
SelALUA = 1 Finalización
selALUB = 00
ALUOp = 01
de salto condicional
EscrPCCond
FuentePC = 01
Vuelta al
Estado 0
10 y EscrPC se activa para escribir dicha dirección de salto en el PC. La instrucción jump
requiere un único estado adicional, el estado 9 (ver figura 4.49).
De Estado 1
(Op = “j”)
Estado 9
Finalización
EscrPC
FuentePC = 10 de jump
Vuelta al
Estado 0
Estado 0 Estado 1
LeerMem
SelALUA = 0
Inicio selALUB = 01 SelALUA = 0
ALUOp = 00 selALUB = 11
IoD = 0 ALUOp = 00
EscrIR
EscrPC
s)
ica
FuentePC = 00
(O
óg
(Op
”) = “j
p=
-L
“SW ”)
itm
Op =
”) o (
“be
Ar
= “LW Finalización
q”)
(Op
p=
Estado 2 Estado 6 de jump
(O
Estado 8 Estado 9
SelALUA = 1 Finalización
SelALUA = 1 Cálculo Ejecución de la SelALUA = 1 selALUB = 00
de salto condicional EscrPC
selALUB = 10 dirección de operación selALUB = 00 ALUOp = 01 FuentePC = 10
ALUOp = 00 memoria ALUOp = 10 EscrPCCond
FuentePC = 01
RegDest = 1 Finalización de
LeerMem EscrMem EscrReg
IoD = 1 I0D = 1 la operación
Mem2Reg=0
Acceso a Acceso a
memoria memoria
Estado 4
Etapa de escritura
EscrReg
Mem2Reg = 1
RegDest = 0
Figura 4.50: Autómata de control completo para el Camino de Datos de la figura 4.41
Codigo operacion
Secuenciador Condiciones camino datos
Reloj
Memoria de Control
(ROM)
Registro de Microinstruccion
.......
Señales de control
Nosotros vamos a ver como construir una unidad de control con secuenciamiento
explı́cito para el conjunto básico de instrucciones MIPS consideradas. Cada estado del
autómata de control de la figura 4.50 se va a corresponder con una microinstrucción.
Para llevar a cabo el secuenciamiento tenemos que tener en cuenta el diagrama de
estados del automáta de control. En general:
Existen, por tanto, tres métodos posibles para la elección de la siguiente microinstruc-
ción a ejecutar:
4.7. CONTROL MICROPROGRAMADO 53
Vamos a suponer la implementación más sencilla, cada punto de control del Camino
de Datos se corresponde con un bit de las microinstrucciones, es decir, cada una de las
microinstrucciones constan de 18 bits (1 bit por cada punto de control del Camino de
Datos y 2 bits para especificar la siguiente microinstrucción)1 .
La implementación de la Unidad de Control microprogramada completa puede verse
en la figura 4.52. El microprograma se almacena en una memoria de solo lectura (ROM).
El registro de estado almacena la dirección de la microinstrucción a acceder. La función
de secuenciación se realiza aparte en función de CtrlDir y el código de operación de la
instrucción. La figura 4.53 muestra una posible implementación de la lógica de selección
de dirección. Un mux selecciona en función de CtrlDir si aumentar la dirección actual
(se utiliza un sumador para realizar el incremento), utilizar las tablas de envı́o 1 o 2, o
saltar a la microinstrucción 0 para empezar el procesamiento de una nueva instrucción. La
selección de la entrada en las tablas de envı́o se hace en función del código de operación
de la instrucción.
Finalmente, la figura 4.54 muestra el contenido de la memoria de control, es decir, el
microprograma completo correspondiente al autómata de control de la figura 4.50. Ca-
da microinstrucción representa un estado del autómata de control y define las señales de
1
Los puntos de control podrı́an estar codificados para ahorrar bits en las microinstrucciones. En
contrapartida se necesitarı́a incluir un decodificador.
54 TEMA 4. EL PROCESADOR
FuentePC (2)
ALUop (2)
SelALUA
SelALUB (2)
EscrReg
RegDest
Salidas EscrPC cond
EscrPC
Lógica de Control IoD
(ROM) LeerMem
EscrMem
Mem2Reg
EscrIR
CtrlDir (2)
Entradas
1
2
4
Selección
dirección siguiente
Código de operación
Bits [31-26] del
registro de instrucción
ROM CtrlDir
Entradas
1 2
4
MUX
3 2 1 0
Selección
dirección siguiente
Código de operación
Bits [31-26] del
registro de instrucción
Figura 4.53: Lógica de selección de dirección para la unidad de control de la figura 4.52
4.7. CONTROL MICROPROGRAMADO 55
control activas en ese estado, ası́ como la siguiente microinstrucción a ejecutar. Las instruc-
ciones del microprograma se etiquetan simbólicamente. Estas etiquetas serán utilizadas
para especificar los contenidos de las tablas de envı́o. Un campo en blanco correspondiente
a una señal que afecta al control de una unidad de estado significa que la señal de control
asociada no debe activarse. Un campo en blanco correspondiente a una señal de control
de un MUX o al control de operación de la ALU significa que la salida no se usa, por lo
que las señales asociadas pueden considerarse indiferentes.
SelALUB (2)
FuentePC (2)
EscrPCCond
ALUOp (2)
CtrlDir (2)
Mem2Reg
SelALUA
LeerMem
EscrMem
RegDest
EscrReg
EscrPC
EscrIR
IoD
1 0 1 1 0 0 1 0 3 estado 0
0 3 0 1 estado 1
Mem1 0 2 1 2 estado 2
Lw2 1 1 3 estado 3
1 1 0 0 estado 4
Sw2 1 1 0 estado 5
Rformat1 2 0 1 3 estado 6
0 1 1 0 estado 7
Beq1 1 1 1 0 1 0 estado 8
Jump1 1 2 0 estado 9
En la figura 4.55 se pueden ver las dos tablas de envı́o mostrando el contenido en forma
simbólica utilizando las etiquetas del microprograma. Dependiendo de la instrucción que
se esté ejecutando en el Camino de Datos se saltará a una u otra microinstrucción de la
memoria de control.
56 TEMA 4. EL PROCESADOR
4.8. Temporización
En el diseño propuesto cada instrucción se divide en una serie de etapas, correspon-
diéndose cada una de ellas con un estado de la unidad de control, es decir, cada etapa
necesitará un ciclo de reloj para ejecutarse. La figura 4.56 resume las etapas realizadas
para ejecutar cualquier tipo de instrucción y el cuadro 4.4 el número de ciclos consumido
por cada instrucción o CPI (Clock Cycles per Instruction).
Figura 4.56: Resumen de las etapas realizadas para ejecutar cualquier tipo de instrucción
El ciclo de reloj debe acomodarse al tiempo de las operaciones del Camino de Datos
que se realizan en las diferentes etapas: acceso a memoria, acceso al banco de registros o
una operación de la ALU. El ciclo de reloj deberı́a ser al menos tan largo como la más
larga de las operaciones anteriores. Si suponemos, por ejemplo, que se necesitan 2.5 ns
para la lectura de memoria, 3 ns para la escritura en memoria, 2 ns para que la ALU lleve
a cabo una operación y 1 ns para el acceso a los registros (lectura y escritura), el ciclo de
reloj deberı́a ser al menos de 3 ns. En este caso, tardarı́amos 12 ns (4 × 3 ns) en ejecutar
una instrucción aritmética.
4.9. PROCESAMIENTO DE EXCEPCIONES 57
Finalizar el programa o continuar con su ejecución, usando EPC para saber dónde
retomar la ejecución.
Para que el sistema operativo pueda tratar la excepción, debe conocer las razones
por las que se ha producido, además de la instrucción que la ha causado. El método
empleado en la arquitectura MIPS para comunicar la causa es incluir un registro de estado
denominado Registro de Causa o Cause Register, que contiene un campo que indica la
razón de la excepción.
Se puede incluir el procesamiento de excepciones a la unidad central de proceso pre-
viamente diseñada añadiendo algunos registros extra y algunas señales de control. En
concreto, se tendrán que añadir 2 registros adicionales al Camino de Datos:
En cuanto a las señales de control, necesitaremos dos señales de control para que se es-
criban el EPC y el Registro de Causa llamadas EscrEPC y EscrCausa respectivamente.
Además, también se necesita una señal de control de 1 bit para fijar el valor del Regis-
tro de Causa, es decir, para fijar el tipo de excepción. Esta señal recibe el nombre de
CausaInt. Finalmente, se tiene que poder escribir la dirección del punto de entrada del
sistema operativo para el tratamiento de la excepción en el PC. Supondremos en nuestra
implementación que esta dirección es la C0000000hex . Actualmente, el PC está conecta-
do a la salida de un multiplexor de cuatro entradas controlado por la señal FuentePC
(ver figura 4.41). De las cuatro entradas solamente se utilizan tres. Podemos por tanto
añadir una entrada adicional con el valor constante C0000000hex . La figura 4.57 muestra
el Camino de Datos con los elementos necesarios para el procesamiento de excepciones.
EscrCausa
CausaInt
EscrPC Cond EscrEPC
EscrPC FuentePC
IoD ALUop
LeerMem SelALUB
EscrMem Control SelALUA
Mem2Reg 0
EscrReg M
OP Salto 1
EscrIR RegDest Desp. 28 incond. [31-0] u
[31-26] Instrucción [25-0] 26
2 bits a 2
x
la izq. 3
C0000000
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU EPC
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x 0 0
de datos de M
memoria Exten. Desp.
2 bits a Control u Causa
signo 32
16 la izq. ALU 1 1x
Figura 4.57: Camino de Datos con los componentes adicionales necesarios para realizar
las excepciones
EscrCausa
CausaInt
EscrPC Cond EscrEPC
EscrPC FuentePC
IoD ALUop
LeerMem SelALUB
EscrMem Control SelALUA
Mem2Reg 0
EscrReg M
OP Salto 1
EscrIR RegDest Desp. 28 incond. [31-0] u
[31-26] Instrucción [25-0] 26
2 bits a 2
x
la izq. 3
C0000000
PC [31-28]
Instrucción Reg. de 0
P [25-21] lectura 1 M
0
REGISTROS
C M Memoria Dato u
Instrucción Reg. de leído 1 A
u Dirección 1x
ALU
[20-16] lectura 2
1x Instrucciones 0 Cero
Instrucción M Reg. de
o datos Instr.
[15-0] u escritura Dato Resultado
Salida
[15-11] B 0 ALU EPC
1x
Datos Registro de leído 2 ALU
Dato a M
instrucción escribir 4 1
u
Instr. 0 2
M x
[15-0] u 3
Registro
1x 0 0
de datos de M
memoria Exten. Desp.
2 bits a Control u Causa
signo 32
16 la izq. ALU 1 1x
Al Estado 0
Inicio de una nueva
instrucción
Figura 4.59: Par de estados que muestran las acciones necesarias para las dos excepciones
consideradas
Ahora falta detectar estas excepciones y transferir el control al estado apropiado. Cada
una de las dos excepciones posibles se detecta de forma diferente:
La figura 4.60 muestra la máquina de estados finita con los estados adicionales para
tratar la detección de excepciones.
Estado 0 Estado 1
LeerMem
SelALUA = 0
Inicio SelALUB = 01
SelALUA = 0
ALUop = 00
SelALUB = 11
IoD = 0
ALUop = 00
EscrIR
EscrPC
a
FuentePC = 00
gic
Op
-Ló
Op
sw =j
Op = rit. Op
=b
=
=A
ot
eq
ro Finalización
Op
s de jump
Estado 2 Estado 6 Estado 8 Estado 9
SelALUA = 1 Finalización
SelALUA = 1 Cálculo Ejecución de la SelALUA = 1 SelALUB = 00 de salto condicional
SelALUB = 10 dirección de operación SelALUB = 00 EscrPC
ALUop = 01
ALUop = 00 memoria ALUop = 10 FuentePC=10
EscrPCCond
FuentePC=01
D
es
bor
Op = lw Op = sw dam
Estado 5 ie
Estado 3 Estado 7 nt
o Estado 10
Estado 11
RegDest = 1 CausaInt = 0 CausaInt = 1
LeerMem EscrMem EscrReg
IoD = 1 IoD = 1 EscrCausa EscrCausa
Mem2Reg = 0 SelALUA = 0 SelALUA = 0
Acceso a Acceso a SelALUB = 01 SelALUB = 01
memoria memoria ALUop = 01 ALUop = 01
Finalización de EscrEPC EscrEPC
la operación EscrPC EscrPC
FuentePC = 11 FuentePC = 11
Estado 4
Etapa de escritura
EscrReg
Mem2Reg = 1
RegDest = 0
Cuadro 4.6: Tabla de envı́o 3 para el autómata de la figura 4.60 SelALUB (2)
FuentePC (2)
EscrPCCond
ALUOp (2)
EScrCausa
CtrlDir (3)
Mem2Reg
SelALUA
LeerMem
EscrMem
EscrEPC
CausaInt
RegDest
EscrReg
EscrPC
EscrIR
IoD
1 0 1 1 0 0 1 0 3 estado 0
0 3 0 1 estado 1
Mem1 0 2 1 2 estado 2
Lw2 1 1 3 estado 3
1 1 0 0 estado 4
Sw2 1 1 0 estado 5
Rformat1 2 0 1 4 estado 6
Arit3 0 1 1 0 estado 7
Beq1 1 1 1 0 1 0 estado 8
Jump1 1 2 0 estado 9
Ov3 1 3 1 1 0 0 0 1 1 estado 10
Nodef1 1 3 1 1 0 0 1 1 1 estado 11