Você está na página 1de 39

Unidad Central de Proceso

En este tema estudiaremos la funcin de la Unidad Central de Proceso dentro de la Mquina


de Von Neumann. Para ello, ser necesario conocer con ms detalle el propio funcionamiento
de este tipo de arquitecturas. Prestaremos especial inters a la relacin de la CPU con la
memoria, a la organizacin de los registros en bancos, la temporizacin del ciclo de instruccin
y a los puntos de control de la mquina.

1. Introduccin

En el tema 1 se present una primera descripcin del funcionamiento del computador, en la


que se present al ciclo de instruccin como elemento de referencia para entender su
mecanismo de funcionamiento. En resumen, se presenta al Computador como "una mquina
que repite indefinidamente, y de forma consecutiva, ciclos de instruccin". En cada ciclo de
instruccin, el proceso consiste en buscar una instruccin en la memoria del computador,
decodificarla (interpretar su contenido), ejecutarla, y determinar la ubicacin en memoria de
la siguiente instruccin.

Tambin vimos que, con el registro "Contador de Programa", disponemos de la herramienta


necesaria para la seleccin correcta de las instrucciones que se ejecutan en cada ciclo. Este
registro no es ms que un puntero (indireccin) de instrucciones, y que por defecto tiene un
comportamiento de autoincremento que provoca una bsqueda de las instrucciones en el
mismo orden en el que se encuentran guardadas en memoria.

En el tema 2, adems de la representacin de los datos en binario, se analiz en detalle la


representacin de las instrucciones, aunque para ello fue necesario explicar:

Qu tipo de instrucciones entiende el computador


Qu datos necesitan las instrucciones
Cmo se localizan los datos
Cmo se codifican las instrucciones en binario

Implcitamente, ya empezamos a desgranar qu ocurre en el ciclo de instruccin, y


descubrimos tambin la existencia de instrucciones de control, que podan modificar el valor
almacenado en el "Contador de Programa". En decir, presentamos una forma de alterar el
secuenciamiento implcito de las instrucciones. Por todo ello, el alumno, afronta este tema con
un conocimiento bastante pormenorizado del funcionamiento de un computador en el nivel
ISA.

El objetivo de este tema es fijar todos los conceptos adquiridos por el alumno mediante una
descripcin ms detallada de la parte del computador encargada de coordinar y ejecutar las
operaciones que envuelve un ciclo de instruccin: la CPU. En este tema la estudiaremos en
cuatro pasos: primero veremos sus componentes, despus el ciclo de instruccin, en tercer
lugar analizaremos la coordinacin del ciclo de instruccin mediante la Unidad de Control, y
finalmente la secuenciacin de los distintos ciclos de instruccin. Un aspecto importante en
este tema es el problema de la temporizacin, en el que aprenderemos los mecanismos que
permiten que las operaciones internes de cada instruccin (microoperaciones) se ejecuten de
forma correcta y en el orden previsto por el programador. El tema concluye con una
descripcin de las propiedades que caracterizan un computador y un par de ejemplos de
procesadores.

1.1 Componentes del Computador

En este apartado se presentan algunos de los dispositivos lgicos esenciales utilizados en el


diseo del computador. Son los ladrillos de la CPU, que se conectan entre s mediante buses
que realizan la funcin del cemento para conseguir una estructura solida.

Las seales cables y buses.


Desde un punto de vista fsico, un cable es un dispositivo que transporta la electricidad. Desde
nuestro nivel de abstraccin, cada cable del circuito transporta un bit (debido a que tiene dos
posibles potenciales de referencia asociados a un valor 0 o 1). Se denomina seal al valor
lgico (0, 1) que transporta el cable, y por extensin, al propio cable.

Un conjunto de cables transporta una secuencia de bits. Cuando dichos bits conforman una
entidad (un nico dato, una instruccin, etc.), al conjunto de cables se denomina bus. Como
ejemplo, en los computadores hay uno o dos buses de direcciones que, obviamente,
transportan punteros (nmeros naturales, direcciones de memoria) y cuyo nmero de hilos
(32, 64) est relacionado con el tamao de la memoria. El nmero de hilos de un bus se
representa con un numerito situado junto al bus, y una raya oblicua que lo cruza:
6

Para el arquitecto de computadores, los cables y buses tienen dos extremos diferenciados: el
origen de la informacin y el destino. Muchos de ellos se bifurcan en algn punto y tienen
varios destinos, pero nunca, nunca, tienen dos fuentes de informacin, ya que en caso de que
fueran diferentes, provocaran un cortocircuito. En algunos casos los buses se abren,
separando los bits que transportan (por ejemplo, un bus de 32 bits se abre en dos buses de 16
bits, con las partes ms y menos significativas). En otros casos, buses y cables se unen,
formando buses de mayor capacidad.

Las puertas lgicas y las operaciones lgicas.


Una puerta lgica es un dispositivo capaz de realizar una operacin lgica elemental (descrita
en el lgebra de Boole. Las puertas tienen seales de entrada y una seal de salida cuyo valor
depende de la operacin que implementa. La salida depende de la entrada segn una tabla de
funcionamiento que se denomina tabla de verdad. En la imagen se muestra una puerta AND
de ejemplo, en el que su salida vale 1 slo si todas las seales de entrada valen 1.

Es preciso conocer el funcionamiento de las puertas AND, OR, NOT, NAND, NOR y XOR.
Operaciones lgicas en buses (bit a bit)
A veces se representan puertas lgicas que operan con buses de entrada y salida. Como los
buses de entrada y salida son del mismo tamao (n), en realidad estas puertas de buses son n
puertas que operan sobre los bits que ocupan la misma posicin relativa en los distintos buses:

4
4
4

Multiplexor
Con varias puertas lgicas podemos construir un circuito que seleccione para la salida una de
sus posibles entradas. Cul de las posibles entradas se muestra en la salida lo determina la
seal o seales de seleccin (control). La seal selectora tambin es una entrada al circuito. En
el multiplexor 2 a 1 (dos entradas y una salida), la seleccin es un solo bit. Hay multiplexores 4
a 1, 8 a 1, etc., con selectores de 2 bits, 3 bits, etc.

En el computador dispondremos de multiplexores de buses. Las entradas Ii y la salida out son


buses de n bits, e internamente estn constituidos por n multiplexores que comparten las
seales selectoras de control.

Otros dispositivos muy utilizados en el computador y que conviene conocer son los
demultiplexores y los descodificadores en lnea. En el demultiplexor con m bits de seleccin,
hay una entrada (seal o bus) y 2m salidas. Los m bits de seleccin determina en cul de las
salida se vuelca la informacin de entrada, estando el resto de salidas a cero. El descodificador
en lnea tiene m entradas y 2m salidas de 1 bit. Todas las salidas estn a cero excepto aquella
cuyo nmero de orden determina la codificacin en binario natural de las m entradas:

0
0
0 0
1 011 (3) 1
1 0
0
0
0
Sumadores y unidades aritmtico-lgicas (ALU)
Estos dispositivos trabajan con los datos de entrada que llegan a travs de buses en los que la
informacin es de carcter numrico (entero o flotante). En la salida, en un bus, se muestra el
dato numrico resultante tras realizar una operacin aritmtica (o lgica). No es objetivo de
este tema saber cmo se realiza. Hay un tema especfico para ello.

En el caso del sumador, la operacin realizada es la suma de nmeros en binario natural o


formato N-2.

En las unidades aritmticas ms complejas es posible elegir la operacin entre una gama (p.e.
SUMA, RESTA, AND, OR, MUL, DIV, OPUESTO, INVERSO). Seales de control (selectores)
posibilitan la eleccin de la operacin. Y como siempre, con m bits de control podemos elegir
hasta 2m operaciones.

Ms adelante, en este tema, volveremos a analizar las ALUs con detalle.

Circuitos combinacionales
Las puertas lgicas, multiplexores, descodificadores y unidades aritmticas que hemos
visto anteriormente pertenecen a una clase de circuitos lgicos conocidos como
circuitos combinacionales. Su funcionamiento viene determinado por una tabla de
verdad en la que, para cada combinacin de valores de entrada se conoce el valor de
las salidas.

Imagine su funcionamiento como el de una caja negra en la que hay pulsadores


(entradas) y bombillas (salidas). El circuito interno es desconocido, pero dada una
combinacin de estados de los pulsadores, la salida es perfectamente conocida.

El prximo elemento que estudiaremos, el biestable, no pertenece a esta categora. Es


un circuito secuencial.

Los biestables y registros


El biestable es un circuito simple que se utiliza para almacenar o retener informacin lgica.
En su estructura ms simple, es un dispositivo con una entrada, una salida y una seal de
control (que tambin es de entrada). Imagnelo como una caja que encierra un cero o un uno.

La salida es un reflejo de un valor almacenado (0 1)


La entrada es un seal (0 1) que se presenta candidata para reemplazar el contenido
de la caja
La seal de control (se denomina load), cuando vale uno, habilita el reemplazo del
contenido por el valor de entrada.

Observe la siguiente secuencia:


Como puede ver, el biestable almacenaba un valor inicial 0 (se observa en la salida). En la
entrada (botn azul) se presenta un 1. En el tercer paso, el valor 1 se carga (pulsando el botn
rojo) y la salida se enciende. El botn load se desactiva, por lo que el valor de entrada, que
pasa a cero en el ltimo paso, no se almacena. La combinacin final de las entradas es la
misma que en el primer paso, pero la salida es diferente!

Circuitos secuenciales
Los circuitos como el biestable son secuenciales. El valor de la salida no slo depende
de la combinacin de valores de entrada, sino tambin de la secuencia histrica de
valores anteriores en las entradas. De alguna forma (la organizacin interna de los
transistores no es objeto de estudio en esta asignatura) es capaz de recordar la
informacin que pas previamente por sus entradas. Gracias a ellos podremos
implementar estructuras ms complejas capaces de almacenar un elevadsimo nmero
de bits. Son los registros y las memorias

A partir de ahora, denominaremos al biestable celda de informacin, y es capaz de guardar un


bit. Los registros son un conjunto de celdas que comparten la seal load. Estn capacitados
para guardar una secuencia de bits. Las entradas y salidas son buses.

La seal de reloj y la activacin por flanco


Para garantizar el correcto funcionamiento de un computador, la seal de control load
se complementa con una seal peridica (que alterna ceros y unos) que es comn para
todos los circuitos secuenciales. Esta seal se denomina clk. Para que un registro o
biestable almacene informacin, deben darse dos circunstancias: la seal load debe
estar activa, y la seal clk est pasando del valor uno a cero. El momento de
transicin de uno a cero se denomina flanco de bajada. Es preferible que los registros
cambien su contenido durante el flanco, porque es mucho ms preciso que hacerlo
durante el tiempo en que estn en el nivel activo las seales (clk y load). En la analoga
de los pulsadores, el valor se almacena en el instante que liberamos el botn rojo
(flanco) y no durante el tiempo de pulsacin (nivel).

Adems de los buses de entrada y salida, de la seal de control load y de la seal de


sicronizacin clk, en muchos casos disponen de controles adicionales. Algunos ejemplos son:
reset, que almacena una secuencia de ceros; set, que almacena el valor 1 en binario natural;
incr, que le suma un valor fijo (p.e., +4) al valor almacenado (interpretado como entero). Todas
las seales slo actan en el flanco activo del reloj.
Las memorias
De la misma forma que las celdas se agrupan en registros, se pueden hacer otras agrupaciones
de mayor nivel. En un computador hay dos estructuras de almacenamiento de este tipo: los
bancos de registros y la memoria, que tienen caractersticas similares:

Un banco de registros es un conjunto ordenado de registros del mismo tamao. Cada


registro tiene entre 32 y 64 bits.
La memoria es un conjunto ordenado de palabras. Cada palabra tiene 8 bits.

Comparado con los registros, estas estructuras necesitan un bus adicional de direccin en el
que se indica, con un nmero en binario natural,

de qu registro o palabra se va a mostrar su contenido en la salida, o


en qu registro o palabra se va escribira el valor de la entrada.

Observe que, una vez fijada la direccin, el dispositivo se comporta como un simple registro. Y
un detalle. La seal load de los registros, se denomina write en estas dos superestructuras. En
muchos casos se aade una seal read para indicar que la intencin es consultar el almacn.
Los bancos de registros y la memoria son diferentes en muchos aspectos:

Unidad de almacenamiento Tamao de unidad (bits) N de unidades Tecnologa de celda Ubicacin


Banco de registros Registro 32 a 64 actualmente billones rpida (transistores) En la CPU
Memoria Palabra de memoria o byte 8 8 a 64 lenta (condensadores) Fuera de CPU

En la memoria del computador, el bus de entrada y salida se suele dibujar como un nico bus
bidireccional. En los bancos de registros, en cambio, se dibujan por separados y se les asigna el
nombre de puerto de entrada y puerto de salida. Ms adelante veremos que es posible que
haya varios puertos de salida.

Las operaciones de memoria

En memorias y bancos de registros se realizan dos tipos de operaciones:

Lectura: En primer lugar se coloca en el bus de direcciones un nmero natural (indica


el nmero de orden de cierta unidad de almacenamiento). Se activa la seal read. En el
bus de salida, y con un cierto retraso (mucho mayor en la memoria que en el banco)
aparece el contenido de la unidad de almacenamiento.
Escritura: se coloca en el bus de direcciones un nmero natural (indica el nmero de
orden de cierta unidad de almacenamiento). Se activa la seal write. Se coloca en el
bus de entrada un valor. En el siguiente flanco activo de reloj, el valor de entrada es
almacenado en la unidad direccionada.

1.2 Partes de un procesador

La mquina de Von Neumann consta de cuatro elementos relacionados:

Memoria. Es el lugar donde se guardan las instrucciones que ejecuta el computador


(programa), y los datos sobre los que operan dichas instrucciones.

Unidad central de Proceso, procesador o CPU. Es el elemento ms complejo del


computador; la parte encargada de localizar y ejecutar las instrucciones. Internamente se
organiza en dos partes, que podramos considerar el cerebro (Unidad de Control) y el
brazo ejecutor (Va de Datos):

Unidad de control. Se encarga de impartir rdenes mediante seales de control


Unidad de proceso o Va de datos. Es el elemento del computador que hace
efectiva las rdenes, y para ello dispone de una Unidad aritmtico lgica (un
dispositivo que hace clculos aritmticos u operaciones lgicas), un "banco de
registros" (un lugar de almacenamientos para los datos que se utilizan en las
instrucciones) y otros registros de propsito ms especfico.

