stringtranslate.com

Arquitectura MIPS

MIPS ( Microprocesador sin etapas canalizadas interbloqueadas ) [1] es una familia de arquitecturas de conjunto de instrucciones (ISA ) de computadora de conjunto de instrucciones reducido (RISC ) [2] : A-1  [3] : 19  desarrollada por MIPS Computer Systems, ahora MIPS Technologies , con sede en Estados Unidos .

Existen múltiples versiones de MIPS, incluidas 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 de MIPS eran de 32 bits; las versiones de 64 bits se desarrollaron más tarde. A partir de 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 al definir el coprocesador de control del sistema en modo kernel privilegiado además de la arquitectura en modo usuario.

La arquitectura MIPS tiene varias extensiones opcionales: MIPS-3D , un conjunto simple de instrucciones SIMD de punto flotante dedicadas a tareas 3D comunes; [6] MDMX (MaDMaX), un conjunto de instrucciones SIMD de enteros más extenso que utiliza registros de punto flotante de 64 bits; MIPS16e, que agrega compresión al flujo de instrucciones para reducir el espacio que ocupan los programas; [7] y MIPS MT, que agrega capacidad de subprocesamiento múltiple . [8]

Los cursos de arquitectura informática en universidades y escuelas técnicas suelen estudiar la arquitectura MIPS. [9] La arquitectura influyó en gran medida en las 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] [ verificación fallida ] 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 integrados fueron 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 nueva 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ó agresivamente la arquitectura MIPS y el R4000, estableciendo el consorcio Advanced Computing Environment (ACE) para avanzar su estándar Advanced RISC Computing (ARC), que apuntaba a establecer MIPS como la plataforma de computación personal dominante. ARC tuvo poco éxito en las computadoras personales, pero el R4000 (y el derivado R4400) fueron ampliamente utilizados en estaciones de trabajo y servidores, especialmente por su mayor usuario, Silicon Graphics . Otros usos del R4000 incluyeron sistemas integrados de alta gama y supercomputadoras. MIPS III finalmente fue implementado por una serie de microprocesadores integrados. El R4600 de Quantum Effect Design (1993) y sus derivados fueron ampliamente utilizados en sistemas integrados de alta gama y estaciones de trabajo y servidores de gama baja. El R4200 (1994) de MIPS Technologies fue diseñado para sistemas integrados, computadoras portátiles y personales. Un derivado, el R4300i, fabricado por NEC Electronics , se utilizó en la consola de juegos Nintendo 64. La Nintendo 64, junto con la PlayStation , se encontraban entre los usuarios de mayor volumen de procesadores de arquitectura MIPS 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 comenzó en Silicon Graphics, Inc. y solo se utilizó en estaciones de trabajo y servidores de alta gama para aplicaciones científicas y técnicas donde era importante un alto rendimiento en grandes cargas de trabajo de punto flotante. Las implementaciones posteriores fueron el MIPS Technologies R10000 (1996) y los Quantum Effect Devices R5000 (1996) y RM7000 (1998). El R10000, fabricado y vendido 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. El R5000 y el R7000 se utilizaron en sistemas integrados de alta gama, computadoras personales y estaciones de trabajo y servidores de gama baja. Un derivado del R5000 de Toshiba, el R5900, se utilizó en el Emotion Engine de Sony Computer Entertainment , que impulsó su consola de juegos 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 fueron las estaciones de trabajo gráficas de Silicon Graphics. MIPS V se completó con la extensión MDMX de solo números 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"). El primero debía haber sido la primera implementación de MIPS V, y se suponía que se introduciría en la primera mitad de 1999. [14] Los proyectos H1 y H2 se combinaron más tarde 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 integrado. A través de MIPS V, cada versión sucesiva era un superconjunto estricto de la versión anterior, pero se descubrió que esta propiedad era un problema, [ cita requerida ] y se cambió la definición de la arquitectura para definir una arquitectura de 32 bits y otra 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 (posteriormente adquirida 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 han unido desde entonces 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 productos de MIPS, se omitió la versión 4 porque el número cuatro se percibe como de mala suerte en muchas culturas asiáticas. [17]

En diciembre de 2018, Wave Computing, el nuevo propietario de la arquitectura MIPS, anunció que 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, haciéndolos disponibles sin licencias ni regalías, además de otorgar a los participantes licencias para las patentes MIPS existentes. [19] [20] [21]

En marzo de 2019, una versión de la arquitectura se puso a disposición bajo una licencia libre de regalías, [22] pero más tarde ese año el programa se cerró nuevamente. [23]

