fbpx
Wikipedia

MIPS (procesador)

Con el nombre de MIPS (siglas de Microprocessor without Interlocked Pipeline Stages) se conoce a toda una familia de microprocesadores de arquitectura RISC desarrollados por MIPS Technologies.

Un microprocesador MIPS R4400 fabricado por Toshiba

Los diseños del MIPS son utilizados en la línea de productos informáticos de SGI; en muchos sistemas embebidos; en dispositivos para Windows CE; routers Cisco; y videoconsolas como la Nintendo 64 o las Sony PlayStation, PlayStation 2 y PlayStation Portable. Más recientemente, la NASA usó uno de ellos en la sonda New Horizons[1]

Las primeras arquitecturas MIPS fueron fsfs en 32 bits (generalmente rutas de datos y registros de 32 bits de ancho), si bien versiones posteriores fueron implementadas en 64 bits. Existen cinco revisiones compatibles hacia atrás del conjunto de instrucciones del MIPS, llamadas MIPS I, MIPS II, MIPS III, MIPS IV y MIPS 32/64. En la última de ellas, la MIPS 32/64 Release 2, se define a mayores un conjunto de control de registros. Así mismo, están disponibles varias "extensiones", tales como la MIPS-3D, consistente en un simple conjunto de instrucciones SIMD en coma flotante dedicadas a tareas 3D comunes, la MDMX(MaDMaX) compuesta por un conjunto más extenso de instrucciones SIMD enteras que utilizan los registros de coma flotante de 64 bits, la MIPS16 que añade compresión al flujo de instrucciones para hacer que los programas ocupen menos espacio (presuntamente como respuesta a la tecnología de compresión Thumb de la arquitectura ARM) o la reciente MIPS MT que añade funcionalidades multithreading similares a la tecnología HyperThreading de los procesadores Intel Pentium 4.

Debido a que los diseñadores crearon un conjunto de instrucciones tan claro, los cursos sobre arquitectura de computadores en universidades y escuelas técnicas a menudo se basan en la arquitectura MIPS. El diseño de la familia de CPU's MIPS influiría de manera importante en otras arquitecturas RISC posteriores como los DEC Alpha.

Historia

En 1981, un equipo liderado por John L. Hennessy en la Universidad de Stanford comenzó a trabajar en lo que se convertiría en el primer procesador MIPS. La idea básica era mejorar drásticamente el rendimiento mediante el uso de la segmentación, una técnica que ya era entonces muy conocida pero también difícil de implementar. Su funcionamiento puede resumirse en que la ejecución de una instrucción es dividida en varias etapas, comenzando la "etapa 1" de una instrucción antes de que haya finalizado la ejecución de la instrucción anterior. En contraste, los diseños tradicionales esperaban la finalización por completo de una instrucción antes de pasar a la siguiente, de modo que grandes áreas de la CPU permanecían inactivas mientras el proceso continuaba. Además, la frecuencia de reloj de toda la CPU venía dictada por la latencia del ciclo completo, en lugar de por el llamado camino crítico, latencia de la etapa de segmentación que más tarda en completarse.

Otra de las grandes barreras a superar por la segmentación era la necesidad de introducir bloqueos para poder asegurarse de que las instrucciones que necesitan varios ciclos de reloj para completarse dejan de cargar datos desde los registros de segmentación. Estos bloqueos pueden durar cantidades de tiempo considerables, y suponían una gran barrera a mejoras de velocidad posteriores. Por ello, uno de los principales aspectos del diseño del MIPS fue el marcarse como objetivo que todas las subfases (incluyendo el acceso a memoria) de todas las instrucciones tardasen un único ciclo en completarse, dejando así de ser necesarios los bloqueos, y permitiendo un rendimiento de un solo ciclo.

Aunque esta idea de diseño eliminó numerosas instrucciones útiles, destacando el hecho de que la multiplicación y la división necesitarían varias instrucciones, en conjunto se sabía que el rendimiento general del sistema sería drásticamente mejorado al poder funcionar los chips a frecuencias mucho mayores. Este ascenso de la velocidad sería difícil con la intervención de los bloqueos, pues el tiempo necesario es función del tamaño del chip y de la frecuencia de reloj: añadir el hardware necesario para evitarlos reduciría notablemente la velocidad del sistema.

La eliminación de estas instrucciones se convirtió en un tema polémico. Muchos observadores afirmaron que ese diseño (y los procesadores RISC en general) nunca superaría sus ambiciosas expectativas ("Si uno sencillamente sustituye la instrucción compleja de multiplicación por una simple serie de sumas, ¿dónde se produce el incremento de velocidad?"). Este análisis tan simplista ignoraba el hecho de que la velocidad del diseño residía en la segmentación, no en las instrucciones.

En 1984 Hennessy se convenció del futuro potencial comercial del diseño, dejando Stanford para formar MIPS Computer Systems. La empresa presentó su primer diseño, el R2000, en 1985, siendo mejorado con el R3000 de 1988. Estas CPU's de 32 bits fueron la base de la compañía durante los 80, y fueron empleadas principalmente en algunas series de workstations de SGI. Estos diseños comerciales se diferenciaron de los de investigación académica de Stanford en aspectos como la implementación de la mayoría de los bloqueos con hardware y el proporcionar instrucciones completas para la multiplicación y la división, entre otros.

En 1991 MIPS presentó su primer procesador de 64 bits, el R4000. Sin embargo, MIPS tuvo dificultades financieras en su lanzamiento al mercado. El diseño era tan importante para SGI, entonces uno de los pocos grandes clientes de MIPS, que en 1992 compró sin recelo alguno la compañía para evitar que se perdiera el diseño. Como subsidiaria de SGI, la compañía pasó a llamarse MIPS Technologies.

A principios de los 90 MIPS comenzó a otorgar licencias de sus diseños a terceros. Esto probó con justo éxito la simplicidad del núcleo, algo que le permitía ser empleado en numerosas aplicaciones que anteriormente utilizaban diseños CISC mucho menos capaces y de precio y número de puertas similares (comentar que ambas magnitudes están estrechamente relacionadas; el precio de una CPU está generalmente relacionado con el número de puertas y pines externos). Sun Microsystems intentó subirse al carro otorgando licencias de su núcleo SPARC, pero ni llegó a rozar el éxito del MIPS. A finales de los 90 MIPS tenía un caballo de batalla en los procesadores integrados, y en 1997 fue entregado el procesador MIPS 48 millones, convirtiéndose en la primera CPU RISC en desbancar a la famosa familia 68k de Motorola. La familia MIPS tuvo tanto éxito que SGI relanzó a MIPS Technologies en 1998. Más de la mitad de los ingresos de MIPS actualmente proceden de las concesiones de licencias, mientras que gran parte del resto procede de contratos de diseño de núcleos para ser fabricados por terceros.

En 1999 MIPS consolidó su sistema de licencias alrededor de dos diseños básicos, el MIPS32 de 32 bits y el MIPS64 de 64 bits. NEC, Toshiba y SiByte (posteriormente adquirida por Broadcom) obtuvieron licencias para el MIPS64 tan pronto como este procesador fue anunciado; a estas empresas les siguieron otras como Philips, LSI Logic e IDT. Los éxitos se sucedieron, y actualmente los núcleos MIPS son uno de los pesos pesados del mercado de dispositivos como los computadoras de mano o decodificadores y sintonizadoras de TV. Un indicio de su éxito es el hecho de que Freescale (filial de Motorola) utilice procesadores MIPS en sus aparatos, en lugar de otros propios basados en el PowerPC.

Desde que la arquitectura MIPS es licenciable, ha atraído a numerosas compañías jóvenes a lo largo de los años. Una de las primeras nuevas compañías en diseñar procesadores MIPS fue Quantum Effect Devices. El equipo de diseño de MIPS encargado del R4300 fundó SandCraft, que diseñó el R5432 para NEC y posteriormente el SR7100, uno de los primeros procesadores basados en ejecución fuera de orden para sistemas embebidos. El equipo original de diseño del DEC StrongARM finalmente se dividió en dos compañías MIPS: SiByte, fabricante del SB-1250, uno de los primeros sistemas de chip único de alto rendimiento basados en el MIPS; y Alchemy Semiconductor (más tarde comprada por AMD), que fabricaba el sistema de chip único Au-1000 para aplicaciones poco exigentes. Lexra utilizó arquitectura pseudo-MIPS y añadió extensiones DSP para el mercado de los chips de audio y soporte multithreading para el mercado de redes. Debido a que Lexra no era concesionaria de ninguna licencia MIPS, dos pleitos fueron abiertos entre ambas empresas. El primero se resolvió rápidamente al prometer Lexra no seguir anunciando sus procesadores como MIPS-compatibles. El segundo fue largo y dañó los intereses de ambas compañías, terminando con la concesión por parte de MIPS de una licencia gratuita a Lexra, así como el pago de una gran cantidad de dinero.

Familia de CPU's

 
Esquema de la segmentación del MIPS.

El primer modelo de CPU comercial de MIPS, el R2000, fue anunciado en 1985. Añadía instrucciones multiciclo para la multiplicación y la división en una unidad independiente integrada en el procesador. Asimismo se añadieron instrucciones para enviar los resultados de esta unidad al núcleo; las cuales necesitaban bloqueos.

