Unidad 4: Implementación con multiciclos

Transcripción

Unidad 4: Implementación con multiciclos
4.4 Una implementación multiciclos
La ejecución de una instrucción puede dividirse en pasos, iniciando con la lectura de la
instrucción, luego su decodificación y lectura de registros, posteriormente dependería de
cada clase de instrucción; por ejemplo, para una instrucción tipo-R se continuaría con la
ejecución de la operación a través de la ALU y se finalizaría con la escritura de un registro.
Si cada paso se realiza en un ciclo de reloj, para la ejecución de una instrucción se
requerirán de múltiples ciclos, y el número de ciclos dependerá del tipo de instrucción. Es
evidente que deba buscarse que los pasos tarden aproximadamente la misma cantidad de
tiempo. Una implementación multiciclos permite que una unidad funcional sea usada mas
de una vez por instrucción, en diferentes ciclos de reloj.
Las principales ventajas de un diseño multiciclos son: La habilidad de permitir a las
instrucciones tomar diferentes números de ciclos de reloj y la habilidad de compartir
unidades funcionales dentro de la ejecución de una instrucción. El camino de los datos se
modifica considerablemente, en la figura 4.18 se muestra una aproximación al camino de
los datos en la que pueden notarse las siguientes diferencias (en comparación al camino de
datos de una implementación de un sólo ciclo):
ƒ
Se utiliza una sola memoria para instrucciones y datos, puesto que la lectura de la
instrucción se hará en un ciclo de reloj y la escritura de un dato, si es necesaria, se hará
en otro.
ƒ
Hay una sola ALU, en lugar de una ALU y dos sumadores. Con la ALU se hará el
trabajo de los sumadores en diferentes ciclos de reloj.
ƒ
Se agregan algunos registros después de cada unidad funcional principal para que
mantengan la salida de la unidad hasta que su valor sea usado en un ciclo de reloj
sucesivo.
Fig. 4.18 Aproximación al camino de los datos de una implementación multiciclos.
Al final de un ciclo de reloj, todos los datos que son usados en ciclos de reloj sucesivos
deben ser almacenados en elementos de estado. Los datos usados entre instrucciones se
almacenan en elementos de estado visibles al programador (por ej., archivo de registros,
PC, memoria). En contraste, los datos usados en la misma instrucción, en un ciclo de reloj
posterior, se almacenan en algunos de estos registros adicionales.
Entonces, la ubicación de los registros adicionales depende de dos factores: que unidades
funcionales se incluirán en cada ciclo de reloj y que datos son necesarios en ciclos
posteriores implementando a cada instrucción. Para realizar el diseño, supondremos que los
ciclos de reloj pueden acomodar al menos a una de las siguientes operaciones: un acceso a
memoria, un acceso al archivo de registros (dos lecturas o una escritura), o una operación
de la ALU. Por lo que cualquier dato producido por una de estas tres unidades funcionales
(la memoria, el archivo de registros o la ALU) debe salvarse en un registro temporal para
usarse en un ciclo posterior.
Para cubrir estos requerimientos, se agregan los siguientes registros temporales:
ƒ
El registro de Instrucción (IR, Instruction register) y el registro de dato de memoria
(MDR, Memory data register) se agregan para respaldar la salida de memoria después
de la lectura de una instrucción o la lectura de un dato, respectivamente. Se utilizan dos
registros por separado dado que ambos valores pueden ser necesarios en el mismo ciclo
de reloj.
ƒ
Los registros A y B son usados para mantener los valores de los operandos leídos del
archivo de registros.
ƒ
El registro ALUOut mantiene la salida de la ALU.
Con excepción del registro IR, el resto mantiene su información solo entre dos ciclos de
reloj adyacentes por lo que no necesitarán señales específicas de escritura (eso significa que
se modificarán en cada flanco de activación). El registro IR debe mantener la instrucción
durante toda su ejecución, por lo tanto requiere de una señal de control de escritura.
Debido a que diferentes unidades funcionales se comparten con diferentes propósitos,
necesitamos agregar multiplexores y expandir a los multiplexores existentes. Por ejemplo,
dado que la memoria es usada para instrucciones y datos, necesitamos un multiplexor para
seleccionar entre dos posibles direcciones, la dirección de una instrucciones (que proviene
del PC) y la dirección de un dato (que se generó como el resultado de una operación de la
ALU).
Al remplazar las tres ALUs del camino de datos de un solo ciclo por una sola ALU,
significa que en la ALU se deben acomodar todas las entradas que se usaban en las tres
ALUs. Por lo que se realizan los siguientes cambios al camino de los datos:
1. Se agrega un multiplexor en la primera entrada de la ALU. Con este multiplexor se
elige entre el registro A y el PC.
2. El multiplexor de la segunda entrada de la ALU es cambiado de uno de 2 entradas o
otro de 4 entradas. Las dos entradas adicionales son para: La constante 4 (usada para
incrementar el PC) y el campo extendido en signo y desplazado en dos (usado en el
cálculo de los brincos condicionales).
En la figura 4.19 se muestran los detalles del camino de los datos con estos multiplexores
adicionales. Al introducir algunos registros y multiplexores, fue posible reducir el número
de unidades de memoria de dos a una y eliminar dos sumadores. Dado que los registros y
multiplexores son muy pequeños comparados con una unidad de memoria o ALU, esto
podría llevarnos a una reducción sustancial del costo del hardware.
Fig. 4.19 El camino de los datos para ejecutar cada instrucción en múltiples ciclos.
A la figura 4.19 se le deben agregar las señales de control correspondientes, puesto que la
ejecución se realizará en múltiples ciclos de reloj, el conjunto es diferente al de una
implementación de un solo ciclo. Por ejemplo, las unidades visibles al programador (el PC,
la memoria y el archivo de registros) y el registro IR necesitarán señales de escritura. La
memoria también necesitará la señal de lectura. Podemos usar nuevamente el control de la
ALU que se utilizó en la implementación de un solo ciclo. Finalmente, cada multiplexor de
dos entradas requiere de una señal de control, mientras que el de cuatro entradas requerirá
de dos entradas de control. En la figura 4.20 se muestra al camino de los datos con las
señales de control; el nombre de cada señal de control depende de su funcionalidad.
Debido a que se debe soportar la ejecución de brincos y saltos, hay tres posibles valores
para el dato que se escribirá en el PC:
1. La salida de la ALU, la cual es el valor PC + 4 durante la captura de la instrucción. Este
valor debería ser almacenado directamente en el PC.
2. El registro ALUOut, en el cual se almacenó la dirección destino del salto después de
que se calculó.
3. Los 26 bits mas bajos del registro de instrucción (IR) desplazados a la izquierda por dos
y concatenados con los cuatro bits mas significativos del PC incrementado; cuando se
trata de un salto.
Por lo tanto, a la entrada del PC deberá colocarse un multiplexor de 3 entradas por medio
del cual se seleccione alguno de estos tres valores.
Fig. 4.20 Camino de datos multiciclo con algunas señales de control.
El PC es escrito incondicionalmente por los incrementos normales o saltos; y es escrito
condicionalmente durante los brincos sobre igual (beq). En el último caso, si los dos
registros que se están comparando tienen el mismo valor, en el PC se escribirá el contenido
del registro ALUOut.
Entonces, en el PC debe haber dos habilitaciones para escritura, la escritura incondicional
(PCWrite) y la escritura condicional (PCWriteCond). Las dos habilitaciones se combinan
por medio de una compuerta OR. En el caso de un brinco condicional, el salto depende del
valor de la bandera zero, por lo que las señales PCWriteCond y la bandera zero deben
combinarse con una compuerta AND.
En la figura 4.21 se muestra el camino de datos completo para una implementación
multiciclos con las líneas de control necesarias para la ejecución del subconjunto de
instrucciones bajo consideración.
El control se muestra como un bloque en el que se generan todas las habilitaciones de los
diferentes elementos de estado, así como las selecciones en los multiplexores. En total se
tienen 10 señales de control de 1 bit y 3 señales de control de 2 bits. En la tabla 4.7 se
muestra el efecto de las señales de control cuando son acertadas o desacertadas, mostrando
por separado a las señales de 1 bit de las señales de 2 bits.
PCSource
PCWriteCond
PCWrite
ALUop
IorD
ALUSrcB
0
MemWrite
ALUSrcA
1
MemtoReg
IRWrite
RegWrite
MemRead
2
RegDst
26
Shift
Left 2
Instruction [31-26]
Instruction [25 - 0]
Instruction [25-21]
PC
Instruction
[31 - 0]
0
Address
Read
data
1
Instruction
Register
Instruction [20-16]
Instruction
[15-11]
0
1
Write
data
0
Memory
Memory
Data
Register
28
PC[31-28]
0
Read
Register1
Read
data 1
Read
Register2
Read
data 2
Write
Register
Write
Data
A
B
1
4
0
1
2
3
Zero
ALU
ALU
result
Registers
1
Instruction [15- 0]
16
Sign
extend
32
Shift
Left 2
ALU
control
Instruction [5- 0]
Fig. 4.21 Camino de datos completo para una implementación multiciclos con sus correspondientes líneas de control.
ALUOut
Acciones de las señales de Control de 1 bit
Señal
Efecto cuando es desacertada
Efecto cuando es acertada
RegDst
El registro a escribirse en el archivo El registro a escribirse en el archivo
de registros se indica en el campo rt de registros se indica en el campo rd
RegWrite
Habilita la escritura en el archivo de
Ninguno
registros
ALUSrcA
El primer operando de la ALU es el El primer operando de la ALU viene
PC
del registro A
MemRead
Ninguno
Habilita la lectura de la memoria
MemWrite Ninguno
Habilita la escritura en la memoria
MemtoReg El valor a escribirse en el archivo de El valor a escribirse en el archivo de
registros viene del registro temporal registros viene del registro temporal
ALUOut
MDR
IorD
El PC es usado para suministrar la
ALUOut es usado para suministrar
dirección a la unidad de memoria
la dirección a la unidad de memoria
IRWrite
Ninguno
La salida de la memoria es escrita en
el registro IR
PCWrite
Ninguno
El PC es escrito; su valor lo
determina PCSource
PCWriteCond Ninguno
El PC es escrito si la salida zero de
la ALU también está activa
Señal
ALUOp
ALUSrcB
PCSource
Acciones de las señales de Control de 2 bits
Valor
Efecto
00
La ALU realiza una suma
01
La ALU realiza una resta
10
La ALU realiza una operación determinada por el campo funct
00
La segunda entrada de la ALU viene del registro B
01
La segunda entrada de la ALU es la constante 4
10
La segunda entrada de la ALU son los 16 bits bajos de IR extendidos
en signo
11
La segunda entrada de la ALU son los 16 bits bajos de IR extendidos
en signo y desplazados a la izquierda en 2
00
PC + 4 es enviado para escribirse en el PC
01
La dirección destino para un brinco es enviada para escribirse en el
PC
10
En el PC se escribirán los 26 bits bajos de IR, desplazados a la
izquierda en 2 y concatenados con los 4 bits altos de PC + 4
Tabla 4.7 Se muestra el efecto de las señales de control cuando son acertadas o desacertadas, en la primera
parte se presentan las señales de control de 1 bit y en la segunda, las señales de 2 bits.
Distribución de la ejecución de las instrucciones en ciclos de Reloj
A partir de la figura 4.21, es necesario evaluar lo que deberá ocurrir en cada ciclo de reloj
de la implementación multiciclo, con esto determinará que señales de control adicionales
pueden ser necesarias, así como las activaciones de las diferentes señales de control.
Se busca que la ejecución de cada instrucción pueda distribuirse en una serie de pasos y que
cada paso tome un ciclo de reloj. Un paso puede consistir, a lo más en una operación de la
ALU, o un acceso al archivo de registros, o un acceso a memoria. Para aumentar la rapidez
en la ejecución de las instrucciones, debe balancearse el trabajo que se realizará en cada
ciclo. Con esta restricción, el ciclo de reloj será tan corto como lo sea la operación mas
larga de las anteriormente mencionadas.
Recordemos que cualquier dato que sea necesario en un ciclo de reloj sucesivo deberá ser
almacenado en un elemento de estado, ya sea principal (PC, archivo de registros o
memoria) o temporal (A, B, MDR, ALUOut o IR, el último es el único con señal de
habilitación de escritura). En esta implementación también emplearemos una metodología
disparada por flancos, de manera que las lecturas de los elementos de estado se pueden
hacer en cualquier instante, pero las escrituras solo se harán en el flanco seleccionado.
Los pasos para la ejecución de las instrucciones son:
1.- Búsqueda de la instrucción
Este paso lo realizan todas las instrucciones, consiste en la lectura de la instrucción y su
captura en el registro de instrucciones (IR), y al mismo tiempo se aprovecha la ALU para
determinar la dirección de la siguiente instrucción.
IR = Memory[PC];
PC = PC + 4;
Operación: La lectura de la memoria se habilita con MemRead, ajustando IorD a 0 para
que el PC suministre la dirección. La escritura de IR se habilita con IRWrite, esta escritura
se realizará en el siguiente flanco de reloj. También se debe ajustar la señal ALUSrcA a 0
para que el primer operando de la ALU sea el PC y ALUScrB a 01 para que el segundo
operando sea la constante 4; además en ALUOp se debe colocar 00 para que se realice la
suma; finalmente deberá acertarse PCWrite para la escritura del resultado de la suma, esta
escritura se realizará en el siguiente flanco de reloj.
También se escribirán algunos registros temporales, como ALUOp, B o A, pero para este
paso su valor no es importante puesto que su valor no será utilizado en el siguiente ciclo de
reloj.
2.- Decodificación de la instrucción y lectura de registros
En el paso previo y el actual, desconocemos cual es la instrucción que se está ejecutando;
de manera que las acciones realizadas en este paso deben ser comunes a todas las
instrucciones o bien, no deben perjudicar la ejecución de alguna instrucción. En este paso
se realizará la lectura en el archivo de registros dejando los valores leídos en los registros A
y B. Si alguna instrucción no requiere de estos datos, no le perjudica su lectura.
Además, para aprovechar la ALU y pensando en que tal vez se trate de un brinco
condicional, es posible calcular la dirección destino del brinco, sumando el valor del PC
con los 16 bits bajos de IR extendidos en signo y desplazados a la izquierda en 2:
A = Reg[ IR [ 25-21 ] ]
B = Reg[ IR [ 20-16 ] ]
ALUOut = PC + ( extensión-signo( IR[15-0] ) << 2 )
Operación: La lectura del archivo de registros es automática en todos los ciclos de reloj, no
requiere habilitaciones; y la escritura de los registros A y B tampoco requiere
habilitaciones, sin embargo se realizará en el siguiente flanco de reloj. Para la última
operación, con ALUOp = 00 se realizará una suma, para obtener los operandos correctos
ALUSrcA debe ajustarse a 0 (el primer operando es el PC) y ALUSrcB debe ajustarse a 11
(el segundo operando se forma con los 16 bits bajos de IR extendidos en signo y
desplazados a la izquierda en 2), después de la operación de la suma, el resultado se
escribirá en forma automática en el registro ALUOut.
En este ciclo, a partir del opcoder ( IR[31-26] ) se determina lo que se realizará en los
siguientes ciclos de reloj, en función del tipo de instrucción.
3.- Ejecución, cálculo de una dirección de memoria o culminación de un brinco/salto
Este es el primer ciclo en el que la operación del camino de los datos depende de la clase de
instrucción. En todos los casos, la ALU esta operando sobre los resultados preparados en el
paso anterior. Las acciones que se realizan las especificaremos para cada clase de
instrucción:
Acceso a Memoria:
ALUOut = A + extensión-signo( IR[15-0] )
Operación: La ALU calculará una dirección para un acceso a memoria. Para que los
operandos sean correctos se requiere que ALUSrcA sea ajustado a 1 (el primer sumando
esta en el registro A) y que ALUSrcB sea 10 (el segundo operando se forma con los 16 bits
bajos de IR extendidos en signo). También ALUOp = 00 para que se realice una suma. La
escritura de ALUOut no requiere habilitación.
Instrucción aritmético-lógica (Tipo R):
ALUOut = A op B;
Operación: La ALU realizará la operación especificada en el campo de función ( IR[5-0] )
de manera que ALUOp debe tener 10. Para que el primer operando sea A se debe ajustar
ALUSrcA a 1 y para que el segundo operando sea B se debe ajustar ALUSrcB a 00. La
escritura de ALUOut se realiza automáticamente en el siguiente flanco.
Brinco:
Si ( A == B ) PC = ALUOut;
Operación: Se aprovecha que en el paso anterior ya se calculó la dirección destino del
brinco, la cual está en ALUOut. Por lo que se aprovechará la ALU para la comparación de
los dos registros, la comparación básicamente es una resta para la posible generación de la
bandera zero. Por lo tanto, para que el primer minuendo sea A se debe ajustar ALUSrcA a 1
y para que el sustrayendo sea B se debe ajustar ALUSrcB a 00. La resta se define
colocando 01 en ALUOp. Para la fuente correcta del PC se debe ajustar PCSource a 01 (El
PC tomará el valor de ALUOut) y su escritura queda condicionada ajustando a 1 la señal
PCWriteCond. Si la escritura del PC se va a realizar, lo hará en el siguiente flanco de reloj,
y tomará la dirección correcta puesto que no ha cambiado el valor de ALUOut. La bandera
de zero de genera con los datos correctos por que la ALU no es un elemento de estado. Con
este paso culmina la ejecución de esta instrucción y se puede continuar con la siguiente.
Es importante destacar que para esta instrucción el PC se modifica dos veces, en el paso 1
se escribió en el PC el valor de PC + 4. En el paso 2 sobre este valor se calculó la dirección
destino del brinco, la cual se escribió en el paso 3 en el PC.
Salto:
PC = PC [ 31-28 ] || ( IR[ 25-0] << 2 )
Operación: El PC es reemplazado por la dirección del salto, para eso PCSource debe
ajustarse a 10 y PCWrite debe ser acertado. También aquí termina esta instrucción.
4.- Acceso a memoria o culminación de una instrucción tipo-R
Durante este paso, se accesará a la memoria para una carga o un almacenamiento y una
instrucción tipo R almacenará su resultado. Si se hace una lectura de la memoria, el dato
leído se colocará en MDR para usarse en el siguiente ciclo de reloj.
Acceso a Memoria:
MDR = Memory[ ALUOut ];
O
Memory[ ALUOut ] = B;
Operación: El acceso se hará en la dirección calculada en el paso anterior (y esta en
ALUOut) por lo que la señal IorD debe ajustarse a 1, para definir la dirección de acceso de
manera correcta. Si se trata de una carga, debe acertarse la señal MemRead y el dato a
cargar se almacenará en el registro MDR. Para los almacenamientos, debe acertarse la señal
MemWrite, el dato que se escribirá está en el registro B, se obtuvo en el paso 2, pero su
valor no cambio durante el paso 3. La escritura del registro MDR y de la memoria se hará
en el siguiente flanco de reloj. Con este paso terminan los almacenamientos, pero no las
cargas.
Instrucción aritmético-lógica (Tipo R):
Reg[ IR [ 15-11 ] ] = ALUOut;
Operación: El resultado de la operación de la ALU, que esta en ALUOut, debe escribirse
en el registro especificado en el campo rd, este registro se selecciona colocando un 1 en la
señal RegDst. La señal RegWrite debe asertarse y la señal MemtoReg debe ajustarse a 0,
para definir la escritura del dato correcto. Aquí terminan las instrucciones tipo R.
5.- Culminación de una lectura de memoria
En este paso se completa la única instrucción pendiente: la carga
Reg[ IR [ 20-16 ] ] = MDR;
Operación: El dato que está en el registro MDR debe escribirse en el registro especificado
en el campo rt, este registro se selecciona colocando un 0 en la señal RegDst. La señal
RegWrite debe asertarse, sin embargo en este caso la señal MemtoReg debe ajustarse a 1,
para escribir al dato correcto.
Las acciones que se realizan en cada uno de los cinco pasos se resumen en la tabla
siguientes:
Nombre del paso
Acción para
Instrucciones
tipo-R
Búsqueda de la
instrucción
Decodificación de la
instrucción y lectura
de registros
Ejecución, cálculo
de una dirección de
memoria o
culminación de un
brinco/salto
Acceso a memoria o
culminación de una
instrucción tipo-R
Acción para Accesos a
memoria
Acción para
brincos
Acción para saltos
IR = Memory[PC]
PC = PC + 4
A = Reg[ IR [ 25-21 ] ]
B = Reg[ IR [ 20-16 ] ]
ALUOut = PC + ( extensión-signo( IR[15-0] ) << 2 )
ALUOut = A op B
ALUOut = A +
Si ( A = = B )
PC = PC [ 31-28 ] ||
extensión-signo( IR[15- PC = ALUOut
( IR[ 25-0] << 2 )
0] )
Reg[ IR [ 15-11 ] ]
= ALUOut
Culminación de una
lectura de memoria
Cargas:
MDR =
Memory[ALUOut]
Almacenamientos:
Memory[ALUOut] = B
Reg[IR[ 20-16]] =
MDR
Tabla 4.8 Resumen de los cinco pasos para cada clase de instrucción.
Definiendo el Control
Una vez que se han determinado los pasos que requiere cada instrucción y se han definido
las acciones que se realizarán en cada paso, es posible definir la implementación del
control. En la implementación de un sólo ciclo, por medio de una tabla de verdad se
determinó la habilitación de las señales para cada clase de instrucción. Para el camino de
datos multiciclo, el control es mas complejo por que la ejecución es ejecutada en una serie
de pasos. El control debe determinar las señales que deben ser ajustadas en algún paso y el
siguiente paso en la secuencia.
En esta sección se presenta una técnica para la implementación del control, basada en una
máquina de estados finitos. En la siguiente sección revisaremos otra técnica conocida como
microprogramación. Ambas técnicas representan el control de manera que pueda facilitarse
su implementación por medio de una herramienta CAD para síntesis en compuertas, ROMs,
o PLAs.
Una máquina de estados finitos consiste de un conjunto de estados y direcciones sobre
como cambiar de estado. Las direcciones son definidas por la función del estado siguiente,
la cual hace un mapeo entre el estado actual y sus entradas con el estado siguiente. Al usar
una máquina para el control, para cada estado también debe definirse que salidas serán
acertadas cuando la máquina este en ese estado. Para la implementación de la máquina, las
salidas de habilitación que no estén explícitamente acertadas estarán desacertadas, no se
tendrá una condición no importa. Por ejemplo, si en un estado se requiere la escritura de un
registro, en ese estado aparecerá la señal RegWrite indicando que la señal es acertada, y en
los estados donde no aparece esta señal, es por que estará desacertada.
Para el control de los multiplexores la situación es un poco diferente, por que el control de
un multiplexor determina la selección de una de sus entradas. En la máquina
especificaremos el ajuste de los multiplexores que sean determinantes en cada estado, los
que no aparezcan en un estado, es por que realmente no importa su valor.
Para todas las clases de instrucción, los pasos 1 y 2 realizan las mismas acciones, después
de ese paso, la secuencia que se sigue es diferente para cada clase de instrucción. Por lo
tanto, una primera aproximación al control es la siguiente:
Fig. 4.22 Una aproximación al control multiciclo.
Para construir la máquina, es paso 1 corresponderá al estado 0 y el paso 2 corresponderá al
estado 1, y no hay restricción para pasar del estado 0 al estado 1. Sin embargo, a partir del
estado 1 se debe evaluar al opcode para determinar cual será el estado siguiente. En la
figura 4.23 se muestran los estados 0 y 1 de la máquina, y un bosquejo de la organización
de la máquina completa. Las señales acertadas y los valores de cada multiplexor se
obtienen de la operación descrita en los pasos 1 y 2.
Fig. 4.23 Los estados 0 y 1 son los mismos para todas las clases de instrucciones.
Ahora revisaremos la máquina de estados correspondiente a los accesos a memoria, en el
primer estado de los accesos a memoria (estado 2 de la máquina completa) se obtiene la
dirección que será accesada, esta acción es la misma para las cargas y almacenamientos
(corresponde al paso 3). Posteriormente las acciones difieren, en el caso de una carga aún
quedan pendientes dos pasos, el paso en que se leerá el dato de la memoria para escribirse
en el registro MDR (estado 3) y el paso en el que se escribirá el contenido del registro
MDR al archivo de registros (estado 4), en el registro especificado en el campo rt de la
instrucción. Para los almacenamientos, después del paso 2 sólo queda pendiente un paso, en
el que se escribirá el contenido del registro B en la memoria (estado 5).
En la figura 4.24 se muestran los estados requeridos para los accesos a memoria, en el
estado 2 nuevamente se debe evaluar el tipo de instrucción para determinar si se continúa
con el estado 3 o con el estado 5. En el estado 3, no importando las entradas, el estado
siguiente será el estado 4. En el estado 4 terminan las cargas y en el estado 5 terminan los
almacenamientos. El estado siguiente a estos dos estados es el estado 0, para continuar con
la siguiente instrucción. Las señales que son acertadas y los valores de los multiplexores, en
los estados 2, 3, 4 y 5 fueron descritos en los pasos 3, 4 y 5, en la parte correspondiente a
los accesos a memoria.
Para las instrucciones tipo R, después del estado 1, quedan pendientes dos pasos. En el
primero (estado 6) se ejecutará la operación en la ALU, con los datos que están en los
registros A y B, y el resultado automáticamente se escribirá en ALUOut. Y en el último
paso (estado 7), el resultado obtenido en el paso anterior se escribirá en el archivo de
registros en el registro indicado en el campo rd de la instrucción. En la figura 4.25 se
muestran estos 2 estados, después del estado 7 se debe continuar con el estado 0, para
ejecutar la siguiente instrucción.
Fig. 4.24 Máquina de estados finitos para los accesos a memoria.
Fig. 4.25 Máquina de estados finitos para las instrucciones tipo-R
Para los brincos y saltos sólo queda pendiente un paso, en el caso de los brincos en este
paso se hará la comparación de los dos registros y se habilitará la escritura condicional del
PC; estas acciones se realizarán en el estado 8, el cual se muestra en la figura 4.26.
Fig. 4.26 Máquina de estados finitos para brincos
En el caso de los saltos, sólo se realizará la escritura del PC y no queda condicionada. En la
figura 4.27 se muestra el estado 9, en el que se ejecuta el último paso de una instrucción de
salto.
Fig. 4.27 Máquina de estados finitos para saltos
El control completo se obtiene juntando las figuras desde la 4.23 hasta la 4.27, esto se
muestra en la figura 4.28. Este control satisface perfectamente el subconjunto que contiene
a las instrucciones de carga y almacenamiento, instrucciones tipo-R, brincos y saltos. Si se
desea incorporar una nueva instrucción, debe primeramente analizarse si el camino de los
datos es suficiente para soportarla o sino, se deberán incorporar los elementos necesarios
para ello. Posteriormente, se deben agregar los estados necesarios en el control, para su
correcta ejecución.
El rendimiento de una implementación multiciclos debe incrementarse por que aunque se
requiere mas de un ciclo para la ejecución de una instrucción, la duración del ciclo es
menor por que sólo trabaja una unidad funcional.
Fig. 4.28 Máquina de estados para implementar el control de una máquina multiciclos.
Tarea 9
1 al 4.- Se trata de repetir los problemas del 1 al 4 de la tarea anterior, pero para esta nueva
implementación se usará la figura 4.21. En el problema 1, por tratarse de una instrucción
tipo-R, se necesitarán 4 copias de la figura 4.21, una por cada ciclo de reloj. En el problema
2 es una instrucción BEQ, se requieren 3 copias.
Para los problemas 3 y 4, además de modificar el hardware de la figura 4.21, será necesario
completar la máquina de estados del control: Es posible agregar los nuevos estados al
diagrama de la figura 4.28, o si se prefiere, trace el diagrama con los estados necesarios
sólo para estas dos instrucciones.
5.- Comparación de implementaciones. Supongamos que las unidades funcionales
combinacionales como la ALU y sumadores tardan 5 ns en proporcionar el resultado y que
los elementos de estado como memorias y archivos de registros tienen un tiempo de acceso
de 10 ns para lecturas y escrituras, y que para los demás elementos, como compuertas y
multiplexores es posible despreciar su tiempo de ejecución.
a) ¿Cuál será la duración del ciclo de reloj para una implementación de un solo ciclo y para
una implementación multiciclos?
b) Si un programa tiene la distribución de instrucciones siguiente:
Tipo de Instrucción
Cargas
Almacenamientos
Tipo R
Brincos y saltos
Frecuencia
10 %
10 %
50 %
30 %
¿Cuál implementación será mas rápida y por cuánto?

Documentos relacionados