En marzo de 2021, Wave Computing anunció que el desarrollo de la arquitectura MIPS había cesado. La empresa se ha unido 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 con nuevas extensiones de ISA compatibles con MIPS por su cuenta. [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 (CP0/1/2/3). En la terminología de MIPS, CP0 es el coprocesador de control del sistema (una parte esencial del procesador que se define por implementación en MIPS I–V), CP1 es una unidad de punto flotante (FPU) opcional y CP2/3 son coprocesadores definidos por implementación opcionales (MIPS III eliminó a CP3 y reutilizó sus códigos de operación para otros fines). Por ejemplo, en la consola de videojuegos PlayStation , CP2 es el motor de transformación de geometría (GTE), que acelera el procesamiento de la geometría en gráficos de computadora en 3D.

Versiones

MIPS yo

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 instrucciones operan en los registros.

Registros

MIPS I tiene 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 números enteros, que se ejecutan de forma asincrónica desde otras instrucciones, se proporciona un par de registros de 32 bits, HI y LO . Hay un pequeño conjunto de instrucciones para copiar datos entre los registros de propósito general y los registros HI/LO.

El contador del programa tiene 32 bits. Los dos bits de orden inferior siempre contienen cero, ya que las instrucciones MIPS I tienen una longitud de 32 bits y están alineadas con sus límites de palabras naturales.

Formatos de instrucciones

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 objetivo de salto de 26 bits. [2] : A-174 

Los siguientes son los tres formatos utilizados para el conjunto de instrucciones principal:

Instrucciones de la CPU

MIPS I tiene instrucciones que cargan y almacenan bytes de 8 bits, medias palabras de 16 bits y palabras de 32 bits. Solo se admite un modo de direccionamiento : base + desplazamiento. Dado que MIPS I es una arquitectura de 32 bits, la carga de cantidades inferiores a 32 bits requiere que el dato tenga signo extendido o extensión de cero a 32 bits. Las instrucciones de carga con el sufijo "unsigned" realizan la extensión de cero; de lo contrario, se realiza la extensión de 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 almacenan los datos 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 signo extendido. MIPS I requiere que todos los accesos a la memoria estén alineados con sus límites de palabra naturales; de lo contrario, se señala una excepción. Para admitir accesos a memoria no alineados eficientes, existen instrucciones de palabra de carga/almacenamiento con el sufijo "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 se puede llenar con una instrucción que no dependa de la carga; se sustituye por un nop si no se puede encontrar dicha instrucción.

MIPS I tiene instrucciones para realizar operaciones de suma y resta. Estas instrucciones obtienen sus operandos de dos GPR (rs y rt) y escriben el resultado en un tercer GPR (rd). Como alternativa, la operación de suma puede obtener uno de los operandos de un inmediato de 16 bits (que se extiende a 32 bits por signo). Las instrucciones para la operación de suma y resta tienen dos variantes: de manera predeterminada, se señala una excepción si el resultado se desborda; las instrucciones con el sufijo "sin signo" 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 bit a bit. Estas instrucciones obtienen sus operandos de dos GPR y escriben el resultado en un tercer GPR. Las instrucciones AND, OR y XOR pueden, como alternativa, obtener uno de los operandos de un inmediato de 16 bits (que se extiende a 32 bits por cero). Las instrucciones de establecimiento de relaciones 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 GPR o de un GPR y un inmediato de 16 bits (que se extiende a 32 bits con signo) y escriben el resultado en un tercer GPR. De manera predeterminada, los operandos se interpretan como enteros con signo. Las variantes de estas instrucciones que tienen el sufijo "unsigned" interpretan los operandos como enteros sin signo (incluso aquellas que obtienen un operando del inmediato de 16 bits con signo extendido).

La instrucción Load Immediate Upper copia el valor inmediato de 16 bits en los 16 bits de orden superior de un GPR. Se utiliza junto con la instrucción Or Immediate para cargar un valor inmediato de 32 bits en un registro.

MIPS I tiene instrucciones para realizar desplazamientos lógicos hacia la izquierda y hacia la derecha y desplazamientos aritméticos hacia la derecha. El operando se obtiene de un GPR (rt) y el resultado se escribe en otro GPR (rd). La distancia de desplazamiento se obtiene de un GPR (rs) o de una "cantidad de desplazamiento" de 5 bits (el campo "sa").

MIPS I tiene instrucciones para multiplicar y dividir enteros con y sin signo. Estas instrucciones obtienen sus operandos de dos GPR y escriben sus resultados en un par de registros de 32 bits llamados HI y LO, ya que pueden ejecutarse por separado (y simultáneamente) con las otras 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 interconectadas: las lecturas de HI y LO no proceden más allá de una instrucción aritmética inacabada 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 leen HI o LO deben estar separadas por dos instrucciones que no escriban en HI o LO.

Todas las instrucciones de flujo de control MIPS I son seguidas por una ranura de retardo de bifurcación . A menos que la ranura de retardo de bifurcación se llene con una instrucción que realice un trabajo útil, se sustituye por un nop. Las instrucciones de bifurcación MIPS I comparan el contenido de un GPR (rs) con cero u otro GPR (rt) como enteros con signo y se bifurcan si la condición especificada es verdadera. El control se transfiere a la dirección calculada desplazando el desplazamiento de 16 bits a la izquierda en dos bits, extendiendo el signo del resultado de 18 bits y sumando el resultado de 32 bits extendido con el signo 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 ("Saltar" y "Saltar y vincular") calculan la dirección a la que se transfiere el control desplazando el instr_index de 26 bits a la izquierda en dos bits 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 bifurcación. Los saltos indirectos de registro transfieren el control a la instrucción en la dirección obtenida de un GPR (rs). La dirección obtenida del GPR debe estar alineada con las palabras; de lo contrario, se indica una excepción después de que se ejecuta la instrucción en la ranura de retardo de bifurcación. Las instrucciones de bifurcación y salto que enlazan (excepto "Jump and Link Register") guardan la dirección de retorno en GPR 31. La instrucción "Jump and Link Register" permite guardar la dirección de retorno en cualquier GPR escribible.

MIPS I tiene dos instrucciones para que el software indique 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 núcleo, y el punto de interrupción se utiliza para transferir el control a un depurador a través del controlador de excepciones del núcleo. Ambas instrucciones tienen un campo de código de 20 bits que puede contener información específica del entorno operativo para el controlador de excepciones.

MIPS tiene 32 registros de punto flotante. Dos registros se emparejan para números de doble precisión. Los registros impares no se pueden usar para operaciones aritméticas o ramificaciones, solo como parte de un par de registros de doble precisión, lo que da como resultado 16 registros utilizables para la mayoría de las instrucciones (los movimientos/copias y las cargas/almacenamientos no se vieron afectados).

La precisión simple se denota con el sufijo .s, mientras que la precisión doble se denota 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 Synchronize Shared Memory , Load Linked Word y Store Conditional Word . [28] Se agregó un conjunto de instrucciones Trap-on-Condition. Estas instrucciones causaban una excepción si la condición evaluada era verdadera. A todas las instrucciones de bifurcación existentes se les dieron versiones con probabilidad de bifurcación que ejecutaban la instrucción en la ranura de retardo de bifurcación solo si la bifurcación estaba tomada. [3] : 40  Estas instrucciones mejoran el rendimiento en ciertos casos al permitir que instrucciones útiles llenen la ranura de retardo de bifurcación. [3] : 212  Se agregaron instrucciones de carga y almacenamiento de doble palabra para COP1–3. En consonancia con otras instrucciones de acceso a memoria, estas cargas y almacenamientos requerían que la doble palabra estuviera alineada naturalmente.

También se agregaron varias instrucciones al conjunto de instrucciones para el coprocesador de punto flotante. Se agregó una instrucción de raíz cuadrada de punto flotante compatible con IEEE 754. Admitía operandos de precisión simple y doble. Se agregó un conjunto de instrucciones que convertían números de punto flotante de precisión simple y doble en palabras de 32 bits. Estas complementaron las instrucciones de conversión existentes al permitir que la instrucción especificara el modo de redondeo IEEE en lugar del registro de control y estado de punto flotante.

MIPS III

MIPS III es una extensión compatible con versiones anteriores de MIPS II que agregó soporte para direccionamiento de memoria de 64 bits y operaciones con números enteros. El tipo de datos de 64 bits se denomina 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 números enteros en ellas, y para mover palabras dobles entre los GPR y los registros 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 originalmente definidas para operar en 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 se trataran de manera 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 agregó una versión que extiende a cero.

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) requirió que MIPS III proporcionara 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, que se utiliza 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 agregó un nivel de privilegio de supervisor entre los niveles de privilegio de usuario y de kernel 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 (CP3) y reutilizó sus códigos de operación para las nuevas instrucciones de doble palabra. Los coprocesadores restantes obtuvieron instrucciones para mover palabras dobles entre los registros del coprocesador y los GPR. Los registros generales flotantes (FGR) se ampliaron a 64 bits y se eliminó el requisito de que las instrucciones utilizaran solo registros pares. Esto es incompatible con versiones anteriores de la arquitectura; un bit en el registro de control/estado de punto flotante se utiliza 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 ampliaron para lograr compatibilidad. Las únicas instrucciones de punto flotante nuevas que se agregaron fueron las de copiar palabras dobles entre la CPU y la FPU, convertir números de punto flotante de precisión simple y doble en números 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 precargas de memoria y especificar sugerencias de caché (estas admitían los modos de direccionamiento base + desplazamiento y base + índice).