Unidad de entrada y salida. Permite la comunicacin con el exterior.

Buses. Es el cableado que interconecta los cuatro elementos anteriores. Los buses ms
importantes son:

Buses de control: Cableado que sale de la Unidad de Control al resto de


elementos para gobernar el computador
Buses de estado: Cableado que llega a la Unidad de Control, y que le ayuda a
tomar decisiones. Los bits ms importantes son los que transportan los opcodes
y flags. Algunos proceden del exterior (por ejemplo, el botn RESET).
Bus de direcciones, para indicar el lugar de la memoria en el que se encuentra
una instruccin o dato.
Buses de datos para la memoria y los dispositivos de entrada y salida. Son los
que transportan al/del procesador los datos e instrucciones que hay en la
memoria o en dispositivos externos.

En la siguientes secciones analizamos con ms detalle los elementos de la Unidad de


Proceso: Registros y Unidad Aritmtica.

Los registros

Contador de programa o puntero de instrucciones (PC, IP)


Selecciona la instruccin que se va a ejecutar. Se usa al inicio del ciclo de instruccin.
Cambia automticamente preparando el siguiente ciclo.

Registro de instrucciones (IR)


Almacena la instruccin que procede de memoria

Registros de direcciones (ARs)


Almacenan direcciones utilizadas para acceder a datos. Su tamao est relacionado con el
mapa de memoria (como PC)

Registros de datos (DRs)


Almacenan los datos (ya sean operandos o resultados). Su tamao est ntimamente
relacionado con la ALU

Registros de Propsito General (RPGs)


Se denominan as los registros accesibles desde las instrucciones, y que sirven para almacenar
tanto direcciones como datos. Han reemplazado a los registros especficos en los
procesadores ms modernos, por su versatilidad. Se agrupan en un banco.

El registro de estado
Uno de los registros ms importantes de la CPU, por el papel que juega en la toma de
decisiones de un cdigo (bifurcaciones) es el registro de estado.

A diferencia del resto de registros del procesador, el registro de estado est constituido por
bits que en conjunto no tienen una semntica comn, sino que la informacin que guarda cada
uno de ellos (o cada pequeo grupo de bits) tiene un significado especfico. Por ello, los bits
del registro de estado tienen tambin un nombre propio: flags (indicadores).

Cada flag guarda informacin de un aspecto particular del estado de un computador. Para
entender mejor qu funcin realizan los flags, veamos dos ejemplos.
Boot flag (MIPS). Durante el arranque del computador, dicho vale 1. El resto del
tiempo vale 0.
Zero flag (ZF en el i8086). Tras la ejecucin de una instruccin aritmtica, el flag vale 1
si el resultado de la operacin es 0. En caso contrario, el flag vale 0. Dicho flag tambin
afecta a las instrucciones de movimiento de datos, identificando si el dato copiado es
nulo o no.

Flags y saltos
Los flags se utilizan a menudo para propagar informacin relevante de un ciclo
de instruccin al siguiente, y precisamente en muchos computadores se utiliza
el valor de un flag para tomar decisiones en base a una instruccin ejecutada
previamente. Veamos un ejemplo:

SUB R4, R2, R3 (Restamos R2- R3 y guardamos en R4. Los flags se


actualizan)

BR_Z destino (saltamos si el flag Z vale 1)

Los computadores modernos ya no utilizan los flags para los saltos. Lo normal
que las condiciones se evalen en la propia instruccin, evitando las
dependencias entre instrucciones y facilitando la ejecucin de instrucciones en
paralelo o fuera de orden*. Veamos dos ejemplos de instrucciones de salto
que no precisan de flags:

BR_Z R4, destino (saltamos si elR4 vale 0)

BR_EQ R2, R3, destino (saltamos si R2 es igual a R3)

La Pila y El Registro puntero de Pila.


Como se adelant en el tema anterior, los computadores reservan una zona de la memoria
principal para guardar una estructura de datos algo peculiar: La Pila. Esta estructura se
caracteriza porque los datos que se almacenan en la misma lo hacen en orden: siempre
almacenaremos cualquier valor a continuacin del ltimo elemento guardado. Para llevar la
cuenta del lugar de la memoria que corresponde, se utiliza un registro especial denominado
Puntero de Pila (Stack Pointer).

Dos criterios muy importantes se deben tener en cuenta para entender el puntero de pila:

Dnde apunta exactamente el registro SP?


1. Al ltimo elemento almacenado en Pila.
2. Al lugar donde se almacenara el siguiente dato que se guarde en Pila.
En qu sentido del Mapa de Memoria crece la Pila?
A. La Pila crece en direcciones crecientes de memoria
B. La pila crece en direcciones decrecientes de memoria

Dichos criterios son muy importantes para entender cmo funciona SP tras una operacin de
Pila.
Imaginemos que SP tiene el valor 18, y deseamos almacenar un dato de 2 bytes.

En el caso 1-A, el dato se guarda en 20 y el puntero de pila cambia su valor a 20


En el caso 1-B, el dato se guarda en 16 y el puntero de pila cambia su valor a 16
En el caso 2-A, el dato se guarda en 18 y el puntero de pila cambia su valor a 20
En el caso 2-B, el dato se guarda en 18 y el puntero de pila cambia su valor a 16

De la pila tambin se pueden extraer datos para llevarlo a otro lugar del computador. En
dicho caso, el puntero de pila se modifica en el sentido contrario, y el dato se copia al registro.
Evidentemente, no es necesario eliminar el dato de la Pila, aunque lo normal es que dichos
datos (normalmente innecesarios) queden expuestos, ya que sern sobreescritos por cualquier
nuevo valor que se guarde en pila. Veamos el comportamiento de la instruccin POP R5 segn
los 4 criterios de diseo para la Pila en la que SP=18:

En el caso 1-A, el dato de 18 se copia a R5 y el puntero de pila cambia su valor a 16