El R2000 podía ser iniciado tanto en formato big-endian como little-endian. Tenía 32 registros de propósito general de 32 bits, pero no contaba con un registro de estado, lo que suponía un considerable cuello de botella. Este problema lo compartía con el AMD 29000 y el DEC Alpha. Al contrario que otros registros, el contador de programa no es directamente accesible.

El R2000 además soportaba hasta cuatro co-procesadores, uno de los cuales estaba integrado en la CPU principal para el manejo de excepciones e interrupciones, mientras que los otros tres estaban destinados a otros usos. Una opción era añadir la unidad de punto flotante R2010, que contaba con 32 registros de 32 bits que podían ser empleados como tales para manejar números en simple precisión o bien como 16 registros de 64 bits en doble precisión.

El R3000 sucedería al R2000 en 1988, añadiendo una caché de 32 kB (pronto aumentada a 64 kB) para instrucciones y datos, junto con el soporte de "coherencia caché" para el uso multiprocesador. Mientras hubo defectos en el soporte multiprocesador del R3000, MIPS se las siguió arreglando para que formase parte de varios diseños exitosos de multiprocesador. El R3000 también incluía una unidad de manejo de memoria (MMU) integrada, característica común entre los procesadores del momento. El R3000 fue el primer diseño exitoso de MIPS en el mercado, y finalmente fueron fabricadas más de 1 millón de unidades. El R3000A, utilizado en la extremadamente exitosa Sony PlayStation, fue una versión acelerada hasta los 40 MHz. Al igual que el R2000, el R3000 fue emparejado con la FPU R3010. Pacemips fabricó el R3400 e IDT el R3500, siendo ambos modelos procesadores R3000s con la FPU R3010 en un único chip. El Toshiba R3900 fue el primer sistema de chip único para los primeros ordenadores de mano con Windows CE.

En la serie R4000, presentada en 1991, se extendió el juego de instrucciones del MIPS para constituir una auténtica arquitectura de 64 bits y se movió la FPU al mismo circuito para crear un sistema de chip único, operando a una velocidad de reloj radicalmente superior (inicialmente 100 MHz). Sin embargo, para poder alcanzar tal frecuencia las cachés fueron reducidas a 8 kB cada una, siendo necesarios tres ciclos de reloj para acceder a ellas. Las altas frecuencias de trabajo fueron alcanzadas gracias a la técnica de segmentación profunda (llamada entonces super-segmentación). Tras el R4000 nació un gran número de versiones mejoradas, incluyendo la R4400 de 1993 con cachés de 16 kB, operaciones de 64 bits sin apenas errores y un controlador para otra caché externa (L2) de 1 MB.

MIPS, actualmente una división de SGI llamada MTI, diseñó la versión de bajo coste R4200, y posteriormente la aún más barata R4300, consistente en un R4200 con bus externo de 32 bits. La Nintendo 64 usa una CPU NEC VR4300 basada en el MIPS de bajo coste R4300i.[2]

Quantum Effect Devices (QED), una compañía aparte fundada por antiguos ingenieros de MIPS, diseñaron el R4600 "Orion", el R4700 "Orion", el R4650 y el R5000. Mientras que el R4000 aumentó la frecuencia a cambio de reducir capacidad de caché, los diseños de QED destacaron por las grandes cachés accesibles en solo dos ciclos de reloj y por el uso eficiente del área de silicio. Los R4600 y R4700 fueron utilizados en las versiones de bajo coste de las estaciones de trabajo SGI Indy así como en los primeros enrutadores Cisco basados en el MIPS, aquellos de las series 36x0 y 7x00. El R4650 fue empleado en los aparatos originales de WebTV (ahora Microsoft TV). La FPU R5000 trabajaba de forma más eficiente y flexible con números en simple precisión que la R4000, y como resultado, con similar hardware gráfico, las SGI Indy que montaban la FPU R5000 ofrecían mucho mejor rendimiento gráfico que las que contaban con la R4400. SGI rebautizó a las viejas tarjetas gráficas que incorporaron la R5000 para remarcar la mejora. QED posteriormente diseñó las familias RM7000 y RM9000 para sistemas embebidos como redes e impresoras láser. QED fue adquirida por el fabricante de semiconductores PMC-Sierra en agosto de 2000, siendo esta la última compañía en invertir en la arquitectura MIPS.

El R8000 (1994) fue el primer diseño MIPS superescalar, capaz de ejecutar dos operaciones de ALU y otras dos de memoria en cada ciclo de reloj. El diseño se plasmó en seis chips: una unidad entera (con dos cachés de 16 KB, una para instrucciones y otra L1 de datos), una unidad de punto flotante, tres RAM de caché secundaria totalmente personalizables (dos para accesos a caché secundaria y otra para bus), y un controlador de caché ASIC. El diseño tenía dos unidades segmentadas de suma-multiplicación en doble precisión, las cuales recibían el flujo de datos de la caché secundaria externa de 4 MB. El R8000 fue montado en los servidores SGI Power Challenge a mediados de los 90 y posteriormente en las estaciones de trabajo Power Indigo2. Su rendimiento limitado en operaciones enteras y su elevado coste lo hicieron impopular entre la mayoría de los usuarios, si bien el buen rendimiento de su FPU fue aprovechado por los usuarios científicos; el R8000 estuvo apenas un año en el mercado.

En 1995, fue lanzado el R10000. Este procesador era un diseño de chip único, con mayor velocidad de reloj que el R8000, y mayores cachés primarias de 32 kB para instrucciones y datos. Era también superescalar, pero su gran innovación fue ser "out-of-order". Aún con una FPU más simple, la vasta mejora en las operaciones con enteros, su menor precio y la mayor densidad hicieron del R10000 el preferido por muchos clientes.

Los diseños más recientes se basan en el R10000. El R12000 ha sido fabricado con tecnología mejorada para comprimir el chip y operar a mayor velocidad de reloj. La revisión R14000 permitía mayores frecuencias, soporte adicional para DDR SRAM en el chip externo de caché y un FSB de 200 MHz para un mejor transferencia. Las últimas versiones fueron llamadas R16000 y R16000A, caracterizándose por una mayor velocidad de reloj, caché L1 adicional y chips de menor tamaño en comparación con los anteriores.

Especificaciones del microprocesador MIPS
Modelo Frecuencia [MHz] Año Proceso [µm] Transistores [millones] Tamaño del chip [mm²] Pins E/S Potencia [W] Voltaje Dcache [k] Icache [k] Scache [k]
R2000 8-16,7 1985 2 0,11 -- -- -- -- 32 64 none
R3000 12-40 1988 1,2 0,11 66,12 145 4 -- 64 64 none
R4000 100 1991 0,8 1,35 213 179 15 5 8 8 1024
R4400 100-250 1992 0,6 2,3 186 179 15 5 16 16 1024
R4600 100-133 1994 0,64 2,2 77 179 4,6 5 16 16 512
R5000 150-200 1996 0,35 3,7 84 223 10 3,3 32 32 1024
R8000 75-90 1994 0,5 2,6 299 591 30 3,3 16 16 1024
R10000 150-250 1995 0,35 6,8 299 599 30 3,3 32 32 512
R12000 270-400 1998 0,18–0,25 6,9 204 600 20 4 32 32 1024
R14000 500-600 2001 0,13 7,2 204 527 17 -- 32 32 2048
R16000 700-800 2002 0,11 -- -- -- 20 -- 64 64 4096

Note: Estas especificaciones hacen referencia a las configuraciones más comunes. Existen variaciones, sobre todo en las cachés de nivel 2.

Aplicaciones

Entre los fabricantes de estaciones de trabajo basadas en procesadores MIPS destacan SGI, MIPS Computer Systems, Inc., Olivetti, Siemens-Nixdorf, Acer, Digital Equipment Corporation, NEC y DeskStation. Varios sistemas operativos fueron portados a la arquitectura, ejemplos de ello son el SGI IRIX, Microsoft Windows NT (aunque el soporte para MIPS finalizó con el lanzamiento de Windows NT 4.0) y Windows CE, Linux, BSD, UNIX System V, SINIX, MIPS Computer Systems RISC/os, entre otros.

Sin embargo, el uso del MIPS como procesador principal de estaciones de trabajo ha caído, y SGI ha anunciado sus planes de cesar el desarrollo de iteraciones de alto rendimiento de la arquitectura MIPS en favor de procesadores basados en la tecnología Intel IA64 (véase la sección "Otros modelos y planes futuros").

Por otra parte, el uso de microprocesadores MIPS en sistemas embebidos es probable que se mantenga gracias al bajo consumo de energía y características térmicas de las implementaciones integradas, así como a la gran disponibilidad de herramientas de desarrollo y de expertos conocedores de la arquitectura.

Otros modelos y planes futuros

Otro miembro de la familia MIPS es el R6000, una implementación ECL de la arquitectura MIPS fabricada por Bipolar Integrated Technology. El R6000 introdujo el juego de instrucciones MIPS II. Su arquitectura TLB y de caché son diferentes del resto de miembros de la familia MIPS. El R6000 no proporcionó los resultados esperados, y aunque fue empleado en algunas máquinas Control Data, rápidamente desapareció del mercado de los mainstream. El PMC-Sierra RM7000 fue una versión del R5000 con una caché integrada de nivel 2 de 256 kB y un controlador para una caché opcional de tercer nivel. Diseñado en un principio para sistemas embebidos como los procesadores gráficos SGI y varias soluciones de redes de Cisco. El nombre R9000 nunca fue utilizado.