MIPS IV agregó 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 agregaron 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 bifurcación de FP 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 una bifurcación de FP que leía el bit de condición escrito por una comparación de FP anterior. Se agregó soporte para predicció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 trampas IEEE 754.

MIPS IV agregó varias instrucciones aritméticas FP nuevas para FPN de precisión simple y doble: suma o resta de multiplicación fusionada, recíproca y raíz cuadrada recíproca. Las instrucciones de suma o resta de multiplicación fusionada FP realizan uno o dos redondeos (según la implementación) para superar o cumplir con los requisitos de precisión IEEE 754 (respectivamente). Las instrucciones de raíz cuadrada recíproca y recíproca FP no cumplen con los requisitos de precisión IEEE 754 y producen resultados que difieren de la precisión requerida en una o dos unidades del último lugar (según la implementación). Estas instrucciones sirven para aplicaciones donde la latencia de la instrucción es más importante que la precisión.

MIPS V

MIPS V agregó un nuevo tipo de datos, 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 agregaron variantes de las instrucciones de punto flotante existentes para aritmética, comparación y movimiento condicional para operar en este tipo de datos de manera SIMD. Se agregaron 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 los recursos existentes. [13]

MIPS32/MIPS64

La primera versión de MIPS32, basada en MIPS II, agregó movimientos condicionales, instrucciones de precarga y otras características de las familias R4000 y R5000 de procesadores de 64 bits. [15] La primera versión de MIPS64 agrega un modo MIPS32 para ejecutar código de 32 bits. [15] Las instrucciones MUL y MADD ( multiplicar-agregar ), previamente disponibles en algunas implementaciones, se agregaron a las especificaciones MIPS32 y MIPS64, al igual que las instrucciones de control de caché . [15] Para el control de caché, se prepararon tanto las instrucciones como las . SYNC[ 30] [31]SYNCI