En el caso 1-B, el dato de 18 se copia a R5 y el puntero de pila cambia su valor a 20
En el caso 2-A, el dato de 16 se copia a R5 y el puntero de pila cambia su valor a 16
En el caso 2-B, el dato de 20 se copia a R5 y el puntero de pila cambia su valor a 20

Los registros acumuladores


En las antiguas arquitecturas exista un registro denominado acumulador en el que se
guardaban los resultados de todas las operaciones aritmtico-lgicas, y que con frecuencia,
eran simultneamente el almacn de uno de los operandos de la operacin.

Ampliacin: Como curiosidad, el registro de propsito general de 32 bits EAX de los modernos
procesadores de Intel recibe el nombre del registro RPG de 16 bits AX del i8086, y este a su vez
del registro A de 8 bits de los procesadores i8080 e i8008, que a su vez provienen del registro
Acumulador de 4 bits del procesador i4004.

Registros temporales o de apoyo


Los computadores tienen muchos otros registros que no son accesibles desde las
instrucciones, sino que son usados por dichas instrucciones durante el ciclo de instruccin
como almacenes intermedios de datos: son los registros temporales. Veamos como ejemplo la
instruccin EXCH R2, R3 que intercambia los contenidos de los registros R2 y R3. Internamente,
es posible que se utilice un almacenamiento intermedio (TMP):

1. TMP R2 (el contenido de R2 se copia en TMP)


2. R2R3
3. R3TMP

En el ejemplo, el registro TMP existe realmente dentro de la CPU, pero sin embargo, el juego
de instrucciones no permite usar dicho registro ni como operando fuente o destino, aunque
sea implcitamente.

Aunque el registro PC tampoco es accesible explcitamente por el nivel ISA, eso no lo convierte
en registro temporal por su propsito especfico.
Registros Arquitecturales y Fsicos
En los computadores ms modernos, los registros fsicos de la CPU no tienen
preasignado un identificador (como R8 o EAX) para que sean accedidos por
las instrucciones, sino que dicha asignacin se efecta dinmicamente durante
un programa, e incluso puede cambiar varias veces a lo largo del programa. As
podemos distinguir entre los registros arquitecturales y fsicos. Los
arquitecturales son aquellos que referencia el juego de instrucciones. Para
entendernos, son los registros que el programador cree que tiene la CPU. Los
registros fsicos son los que realmente tiene la CPU, y por supuesto, debe
haber ms registros fsicos que arquitecturales.

El hardware mantiene una tabla de asignacin entre registros arquitecturales y


fsicos. Como esa tabla se puede modificar, nunca sabremos exactamente cul
es la ubicacin fsica de un dato. Esta distincin facilita que el computador,
entre otras cosas, pueda ejecutar las instrucciones en paralelo o fuera de
orden*.

Banco de registros

Internamente, los registros de propsito general de un procesador se agrupan formando


bancos de registros, cuyo comportamiento, desde el punto de vista lgico, es muy similar al de
una pequea memoria.

As, sobre los bancos de registros se pueden realizar operaciones de lectura o escritura. En una
operacin de lectura, es necesario:

1 Seleccionar qu registro del banco se desea consultar. Para ello se utiliza un bus de
seleccin de registro cuyo tamao depende logartmicamente del nmero de
registros.
2 Obtener el contenido del registro seleccionado, a travs de un bus o puerto de
salida. El ancho del bus coincide con el ancho de los registros del banco.

Puertos
Los puertos son los buses a travs de los cuales entran y salen datos al banco
de registro. En los procesadores RISC ms avanzados, cada puerto tiene su
propio bus de direcciones, permitiendo por ejemplo hacer una lectura en el
banco y una escritura, en el mismo ciclo de reloj.
En la figura se muestra un banco de registros en el que se realiza una operacin de lectura del
registro 4 (se introduce el valor 100 en el bus de seleccin) para obtener su contenido (E).

En una operacin de escritura, el registro seleccionado por el bus ser modificado por el valor
que se suministra a travs del puerto de escritura. El tamao del puerto de escritura es el
mismo que el de los registros que contiene el banco.

Los pasos de escritura son:

1 Seleccionar el registro con el bus de direccin del puerto de escritura


2 Enviar un nuevo dato al puerto de escritura
3 Enviar una orden de escritura sincronizada (write y clk)
4 En el flanco activo, el registro seleccionado modifica su contenido con el nuevo
dato.

En la figura adjunta, el puerto 5 ha modificado su contenido con el valor J. El cambio de valor


(de F a J) se produce en el momento en el que se activa la orden de escritura.
Los procesadores RISC, como el MIPS, normalmente tienen varios puertos de lectura o
escritura, para facilitar el acceso simultneo al banco de registros. En la siguiente figura se
muestra una implementacin del MIPS con dos puertos de lectura y uno de escritura:

Algunos aspectos se deben tener en cuenta cuando hay varios puertos de lectura o escritura.

Varias lecturas se pueden ejecutar simultneamente sin problemas


Varias escrituras se pueden realizar en paralelo si no tienen el mismo registro destino
Si una lectura y escritura simultnea referencian al mismo registro, el banco puede:
A. Hacer la lectura durante el ciclo y la escritura el final del mismo (flanco)
B. Hacer la escritura a mitad del ciclo y la lectura en el segundo semiciclo. Esta
posibilidad no la consideramos en este curso.

La Unidad Aritmtico-Lgica

La ALU es la parte de la CPU encargada de ejecutar las operaciones aritmticas o lgicas que
sean requeridas durante la ejecucin de una instruccin.

Estas son algunos ejemplos de esas operaciones:

En una suma (ADD), la ALU es el circuito que realmente hace la operacin


En un acceso a memoria, la ALU puede sumarle un desplazamiento a un registro para
obtener la direccin efectiva
En un salto relativo, la ALU puede sumar un desplazamiento al contador de programa
El decremento de un registro requiere que la ALU reste uno al contenido del registro

LA ALU normalmente tiene dos buses de entrada A y B (permitiendo as tanto las operaciones
unarias como binarias) y un bus de salida ALU a travs del cual se obtiene el resultado. Al igual
que los registros, el bus de salida tiene el mismo nombre que el dispositivo en s. Adems,
podemos considerar que la ALU tiene algunas seales de control a travs de las cuales
podemos cambiar el modo de trabajo del dispositivo. Veamos algunos ejemplos:
La ALU del computador 1 tiene una seal de control s-r
o Si sr=1, la ALU suma A+B, y si sr=0, la ALU resta A-B
La ALU del computador 2 tiene dos seales de control c1 y c0
o Si c1,c0=0,0 la ALU calcula A+B
o Si c1,c0=0,1 la ALU calcula A-B
o Si c1,c0=1,0 la ALU calcula la operacin unaria ALU=1/B
o Si c1,c0=1,1 se calcula ALU= AB
La ALU del computador 3 tiene 3 seales de control A-L,c1,c0
o Si A-L=1, la ALU funciona como el computador aritmtico 2
o Si A-L=0, la ALU ejecuta 4 operaciones lgicas:
 c1,c0=0,0, entonces ALU= A or B
 c1,c0=0,1, entonces ALU= A and B
 c1,c0=1,0, entonces ALU= not B
 c1,c0=1,1, entonces se ejecuta A xor B

Nota 1: En la ALU, no slo se calculan las operaciones aritmtico-lgicas, sino tambin se


establecen o resetean los flags aritmticos (como Zero, Parity, Sign u Overflow). Precisamente,
en ciertos computadores puede ser ms importante el valor del flag obtenido en la ALU que el
propio resultado. Un ejemplo podra ser la hipottica instruccin CMP R3, R4 (comparar) que
ejecute una resta, pero que no almacene el resultado, porque lo importante es el flag Zero del
resultado.

Nota 2: En algunos casos, los registros, como PC, no necesitan utilizar la ALU para realizar
operaciones de incremento o decremento, sino que pueden hacerlo de forma autnoma. Esto
es muy habitual en los registros contadores como PC y SP, ya que permite aumentar el grado
de paralelismo a nivel de instruccin. Otra opcin es utilizar sumadores especficos.

En lo sucesivo utilizaremos la siguiente ALU para el diseo de un prototipo de CPU

OP Nemo. Operacin
000 ADD ALU = A+B
001 SUB ALU = A-B
010 AND ALU = A AND B
011 OR ALU = A OR B
100 SLT IF (A < B) ALU = 1 else ALU = 0
101 SRL ALU = 0,A[31:1]
110 SLL ALU = A[30:0],0
111 SRA ALU = A[31],A[31:1]

Notacin: A[31]es el bit 31 del bus A. A[30:0] son los bits de 30 a 0 de un bus. Mayor ndice es
ms significativo. El operador coma indica unin de buses. As, A[30:0],0 es multiplicacin por
dos y A[31],A[31:1] es divisin mediante desplazamiento aritmtico a la derecha.
Temporizacin de la ALU

Las ALUs pueden considerarse como un claro ejemplo de dispositivos lgicos


combinacionales. Recordamos que se denominan as a los circuitos lgicos que no tienen la
capacidad de memorizar informacin (esto es, que no son capaces de retener la informacin
que hubo en las entradas del circuito una vez que dichas informacin desaparece). En estos
circuitos, los valores de la salida del circuito dependen de la combinacin de valores que est
presente en sus entradas, es decir, de sus dos operandos y de las seales de control que
indican la operacin a realizar.

Fsicamente, los dispositivos combinacionales como la ALU no son tan perfectos como para
realizar la operacin instantneamente, sino que van a tardar un cierto tiempo en responder a
los estmulos de entrada, debido a que las ondas electromagnticas tardan su tiempo en
propagarse.

Aunque para la escala micromtrica de las ALUs estos tiempos de propagacin podran
considerarse ridculos (picosegundos), a frecuencias espectaculares (gigahercios) pueden
suponer un porcentaje elevado de la duracin del perodo (dcimas de nanosegundos), y sern
un aspecto importante en la temporizacin del ciclo de instruccin, como se ver en el
siguiente apartado.

1.3 Ciclo de Instruccin

El ciclo de instruccin es el perodo de tiempo necesario para completar una instruccin en


