stringtranslate.com

Arquitectura MIPS

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

Existen varias 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 MIPS eran de 32 bits; Posteriormente se desarrollaron versiones de 64 bits. En abril de 2017, la versión actual de MIPS es MIPS32/64 Versión 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 , que es un conjunto simple de instrucciones SIMD de punto flotante dedicadas a tareas 3D comunes, [6] MDMX (MaDMaX), que es un conjunto de instrucciones SIMD entero más extenso que utiliza registros de punto flotante de 64 bits, MIPS16e que agrega compresión al flujo de instrucciones para hacer que los programas ocupen menos espacio, [7] y MIPS MT, que agrega capacidad de subprocesos múltiples . [8]

Los cursos de arquitectura informática en universidades y escuelas técnicas suelen estudiar la arquitectura MIPS. [9] La arquitectura influyó mucho en las arquitecturas RISC posteriores, como Alpha . En marzo de 2021, MIPS anunció que el desarrollo de la arquitectura MIPS había finalizado mientras la empresa estaba 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 R2000 se introdujeron juntos en 1985. [11] [ verificación fallida ] Cuando se introdujo 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 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 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 R4000, estableciendo el consorcio Advanced Computing Environment (ACE) para avanzar en su estándar Advanced RISC Computing (ARC), cuyo objetivo era 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 supercomputadoras y sistemas integrados de alta gama. Finalmente, MIPS III se implementó mediante varios microprocesadores integrados. El R4600 de Quantum Effect Design (1993) y sus derivados se utilizaron ampliamente en sistemas integrados de alta gama y estaciones de trabajo y servidores de gama baja. El R4200 de MIPS Technologies (1994) fue diseñado para sistemas integrados, computadoras portátiles y personales. En la consola de juegos Nintendo 64 se utilizó un derivado, el R4300i, fabricado por NEC Electronics . La Nintendo 64, junto con la PlayStation , estuvieron entre los usuarios de mayor volumen de procesadores de arquitectura MIPS a mediados de los años 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 sólo 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 MIPS Technologies R10000 (1996) y 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 Emotion Engine de Sony Computer Entertainment , que impulsaba su consola de juegos PlayStation 2 .

Anunciado el 21 de octubre de 1996 en el Microprocesador 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 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"). La primera iba a haber sido la primera implementación de MIPS V y debía introducirse en 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 ningún MIPS V implementaciones, 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 volvió a centrar en 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 necesaria ] y se cambió la definición de la arquitectura para definir una arquitectura de 32 y 64 bits: MIPS32 y MIPS64. Ambos 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ó. Desde entonces, Philips , LSI Logic , IDT , Raza Microelectronics, Inc. , Cavium , Loongson Technology e Ingenic Semiconductor se han unido 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, la versión 4 se omitió porque el número cuatro se percibe como desafortunado 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 ningún tipo de licencia o regalías, así como otorgar a los participantes licencias para patentes MIPS existentes. [19] [20] [21]

En marzo de 2019, una versión de la arquitectura estuvo disponible bajo una licencia libre de regalías, [22] pero ese mismo año el programa se cerró nuevamente. [23]

En marzo de 2021, Wave Computing anunció que había cesado el desarrollo de la arquitectura MIPS. 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 una nueva extensión de ISA compatibles con MIPS por su cuenta. [25]

En enero de 2024, Loongson ganó un caso sobre los derechos para utilizar la arquitectura MIPS. [26]

Diseño

MIPS es una arquitectura modular que admite hasta cuatro coprocesadores (CP0/1/2/3). En terminología MIPS, CP0 es el coprocesador de control del sistema (una parte esencial del procesador definido por la implementación en MIPS I-V), CP1 es una unidad de punto flotante (FPU) opcional y CP2/3 son coprocesadores opcionales definidos por la implementación. (MIPS III eliminó CP3 y reutilizó sus códigos de operación para otros fines). Por ejemplo, en la consola de videojuegos PlayStation , CP2 es el Geometry Transformation Engine (GTE), que acelera el procesamiento de la geometría en gráficos por computadora en 3D.

Versiones

MIPS I

