ARM
De Wikipedia, la enciclopedia libre
Se denomina ARM a una familia de microprocesadores RISC diseñados por la empresa Acorn Computers y desarrollados por Advanced RISC Machines Ltd., una empresa derivada de la anterior.
Tabla de contenidos |
[editar] Historia
El diseño del ARM comenzó en 1983 como un proyecto de desarrollo en la empresa Acorn Computers Ltd. Roger Wilson y Steve Furber lideraban el equipo, cuya meta era, originalmente, el desarrollo de un procesador avanzado, pero con una arquitectura similar a la del MOS 6502. La razón era que Acorn tenía una larga línea de ordenadores personales basados en dicho micro, por lo que tenía sentido desarrollar uno con el que los desarrolladores se sintieran cómodos.
El equipo terminó el diseño preliminar y los primeros prototipos del procesador en el año 1985, al que llamaron ARM1. La primera versión utilizada comercialmente se bautizó como ARM2 y se lanzó en el año 1986.
La arquitectura del ARM2 posee un bus de datos de 32 bits y ofrece un espacio de direcciones de 26 bits, junto con 16 registros de 32 bits. Uno de estos registros se utiliza como contador de programa, aprovechándose sus 4 bits superiores y los 2 inferiores para contener los flags de estado del procesador.
El ARM2 es probablemente el procesador de 32 bits útil más simple del mundo, ya que posee sólo 30.000 transistores. Su simplicidad se debe a que no está basado en microcódigo (sistema que suele ocupar en torno a la cuarta parte de la cantidad total de transistores usados en un procesador) y a que, como era común en aquella época, no incluye caché. Gracias a esto, su consumo en energía es bastante bajo, a la vez que ofrece un mejor rendimiento que un 286. Su sucesor, el ARM3, incluye una pequeña memoria caché de 4 Kb, lo que mejora los accesos a memoria repetitivos.
A finales de los años 80, Apple Computer comenzó a trabajar con Acorn en nuevas versiones del núcleo ARM. En Acorn se dieron cuenta de que el hecho de que el fabricante de un procesador fuese también un fabricante de ordenadores podría echar para atrás a la competencia, por lo que se decidió crear una nueva compañía llamada Advanced RISC Machines, que sería la encargada del diseño y gestión de las nuevas generaciones de procesadores ARM. Ocurría esto en el año 1990.
Este trabajo derivó en el ARM6, presentado en 1991. Apple utilizó el ARM 610 (basado en el ARM6), como procesador básico para su innovador PDA, el Apple Newton. Por su parte, Acorn lo utilizó en 1994 como procesador principal en su RiscPC.
El núcleo mantuvo su simplicidad a pesar de los cambios: en efecto, el ARM2 tiene 30.000 transistores, mientras que el ARM6 sólo cuenta con 35.000. La idea era que el usuario final combinara el núcleo del ARM con un número opcional de periféricos integrados y otros elementos, pudiendo crear un procesador completo a la medida de sus necesidades.
La mayor utilización de la tecnología ARM se alcanzó con el procesador ARM7TDMI, con millones de unidades en teléfonos móviles y sistemas de videojuegos portátiles.
DEC licenció el diseño, lo cual generó algo de confusión debido a que ya producía el DEC Alpha, y creó el StrongARM. Con una velocidad de reloj de 233 Mhz, este procesador consumía solo 1 watt de potencia (este consumo de energía se ha reducido en versiones más recientes). Esta tecnología pasó posteriormente a manos de Intel, como fruto de un acuerdo jurídico, que la integró en su línea de procesadores Intel i960 e hizo más árdua la competencia.
Freescale (una empresa que derivó de Motorola en el año 2004), IBM, Infineon Technologies, OKI, Texas Instruments, Nintendo, Philips, VLSI, Atmel, Sharp, Samsung y STMicroelectronics también licenciaron el diseño básico del ARM.
El diseño del ARM se ha convertido en uno de los más usados del mundo, desde discos duros hasta juguetes. Hoy en día, cerca del 75% de los procesadores de 32 bits poseen este chip en su núcleo.
[editar] Los núcleos
Familia | Core | Característica | Cache (I/D)/MMU | MIPS @ MHz | Uso |
---|---|---|---|---|---|
ARM7TDMI | ARM7TDMI(-S) | 3-stage pipeline | none | 15 MIPS @ 16.8 MHz | GBA |
ARM710T | MMU | ||||
ARM720T | 8KB unified, MMU | ||||
ARM740T | MPU | ||||
ARM7EJ-S | Jazelle DBX | none | |||
ARM9TDMI | ARM9TDMI | 5-stage pipeline | none | ||
ARM920T | 16KB/16KB, MMU | 200 MIPS @ 180 MHz | GPX2 | ||
ARM922T | 8KB/8KB, MMU | ||||
ARM940T | MPU | ||||
ARM9E | ARM946E-S | variable, tightly coupled memories, MPU | Nintendo DS | ||
ARM966E-S | no cache, TCMs | ||||
ARM968E-S | no cache, TCMs | ||||
ARM926EJ-S | Jazelle DBX | variable, TCMs, MMU | |||
ARM10E | ARM1020E | (VFP) | 32KB/32KB, MMU | ||
ARM1022E | (VFP) | 16KB/16KB, MMU | |||
ARM1026EJ-S | Jazelle DBX | variable, MMU or MPU | |||
ARM11 | ARM1136J(F)-S | SIMD, Jazelle DBX, (VFP) | variable, MMU | ||
ARM1156T2(F)-S | SIMD, Thumb-2, (VFP) | variable, MPU | |||
ARM1176JZ(F)-S | SIMD, Jazelle DBX, (VFP) | variable, MMU+TrustZone | |||
ARM11 MPCore | 1-4 core SMP, SIMD, Jazelle DBX, (VFP) | variable, MMU | |||
Cortex | Cortex-M3 | Microcontroller profile | no cache, (MPU) | ||
Cortex-A8 | NEON, Jazelle RCT, Thumb-2 | variable (L1+L2), MMU+TrustZone | up to 2000 (2.0 DMIPS/MHz in speed from 600MHz to greater than 1GHz) | ||
XScale | 80200/IOP310/IOP315 | I/O Processor | |||
80219 | |||||
IOP321 | |||||
IOP33x | |||||
PXA210/PXA250 | Applications processor | ||||
PXA255 | |||||
PXA26x | |||||
PXA27x | 800 MIPS @ 624 MHz | ||||
PXA800(E)F | |||||
Monahans | 1000 MIPS @ 1.25 GHz | ||||
IXC1100 | Control Plane Processor | ||||
IXP2400/IXP2800 | |||||
IXP2850 | |||||
IXP2325/IXP2350 | |||||
IXP42x | |||||
IXP460/IXP465 |
[editar] Diseño
El juego de instrucciones del ARM es similar al del MOS 6502, pero incluye características adicionales que le permiten conseguir un mejor rendimiento en su ejecución. Para mantener el concepto tradicional de RISC, se incluyó el comando de ejecución en un tiempo bastante bueno, siendo por lo general, en un ciclo. La característica más interesante es el uso de los 4 bits como código condicional en la parte superior de cada instrucción, haciendo que cada instrucción pueda ser una condición.
Este corte permite aumentar el espacio para algunos desplazamientos en el acceso a la memoria, pero también permite evitar caer en ciclos fuera de control cuando la aplicación sea para pequeñas instrucciones condicionadas. El ejemplo estándar es el Máximo común divisor, según el algoritmo de Euclides.
Ejemplo en C
int gcd(int i, int j) { while (i != j) if (i > j) i -= j; else j -= i; return i; }
Expresado en código ensamblador ARM, el ciclo, con una pequeña rotación, permite ver algo similar a esto
b test loop subgt Ri, Ri, Rj suble Rj, Rj, Ri test cmp Ri, Rj bne loop
el cual permite rotar en torno a la condición.
Otra característica única del juego de instrucciones es la posibilidad de añadir shifts y rotar en el procesamiento de datos (aritmético, lógico y movimiento de registros), por ejemplo, la instrucción en C "a += (j << 2);" puede ser mejorar como una instrucción simple en el ARM, permitiendo la reubicación del registro.
Todo esto ocasiona que se necesiten menos operaciones de carga y almacenamiento, mejorando el rendimiento.
El procesador ARM también tiene algunas características que son raras en otras arquitecturas también consideradas RISC, como el direccionamiento relativo, y el pre y post incremento en el modo de direccionamiento.
Tiene dos modos de funcionamiento: el ARMI con instrucciones que ocupan 4 bytes, más rápidas y potentes (hay instrucciones que sólo están en este modo) pero con mayor consumo de memoria y de electricidad. Y el modo THUMB, más limitado, con instrucciones que ocupan 2 bytes y con menor consumo de corriente
[editar] Tecnologías
[editar] Thumb
Quizás en parte por el uso condicional de usar 4 bits por cada instrucción, los procesadores más recientes traen una instrucción de 16 bits, llamada Thumb. Este pretende disminuir la cantidad de código escrito. Así como mejorar la densidad del código, el rendimiento puede ser superior a un código de 32 bits en donde el puerto de memoria o ancho del bus de comunicaciones son menores a 32 bits. Por lo general en aplicaciones inserta un pequeño rango de direcciones de memoria con un datapath de 32 bits (por ejemplo: Game Boy Advance), y el resto son 16 bits en modo wide o narrower.
El primer procesador con la tecnología Thumb fue el ARM7TDMI. Toda la familia posterior al ARM9, incluyendo el procesador Intel XScale, tienen incorporada la tecnología en su núcleo.
[editar] Jazelle
ARM tiene implementada una tecnología que permite que ciertos tipos de arquitecturas ejecuten Java bytecode nativamente en el hardware. El primer procesador en usar Jazelle fue el ARM926EJ-S, siendo denominados con una J a todos los procesadores que soportaran esta tecnología.