SGI intentó una vez migrar de la plataforma MIPS a la Intel Itanium, habiendo terminado su desarrollo con el R10000. Los grandes retrasos en la presentación del Itanium hicieron que el número de procesadores basados en MIPS instalados continuó creciendo. En 1999 quedó claro que el proceso de desarrollo había sido cerrado demasiado pronto, y resultado de ello son las versiones R14000 y R16000. SGI tanteó la posibilidad de añadir una FPU más compleja al estilo de la del R8000 en las últimas iteraciones, así como la de lanzar un procesador de doble núcleo, pero los problemas financieros de la empresa y el uso oficial y soportado de la emulación QuickTransit para ejecutar binarios IRIX sobre Altix provocaron el cese definitivo del desarrollo de hardware IRIX/MIPS.

Loongson

Loongson es una familia de microprocesadores diseñados por la Academia China de Ciencias. La microarquitectura interna de los microprocesadores Loongson fue diseñado de forma independiente por los chinos. Las primeras implementaciones de la familia carecía de cuatro instrucciones, patentadas por MIPS Technologies. En junio de 2009, ICT obtuvo licencias MIPS32 y MIPS64 directamente de MIPS Technologies.

A partir de 2006, una serie de empresas empezaron a comercializar una serie de hardware con el procesador Loongson, incluyendo nettops y netbooks con un bajo consumo.[3][4][5]

Núcleos

En los últimos años gran parte de la tecnología empleada en las distintas generaciones MIPS ha sido ofrecida como diseños de "IP-cores" (bloques de construcción) para sistemas embebidos. Se ofertan los núcleos básicos de 32 y 64 bits, conocidos respectivamente como 4K y 5K respectivamente, y con licencias MIPS32 y MIPS64. Estos núcleos pueden ser combinados con unidades añadidas tales como FPUs, sistemas SIMD, dispositivos de E/S, etc.

Los núcleos MIPS han sido comercialmente exitosos, siendo empleados actualmente en muchas aplicaciones industriales y de consumo. Pueden encontrarse en los más modernos enrutadores Cisco, TP-Link y Linksys , cablemódems y módems ADSL, tarjetas inteligentes, controladoras de impresoras láser, decodificadores de TV, robots, ordenadores de mano, Sony PlayStation 2 y Sony PlayStation Portable.

En móviles y PDA's, sin embargo, el núcleo MIPS fue incapaz de desbancar a su competidor de arquitectura ARM.

Programación y emulación

Existe un simulador MIPS R2000/R3000 totalmente libre llamado SPIM compatible con varios sistemas operativos (específicamente Unix o GNU/Linux; Mac OS X; MS Windows 95, 98, NT, 2000, XP y DOS) ideado para el aprendizaje de la programación en ensamblador MIPS y de los conceptos generales del ensamblador RISC: http://www.cs.wisc.edu/~larus/spim.html

Otro simulador popular es MARS (MIPS Assembler and Runtime Simulator), un IDE (Integrated Design Environment) para programar MIPS en lenguaje Assembly. MARS es un entorno de desarrollo ligero e interactivo, escrito en java y compatible con muchas plataformas, cuyo propósito es su uso en el nivel educativo.

Un emulador MIPS más completo pertenece al proyecto GXemul (anteriormente conocido como Proyecto mips64emul), el cual no solo emula las diferentes versiones de los microprocesadores MIPS III y superiores (desde el R4000 al R10000), sino también sistemas enteros que utilicen esos procesadores. Por ejemplo, GXemul puede emular tanto una DECstation con un procesador MIPS R4400 (y arrancar en Ultrix) como un SGI O2 con CPU MIPS R10000 (si bien la capacidad de correr Irix es limitada), entre otros, así como también diferentes framebuffers y controladoras SCSI.

El software QEMU es capaz de emular también, entre muchas otras, la arquitectura MIPS y MIPSel, así como ejecutar GNU/Linux en la máquina emulada.

El simulador WepSIM[6][7]​ puede usarse desde un navegador Web. Es un simulador educativo que dispone de ejemplos con una implementación de un subconjunto de instrucciones MIPS de forma microprogramada. WepSIM facilita aprender diversos aspectos de cómo una CPU funciona (microprogramación, interrupciones, llamadas al sistema, etc.) pudiendo usar ensamblador MIPS.

Ejemplos de llamadas al sistema (usadas en SPIM)
Servicio Código trampa Entrada Salida Notas
print_int $v0=1 $a0= entero a imprimir imprime a0 en la salida estándar
print_string $v0=4 $a0= dirección del primer carácter imprime una cadena de caracterer en la salida estándar
sbrk $v0=9 $a0= número necesario de bytes $v0= dirección de memoria reservada Reserva memoria de la pila

Resumen del juego de instrucciones del R3000

Las instrucciones se dividen en tres tipos: R, I y J. Todas las instrucciones empiezan con un código de operación de 6 bits. Además del código de operación, en las instrucciones tipo R se especifican tres registros, un campo de tamaño de desplazamiento ('shamt') y otro para el código de función; Las tipo I especifican dos registros y un valor inmediato de 16 bits; en las tipo J al código de operación le siguen 26 bits de dirección destino de salto.[8][9]

Nombre de los registros, número, uso y convenciones de llamada (si es guardado en subrutina llamada):

Registros
Nombre Número Uso Preservado en subrutina llamada
$zero $0 constante entera 0
$at $1 temporal del ensamblador no
$v0–$v1 $2–$3 Valores de retorno de funciones y evaluación de expresiones no
$a0–$a3 $4–$7 Paso argumentos a subrutinas no
$t0–$t7 $8–$15 Temporales no
$s0–$s7 $16–$23 Temporales salvados
$t8–$t9 $24–$25 Temporales no
$k0–$k1 $26–$27 Reservados para el núcleo del S.O. no
$gp $28 puntero global
$sp $29 puntero de pila
$fp $30 puntero de marco de pila
$ra $31 dirección de retorno no

Los registros preservados durante una llamada son aquellos que (por convenio) no serán modificados por una llamada de sistema o a una subrutina (que implemente en ensamblador un procedimiento o función). Por ejemplo, los registros $s_ deben ser almacenados en la pila por el procedimiento que los necesita (subrutina llamada), siendo siempre incrementados en constantes $sp y $fp, para ser después decrementados una vez finalizado el procedimiento (se marca como disponible la memoria reservada). Por el contrario, $ra es modificado automáticamente tras una llamada a una función normal (cualquiera que utilice la instrucción jal), y los registros $t_ deben ser salvados por la subrutina llamante antes de llamar a cualquier función (por si el programa necesita los valores contenidos en dichos registros tras la ejecución de la subrutina ).

Instrucciones reales

Existen una serie de instrucciones que poseen implementación hardware directa, en oposición a las pseudoinstrucciones que son traducidas a varias instrucciones reales antes de ser ensambladas.

Los siguientes son los tres posibles formatos de instrucción:

Tipo -31-                                 Formato (bits)                                 -0-
R codop (6) rs (5) rt (5) rd (5) shamt (5) codfunc (6)
I codop (6) rs (5) rt (5) inmediato/desplazamiento (16)
J codop (6) dirección (26)
  • CONST denota una constante ("inmediata").
  • A partir de ahora, los números de registros son simples ejemplos, pudiendo ser empleados otros en su lugar.
  • Todas las instrucciones que siguen son nativas.
  • Los códigos de operación y función se dan en hexadecimal.