lenguaje mquina del computador. Dicho ciclo se puede considerar que tiene dos partes
claramente definidas: la bsqueda y decodificacin de la instruccin, y la ejecucin de la
instruccin. La primera parte es independiente de la instruccin.

Primera parte. Operaciones independientes del Opcode:

En una primera parte, el computador se encarga de buscar una instruccin en memoria. Como
la unidad de control an desconoce los bits que forman el OpCode de la instruccin, tampoco
sabe qu pasos debe tomar para ejecutarla, por lo que todas las operaciones de esta fase son
idnticas, sea cual sea el tipo de instruccin. En esta etapa siempre se realizan dos tareas:

Bsqueda de la instruccin: El computador busca en memoria una instruccin,


volcando el contenido de PC en el bus de direcciones y recibiendo por el bus de datos
de memoria una secuencia binaria (instruccin) que se almacena en IR.

Decodificacin de la instruccin. El Opcode (una parte del contenido de IR) se enva a


la Unidad de Control. De dicha unidad se reciben las seales de control que
gobernarn la CPU durante la segunda etapa.

En la mayora de los computadores tambin se realiza la siguiente operacin en esta fase:

 Preseleccin de la siguiente instruccin


Es decir, se prepara el contador de programa (PC) para que apunte a la siguiente instruccin
guardada en memoria. Como se ver en la siguiente seccin, normalmente, se incrementa el
PC teniendo en cuenta cunto mide la propia instruccin, en bytes (por ser el tamao de la
palabra de memoria).

Segunda parte. Operaciones especficas del Opcode

Aunque esta etapa cambia mucho de una instruccin a otra, y tambin dependen (en una
misma instruccin), del modo de direccionamiento de los operandos, se puede considerar que
en general, las tareas que se realizan son:

Bsqueda de operandos

 Clculo de las direcciones relativas, indirecciones, etc , en el caso de que los


operandos estn en memoria.

 Bsqueda en memoria, puertos, bancos de registros

Ejecucin

 Operaciones aritmticas, lgicas, evaluacin de condiciones de salto, etc.

Almacenamiento de resultados

 En bancos de registros, escritura en memoria, en puertos, en el PC

Ampliacin: En algunos computadores antiguos, la instruccin poda ser de longitud variable,


por lo que gran parte de las tareas que aqu se han descrito para la primera etapa, como el
incremento del contador de programa, slo se podan realizar tras la fase de decodificacin.
Asimismo, es posible que en estas mquinas el computador pueda iniciar la ejecucin de una
operacin cuando an no haba recibido toda la instruccin (podra faltar, por ejemplo, el lugar
donde se guardan los resultados).

Microoperaciones

Se conocen as a todas estas operaciones atmicas en las que hemos dividido el ciclo de
instruccin en el apartado anterior. En el nivel que empleamos en estos apuntes para el
estudio del computador, el trmino atmico implica que sera necesario recurrir a la
microelectrnica para dividir temporalmente las operaciones descritas, o que debemos
considerar qu sucede con cada bit, o cada puerta lgica, dentro de cada microoperacin.

Con el nivel de detalle de estos apuntes, una microoperacin tpica puede ser una copia de un
registro a otro, un ciclo de memoria, una operacin de ALU, o el incremento de un registro
contador.

Las microoperaciones suelen ser descritas en un lenguaje especial (Lenguaje de Transferencia


de Registros) en la forma R F, siendo R un registro y F es el bus de salida de algn elemento
del circuito. Cada microoperacin se completa en un ciclo de reloj: A lo largo del ciclo se
prepara la informacin F y al final del ciclo, en el flanco activo, se almacena el resultado en R.
Bsqueda de la instruccin
Las microperaciones realizadas son dos:

IRmem(PC) : La memoria, direccionada por el registro PC, vuelca su valor en IR

PCPC+4: El contador se incrementa en una constante. Normalmente es 4, porque las


instrucciones miden 4 bits.

Temporizacin
Las dos operaciones son simultneas. Es decir, a lo largo de un ciclo de reloj, lo
que se encuentra en el lado derecho de ambas expresiones se va
elaborando. Al final del ciclo, simultneamente, se modifican los registros en
lado izquierdo. Al ser estrictamente simultnea la carga, es imposible que el
nuevo valor de PC afecte a la instruccin buscada.

Descodificacin(y lectura de registros)


En esta fase se realizan normalmente dos operaciones simultneas:

Envo de los bits de opcode a la Unidad de Control. La Unidad de Control (un circuito
combinacional simple) genera las seales de control apropiadas.

La segunda operacin se denomina lectura de registros. Como en la mayora de las


instrucciones se utilizan direccionamientos por registros o relativos, en esta fase se obtienen
los contenidos de los registros implicados del banco de registro, aunque luego no se vayan a
utilizar! (Observe que an no hemos descodificado, luego no sabemos si los valores
consultados del banco sern de utilidad).
Ejecucin
Las seales de control llegan a la va de datos y se realizan las microoperaciones necesarias.
Estos son algunos ejemplos:

Se suman los valores de dos registros y se guarda el resultado en un registro


Se suma un valor de un registro con el campo inmediato de la instruccin y se guarda
en otro registro
Se suma un valor de un registro con el campo inmediato de la instruccin, para buscar
un dato en memoria de forma relativa. El dato se guarda en un registro
Se suma PC con el campo inmediato de la instruccin y se guarda el resultado en PC

2 Diseo de un computador monociclo

En la primera parte del tema hemos presentado los ladrillos con los que se construye un
computador (seccin 1.1), y los hemos encajado en el interior del mismo (seccin 1.2) y hemos
descrito, de forma genrica el modo de trabajo (1.3). En esta segunda parte del tema
disearemos un procesador concreto, basado en la arquitectura MIPS.

Monociclo
Este trmino hace referencia a que el ciclo de Instruccin del computador
diseado se completa en un solo ciclo de reloj. Esto significa que todos los
elementos de almacenamiento del procesador (PC, flags, registros del banco y
memoria) slo se modifican una vez, al final del ciclo de instruccin. No son
necesarios almacenamientos intermedios, como el registro de instrucciones, o
registros temporales. Es ms simple y rpido que un procesador multiciclo,
aunque tiene inconvenientes que sern analizados ms adelante.

Las caractersticas concretas de nuestro procesador son:

Banco de 32 registros de 32 bits


o El Registro r0 del banco siempre almacena el valor 0
o Dos puertos de lectura, A y B y un puerto de escritura C
o Direccionamiento separado para cada puerto, DA, DB y DC
o Seales read, write y clk
Registro contador de programa PC de 32 bits.
Dos memoria de 232 palabras (una para instrucciones y otra para datos)
ALU de 8 operaciones
Todos los elementos de memoria sncronos por flanco de bajada (seal CLK)

El procesador estar preparado para ejecutar las instrucciones:

OpAlu rd,rf1,rf2 rd rf1 (OpAlu) rf2


ADDI rd, rf, constante rd rf + constante
ORI rd, rf, constante rd rf OR constante
LW rd,desp.(rf) rd MEM[rf+desp]
SW rd,desp.(rf) MEM[rf+desp] rd
LUI rd, constante rd constante,0..0
BEQ rf,rd,dir if (rd=rf) PC PC+4+dir,00
J dir PC (PC+4)[31:28],dir,00

Arquitectura Harvard
El uso de dos memorias separadas, una para instrucciones y otra para datos, se
conoce como Arquitectura Harvard, diferencindola de la Arquitectura Von
Neumann, que utiliza una sola memoria. Este tipo de diseo hace que el
circuito tenga menos complejidad hacindolo por tanto ms comprensible.
Ambas arquitecturas son completamente compatibles:

En el caso de que fsicamente haya una sola memoria, la arquitectura


Harvard consiste en atribuirle dos nombres diferentes (memoria de
instrucciones y memoria de datos).
En el caso de que fsicamente haya dos memorias, su diseo garantiza
que almacenan los mismos contenidos en las mismas direcciones, por
lo que son la misma memoria desde el punto de vista lgico.

Todos los computadores modernos tienen fsicamente dos memorias


separadas para mejorar el rendimiento. El tema 6 (memorias cache) explica
cmo es posible que se comporten como una sola memoria.

Diseo de la parte comn: Bsqueda de la Instruccin


Para buscar una instruccin, conectamos la salida del PC con el bus de direcciones de la
memoria (de instrucciones). En la salida del bus de datos de la memoria de instrucciones (IB)
aparece una instruccin de 32 bits. En el diseo monociclo no necesitamos guardar el valor en
un registro de instruccin. Simultneamente conectamos la salida PC con la entrada de un
sumador en el que el otro operando es 4. La salida del sumador se enva a la entrada de PC,
aunque ste no almacenar su valor hasta el fin del ciclo de instruccin:
Descodificacin
Los 6 bits ms significativos del bus IB (opcode) se envan a la Unidad de Control. En el tema 4
veremos cmo estos bits se convierten en seales de control que gobiernan el funcionamiento
del procesador en la fase de ejecucin.

El resto del diseo lo vamos a implementar partiendo de una propuesta para un tipo de
instruccin (OpALU), y mediante retoques, conseguiremos que sea capaz de ejecutar las
siete restantes:

Ejecucin de instrucciones ALU (opcode 000000)


Todas las instrucciones ALU Registro-Registro del procesador MIPS tienen el mismo cdigo de
operacin (000000). Adems, tienen un campo funcin en el que se especifica (se concreta)
el tipo de operacin, y adems tienen tres campos de 5 bits con los nombres de los registros.
Veamos algunos ejemplos:

Ensamblador Operacin Instruccin mquina (salida IB)


ADD $1, $2, $3 R1R2+R3(R1=R2+R3) 000000 00010 00011 00001 0000000000 100000
SUB $4, $5, $6 R4R5-R6 000000 00101 00110 00100 0000000000 100010
AND $7, $8, $9 R7R8 & R9 000000 01000 01001 00111 0000000000 100100

Los bits de funcin estn descritos en el manual de referencia de los procesadores MIPS:

000 001 010 011 100 101 110 111


000 sll srl sra sllv srlv srav
001 jr jalr
010 mfhi mthi mflo mtlo
011 mult multu div divu
100 add addu sub subu and or xor nor
101 slt sltu
110
111