MIPS es una arquitectura de carga/almacenamiento (también conocida como arquitectura 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. Registro $31 es el registro de enlace. Para las instrucciones de multiplicación y división de 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 32 bits de longitud y están alineadas con sus límites naturales de palabras.

Formatos de instrucción

Las instrucciones se dividen en tres tipos: R (registro), I (inmediata) 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 turno y un campo de función; Las instrucciones de tipo I especifican dos registros y un valor inmediato de 16 bits; Las instrucciones tipo J siguen el 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 principales:

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. Sólo se admite un modo de direccionamiento : base + desplazamiento. Dado que MIPS I es una arquitectura de 32 bits, cargar cantidades inferiores a 32 bits requiere que el dato se extienda con signo o con cero a 32 bits. Las instrucciones de carga con el sufijo "unsigned" realizan una extensión cero; de lo contrario, se realiza la extensión de la señal. Las instrucciones de carga obtienen la base del contenido de un GPR (rs) y escriben el resultado en otro GPR (rt). Las instrucciones de la tienda obtienen la base del contenido de un GPR (rs) y los datos de la tienda 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 naturales de palabras; de lo contrario, se señala una excepción. Para admitir accesos eficientes a la memoria no alineada, existen instrucciones de carga/almacenamiento de palabras con el sufijo "izquierda" o "derecha". Todas las instrucciones de carga van seguidas de un intervalo 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 sumas y restas. Estas instrucciones obtienen sus operandos de dos GPR (rs y rt) y escriben el resultado en un tercer GPR (rd). Alternativamente, la suma puede generar uno de los operandos a partir de un inmediato de 16 bits (que tiene un signo extendido a 32 bits). Las instrucciones de suma y resta tienen dos variantes: por defecto, se señala una excepción si el resultado se desborda; Las instrucciones con el sufijo "sin firmar" no indican una excepción. La comprobación de desbordamiento interpreta el resultado como un entero de 32 bits en complemento a dos. MIPS I tiene instrucciones para realizar AND, OR, XOR y NOR lógicos 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 también pueden generar uno de los operandos a partir de un inmediato de 16 bits (que se extiende en cero 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 GPR o un GPR y un inmediato de 16 bits (que tiene un signo extendido a 32 bits) y escriben el resultado en un tercer GPR. De forma 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 aquellos que obtienen un operando del inmediato de 16 bits con signo extendido).

La instrucción Cargar Inmediato Superior copia el 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 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 cambio se obtiene de un GPR (rs) o de una "cantidad de cambio" de 5 bits (el campo "sa").

MIPS I tiene instrucciones para la multiplicación y división de 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 y 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 entrelazadas: las lecturas de HI y LO no pasan de una instrucción aritmética inacabada que se 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 escriben en HI o LO.

Todas las instrucciones de flujo de control MIPS I van seguidas de una ranura de retardo de rama . A menos que el espacio de retardo de bifurcación esté ocupado por una instrucción que realiza 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 con signo el resultado de 18 bits y sumando el resultado con signo extendido de 32 bits a la suma del contador del programa (dirección de instrucción) y 8 10 . Los saltos tienen dos versiones: absoluto e indirecto 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 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 rama. Los saltos de registro indirecto transfieren el control a la instrucción en la dirección procedente de un GPR (rs). La dirección proveniente del GPR debe estar alineada con palabras; de lo contrario, se señala 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 "Registro de salto y enlace") guardan la dirección de retorno en GPR 31. La instrucción "Registro de salto y enlace" permite que la dirección de retorno se guarde en cualquier GPR grabable.

MIPS I tiene dos instrucciones para que el software señale una excepción: llamada al sistema y punto de interrupción. La llamada al sistema es utilizada por el software en modo usuario para realizar llamadas al kernel; y Breakpoint se utiliza para transferir el control a un depurador a través del controlador de excepciones del kernel. Ambas instrucciones tienen un campo 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. Se emparejan dos registros para números de doble precisión. Los registros impares no se pueden usar para aritmética o bifurcación, 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/almacenamiento no se vieron afectados).

La precisión simple se indica con el sufijo .s, mientras que la precisión doble se indica con el sufijo .d.

