MIPS ( Microprocessor without Interlocked Pipelined Stages ) [ 1 ] es una familia de arquitecturas de conjuntos de instrucciones (ISA ) de computadoras con conjunto de instrucciones reducido (RISC) [ 2 ] : A-1 [ 3 ] : 19 desarrolladas por MIPS Computer Systems, ahora MIPS Technologies , con sede en los Estados Unidos .
Existen varias versiones de MIPS, incluyendo MIPS I, II, III, IV y V, así como cinco versiones de MIPS32/64 (para implementaciones de 32 y 64 bits, respectivamente). Las primeras arquitecturas MIPS eran de 32 bits; las versiones de 64 bits se desarrollaron posteriormente. A abril de 2017, la versión actual de MIPS es MIPS32/64 Release 6. [ 4 ] [ 5 ] MIPS32/64 se diferencia principalmente de MIPS I–V por definir el Coprocesador de Control del Sistema en modo kernel privilegiado, además de la arquitectura en modo usuario.
La arquitectura MIPS cuenta con varias extensiones opcionales: MIPS-3D , un conjunto simple de instrucciones SIMD de punto flotante dedicadas a gráficos 3D por computadora ; [ 6 ] MDMX (MaDMaX), un conjunto de instrucciones SIMD enteras más extenso que utiliza registros de punto flotante de 64 bits; MIPS16e, que agrega compresión al flujo de instrucciones para reducir la memoria que requieren los programas; [ 7 ] y MIPS MT, que agrega capacidad de multihilo . [ 8 ]
Los cursos de arquitectura de computadoras en universidades y escuelas técnicas a menudo estudian la arquitectura MIPS. [ 9 ] Esta arquitectura influyó enormemente en arquitecturas RISC posteriores, como Alpha . En marzo de 2021, MIPS anunció que el desarrollo de la arquitectura MIPS había finalizado, ya que la empresa está realizando la transición a RISC-V . [ 10 ]
Historia
La primera versión de la arquitectura MIPS fue diseñada por MIPS Computer Systems para su microprocesador R2000 , la primera implementación de MIPS. Tanto MIPS como el R2000 se presentaron juntos en 1985. [ 11 ] Cuando se presentó MIPS II, MIPS pasó a llamarse MIPS I para distinguirlo de la nueva versión. [ 3 ] : 32
El microprocesador R6000 de MIPS Computer Systems (1989) fue la primera implementación de MIPS II. [ 3 ] : 8 Diseñado para servidores, el R6000 fue fabricado y vendido por Bipolar Integrated Technology , pero fue un fracaso comercial. A mediados de la década de 1990, muchos procesadores MIPS de 32 bits nuevos para sistemas embebidos eran implementaciones de MIPS II porque la introducción de la arquitectura MIPS III de 64 bits en 1991 dejó a MIPS II como la arquitectura MIPS de 32 bits más reciente hasta que se introdujo MIPS32 en 1999. [ 3 ] : 19
El microprocesador R4000 de MIPS Computer Systems (1991) fue la primera implementación de MIPS III. Fue diseñado para su uso en computadoras personales, estaciones de trabajo y servidores. MIPS Computer Systems promovió activamente la arquitectura MIPS y el R4000, estableciendo el consorcio Advanced Computing Environment (ACE) para impulsar su estándar Advanced RISC Computing (ARC), cuyo objetivo era establecer a MIPS como la plataforma dominante de computación personal. ARC tuvo poco éxito en computadoras personales, pero el R4000 (y su derivado R4400) se utilizaron ampliamente en estaciones de trabajo y servidores, especialmente por su mayor usuario, Silicon Graphics . Otros usos del R4000 incluyeron sistemas embebidos de gama alta y supercomputadoras. MIPS III fue finalmente implementado por varios microprocesadores embebidos. El R4600 de Quantum Effect Design (1993) y sus derivados se utilizaron ampliamente en sistemas embebidos de gama alta y estaciones de trabajo y servidores de gama baja. El R4200 de MIPS Technologies (1994) fue diseñado para sistemas embebidos, computadoras portátiles y de sobremesa. Una variante, el R4300i, fabricado por NEC Electronics , se utilizó en la consola de videojuegos Nintendo 64. La Nintendo 64, junto con la PlayStation , se encontraban entre las consolas que más procesadores con arquitectura MIPS utilizaban a mediados de la década de 1990.
La primera implementación de MIPS IV fue el chipset de microprocesador MIPS Technologies R8000 (1994). El diseño del R8000 se originó en Silicon Graphics, Inc. y se utilizó exclusivamente en estaciones de trabajo y servidores de gama alta para aplicaciones científicas y técnicas donde el alto rendimiento en grandes cargas de trabajo de punto flotante era crucial. Implementaciones posteriores fueron el MIPS Technologies R10000 (1996) y los Quantum Effect Devices R5000 (1996) y RM7000 (1998). El R10000, fabricado y comercializado por NEC Electronics y Toshiba, y sus derivados fueron utilizados por NEC, Pyramid Technology, Silicon Graphics y Tandem Computers (entre otros) en estaciones de trabajo, servidores y supercomputadoras. Los R5000 y R7000 se emplearon en sistemas embebidos de gama alta, computadoras personales y estaciones de trabajo y servidores de gama baja. Una variante del R5000 de Toshiba, el R5900, se utilizó en el Emotion Engine de Sony Computer Entertainment , que impulsaba su consola de videojuegos PlayStation 2 .
Anunciado el 21 de octubre de 1996 en el Microprocessor Forum 1996 junto con la extensión MIPS Digital Media Extensions (MDMX), MIPS V fue diseñado para mejorar el rendimiento de las transformaciones de gráficos 3D. [ 12 ] A mediados de la década de 1990, un uso importante de los microprocesadores MIPS no integrados eran las estaciones de trabajo gráficas de Silicon Graphics. MIPS V se completó con la extensión MDMX de solo enteros para proporcionar un sistema completo para mejorar el rendimiento de las aplicaciones de gráficos 3D. [ 13 ] Las implementaciones de MIPS V nunca se introdujeron. El 12 de mayo de 1997, Silicon Graphics anunció los microprocesadores H1 ("Beast") y H2 ("Capitan"). La primera iba a ser la primera implementación de MIPS V, y su lanzamiento estaba previsto para la primera mitad de 1999. [ 14 ] Los proyectos H1 y H2 se combinaron posteriormente y finalmente se cancelaron en 1998. Si bien no ha habido ninguna implementación de MIPS V, MIPS64 Release 1 (1999) se basó en MIPS V y conserva todas sus características como una característica opcional del Coprocesador 1 (FPU) llamada Paired-Single.
Cuando MIPS Technologies se separó de Silicon Graphics en 1998, se reorientó hacia el mercado de sistemas embebidos. Hasta MIPS V, cada versión sucesiva era un superconjunto estricto de la versión anterior, pero se descubrió que esta propiedad era un problema, y la definición de la arquitectura se cambió para definir una arquitectura de 32 bits y una de 64 bits: MIPS32 y MIPS64. Ambas se introdujeron en 1999. [ 15 ] MIPS32 se basa en MIPS II con algunas características adicionales de MIPS III, MIPS IV y MIPS V; MIPS64 se basa en MIPS V. [ 15 ] NEC , Toshiba y SiByte (adquirida posteriormente por Broadcom ) obtuvieron licencias para MIPS64 tan pronto como se anunció. Philips , LSI Logic , IDT , Raza Microelectronics, Inc. , Cavium , Loongson Technology e Ingenic Semiconductor se unieron posteriormente a ellos. La versión 5 de MIPS32/MIPS64 se anunció el 6 de diciembre de 2012. [ 16 ] Según el director de marketing de producto de MIPS, se omitió la versión 4 porque el número cuatro se considera de mala suerte en muchas culturas asiáticas. [ 17 ]
En diciembre de 2018, Wave Computing, el nuevo propietario de la arquitectura MIPS, anunció que la arquitectura MIPS ISA sería de código abierto en un programa denominado iniciativa MIPS Open. [ 18 ] El programa tenía como objetivo abrir el acceso a las versiones más recientes de los diseños de 32 y 64 bits, poniéndolas a disposición sin ningún tipo de licencia ni regalías, además de otorgar a los participantes licencias para las patentes MIPS existentes. [ 19 ] [ 20 ] [ 21 ]
En marzo de 2019, MIPS Revisión 6 se puso a disposición bajo una licencia libre de regalías, [ 22 ] pero más tarde ese mismo año el programa se cerró de nuevo. [ 23 ]
En marzo de 2021, Wave Computing anunció que el desarrollo de la arquitectura MIPS había cesado. La compañía se unió a la fundación RISC-V y los futuros diseños de procesadores se basarán en la arquitectura RISC-V. [ 10 ] [ 24 ] A pesar de esto, algunos licenciatarios, como Loongson, continúan desarrollando por su cuenta nuevas extensiones de ISA compatibles con MIPS. [ 25 ]
En enero de 2024, Loongson ganó un caso sobre los derechos de uso de la arquitectura MIPS. [ 26 ]
Diseño
MIPS es una arquitectura modular que admite hasta cuatro coprocesadores (COP0/1/2/3). En la terminología de MIPS, COP0 es el coprocesador de control del sistema (una parte esencial del procesador cuya implementación está definida en MIPS I–V), COP1 es una unidad de punto flotante (FPU) opcional, y COP2 y COP3 son coprocesadores opcionales cuya implementación también está definida (MIPS III eliminó COP3 y reutilizó sus códigos de operación para otros fines). Por ejemplo, en la consola de videojuegos PlayStation , COP2 es el motor de transformación geométrica (GTE), que acelera el procesamiento de la geometría en gráficos 3D por computadora.
Versiones
MIPS I
MIPS es una arquitectura de carga/almacenamiento (también conocida como arquitectura de registro-registro ); a excepción de las instrucciones de carga/almacenamiento utilizadas para acceder a la memoria , todas las demás instrucciones operan sobre los registros.
MIPS I cuenta con treinta y dos registros de propósito general (GPR) de 32 bits. El registro $0 está cableado a cero y las escrituras en él se descartan. El registro $31 es el registro de enlace . Para las instrucciones de multiplicación y división de enteros, que se ejecutan de forma asíncrona respecto a otras instrucciones, se proporcionan un par de registros de 32 bits, HI y LO . Existe un pequeño conjunto de instrucciones para copiar datos entre los registros de propósito general y los registros HI/LO. El contador de programa tiene 32 bits. Los dos bits de menor orden siempre contienen cero, ya que las instrucciones de MIPS I tienen una longitud de 32 bits y están alineadas con sus límites de palabra naturales.
Las instrucciones se dividen en tres tipos: R (registro), I (inmediato) y J (salto). Cada instrucción comienza con un código de operación de 6 bits. Además del código de operación, las instrucciones de tipo R especifican tres registros, [ 27 ] un campo de cantidad de desplazamiento y un campo de función; las instrucciones de tipo I especifican dos registros y un valor inmediato de 16 bits; las instrucciones de tipo J siguen al código de operación con un destino de salto de 26 bits. [ 2 ] : A-174
Los siguientes son los tres formatos utilizados para el conjunto de instrucciones principal:
MIPS I cuenta con instrucciones para cargar y almacenar bytes de 8 bits, medias palabras de 16 bits y palabras de 32 bits. Solo admite un modo de direccionamiento : base + desplazamiento. Dado que MIPS I es una arquitectura de 32 bits, la carga de cantidades menores a 32 bits requiere que el dato se extienda con signo o con ceros hasta 32 bits. Las instrucciones de carga con el sufijo "unsigned" realizan la extensión con ceros; de lo contrario, se realiza la extensión con signo. Las instrucciones de carga obtienen la base del contenido de un GPR (rs) y escriben el resultado en otro GPR (rt). Las instrucciones de almacenamiento obtienen la base del contenido de un GPR (rs) y los datos de almacenamiento de otro GPR (rt). Todas las instrucciones de carga y almacenamiento calculan la dirección de memoria sumando la base con el inmediato de 16 bits con extensión de signo. MIPS I requiere que todos los accesos a memoria estén alineados con sus límites de palabra naturales; de lo contrario, se genera una excepción. Para admitir accesos a memoria no alineados eficientes, existen instrucciones de carga/almacenamiento de palabras con los sufijos "left" o "right". Todas las instrucciones de carga van seguidas de una ranura de retardo de carga . La instrucción en la ranura de retardo de carga no puede utilizar los datos cargados por la instrucción de carga. La ranura de retardo de carga puede llenarse con una instrucción que no dependa de la carga; se sustituye por una instrucción NOP si no se encuentra dicha instrucción.
MIPS I tiene instrucciones para realizar sumas y restas. Estas instrucciones obtienen sus operandos de dos registros de propósito general (GPR, rs y rt) y escriben el resultado en un tercer GPR (rd). Alternativamente, la suma puede obtener uno de los operandos de un valor inmediato de 16 bits (que se extiende a 32 bits). Las instrucciones para suma y resta tienen dos variantes: por defecto, se señala una excepción si el resultado se desborda; las instrucciones con el sufijo "unsigned" no señalan una excepción. La comprobación de desbordamiento interpreta el resultado como un entero de complemento a dos de 32 bits. MIPS I tiene instrucciones para realizar operaciones lógicas AND, OR, XOR y NOR a nivel de bits. Estas instrucciones obtienen sus operandos de dos registros de propósito general (GPR, rs y rt) y escriben el resultado en un tercer GPR. Las instrucciones AND, OR y XOR pueden obtener alternativamente uno de los operandos de un valor inmediato de 16 bits (que se extiende a 32 bits). Las instrucciones "Establecer en relación " escriben uno o cero en el registro de destino si la relación especificada es verdadera o falsa. Estas instrucciones obtienen sus operandos de dos registros de propósito general (RPG) o de un RPG y un valor inmediato de 16 bits (con extensión de signo a 32 bits), y escriben el resultado en un tercer RPG. Por defecto, los operandos se interpretan como enteros con signo. Las variantes de estas instrucciones que llevan el sufijo "unsigned" interpretan los operandos como enteros sin signo (incluso aquellas que obtienen un operando del valor inmediato de 16 bits con extensión de signo).
La instrucción Load Upper Immediate copia el valor inmediato de 16 bits en los 16 bits de orden superior de un registro GPR. Se utiliza junto con la instrucción Or Immediate para cargar un valor inmediato de 32 bits en un registro.
MIPS I incluye instrucciones para realizar desplazamientos lógicos a la izquierda y a la derecha, así como desplazamientos aritméticos a la derecha. El operando se obtiene de un registro GPR (rt), y el resultado se escribe en otro registro GPR (rd). La distancia de desplazamiento se obtiene de un registro GPR (rs) o de un valor de desplazamiento de 5 bits (el campo "sa").
MIPS I incluye instrucciones para la multiplicación y división de enteros con y sin signo. Estas instrucciones obtienen sus operandos de dos registros de propósito general (GPR) y escriben sus resultados en un par de registros de 32 bits llamados HI y LO, ya que pueden ejecutarse de forma independiente (y concurrente) con las demás instrucciones de la CPU. Para la multiplicación, las mitades de orden superior e inferior del producto de 64 bits se escriben en HI y LO (respectivamente). Para la división, el cociente se escribe en LO y el resto en HI. Para acceder a los resultados, se proporciona un par de instrucciones (Mover desde HI y Mover desde LO) para copiar el contenido de HI o LO a un GPR. Estas instrucciones están interbloqueadas: las lecturas de HI y LO no avanzan más allá de una instrucción aritmética incompleta que escribirá en HI y LO. Otro par de instrucciones (Mover a HI o Mover a LO) copia el contenido de un GPR a HI y LO. Estas instrucciones se utilizan para restaurar HI y LO a su estado original después del manejo de excepciones. Las instrucciones que indiquen HI o LO deben estar separadas por dos instrucciones que no indiquen HI o LO.
Todas las instrucciones de flujo de control MIPS I van seguidas de una ranura de retardo de salto . A menos que la ranura de retardo de salto esté ocupada por una instrucción que realice trabajo útil, se sustituye por una NOP. Las instrucciones de salto MIPS I comparan el contenido de un GPR (rs) con cero u otro GPR (rt) como enteros con signo y saltan si la condición especificada es verdadera. El control se transfiere a la dirección calculada desplazando el desplazamiento de 16 bits dos bits a la izquierda, extendiendo el signo del resultado de 18 bits y sumando el resultado extendido con signo de 32 bits a la suma del contador de programa (dirección de instrucción) y 8 10 . Los saltos tienen dos versiones: absolutos e indirectos de registro. Los saltos absolutos ("Jump" y "Jump and Link") calculan la dirección a la que se transfiere el control desplazando el instr_index de 26 bits dos bits a la izquierda y concatenando el resultado de 28 bits con los cuatro bits de orden superior de la dirección de la instrucción en la ranura de retardo de salto. Los saltos indirectos de registro transfieren el control a la instrucción en la dirección de origen de un registro de propósito general (GPR, rs). La dirección de origen del GPR debe estar alineada a palabra; de lo contrario, se genera una excepción tras la ejecución de la instrucción en la ranura de retardo de salto. Las instrucciones de salto y de salto que enlazan (excepto "Jump and Link Register") guardan la dirección de retorno en el GPR 31. La instrucción "Jump and Link Register" permite guardar la dirección de retorno en cualquier GPR modificable.
MIPS I dispone de dos instrucciones para que el software señale una excepción: Llamada al sistema y Punto de interrupción. La Llamada al sistema la utiliza el software en modo usuario para realizar llamadas al kernel; y el Punto de interrupción se utiliza para transferir el control a un depurador mediante el gestor de excepciones del kernel. Ambas instrucciones tienen un campo de código de 20 bits que puede contener información específica del entorno operativo para el gestor de excepciones.
MIPS cuenta con 32 registros de punto flotante. Dos registros se agrupan para números de doble precisión. Los registros impares no se pueden usar para operaciones aritméticas ni bifurcaciones, sino solo como parte de un par de registros de doble precisión, lo que resulta en 16 registros utilizables para la mayoría de las instrucciones (las operaciones de movimiento/copia y carga/almacenamiento no se vieron afectadas).
La precisión simple se indica con el sufijo .s, mientras que la precisión doble se indica con el sufijo .d.
MIPS II
MIPS II eliminó la ranura de retardo de carga [ 3 ] : 41 y agregó varios conjuntos de instrucciones. Para el multiprocesamiento de memoria compartida, se agregaron las instrucciones Sincronizar memoria compartida , Cargar palabra enlazada y Almacenar palabra condicional . [ 28 ] Se agregó un conjunto de instrucciones Trampa en condición. Estas instrucciones causaban una excepción si la condición evaluada era verdadera. A todas las instrucciones de salto existentes se les dieron versiones de salto probable que ejecutaban la instrucción en la ranura de retardo de salto solo si se tomaba el salto. [ 3 ] : 40 Estas instrucciones mejoran el rendimiento en ciertos casos al permitir que las instrucciones útiles llenen la ranura de retardo de salto. [ 3 ] : 212 Se agregaron instrucciones de carga y almacenamiento de doble palabra para COP1–3. De acuerdo con otras instrucciones de acceso a memoria, estas cargas y almacenamientos requerían que la doble palabra estuviera alineada naturalmente.
El conjunto de instrucciones para el coprocesador de punto flotante también recibió varias instrucciones adicionales. Se agregó una instrucción de raíz cuadrada de punto flotante compatible con IEEE 754, que admite operandos de precisión simple y doble. Asimismo, se añadió un conjunto de instrucciones para convertir números de punto flotante de precisión simple y doble a palabras de 32 bits. Estas instrucciones complementaban las existentes, permitiendo especificar el modo de redondeo IEEE mediante la instrucción en lugar del Registro de Control y Estado de Punto Flotante.
MIPS III
MIPS III es una extensión retrocompatible de MIPS II que agregó soporte para direccionamiento de memoria de 64 bits y operaciones con enteros. El tipo de datos de 64 bits se llama palabra doble, y MIPS III extendió los registros de propósito general, los registros HI/LO y el contador de programa a 64 bits para admitirlo. Se agregaron nuevas instrucciones para cargar y almacenar palabras dobles, para realizar operaciones de suma, resta, multiplicación, división y desplazamiento de enteros sobre ellas, y para mover palabras dobles entre los registros GPR y HI/LO. Para el multiprocesamiento de memoria compartida, se agregaron las instrucciones Load Linked Double Word y Store Conditional Double Word . [ 28 ] Las instrucciones existentes definidas originalmente para operar con palabras de 32 bits se redefinieron, cuando fue necesario, para extender el signo de los resultados de 32 bits para permitir que las palabras y las palabras dobles sean tratadas de forma idéntica por la mayoría de las instrucciones. Entre esas instrucciones redefinidas estaba Load Word . En MIPS III extiende el signo de las palabras a 64 bits. Para complementar Load Word , se añadió una versión que no extiende el código.
La incapacidad del formato de instrucción R para especificar la distancia de desplazamiento completa para desplazamientos de 64 bits (su campo de cantidad de desplazamiento de 5 bits es demasiado estrecho para especificar la distancia de desplazamiento para palabras dobles) obligó a MIPS III a proporcionar tres versiones de 64 bits de cada instrucción de desplazamiento de MIPS I. La primera versión es una versión de 64 bits de las instrucciones de desplazamiento originales, utilizada para especificar distancias de desplazamiento constantes de 0 a 31 bits. La segunda versión es similar a la primera, pero agrega 32 10 al valor del campo de cantidad de desplazamiento para que se puedan especificar distancias de desplazamiento constantes de 32 a 63 bits. La tercera versión obtiene la distancia de desplazamiento de los seis bits de orden inferior de un GPR.
MIPS III añadió un nivel de privilegio de supervisor entre los niveles de privilegio de kernel y de usuario existentes. Esta característica solo afectó al procesador de control del sistema definido por la implementación (coprocesador 0).
MIPS III eliminó las instrucciones de soporte del coprocesador 3 (COP3) y reutilizó sus códigos de operación para las nuevas instrucciones de doble palabra. Los coprocesadores restantes obtuvieron instrucciones para mover dobles palabras entre los registros del coprocesador y los GPR. Los registros generales de punto flotante (FGR) se extendieron a 64 bits y se eliminó el requisito de que las instrucciones usaran solo registros pares. Esto es incompatible con versiones anteriores de la arquitectura; un bit en el registro de control/estado de punto flotante se usa para operar la unidad de punto flotante (FPU) de MIPS III en un modo compatible con MIPS I y II. Los registros de control de punto flotante no se extendieron para la compatibilidad. Las únicas instrucciones nuevas de punto flotante agregadas fueron aquellas para copiar dobles palabras entre la CPU y la FPU, convertir números de punto flotante de precisión simple y doble en enteros de doble palabra y viceversa.
MIPS IV
MIPS IV es la cuarta versión de la arquitectura. Es un superconjunto de MIPS III y es compatible con todas las versiones existentes de MIPS. [ 29 ] : A - 1 MIPS IV fue diseñado principalmente para mejorar el rendimiento de punto flotante (FP). Para mejorar el acceso a los operandos, se agregó un modo de direccionamiento indexado (base + índice, ambos provenientes de GPR) para cargas y almacenamientos de FP, así como instrucciones de precarga para realizar la precarga de memoria y especificar sugerencias de caché (estas admitían los modos de direccionamiento base + desplazamiento y base + índice).
MIPS IV añadió varias características para mejorar el paralelismo a nivel de instrucción. Para aliviar el cuello de botella causado por un solo bit de condición, se añadieron siete bits de código de condición al registro de estado y control de punto flotante, lo que elevó el total a ocho. Las instrucciones de comparación y salto de punto flotante se redefinieron para que pudieran especificar qué bit de condición se escribía o leía (respectivamente); y se eliminó la ranura de retardo entre un salto de punto flotante que leía el bit de condición escrito por una comparación de punto flotante anterior. Se añadió soporte para la predicación parcial en forma de instrucciones de movimiento condicional tanto para GPR como para FPR; y una implementación podía elegir entre tener excepciones precisas o imprecisas para las interrupciones IEEE 754.
MIPS IV añadió varias instrucciones aritméticas de punto flotante (FP) nuevas para FPN de precisión simple y doble: suma o resta de multiplicación fusionada, recíproco y raíz cuadrada recíproca. Las instrucciones de suma o resta de multiplicación fusionada de FP realizan uno o dos redondeos (depende de la implementación) para superar o cumplir los requisitos de precisión de IEEE 754 (respectivamente). Las instrucciones de raíz cuadrada recíproca de FP no cumplen con los requisitos de precisión de IEEE 754 y producen resultados que difieren de la precisión requerida en una o dos unidades de último lugar (depende de la implementación). Estas instrucciones se utilizan en aplicaciones donde la latencia de la instrucción es más importante que la precisión.
MIPS V
MIPS V añadió un nuevo tipo de datos, el Paired Single (PS), que consistía en dos números de punto flotante de precisión simple (32 bits) almacenados en los registros de punto flotante de 64 bits existentes. Se añadieron variantes de las instrucciones de punto flotante existentes para aritmética, comparación y movimiento condicional para operar con este tipo de datos de forma SIMD. Se añadieron nuevas instrucciones para cargar, reorganizar y convertir datos PS. [ 3 ] : 426–429 Fue el primer conjunto de instrucciones en explotar SIMD de punto flotante con recursos existentes. [ 13 ]
MIPS32/MIPS64
La primera versión de MIPS32, basada en MIPS II, añadió movimientos condicionales, instrucciones de precarga y otras características de las familias de procesadores de 64 bits R4000 y R5000. [ 15 ] La primera versión de MIPS64 añade un modo MIPS32 para ejecutar código de 32 bits. [ 15 ] Las instrucciones MUL y MADD ( multiplicar-sumar ), previamente disponibles en algunas implementaciones, se añadieron a las especificaciones de MIPS32 y MIPS64, al igual que las instrucciones de control de caché . [ 15 ] Para el propósito del control de caché, se prepararon ambas instrucciones SYNC. [ 30 ] [ 31 ]SYNCI
La versión 6 de MIPS32/MIPS64 de 2014 añadió lo siguiente: [ 32 ]
- una nueva familia de ramas sin ranura de demora:
- bifurcaciones incondicionales (BC) y bifurcación y enlace (BALC) con un desplazamiento de 26 bits,
- bifurcación condicional en cero/distinto de cero con un desplazamiento de 21 bits,
- Conjunto completo de bifurcaciones condicionales con y sin signo que comparan dos registros (por ejemplo, BGTUC) o un registro con cero (por ejemplo, BGTZC),
- Conjunto completo de bifurcaciones y enlaces que comparan un registro con cero (por ejemplo, BGTZALC).
- Instrucciones de salto de índice sin ranura de retardo diseñadas para admitir direcciones absolutas grandes.
- Instrucciones para cargar valores inmediatos de 16 bits en la posición de bit 16, 32 o 48, lo que permite generar fácilmente constantes grandes.
- Instrucciones de carga relativas al PC, así como la generación de direcciones con grandes desplazamientos (relativos al PC).
- Instrucciones de inversión de bits y alineación de bytes (anteriormente solo disponibles con la extensión DSP).
- Las instrucciones de multiplicación y división se han redefinido para que utilicen un único registro para su resultado.
- Las instrucciones que generan valores de verdad ahora generan todos ceros o todos unos en lugar de simplemente borrar/establecer el bit 0,
- Las instrucciones que utilizan un valor de verdad ahora interpretan todos los ceros como falsos en lugar de simplemente fijarse en el bit 0.
Se eliminaron las instrucciones de uso poco frecuente:
- algunos movimientos condicionales
- Instrucciones de ramificación probables (obsoletas en versiones anteriores).
- Instrucciones para la detección de desbordamiento de enteros con valor inmediato de 16 bits
- Instrucciones del acumulador de enteros (junto con los registros HI/LO, trasladados a la extensión específica de la aplicación DSP)
- unaligned load instructions (LWL and LWR), (requiring that most ordinary loads and stores support misaligned access, possibly via trapping and with the addition of a new instruction (BALIGN))
Se reorganizó la codificación de las instrucciones, liberando espacio para futuras expansiones.
microMIPS
Las arquitecturas microMIPS32/64 son superconjuntos de las arquitecturas MIPS32 y MIPS64 (respectivamente) diseñados para reemplazar la extensión específica de aplicación (ASE) MIPS16e . Una desventaja de MIPS16e es que requiere un cambio de modo antes de que se puedan procesar sus instrucciones de 16 bits. microMIPS añade versiones de las instrucciones de 32 bits más utilizadas, codificadas como instrucciones de 16 bits. Esto permite que los programas combinen instrucciones de 16 y 32 bits sin necesidad de cambiar de modo. microMIPS se introdujo junto con la versión 3 de MIPS32/64, y cada versión posterior de MIPS32/64 tiene una versión microMIPS32/64 correspondiente. Un procesador puede implementar microMIPS32/64 o tanto microMIPS32/64 como su subconjunto MIPS32/64 correspondiente. A partir de la versión 6 de MIPS32/64, finalizó la compatibilidad con MIPS16e, y microMIPS es la única forma de compresión de código en MIPS.
Extensiones específicas de la aplicación
Las arquitecturas base MIPS32 y MIPS64 pueden complementarse con varias extensiones arquitectónicas opcionales, denominadas colectivamente extensiones específicas de la aplicación (ASE). Estas ASE proporcionan características que mejoran la eficiencia y el rendimiento de ciertas cargas de trabajo, como el procesamiento de señales digitales .
Microcontrolador MIPS
Mejoras para aplicaciones de microcontroladores. La extensión específica para aplicaciones (ASE) del microcontrolador se ha desarrollado para ampliar la compatibilidad con el controlador de interrupciones , reducir la latencia de las interrupciones y mejorar la función de control de periféricos de E/S, que suele ser necesaria en los diseños de sistemas de microcontroladores.
- Generación de prioridad y vector por separado
- Admite hasta 256 interrupciones en modo EIC (Controlador de Interrupciones Externo) y ocho pines de interrupción de hardware.
- Proporciona una dirección de desplazamiento vectorial de 16 bits.
- Precarga del vector de excepción de interrupción
- Prólogo de interrupción automatizada: agrega hardware para guardar y actualizar el estado del sistema antes de la rutina de manejo de interrupciones.
- Epílogo de interrupción automatizada: restaura el estado del sistema previamente almacenado en la pila para el retorno desde la interrupción.
- Encadenamiento de interrupciones: admite el servicio de interrupciones pendientes sin necesidad de salir de la rutina de interrupción inicial, lo que ahorra los ciclos necesarios para almacenar y restaurar múltiples interrupciones activas.
- Admite la precarga especulativa de la dirección del vector de interrupción. Reduce el número de ciclos de servicio de interrupción al superponer los accesos a memoria con vaciados de la tubería y priorización de excepciones.
- Incluye instrucciones atómicas para establecer/borrar bits, lo que permite modificar sin interrupción los bits dentro de un registro de E/S que normalmente se utilizan para supervisar o controlar funciones de periféricos externos, garantizando así que la acción se realice de forma segura.
MIPS16
MIPS16 es una extensión específica de aplicación para MIPS I a V diseñada por LSI Logic y MIPS Technologies , anunciada el 21 de octubre de 1996, junto con su primera implementación, el procesador TinyRISC de LSI Logic. [ 33 ] Posteriormente, NEC Electronics , Philips Semiconductors y Toshiba (entre otros) licenciaron MIPS16 ; y se implementó como una extensión para las arquitecturas MIPS I, II y III. MIPS16 reduce el tamaño de la aplicación hasta en un 40% al usar instrucciones de 16 bits en lugar de instrucciones de 32 bits y también mejora la eficiencia energética, la tasa de aciertos de la caché de instrucciones y es equivalente en rendimiento a su arquitectura base. [ 34 ] Es compatible con herramientas de desarrollo de hardware y software de MIPS Technologies y otros proveedores. MIPS16e es una versión mejorada de MIPS16, compatible inicialmente con MIPS32 y MIPS64 Release 1. MIPS16e2 es una versión mejorada de MIPS16 compatible con MIPS32 y MIPS64 (hasta la versión 5). La versión 6 la reemplazó con microMIPS.
Procesamiento de Señales Digitales (DSP) MIPS
El DSP ASE es una extensión opcional para los conjuntos de instrucciones MIPS32/MIPS64 Release 2 y posteriores que se puede utilizar para acelerar una amplia gama de cálculos de "medios", en particular audio y vídeo. El módulo DSP comprende un conjunto de instrucciones y estado en la tubería de enteros y requiere una lógica adicional mínima para su implementación en los núcleos del procesador MIPS. La revisión 2 del ASE se introdujo en la segunda mitad de 2006. Esta revisión añade instrucciones adicionales al ASE original, pero por lo demás es compatible con versiones anteriores. [ 35 ] A diferencia de la mayor parte de la arquitectura MIPS, es un conjunto de operaciones bastante irregular, muchas de ellas elegidas por su relevancia particular para algún algoritmo clave. Sus principales características novedosas (en comparación con el MIPS32 original): [ 36 ]
- Aritmética de saturación (cuando un cálculo se desborda, devuelve el número representable más cercano a la respuesta que no se desbordó).
- Aritmética de punto fijo sobre fracciones de punto fijo con signo de 32 y 16 bits con un rango de -1 a +1 (conocidas comúnmente como "Q31" y "Q15").
- Las instrucciones existentes de multiplicación de enteros y multiplicación-acumulación, que almacenan los resultados en un acumulador de doble tamaño (denominado "hi/lo" y de 64 bits en las CPU MIPS32). El DSP ASE añade tres acumuladores más y algunas variantes diferentes de la multiplicación-acumulación.
- Las instrucciones SIMD operan sobre 4 bytes sin signo o 2 valores de 16 bits empaquetados en un registro de 32 bits (la variante de 64 bits del DSP ASE también admite vectores más grandes).
- Las operaciones SIMD son aritmética básica, desplazamientos y algunas operaciones de tipo multiplicación-acumulación.
Arquitectura MIPS SIMD (MSA)
Extensiones del conjunto de instrucciones diseñadas para acelerar la reproducción multimedia.
- Extensiones escalables predefinidas para chips con más puertas/transistores.
- 32 registros vectoriales de 16 elementos vectoriales de 8 bits, 8 de 16 bits, 4 de 32 bits y 2 de 64 bits, todos de 128 bits de ancho.
- Incluye operaciones para:
- Aritmética vectorial eficiente sobre datos enteros, de punto fijo y de punto flotante con opciones completas de redondeo y saturación.
- Creación de valores absolutos en vectores
- Multiplicación de precisión completa y multiplicación-suma fusionada
- Conversiones entre datos enteros, de punto flotante y de punto fijo.
- Comparación y ramificación a nivel vectorial sin indicadores de condición.
- Reordenamiento de vectores (1D) y matrices (2D)
- Cargas y almacenamientos tipados para operación independiente del orden de bytes .
- Cumple con la norma IEEE 754-2008.
- Señalización de excepciones de punto flotante con precisión de elemento
- Acelera las aplicaciones que requieren mucha computación aprovechando la compatibilidad con compiladores genéricos.
- Creado como una solución programable por software para aplicaciones o funciones de electrónica de consumo no cubiertas por hardware específico.
- Creado para minería de datos emergente, extracción de características , procesamiento multimedia, interfaces gráficas de usuario (GUI) y computación científica de alto rendimiento.
Virtualización MIPS
La revisión 6 de MIPS añadió virtualización nativa compatible con hardware.
Multiprocesamiento MIPS
Cada núcleo MIPS multihilo puede admitir hasta dos VPE (Elementos de Procesamiento Virtual) que comparten una única canalización, así como otros recursos de hardware. Sin embargo, dado que cada VPE incluye una copia completa del estado del procesador tal como lo ve el sistema de software, cada VPE aparece como un procesador independiente completo para un sistema operativo Linux SMP . Para aplicaciones de procesamiento de hilos más detalladas, cada VPE puede admitir hasta nueve TC distribuidos entre dos VPE. Los TC comparten una unidad de ejecución común, pero cada uno tiene su propio contador de programa y archivos de registro del núcleo, de modo que cada uno puede manejar un hilo del software. La arquitectura MIPS MT también permite la asignación de ciclos de procesador a hilos y establece las prioridades relativas de los hilos con un bloque de gestión de calidad de servicio ( QoS ) opcional. Esto habilita dos mecanismos de priorización que determinan el flujo de información a través del bus. El primer mecanismo permite al usuario priorizar un hilo sobre otro. El segundo mecanismo se utiliza para asignar una proporción específica de ciclos a hilos específicos a lo largo del tiempo. El uso combinado de ambos mecanismos permite una asignación eficaz del ancho de banda al conjunto de hilos y un mejor control de las latencias. En sistemas en tiempo real, el determinismo a nivel de sistema es fundamental, y el bloque QoS facilita la mejora de la predictibilidad del sistema. Los diseñadores de hardware de sistemas avanzados pueden reemplazar el bloque QoS estándar proporcionado por MIPS Technologies por uno específicamente optimizado para su aplicación.
SmartMIPS
SmartMIPS es una extensión específica para aplicaciones (ASE) diseñada por Gemplus International y MIPS Technologies para mejorar el rendimiento y reducir el consumo de memoria del software de tarjetas inteligentes . Solo es compatible con MIPS32, ya que las tarjetas inteligentes no requieren las capacidades de los procesadores MIPS64. Pocas tarjetas inteligentes utilizan SmartMIPS.
Aceleraciones de aplicaciones multimedia que eran comunes en la década de 1990 en los sistemas RISC y CISC.
MIPS-3D
MIPS-3D es una extensión de MIPS V que agregó 13 nuevas instrucciones para mejorar el rendimiento de las aplicaciones de gráficos 3D. [ 37 ] Las instrucciones mejoraron el rendimiento al reducir la cantidad de instrucciones necesarias para implementar cuatro operaciones comunes de gráficos 3D: transformación de vértices, recorte , transformación e iluminación.
Para la transformación de vértices:
- ADDR
Para recortar:
- TAXIS
- BC1CUALQUIERA2F
- BC1ANY2T
- BC1ANY4F
- BC1ANY4T
Para la división de perspectiva y la normalización:
- RECETA1
- RECETA2
- RSQRT1
- RSQRT2
Convenciones de llamadas
MIPS ha tenido varias convenciones de llamada, especialmente en la plataforma de 32 bits.
La ABI O32 es la más utilizada, debido a su condición de ABI original del Sistema V para MIPS. [ 38 ] [ 39 ] Es estrictamente basada en pila, con solo cuatro registros ( $a0 - $a3 ) disponibles para pasar argumentos. Se reserva espacio en la pila en caso de que la función llamada necesite guardar sus argumentos, pero la función que llama no almacena los registros allí. El valor de retorno se almacena en el registro $v0 ; un segundo valor de retorno puede almacenarse en $v1 . La ABI se definió en 1990 y se actualizó por última vez en 1994. Esta lentitud percibida, junto con un modelo de punto flotante anticuado con solo 16 registros, ha fomentado la proliferación de muchas otras convenciones de llamada. Solo está definida para MIPS de 32 bits, pero GCC ha creado una variación de 64 bits llamada O64. [ 40 ]
Para 64 bits, la ABI N64 de Silicon Graphics es la más utilizada. La mejora más importante es que ahora hay ocho registros disponibles para el paso de argumentos; también aumenta el número de registros de punto flotante a 32. También hay una versión ILP32 llamada N32, que usa punteros de 32 bits para código más pequeño, análogo a la ABI x32 . Ambas se ejecutan bajo el modo de 64 bits de la CPU. [ 40 ] Las ABI N32 y N64 pasan los primeros ocho argumentos a una función en los registros $a0 - $a7 ; los argumentos subsiguientes se pasan en la pila. El valor de retorno (o un puntero a él) se almacena en $v0 ; un segundo valor de retorno puede almacenarse en $v1 . En ambas ABI, N32 y N64, todos los registros se consideran de 64 bits de ancho.
Se han realizado algunos intentos para reemplazar O32 con una ABI de 32 bits que se asemeja más a N32 que a O32. En una conferencia de 1995 se presentó MIPS EABI, cuya versión de 32 bits era bastante similar. [ 41 ] EABI inspiró a MIPS Technologies a proponer una ABI "NUBI" más radical que reutiliza los registros de argumentos para el valor de retorno. [ 42 ] GCC admite MIPS EABI, pero LLVM no, y ninguno de los dos admite NUBI.
Para todos los O32 y N32/N64, la dirección de retorno se almacena en $ra ( $31 ). Esto se establece automáticamente mediante las instrucciones JAL (salto y enlace) o JALR (registro de salto y enlace). El prólogo de la función de una subrutina MIPS (no hoja) coloca la dirección de retorno (en $ra ) en la pila. [ 43 ] [ 44 ]
Tanto en O32 como en N32/N64, la pila crece hacia abajo, pero las ABI de N32/N64 requieren alineación de 64 bits para todas las entradas de la pila. El puntero de marco ( $30 ) es opcional y en la práctica rara vez se usa, excepto cuando la asignación de pila en una función se determina en tiempo de ejecución, por ejemplo, llamando a .alloca()
En los procesadores N32 y N64, la dirección de retorno se almacena normalmente 8 bytes antes del puntero de pila , aunque esto puede ser opcional.
Para las ABI N32 y N64, una función debe conservar los registros $s0 - $s7 , el puntero global ( $gp o $28 ), el puntero de pila ( $sp o $29 ) y el puntero de marco ( $fp o $30 ). La ABI O32 es la misma, excepto que la función que realiza la llamada debe guardar el registro $gp en lugar de la función llamada.
En el código multihilo, el puntero de almacenamiento local del hilo se guarda normalmente en el registro de hardware especial $29 y se accede a él mediante la instrucción mfhw (mover desde hardware). Se sabe que al menos un proveedor guarda esta información en el registro $k0 , que normalmente está reservado para el núcleo, pero esto no es lo habitual.
Los registros $k0 y $k1 ( $26 , $27 ) están reservados para uso del kernel y no deben ser utilizados por las aplicaciones, ya que estos registros pueden ser modificados en cualquier momento por el kernel debido a interrupciones, cambios de contexto u otros eventos.
Los registros que se conservan entre llamadas son aquellos que (por convención) no se modifican mediante llamadas al sistema o a procedimientos (funciones). Por ejemplo, los registros $s deben guardarse en la pila mediante los procedimientos que los necesiten, y $sp y $fp siempre se incrementan con constantes y se decrementan una vez que el procedimiento los utiliza (y la memoria a la que apuntan). En cambio, $ra se modifica automáticamente con cualquier llamada a función normal (las que usan jal ), y los registros $t deben guardarse antes de cualquier llamada a procedimiento (si el programa necesita los valores que contienen después de la llamada).
La convención de llamada en el espacio de usuario del código independiente de la posición en Linux requiere además que, cuando se llama a una función, el registro $t9 debe contener la dirección de esa función. [ 46 ] Esta convención se remonta al suplemento ABI del Sistema V para MIPS. [ 47 ]
Usos
Los procesadores MIPS se utilizan en sistemas embebidos como pasarelas y enrutadores residenciales . Originalmente, MIPS fue diseñado para computación de propósito general. Durante las décadas de 1980 y 1990, muchas empresas, como Digital Equipment Corporation , MIPS Computer Systems , NEC , Pyramid Technology , SiCortex , Siemens Nixdorf , Silicon Graphics y Tandem Computers , utilizaron procesadores MIPS para computadoras personales , estaciones de trabajo y servidores .
Históricamente, consolas de videojuegos como la Nintendo 64 , la Sony PlayStation , la PlayStation 2 y la PlayStation Portable utilizaban procesadores MIPS. Estos procesadores también fueron populares en supercomputadoras durante la década de 1990, pero todos estos sistemas han desaparecido de la lista TOP500 . Inicialmente, estos usos se complementaban con aplicaciones integradas, pero durante la década de 1990, MIPS se consolidó como un componente clave en el mercado de procesadores integrados, y para la década de 2000, la mayoría de los procesadores MIPS se destinaban a estas aplicaciones.
A mediados y finales de la década de 1990, se estimaba que uno de cada tres microprocesadores RISC producidos era un procesador MIPS. [ 48 ]
A finales de la década de 2010, los procesadores MIPS todavía se utilizaban comúnmente en mercados de sistemas embebidos, como el automotriz, los enrutadores inalámbricos, los módems LTE (principalmente de MediaTek ) y los microcontroladores (por ejemplo, el PIC32M de Microchip Technology ). Sin embargo, prácticamente han desaparecido del ámbito personal, de servidores y de aplicaciones.
Simuladores
Open Virtual Platforms (OVP) [ 49 ] incluye el simulador OVPsim , disponible gratuitamente para uso no comercial , una biblioteca de modelos de procesadores, periféricos y plataformas, y API que permiten a los usuarios desarrollar sus propios modelos. Los modelos de la biblioteca son de código abierto, están escritos en C e incluyen los núcleos MIPS de 32 bits 4K, 24K, 34K, 74K, 1004K, 1074K, M14K, microAptiv, interAptiv y proAptiv, así como la gama de núcleos MIPS de 5K de 64 bits. Estos modelos son creados y mantenidos por Imperas [ 50 ] y, en colaboración con MIPS Technologies, han sido probados y cuentan con la certificación MIPS-Verified. Las plataformas de ejemplo basadas en MIPS incluyen entornos bare metal y plataformas para arrancar imágenes binarias de Linux sin modificar. Estas plataformas-emuladores están disponibles como código fuente o binarios, son rápidas, gratuitas para uso no comercial y fáciles de usar. OVPsim es desarrollado y mantenido por Imperas , es muy rápido (cientos de millones de instrucciones por segundo) y está diseñado para manejar arquitecturas y sistemas multinúcleo homogéneos y heterogéneos.
SPIM es un simulador MIPS32 de libre acceso para uso educativo. Su versión más reciente se llama QtSpim y utiliza el marco de interfaz de usuario Qt . [ 51 ]
EduMIPS64 es un simulador gráfico multiplataforma de CPU MIPS64 con licencia GPL, escrito en Java/Swing. Comenzó como una adaptación de WinMIPS64, otro simulador MIPS64, y admite un amplio subconjunto del conjunto de instrucciones MIPS64 (ISA), permitiendo al usuario visualizar gráficamente lo que sucede en la canalización cuando se ejecuta un programa en lenguaje ensamblador. [ 52 ]
MARS [ 53 ] es otro emulador MIPS con interfaz gráfica de usuario diseñado para su uso en la educación, específicamente para su uso con el libro Computer Organization and Design de Hennessy . Ya no recibe mantenimiento.
Saturn [ 54 ] es un IDE MIPS con interfaz gráfica de usuario (GUI) y un ensamblador llamado Titan [ 55 ] . Comenzó como un proyecto de un estudiante de la Universidad de Toronto para reemplazar a MARS, que ya no recibe mantenimiento. [ 56 ] Actualmente, Saturn se utiliza en cursos de la Universidad de Toronto y su mantenimiento corre a cargo de estudiantes y profesores.
WebMIPS [ 57 ] es un simulador MIPS basado en navegador con representación visual de un procesador genérico segmentado. Este simulador es muy útil para el seguimiento de registros durante la ejecución paso a paso.
QtMips proporciona una visualización simple de la canalización de 5 etapas, así como una visualización del principio de caché para cursos básicos de arquitecturas de computadoras. [ 58 ] [ 59 ] [ 60 ] Está disponible tanto como aplicación web como programa descargable para Windows, Linux y macOS .
Existen emuladores gratuitos más avanzados, disponibles en los proyectos GXemul (anteriormente conocido como mips64emul) y QEMU . Estos emulan los distintos microprocesadores MIPS III y IV, además de sistemas informáticos completos que los utilizan.
Existen simuladores comerciales, especialmente diseñados para el uso integrado de procesadores MIPS, como por ejemplo Wind River Simics (MIPS 4Kc y 5Kc, PMC RM9000, QED RM7000, Broadcom/Netlogic ec4400, Cavium Octeon I), Imperas (todos los núcleos MIPS32 y MIPS64), VaST Systems (R3000, R4000) y CoWare (MIPS4KE, MIPS24K, MIPS25Kf y MIPS34K).
El simulador CREATOR [ 61 ] [ 62 ] [ 63 ] [ 64 ] [ 65 ] es portátil y permite al usuario aprender varios lenguajes ensamblador de diferentes procesadores. Creator incluye ejemplos con una implementación de instrucciones MIPS32 y RISC-V.
WepSIM [ 66 ] es un simulador basado en navegador donde se microprograma un subconjunto de instrucciones MIPS. Este simulador es muy útil para aprender cómo funciona una CPU a nivel de microprogramación , a nivel de ensamblador MIPS , con interrupciones , etc.
Véase también
Referencias
- ↑ Patterson, David (2014). Organización y diseño de computadoras (PDF) . Elsevier. págs. 4.16–4. ISBN 978-0-12-407726-3. Archivado (PDF) del original el 4 de septiembre de 2019. Recuperado el 28 de noviembre de 2018 .
- 1 2 Price, Charles (septiembre de 1995). Conjunto de instrucciones MIPS IV (Revisión 3.2), MIPS Technologies, Inc.
- 1 2 3 4 5 6 7 8 Sweetman, Dominic (1999). Véase MIPS Run . Morgan Kaufmann Publishers, Inc. ISBN 1-55860-410-3.
- ↑ "Arquitectura MIPS32" . MIPS . Archivado del original el 21 de marzo de 2020. Consultado el 20 de marzo de 2020 .
- ↑ "Arquitectura MIPS64" . MIPS . Archivado del original el 2 de febrero de 2020. Consultado el 20 de marzo de 2020 .
- ↑ "MIPS-3D ASE" . Imagination Technologies . Archivado del original el 3 de enero de 2014. Consultado el 4 de enero de 2014 .
- ↑ "MIPS16e" . MIPS . Archivado del original el 16 de enero de 2021. Consultado el 20 de marzo de 2020 .
- ↑ "MIPS Multithreading" . MIPS . Archivado del original el 26 de octubre de 2020. Consultado el 20 de marzo de 2020 .
- ↑ Universidad de California, Davis. "Página de referencias y herramientas de ECS 142 (Compiladores)" . Archivado del original el 21 de marzo de 2011. Recuperado el 28 de mayo de 2009 .
- 1 2 Turley, Jim (8 de marzo de 2021). "¿Espera, qué? MIPS se convierte en RISC-V" . Electronic Engineering Journal . Archivado del original el 21 de marzo de 2021. Recuperado el 28 de marzo de 2021 .
- ↑ "El procesador MIPS" . www.d.umn.edu . Archivado del original el 17 de mayo de 2023. Consultado el 17 de mayo de 2023 .
- ↑ «Silicon Graphics presenta la arquitectura MIPS mejorada para liderar la revolución digital interactiva» (Comunicado de prensa). Silicon Graphics, Inc. 21 de octubre de 1996. Archivado del original el 6 de junio de 1997.
- 1 2 Gwennap, Linley (18 de noviembre de 1996). "Digital, MIPS agrega extensiones multimedia" (PDF) . Microprocessor Report . 10 (15): 24–28 . Archivado (PDF) del original el 20 de julio de 2011.
- ↑ "Silicon Graphics presenta su nueva hoja de ruta para el microprocesador MIPS de alto rendimiento" (Comunicado de prensa). 12 de mayo de 1997.
- 1 2 3 4 5 "MIPS Technologies, Inc. mejora su arquitectura para dar soporte a la creciente necesidad de reutilización e integración de propiedad intelectual" (Comunicado de prensa). Business Wire . 3 de mayo de 1999. Archivado del original el 1 de diciembre de 2018. Consultado el 11 de febrero de 2016 .
- ↑ «La última versión de la arquitectura MIPS incluye funcionalidades clave de virtualización y SIMD para habilitar la próxima generación de productos basados en MIPS» (Comunicado de prensa). MIPS Technologies . 6 de diciembre de 2012. Archivado del original el 13 de diciembre de 2012.
- ↑ "MIPS omite la versión 4 en medio de una guerra de ofertas" . EE Times . 10 de diciembre de 2012.
{{cite magazine}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Wave Computing amplía su liderazgo en IA al centrarse en el borde de la nube mediante la adquisición de MIPS" . 15 de junio de 2018. Archivado del original el 25 de noviembre de 2020. Consultado el 19 de diciembre de 2018 .
- ↑ "Wave Computing® lanza la iniciativa MIPS Open para acelerar la innovación en la reconocida arquitectura MIPS®" . WAVE Computing . 17 de diciembre de 2018. Archivado del original el 28 de julio de 2021. Consultado el 19 de diciembre de 2018 .
- ↑ "El conjunto de instrucciones del procesador MIPS se publicará como código abierto en 2019 - Phoronix" . Archivado del original el 6 de marzo de 2021. Consultado el 18 de diciembre de 2018 .
- ↑ Yoshida, Junko (17 de diciembre de 2018). "MIPS se vuelve de código abierto" . EE Times . Archivado del original el 5 de julio de 2022. Recuperado el 18 de julio de 2022 .
- ↑ "La arquitectura MIPS R6 ya está disponible para uso abierto" . 28 de marzo de 2019. Archivado del original el 4 de agosto de 2020. Consultado el 16 de diciembre de 2019 .
- ↑ "Wave Computing cierra su iniciativa MIPS Open con efecto inmediato y sin previo aviso" . 15 de noviembre de 2019. Archivado del original el 7 de marzo de 2021. Consultado el 16 de diciembre de 2019 .
- ↑ "Wave Computing y MIPS salen de la bancarrota bajo el Capítulo 11" (Comunicado de prensa). 1 de marzo de 2021. Archivado del original el 13 de mayo de 2021. Consultado el 11 de marzo de 2021 .
- ↑ Shilov, Anton (25 de agosto de 2021). "Loongson critica a MIPS: utiliza código antiguo para las nuevas CPU" . Tom's Hardware . Archivado del original el 25 de enero de 2022. Consultado el 1 de diciembre de 2021 .
- ↑ Connatser, Matthew (19 de enero de 2024). "El fabricante chino de chips Loongson gana el caso sobre los derechos de la arquitectura MIPS: la nueva arquitectura de CPU de la compañía se parece mucho a la MIPS existente" . Tom's Hardware . Archivado del original el 19 de enero de 2024. Recuperado el 19 de enero de 2024 .
- ↑ Harris, David Money; Harris, Sarah L. (2013). «Arquitectura». Diseño digital y arquitectura informática . Elsevier. págs. 294–369 . doi : 10.1016/b978-0-12-394424-5.00006-9 . ISBN 9780123944245El tipo R es la abreviatura de tipo registro .
Las instrucciones de tipo R utilizan tres registros como operandos: dos como fuentes y uno como destino.
- 1 2 "NOTA DE APLICACIÓN MIPS R4000 Primitivas de sincronización" (PDF) . pág. 5. Archivado (PDF) del original el 27 de diciembre de 2023. Recuperado el 27 de diciembre de 2023 .
- ↑ Conjunto de instrucciones MIPS IV (PDF) (Edición revisión 3.2 ). MIPS Technologies . Septiembre de 1995. Archivado (PDF) del original el 27 de noviembre de 2022. Recuperado el 24 de agosto de 2022 .
- ↑ "Conjunto de instrucciones MIPS R5" (PDF) . págs. 59-62. Archivado (PDF) del original el 15 de diciembre de 2023. Recuperado el 15 de diciembre de 2023 .
- ↑ "Especificación del protocolo de coherencia MIPS®, revisión 01.01" (PDF) . págs. 26, 25, 57. Archivado (PDF) del original el 4 de septiembre de 2018. Recuperado el 15 de diciembre de 2023 .
- ↑ "MIPS: soluciones de procesadores IP RISC CPU líderes en el mercado" . imgtec.com . Archivado del original el 9 de marzo de 2016. Consultado el 11 de febrero de 2016 .
- ↑ "Silicon Graphics presenta código compacto para microprocesadores MIPS RISC que ofrece alto rendimiento a bajo costo" (Comunicado de prensa). 21 de octubre de 1996.
- ^ Dulce, Dominic (2007). Consulte Ejecución de MIPS (2ª ed.). San Francisco, California: Editores Morgan Kaufmann. págs. 425-427 . ISBN 978-0-12-088421-6.
- ↑ "Uso de la colección de compiladores GNU (GCC): funciones integradas MIPS DSP" . gcc.gnu.org . Archivado del original el 20 de abril de 2017.
- ↑ "Arquitectura del conjunto de instrucciones - LinuxMIPS" . www.linux-mips.org . Archivado del original el 20 de abril de 2017.
- ↑ Thekkath, Radhika et al. (1999) " Una extensión de arquitectura para el procesamiento eficiente de geometría ". Simposio Hot Chips .
- ↑ Sweetman, Dominic (2007). Véase MIPS Run, 2.ª edición . Morgan Kaufmann. ISBN 978-0-12088-421-6.
- ↑ "Referencia rápida del conjunto de instrucciones MIPS32" . Archivado (PDF) del original el 25 de enero de 2022. Consultado el 17 de agosto de 2020 .
- 1 2 "Historial de MIPS ABI" . Archivado del original el 26 de agosto de 2018.
- ↑ Eric Christopher (11 de junio de 2003). "Documentación de mips eabi" . binutils@sources.redhat.com (Lista de correo). Archivado del original el 7 de mayo de 2020. Recuperado el 19 de junio de 2020 .
- ↑ "NUBI" . Archivado del original el 29 de julio de 2021. Consultado el 17 de agosto de 2020 .
- ↑ Karen Miller (2006). "Convenciones de uso del registro MIPS" . Archivado del original el 25 de octubre de 2020.
- ↑ Hal Perkins (2006). "Convención de llamadas de MIPS" (PDF) . Archivado (PDF) del original el 30 de septiembre de 2020.
- ↑ Manual de la ABI MIPSpro N32 (PDF) . Silicon Graphics . Archivado del original (PDF) el 17 de diciembre de 2021. Consultado el 17 de agosto de 2020 .
- ↑ "Código PIC – LinuxMIPS" . www.linux-mips.org . Archivado del original el 21 de septiembre de 2018. Consultado el 21 de septiembre de 2018 .
- ↑ "System V Application Binary Interface MIPS RISC Processor Supplement, 3rd Edition" (PDF) . págs. 3–12 . Archivado (PDF) del original el 12 de noviembre de 2020. Recuperado el 17 de agosto de 2020 .
- ↑ Rubio, Victor P. "Implementación en FPGA de un procesador MIPS RISC para la enseñanza de la arquitectura de computadoras" (PDF) . Universidad Estatal de Nuevo México . Archivado (PDF) del original el 15 de abril de 2012. Recuperado el 22 de diciembre de 2011 .
- ↑ "OVP: Simulación rápida, modelos de código abierto gratuitos. Plataformas virtuales para el desarrollo de software" . Ovpworld.org. Archivado del original el 8 de junio de 2012. Consultado el 30 de mayo de 2012 .
- ↑ "Imperas" . Imperas. 3 de marzo de 2008. Archivado del original el 14 de junio de 2012. Consultado el 30 de mayo de 2012 .
- ↑ «Sitio web del simulador Spim» .
- ↑ "EduMIPS64" . Edumips.org. Archivado del original el 7 de mayo de 2012. Consultado el 30 de mayo de 2012 .
- ↑ "Ensamblador y simulador de tiempo de ejecución MARS MIPS" . Computerscience.missouristate.edu. Archivado del original el 16 de noviembre de 2025. Recuperado el 16 de noviembre de 2025 .
- ↑ Whatley, Taylor (16 de noviembre de 2025), 1whatleytay/saturn , GitHub , consultado el 16 de noviembre de 2025
- ↑ Whatley, Taylor (9 de abril de 2025), 1whatleytay/titan , GitHub , consultado el 16 de noviembre de 2025
- ↑ Badr, Mario (23 de marzo de 2023). "Saturno (y Titán)" . Sitio web de Mario Badr . Consultado el 16 de noviembre de 2025 .
- ↑ "WebMIPS - Simulación en línea de CPU MIPS en pipeline" . Consultado el 13 de enero de 2012 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) (demostración en línea) "Copia archivada" . Archivado del original el 10 de octubre de 2011. Recuperado el 13 de enero de 2012 .{{cite web}}: CS1 mantenimiento: copia archivada como título ( enlace ) (fuente) - ↑ QtMips - Simulador de CPU MIPS para fines educativos en GitHub
- ↑ Kočí, Karel (2018). Simulador gráfico de CPU con visualización de caché (PDF) (MSc). Universidad Técnica Checa de Praga . Archivado (PDF) del original el 19 de noviembre de 2020. Recuperado el 25 de enero de 2021 .
- ^ Gizopoulos, Dimitris (6 de diciembre de 2020). "Los conceptos básicos de QtMips-v3" (PDF) . Universidad Nacional y Kapodistriana de Atenas . Consultado el 25 de enero de 2021 .
- ↑ Camarmas-Alonso, Diego; García-Carballeira, Félix; Del-Pozo-Punal, Elías; Mateos, Alejandro Calderón (29 de mayo de 2024). "CREADOR: Un entorno de desarrollo educativo integrado para la programación RISC-V" . Acceso IEEE . 12 : 127702– 127717. Código bibliográfico : 2024IEEEA..12l7702C . doi : 10.1109/ACCESS.2024.3406935 . ISSN 2169-3536 .
- ↑ Camarmas-Alonso, Diego; García-Carballeira, Félix; Del-Pozo-Puñal, Elías; Mateos, Alejandro Calderón (23 de julio de 2021). "CREADOR: Simulador didáctico y genérico para la programación en ensamblador" (en español). doi : 10.5281/zenodo.5130302 . Archivado desde el original el 29 de septiembre de 2021 . Consultado el 29 de septiembre de 2021 .
- ↑ Camarmas-Alonso, Diego; García-Carballeira, Félix; Del-Pozo-Punal, Elías; Mateos, Alejandro Calderón (2 de agosto de 2022). Un nuevo simulador genérico para la enseñanza de la programación en lenguaje ensamblador . XLVII Conferencia Latinoamericana de Computación (CLEI) 2021 (en español). pp. 1–9 . doi : 10.1109/CLEI53233.2021.9640144 . ISBN 978-1-6654-9503-5. S2CID 245387555 . Consultado el 2 de agosto de 2022 .
- ↑ "Ejemplo de CREATOR Web con MIPS32" . Archivado del original el 29 de septiembre de 2021.
- ↑ Código fuente del CREADOR en GitHub
- ↑ Garcia-Carballeira, Felix; Calderon-Mateos, Alejandro; Alonso-Monsalve, Saul; Prieto-Cepeda, Javier (2020). "WepSIM: Un simulador educativo interactivo en línea que integra microdiseño, microprogramación y programación en lenguaje ensamblador". IEEE Transactions on Learning Technologies . 13 (1): 211– 218. Bibcode : 2020ITLT...13..211G . doi : 10.1109/TLT.2019.2903714 . hdl : 10016/33660 .
Lecturas adicionales
- Farquhar, Erin; Philip Bunce (1994). Manual del programador de MIPS . Morgan Kaufmann Publishers. ISBN 1-55860-297-6.
- Patterson, David A .; John L. Hennessy (2004). Organización y diseño de computadoras: la interfaz hardware/software . Morgan Kaufmann Publishers . ISBN 1-55860-604-1.
- Sweetman, Dominic (1999). Véase MIPS Run . Morgan Kaufmann Publishers. ISBN 1-55860-410-3.
- Sweetman, Dominic (2007). Véase MIPS Run, 2.ª edición . Morgan Kaufmann Publishers. ISBN 978-0-12-088421-6.
Enlaces externos
- Procesadores MIPS archivados el 11 de mayo de 2022 en Wayback Machine .
- Diagrama del historial de la arquitectura MIPS en Wayback Machine (archivado el 30/05/2013)
- Emulador MIPS en línea. Archivado el 5 de marzo de 2022 en Wayback Machine .
- Instrucciones MIPS - Conjunto de instrucciones MIPS archivado el 7 de abril de 2022 en Wayback Machine .
- Arquitectura MIPS
- Computación RISC avanzada
- Introducciones relacionadas con la informática en 1985
- Tecnologías MIPS