Implementación segmentada del MIPS64
La segmentación de la ruta de datos del procesador es una técnica empleada en el diseño de microprocesadores, basada en la división de la ejecución de las instrucciones en etapas. Así se consigue que una instrucción empiece a ejecutarse antes de que hayan terminado las anteriores y, por tanto, que haya varias instrucciones procesándose simultáneamente, cada una en una fase de ejecución diferente.
Cada una de las etapas debe completar sus acciones en un ciclo de reloj, pasando sus resultados a la etapa siguiente y recibiéndolos de la anterior. Para ello es necesario almacenar los datos en registros intermedios, denominados registros de segmentación. Cualquier valor que pueda ser necesario en una etapa posterior debe irse propagando a través de esos registros intermedios hasta que ya no sea necesario.
» Ejemplo:
- Un ejemplo muy gráfico para comprender la técnica de segmentación es una cadena de montaje: a un operario le llega una pieza, sobre la que tendrá que realizar un trabajo específico; una vez haya terminado su trabajo con la pieza, la enviará al siguiente operario para que éste haga otro trabajo diferente sobre ella. Para conseguir la segmentación es necesario que una instrucción utilice solamente el hardware de una etapa en cada ciclo de ejecución.
El cauce de ejecución de un MIPS64 segmentado sería, idealmente, como en la figura 2. De esta manera se aprecia que, una vez está el cauce lleno, se termina de ejecutar una instrucción en cada ciclo: en el ciclo nº 5 finaliza la primera instrucción, en el nº 6 la segunda, etc. El speedup ideal que puede conseguirse aplicando la segmentación sobre un microprocesador es N, siendo N el número de etapas que componen la arquitectura: en el caso particular del MIPS64, el speedup ideal es 5 (es decir, el procesador segmentado es idealmente 5 veces más rápido que el secuencial).
Figura 2: Cauce de ejecución segmentado
Haz click aquí para ver la imagen más grande
¿Cuál es la mejora que se obtiene al segmentar un procesador? Tenemos que fijarnos en los siguientes aspectos:
- Productividad: Número de instrucciones que se terminan por segundo.
- CPI.
- Latencia: Tiempo de ejecución de una instrucción.
- Periodo de reloj del procesador: T.
Entonces, comparado la implementación secuencial multiciclo con la segmentada:
- Aumenta la productividad.
- Disminuye el CPI.
- Se mantiene la latencia (o empeora un poco debido a los registros de segmentación).
- Se mantiene el periodo de reloj (o empeora un poco de nuevo a causa de estos registros).
» Ruta de datos
Para implementar un repertorio básico del MIPS64 (un subconjunto lo suficientemente representativo del repertorio completo) en una ruta de datos segmentada se requieren:
- Memoria de instrucciones.
- Memoria de datos.
- 32 registros de datos enteros: visibles por el programador. Es necesario que en el banco de registros pueda escribirse en la primera mitad del ciclo y se pueda leer en la segunda.
- Contador de programa (PC).
- Dos sumadores, para sumar 4 al PC, y para sumar al PC el offset de salto y calcular las direcciones destino de salto.
- Una ALU, capaz de realizar suma, resta, AND, OR, comparación de mayoría e indicación de que el resultado es cero (para realizar la comparación de igualdad mediante resta).
- Extensor de signo, para adaptar el operando inmediato al tamaño de palabra.
- Desplazador a la izquierda, para implementar la multiplicación por 4.
- Cuatro registros de segmentación.
Es decir, el hardware utilizado es prácticamente el mismo que en el caso de la implementación secuencial excepto por los registros de segmentación y por las modificaciones necesarias para evitar los coflictos en el caso de recursos que sean utilizaos por más de una etapa (por ejemplo, el banco de registros en ID y en WB).
.
Figura 1: Arquitectura MIPS64 segmentada
Haz click aquí para ver la imagen más grande
» Unidad de control
La unidad de control en este caso recibe como entrada el opcode de la instrucción decodificada y a partir de este opcode genera los valores adecuados para las diferentes señales de control. Esta señales se propagan junto con el resto de valores por los registros de segmentación hasta que lleguen a la etapa adecuada. Por lo tanto en este caso la unidad de control es un circuito combinacional que genera las señales de control necesarias para cada tipo de instrucción a partir de una tabla.