MIPSII

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 vinculada y Almacenar palabra condicional . [28] Se agregó un conjunto de instrucciones de trampa en condición. Estas instrucciones provocaron una excepción si la condición evaluada es verdadera. A todas las instrucciones de bifurcación existentes se les dieron versiones probables de bifurcación que ejecutaban la instrucción en el intervalo de retardo de bifurcación solo si se tomaba la bifurcación. [3] : 40  Estas instrucciones mejoran el rendimiento en ciertos casos al permitir que instrucciones útiles llenen el espacio de retardo de rama. [3] :  Se agregaron 212 instrucciones de carga y almacenamiento de palabras dobles para COP1–3. De acuerdo con otras instrucciones de acceso a la memoria, estas cargas y almacenes requerían que la palabra doble estuviera alineada de forma natural.

Al conjunto de instrucciones para el coprocesador de punto flotante también se le agregaron varias instrucciones. 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. Estos complementaron las instrucciones de conversión existentes al permitir que la instrucción especifique el modo de redondeo IEEE en lugar del registro de estado y control de punto flotante.

MIPSIII

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 amplió 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 registros GPR y HI/LO. Para el multiprocesamiento de memoria compartida, se agregaron las instrucciones Cargar palabra doble vinculada y Almacenar palabra doble condicional . [28] Las instrucciones existentes originalmente definidas para operar con palabras de 32 bits se redefinieron, cuando fue necesario, para extender los resultados de 32 bits y permitir que las palabras y las palabras dobles fueran tratadas de manera idéntica por la mayoría de las instrucciones. Entre esas instrucciones redefinidas estaba Cargar Word . En MIPS III, extiende las palabras a 64 bits. Para complementar Load Word , se agregó una versión que se extiende 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 desplazamiento MIPS I. instrucción. La primera versión es una versión de 64 bits de las instrucciones de cambio originales, utilizada para especificar distancias de cambio constantes de 0 a 31 bits. La segunda versión es similar a la primera, pero agrega 32 10 el 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 a partir 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 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 recibieron 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 únicamente registros pares. Esto es incompatible con versiones anteriores de la arquitectura; un bit en el registro de estado/control de punto flotante se utiliza para operar la unidad de punto flotante (FPU) MIPS III en un modo compatible con MIPS I y II. Los registros de control de punto flotante no se ampliaron por motivos de compatibilidad. Las únicas instrucciones nuevas de punto flotante agregadas fueron aquellas para copiar palabras dobles entre la CPU y la FPU, convertir números de punto flotante de precisión simple y doble en enteros de palabra doble y viceversa.

MIPSIV

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 del 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 almacenes de FP, al igual que instrucciones de captación previa para realizar la captación previa de memoria y especificar sugerencias de caché (éstas admitían tanto la base + desplazamiento como la base). + modos de direccionamiento de í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 eleva 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 escribió o se leyó (respectivamente); y se eliminó la ranura de retardo entre una rama de FP que leía el bit de condición escrito en una comparación de FP anterior. Se agregó soporte para predicción parcial en forma de instrucciones de movimiento condicionales tanto para GPR como para FPR; y una implementación podrí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 de FP realizan uno o dos redondeos (está definido por la implementación) para exceder o cumplir los requisitos de precisión de IEEE 754 (respectivamente). Las instrucciones recíprocas y 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 del último lugar (está definido por la implementación). Estas instrucciones sirven para aplicaciones en las que la latencia de las instrucciones es más importante que la precisión.

MIPSV

MIPS V agregó un nuevo tipo de datos, Paired Single (PS), que constaba de 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 instrucciones de punto flotante existentes para aritmética, comparación y movimiento condicional para operar con este tipo de datos en forma SIMD. Se agregaron nuevas instrucciones para cargar, reorganizar y convertir datos PS. [3] : 426–429  Fue el primer conjunto de instrucciones que explotó SIMD de punto flotante con recursos existentes. [13]

MIPS32/MIPS64

La primera versión de MIPS32, basada en MIPS II, agregó movimientos condicionales, instrucciones de captación previa y otras características de las familias de procesadores de 64 bits R4000 y R5000. [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] Con el fin de controlar el caché, se prepararon instrucciones SYNCy . [30] [31]SYNCI

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

Se eliminaron instrucciones de uso poco frecuente:

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 el 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 Versión 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 correspondiente subconjunto MIPS32/64. A partir de MIPS32/64 versión 6, 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 básicas 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). Estos ASE proporcionan funciones que mejoran la eficiencia y el rendimiento de determinadas cargas de trabajo, como el procesamiento de señales digitales .