La versión 6 de MIPS32/MIPS64 en 2014 agregó lo siguiente: [32]

Se eliminaron las instrucciones que se usan con poca frecuencia:

Se reorganizó la codificación de instrucciones, liberando espacio para futuras expansiones.

microMIPS

Las arquitecturas microMIPS32/64 son superconjuntos de las arquitecturas MIPS32 y MIPS64 (respectivamente) diseñadas para reemplazar al ASE MIPS16e. Una desventaja de MIPS16e es que requiere un cambio de modo antes de que se pueda procesar cualquiera de sus instrucciones de 16 bits. microMIPS agrega versiones de las instrucciones de 32 bits más utilizadas que están codificadas como instrucciones de 16 bits. Esto permite que los programas mezclen instrucciones de 16 y 32 bits sin tener que cambiar de modo. microMIPS se introdujo junto con MIPS32/64 Release 3, 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 MIPS32/64 versión 6, finalizó el soporte para 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 se pueden complementar con una serie de extensiones arquitectónicas opcionales, que se denominan colectivamente extensiones específicas de la aplicación (ASE). Estas ASE proporcionan funciones que mejoran la eficiencia y el rendimiento de determinadas cargas de trabajo, como el procesamiento de señales digitales .

Unidad de control microscópico MIPS
Mejoras para aplicaciones de microcontroladores. La ASE (extensión específica de la aplicación) de MCU se ha desarrollado para ampliar la compatibilidad del controlador de interrupciones , reducir la latencia de las interrupciones y mejorar la función de control de periféricos de E/S que se requiere normalmente en los diseños de sistemas de microcontroladores.
MIPS16
MIPS16 es una extensión específica de la 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 LSI Logic TinyRISC. [33] MIPS16 fue posteriormente licenciado por NEC Electronics , Philips Semiconductors y Toshiba (entre otros); e implementado como una extensión a las arquitecturas MIPS I, II y III. MIPS16 disminuye 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 que fue compatible por primera vez con MIPS32 y MIPS64 Release 1. MIPS16e2 es una versión mejorada de MIPS16 que es compatible con MIPS32 y MIPS64 (hasta Release 5). Release 6 la reemplazó con microMIPS.
Procesamiento de señal digital (DSP) MIPS
El DSP ASE es una extensión opcional de los conjuntos de instrucciones MIPS32/MIPS64 Release 2 y posteriores que se pueden utilizar para acelerar una amplia gama de cálculos "multimedia", en particular audio y vídeo. El módulo DSP comprende un conjunto de instrucciones y estados en la secuencia de números enteros y requiere una lógica adicional mínima para implementarse en los núcleos de procesadores 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 él en 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]
Arquitectura SIMD MIPS (MSA)
Extensiones del conjunto de instrucciones diseñadas para acelerar multimedia.
Virtualización MIPS
Tecnología de virtualización compatible con hardware.
Subprocesamiento múltiple MIPS
Cada núcleo MIPS multiproceso puede admitir hasta dos VPE (elementos de procesamiento virtual) que comparten una única tubería, 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 subprocesos más granulares, cada VPE puede admitir hasta nueve TC asignados en 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 de núcleo para que cada uno pueda manejar un subproceso del software. La arquitectura MIPS MT también permite la asignación de ciclos de procesador a subprocesos y establece las prioridades relativas de los subprocesos con un bloque de administrador 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 subproceso sobre otro. El segundo mecanismo se utiliza para asignar una proporción específica de los ciclos a subprocesos 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 subprocesos y un mejor control de las latencias. En los sistemas en tiempo real, el determinismo a nivel de sistema es muy crítico y el bloque QoS facilita la mejora de la predictibilidad de un sistema. Los diseñadores de hardware de sistemas avanzados pueden reemplazar el bloque QoS estándar proporcionado por MIPS Technologies por uno que esté específicamente ajustado para su aplicación.
Sistema inteligente MIPS
SmartMIPS es una extensión específica de la aplicación (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.
Extensión de medios digitales MIPS (MDMX)
Aceleraciones de aplicaciones multimedia que eran comunes en la década de 1990 en los sistemas RISC y CISC.
MIPS-3D
Instrucciones adicionales para mejorar el rendimiento de las aplicaciones de gráficos 3D

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 System V para MIPS. [37] [38] Está estrictamente basada en la pila, con solo cuatro registros $a0 - $a3 disponibles para pasar argumentos. El espacio en la pila está reservado en caso de que el llamador necesite guardar sus argumentos, pero los registros no son almacenados allí por el llamador. El valor de retorno se almacena en el registro $v0 ; un segundo valor de retorno puede almacenarse en $v1 . La ABI tomó forma en 1990 y se actualizó por última vez en 1994. Esta lentitud percibida, junto con un modelo de punto flotante antiguo con solo 16 registros, ha alentado 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. [39]

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 utiliza 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. [39] Las ABI N32 y N64 pasan los primeros ocho argumentos a una función en los registros $a0 - $a7 ; los argumentos posteriores se pasan en la pila. El valor de retorno (o un puntero a él) se almacena en los registros $v0 ; un segundo valor de retorno se puede almacenar en $v1 . En las ABI N32 y N64, todos los registros se consideran de 64 bits de ancho.

Se han hecho algunos intentos para reemplazar O32 con una ABI de 32 bits que se parezca más a N32. Una conferencia de 1995 presentó MIPS EABI, para la cual la versión de 32 bits era bastante similar. [40] EABI inspiró a MIPS Technologies a proponer una ABI "NUBI" más radical que además reutiliza los registros de argumentos para el valor de retorno. [41] GCC admite MIPS EABI pero no LLVM, y ninguno admite NUBI.

Para todos los O32 y N32/N64, la dirección de retorno se almacena en un registro $ra . Esto se establece automáticamente con el uso de las instrucciones JAL (salto y enlace) o JALR (registro de salto y enlace). El prólogo de función de una subrutina MIPS (no leaf) envía la dirección de retorno (en $ra ) a la pila. [42] [43]

En O32 y N32/N64 la pila crece hacia abajo, pero las ABI de N32/N64 requieren una 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 utiliza, excepto cuando la asignación de pila en una función se determina en tiempo de ejecución, por ejemplo, llamando a .alloca()

Para N32 y N64, la dirección de retorno normalmente se almacena 8 bytes antes del puntero de pila, aunque esto puede ser opcional.

Para las ABIs N32 y N64, una función debe preservar los registros $s0 - $s7 , el puntero global ( $gp o $28 ), el puntero de pila ( $sp o $29 ) y el puntero de marco ( $30 ). La ABI O32 es la misma, excepto que se requiere que la función que realiza la llamada guarde el registro $gp en lugar de la función llamada.

En el caso de código multiproceso, el puntero de almacenamiento local del subproceso se almacena normalmente en el registro de hardware especial $29 y se accede a él mediante la instrucción mfhw (mover desde el hardware). Se sabe que al menos un proveedor almacena esta información en el registro $k0 , que normalmente está reservado para el uso del núcleo, pero no es la norma.

Los registros $k0 y $k1 ( $26$27 ) están reservados para el 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 a lo largo de una llamada son registros que (por convención) no se modificarán con una llamada al sistema o a un procedimiento (función). Por ejemplo, los registros $s deben guardarse en la pila por un procedimiento que necesite usarlos, y $sp y $fp siempre se incrementan mediante constantes y se decrementan nuevamente después de que el procedimiento haya terminado con ellos (y la memoria a la que apuntan). Por el contrario, $ra se modifica automáticamente con cualquier llamada a una función normal (aquellas que usan jal), y los registros $t deben ser guardados por el programa antes de cualquier llamada a un procedimiento (si el programa necesita los valores dentro de ellos después de la llamada).

La convención de llamada de 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. [45] Esta convención se remonta al suplemento ABI de System V para MIPS. [46]

Usos

Los procesadores MIPS se utilizan en sistemas integrados, como puertas de enlace residenciales y enrutadores . Originalmente, MIPS se diseñó para la informática de uso 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, las consolas de videojuegos como Nintendo 64 , Sony PlayStation , PlayStation 2 y PlayStation Portable utilizaban procesadores MIPS. Los procesadores MIPS también solían ser populares en las supercomputadoras durante la década de 1990, pero todos esos sistemas han desaparecido de la lista TOP500 . Estos usos se complementaron con aplicaciones integradas al principio, pero durante la década de 1990, MIPS se convirtió en una presencia importante en el mercado de procesadores integrados y, en la década de 2000, la mayoría de los procesadores MIPS eran para estas aplicaciones.

A mediados y fines de la década de 1990, se estimó que uno de cada tres microprocesadores RISC producidos era un procesador MIPS. [47]

A finales de la década de 2010, las máquinas MIPS todavía se usaban comúnmente en los mercados integrados, incluidos los de automóviles, enrutadores inalámbricos, módems LTE (principalmente a través de MediaTek ) y microcontroladores (por ejemplo, el PIC32M de Microchip Technology ). En su mayoría, han desaparecido del espacio personal, de servidores y de aplicaciones.

Simuladores

Open Virtual Platforms (OVP) [48] incluye el simulador OVPsim , disponible de forma gratuita 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 4K, 24K, 34K, 74K, 1004K, 1074K, M14K, microAptiv, interAptiv, proAptiv de 32 bits y la gama de núcleos MIPS de 64 bits y 5K. Estos modelos son creados y mantenidos por Imperas [49] y, en asociación con MIPS Technologies, han sido probados y se les ha asignado la marca MIPS-Verified. Las plataformas de muestra basadas en MIPS incluyen entornos de hardware y plataformas para arrancar imágenes binarias de Linux sin modificar. Estas plataformas-emuladores están disponibles como código fuente o binarios y son rápidas, gratuitas para uso no comercial y fáciles de usar. OVPsim es desarrollado y mantenido por Imperas y 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.

Existe un simulador MIPS32 disponible de forma gratuita (las versiones anteriores simulaban únicamente el R2000/R3000) llamado SPIM para su uso en educación. EduMIPS64 [50] es un simulador de CPU MIPS64 multiplataforma gráfico con licencia GPL, escrito en Java/Swing. Es compatible con un amplio subconjunto de la ISA MIPS64 y permite al usuario ver gráficamente lo que sucede en el flujo de trabajo cuando la CPU ejecuta un programa de ensamblaje.

MARS [51] es otro emulador MIPS basado en GUI diseñado para su uso en educación, específicamente para su uso con Computer Organization and Design de Hennessy .

WebMIPS [52] es un simulador MIPS basado en navegador con representación visual de un procesador genérico segmentado. Este simulador es bastante útil para el seguimiento de registros durante la ejecución paso a paso.

QtMips proporciona una visualización simple de canalización de 5 etapas, así como una visualización del principio de caché para cursos básicos de arquitecturas informáticas. [53] [54] [55] 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 (antes conocido como proyecto mips64emul) y QEMU . Éstos emulan los diversos microprocesadores MIPS III y IV, además de sistemas informáticos completos que los utilizan.

Hay simuladores comerciales disponibles especialmente para el uso integrado de procesadores MIPS, 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 [56] [57] [58] [59] [60] es portátil y permite al usuario aprender varios lenguajes ensambladores de diferentes procesadores (Creator tiene ejemplos con una implementación de instrucciones MIPS32 y RISC-V).

WepSIM [61] [62] es un simulador basado en navegador donde se microprograman un subconjunto de instrucciones MIPS. Este simulador es muy útil para aprender cómo funciona una CPU (microprogramación Archivado el 26 de julio de 2022 en Wayback Machine , rutinas MIPS Archivado el 26 de julio de 2022 en Wayback Machine , interrupciones Archivado el 20 de agosto de 2022 en Wayback Machine , llamadas al sistema Archivado el 26 de julio de 2022 en Wayback Machine , etc.)

Véase también

Referencias

  1. ^ Patterson, David (2014). Organización y diseño de computadoras (PDF) . Elsevier. pp. 4.16–4. ISBN 978-0-12-407726-3. Archivado (PDF) del original el 4 de septiembre de 2019 . Consultado el 28 de noviembre de 2018 .
  2. ^ ab Price, Charles (septiembre de 1995). Conjunto de instrucciones MIPS IV (revisión 3.2), MIPS Technologies, Inc.
  3. ^ abcdefgh Sweetman, Dominic (1999). Véase MIPS Run . Morgan Kaufmann Publishers, Inc. ISBN 1-55860-410-3.
  4. ^ "Arquitectura MIPS32". MIPS . Archivado desde el original el 21 de marzo de 2020 . Consultado el 20 de marzo de 2020 .
  5. ^ "Arquitectura MIPS64". MIPS . Archivado desde el original el 2 de febrero de 2020 . Consultado el 20 de marzo de 2020 .
  6. ^ "MIPS-3D ASE". Imagination Technologies . Archivado desde el original el 3 de enero de 2014. Consultado el 4 de enero de 2014 .
  7. ^ "MIPS16e". MIPS . Archivado desde el original el 16 de enero de 2021 . Consultado el 20 de marzo de 2020 .
  8. ^ "MIPS Multithreading". MIPS . Archivado desde el original el 26 de octubre de 2020 . Consultado el 20 de marzo de 2020 .
  9. ^ Universidad de California, Davis. «Página de referencias y herramientas de ECS 142 (compiladores)». Archivado desde el original el 21 de marzo de 2011. Consultado el 28 de mayo de 2009 .
  10. ^ ab Turley, Jim (8 de marzo de 2021). "Espera, ¿qué? MIPS se convierte en RISC-V". Revista de ingeniería electrónica . Archivado desde el original el 21 de marzo de 2021. Consultado el 28 de marzo de 2021 .
  11. ^ "El procesador MIPS". www.d.umn.edu . Archivado desde el original el 17 de mayo de 2023 . Consultado el 17 de mayo de 2023 .
  12. ^ "Silicon Graphics presenta una arquitectura MIPS mejorada para liderar la revolución digital interactiva" (nota de prensa). Silicon Graphics, Inc. 21 de octubre de 1996. Archivado desde el original el 6 de junio de 1997.
  13. ^ ab Gwennap, Linley (18 de noviembre de 1996). "Digital, MIPS Add Multimedia Extensions" (PDF) . Microprocessor Report . 10 (15): 24–28. Archivado (PDF) desde el original el 20 de julio de 2011.
  14. ^ "Silicon Graphics presenta un nuevo plan de desarrollo de microprocesadores MIPS de alto rendimiento" (nota de prensa). 12 de mayo de 1997.
  15. ^ abcde "MIPS Technologies, Inc. mejora la arquitectura para satisfacer la creciente necesidad de reutilización e integración de IP" (Comunicado de prensa). Business Wire . 3 de mayo de 1999. Archivado desde el original el 1 de diciembre de 2018 . Consultado el 11 de febrero de 2016 .
  16. ^ "La última versión de la arquitectura MIPS incluye virtualización y funcionalidades clave de SIMD para permitir la próxima generación de productos basados ​​en MIPS" (Comunicado de prensa). MIPS Technologies . 6 de diciembre de 2012. Archivado desde el original el 13 de diciembre de 2012.
  17. ^ "MIPS se salta la versión 4 en medio de una guerra de ofertas". EE Times . 10 de diciembre de 2012. Archivado desde el original el 17 de abril de 2014.
  18. ^ "Wave Computing amplía su liderazgo en inteligencia artificial al centrarse en el borde de la nube mediante la adquisición de MIPS". 15 de junio de 2018. Archivado desde el original el 25 de noviembre de 2020. Consultado el 19 de diciembre de 2018 .
  19. ^ "Wave Computing® lanza la iniciativa abierta MIPS para acelerar la innovación en la reconocida arquitectura MIPS®". 17 de diciembre de 2018. Archivado desde el original el 28 de julio de 2021. Consultado el 19 de diciembre de 2018 .
  20. ^ "El procesador MIPS ISA será de código abierto en 2019 - Phoronix". Archivado desde el original el 6 de marzo de 2021 . Consultado el 18 de diciembre de 2018 .
  21. ^ Yoshida, Junko (17 de diciembre de 2018). «MIPS se vuelve de código abierto». EE Times . Archivado desde el original el 5 de julio de 2022. Consultado el 18 de julio de 2022 .
  22. ^ "La arquitectura MIPS R6 ya está disponible para uso abierto". 28 de marzo de 2019. Archivado desde el original el 4 de agosto de 2020. Consultado el 16 de diciembre de 2019 .
  23. ^ "Wave Computing cierra su iniciativa MIPS Open con efecto inmediato y sin avisos". 15 de noviembre de 2019. Archivado desde el original el 7 de marzo de 2021. Consultado el 16 de diciembre de 2019 .
  24. ^ "Wave Computing y MIPS emergen del capítulo 11 de bancarrota" (Nota de prensa). 1 de marzo de 2021. Archivado desde el original el 13 de mayo de 2021 . Consultado el 11 de marzo de 2021 .
  25. ^ Shilov, Anton (25 de agosto de 2021). "Loongson critica a MIPS: usa código antiguo para nuevas CPU". Tom's Hardware . Archivado desde el original el 25 de enero de 2022. Consultado el 1 de diciembre de 2021 .
  26. ^ Connatser, Matthew (19 de enero de 2024). «El fabricante de chips chino Loongson gana el caso sobre los derechos de la arquitectura MIPS: la nueva arquitectura de CPU de la empresa se parece mucho a la MIPS existente». Tom's Hardware . Archivado desde el original el 19 de enero de 2024. Consultado el 19 de enero de 2024 .
  27. ^ 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 . 9780123944245. 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.
  28. ^ ab "NOTA DE APLICACIÓN Primitivas de sincronización MIPS R4000" (PDF) . p. 5. Archivado (PDF) del original el 27 de diciembre de 2023 . Consultado el 27 de diciembre de 2023 .
  29. ^ Conjunto de instrucciones MIPS IV (PDF) (Revisión 3.2 ed.). MIPS Technologies . Septiembre de 1995. Archivado (PDF) desde el original el 27 de noviembre de 2022 . Consultado el 24 de agosto de 2022 .
  30. ^ "Conjunto de instrucciones MIPS R5" (PDF) . pág. 59-62. Archivado (PDF) desde el original el 15 de diciembre de 2023. Consultado el 15 de diciembre de 2023 .
  31. ^ "Especificación del protocolo de coherencia MIPS®, revisión 01.01" (PDF) . pág. 26,25,57. Archivado (PDF) del original el 4 de septiembre de 2018. Consultado el 15 de diciembre de 2023 .
  32. ^ "MIPS – Soluciones de procesadores IP para CPU RISC líderes en el mercado". imgtec.com . Archivado desde el original el 9 de marzo de 2016 . Consultado el 11 de febrero de 2016 .
  33. ^ "Silicon Graphics presenta un código de microprocesador RISC MIPS compacto para un alto rendimiento a bajo costo" (nota de prensa). 21 de octubre de 1996.
  34. ^ 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.
  35. ^ "Uso de la Colección de compiladores GNU (GCC): funciones integradas de MIPS DSP". gcc.gnu.org . Archivado desde el original el 20 de abril de 2017.
  36. ^ "Arquitectura del conjunto de instrucciones - LinuxMIPS". www.linux-mips.org . Archivado desde el original el 20 de abril de 2017.
  37. ^ Sweetman, Dominic (2007). Véase MIPS Run, 2.ª edición . Morgan Kaufmann. ISBN 978-0-12088-421-6.
  38. ^ "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 .
  39. ^ ab "Historia de MIPS ABI". Archivado desde el original el 26 de agosto de 2018.
  40. ^ Eric Christopher (11 de junio de 2003). «mips eabi documentation». [email protected] (Lista de correo). Archivado desde el original el 7 de mayo de 2020. Consultado el 19 de junio de 2020 .
  41. ^ "NUBI". Archivado desde el original el 29 de julio de 2021 . Consultado el 17 de agosto de 2020 .
  42. ^ Karen Miller (2006). "Convenciones de uso del registro MIPS". Archivado desde el original el 25 de octubre de 2020.
  43. ^ Hal Perkins (2006). "Convención de llamadas MIPS" (PDF) . Archivado (PDF) del original el 30 de septiembre de 2020.
  44. ^ Manual de ABI MIPSpro N32 (PDF) . Silicon Graphics . Archivado desde el original (PDF) el 17 de diciembre de 2021 . Consultado el 17 de agosto de 2020 .
  45. ^ "Código PIC – LinuxMIPS". www.linux-mips.org . Archivado desde el original el 21 de septiembre de 2018 . Consultado el 21 de septiembre de 2018 .
  46. ^ "System V Application Binary Interface MIPS RISC Processor Supplement, 3rd Edition" (PDF) . págs. 3–12. Archivado (PDF) desde el original el 12 de noviembre de 2020 . Consultado el 17 de agosto de 2020 .
  47. ^ Rubio, Victor P. "Una implementación FPGA de un procesador MIPS RISC para la educación en arquitectura informática" (PDF) . Universidad Estatal de Nuevo México . Archivado (PDF) del original el 15 de abril de 2012. Consultado el 22 de diciembre de 2011 .
  48. ^ "OVP: Simulación rápida, modelos gratuitos de código abierto. Plataformas virtuales para el desarrollo de software". Ovpworld.org. Archivado desde el original el 8 de junio de 2012. Consultado el 30 de mayo de 2012 .
  49. ^ "Imperas". Imperas. 3 de marzo de 2008. Archivado desde el original el 14 de junio de 2012. Consultado el 30 de mayo de 2012 .
  50. ^ "EduMIPS64". Edumips.org. Archivado desde el original el 7 de mayo de 2012. Consultado el 30 de mayo de 2012 .
  51. ^ "Simulador MARS MIPS - Universidad Estatal de Missouri". Courses.missouristate.edu. Archivado desde el original el 2 de mayo de 2012. Consultado el 30 de mayo de 2012 .
  52. ^ "WebMIPS - SIMULACIÓN PIPLINED DE CPU MIPS en línea". Archivado desde el original el 31 de diciembre de 2012 . Consultado el 13 de enero de 2012 .(Demostración en línea) "Copia archivada". Archivado desde el original el 10 de octubre de 2011 . Consultado el 13 de enero de 2012 .{{cite web}}: CS1 maint: copia archivada como título ( enlace )(fuente)
  53. ^ QtMips - Simulador de CPU MIPS para fines educativos en GitHub
  54. ^ 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. Consultado el 25 de enero de 2021 .
  55. ^ 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 .[ enlace muerto ]
  56. ^ 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 : 1–17. doi : 10.1109/ACCESS.2024.3406935 . ISSN  2169-3536 . Consultado el 24 de julio de 2024 .
  57. ^ "CREADOR: Simulador didáctico y genérico para la programación en ensamblador" (en español). 23 de julio de 2021. Archivado desde el original el 29 de septiembre de 2021 . Consultado el 29 de septiembre de 2021 .
  58. ^ Camarmas-Alonso, Diego; Garcia-Carballeira, Felix; Del-Pozo-Punal, Elias; Mateos, Alejandro Calderon (2 de agosto de 2022). Un nuevo simulador genérico para la enseñanza de la programación en ensamblador. 2021 XLVII Congreso Latinoamericano de Computación (CLEI). pp. 1–9. doi :10.1109/CLEI53233.2021.9640144. ISBN 978-1-6654-9503-5. S2CID  245387555 . Consultado el 2 de agosto de 2022 .
  59. ^ "Ejemplo de CREATOR Web con MIPS32". Archivado desde el original el 29 de septiembre de 2021.
  60. ^ Código fuente de CREATOR en GitHub
  61. ^ "WepSIM con un ejemplo de MIPS32". WepSIM . Archivado desde el original el 25 de julio de 2022 . Consultado el 25 de julio de 2022 .
  62. ^ Código fuente de WepSIM en GitHub

Lectura adicional

Enlaces externos