Categoría Nombre Sintaxis de la instrucción Significado Formato/codop/codfunc Notas
Aritméticas Suma add $1,$2,$3 $1 = $2 + $3 (con signo) R 0   suma dos registros
Suma sin signo addu $1,$2,$3 $1 = $2 + $3 (sin signo) R 0  
Resta sub $1,$2,$3 $1 = $2 - $3 (con signo) R 0   resta dos registros
Suma inmediata addi $1,$2,CONST $1 = $2 + CONST (con signo) I   empleado para sumar constantes (y también para copiar de un registro a otro "addi $1, $2, 0")
Suma inmediata sin signo addiu $1,$2,CONST $1 = $2 + CONST (sin signo) I  
Multiplicación mult $1,$2 LO = (($1 * $2) << 32) >> 32;
HI = ($1 * $2) >> 32;
R 0   Multiplica dos registros y guarda el resultado de 64 bits en dos puntos especiales de la memoria - LO y HI. De forma alternativa, uno puede decir que el resultado de esta operación es: (int HI,int LO) = (64 bits) $1 * $2 .
División div $1, $2 LO = $1 / $2     HI = $1 % $2 R Divide dos registros y guarda el resultado entero de 32 bits en LO y el resto en HI.[8]
Transferencia de datos Carga de dirección la $1, Etiqueta $1 = Dirección de memoria I Carga la dirección de memoria de una etiqueta.
Carga de palabra lw $1,CONST($2) $1 = Memoria[$s2 + CONST] I   Carga la palabra almacenada desde ($s2+CONST) en adelante (3 bytes más).
Carga de media palabra lh $1,CONST($2) $1 = Memoria[$s2 + CONST] I   Carga la media palabra almacenada desde ($s2+CONST) en adelante (1 byte más).
Carga de byte lb $1,CONST($2) $1 = Memoria[$s2 + CONST] I Carga el byte almacenado en ($s2+CONST).
Almacenamiento de palabra sw $1,CONST($2) Memoria[$s2 + CONST] = $1 I Almacena una palabra en ($s2+CONST) y los siguientes 3 bytes. El orden de los operandos es una gran fuente de confusiones.
Almacenamiento de media palabra sh $1,CONST($2) Memoria[$s2 + CONST] = $1 I Almacena la primera mitad de un registro (media palabra) en ($s2+CONST) y el byte siguiente.
Almacenamiento de byte sb $1,CONST($2) Memoria[$s2 + CONST] = $1 I Almacena el primer byte de un registro en ($s2+CONST).
Carga del inmediato superior lui $1,CONST $1 = CONST << 16 I Carga un operando inmediato de 16 bits en los 16 bits del registro especificado. El valor máximo de la constante es 216-1
Mover desde "high" mfhi $1 $1 = HI R Mueve un valor de HI al registro. No se debe emplear una instrucción de multiplicación o división entre dos instrucciones mfhi (esta acción no está definida debido a la segmentación del MIPS).
Mover desde "low" mflo $1 $1 = LO R 0   Mueve un valor de LO al registro. No se debe emplear una instrucción de multiplicación o división entre dos instrucciones mflo (esta acción no está definida debido a la segmentación del MIPS)
Lógicas And and $1,$2,$3 $1 = $2 & $3 R And bit a bit
And con inmediato andi $1,$2,CONST $1 = $2 & CONST I
Or or $1,$2,$3 $1 = $2 | $3 R Or bit a bit
Or con inmediato ori $1,$2,CONST $1 = $2 | CONST I
Or exclusivo xor $1,$2,$3 $1 = $2 ^ $3 R
Nor nor $1,$2,$3 $1 = ~($2 | $3) R Nor bit a bit
Inicializar si menor que slt $1,$2,$3 $1 = ($2 < $3) R Comprueba si un registro es menor que el otro.
Inicializar si menor que con inmediato slti $1,$2,CONST $1 = ($2 < CONST) I Comprueba si un registro es menor que una constante.
Desplazamiento de bits Desplazamiento lógico a la izquierda sll $1,$2,CONST $1 = $2 << CONST R Desplaza el registro CONST bits a la izquierda (lo multiplica por  )
Desplazamiento lógico a la derecha srl $1,$2,CONST $1 = $2 >> CONST R Desplaza el registro CONST bits a la derecha rellenado con ceros (divide entre  ). Nótese que esta instrucción solo funciona como división de un número en complemento a 2 si dicho número es positivo.
Desplazamiento aritmético a la derecha sra $1,$2,CONST  
 
R Desplaza el registro CONST bits rellenando con el bit de signo correspondiente (divide un número en complemento a 2 entre  )
Saltos condicionales Salto si igual beq $1,$2,CONST if ($1 == $2) go to PC+4+CONST I   Salta a la instrucción situada en la dirección especificada si ambos registros son iguales.
Salto si no igual bne $1,$2,CONST if ($1 != $2) go to PC+4+CONST I   Salta a la instrucción situada en la dirección especificada si ambos registros no son iguales.
Salto incondicional Salto j CONST goto address CONST J Salta de forma incondicional a la instrucción almacenada en la dirección especificada.
Salto a registro jr $1 goto address $1 R Salta a la dirección almacenada en el registro especificado.
Salto y enlace jal CONST $31 = PC + 4; goto CONST J Utilizada en las llamadas a subrutinas. Guarda en $31 la dirección de retorno, a la que se vuelve con jr $31

NOTA: En las instrucciones de saltos y bifurcaciones, CONST puede sustituirse por una etiqueta existente en cualquier parte del código.

Las pseudoinstrucciones son traducidas en varias instrucciones reales antes de ser ensambladas.

Nombre Sintaxis de la instrucción Traducción a instrucciones reales Significado
Saltar si mayor que bgt $rs,$rt,Label slt $at,$rt,$rs; bne $at,$zero,Label if(R[rs]>R[rt]) PC=Label
Saltar si menor que blt $rs,$rt,Label slt $at,$rs,$rt; bne $at,$zero,Label if(R[rs]<R[rt]) PC=Label
Saltar si mayor o igual que bge $rs,$rt,Label slt $at,$rs,$rt; beq $at,$zero,Label if(R[rs]>=R[rt]) PC=Label
Saltar si menor o igual que ble $rs,$rt,Label slt $at,$rt,$rs; beq $at,$zero,Label if(R[rs]<=R[rt]) PC=Label
Saltar si igual que beq $rs, $rt, Label beq $rs, $rt, Label if(R[rs]==R[rt]) PC=Label
Saltar si igual a cero beqz $rs,Label beq $rs,$zero,Label if(R[rs]==0) PC=Label
Saltar si mayor que (sin signo) bgtu $rs,$rt,Label sltu $at,$rt,$rs; bne $at,$zero,Label if(R[rs]>R[rt]) PC=Label
Saltar si mayor que cero bgtz $rs,Label slt $at,$zero,$rs; bne $at,$zero,Label if(R[rs]>0) PC=Label

Otras instrucciones

Estas instrucciones podrían clasificarse tanto entre las "reales" como entre las "pseudoinstrucciones".

Instrucciones lógicas comunes bit a bit

addiu $1,$2,100 $1 = $2 + 100 (suma sin signo con inmediato)
addu $1,$2,$3 $1 = $2 + $3 (suma sin signo)
div $1,$2 HI = $1 % $2 ; LO = $1 / $2
subu $1,$2,$3 $1 = $2 - $3 (resta sin signo)

Instrucciones de transferencia de memoria a registro

lbu $1,100($2) Carga un byte sin signo
lhu $1,100($2) Carga media palabra sin signo
lwcz $1,100($2) Carga una palabra al coprocesador "z" ("z" es el número del coprocesador)

Véase que no existe la instrucción "carga del inmediato inferior", ya que este trabajo puede realizarse mediante una addi (suma con inmediato) o una ori (or con inmediato) con el registro $0 (cuyo valor siempre es cero). Por ejemplo, tanto addi $1, $0, 100 como ori $1, $0, 100 cargan el número decimal 100 en el registro $1.

Instrucciones de transferencia de registro a memoria

swcz $1,100($2) Almacena una palabra desde el coprocesador "z" ("z" es el número del coprocesador).

Instrucciones de movimiento de registro a registro

mfcz $1,$c1 Mueve un valor del registro $1 del coprocesador al registro $1 del procesador principal ("z" es el número del coprocesador)
mtcz $1,$c1 Mueve un valor del registro $1 del procesador principal al registro $1 del coprocesador ("z" es el número del coprocesador)
mov.d $fp1,$fp3 Mueve un valor en doble precisión del registro $3 de la FPU al registro de punto flotante $1 del procesador principal
mov.s $fp1,$fp3 Mueve un valor en simple precisión del registro $3 de la FPU al registro de punto flotante $1 del procesador principal

(los valores en doble precisión usan dos registros adyacentes de la FPU)

Una operación con constantes con signo difiere de una sin signo en que no lanza excepciones. La resta de una constante puede ser realizada como la suma de su negación.

Otras instrucciones importantes

  • nop (no operation) (de código máquina 0x00000000 e interpretada por la CPU como sll $0,$0,0)
  • break (finaliza el programa, se emplea en tiempo de depuración)
  • syscall (llamadas al sistema)
  • algunas instrucciones relacionadas con la FPU
  • instrucciones virtuales, descompuestas por el ensamblador en instrucciones nativas

Referencia de instrucciones y registros del MIPS R4000

Esta es la lista de referencia de instrucciones y registros del MIPS R4000, con 32 registros de 32 bits. Este procesador se encuentra específicamente en la consola PlayStation Portable de Sony Computer Entertaiment

* Instrucciones 

add addu addi addiu and andi divu mult multu div nor or ori sll sllv sra srav srl srlv sub subu xor xori lhi llo slt sltu slti sltiu beq bgtz blez bne j jal jalr jr la li lb lbu lh lhu lw sb sh sw mfhi mflo mthi mtlo trape

* Registros 

$at $v0 $v1 $a0 $a1 $a2 $a3 $t0 $t1 $t2 $t3 $t4 $t5 $t6 $t7 $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $t8 $t9 $k0 $k1 $gp $sp $fp $ra

Referencias

  1. . Archivado desde el original el 19 de julio de 2015. Consultado el 19 de julio de 2015. 
  2. NEC ofrece dos microprocesadores RISC de 64 bits de bajo costo (en inglés)
  3. [1]
  4. [2]
  5. WepSIM Web con ejemplo MIPS32: https://wepsim.github.io/wepsim/ws_dist/wepsim-classic.html?mode=ep&example=9&simulator=assembly:register_file&notify=false
  6. Código fuente de WepSIM en GitHub: https://github.com/wepsim/wepsim
  7. . Archivado desde el original el 28 de junio de 2018. Consultado el 14 de octubre de 2005. 
  8. Referencia de instrucciones MIPS

Lecturas posteriores

  • Patterson y Hennessy: Estructura y diseño de computadores. Interficie circuitería/programación. Editorial Reverté. ISBN 84-291-2619-8

Véase también