Microcontrolador MIPS
Mejoras para aplicaciones de microcontroladores. La MCU ASE (extensión específica de la aplicación) se ha desarrollado para ampliar el soporte del controlador de interrupciones , reducir la latencia de interrupción y mejorar la función de control periférico de E/S que normalmente se requiere en los diseños de sistemas de microcontroladores.
MIPS16
MIPS16 es una extensión de aplicación específica 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 obtuvo posteriormente la licencia de NEC Electronics , Philips Semiconductors y Toshiba (entre otros); e implementado como una extensión de las arquitecturas MIPS I, II y III. MIPS16 reduce el tamaño de la aplicación hasta en un 40 % al utilizar 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] Está respaldado por herramientas de desarrollo de hardware y software de MIPS Technologies y otros proveedores. MIPS16e es una versión mejorada de MIPS16 compatible por primera vez con MIPS32 y MIPS64 versión 1. MIPS16e2 es una versión mejorada de MIPS16 compatible con MIPS32 y MIPS64 (hasta la versión 5). La versión 6 lo reemplazó con microMIPS.
Procesamiento de señales digitales (DSP) MIPS
El DSP ASE es una extensión opcional de MIPS32/MIPS64 Versión 2 y conjuntos de instrucciones más nuevos que se pueden utilizar para acelerar una amplia gama de cálculos de "medios", particularmente audio y video. El módulo DSP comprende un conjunto de instrucciones y estados en la canalización de números enteros y requiere una lógica adicional mínima para implementarse en los núcleos del procesador MIPS. La revisión 2 del ASE se introdujo en la segunda mitad de 2006. Esta revisión agrega instrucciones adicionales al ASE original, pero por lo demás es compatible con él. [35] A diferencia de la mayor parte de la arquitectura MIPS, es un conjunto de operaciones bastante irregular, muchas de ellas elegidas por una relevancia particular para algún algoritmo clave. Sus principales características novedosas (frente al MIPS32 original): [36]
Arquitectura MIPS SIMD (MSA)
Extensiones de conjuntos de instrucciones diseñadas para acelerar multimedia.
virtualización MIPS
Tecnología de virtualización soportada por hardware.
MIPS multiproceso
Cada núcleo MIPS de subprocesos múltiples 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 visto por el sistema de software, cada VPE aparece como un procesador independiente completo para un sistema operativo SMP Linux. Para aplicaciones de procesamiento de subprocesos más detalladas, cada VPE es capaz de 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 central 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 hilo sobre otro. El segundo mecanismo se utiliza para asignar una proporción específica de ciclos a subprocesos específicos a lo largo del tiempo. El uso combinado de ambos mecanismos permite una asignación efectiva de ancho de banda al conjunto de subprocesos y un mejor control de las latencias. En los sistemas en tiempo real, el determinismo a nivel del sistema es muy crítico y el bloque QoS facilita la mejora de la previsibilidad 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 adaptado a su aplicación.
SmartMIPS
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 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 llamadas, especialmente en la plataforma de 32 bits.

El O32 ABI es el ABI más utilizado, debido a su condición de ABI System V original para MIPS. [37] [38] Está estrictamente basado en pila, con sólo cuatro registros $a0 - $a3 disponibles para pasar argumentos. El espacio en la pila se reserva en caso de que la persona que llama necesite guardar sus argumentos, pero la persona que llama no almacena los registros allí. El valor de retorno se almacena en el registro $v0 ; se puede almacenar un segundo valor de retorno en $v1 . El ABI tomó forma en 1990 y se actualizó por última vez en 1994. Esta lentitud percibida, junto con un antiguo modelo de punto flotante con sólo 16 registros, ha fomentado la proliferación de muchas otras convenciones de llamadas. Sólo está definido para MIPS de 32 bits, pero GCC ha creado una variación de 64 bits llamada O64. [39]

Para 64 bits, el N64 ABI de Silicon Graphics es el más utilizado. La mejora más importante es que ahora hay ocho registros disponibles para pasar 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 al ABI x32 . Ambos se ejecutan en 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 a la pila. El valor de retorno (o un puntero a él) se almacena en los registros $v0 ; se puede almacenar un segundo valor de retorno en $v1 . Tanto en las ABI N32 como en N64, se considera que todos los registros tienen 64 bits de ancho.