Preste atencin a los siguientes aspectos de la codificacin en lenguaje mquina:

El orden en ensamblador es destino, fuente, fuente, y en mquina es fuente, fuente,


destino. El ensamblador se parece ms a la operacin en lenguaje de alto nivel. El
lenguaje mquina est mejor adaptado al hardware.
Cada registro tiene un nombre binario que coincide con la codificacin binario natural
de la parte numrica de su nombre.
A diferencia del resto de instrucciones del MIPS, en las que a cada mnemnico les
corresponde un opcode (ejemplo: LW100011 ), en este caso, cada mnemnico le
corresponde una funcin. En el fondo, nos da igual que consideremos AND, ADD, SUB
etc. como instrucciones diferentes, o como si fueran la misma instruccin con distintas
variedades.

Para ejecutar la instruccin conectaremos los bits que contienen los nombres del bus de
instruccin IB (RF1, bits 25 a 21 y RF2, bits 20 a 16) con los buses de direccin del banco de
registro. Inmediatamente despus, aparecen en los puertos de lectura del banco (A y B) sus
contenidos.

Conectamos los puertos A y B con la entrada de una ALU, que ejecuta 8 operaciones, descritas
en la tabla de la seccin 1.2.

Por ahora, dejaremos que sea la Unidad de Control la que determine la operacin que se va a
realizar en la ALU (aunque, obviamente, vendr determinado por el campo funcin).

Finalmente, conectamos el nombre del registro destino en el bus IB (15 a 11) con la direccin
del puerto de escritura DC del banco de registros, y la salida de la ALU con el propio puerto de
escritura C.

Nuestro primer prototipo de computador ya est terminado. Sera capaz de ejecutar un


programa en el que todas las instrucciones son de tipo ALU Registro-Registro (Tipo R). En cada
ciclo de instruccin, la unidad de control tendr que activar las mismas seales:

L, en el registro PC, para actualizar su contenido (PCPC+4)


Read, en la memoria de Instrucciones
Write, en el banco de registros.

Tambin tiene que decidir qu operacin realiza la ALU, utilizando los bits de funcin (Tema 4).

Ejecucin de instrucciones ADDI (opcode 001000)


A continuacin, dotaremos a nuestro procesador de la capacidad de entender un segundo
cdigo de operacin. En este caso se trata de ADDI: la suma del contenido de un registro con
un dato numrico de 16 bits almacenado en la propia instruccin (como operando inmediato)
en formato N-2, y que guarda el resultado en un registro. Este es un ejemplo:

Ensamblador Operacin Instruccin mquina (salida IB)


ADDI $1, $2,#27h R1R2+27h 001000 00010 00001 0000 0000 0010 0111
En este caso, la instruccin tiene un format de tipo I. Su cdigo de operacin se conoce a
travs del manual de referencia de los procesadores MIPS, segn la tabla:

000 001 010 011 100 101 110 111


000 REG j jal beq bne blez bgtz
001 addi addiu slti sltiu andi ori xori
010
011 llo lhi trap
100 lb lh lw lbu lhu
101 sb sh sw
110
111

Hay tres aspectos importantes que la diferencian de la instruccin ALU en la seccin anterior:

El segundo operando en la operacin aritmtica no procede del banco de registros,


puerto B, sino de los bits 15 a 0 del bus IB.
El nombre del registro destino est determinado por los bits 20 a 16 de IB (antes, eran
los bits 15 a 11)
La operacin que ejecuta la ALU es, forzosamente, una suma (antes podan ser otras
operaciones, como resta o AND)

Y adems hay que tener en cuenta otros aspectos adicionales que afectan al diseo:

La operacin que ejecuta la ALU es, forzosamente, una suma (antes podan ser otras
operaciones, como resta o AND)
El segundo operando de la ALU tiene 16 bits. Hay que convertirlo en un nmero de 32
bits. Antes de enviarlo a la ALU.

Para poder aceptar esta nueva instruccin, es necesario realizar ajustes en el hardware:
En primer lugar se sita un multiplexor delante de la entrada inferior de la ALU. De esa
forma podemos elegir el segundo operando, que puede ser el contenido del puerto B
del banco (control del MUX a cero), o el operando inmediato (MUX a 1). Este
multiplexor lo denominaremos FB (Fuente de B)
La direccin del puerto de escritura tambin es controlada por un segundo MUX en el
que decidimos qu campo de 5 bits contiene el nombre del registro destino. Sin la
instruccin es de tipo R, son los bits IB15 a IB10 (MUX a 1). Si la instruccin es de tipo I
(como ADDI), son los bits IB20 a IB16 (MUX a 0). Este multiplexor lo denominamos FDC
(Fuente para DC).
Modificamos la ALU. Ahora tiene tres bits de control (OpALU) en los que se puede
forzar una operacin:
o 000  fuerza suma en ALU
o 001  fuerza resta en ALU
o 011 fuerza OR en ALU
o 111 operacin en ALU determinada por IB[5:0]

Convertimos los 16 bits de desplazamiento IB16 a IB0, en 32 bits. Para ello creamos un
bus de 16 bits que replica 16 veces el bit IB15 y lo unimos al desplazamiento. De esa
forma, creamos un dispositivo de extensin del signo, que mantiene el mismo
desplazamiento, pero con ms bits.

Un avance de la Unidad de Control


Con slo dos instrucciones, y ninguna instruccin condicional, ya podemos
intuir la funcin de la Unidad de Control. Si la instruccin es de tipo R, los
valores de los muxes son FB=0, FDC=1 y OPALU=111. Si la instruccin es ADDI,
entonces FB=1, FDC=0 y OPALU=000. Por cierto, en esta versin de 2
instrucciones, se cumple tipoR=NOT(tipoI)=NOR(IB31-IB26])

Ejecucin de instrucciones ORI (opcode 001101)


Aadimos esta instruccin que es bastante parecida a la anterior, aunque introduce dos
cambios:

La operacin de ALU es una OR, por lo que los bits de control que llegan a la ALU deben ser
diferentes. Ninguna modificacin a la va de datos es necesaria. Slo afecta a la Unidad de
Control.

El operando inmediato se extiende de 16 a 32 bits aadiendo ceros por la izquierda. Aqu


necesitamos modificar la Unidad de Extensin del desplazamiento para que ejecute dos
acciones segn la Unidad de Control: con un bit de control decidimos

si extiende el nmero con el bit de signo


si extiende el nmero con ceros
X: No importa (del ingls dont care)
Algunos bits de algunas seales del computador pueden estar a cero o a uno,
sin que ello afecte a su funcionamiento en un momento dado. Imaginemos que
el MUX de la ALU (FB) vale 0. En ese caso los bits 16 a 0 de IB no son utilizados,
y resulta indiferente cmo sea su extensin a 32 bits, ya que no se va a utilizar.
En las instrucciones de tipo R este bit se asigna el valor lgico no importa,
representado con una X, que desde el punto de vista fsico suele significar que
tomar el valor que suponga, por ejemplo, menor consumo.

Ejecucin de instrucciones LW (opcode 100011)


El procesador sera prcticamente intil si no tuviera instrucciones para enviar o recibir datos
de la memoria. Para ello, aadiremos dos instrucciones que nos permiten traer o llevar datos
de 4 bytes de o hacia la memoria. En ambos casos el direccionamiento a la memoria es
relativo, y en ambos casos, el clculo de la direccin de memoria es una parte importante del
ciclo de instruccin.

Direccin efectiva es, en un direccionamiento relativo, el resultado de sumar el contenido del


registro (usado como base) y el desplazamiento. La direccin relativa se convierte as en
absoluta y ya se puede localizar el dato en memoria. Las dos instrucciones son de tipo I. Para
calcular la direccin efectiva se utiliza la ALU, forzando una suma entre el registro cuyo campo
se define en los bits IB25-IB21. El desplazamiento se convierte, mediante extensin con signo, en
un nmero entero de 32 bits. Hasta aqu, todo es igual que en la instruccin ADDI.

Pero una vez hecha la suma, el resultado, la direccin efectiva, (en la salida de la ALU) se enva
a la memoria de datos, conectndola a su bus de direcciones.

Ensamblador Operacin Instruccin mquina (salida IB)


LW $1, $2(27h) R1mem(R2+27) 100011 00010 00001 0000 0000 0010 0111

En la instruccin LW, la memoria se utiliza en modo lectura (es decir, queremos traer un dato
de la memoria a un registro de la CPU) por lo que el bus de datos de la memoria debe
reconducirse al banco de registro.

Sin embargo, necesitamos aadir otro puerto de escritura al banco de registro, o lo que es ms
fcil, agregar un MUX al que ya existe. De esta forma, lo que se almacena en el banco de
registros se controla con el MUX:

Si vale 0, se guardara lo que viene de memoria (slo en instrucciones LW)


Si vale 1, se guardara lo que viene de la ALU (resto de instrucciones)

Un detalle: el camino que realizan los datos en la instruccin LW es el ms largo de todas las
del juego de instrucciones. Por esta razn, en el procesador monociclo, el ciclo de reloj vendr
determinado por el tiempo mximo que puede tardar una instruccin LW. Si el ciclo de reloj
fuera ms corto, no todos los dispositivos haran su trabajo a tiempo y el resultado sera
errneo.

Ejecucin de instrucciones SW (opcode 101011)


Esta instruccin es similar a ADDI y LW hasta que se realiza la suma. En este caso tambin se
calcula una direccin efectiva (como en LW), y se enva a la memoria. Pero la diferencia est en
que ahora se va a enviar un dato a memoria, procedente del registro cuyo nombre est en los
bits IB20 a IB16.

La principal diferencia respecto al circuito anterior afecta slo al control: Es necesario enviar la
seal write (escritura), a la memoria de datos.

La segunda diferencia es la necesidad de enviar un dato del banco de registro al bus de datos
de escritura de la memoria. Pero afortunadamente ese dato est presente en el puerto B
(desde el primer boceto del procesador, con las instrucciones ALU). Slo debemos bifurcar el
bus, como aparece (en rojo) en la figura:

