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?