Se han realizado algunos intentos de reemplazar O32 con un ABI de 32 bits que se parece más a N32. En una conferencia de 1995 se propuso MIPS EABI, cuya 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 registros de argumentos para el valor de retorno. [41] MIPS EABI es compatible con GCC pero no con LLVM, y ninguno de los dos es compatible con NUBI.

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

Tanto en O32 como en 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 usa, 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 la 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 ( $30 ). La ABI de O32 es la misma excepto que se requiere que la función de llamada guarde el registro $gp en lugar de la función llamada.

Para el código de subprocesos múltiples, el puntero de almacenamiento local del subproceso generalmente se almacena 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 uso del kernel, pero esto no es estándar.

Los registros $k0 y $k1 ( $26$27 ) están reservados para uso del kernel y no deben ser utilizados por las aplicaciones, ya que el kernel puede cambiar estos registros en cualquier momento debido a interrupciones, cambios de contexto u otros eventos.

Los registros que se conservan a través de una llamada son registros que (por convención) no serán cambiados por una llamada al sistema o una llamada a un procedimiento (función). Por ejemplo, los registros $s deben guardarse en la pila mediante un procedimiento que necesite usarlos, y $sp y $fp siempre se incrementan mediante constantes y se reducen nuevamente después de que el procedimiento finaliza con ellos (y la memoria a la que apuntan). a). Por el contrario, $ra se cambia automáticamente mediante cualquier llamada a función normal (las que usan jal), y el programa debe guardar los registros $t antes de cualquier llamada a procedimiento (si el programa necesita los valores dentro de ellos después de la llamada).

La convención de llamada al 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 del Sistema V para MIPS. [46]

Usos

Los procesadores MIPS se utilizan en sistemas integrados como puertas de enlace residenciales y enrutadores . Originalmente, MIPS fue diseñado para informática de propósito general. Durante las décadas de 1980 y 1990, muchas empresas utilizaron procesadores MIPS para computadoras personales , estaciones de trabajo y servidores , como Digital Equipment Corporation , MIPS Computer Systems , NEC , Pyramid Technology , SiCortex , Siemens Nixdorf , Silicon Graphics y Tandem Computers .

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 estos sistemas han abandonado la lista TOP500 . Estos usos se complementaron al principio con aplicaciones integradas, 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 estaban destinados 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. [47]

A finales de la década de 2010, las máquinas MIPS todavía se utilizaban habitualmente en mercados integrados, incluidos los de automoción, enrutadores inalámbricos, módems LTE (principalmente a través de MediaTek ) y microcontroladores (por ejemplo, Microchip Technology PIC32M ). 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 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, 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 básicos y plataformas para iniciar imágenes binarias de Linux sin modificar. Estas plataformas-emuladores están disponibles como código fuente o binarios y son rápidos, gratuitos para uso no comercial y fáciles de usar. Imperas desarrolla y mantiene OVPsim, 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.

Hay un simulador MIPS32 disponible gratuitamente (las versiones anteriores simulaban solo el R2000/R3000) llamado SPIM para uso en educación. EduMIPS64 [50] es un simulador gráfico de CPU MIPS64 multiplataforma GPL, escrito en Java/Swing. Admite un amplio subconjunto de MIPS64 ISA y permite al usuario ver gráficamente lo que sucede en el proceso cuando la CPU ejecuta un programa ensamblador.

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

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

QtMips [53] [54] [55] 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 arquitectura informática. Windows, Linux , macOS y la versión en línea están disponibles.

Hay emuladores gratuitos más avanzados disponibles en los proyectos GXemul (anteriormente conocido como proyecto mips64emul) y QEMU . Estos emulan los distintos 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] 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 [60] [61] 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 (microprogramación, rutinas MIPS, interrupciones, llamadas al sistema, etc.)

Ver también