Observe que esta es la nica instruccin (hasta el momento) que no modifica ningn registro
del banco. Los dos registros se utilizan en modo consulta. Como curiosidad, el registro cuyo
contenido se enva a memoria se denomina destino SW rd,desp.(rf) : MEM[rf+desp] rd, a
pesar de que es una fuente (origen de informacin). Esto se hace as por simple coherencia con
el resto de instrucciones con el formato I
Ejecucin de instrucciones LUI (opcode 101111)
Esta instruccin almacena una constante (que aparece como argumento inmediato, de 16 bits,
en la instruccin, en los 16 bits ms significativos del registro destino rd. Los menos
significativos se ponen a cero: rd constante,0..0

Ensamblador Operacin Instruccin mquina (salida IB)


LUI $1, 0027h R1 00270000h 101111 00000 00001 0000 0000 0010 0111

Para ello, esta instruccin utiliza varios trucos, relacionados entre s:

En primer lugar, el campo Rf (bits IB25 a IB21) deben ser cero (esta es una tarea del
compilador, o del programador en lenguaje mquina).
En segundo lugar, se fuerza una suma en la ALU con el operando inmediato (a
cualquier valor que se le sume el registro $0, presente en el puerto A del banco de
registro, quedara inalterado).
En tercer lugar, y esta es la nica modificacin del hardware, la extensin del signo se
realiza agregando 16 ceros en la parte menos significativa.

Como se ve en la imagen agregamos esta posibilidad al extensor del desplazamiento, y por


tanto, se necesitan dos bits para seleccionar entre

00 Extensin a 32 bits con signo (instrucciones ADDI, LW y SW)


01 Extensin a 32 bits sin signo (instrucciones ORI)
10 <<16 bits (instrucciones LUI)

(El smbolo <<16 indica un desplazamiento de 16 bits a la izquierda)

Ejecucin de instrucciones BEQ (opcode 000100)


Esta es sin duda la reina de las instrucciones. Sin una instruccin de tipo branch, un
computador no sera un computador (entendido como una mquina de propsito general). El
objetivo de esta instruccin es modificar (si se cumple una cierta condicin) el orden normal
de ejecucin de las instrucciones, mediante un salto. Esto se consigue modificando el PC
respecto al valor que tiene predeterminado (PC+4). La condicin se evala cada vez que se
ejecuta la instruccin, por lo que a veces salta y a veces no.
Formato: BEQ rf,rd,dir : if (rd=rf) PC PC+4+dir,00

Gracias a esta instruccin, las estructuras de control en los lenguajes de alto nivel (if-then-else,
while, do-while, for) son posibles.

El destino del branch


En el caso particular del MIPS, el destino del salto se indica de forma relativa al valor actual del
contador de programa, y en consecuencia, de forma relativa al lugar de la memoria donde se
encuentra la instruccin de salto). As, podemos saltar 2 instrucciones adelante, 3 hacia atrs,
etc. El valor numrico relativo (es una instruccin de tipo I) tambin se llama desplazamiento.

Y para complicar ms la cosa, el desplazamiento considera a) que el contador de programa


est incrementado, y b) que el destino del salto, como todas las instrucciones, est en una
direccin de memoria mltiplo de 4. Eso en binario significa que los dos bits menos
significativos, tanto de PC como el desplazamiento, son cero, por lo que la instruccin los
considera implcito.

Veamos dos ejemplos.

La instruccin en la posicin 100h es un branch cuyo destino es 10Ch (12 bytes, 3


instrucciones ms adelante). El desplazamiento real debe ser desp=8,para que
PC+4+desp sea 10Ch. El desplazamiento almacenado es 000001000 = +2 (los dos bits
menos significativos, en naranja, no se guardan)

La instruccin en la posicin PC=2F8h es un branch cuyo destino es 2F0h (8 bytes, 2


instrucciones antes). El desplazamiento debe ser desp=-12d = 1111101002, para que
PC+4+desp sea 2F0h. El desplazamiento almacenado es 11110100 = -3

En la prctica, el desplazamiento almacenado en la instruccin indica el nmero de


instrucciones que avanza o retrocede respecto a la instruccin predeterminada, que es la
siguiente.

La condicin del branch BEQ


BEQ es un caso particular de branch en el que la condicin se evala comparando si dos
registros son iguales. Vea el siguiente ejemplo que compara los registros $3 y $1:

Ensamblador Operacin Instruccin mquina (salida IB)


BEQ $3, $1 if ($3==$1) PC 000100 00011 00001 0000 0000 0010 0111
destino PC+4+dir,00

Si la instruccin est en PC=140h el destino del salto es 140h+4+9Ch =1D0 h (9Ch ==10011100 2)

El alumno debe observar que la condicin no es si el registro 1 es igual al registro 3 (es obvio
que no lo son), sino que el contenido de los registros 1 y 3 es diferentes. La misma instruccin
puede aparecer dos veces en un programa, y a veces salta y otras no. Depende de lo que
contengan los registros.
Es posible incluso que sea la misma instruccin la que se ejecuta (en el mismo lugar del cdigo,
con el mismo PC) (gracias a los saltos hacia atrs, esto es posible), siendo su comportamiento
diferente de una vez a otra, ya que los registros cambian.

Veamos a continuacin los cambios en el circuito que se necesitan y cmo se resuelven:

Necesitamos recuperar los dos bits implcitos en el desplazamiento. Podemos


desplazar dos posiciones a la izquierda al campo desplazamiento de 32 bits, ya que la
prdida de los dos bits ms significativo no implican desbordamiento (podemos
multiplicar por 4, ya sea negativo o positivo). Aadimos un mdulo desplazador,
representado por el smbolo <<2 en la figura.
Necesitamos sumar a PC+4 el desplazamiento, para calcular la direccin efectiva del
salto. En este circuito se ha resuelto con un nuevo sumador, en la parte superior. Por
una parte, eso evita aadir multiplexores al sumador existente, que hubieran alargado
el camino de datos1. Por otra parte nos deja libra la ALU para evaluar la condicin.
El nuevo valor de PC puede ser PC+4 o PC+4+desp. Aadimos un nuevo MUX (FPC),
que tomar el valor 0, en caso de salto.
Para el clculo de la condicin, la Unidad de Control puede forzar una resta de los
contenidos de los dos registros. Si el resultado es cero, se cumple la condicin.
Observe que una de las salidas de la ALU (de un bit), se denomina Z. Este bit es un flag
que ser utilizado por la Unidad de Control como seal de estado, para decidir si salta
o no (para decidir qu seal enva al MUX FPC).

Ejecucin de instrucciones J (opcode 000010)


Se puede observa que la instruccin BEQ puede servir como salto incondicional, siempre que
los dos registros sean el mismo. Sin embargo, un salto incondicional con un destino de 18 bits
slo alcanza instrucciones situadas en posiciones de memoria en el rango PC256KB.
Obviamente, eso impide llegar a destinos situados mucho ms lejos en la memoria.
Recuerde que el MIPS direcciona 4GB de memoria.

1
Un camino de datos de mucha longitud obliga a reducir la frecuencia para que el ciclo de reloj sea
suficientemente extenso y que todas las seales atraviesen el circuito completamente. Aadir un
sumador tiene, por su parte, un coste en transistores que se amortiza con la mayor densidad de
integracin de los procesadores actuales.
MIPS propone dos soluciones. La primera es JR (del ingls jump register) (salto indirecto
mediante registro). Esta no la consideraremos por ahora (tal vez, en el examen?). Con ella
pondramos en el PC un valor absoluto cualquiera, de 32 bits, que permitira llegar hasta 4G
direcciones.

La segunda propuesta es J (del ingls jump) que no llegar tan lejos, pero s lo suficiente:

J dir : PC (PC+4)[31:28],dir,00

Observe que el destino del salto no es relativo al PC, pero si es relativo al segmento de
memoria de la instruccin. Se calcula:

Conservando los 4 bits ms significativos del PC. Esta tcnica permite que el salto sea
relativo al inicio segmento de 256MB en el que se encuentra la instruccin. (La
memoria de 4GB se divide en 16 segmentos iguales y contiguos)
El desplazamiento de 26 bits se multiplica por 4 (utiliza dos bits implcitos) y se
convierte en un nmero natural de 28bits que se suma al inicio del segmento.

Esta instruccin tiene un formato diferente, que se conoce como formato-J:

Ensamblador Operacin Instruccin mquina (salida IB)


J destino PC 000010 0000 0000 0000 0000 0010 0111
(PC+4)[31:28],dir,00

En el ejemplo, si la instruccin de salto est en el segmento 0, el destino es 98 h; si estuviera en


el segmento 4, el destino sera 1G+98h.

En el circuito necesitamos agregar un nuevo candidato para futuro PC, ampliando el MUX FPC:

Observe cmo se construye el destino del salto, mediante la recuperacin del bit implcito en
el desplazamiento, y la concatenacin de dos buses, de 4 y 28 bits.

En la siguiente figura se presenta la implementacin final del procesador MIPS monociclo, en


su versin 8 instrucciones:
En la figura se han etiquetado los puntos de control, en color rojo. Los valores de los puntos de
control especifican las siguientes operaciones:

Seal de Control Nbits Significado


00 No definido
01SUM1[31:26], IB[25:0]
FPC 2
10 SUM2
11 SUM1
LPC 1 Carga PC
0: IB[20:16] DC
FDC 1
1: IB[15:11] DC
0: Dato R C
FC 1
1: ALU C
0: Read op.
WR 1
1: Write op. & Read op.
0: BBanco-Reg BALU
FB 1
1: EXT(IB[15:0]) DC
000  fuerza suma en ALU
001  fuerza resta en ALU
OPALU 3
011 fuerza OR en ALU
111 operacin en ALU determinada por IB[5:0]
00 Extensin a 32 bits con signo
EX 2 01 Extensin a 32 bits sin signo
10 << 16 bits

En el siguiente tema, Unidad de Control, analizaremos el diseo del dispositivo encargado de


