Sistemas de Multiprocesamiento Procesadores RISC Índice INTRODUCCIÓN 1.- Objetivos: .................................................................................................................... 4 2. La aparición de los procesadores RISC:....................................................................... 4 2.1. Que significa RISC................................................................................................ 4 2.2. La base de un sistema RISC: Un set de instrucciones simple ............................... 4 2.3. Características RISC.............................................................................................. 5 3. Dentro de una máquina RISC:...................................................................................... 6 3.1. Pipelining............................................................................................................... 6 3.2. A tener en cuenta en sistemas con pipeline implementado ................................... 7 3.2.1. Velocidad de la memoria................................................................................ 7 3.2.2. Latencia de las instrucciones .......................................................................... 7 3.2.3. Dependencias.......................................................................................................... 8 3.3. Mejora de la velocidad en máquinas con pipeline................................................. 9 3.3.1. Procesadores Superpipeline............................................................................ 9 3.3.2. Procesadores Superescalares .......................................................................... 9 SET DE INSTRUCCIONES 1.- Aspectos Que Deben Concretarse En El Set De Instrucciones................................. 10 2.- Formato De Las Instrucciones .................................................................................. 11 2.1- Instrucciones Tipo R ........................................................................................... 11 2.2.- Intrucciones Tipo I ............................................................................................. 12 2.3.- Intrucciones Tipo J ............................................................................................. 13 3.- Tipos De Instrucciones.............................................................................................. 13 3.1 Intrucciones Aritméticas....................................................................................... 13 3.2.- Instrucciones Lógicas......................................................................................... 15 3.3.- Intrucciones De Comparación Y Salto............................................................... 17 3.3.1 Pseudoinstrucciones. ..................................................................................... 17 3.3.2.- Instrucciones De Toma De Decisiones ....................................................... 17 3.3.3.- Instrucciones De Bifurcar Registro. ............................................................ 18 Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 1 Sistemas de Multiprocesamiento Procesadores RISC Índice 3.3.4.- Instrucción Bifurca Y Enlaza. ..................................................................... 18 3.4.- Instrucciones De Transferencia De Datos.......................................................... 18 3.5.-Instrucción De Manipulación De Constantes...................................................... 19 3.6.- Otras Operaciones. ............................................................................................. 20 4.-Modos De Direccionamiento ..................................................................................... 21 RUTA DE DATOS 1.- Visión General. ......................................................................................................... 22 2.- Operaciones que soporta la Arquitectura. ................................................................. 22 3.- Ruta de datos ............................................................................................................. 23 3.1.- Fases en la ejecución de una instrucción............................................................ 23 3.2.- Elementos de la ruta de datos............................................................................. 24 3.3.- Descomposición de la ejecución de la instrucción en ciclos de reloj................. 24 3.3.1.- Búsqueda de la instrucción.......................................................................... 24 3.3.2.- Decodificación de la instrucción y búsqueda de registros. ......................... 25 3.3.3.- Ejecución, cálculo de la dirección de memoria o terminación del salto ..... 26 3.3.4.- Acceso a memoria o terminación de la instrucción de tipo R..................... 27 3.3.5.- Fase de postescritura ................................................................................... 28 4.- Algunos diagramas explicativos ............................................................................... 29 4.1.- Esquema general ................................................................................................ 29 4.2.- Carga de la instrucción....................................................................................... 30 4.2.1.- Primera parte ............................................................................................... 30 4.2.2.- Segunda parte .............................................................................................. 31 4.3.- Decodificación de instrucción y carga de los registros:..................................... 32 4.3.1 Primera parte.................................................................................................. 32 4.3.2 Segunda parte ................................................................................................ 33 4.4.- Completado del salto.......................................................................................... 34 4.5.- Ejecución de instrucción aritmético-lógica ........................................................ 35 4.5.1.- Primera parte ............................................................................................... 35 4.5.2.- Segunda parte .............................................................................................. 36 Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 2 Sistemas de Multiprocesamiento Procesadores RISC Índice UNIDAD DE CONTROL 1.- Introducción .............................................................................................................. 37 2.- Microprogramación: Simplificar El Diseño Del Control.......................................... 37 3.- Definición Del Formato De Microinstrucción .......................................................... 40 4.- Creación Del Microprograma.................................................................................... 42 BIBLIOGRAFÍA Bibliografía..................................................................................................................... 48 Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 3 Sistemas de Multiprocesamiento Procesadores RISC Introducción 1.- Objetivos: En este capítulo se va a proceder a describir las principales características de la arquitectura de los procesadores RISC, que en algunas aplicaciones vienen a sustituir a los antiguos procesadores CISC, como por ejemplo en la nueva generación de sistemas Macintosh que Apple está desarrollando. Al final de este capítulo deberemos de ser capaces de: ü Describir las diferencias más significativas entre el set de instrucciones de un procesador CISC y un procesador RISC ü Comprender el pipelining y su implementación en un diseño RISC ü Definir “stalling” y la planificación de instrucciones ü Comparar las principales ventajas y desventajas de ambas arquitecturas. 2. La aparición de los procesadores RISC: 2.1. Que significa RISC A mediados de la década de los 70, el avance en el desarrollo de la tecnología de los semiconductores se tradujo en una disminución de la diferencia en velocidad entre la memoria principal y los propios procesadores. A medida que la velocidad de la memoria se incrementa, y los lenguajes de alto nivel toman cada vez un mayor protagonismo frente a los ensambladores, las razones para utilizar procesadores CISC se ven claramente disminuidas, por lo que los diseñadores de sistemas computacionales se orientan hacia la optimización del rendimiento del sistema mediante la construcción de un hardware más rápido. 2.2. La base de un sistema RISC: Un set de instrucciones simple Una de las claves básica para la consecución de la arquitectura RISC es que una secuencia de instrucciones simples producen los mismos resultados que una Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 4 Sistemas de Multiprocesamiento Procesadores RISC Introducción instrucciones de instrucciones complejas, pero esta secuencia puede ser implementada con un diseño hardware más sencillo y rápido. 2.3. Características RISC î Set de instrucciones simple En un procesador RISC, el juego de instrucciones consta de instrucciones básicas y simples, de las cuales se pueden ejecutar operaciones complejas. î Igualdad de longitud de instrucciones Cada instrucción tiene la misma longitud, por lo que su carga se realizará en una única transferencia. î Instrucciones de un ciclo máquina La mayoría de las instrucciones se completan en un ciclo máquina, lo que permite al procesador manejar varias instrucciones al mismo tiempo. Este pipelining es una de las claves para obtener una mayor velocidad de ejecución en estas máquinas. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 5 Sistemas de Multiprocesamiento Procesadores RISC Introducción 3. Dentro de una máquina RISC: 3.1. Pipelining Uno de los principales objetivos de los diseñadores de máquinas RISC es crear el chip más rápido posible, para lo cual utilizan un conjunto de técnicas entre las que se encuentra el pipelining El pipelining es una técnica de diseño, mediante la cual el hardware del computador procesa más de una instrucción al mismo tiempo, logrando así, que el computador no tenga que esperar a que finalice la ejecución de una instrucción para comenzar la ejecución de la siguiente. En una máquina CISC las etapas básicas en el ciclo de trabajo eran: - Carga - Decodificación - Ejecución - Almacenamiento de resultados Estas mismas etapas se utilizan en una máquina RISC, pero estas son ejecutadas en paralelo. Tan pronto como se completa una etapa, pasa su resultado a la siguiente fase, y comienza a trabajar en la siguiente instrucción. Por lo tanto, el rendimiento de un sistema pipeline depende del tiempo que tarde la ejecución de cada fase del pipeline, y no del tiempo de todas las fases. En un pipeline de una máquina RISC, cada instrucción utiliza 1 ciclo de reloj para cada fase, por lo que el procesador puede cargar una nueva instrucción por cada ciclo de reloj. El pipeline no mejora la latencia de las instrucciones ( cada instrucción sigue necesitando el mismo tiempo para completarse), pero si que mejora el tiempo total de ejecución. Como ocurre también en las máquinas CISC, la ejecución ideal no siempre se consigue. Puede ocurrir que las instrucciones dentro del pipeline necesiten más de un ciclo para completar una fase. Cuando esto sucede, el procesador tiene que realizar una espera y no aceptar una nueva instrucción hasta que la instrucción que ha provocado este retraso haya pasado a la fase siguiente. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 6 Sistemas de Multiprocesamiento Procesadores RISC Introducción 3.2. A tener en cuenta en sistemas con pipeline implementado Un procesador que utiliza un pipeline de instrucciones puede verse obstaculizado por diversos motivos, como puede ser los retrasos en la lectura de datos desde la memoria, un diseño del set de instrucciones poco eficiente, o dependencias entre instrucciones. Para solucionar estos y otros obstáculos los diseñadores proponen las siguientes soluciones: 3.2.1. Velocidad de la memoria Los problemas que plantean las memorias se solucionan generalmente con la utilización de memorias caché. La caché es una porción de la memoria de mayor velocidad, que se sitúa entre el procesador y la memoria, que generalmente es más lenta. Cuando el procesador quiere operar sobre una posición de memoria principal, la posición se copia sobre la caché. Por lo tanto, referencias posteriores a esa posición, se realizarán sobre la posición en la caché, que devolverá un resultado más rápidamente que la memoria principal. Las memorias caché presentan un problema a los diseñadores y a los programadores: la coherencia. Cuando el procesador escribe un valor hacia la memoria, el valor va hacia la caché y no hacia la memoria principal. Por lo tanto, se necesita un hardware especial, generalmente implementado como parte del propio procesador, para escribir esta información desde la caché a la memoria principal antes de que algún otro proceso intente leer esa posición, o utilice esa parte de la caché para otra aplicación. 3.2.2. Latencia de las instrucciones Un set de instrucciones diseñado de manera poco eficiente puede provocar que el procesador se vea retrasado frecuentemente. La mayoría de estos retrasos provienen de: - instrucciones altamente codificadas: al igual que ocurre en las máquinas CISC, requiriendo verificaciones y cálculos para realizar la decodificación de la instrucción. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 7 Sistemas de Multiprocesamiento Procesadores RISC Introducción - instrucciones de longitud variable: necesitan varias referencias a memoria para realizar la carga de la instrucción. - Instrucciones que acceden a la memoria principal: en lugar de utilizar registros que son de carácter mucho más rápido. - Instrucciones que realizan la lectura y posterior escritura sobre el mismo registro. - Dependencias de recursos de acceso exclusivo: como el registro de códigos de condición. Si una instrucción modifica el valor de alguno de los bits de este registro, y la siguiente instrucción utiliza el valor modificado, esta segunda instrucción se verá retrasada hasta que se realice la escritura por parte de la primera instrucción. 3.2.3. Dependencias Uno de los principales problemas que tiene que afrontar un programador de sistemas RISC es que el procesador puede verse retrasado por una elección incorrecta de instrucciones. Por el echo de que cada instrucción utiliza un cierto tiempo en almacenar su resultado, y como se están ejecutando instrucciones al mismo tiempo, instrucciones posteriores tendrán que esperar por los resultados de instrucciones precedentes. Para solventar este inconveniente se utiliza la planificación de instrucciones. Otra técnica utilizada para minimizar estas dependencias consiste en evitar los bucles recursivos, en la cual, en vez de ejecutar una secuencia de instrucciones dentro del bucle, el compilador planifica las instrucciones las veces necesarias. Esta técnica elimina el cálculo y verificación de la variable de control del bucle. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 8 Sistemas de Multiprocesamiento Procesadores RISC Introducción 3.3. Mejora de la velocidad en máquinas con pipeline Se han desarrollado dos técnicas para incrementar la velocidad dentro de los pipelines: 3.3.1. Procesadores Superpipeline Un sistema superpipeline divide cada fase del pipeline en dos sub-fases, para posteriormente internamente la velocidad del reloj. Cada fase sigue ejecutando un instrucción en cada ciclo de reloj, pero al ser el reloj interno dos veces más rápido, el pipeline carga dos instrucciones por cada pulso del reloj (externo). 3.3.2. Procesadores Superescalares Los procesadores superescalares contienen varias unidades de proceso que son capaces de trabajar en paralelo. Esto permite al procesador trabajar con varias instrucciones similares de manera concurrente, enviando cada instrucción a la primera unidad de proceso que se encuentre disponible. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 9 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones 1.- Aspectos Que Deben Concretarse En El Set De Instrucciones Debemos tener presente los siguientes aspectos: • • Formato de las instrucciones y codificación. Localización de los operandos: memoria, registros, ... R0 R1 Register file Memoria R30 R31 D1 Ld r1, [ D2 ]; Ld r1, [ D1 ]; Add r2, r1, r0; St [ R ], r2; D2 El procesador MIPS presenta una arquitectura de load/store, en la que es necesario que los R operandos estén en los registros Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 10 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones En cuanto a los registros MIPS dispone de 32 registros de 32 bits cada uno, siendo estos de propósito general. • Cuantos operandos explícitos pueden aparecer en una instrucción. • Que operandos están en memoria. Hemos de tener en cuenta el modo de direccionamiento de la memoria. En el caso del MIPS es extremista superior, es decir, el byte de mayor peso será el correspondiente con la dirección de memoria más baja. • Operaciones disponibles en el set de instrucciones. • Conocer cual es la siguiente instrucción a ejecutar. 2.- Formato De Las Instrucciones En el microprocesador MIPS que estamos analizando los datos deben encontrarse almacenado en los registros para poder operar con ellos. Esto hace que el MIPS posea una estructura Load-Store (carga-almacenamiento). Debemos tener en cuenta en las instrucciones: 1. Todas las instrucciones del microprocesador MIPS vienen representadas por una cadena de 32 bits. 2. Se establecen distintos campos para cada tipo de instrucción. 2.1- Instrucciones Tipo R Todas las instrucciones de este tipo leen dos registros, realizan una operación en la ALU sobre los contenidos de los registros y escriben el resultado. Llamamos a estas instrucciones o instrucciones tipo R o bien instrucciones aritmético-lógicas (ya que realizan operaciones aritméticas o lógicas). Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 11 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones El formato para este tipo de instrucciones se corresponde con: op rs rt rd shamt 6 bits 5bits 5bits 5bits 5bits funct 6bits op: operación de la instrucción. Indica el tipo de operación que se trata.. rs: primer registro del operando fuente. rt: segundo registro del operando fuente. rd: registro del operando destino; obtiene el resultado de la operación. shamt: cantidad de desplazamiento funct : función; este campo selecciona la variante de la operación del campo op. Se presenta el problema cuando una instrucción necesita campos mayores que los mostrados anteriormente (por ejemplo en una instrucción de carga deben especificarse dos registros y una dirección, por lo que la dirección se vería reducida a 32 posiciones de memoria). Esto es muy pequeño para que sea una dirección útil para datos. Por consiguiente, tenemos un conflicto entre el deseo que todas las instrucciones tengan la misma longitud y el deseo que las instrucciones tengan un formato sencillo. Será necesario establecer un segundo tipo de formato de instrucciones. 2.2.- Intrucciones Tipo I Este tipo de instrucciones son fundamentales puesto que se trata de las instrucciones para la carga-almacenamiento de los datos, y la ALU únicamente puede operar con los datos una vez que han sido cargados en los registros. Esto nos lleva a cargar en los registros aquellas posiciones de memoria con las que deseemos operar. El formato para las instrucciones de transferencia de datos se corresponde con el mostrado a continuación. op rs rt dirección 6 bits 5bits 5bits 16bits Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 12 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones op: tipo de operación. rs: refistro emplearo para formar la dirección de memoria. rt: registro donde se recibe el resultado de la operación. 2.3.- Intrucciones Tipo J El direccionamiento más simple se encuentra en la instrucciones de bifurcación de MIPS. Utilizan el formato final de instrucción MIPS, denominado tipo J, que consta de 6 bits para el campo de operación y los restantes bits son para el campo de dirección. El formato de las instrucciones tipo J se corresponde con: op Dirección de salto 6 bits 26bits De forma distinta a la instrucción de bifurcación, la instrucción de salto condicional debe especificar dos operandos, además de la dirección de salto. El formato para este tipo de instrucción de salto condicional viene dado por la siguiente estructura: op rs rt dirección 6 bits 5bits 5bits 16bits 3.- Tipos De Instrucciones 3.1 Intrucciones Aritméticas. add rd, rs, rt addu rd, rs, rt Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 0 rs rt rd 6 5 5 5 0 rs rt rd 6 5 5 5 0 5 0 5 0×20 Suma con desbordamiento 6 0×21 Suma sin desbordamiento 6 13 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones Pone la suma de los registros rs y rt en el registro rd. addi rt, rs, inm addu rt, rs, inm 4 rs rt inm 6 5 5 16 5 rs rt inm 6 5 5 16 Suma inmediata con desbordamiento Suma inmediata sin desbordamiento Pone la suma del registro rs y el inmediato de signo extendido en el registro rd. Encontraríamos los mismos casos para la resta (sub). div rs, rt divu rs,rt 0 rs rt 0 0×1a 6 5 5 10 6 0 rs rt 0 0×1b 6 5 5 10 6 División con desbordamiento División sin desbordamiento Divide el registro rs por el registro rt. Deja el cociente en el registro lo y el resto en el registro hi. mult rs, rt multu rs, rt Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 0 rs rt 0 0×18 6 5 5 10 6 0 rs rt 0 0×19 6 5 5 10 Multiplicación Multiplicación sin signo 6 14 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones multiplica los registros rs y rt. Deja la palabra de orden inferior del producto en el registro lo y la de orden superior en el registro hi. 3.2.- Instrucciones Lógicas. and rd, rs, rt 0 rs rt rd 0 0×24 6 5 5 5 5 6 Pone la AND lógica de los registros rs y rt en el registro rd. 0×c rs rt inm 6 5 5 16 andi rt, rs, inm Pone la AND lógica del registro rs y del cero-extendido inmediato en el registro rd. Podríamos realizar de igual forma el OR lógico o la operación XOR lógica de dos registros o bien entre un registro y un inmediato. neg rdest, rsrc Valor negado (con desbordamiento) negu rdest, rsrc Valor negado (sin desbordamiento) Pone el negativo del registro rsrc en el registro rdest. nor rd, rs, rt 0 rs rt rd 0 0×24 6 5 5 5 5 6 Pone la NOR lógica de los registros rs y rt en el registro rd. not rdest, rsrc Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 15 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones Pone la negación lógica bit a bit del registro rsrc en el registro rdest. rol rdest, rsrc1, rscr2 Desplazamiento cíclico a la izquierda. ror rdest, rsrc1, rscr2 Desplazamiento cíclico a la derecha. Desplaza circularmente el registro rsrc1 a la izquierda (derecha) la cantidad indicada por el rsrc2 y pone el resultado en el registro rdest. sll rd, rt, sa sra rd, rt, sa 0 rs rt rd sa 0 6 5 5 5 5 6 0 rs rt rd sa 3 6 5 5 5 5 6 0 rs rt rd sa 2 6 5 5 5 5 6 srl rd, rt, sa Desplazamiento lógico a la izquierda Desplazamiento aritmético a la derecha Desplazamiento lógico a la derecha Desplaza a la izquierda el registro rt (derecha) la cantidad indicada por el inmediato sa y pone el resultado en el registro rd. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 16 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones 3.3.- Intrucciones De Comparación Y Salto. 3.3.1 Pseudoinstrucciones. Son instrucciones que como tales no existen, pero el ensamblador se encarga de traducirlas a instrucciones capaces de ser entendidas por el microprocesador. Ejemplo: move $2, $1 Transfiere el contenido del registro $1 al $2. 3.3.2.- Instrucciones De Toma De Decisiones Sirven para romper el flujo secuencial de las instrucciones. La toma de decisiones se representa normalmente en los lenguajes de programación utilizando la instrucción if, a veces combinada con instrucciones goto y rótulos. MIPS incluye dos instrucciones de toma de decisiones análogas a una instrucción if con goto: beq rs, rt, rótulo 4 rs rt Saltar sobre igual desplazamiento 6 5 5 16 Esta instrucción significa ir a la sentencia rotulada si el valor de rs es igual al valor de rt. bne rs, rt, rótulo 4 rs rt Saltar sobre no igual desplazamiento 6 5 5 16 Significa ir a la sentencia rotulada si el valor de rs no es igual al valor de rt. El test para la igualdad o desigualdad es probablemente el má popular, pero a veces es útil ver si una variable es menor que otra. Estas comparaciones se realizan en MIPS con una instrucción que compara dos registros y pone un tercer registro a 1 si el primero es menor que el segundo; en otro caso, lo pone a 0. la instrucción se denomina inicializar sobre menor que: Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 17 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones slt rdest, rsrc1, rsrc2 Pone el registro rdest a 1 si el valor del registro rsrc1 es menor que el valor del registro rsrc2;en otro caso, el registro rdest se pone a 0. 3.3.3.- Instrucciones De Bifurcar Registro. Se trata de una bifurcación incondicional a la dirección especificada en el registro. 0 jr rs rs 0 Bifurca registro 8 6 5 16 5 3.3.4.- Instrucción Bifurca Y Enlaza. jal ProcedureAddress 3 destino 6 26 Bifurca y enlaza Bifurca incondicionalmente a la instrucción de destino. Guarda la dirección de la siguiente instrucción en el registro rd. La parte de enlaza del nombre significa que se forma un enlace al sitio que llama para permitir que el procedimiento vuelva a la dirección adecuada. 3.4.- Instrucciones De Transferencia De Datos. La instrucción de transferencia de datos que desplaza un dato desde memoria hasta un registro se denomina carga. El formato de la instrucción es el nombre de la operación seguido por el registro que se va a cargar, después la dirección de comienzo del array, y finalmente un registro que contiene el índice del elemento del array que se va a cargar. Así la dirección de memoria del elemento del array estará formada por la suma de la parte constante de la instrucción y un registro. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 18 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones lw rt, dirección 0×23 rs rt desplazamiento 6 5 5 16 Cargar plalabra Carga la cantidad de 32 bits en dirección en el registro rt. La instrucción complementaria a ala de cargar se denomina almacenar; esta transfiere datos de un registro a memoria. El formato de una instrucción de almacenamiento es similar al de una carga: el nombre de la operación, seguido por el registro que se va a almacenar, después la dirección de comienzo del array, y finalmente un registro que contiene el índice del elemento del array que se va a almacenar. sw rt, dirección 0×2b rs rt desplazamiento 6 5 5 16 Almacena palabra Almacena la palabra del registro rt en dirección. 3.5.-Instrucción De Manipulación De Constantes lui rt, inm 0×2b rs rt desplazamiento 6 5 5 16 Carga superior inmediata esta instrucción de cargar inmediato superior está desarrollada específicamente para poner los 16 bits superiores de una constante en un registro, permitiendo que la instrucción siguiente especifique los 16 bits inferores de la constante. lui $16, 61 addi $16,$16,2304 Carga la media palabra inferior del inmediato en la media palabra superior del registro rt. Los bits inferiores del registro se ponen a cero. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 19 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones 3.6.- Otras Operaciones. rfe 0×10 1 6 1 0 0×20 19 6 Vuelta de excepción. Restaura el registro de STATUS. syscall 0 6 0 0×c 20 6 Llamada al sistema El registro $v0 contiene el número de la llamada al sistema suministrada por SPIM. Ruptura 0 código 0×d 6 20 6 break Provoca un código de excepción. La excepción 1 está reservada al depurador. 0 0 1 0 0 0 6 5 5 5 5 6 No operación nop No hace nada. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 20 Sistemas de Multiprocesamiento Procesadores RISC Set de Instrucciones 4.-Modos De Direccionamiento Los modos de direccionamiento que podemos encontrar en el microprocesador MIPS son: 1. Direccionamiento de registros, donde el operando es un registro. 2. Direccionamiento base o desplazamiento, donde el operando está en la posición de memoria cuya dirección es la suma de un registro y una dirección de la instrucción. 3. Direccionamiento inmediato, donde el operando es una constante que está en la misma instrucción. 4. Direccionamiento relativo al PC, donde la dirección es la suma del PC y una constante de la instrucción. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 21 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 1.- Visión General. La arquitectura MIPS consta de 32 registros de proposito general, para utilizar como los operandos de las intrucciones artiméticas, lógicas, etc, cada uno de tamaño de 32 bits. En el microprocesador MIPS los operandos de las instrucciones deben partir obligatoriamente de los registros, y su resultado debe almacenarse también en un registro. Hay registros que tienen almacenados valores concretos que no se pueden modificar, como el caso del registro $0, que siempre almacena el valor 0. Otro registro especial es el $1, que se reserva para que el ensamblador maneje las pseudoinstrucciones (instrucciones que aunque no están implementadas en el hardware de la máquina el compilador las entiende y desglosa en las correspondientes instrucciones de lenguaje máquina) y grandes constantes. 2.- Operaciones que soporta la Arquitectura. La unidad de proceso soporta las siguientes operaciones: - Aritméticas: tanto en coma fija como en coma flotante. - Lógicas: entre las que tenemos AND, OR, desplazamientos lógicos, etc. - Transferencias de datos: carga y almacenamiento en memoria - Saltos condicionales: saltos sobre igual, menor, etc. - Saltos incondicionales: llamadas a subrutinas,etc. Las operaciones tanto aritméticas como lógicas se deben realizar obligatoriamente en los registros del procesador, por lo que será necesario realizar la carga de los operandos en los registros mediante instrucciones de carga, y almacenar los resultados en memoria mediante operaciones de almacenamiento. Por este echo se denomina a este tipo de arquitecturas como de load-store. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 22 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 3.- Ruta de datos 3.1.- Fases en la ejecución de una instrucción Generalmente la ejecución de una instrucción en un microprocesador conlleva las siguientes fases ü Recogida de la instrucción: El procesador busca en la memoria la instrucción a ejecutar, en nuestro caso la palabra de 32 bits. Se carga en el registro de instrucciones. ü Decodificación de la instrucción: Se interpreta cada uno de los campos que forman la palabra de la instrucción. El primer campo que se interpreta es el campo ‘op’ que nos va a insdicar el tipo de instrucción a ejecutar. ü Obtención de los operandos: Se localizan y obtienen los operandos de la instrucción correspondiente siendo almacenados en los registros. ü Realizar la operación indicada por la instrucción. ü Recoger el resultado obtenido que será almacenado en el caso de una operación lógica o aritmética en un registro. ü Ir a la proxima dirección de memoria y ejecutar de nuevo estas fases. Estas fases vienen secuenciadas mediante ciclos de reloj. En el caso del empleo de un único ciclo para la ejecución de la instrucción con todas las fases anteriormente enumeradas, hemos de tener en cuienta que la duración del ciclo de reloj de ser lo suficientemente elevada para que de tiempo a ejecutar todas las fases. Con una ruta de datos de ciclo múltiple, como es el caso que nos ocupa, se realiza una fase en cada ciclo de reloj, dando la posibilidad de utilizar la técnica del pipeline, aprovechando así los recursos de la arquitectura. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 23 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 3.2.- Elementos de la ruta de datos Consta de: q Unidad Aritmético-Lógica Control 3 A Control n Función Cero n Resultado Overflow B 000 AND 001 OR 010 ADD 110 SUB 111 SET-ON-LESSTHAN n Acarreo La obtención de la respuesta correcta a la salida de la ALU tendrá un cierto retaso debido al retraso en la propagación de las señales (acarreos intermedios), y los retrasos propios de la lógica convencional. q Registros. Son flip-flop´s de tipo D con un reloj común para todos ellos. Son de tamaño 32 bits. q Registro Programm Counter (PC) q Registro de Instrucciones (IR) q Multiplexores de diferente número de canales 3.3.- Descomposición de la ejecución de la instrucción en ciclos de reloj 3.3.1.- Búsqueda de la instrucción Durante este primer ciclo de reloj se realizan las siguientes instrucciones. - Generación de la dirección de memoria - Calculo de la siguiente dirección de memoria Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 24 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos Una vez que el sistema a ejecutado su secuencia de reset o inicialización (puesta en tensión) y ha alcanzado un régimen estable, se lleva a cabo la ejecución de instrucciones. Cuando la dirección de memoria está estable en el bús de direcciones, transcurrido un cierto tiempo, la memoria devolverá una instrucción o un dato en el bus de datos. En el caso de que esta sea una instrucción, deberá ser una instrucción, esta pasa al registro de instrucciones IR, almacenandola en el flanco descendente del reloj. Al mismo tiempo se genera la dirección de la siguiente instrucción a ejecutar. Como la instrucción tiene un formato de 32 bits, el cálculo se realiza sumando 4 a la dirección actual del Programm Couter. Esta dirección calculada se almacena de nuevo en el PC. Debe respetarse un tiempo de hold, para que las lineas correspondientes estén estables antes de comenzar una nueva fase: setup hold 3.3.2.- Decodificación de la instrucción y búsqueda de registros. En la fase anterior y todavia en esta, nos sabemos de que instrucción se trata. Se leen los registros que serán utilizados en la ejecución de la instrucción, y que vienen indicados en los campos ‘rs’ y ‘rt’ de la instrucción. El contenido de los mismos pueden ser necesarios en operaciones posteriores, por lo cual se hace uso del fichero de registros. Con la ALU también se calcula la dirección del salto, en el caso de que la instrucción fuese de salto. Si la instrucción no fuera de salto, el resultado se ignoraría. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 25 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos Como no sabemos si la instrucción va a ser o no de salto, y porque necesitamos la ALU en pasos posteriores, guardamos la dirección de destino del hipotético salto en el registro ‘Target’. La realización anticipadamente de estas acciones previsoriamente, produce un beneficio en la disminución de los ciclos necesarios para ejecutar una instrucción. Despues de este ciclo de reloj, las acciones a tomar dependerán del contenido de la palabra de instrucción. 3.3.3.- Ejecución, cálculo de la dirección de memoria o terminación del salto Este es el primer ciclo durante el cual la operación a realizar en el camino de datos está determinado por el tipo de instrucción que corresponda (R, J, etc.). En todos los casos la ALU opera sobre los operandos preparados en la fase anterior, realizando la función correspondiente indicada por sus lineas de control, dependiendo del tipo de instrucción a realizar. Denominamos a la salida de la ALU ALUoutput para utilizarlo en etapas posteriores. Como las entradas de esta están estables (respetando el tiempo de setup), no es necesario guardar estas en ningún registro a la entrada de la ALU (como podria espararse en arquitecturas de bus único o bus doble). Las señales de control que afecten al resultado de la ALU deben mantenerse estables hasta el final del ciclo, hasta que los resultados se almacenen en el registro correspondiente o no vuelvan a utilizarse (debido a los retrasos combinacionales, etc. de la ALU). Cada uno de los registros fuente vendrá codificado en 5 bits (25=32). Es en esta fase cuando se extraen los contenidos de los registros. Según sea la instrucción, se realizarán las siguientes operaciones: ü Instrucciones de referencia a memoria La ALU suma los operandos para formar la dirección de memoria. La primera entrada de la ALU será la primera salida del archivo de registros, por otro lado la salida de la extensión de signo se utiliza como la segunda entrada de la ALU (la ALU se fuerza a sumar estos operandos). ü Instrucciones Arimético-Lógicas Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 26 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos La ALU realiza la operación especificada poe el código de operación con los dos registros leídos en la fase anterior. Esto se corresponderá con situar las salidas del archivo de registros a la entrada de la ALU. ü Instrucciones de salto: ‘Salto condicional’ La ALU se utiliza para realizar la comparación entre los dos registros leídos en el ciclo anterior. La señal ‘Zero’ de salida de la ALU se utilizará para determinar si hay o no salto. La ALU realizará el test de igualdad restando ambos registros. Es necesario disparar una señal de escritura para actualizar el registro Programm Counter si se activa la señal de Zero. 3.3.4.- Acceso a memoria o terminación de la instrucción de tipo R. Durante este paso, los accesos a memoria de las operaciones de carga y almacenamiento y operaciones de carácter aritmético-lógicas pasan a almacenar el resultado generado. A la salida de la memoria la denominaremos ‘Memory-Data’, y debido a que su salida será estable, durante el siguiente ciclo de reloj será cuando se escriba el resultado en un registro (Una vez ejecutada la operación salvamos el resultado en el fichero de registros). Según la operación: ü Instrucciones de referencia a memoria Si la operación es de carga, devuelve el dato de memoria. Si la instrucción es un almacenamiento, entonces el dato se escribe en memoria. En cualquier caso la dirección utilizada será la calculada en el ciclo anterior. ü Instrucciones aritmético-lógicas Se debe colocar el resultado obtenido en la operación de la ALU en el registro de resultado ‘Result’. Como las escrituras se realizan cuando llega el flanco descendente, la escritura del registro ‘rd’ no debe afectar al dato que actualmente se está leyendo, aunque el registro de destino sea el registro fuente de la instrucción. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 27 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 3.3.5.- Fase de postescritura Escribe el dato cargado en memoria en el archivo de registros. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 28 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 4.- Algunos diagramas explicativos 4.1.- Esquema general PCWrCond PCWr Zero PCSrc IorD MemWr IRWr RegDst RegWr BrWr ALUselA Target 1 M U X 0 PC 0 32 rs 5 rt 5 Ra 32 0 RAdr M U X 32 32 Zero 32 M U X 1 Bus A Rb 1 MEMORIA IR rt 32 32 Din 0 A L U 4 0 M U X rd WrAdr 32 FICHERO DE REGISTROS RW 32 32 1 Bus B 1 MUX Dout busW 32 2 3 1 MUX 0 ALU control <<2 Imm 32 16 Extend ExtOp Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés MemtoReg ALUSelB ALUOp 29 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 4.2.- Carga de la instrucción 4.2.1.- Primera parte PCWrCond PCWr=? PCSrc Zero IorD MemWr=? IRWr=? RegDst RegWr BrWr ALUselA Target 1 M U X 0 PC 0 32 rs 5 rt 5 Ra 32 0 RAdr M U X 32 32 Zero 32 M U X 1 Bus A Rb 1 MEMORIA IR rt 32 32 32 Din 0 A L U 4 0 M U X rd WrAdr FICHERO DE REGISTROS RW 32 32 1 Bus B 1 MUX Dout busW 32 2 3 1 MUX 0 ALU control=? <<2 Imm 32 16 Extend ExtOp Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés "Se accede a la dirección de memoria a la que apunta el PC " Se actualiza el valor del PC MemtoReg ALUSelB ALUOp 30 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 4.2.2.- Segunda parte PCWrCond PCWr=1 Zero PCSrc IorD MemWr=0 IRWr=1 RegDst RegWr BrWr ALUselA Target 1 M U X 0 PC 0 32 rs 5 rt 5 Ra 32 0 RAdr M U X 32 32 Zero 32 M U X 1 Bus A Rb 1 MEMORIA IR rt 32 32 32 Din 0 A L U 4 0 M U X rd WrAdr FICHERO DE REGISTROS RW 32 32 1 Bus B 1 MUX Dout busW 32 2 3 1 MUX 0 ALU control=ADD <<2 Imm 32 16 Extend ExtOp Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés " Se carga la instrucción en el IR " Se actualiza el valor del PC MemtoReg ALUSelB ALUOp 31 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 4.3.- Decodificación de instrucción y carga de los registros: 4.3.1 Primera parte PCWrCond=0 PCWr=0 Zero PCSrc=x IorD=x MemWr=0 IRWr=0 RegDst=x RegWr=0 BrWr ALUselA=x Target 1 M U X 0 PC 0 Ra 32 0 RAdr M U X 32 32 1 Bus A 5 rt Zero 32 M U X 5 rs 32 Rb 1 MEMORIA IR rt 32 32 32 Din 0 A L U 4 0 M U X rd WrAdr FICHERO DE REGISTROS RW 32 32 1 Bus B 1 MUX Dout busW 32 2 3 1 MUX 0 ALU control <<2 Op 6 Func 6 32 16 Extend Imm ExtOp Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés MemtoReg ALUSelB=xx En el bus A se pone el contenido del registro rs En el bus B se pone el contenido del registro rt ALUOp=xx 32 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 4.3.2 Segunda parte PCWrCond=0 PCWr=0 Zero PCSrc=x IorD=x MemWr=0 IRWr=0 RegDst=x RegWr=0 BrWr=1 ALUselA=0 Target 1 M U X 0 PC 0 32 rs 5 rt 5 Ra 32 0 RAdr M U X 32 32 Zero 32 M U X 1 Bus A Rb 1 MEMORIA IR rt 32 32 32 Din 0 A L U 4 0 M U X rd WrAdr FICHERO DE REGISTROS RW 32 32 1 Bus B 1 MUX Dout busW 32 2 3 1 MUX 0 ALU control <<2 En caso de que sea un salto se calcula el desplazamiento relativo, se suma al PC y se guarda en el registro Target Op Al control para generar Beq, Rtype, Ori, Memory Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 6 Func 6 16 Imm ExtOp=1 32 Extend MemtoReg ALUSelB=10 ALUOp=suma 33 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 4.4.- Completado del salto PCWrCond=1 PCWr=0 Zero PCSrc=1 IorD=x MemWr=0 IRWr=0 RegDst=x RegWr=0 BrWr=0 ALUselA=1 Target 1 M U X 0 PC 0 32 rs 5 rt 5 Ra 32 0 RAdr M U X 32 32 Zero 32 M U X 1 Bus A Rb 1 MEMORIA IR 32 WrAdr 32 32 Din rt FICHERO DE REGISTROS 0 0 M U X rd A L U 4 RW 32 32 1 Bus B 1 MUX Dout busW 32 2 3 1 MUX 0 ALU control <<2 32 16 Extend Imm ExtOp Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés Se carga la dirección de salto en el PC según el resultado de la comparación MemtoReg ALUSelB=01 ALUOp=Sub 34 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 4.5.- Ejecución de instrucción aritmético-lógica 4.5.1.- Primera parte PCWrCond=0 PCWr=0 Zero PCSrc IorD MemWr=0 IRWr=0 RegDst=1 RegWr=0 BrWr=0 ALUselA=1 Target 1 M U X 0 PC 0 32 rs 5 rt 5 Ra 32 0 RAdr M U X 32 32 Zero 32 M U X 1 Bus A Rb 1 MEMORIA IR rt 32 32 Din 0 A L U 4 0 M U X rd WrAdr 32 FICHERO DE REGISTROS RW 32 32 1 Bus B 1 MUX Dout busW 32 2 3 1 MUX 0 ALU control <<2 Imm 32 16 Extend ExtOp Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés MemtoReg ALUSelB=01 ALUOp=Rtype 35 Sistemas de Multiprocesamiento Procesadores RISC Ruta de datos 4.5.2.- Segunda parte PCWrCond=0 PCWr=0 Zero PCSrc IorD MemWr=0 IRWr=0 RegDst=1 RegWr=0 BrWr=0 ALUselA=1 Target 1 M U X 0 PC 0 32 rs 5 rt 5 Ra 32 0 RAdr M U X 32 32 Zero 32 M U X 1 Bus A Rb 1 MEMORIA IR rt 32 32 32 Din 0 A L U 4 0 M U X rd WrAdr FICHERO DE REGISTROS RW 32 32 1 Bus B 1 MUX Dout busW 32 2 3 1 MUX 0 ALU control <<2 Imm 32 16 Extend ExtOp Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés MemtoReg ALUSelB=01 ALUOp=Rtype 36 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control IMPLEMENTACIÓN DEL CONTROL 1.- Introducción Hay diversas técnicas para implementar la unidad de control. La utilidad de estas técnicas depende de la complejidad del control, características tales como número medio de estados siguientes para un estado dado, y la tecnología de implementación. La forma más sencilla de implementar la función de control es con un bloque de lógica que tome como entradas el estado actual y el campo de código de operación del registro de una instrucción y produzca como salidas las señales de control del camino de datos y el valor del estado siguiente. La representación inicial puede ser un diagrama de estados finito o un microprograma. En el último caso, cada microinstrucción representa un estado. En una implementación que utilice un controlador de estados finitos, la función del estado siguiente se calculará con lógica. Un método alternativo de implementación calcula la función del estado siguiente utilizando un contador que incrementa el estado actual para determinar el estado siguiente. Cuando el estado siguiente no es el siguiente secuencialmente, se utiliza otra lógica para determinar el estado 2.- Microprogramación: Simplificar El Diseño Del Control Para el control de un sencillo subconjunto MIPS, una representación gráfica de la máquina de estados finitos es adecuada, ya que podemos dibujar el diagrama en una página y traducirlo a ecuaciones sin generar muchos errores. No así podemos considerar una implementación del repertorio completo de instrucciones MIPS, que contiene unas cien instrucciones, evidentemente la función de control será mucho más compleja. En estos casos, especificar la unidad de control con una representación gráfica será molesto y determinar las ecuaciones con funciones complejas de control, sin cometer ningún error, es algo prácticamente imposible. Podemos utilizar algunas ideas de programación para crear un método de especificación del control que haga más fácil comprenderlo y diseñarlo. Suponer que Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 37 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control consideramos el conjunto de señales de control que deben ser asertadas en un estado como una instrucción que va a ser ejecutada por el camino de datos. Para evitar confundir las instrucciones MIPS con las instrucciones de control de bajo nivel, a estas últimas las denominamos microinstrucciones. Cada microinstrucción define el conjunto de señales de control del camino de datos que deben ser asertadas en un estado dado. Ejecutar una microinstrucción tiene el efecto de asertar las señales de control especificadas por la microinstrucción. Además de definir qué señales de control deben ser asertadas, debemos especificar también el secuenciamiento, es decir, indicar la microinstrucción que debe ejecutarse a continuación. En la máquina de estados finitos el estado siguiente se determina de una de dos formas diferentes. A veces un estado sencillo sigue al estado actual incondicionalmente, en otros casos, la elección del estado siguiente depende de la entrada. Cuando escribimos los programas, también tenemos una situación análoga. A veces, un grupo de instrucciones debe ejecutarse de forma secuencial, y en ocasiones necesitamos saltar. En programación lo implícito es la ejecución secuencial, mientras que saltar debe indicarse explícitamente. Lógica de control Combinacional Salidas de control del camino de datos Salidas Entradas Estado siguiente Entradas del campo de Registro código de operación del estado de registro de instrucción Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 38 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control Para describir el control como un programa, también asumiremos que las microinstrucciones escritas secuencialmente se ejecutarán en secuencia, mientras que saltar debe indicarse explícitamente. El mecanismo de secuenciamiento implícito puede implementarse utilizando una estructura como la de la figura, sin embargo, con frecuencia es más eficiente implementar el estado secuencial implícito utilizando un contador. Registro de estado Sumado MUX Dispatch ROM1 OP Name 000000 Rtype 000010 jmp 000100 beq 001011 ori 100011 lw 101011 sw State 0110 1001 1000 1010 0010 0010 Dispatch ROM2 OP Name 100011 lw 101011 sw State 0011 0101 0 ROM1 ROM2 Código de Diseñar el control como un programa que implementa las instrucciones máquina en función de microinstrucciones más sencillas se denomina microprogramación. La idea clave es representar simbólicamente los valores asertados en las líneas de control, para que el programa sea un representación de microinstrucciones, de la misma forma que el lenguaje ensamblador es una representación de las instrucciones máquinas. Al escoger una sintaxis para un lenguaje ensamblador, habitualmente representamos las instrucciones máquina como una serie de campos (código de operación, registros y campo de desplazamiento o inmediato), de igual forma, representamos una microinstrucción sintácticamente como una secuencia de campos cuyas funciones están relacionadas. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 39 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control 3.- Definición Del Formato De Microinstrucción El microprograma es una representación simbólica del control que será traducido por un programa a la lógica de control. De esta forma, podemos escoger el número de campos que tenga una microinstrucción y las señales de control que afectarán a cada campo. El formato de la microinstrucción debe escogerse para que simplifique la representación, haciendo más fácil la redacción y comprensión del microprograma. Por ejemplo, es útil tener un campo que controle la ALU y un conjunto de tres campos que determinen las dos fuentes para la operación de la ALU así como el destino del resultado de la ALU. Además para la legibilidad también nos gustaría que el formato de microprograma hiciese difícil o imposible escribir microinstrucciones inconsistentes. Una microinstrucción es inconsistente si requiere que una señal de control dad sea inicializada por dos valores diferentes. Para evitar un formato que permita microinstrucciones inconsistentes podemos hacer que cada campo de la microinstrucción sea responsable de especificar un conjunto de señales de control sin solapamiento en el tiempo. Las señales que nunca son asertadas simultáneamente pueden compartir el mismo campo. A continuación se muestra cómo puede descomponerse una microinstrucción en ocho campos y define la función general de cada campo. Los siete primeros campos de la microinstrucción controlan el camino de datos, mientras que el campo de secuenciamiento especifica cómo seleccionar la siguiente microinstrucción. Nombre campo Control ALU Función de campo Especifica la operación que va a realizar la ALU durante este reloj SRC1 Especifica la fuente para el primer operando de la ALU SRC2 Especifica la fuente para el segundo operando de la ALU Destino ALU Especifica un registro para escribir el resultado de la ALU Memoria Especifica lectura o escritura y la fuente de la dirección Registro memoria Especifica el registro destino (para una lectura en memoria) o la fuente de los valores (para una escritura en memoria). Control PCWrite Especifica la escritura del PC. Secuenciamiento Especifica cómo escoger la siguiente instrucción que se va a ejecutar Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 40 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control Las microinstrucciones se colocan habitualmente en una ROM o una PLA, así podemos asignar direcciones a las microinstrucciones. Las direcciones habitualmente se dan secuencialmente. Existen tres métodos diferentes para seleccionar la siguiente microinstrucción que se va a ejecutar: 1.- Incrementar la dirección de la microinstrucción actual para obtener la dirección de la microinstrucción siguiente. Esto se indica en el microprograma colocando seq en el campo secuenciamiento. Como la ejecución secuencial de las instrucciones se encuentra con frecuencia, muchos sistemas de microprogramación hacen esto implícitamente y sencillamente dejan en blanco la entrada. 2.- Saltar a la microinstrucción donde comienza la ejecución de la siguiente instrucción en MIPS. Rotularemos esta microinstrucción inicial (correspondiente al estado 0) como Fetch (Búsqueda) y colocaremos el indicador Fetch en el campo de secuenciamiento para indicar esta acción. 3.- Seleccionar la siguiente microinstrucción según la entada de la unidad de control. Seleccionar la siguiente microinstrucción basándose en alguna entrada se denomina distribución (dispatch). Las operaciones de distribución habitualmente se implementan creando una tabla que contiene las direcciones de las microinstrucciones destino. Esta tabla está indexada por la entrada de la unidad de control y puede ser implementada en una ROM o en una PLA. Con frecuencia hay múltiples tablas de distribución; para esta implementación necesitamos dos tablas de distribución, una para distribuir a partir del estado 1 y otra para distribuir a partir del estado 2. indicamos que la microinstrucción siguiente debería escogerse por una operación de distribución colocando dispatch i, donde i es el número de la tabla de distribución en el campo secuenciamiento. En la siguiente figura se da una descripción de los valores permitidos para cada campo de la microinstrucción y el efecto de los valores de los diferentes campos. Nombre de campo Valores de campo Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés Función del campo con valores específicos 41 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control Control ALU SCR1 SCR2 Destino ALU Memoria Registro memoria Control PCWrite Secuenciamiento Add Hace que sume la ALU Func code Utiliza el código de función de la instrucción para determinar el control de la ALU Subt Hace que reste la ALU PC Utiliza el PC como primera entrada a la ALU Rs El registro rs es la primera entrada a la ALU 4 Utiliza 4 para la segunda entada a la ALU Extend Utiliza la salida de la unidad de extensión de signo como segunda entrada a la ALU Extshft Utiliza la salida del desplazamiento en 2 unidades como segunda entrada a la ALU Rt El registro rt es la segunda entrada a la ALU Target La salida de la ALU se escribe en el registro destino Rd La salida de la ALU se escribe en el registro rd Read PC Lee en memoria utilizando el PC como dirección Read ALU Lee en memoria utilizando la salida de la ALU como dirección Write ALU Escribe en memoria utilizando la salida de la ALU como dirección IR El dato leído en memoria se escribe en el registro de instrucción. Write rt El dato leído en memoria se escribe en el registro rc Read rt El dato leído en memoria se escribe en el registro rt ALU Escribe la salida de la ALU en el PC Target-cond Si la salida Zero de la ALU está activa, escribe el PC con el contenido del registro destino Jump address Escribe el PC con la dirección de bifurcación de la instrucción Seq Elige secuencialmente la siguiente microinstrucción Fetch Va a la primera microinstrucción para comenzar una nueva instrucción. Dispatch i Distribuye utilizando la ROM especificada por i 4.- Creación Del Microprograma Ahora crearemos es microprograma para la unidad de control. Rotularemos las instrucciones del microprograma con rótulos simbólicos, que se pueden utilizar para especificar el contenido de las tablas de distribución. Al escribir el microprograma, hay dos situaciones en las cuales puede ser deseable dejar en blanco un campo de la microinstrucción. Cuando un campo que controla una unidad funcional o que hace que se escriba un estado está en blanco. Ninguna señal de control debe ser asertada. Cuando Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 42 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control un campo solamente especifica el control de un multiplexor que de termina la entrada a una unidad funcional, dejarlo en blanco significa que no nos importa la entrada de la unidad funcional (la salida del multiplexor). La forma más fácil de comprender el microprograma es descomponerlo en partes que traten cada componente de la ejecución de la instrucción. El primer componente de cada ejecución de instrucción es buscar las instrucciones, a continuación decodificarlas y calcular por lo tanto el PC secuencial como el PC de destino de salto. Estas dos acciones corresponden directamente a los dos primeros pasos de ejecución de cualquier instrucción. Las dos microinstrucciones necesarias para estos dos primeros pasos se muestran a continuación: Rótulo Fetch Control ALU Add PC 4 Add PC Extshft SRC1 SRC2 Destino ALU memoria Read PC Registro memoria IR Control PCWrite ALU Target Secuencia Seq Dispatch1 Para comprender qué hace cada microinstrucción, es más fácil observar el efecto de un grupo de campos. En la primera microinstrucción, los campos asertados y sus efectos son: Campos Control ALU,SCR1,SCR2 Efecto Calcula PC+4 Memoria y registro memoria Busca instrucción en IR Control PCWrite Hace que la salida de la ALU se escriba en el PC Secuenciamiento Va a la siguiente microinstrucción Para la segunda microinstrucción, los registros se leerán utilizando los campos del Registro de instrucción. Las demás operaciones controladas por la microinstrucción son: Campos Control ALU,SCR1,SCR2 Efecto Almacena PC+extensión de signo en Destino Secuenciamiento Utiliza la tabla de distribución 1 para escoger la dirección de la siguiente microinstrucción. Podemos considerar la operación de distribución como una sentencia case que utiliza el código de operación y la tabla de distribución 1 para seleccionar una de cuatro secuencias de microinstrucciones (referencia a memoria, instrucciones tipo R, saltos y bifurcaciones). El microprograma para las instrucciones de referencia a memoria tiene Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 43 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control cuatro microinstrucciones, como mostramos más abajo. La primera instrucción hace el cálculo de la dirección de memoria. Es necesaria una secuencia de dos instrucciones para completar una carga (lectura de memoria seguida por escritura en registro), mientras que el almacenamiento requiere solamente una microinstrucción después del cálculo de la dirección de memoria: LWSW1 Control ALU Add rs Extend LW2 Add rs Extend ReadALU SW2 Add Add rs rs Extend Extend ReadALU ReadALU Rótulo SRC1 SRC2 Destino ALU Memoria Registro memoria Control PCWrite Secuencia Dispatch2 Seq Write rt Read rt Fetch Fetch Examinamos los campos de la primera microinstrucción en esta secuencia: Campos Control ALU,SCR1,SCR2 Efecto Calcula la dirección de memoria: registro(rs)+Signo extendido Secuenciamiento Utiliza la tabla de distribución 2 para bifurcar o a LW2 o a SW2 La primera microinstrucción de la secuencia especifica que lw está rotulada en LW2. esta microinstrucción tiene el siguiente efecto: Campos Control ALU,SCR1,SCR2 Efecto La salida de la Alu es todavía una dirección de memoria Memoria Lee en memoria utilizando la salida de la ALU como dirección Secuenciamiento Va a la siguiente microinstrucción La siguiente microinstrucción completa la ejecución con una microinstrucción que tiene los efectos siguientes: Campos Control ALU,SCR1,SCR2 Efecto La salida de la Alu es todavía una dirección de memoria Memoria memoria Lee en memoria utilizando la salida de la ALU como dirección y escribe el resultado en el registro designado por rt y registro Secuenciamiento Va a la microinstrucción rotulada por Fetch Observar que como los campos de las dos microinstrucciones que completan una instrucción de cargar una palabra no son contradictorios, podemos combinar estas dos microinstrucciones en una sola microinstrucción de la forma Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 44 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control Rótulo LW2 Control ALU Add SRC1 rs SRC2 Destino ALU Extend Memoria ReadALU Registro memoria Write rt Control PCWrite Secuencia Fetch Este proceso es realizado con frecuencia por un optimizador de microcódigo para reducir el número de microinstrucciones. Sin embargo, si realizamos este cambio, probablemente se incrementaría la duración del ciclo de reloj, ya que tanto el acceso a memoria como la escritura de registros se deberían realizar en una sola microinstrucción, y cada microinstrucción corresponde a un solo ciclo de reloj. Por tanto, cuando intentamos optimizar el microcódigo, a mano o con un programa, debemos saber qué conjuntos de acciones de distribución pueden realizarse en el ciclo de reloj que estamos diseñando. La microinstrucción de almacenamiento, rotulada SW2, opera de forma análoga a la microinstrucción de carga rotulada por LW2: Campos Control ALU,SCR1,SCR2 Efecto La salida de la Alu es todavía una dirección de memoria Memoria memoria Escribe en memoria utilizando la salida de la ALU como dirección y el registro designado por rt como valor a escribir y registro Secuenciamiento Va a la microinstrucción rotulada por Fetch La secuencia del microprograma para las instrucciones tipo R está formadas por dos microinstrucciones: la primera realiza la operación de la ALU, mientras que la segunda escribe el resultado en el archivo de registros: Rótulo Rformat1 Control ALU Funccode SRC1 SRC2 rs rt Funccode rs rt Destino ALU Memoria Registro memoria Control PCWrite Secuencia Seq rd Fetch Igual que en el ejemplo de instrucción de carga anterior, podríamos combinar estas dos microinstrucciones en una sola microinstrucción. Sin embargo, esto significaría que la ALU y la postescritura en el registro se realizarían en el mismo ciclo de reloj, Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 45 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control desembocando posiblemente en un ciclo de reloj más largo y en una máquina más lenta. La primera microinstrucción inicia la operación de la ALU: Campos Control ALU,SCR1,SCR2 Efecto La ALU opera sobre el contenido de los registros rs y rt, utilizando el campo func para especificar la operación de la ALU Secuenciamiento Va a la siguiente microinstrucción. La segunda microinstrucción hace que la salida de la ALU se escriba en el archivo de registros: Campos Control ALU,SCR1,SCR2 Efecto La ALU continúa la misma operación. El campo destino ALU especifica que rd se utiliza para escoger el registro destino Secuenciamiento Va a la microinstrucción rotulad Fetch La secuencia de microprograma para saltos requiere una microinstrucción Rótulo BEQ1 Control ALU Subt SRC1 SRC2 rs rt Destino ALU Memoria Registro memoria Control PCWrite Targetcond Secuencia Fetch Los campos asertados de esta microinstrucción son: Campos Control ALU,SCR1,SCR2 Efecto La resta los operandos de los registros para generar la salida zero Control PCWrite Hace que se escriba en el PC utilizando el valor destino, si la salida zero de la ALU es verdadera Secuenciamiento Va a la microinstrucción rotulad Fetch La secuencia de microcódigo de bifurcación también está formada por una microinstrucción: Rótulo Control ALU SRC1 JUMP1 Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés SRC2 Destino ALU Memoria Registro memoria Control PCWrite Jump address Secuencia Fetch 46 Sistemas de Multiprocesamiento Procesadores RISC Unidad de Control Solamente son asertados dos campos de esta microinstrucción Campos Control PCWrite Efecto Hace que se escriba en el PC utilizando el campo de bifurcación Secuenciamiento Va a la microinstrucción rotulad Fetch El microprograma completo está formado por las diez microinstrucciones que aparecían anteriormente. Este microprograma es traducido a microinstrucciones y tablas de distribución, que después pueden ser implementadas en ROM o PLA. este proceso es directamente análogo al proceso de traducir un programa del lenguaje ensamblador a instrucciones máquina. Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 47 Sistemas de Multiprocesamiento Procesadores RISC Bibliografia Bibliografía: ü “ Organización y diseño de computadores: La interfaz hardware/software” David A. Patterson—John L. Henessy McGraw Hill-1995 ü http://www.employees.org/~vivek/html/risc.html ü http://webopedia.internet.com/TERM/R/RISC.html ü http://kandor.isi.edu/aliases/PowerPC_Programming_Info/intro_to_risc/irt5_ri sc2.html ü http://www.mips.com/ ü http://www.usarc.army.mil/99thrsc/DSCIM/rschtml/hardhtml/risc.htm ü http://www-flash.stanford.edu/~jlh/ ü http://www.cs.washington.edu/homes/lazowska/cra/risc.html ü http://www.cs.berkeley.edu/~pattrsn/ ü http://arstechnica.com/cpu/4q99/risc-cisc/rvc-1.html ü http://www.consulintel.es/Html/Tutoriales/Articulos/risc.html Vicente Fernández del Rio Luis Alberto Fernández García Elena Redondo Andrés 48