Referencias

  1. ^ 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) desde el 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). Consulte Ejecución de MIPS . 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. ^ "ASE MIPS-3D". Tecnologías de la imaginación . 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 multiproceso". 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 herramientas y referencias 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 . Consultado el 17 de mayo de 2023 .
  12. ^ "Silicon Graphics presenta la arquitectura MIPS mejorada para liderar la revolución digital interactiva" (Presione soltar). 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 agrega extensiones multimedia" (PDF) . Informe del microprocesador . 10 (15): 24-28. Archivado (PDF) desde el original el 20 de julio de 2011.
  14. ^ "Silicon Graphics presenta una vista previa de la nueva hoja de ruta del microprocesador MIPS de alto rendimiento" (Presione soltar). 12 de mayo de 1997.
  15. ^ abcde "MIPS Technologies, Inc. mejora la arquitectura para respaldar la creciente necesidad de reutilización e integración de IP" (Comunicado de prensa). Cable comercial . 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 funcionalidad clave SIMD para permitir la próxima generación de productos basados ​​en MIPS" (Comunicado de prensa). Tecnologías MIPS . 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". Tiempos EE.UU. 10 de diciembre de 2012. Archivado desde el original el 17 de abril de 2014.
  18. ^ "Wave Computing amplía el liderazgo en IA al apuntar al 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 para 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". Tiempos EE.UU. Consultado el 18 de julio de 2022 .
  22. ^ "La arquitectura MIPS R6 ahora 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 abierta MIPS con efecto inmediato, advertencia cero". 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 la bancarrota" (Presione soltar). 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 Rips MIPS: utiliza código antiguo para CPU nuevas". Hardware de Tom . 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 chino de chips Loongson gana el caso sobre los derechos de la arquitectura MIPS: la nueva arquitectura de CPU de la empresa se parece mucho a los MIPS existentes". Hardware de Tom . Archivado desde el original el 19 de enero de 2024 . Consultado el 19 de enero de 2024 .
  27. ^ Harris, David Dinero; Harris, Sarah L. (2013). "Arquitectura". Diseño Digital y Arquitectura de Computadores . Elsevier. págs. 294–369. doi :10.1016/b978-0-12-394424-5.00006-9. ISBN 9780123944245. El tipo R es la abreviatura de tipo de registro. Las instrucciones de tipo R utilizan tres registros como operandos: dos como origen y uno como destino.
  28. ^ ab "NOTA DE APLICACIÓN Primitivas de sincronización MIPS R4000" (PDF) . pag. 5 . Consultado el 27 de diciembre de 2023 .
  29. ^ Conjunto de instrucciones MIPS IV (PDF) (Revisión 3.2 ed.). Tecnologías MIPS . Septiembre de 1995.
  30. ^ "Conjunto de instrucciones MIPS R5" (PDF) . pag. 59-62 . Consultado el 15 de diciembre de 2023 .
  31. ^ "Especificación del protocolo de coherencia MIPS®, revisión 01.01" (PDF) . pag. 26,25,57 . Consultado el 15 de diciembre de 2023 .
  32. ^ "MIPS: soluciones de procesador IP de 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 MIPS RISC compacto para un alto rendimiento a bajo costo" (Comunicado 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. ^ Dulce, Dominic (2007). Consulte MIPS Run, 2.ª edición . Morgan Kaufman. ISBN 978-0-12088-421-6.
  38. ^ "Referencia rápida del conjunto de instrucciones MIPS32". Archivado (PDF) desde el 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). "documentación mips eabi". [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). "Las 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) desde el original el 30 de septiembre de 2020.
  44. ^ Manual de MIPSpro N32 ABI (PDF) . Gráficos de silicio . 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. ^ "Suplemento del procesador MIPS RISC de interfaz binaria de aplicación System V, tercera edición" (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) desde el 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". Cursos.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}}: Mantenimiento CS1: copia archivada como título ( enlace )(fuente)
  53. ^ QtMips: simulador de CPU MIPS con fines educativos en GitHub
  54. ^ Kočí, Karel (2018). Simulador gráfico de CPU con visualización de caché (PDF) (Maestría). Universidad Técnica Checa de Praga . Archivado (PDF) desde el 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. ^ "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 .
  57. ^ 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 ensamblador. 2021 XLVII Congreso Latinoamericano de Computación (CLEI) (en español). págs. 1–9. doi :10.1109/CLEI53233.2021.9640144. ISBN 978-1-6654-9503-5. S2CID  245387555 . Consultado el 2 de agosto de 2022 .
  58. ^ "Ejemplo de CREATOR Web con MIPS32". Archivado desde el original el 29 de septiembre de 2021.
  59. ^ Código fuente CREADOR en GitHub
  60. ^ "WepSIM con un ejemplo de MIPS32". WepSIM .
  61. ^ Código fuente de WepSIM en GitHub

Otras lecturas

enlaces externos