generar las seales de control. El dispositivo recibe el opcode de la instruccin buscada, y en
funcin de los bits que contiene, no solo es capaz de determinar el formato de la instruccin
(es decir, el significado del resto de campos que contiene la instruccin), sino tambin cules
son los valores de las seales de control. La Unidad de Control, en algunos casos, (por ejemplo,
si el opcode es 000100) necesita conocer los bits de estado (o flags), como Z, para enviar las
seales correctas.
Finalizaremos el tema con dos apartados que complementan lo expuesto hasta ahora, y en la
que se estudian otras formas de determinar el orden de las instrucciones (secuenciamiento) y
otras formas de temporizar el ciclo de instruccin (implementaciones).
3 Secuenciamiento de las Instrucciones

En la seccin anterior hemos visto el Ciclo de Instruccin: un procedimiento que se repite


indefinidamente durante el perodo de actividad de un computador. Tambin hemos
analizado el papel del Contador de Programa dentro de la instruccin para descubrir que es en
realidad el primero en intervenir.

En esta seccin veremos con ms detalle cmo se prepara el PC antes de cada instruccin para
que un cdigo complejo se ejecute en el computador.

Primera Instruccin ejecutada. Valor inicial de PC.


En cada Arquitectura, el PC, como todos los registros, siempre tiene un valor inicial
preestablecido. Pero a diferencia de los dems registros, es muy poco frecuente que dicho
valor inicial sea 0, ya que se suele reservar la zona ms baja de la memoria para otras
funciones. Como ejemplo, el i8086 busca la primera instruccin en 0xFFFF0, mientras que en el
DLX se inicia en 0x00000100. Pero, qu ocurre a continuacin?

Secuenciamiento implcito
Como para un programador, la forma natural de escribir las instrucciones es en el mismo
orden de ejecucin, lo ms frecuente en los cdigos es que tras una determinada instruccin,
la que se ejecute a continuacin sea la que le sigue en memoria. Por esta razn, lo ms
frecuente en los computadores es que el Contador de Programa se actualice siempre de forma
automtica apuntando a la siguiente posicin de memoria: PC  PC +1. En realidad, esto no es
estrictamente correcto, ya que es poco frecuente que una instruccin ocupe una sola palabra
de memoria, por lo que en general, la frmula es:

PCPC+L (siendo L la longitud de la instruccin actual)

Ampliacin: En las arquitecturas ms antiguas, L es variable, y desconocida hasta la


descodificacin de la instruccin. Por esta razn el incremento automtico de PC no se poda
completar hasta la descodificacin de la instruccin, y en muchos casos, haba que esperar
varios ciclos de lectura de instruccin para incrementar adecuadamente PC.

Secuenciamiento Explcito y Saltos


Una alternativa al secuenciamiento implcito es que cada instruccin fuera acompaada de la
direccin de la siguiente instruccin. Algo as como

100: ADD A,B,C, 101 (sumar AB+C y PC104)

Evidentemente, en la mayora de las instrucciones, esta informacin es innecesaria ya que el


secuenciamiento implcito cumple la misma funcin, con un considerable ahorro de bits. No
obstante, la posibilidad de salirse del orden implcito es una necesidad imperiosa del
programador, por lo que, en contadas ocasiones se sigue utilizando el secuenciamiento
explcito, en lo que se conoce como salto.

100: JUMP 120 ( slo PC120)


Secuenciamiento Mixto Condicional
Todas las arquitecturas modernas utilizan el secuenciamiento mixto: es decir, implcito, salvo
en algunas instrucciones de salto, que es explcito.

En algunas instrucciones, adems, se evala una condicin, por lo que el comportamiento


vara:

100: BRANCHcond 120 : Si cond==true PC120 (explcito)

Si cond==false (NOP) PCPC+L (implcito)

La bifurcacin, o ms exactamente, la existencia de instrucciones condicionales cuyo


comportamiento depende de los datos del programa, es precisamente lo que permite que los
computadores sean considerados como mquinas de propsito general. Sin ellas, la evolucin
de un cdigo sera siempre la misma, independientemente de los datos, por lo que sera un
instrumento de poca utilidad.

Rutinas
A veces, un mismo trozo de cdigo R conviene que sea ejecutado varias veces y en puntos
distintos de un mismo programa P (por ejemplo, el clculo de un factorial para averiguar un
nmero de permutaciones). Ingenuamente se puede pensar que es posible, simplemente,
saltar a ese trozo de cdigo R cada vez que sea necesario en distintos puntos de P, pero qu
hacemos tras finalizar R?, a qu lugar de P volvemos?

A estos trozos de cdigo se les llama rutinas, y el salto a rutina (tambin se usan los verbos
llamar o invocar) proporciona un modo de secuenciamiento adecuado a nuestras necesidades.
Consiste simplemente en guardar en lugar seguro el valor que debera tener PC al final de la
rutina B:

Ir a rutina R: (PCR, guardar PC+L en lugar seguro)

De esa forma, para retomar el programa P en el punto deseado, nos bastara con almacenar en
PC la copia de seguridad realizada. La ltima instruccin de la rutina (o retorno de rutina) debe
ser:

Retorno: (PC valor guardado en lugar seguro)

En los procesadores antiguos, el lugar donde se guarda la copia de seguridad de PC es la pila,


ya que el orden de almacenamiento de la informacin (segn se cuenta en la pgina ###) es
justo el que se necesita para que desde rutinas se puedan llamar a otras rutinas, y poder
retomar el cdigo siempre en la forma deseada. En tal caso, las instrucciones de llamada y
retorno de rutina se denominan CALL y RET:

CALL R: PCR, PUSH PC+L


RET: POP PC

En procesadores modernos, como MIPS, y atendiendo a la filosofa RISC de lo ms simple es lo


ms rpido, para invocar a una rutina se utiliza la instruccin JAL R, en la que la copia de
seguridad de PC se realiza en el registro R31:

JAL R: PCR, R31 PC


En tal caso, el retorno de una rutina se ejecuta con un salto indirecto por registro (JR R31)
Ampliacin (ver ejercicio 1)
En MIPS, no es posible llamar a una rutina desde una rutina despreocupadamente, ya que el
registro R31 est reservado. Para resolver este dilema, podemos guardar temporalmente
R31 en la memoria. Si queremos repetir el procedimiento recursivamente, podemos
apuntar los consecutivos valores de R31 en una zona reservada de memoria, y utilizar un
contador (por ejemplo, R29) para apuntar la direccin relativa de la ltima copia, que debe
coincidir con el nivel de anidamiento. Pero, caramba!, hemos inventado la pila!
Precisamente en la filosofa RISC, si necesitas algo complejo, puedes hacerlo t mismo con
las herramientas simples.

Interrupciones
Las interrupciones son en realidad llamadas a rutinas, con dos diferencias:

1. En las interrupciones, la direccin (vector) de la rutina se guarda en una tabla. La


interrupcin utiliza como argumento un nmero natural que es un ndice a la tabla
para encontrar la referencia. En este caso, para invocar a la interrupcin se utiliza
una instruccin especfica INT (o TRAP) con el ndice puntero a la tabla (de vectores de
interrupcin) como argumento. Ejemplo: trap 3
2. A veces, el Modo de Secuenciamiento interrupcin puede ser provocado por un evento
ajeno al cdigo. En algunas ocasiones, es un evento externo al computador (una tecla,
un movimiento del ratn), otras veces es interno (un calentamiento, o un fallo
hardware) e incluso puede ser provocada por una instruccin (una divisin por cero, o
una instruccin con Opcode errneo). En ese caso, el nmero de vector debe ser
proporcionado de forma automtica, ya sea por el dispositivo externo, o por la CPU.

En el Tema 7 veremos cmo las interrupciones permiten a los dispositivos externos la


comunicacin con el cdigo de un usuario. As, por ejemplo, una pulsacin de tecla enva una
seal de interrupcin, e inmediatamente despus, un nmero ndice de vector. De esa forma
permite invocar a una rutina que permita recuperar el carcter pulsado.

Ejercicio 1
El computador MIPS no dispone de instrucciones CALL y RET para llamar a una rutina y volver
al cdigo principal. En cambio, dispone de otras instrucciones como JR RG (salto a una direccin
almacenada en un registro), ADDI (Suma de registro con operando inmediato) , LW, SW, y
sobre todo JAL dest (Salto a una direccin relativa a PC, guardando PC+4 en el registro R31). Se
pide el cdigo necesario para llamar a una rutina en el MIPS, emulando, si es necesario, a las
instrucciones CALL y RET.

Para resolver el ejercicio, vamos a suponer tres casos:

1) Dentro de la rutina invocada, no se requiere la llamada a otra rutina


En ese caso, la llamada a la rutina (en el cdigo principal) se realiza con JAL rut (siendo rut la
direccin relativa de la primera instruccin de la rutina). Cuando finaliza la rutina, volveremos
al cdigo principal con JR R31 :

2) Dentro de la rutina, se llama a otra subrutina, en la cual no se invoca a otra

Si dentro de la rutina se llamara a una subrutina sin las precauciones adecuadas, perderamos
el contenido de R31, y la capacidad para retomar el cdigo principal. Para resolver este
inconveniente, podemos hacer una copia de seguridad del R31 en un registro adicional (p.e., el
registro R30), y restaurarla antes de abandona la rutina:

3) Dentro de la rutina se llama a otra subrutina, en la que se llama a una tercera.

Siguiendo el procedimiento anterior, podramos utilizar el registro R29 para guardar copia de
seguridad de R30, y proceder as recursivamente mientras sea necesario, y mientras no
agotemos los registros disponibles. El alumno puede observar que estaramos usando el banco
de registros para almacenar una lista de direcciones de retorno anidadas, pero se da la
circunstancia de que dicha lista tendra una capacidad muy limitada (30, como mucho). Por
qu no usar la memoria, cuya capacidad es prcticamente ilimitada? Ahora, en lugar de usar el
R30 (y sucesivos) como almacn de copias de seguridad, se puede usar un registro (por
ejemplo R29) como puntero al almacn de copias de seguridad (pila).
Bsicamente, al iniciar cualquier rutina, copiamos el registro R31 a la memoria, y dejndolo
libre para una instruccin JAL. (El lugar de la memoria est establecido previamente (direccin
de inicio de la pila), y su valor se almacena en el registro R29). Tras la copia en memoria,
cambiamos el valor del puntero de pila R29, para que, en caso de que necesitemos guardar
otra direccin de retorno en la pila, no machaque al anterior. Cuando termine la rutina,
restablecemos el valor del puntero, y despus restablecemos el valor del R31, dejndolo listo
para volver al programa principal con JR R31. La nica limitacin es la zona de memoria que
reservemos para ir almacenando direcciones de retorno. Si no se tiene cuidado, tenemos el
riesgo de provocar un fallo en el cdigo de nombre muy conocido (y demasiado frecuente):
Stack Overflow.

4 Temporizacin de la instruccin
Veamos algunos aspectos temporales del procesador monociclo que hemos diseado. Es
bueno que recordemos en este momento que las seales no se propagan a velocidades
infinitas. El siguiente esquema describe el procesador monociclo. Consideremos el tiempo t=0
en el inicio del ciclo de instruccin. Los elementos de almacenamiento (PC, registros y
memorias) tienen un valor determinado por el ciclo de instruccin anterior. Se conoce como
estado del computador. Dicho estado es utilizado por los dispositivos combinacionales (que
no son infinitamente rpidos) para preparar un nuevo estado.

Slo al final del ciclo, en tiempo t=T, se modifica el estado, almacenando todos los datos que
sean necesarios. El tiempo T se debe calcular en funcin de los retrasos de la siguiente forma:

En t=tspc (muy poco tiempo despus de su modificacin en el anterior ciclo) ya tenemos su


valor en el bus de direcciones de la memoria de instruccin.
En t=tspc + tmemI ya disponemos de la instruccin en IB. Simultneamente, dichos bits van al
banco de registro y a la Unidad de Control. tmemI es el tiempo que tarda la memoria de
instruccin.

En t=tspc + tmemI+ tdec las seales de control estn disponibles. Los contenidos de dos
registros estn presentes en los puertos A y B, el desplazamiento se ha extendido, y en su caso,
se le han aadido los dos bits implcitos. tdec es el tiempo del ms lento de los circuitos
implicados, ya que trabajan en paralelo. Posiblemente sea el banco de registros.

En t=tspc + tmemI+ tdec+ talu las dos ALUs han realizado sus clculos, y estn disponibles los
posibles destinos de salto, el flag y la direccin efectiva de memoria. talu es el tiempo de la
ALU ms lenta (la ms compleja), al que se le aaden los retrasos que tiene el MUX en su
entrada.

En t=tspc + tmemI+ tdec+ talu +tmemD disponemos (en caso de la instruccin LW) de un dato
de la memoria, que queremos guardar en un registro.

Finalmente en t=tspc + tmemI+ tdec+ talu +tmemD +twrite podemos garantizar que los datos
que se encuentran en las entradas de los circuitos secuenciales (PC, el banco de registro y la
memoria de datos (en la instruccin SW)) podran ser almacenados correctamente, cuando
llegue el siguiente flanco de bajada del reloj que marca el final del ciclo.

Es obvio que si la llegada del flanco fuera antes de tiempo, en la ms lenta de las instrucciones,
es decir, en aquella que tiene un recorrido ms largo (LW), no podramos garantizar que la
informacin que se almacene sea correcta. De hecho, deberamos, adems, darle un margen
de seguridad al ciclo de reloj:

T=tspc + tmemI+ tdec+ talu +tmemD +twrite+

En los computadores monociclo, la frecuencia de reloj se ajusta en funcin de los retrasos de


los transistores en el recorrido ms largo (camino crtico) para garantizar el correcto
funcionamiento. Evidentemente, la baja frecuencia penaliza las instrucciones ms rpidas, y
una alternativa sera introducir un reloj de frecuencia variable, en funcin del retardo
requerido por cada instruccin.

Un segundo problema del procesador monociclo es la imposibilidad de reutilizar algunos


elementos, como sumadores y memorias. Un ejemplo es la memoria. No podemos reutilizarla
para buscar un dato (usando la direccin efectiva calculada en la ALU), porque ya est siendo
usada para buscar una instruccin. Esta es la razn por la que hemos incluido memorias
separadas.

El procesador multiciclo que proponemos a continuacin resuelve estos problemas.

El procesador multiciclo
La primera alternativa que proponemos consiste en completar el ciclo de instruccin en varios
ciclos de reloj, aumentando la frecuencia del mismo. Evidentemente, para sacar verdadero
provecho, el nmero de ciclos de reloj debe ser variable. As, instrucciones ms cortas, como
NOP y J, podran completarse en un par de ciclos de reloj. Las ms largas podran requerir
cinco, seis, o incluso ms.

Nuestro diseo de procesador monociclo, y sin ninguna modificacin de hardware, ya se


podra convertir en multiciclo simplemente activando las escrituras en los elementos
secuenciales en mltiplos de nTmulti, siendo n un parmetro que depende del ciclo de
instruccin (por ejemplo, n=1 para NOP, n=2 para J y n=5 para LW). Pero este truco no es ms
que una forma de disfrazar el uso de un perodo de reloj de longitud variable.

Si adems queremos reutilizar dispositivos, debemos almacenar el estado del computador


entre ciclo y ciclo:

En el ejemplo, hemos dividido la va de datos en tres etapas. Imagine que en la primera etapa
hemos ledo y decodificado la instruccin. Podramos incluir registros intermedios para crear
un estado en el que se almacena la instruccin (IR) y el valor PC+4 (registro NPC). La memoria,
que habamos usado para buscar la instruccin, queda liberada, y podra utilizarse para buscar
un dato en la instruccin LW. Antes, esto no era posible, porque hubiramos perdido el
contenido del bus IB, que era necesario durante todo el ciclo del procesador monociclo.

En la figura, hemos aadido varios registros intermedios para poder convertir el MIPS en un
verdadero procesador multiciclo de cinco etapas:

1. Bsqueda de la instruccin y clculo de PC+4 (o PC destino en un salto J). La memoria


queda libre, y el sumador que calcula PC+4. Los registros amarillos guardan el estado
intermedio.
2. Lectura de registros A y B del banco, y clculo del desplazamiento extendido. Los
registros verdes almacenan los tres valores.
3. Clculo de una operacin aritmtica, de una direccin efectiva de memoria, de la
condicin de salto, y del destino del salto en BEQ. Los resultados se guardan en
registros de color rojo. Aqu, por ejemplo, podramos reutilizar el sumador de PC+4
para calcular el destino del salto.
4. Acceso a memoria de datos, para ejecutar LW o SW. El dato ledo de memoria se
guardara en el registro rosa.
5. Escritura de resultados en el banco de registros.

Con este diseo, instrucciones como NOP y J se ejecutaran en dos ciclos, ADDI en tres ciclos,
SW en 4 ciclos, y LW en 5 ciclos.

Clculo de la frecuencia del procesador multiciclo


En el procesador multiciclo, la frecuencia de reloj viene que ser los suficientemente baja como
para que cada etapa tenga tiempo de completar sus tareas. Es decir, tienen que tenerse en
cuenta los retrasos de los elementos combinacionales de cada etapa, adems del margen de
seguridad que se quiera asignar. Para este clculo se tienen en cuenta dos aspectos
importantes:

Las etapas tienen que estar equilibradas. Si una etapa tiene demasiada carga de
trabajo, determinar una frecuencia baja que castigar a las etapas ms ligeras. El que
disea el procesador tiene en muchos casos la libertad de pasar un MUX o un sumador
de una etapa a otra para intentar equilibrarlas y mejorar la frecuencia.
Los registros intermedios suponen la inclusin de nuevos retrasos no considerados en
el clculo del perodo del procesador monociclo. Por esta razn las instrucciones ms
lentas, como LW, son ahora an ms lentas. No obstante, esta ligera penalizacin
queda sobradamente compensada con el beneficio en otras instrucciones.

Procesadores segmentados
Compare el ciclo de instruccin multiciclo con la cadena de montaje de un coche. Cada T horas,
el coche avanza a la siguiente etapa. En la primera se monta el chasis, en la segunda el motor,
en la tercera la carrocera, y as hasta las ltimas etapas de pintura, secado, montaje de
asientos, y elementos exteriores. Recuerde que el tiempo T viene determinado por la etapa
ms lenta (por ejemplo, la de secado de pintura).

Cuando un vehculo abandona la primera etapa para pasar a la segunda, la primera queda
liberada, por lo que normalmente se aprovecha para comenzar el montaje de otro vehculo. El
resultado final es que, con el montaje en cadena, se fabrica un vehculo en 20T horas
(considerando 20 etapas), y sin embargo cada T horas finaliza la fabricacin de un vehculo. En
definitiva, el montaje en cadena (o segmentado) es 20 veces ms rpido que un montaje
secuencial.

Por qu no hacer lo mismo con las instrucciones? Los procesadores modernos utilizan la
tcnica de la segmentacin en los procesadores multiciclo para finalizar una instruccin por
ciclo de reloj, permitiendo que nuevas instrucciones entren en la va de datos sin que las
instrucciones que ya estaban la hayan abandonado. Gracias a ello, podramos finalizar una
instruccin por ciclo de reloj y el procesador sera mucho ms rpido.
Para conseguir eso, es necesario hacer ligeras modificaciones tanto a la Va de Datos como a la
Unidad de Control. Adems, todas las instrucciones tendran que pasar por todas las etapas del
procesador multiciclo (aunque no realicen ninguna accin), ya que saltarse una etapa
supondra la colisin con instrucciones que se iniciaron antes.

No es el objetivo de este curso avanzar en el estudio del procesador segmentado, aunque es


interesante que el alumno medite sobre posibles problemas de la segmentacin. Entre esos
problemas estn:

Las dependencias entre instrucciones qu ocurre cuando una instruccin necesita un


dato producido por la instruccin que le precede?
Recursos ocupados qu pasa si dos instrucciones necesitan la misma ALU en el mismo
ciclo?
Y qu pasa con los saltos condicionales? Como voy a iniciar la bsqueda de la
siguiente instruccin, si an no s cul es?

Todos estos problemas se resuelven, en muchos casos, deteniendo el flujo de instrucciones


por el procesador segmentado hasta que se resuelva el problema, por lo que en la prctica no
finalizar una instruccin por ciclo. A pesar de ello, el beneficio sigue siendo muy alto, por lo
que todos los procesadores, desde hace ms de 30 aos, son ya segmentados.

Você também pode gostar