Enlaces externos

  •   Wikilibros alberga un libro o manual sobre MIPS Assembly.
  • Patterson & Hennessy - Apéndice A (PDF)
  • Imágenes y descripciones del procesador MIPS en cpu-collection.de
  • Operadores de desplazamiento de bits en el MIPS
  •   Datos: Q527464
  •   Multimedia: MIPS microprocessors

mips, procesador, nombre, mips, siglas, microprocessor, without, interlocked, pipeline, stages, conoce, toda, familia, microprocesadores, arquitectura, risc, desarrollados, mips, technologies, microprocesador, mips, r4400, fabricado, toshiba, diseños, mips, ut. Con el nombre de MIPS siglas de Microprocessor without Interlocked Pipeline Stages se conoce a toda una familia de microprocesadores de arquitectura RISC desarrollados por MIPS Technologies Un microprocesador MIPS R4400 fabricado por Toshiba Los disenos del MIPS son utilizados en la linea de productos informaticos de SGI en muchos sistemas embebidos en dispositivos para Windows CE routers Cisco y videoconsolas como la Nintendo 64 o las Sony PlayStation PlayStation 2 y PlayStation Portable Mas recientemente la NASA uso uno de ellos en la sonda New Horizons 1 Las primeras arquitecturas MIPS fueron fsfs en 32 bits generalmente rutas de datos y registros de 32 bits de ancho si bien versiones posteriores fueron implementadas en 64 bits Existen cinco revisiones compatibles hacia atras del conjunto de instrucciones del MIPS llamadas MIPS I MIPS II MIPS III MIPS IV y MIPS 32 64 En la ultima de ellas la MIPS 32 64 Release 2 se define a mayores un conjunto de control de registros Asi mismo estan disponibles varias extensiones tales como la MIPS 3D consistente en un simple conjunto de instrucciones SIMD en coma flotante dedicadas a tareas 3D comunes la MDMX MaDMaX compuesta por un conjunto mas extenso de instrucciones SIMD enteras que utilizan los registros de coma flotante de 64 bits la MIPS16 que anade compresion al flujo de instrucciones para hacer que los programas ocupen menos espacio presuntamente como respuesta a la tecnologia de compresion Thumb de la arquitectura ARM o la reciente MIPS MT que anade funcionalidades multithreading similares a la tecnologia HyperThreading de los procesadores Intel Pentium 4 Debido a que los disenadores crearon un conjunto de instrucciones tan claro los cursos sobre arquitectura de computadores en universidades y escuelas tecnicas a menudo se basan en la arquitectura MIPS El diseno de la familia de CPU s MIPS influiria de manera importante en otras arquitecturas RISC posteriores como los DEC Alpha Indice 1 Historia 2 Familia de CPU s 3 Aplicaciones 4 Otros modelos y planes futuros 4 1 Loongson 5 Nucleos 6 Programacion y emulacion 7 Resumen del juego de instrucciones del R3000 7 1 Instrucciones reales 7 2 Otras instrucciones 7 2 1 Instrucciones logicas comunes bit a bit 7 2 2 Instrucciones de transferencia de memoria a registro 7 2 3 Instrucciones de transferencia de registro a memoria 7 2 4 Instrucciones de movimiento de registro a registro 7 3 Otras instrucciones importantes 8 Referencia de instrucciones y registros del MIPS R4000 9 Referencias 10 Lecturas posteriores 11 Vease tambien 12 Enlaces externosHistoria EditarEn 1981 un equipo liderado por John L Hennessy en la Universidad de Stanford comenzo a trabajar en lo que se convertiria en el primer procesador MIPS La idea basica era mejorar drasticamente el rendimiento mediante el uso de la segmentacion una tecnica que ya era entonces muy conocida pero tambien dificil de implementar Su funcionamiento puede resumirse en que la ejecucion de una instruccion es dividida en varias etapas comenzando la etapa 1 de una instruccion antes de que haya finalizado la ejecucion de la instruccion anterior En contraste los disenos tradicionales esperaban la finalizacion por completo de una instruccion antes de pasar a la siguiente de modo que grandes areas de la CPU permanecian inactivas mientras el proceso continuaba Ademas la frecuencia de reloj de toda la CPU venia dictada por la latencia del ciclo completo en lugar de por el llamado camino critico latencia de la etapa de segmentacion que mas tarda en completarse Otra de las grandes barreras a superar por la segmentacion era la necesidad de introducir bloqueos para poder asegurarse de que las instrucciones que necesitan varios ciclos de reloj para completarse dejan de cargar datos desde los registros de segmentacion Estos bloqueos pueden durar cantidades de tiempo considerables y suponian una gran barrera a mejoras de velocidad posteriores Por ello uno de los principales aspectos del diseno del MIPS fue el marcarse como objetivo que todas las subfases incluyendo el acceso a memoria de todas las instrucciones tardasen un unico ciclo en completarse dejando asi de ser necesarios los bloqueos y permitiendo un rendimiento de un solo ciclo Aunque esta idea de diseno elimino numerosas instrucciones utiles destacando el hecho de que la multiplicacion y la division necesitarian varias instrucciones en conjunto se sabia que el rendimiento general del sistema seria drasticamente mejorado al poder funcionar los chips a frecuencias mucho mayores Este ascenso de la velocidad seria dificil con la intervencion de los bloqueos pues el tiempo necesario es funcion del tamano del chip y de la frecuencia de reloj anadir el hardware necesario para evitarlos reduciria notablemente la velocidad del sistema La eliminacion de estas instrucciones se convirtio en un tema polemico Muchos observadores afirmaron que ese diseno y los procesadores RISC en general nunca superaria sus ambiciosas expectativas Si uno sencillamente sustituye la instruccion compleja de multiplicacion por una simple serie de sumas donde se produce el incremento de velocidad Este analisis tan simplista ignoraba el hecho de que la velocidad del diseno residia en la segmentacion no en las instrucciones En 1984 Hennessy se convencio del futuro potencial comercial del diseno dejando Stanford para formar MIPS Computer Systems La empresa presento su primer diseno el R2000 en 1985 siendo mejorado con el R3000 de 1988 Estas CPU s de 32 bits fueron la base de la compania durante los 80 y fueron empleadas principalmente en algunas series de workstations de SGI Estos disenos comerciales se diferenciaron de los de investigacion academica de Stanford en aspectos como la implementacion de la mayoria de los bloqueos con hardware y el proporcionar instrucciones completas para la multiplicacion y la division entre otros En 1991 MIPS presento su primer procesador de 64 bits el R4000 Sin embargo MIPS tuvo dificultades financieras en su lanzamiento al mercado El diseno era tan importante para SGI entonces uno de los pocos grandes clientes de MIPS que en 1992 compro sin recelo alguno la compania para evitar que se perdiera el diseno Como subsidiaria de SGI la compania paso a llamarse MIPS Technologies A principios de los 90 MIPS comenzo a otorgar licencias de sus disenos a terceros Esto probo con justo exito la simplicidad del nucleo algo que le permitia ser empleado en numerosas aplicaciones que anteriormente utilizaban disenos CISC mucho menos capaces y de precio y numero de puertas similares comentar que ambas magnitudes estan estrechamente relacionadas el precio de una CPU esta generalmente relacionado con el numero de puertas y pines externos Sun Microsystems intento subirse al carro otorgando licencias de su nucleo SPARC pero ni llego a rozar el exito del MIPS A finales de los 90 MIPS tenia un caballo de batalla en los procesadores integrados y en 1997 fue entregado el procesador MIPS 48 millones convirtiendose en la primera CPU RISC en desbancar a la famosa familia 68k de Motorola La familia MIPS tuvo tanto exito que SGI relanzo a MIPS Technologies en 1998 Mas de la mitad de los ingresos de MIPS actualmente proceden de las concesiones de licencias mientras que gran parte del resto procede de contratos de diseno de nucleos para ser fabricados por terceros En 1999 MIPS consolido su sistema de licencias alrededor de dos disenos basicos el MIPS32 de 32 bits y el MIPS64 de 64 bits NEC Toshiba y SiByte posteriormente adquirida por Broadcom obtuvieron licencias para el MIPS64 tan pronto como este procesador fue anunciado a estas empresas les siguieron otras como Philips LSI Logic e IDT Los exitos se sucedieron y actualmente los nucleos MIPS son uno de los pesos pesados del mercado de dispositivos como los computadoras de mano o decodificadores y sintonizadoras de TV Un indicio de su exito es el hecho de que Freescale filial de Motorola utilice procesadores MIPS en sus aparatos en lugar de otros propios basados en el PowerPC Desde que la arquitectura MIPS es licenciable ha atraido a numerosas companias jovenes a lo largo de los anos Una de las primeras nuevas companias en disenar procesadores MIPS fue Quantum Effect Devices El equipo de diseno de MIPS encargado del R4300 fundo SandCraft que diseno el R5432 para NEC y posteriormente el SR7100 uno de los primeros procesadores basados en ejecucion fuera de orden para sistemas embebidos El equipo original de diseno del DEC StrongARM finalmente se dividio en dos companias MIPS SiByte fabricante del SB 1250 uno de los primeros sistemas de chip unico de alto rendimiento basados en el MIPS y Alchemy Semiconductor mas tarde comprada por AMD que fabricaba el sistema de chip unico Au 1000 para aplicaciones poco exigentes Lexra utilizo arquitectura pseudo MIPS y anadio extensiones DSP para el mercado de los chips de audio y soporte multithreading para el mercado de redes Debido a que Lexra no era concesionaria de ninguna licencia MIPS dos pleitos fueron abiertos entre ambas empresas El primero se resolvio rapidamente al prometer Lexra no seguir anunciando sus procesadores como MIPS compatibles El segundo fue largo y dano los intereses de ambas companias terminando con la concesion por parte de MIPS de una licencia gratuita a Lexra asi como el pago de una gran cantidad de dinero Familia de CPU s Editar Esquema de la segmentacion del MIPS El primer modelo de CPU comercial de MIPS el R2000 fue anunciado en 1985 Anadia instrucciones multiciclo para la multiplicacion y la division en una unidad independiente integrada en el procesador Asimismo se anadieron instrucciones para enviar los resultados de esta unidad al nucleo las cuales necesitaban bloqueos El R2000 podia ser iniciado tanto en formato big endian como little endian Tenia 32 registros de proposito general de 32 bits pero no contaba con un registro de estado lo que suponia un considerable cuello de botella Este problema lo compartia con el AMD 29000 y el DEC Alpha Al contrario que otros registros el contador de programa no es directamente accesible El R2000 ademas soportaba hasta cuatro co procesadores uno de los cuales estaba integrado en la CPU principal para el manejo de excepciones e interrupciones mientras que los otros tres estaban destinados a otros usos Una opcion era anadir la unidad de punto flotante R2010 que contaba con 32 registros de 32 bits que podian ser empleados como tales para manejar numeros en simple precision o bien como 16 registros de 64 bits en doble precision El R3000 sucederia al R2000 en 1988 anadiendo una cache de 32 kB pronto aumentada a 64 kB para instrucciones y datos junto con el soporte de coherencia cache para el uso multiprocesador Mientras hubo defectos en el soporte multiprocesador del R3000 MIPS se las siguio arreglando para que formase parte de varios disenos exitosos de multiprocesador El R3000 tambien incluia una unidad de manejo de memoria MMU integrada caracteristica comun entre los procesadores del momento El R3000 fue el primer diseno exitoso de MIPS en el mercado y finalmente fueron fabricadas mas de 1 millon de unidades El R3000A utilizado en la extremadamente exitosa Sony PlayStation fue una version acelerada hasta los 40 MHz Al igual que el R2000 el R3000 fue emparejado con la FPU R3010 Pacemips fabrico el R3400 e IDT el R3500 siendo ambos modelos procesadores R3000s con la FPU R3010 en un unico chip El Toshiba R3900 fue el primer sistema de chip unico para los primeros ordenadores de mano con Windows CE En la serie R4000 presentada en 1991 se extendio el juego de instrucciones del MIPS para constituir una autentica arquitectura de 64 bits y se movio la FPU al mismo circuito para crear un sistema de chip unico operando a una velocidad de reloj radicalmente superior inicialmente 100 MHz Sin embargo para poder alcanzar tal frecuencia las caches fueron reducidas a 8 kB cada una siendo necesarios tres ciclos de reloj para acceder a ellas Las altas frecuencias de trabajo fueron alcanzadas gracias a la tecnica de segmentacion profunda llamada entonces super segmentacion Tras el R4000 nacio un gran numero de versiones mejoradas incluyendo la R4400 de 1993 con caches de 16 kB operaciones de 64 bits sin apenas errores y un controlador para otra cache externa L2 de 1 MB MIPS actualmente una division de SGI llamada MTI diseno la version de bajo coste R4200 y posteriormente la aun mas barata R4300 consistente en un R4200 con bus externo de 32 bits La Nintendo 64 usa una CPU NEC VR4300 basada en el MIPS de bajo coste R4300i 2 Quantum Effect Devices QED una compania aparte fundada por antiguos ingenieros de MIPS disenaron el R4600 Orion el R4700 Orion el R4650 y el R5000 Mientras que el R4000 aumento la frecuencia a cambio de reducir capacidad de cache los disenos de QED destacaron por las grandes caches accesibles en solo dos ciclos de reloj y por el uso eficiente del area de silicio Los R4600 y R4700 fueron utilizados en las versiones de bajo coste de las estaciones de trabajo SGI Indy asi como en los primeros enrutadores Cisco basados en el MIPS aquellos de las series 36x0 y 7x00 El R4650 fue empleado en los aparatos originales de WebTV ahora Microsoft TV La FPU R5000 trabajaba de forma mas eficiente y flexible con numeros en simple precision que la R4000 y como resultado con similar hardware grafico las SGI Indy que montaban la FPU R5000 ofrecian mucho mejor rendimiento grafico que las que contaban con la R4400 SGI rebautizo a las viejas tarjetas graficas que incorporaron la R5000 para remarcar la mejora QED posteriormente diseno las familias RM7000 y RM9000 para sistemas embebidos como redes e impresoras laser QED fue adquirida por el fabricante de semiconductores PMC Sierra en agosto de 2000 siendo esta la ultima compania en invertir en la arquitectura MIPS El R8000 1994 fue el primer diseno MIPS superescalar capaz de ejecutar dos operaciones de ALU y otras dos de memoria en cada ciclo de reloj El diseno se plasmo en seis chips una unidad entera con dos caches de 16 KB una para instrucciones y otra L1 de datos una unidad de punto flotante tres RAM de cache secundaria totalmente personalizables dos para accesos a cache secundaria y otra para bus y un controlador de cache ASIC El diseno tenia dos unidades segmentadas de suma multiplicacion en doble precision las cuales recibian el flujo de datos de la cache secundaria externa de 4 MB El R8000 fue montado en los servidores SGI Power Challenge a mediados de los 90 y posteriormente en las estaciones de trabajo Power Indigo2 Su rendimiento limitado en operaciones enteras y su elevado coste lo hicieron impopular entre la mayoria de los usuarios si bien el buen rendimiento de su FPU fue aprovechado por los usuarios cientificos el R8000 estuvo apenas un ano en el mercado En 1995 fue lanzado el R10000 Este procesador era un diseno de chip unico con mayor velocidad de reloj que el R8000 y mayores caches primarias de 32 kB para instrucciones y datos Era tambien superescalar pero su gran innovacion fue ser out of order Aun con una FPU mas simple la vasta mejora en las operaciones con enteros su menor precio y la mayor densidad hicieron del R10000 el preferido por muchos clientes Los disenos mas recientes se basan en el R10000 El R12000 ha sido fabricado con tecnologia mejorada para comprimir el chip y operar a mayor velocidad de reloj La revision R14000 permitia mayores frecuencias soporte adicional para DDR SRAM en el chip externo de cache y un FSB de 200 MHz para un mejor transferencia Las ultimas versiones fueron llamadas R16000 y R16000A caracterizandose por una mayor velocidad de reloj cache L1 adicional y chips de menor tamano en comparacion con los anteriores Especificaciones del microprocesador MIPS Modelo Frecuencia MHz Ano Proceso µm Transistores millones Tamano del chip mm Pins E S Potencia W Voltaje Dcache k Icache k Scache k R2000 8 16 7 1985 2 0 11 32 64 noneR3000 12 40 1988 1 2 0 11 66 12 145 4 64 64 noneR4000 100 1991 0 8 1 35 213 179 15 5 8 8 1024R4400 100 250 1992 0 6 2 3 186 179 15 5 16 16 1024R4600 100 133 1994 0 64 2 2 77 179 4 6 5 16 16 512R5000 150 200 1996 0 35 3 7 84 223 10 3 3 32 32 1024R8000 75 90 1994 0 5 2 6 299 591 30 3 3 16 16 1024R10000 150 250 1995 0 35 6 8 299 599 30 3 3 32 32 512R12000 270 400 1998 0 18 0 25 6 9 204 600 20 4 32 32 1024R14000 500 600 2001 0 13 7 2 204 527 17 32 32 2048R16000 700 800 2002 0 11 20 64 64 4096Note Estas especificaciones hacen referencia a las configuraciones mas comunes Existen variaciones sobre todo en las caches de nivel 2 Aplicaciones EditarEntre los fabricantes de estaciones de trabajo basadas en procesadores MIPS destacan SGI MIPS Computer Systems Inc Olivetti Siemens Nixdorf Acer Digital Equipment Corporation NEC y DeskStation Varios sistemas operativos fueron portados a la arquitectura ejemplos de ello son el SGI IRIX Microsoft Windows NT aunque el soporte para MIPS finalizo con el lanzamiento de Windows NT 4 0 y Windows CE Linux BSD UNIX System V SINIX MIPS Computer Systems RISC os entre otros Sin embargo el uso del MIPS como procesador principal de estaciones de trabajo ha caido y SGI ha anunciado sus planes de cesar el desarrollo de iteraciones de alto rendimiento de la arquitectura MIPS en favor de procesadores basados en la tecnologia Intel IA64 vease la seccion Otros modelos y planes futuros Por otra parte el uso de microprocesadores MIPS en sistemas embebidos es probable que se mantenga gracias al bajo consumo de energia y caracteristicas termicas de las implementaciones integradas asi como a la gran disponibilidad de herramientas de desarrollo y de expertos conocedores de la arquitectura Otros modelos y planes futuros EditarOtro miembro de la familia MIPS es el R6000 una implementacion ECL de la arquitectura MIPS fabricada por Bipolar Integrated Technology El R6000 introdujo el juego de instrucciones MIPS II Su arquitectura TLB y de cache son diferentes del resto de miembros de la familia MIPS El R6000 no proporciono los resultados esperados y aunque fue empleado en algunas maquinas Control Data rapidamente desaparecio del mercado de los mainstream El PMC Sierra RM7000 fue una version del R5000 con una cache integrada de nivel 2 de 256 kB y un controlador para una cache opcional de tercer nivel Disenado en un principio para sistemas embebidos como los procesadores graficos SGI y varias soluciones de redes de Cisco El nombre R9000 nunca fue utilizado SGI intento una vez migrar de la plataforma MIPS a la Intel Itanium habiendo terminado su desarrollo con el R10000 Los grandes retrasos en la presentacion del Itanium hicieron que el numero de procesadores basados en MIPS instalados continuo creciendo En 1999 quedo claro que el proceso de desarrollo habia sido cerrado demasiado pronto y resultado de ello son las versiones R14000 y R16000 SGI tanteo la posibilidad de anadir una FPU mas compleja al estilo de la del R8000 en las ultimas iteraciones asi como la de lanzar un procesador de doble nucleo pero los problemas financieros de la empresa y el uso oficial y soportado de la emulacion QuickTransit para ejecutar binarios IRIX sobre Altix provocaron el cese definitivo del desarrollo de hardware IRIX MIPS Loongson Editar Articulo principal Loongson Loongson es una familia de microprocesadores disenados por la Academia China de Ciencias La microarquitectura interna de los microprocesadores Loongson fue disenado de forma independiente por los chinos Las primeras implementaciones de la familia carecia de cuatro instrucciones patentadas por MIPS Technologies En junio de 2009 ICT obtuvo licencias MIPS32 y MIPS64 directamente de MIPS Technologies A partir de 2006 una serie de empresas empezaron a comercializar una serie de hardware con el procesador Loongson incluyendo nettops y netbooks con un bajo consumo 3 4 5 Nucleos EditarEn los ultimos anos gran parte de la tecnologia empleada en las distintas generaciones MIPS ha sido ofrecida como disenos de IP cores bloques de construccion para sistemas embebidos Se ofertan los nucleos basicos de 32 y 64 bits conocidos respectivamente como 4K y 5K respectivamente y con licencias MIPS32 y MIPS64 Estos nucleos pueden ser combinados con unidades anadidas tales como FPUs sistemas SIMD dispositivos de E S etc Los nucleos MIPS han sido comercialmente exitosos siendo empleados actualmente en muchas aplicaciones industriales y de consumo Pueden encontrarse en los mas modernos enrutadores Cisco TP Link y Linksys cablemodems y modems ADSL tarjetas inteligentes controladoras de impresoras laser decodificadores de TV robots ordenadores de mano Sony PlayStation 2 y Sony PlayStation Portable En moviles y PDA s sin embargo el nucleo MIPS fue incapaz de desbancar a su competidor de arquitectura ARM Programacion y emulacion EditarExiste un simulador MIPS R2000 R3000 totalmente libre llamado SPIM compatible con varios sistemas operativos especificamente Unix o GNU Linux Mac OS X MS Windows 95 98 NT 2000 XP y DOS ideado para el aprendizaje de la programacion en ensamblador MIPS y de los conceptos generales del ensamblador RISC http www cs wisc edu larus spim htmlOtro simulador popular es MARS MIPS Assembler and Runtime Simulator un IDE Integrated Design Environment para programar MIPS en lenguaje Assembly MARS es un entorno de desarrollo ligero e interactivo escrito en java y compatible con muchas plataformas cuyo proposito es su uso en el nivel educativo Un emulador MIPS mas completo pertenece al proyecto GXemul anteriormente conocido como Proyecto mips64emul el cual no solo emula las diferentes versiones de los microprocesadores MIPS III y superiores desde el R4000 al R10000 sino tambien sistemas enteros que utilicen esos procesadores Por ejemplo GXemul puede emular tanto una DECstation con un procesador MIPS R4400 y arrancar en Ultrix como un SGI O2 con CPU MIPS R10000 si bien la capacidad de correr Irix es limitada entre otros asi como tambien diferentes framebuffers y controladoras SCSI El software QEMU es capaz de emular tambien entre muchas otras la arquitectura MIPS y MIPSel asi como ejecutar GNU Linux en la maquina emulada El simulador WepSIM 6 7 puede usarse desde un navegador Web Es un simulador educativo que dispone de ejemplos con una implementacion de un subconjunto de instrucciones MIPS de forma microprogramada WepSIM facilita aprender diversos aspectos de como una CPU funciona microprogramacion interrupciones llamadas al sistema etc pudiendo usar ensamblador MIPS Ejemplos de llamadas al sistema usadas en SPIM Servicio Codigo trampa Entrada Salida Notasprint int v0 1 a0 entero a imprimir imprime a0 en la salida estandarprint string v0 4 a0 direccion del primer caracter imprime una cadena de caracterer en la salida estandarsbrk v0 9 a0 numero necesario de bytes v0 direccion de memoria reservada Reserva memoria de la pilaResumen del juego de instrucciones del R3000 EditarLas instrucciones se dividen en tres tipos R I y J Todas las instrucciones empiezan con un codigo de operacion de 6 bits Ademas del codigo de operacion en las instrucciones tipo R se especifican tres registros un campo de tamano de desplazamiento shamt y otro para el codigo de funcion Las tipo I especifican dos registros y un valor inmediato de 16 bits en las tipo J al codigo de operacion le siguen 26 bits de direccion destino de salto 8 9 Nombre de los registros numero uso y convenciones de llamada si es guardado en subrutina llamada Registros Nombre Numero Uso Preservado en subrutina llamada zero 0 constante entera 0 si at 1 temporal del ensamblador no v0 v1 2 3 Valores de retorno de funciones y evaluacion de expresiones no a0 a3 4 7 Paso argumentos a subrutinas no t0 t7 8 15 Temporales no s0 s7 16 23 Temporales salvados si t8 t9 24 25 Temporales no k0 k1 26 27 Reservados para el nucleo del S O no gp 28 puntero global si sp 29 puntero de pila si fp 30 puntero de marco de pila si ra 31 direccion de retorno noLos registros preservados durante una llamada son aquellos que por convenio no seran modificados por una llamada de sistema o a una subrutina que implemente en ensamblador un procedimiento o funcion Por ejemplo los registros s deben ser almacenados en la pila por el procedimiento que los necesita subrutina llamada siendo siempre incrementados en constantes sp y fp para ser despues decrementados una vez finalizado el procedimiento se marca como disponible la memoria reservada Por el contrario ra es modificado automaticamente tras una llamada a una funcion normal cualquiera que utilice la instruccion jal y los registros t deben ser salvados por la subrutina llamante antes de llamar a cualquier funcion por si el programa necesita los valores contenidos en dichos registros tras la ejecucion de la subrutina Instrucciones reales Editar Existen una serie de instrucciones que poseen implementacion hardware directa en oposicion a las pseudoinstrucciones que son traducidas a varias instrucciones reales antes de ser ensambladas Los siguientes son los tres posibles formatos de instruccion Tipo 31 Formato bits 0 R codop 6 rs 5 rt 5 rd 5 shamt 5 codfunc 6 I codop 6 rs 5 rt 5 inmediato desplazamiento 16 J codop 6 direccion 26 CONST denota una constante inmediata A partir de ahora los numeros de registros son simples ejemplos pudiendo ser empleados otros en su lugar Todas las instrucciones que siguen son nativas Los codigos de operacion y funcion se dan en hexadecimal Categoria Nombre Sintaxis de la instruccion Significado Formato codop codfunc NotasAritmeticas Suma add 1 2 3 1 2 3 con signo R 0 20 16 displaystyle 20 16 suma dos registrosSuma sin signo addu 1 2 3 1 2 3 sin signo R 0 21 16 displaystyle 21 16 Resta sub 1 2 3 1 2 3 con signo R 0 22 16 displaystyle 22 16 resta dos registrosSuma inmediata addi 1 2 CONST 1 2 CONST con signo I 8 16 displaystyle 8 16 empleado para sumar constantes y tambien para copiar de un registro a otro addi 1 2 0 Suma inmediata sin signo addiu 1 2 CONST 1 2 CONST sin signo I 9 16 displaystyle 9 16 Multiplicacion mult 1 2 LO 1 2 lt lt 32 gt gt 32 HI 1 2 gt gt 32 R 0 18 16 displaystyle 18 16 Multiplica dos registros y guarda el resultado de 64 bits en dos puntos especiales de la memoria LO y HI De forma alternativa uno puede decir que el resultado de esta operacion es int HI int LO 64 bits 1 2 Division div 1 2 LO 1 2 HI 1 2 R Divide dos registros y guarda el resultado entero de 32 bits en LO y el resto en HI 8 Transferencia de datos Carga de direccion la 1 Etiqueta 1 Direccion de memoria I Carga la direccion de memoria de una etiqueta Carga de palabra lw 1 CONST 2 1 Memoria s2 CONST I 23 16 displaystyle 23 16 Carga la palabra almacenada desde s2 CONST en adelante 3 bytes mas Carga de media palabra lh 1 CONST 2 1 Memoria s2 CONST I 25 16 displaystyle 25 16 Carga la media palabra almacenada desde s2 CONST en adelante 1 byte mas Carga de byte lb 1 CONST 2 1 Memoria s2 CONST I Carga el byte almacenado en s2 CONST Almacenamiento de palabra sw 1 CONST 2 Memoria s2 CONST 1 I Almacena una palabra en s2 CONST y los siguientes 3 bytes El orden de los operandos es una gran fuente de confusiones Almacenamiento de media palabra sh 1 CONST 2 Memoria s2 CONST 1 I Almacena la primera mitad de un registro media palabra en s2 CONST y el byte siguiente Almacenamiento de byte sb 1 CONST 2 Memoria s2 CONST 1 I Almacena el primer byte de un registro en s2 CONST Carga del inmediato superior lui 1 CONST 1 CONST lt lt 16 I Carga un operando inmediato de 16 bits en los 16 bits del registro especificado El valor maximo de la constante es 216 1Mover desde high mfhi 1 1 HI R Mueve un valor de HI al registro No se debe emplear una instruccion de multiplicacion o division entre dos instrucciones mfhi esta accion no esta definida debido a la segmentacion del MIPS Mover desde low mflo 1 1 LO R 0 12 16 displaystyle 12 16 Mueve un valor de LO al registro No se debe emplear una instruccion de multiplicacion o division entre dos instrucciones mflo esta accion no esta definida debido a la segmentacion del MIPS Logicas And and 1 2 3 1 2 amp 3 R And bit a bitAnd con inmediato andi 1 2 CONST 1 2 amp CONST IOr or 1 2 3 1 2 3 R Or bit a bitOr con inmediato ori 1 2 CONST 1 2 CONST IOr exclusivo xor 1 2 3 1 2 3 RNor nor 1 2 3 1 2 3 R Nor bit a bitInicializar si menor que slt 1 2 3 1 2 lt 3 R Comprueba si un registro es menor que el otro Inicializar si menor que con inmediato slti 1 2 CONST 1 2 lt CONST I Comprueba si un registro es menor que una constante Desplazamiento de bits Desplazamiento logico a la izquierda sll 1 2 CONST 1 2 lt lt CONST R Desplaza el registro CONST bits a la izquierda lo multiplica por 2 C O N S T displaystyle 2 CONST Desplazamiento logico a la derecha srl 1 2 CONST 1 2 gt gt CONST R Desplaza el registro CONST bits a la derecha rellenado con ceros divide entre 2 C O N S T displaystyle 2 CONST Notese que esta instruccion solo funciona como division de un numero en complemento a 2 si dicho numero es positivo Desplazamiento aritmetico a la derecha sra 1 2 CONST 1 2 gt gt C O N S T displaystyle 1 2 gt gt CONST n 1 C O N S T 2 31 n 2 gt gt 31 displaystyle bigg bigg sum n 1 CONST 2 31 n bigg cdot 2 gt gt 31 bigg R Desplaza el registro CONST bits rellenando con el bit de signo correspondiente divide un numero en complemento a 2 entre 2 C O N S T displaystyle 2 CONST Saltos condicionales Salto si igual beq 1 2 CONST if 1 2 go to PC 4 CONST I 04 16 displaystyle 04 16 Salta a la instruccion situada en la direccion especificada si ambos registros son iguales Salto si no igual bne 1 2 CONST if 1 2 go to PC 4 CONST I 05 16 displaystyle 05 16 Salta a la instruccion situada en la direccion especificada si ambos registros no son iguales Salto incondicional Salto j CONST goto address CONST J Salta de forma incondicional a la instruccion almacenada en la direccion especificada Salto a registro jr 1 goto address 1 R Salta a la direccion almacenada en el registro especificado Salto y enlace jal CONST 31 PC 4 goto CONST J Utilizada en las llamadas a subrutinas Guarda en 31 la direccion de retorno a la que se vuelve con jr 31NOTA En las instrucciones de saltos y bifurcaciones CONST puede sustituirse por una etiqueta existente en cualquier parte del codigo Las pseudoinstrucciones son traducidas en varias instrucciones reales antes de ser ensambladas Nombre Sintaxis de la instruccion Traduccion a instrucciones reales SignificadoSaltar si mayor que bgt rs rt Label slt at rt rs bne at zero Label if R rs gt R rt PC LabelSaltar si menor que blt rs rt Label slt at rs rt bne at zero Label if R rs lt R rt PC LabelSaltar si mayor o igual que bge rs rt Label slt at rs rt beq at zero Label if R rs gt R rt PC LabelSaltar si menor o igual que ble rs rt Label slt at rt rs beq at zero Label if R rs lt R rt PC LabelSaltar si igual que beq rs rt Label beq rs rt Label if R rs R rt PC LabelSaltar si igual a cero beqz rs Label beq rs zero Label if R rs 0 PC LabelSaltar si mayor que sin signo bgtu rs rt Label sltu at rt rs bne at zero Label if R rs gt R rt PC LabelSaltar si mayor que cero bgtz rs Label slt at zero rs bne at zero Label if R rs gt 0 PC LabelOtras instrucciones Editar Estas instrucciones podrian clasificarse tanto entre las reales como entre las pseudoinstrucciones Instrucciones logicas comunes bit a bit Editar addiu 1 2 100 1 2 100 suma sin signo con inmediato addu 1 2 3 1 2 3 suma sin signo div 1 2 HI 1 2 LO 1 2subu 1 2 3 1 2 3 resta sin signo Instrucciones de transferencia de memoria a registro Editar lbu 1 100 2 Carga un byte sin signolhu 1 100 2 Carga media palabra sin signolwcz 1 100 2 Carga una palabra al coprocesador z z es el numero del coprocesador Vease que no existe la instruccion carga del inmediato inferior ya que este trabajo puede realizarse mediante una addi suma con inmediato o una ori or con inmediato con el registro 0 cuyo valor siempre es cero Por ejemplo tanto addi 1 0 100 como ori 1 0 100 cargan el numero decimal 100 en el registro 1 Instrucciones de transferencia de registro a memoria Editar swcz 1 100 2 Almacena una palabra desde el coprocesador z z es el numero del coprocesador Instrucciones de movimiento de registro a registro Editar mfcz 1 c1 Mueve un valor del registro 1 del coprocesador al registro 1 del procesador principal z es el numero del coprocesador mtcz 1 c1 Mueve un valor del registro 1 del procesador principal al registro 1 del coprocesador z es el numero del coprocesador mov d fp1 fp3 Mueve un valor en doble precision del registro 3 de la FPU al registro de punto flotante 1 del procesador principalmov s fp1 fp3 Mueve un valor en simple precision del registro 3 de la FPU al registro de punto flotante 1 del procesador principal los valores en doble precision usan dos registros adyacentes de la FPU Una operacion con constantes con signo difiere de una sin signo en que no lanza excepciones La resta de una constante puede ser realizada como la suma de su negacion Otras instrucciones importantes Editar nop no operation de codigo maquina 0x00000000 e interpretada por la CPU como sll 0 0 0 break finaliza el programa se emplea en tiempo de depuracion syscall llamadas al sistema algunas instrucciones relacionadas con la FPU instrucciones virtuales descompuestas por el ensamblador en instrucciones nativasReferencia de instrucciones y registros del MIPS R4000 EditarEsta es la lista de referencia de instrucciones y registros del MIPS R4000 con 32 registros de 32 bits Este procesador se encuentra especificamente en la consola PlayStation Portable de Sony Computer Entertaiment Instrucciones add addu addi addiu and andi divu mult multu div nor or ori sll sllv sra srav srl srlv sub subu xor xori lhi llo slt sltu slti sltiu beq bgtz blez bne j jal jalr jr la li lb lbu lh lhu lw sb sh sw mfhi mflo mthi mtlo trape Registros at v0 v1 a0 a1 a2 a3 t0 t1 t2 t3 t4 t5 t6 t7 s0 s1 s2 s3 s4 s5 s6 s7 t8 t9 k0 k1 gp sp fp raReferencias Editar Copia archivada Archivado desde el original el 19 de julio de 2015 Consultado el 19 de julio de 2015 NEC ofrece dos microprocesadores RISC de 64 bits de bajo costo en ingles 1 2 https web archive org web 20110308062931 http www loongson cn EN WepSIM Web con ejemplo MIPS32 https wepsim github io wepsim ws dist wepsim classic html mode ep amp example 9 amp simulator assembly register file amp notify false Codigo fuente de WepSIM en GitHub https github com wepsim wepsim a b Resumen del juego de instrucciones del MIPS R3000 en ingles Archivado desde el original el 28 de junio de 2018 Consultado el 14 de octubre de 2005 Referencia de instrucciones MIPSLecturas posteriores EditarPatterson y Hennessy Estructura y diseno de computadores Interficie circuiteria programacion Editorial Reverte ISBN 84 291 2619 8Vease tambien EditarLoongson microprocesador con un conjunto de instrucciones MIPS64 desarrollado por la Academia China de las Ciencias Enlaces externos Editar Wikilibros alberga un libro o manual sobre MIPS Assembly MIPS Technologies MIPS Technologies Developers Patterson amp Hennessy Apendice A PDF Resumen del lenguaje ensamblador MIPS Referencia MIPS Imagenes y descripciones del procesador MIPS en cpu collection de Introduccion al ensamblador MIPS Operadores de desplazamiento de bits en el MIPS Datos Q527464 Multimedia MIPS microprocessorsObtenido de https es wikipedia org w index php title MIPS procesador amp oldid 133554946, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos