La arquitectura ARM tiene licencia. Las empresas que son o han sido licenciatarias de ARM incluyen Advanced Micro Devices, Inc.,[11] Alcatel-Lucent, Altera, Apple Inc., copia de microcontrolador ARM AppliedMicro, Atmel, BlackBerry (antes Research In Motion), Broadcom, Cirrus Logic, CSR plc, Cypress Semiconductor, Digital Equipment Corporation, Ember, Energy Micro, Freescale (spin-off de Motorola en 2004), Fujitsu, Fuzhou Rockchip, Huawei, Intel (a través de DEC), LG, Marvell Technology Group, Microsemi, Microsoft, NEC, Nintendo, Nuvoton, Nvidia, NXP (antes Philips Semiconductor), Oki, ON Semiconductor, Panasonic, Qualcomm, Renesas, Samsung, Sharp, Silicon Labs, Sony, ST-Ericsson, STMicroelectronics, Symbios Logic, Texas Instruments, Toshiba, Yamaha, Xilinx y ZiiLABS.
ARM ofrece varios diseños de núcleos de microprocesador, incluyendo ARM7, ARM9, ARM11, Cortex-A8, Cortex-A9 y Cortex-A15. Las empresas suelen licenciar estos diseños de ARM para fabricarlos e integrarlos en sus propios sistemas en chip (SoC) con otros componentes, como RAM, GPU o bandas base de radio (para teléfonos móviles).
Los paquetes de sistema en chip que integran diseños de núcleo ARM incluyen las tres primeras generaciones de Nvidia Tegra, la familia Quatro de CSR plc, Nova y NovaThor de ST-Ericsson, Precision32 MCU de Silicon Labs, los productos OMAP de Texas Instruments, los productos Hummingbird y Exynos de Samsung, la línea Ax SoC de Apple y el i.MX de Freescale.
Las empresas también pueden obtener una licencia arquitectónica de ARM para diseñar sus propios núcleos de CPU utilizando el conjunto de instrucciones ARM. Las implementaciones de arquitectura ARM distintas por parte de licenciatarios incluyen el A6 de Apple, X-Gene de AppliedMicro, Snapdragon y Krait de Qualcomm, StrongARM de DEC, XScale de Marvell (antes Intel) y el proyectado Project Denver de Nvidia.
Historia[editar]Concebida originalmente por la empresa británica Acorn Computers para su uso en sus computadoras personales, los primeros productos basados en ARM fueron los módulos de coprocesador para la serie de computadoras BBC Micro. Después de lograr el éxito con la computadora BBC Micro, Acorn Computers consideró cómo pasar del relativamente simple procesador MOS Technology 6502 para abordar mercados empresariales como el que pronto sería dominado por el IBM PC, lanzado en 1981. El plan Acorn Business Computer (ABC) requería una serie de procesadores secundarios para que funcionaran con la plataforma BBC Micro, pero procesadores como el Motorola 68000 y el National Semiconductor 32016 se consideraron inadecuados, y el 6502 no era lo suficientemente potente para una interfaz de usuario basada en gráficos.[12]
Después de probar todos los procesadores disponibles y encontrarlos deficientes, Acorn decidió que necesitaba una nueva arquitectura. Inspirado por los documentos técnicos del proyecto Berkeley RISC, Acorn consideró diseñar su propio procesador.[13] Una visita al Western Design Center en Phoenix, donde el 6502 estaba siendo actualizado por lo que era efectivamente una empresa de una sola persona, mostró a los ingenieros de Acorn Steve Furber y Sophie Wilson que no necesitaban recursos masivos ni instalaciones de investigación y desarrollo de última generación.[14]
Wilson desarrolló el conjunto de instrucciones, escribiendo una simulación del procesador en BBC Basic que se ejecutaba en un BBC Micro con un segundo procesador 6502. Esto convenció a los ingenieros de Acorn de que estaban en el camino correcto. Wilson se acercó al CEO de Acorn, Hermann Hauser, y solicitó más recursos. Una vez que se dio la aprobación, se reunió un pequeño equipo para implementar el modelo de Wilson en hardware.
Un procesador ARM de Conexant utilizado principalmente en enrutadoresAcorn RISC Machine: ARM2[editar]El proyecto oficial Acorn RISC Machine comenzó en octubre de 1983. VLSI Technology fue elegida como el "socio de silicio", ya que eran una fuente de ROM y chips personalizados para Acorn. El diseño fue dirigido por Wilson y Furber, y se implementó conscientemente con una ética de eficiencia similar al 6502.[15] Un objetivo de diseño clave fue lograr un manejo de entrada/salida (interrupciones) de baja latencia como el 6502. La arquitectura de acceso a memoria del 6502 había permitido a los desarrolladores producir máquinas rápidas sin utilizar costoso hardware de acceso directo a memoria. VLSI produjo el primer silicio ARM el 26 de abril de 1985, funcionó la primera vez y se conoció como ARM1 en abril de 1985.[2] Los primeros sistemas de producción denominados ARM2 estuvieron disponibles al año siguiente.
El coprocesador ARM1 para el BBC MicroLa primera aplicación práctica del ARM fue como coprocesador para el BBC Micro, donde se utilizó para desarrollar el software de simulación para finalizar el desarrollo de los chips de soporte (VIDC, IOC, MEMC) y para acelerar el software CAD utilizado en el desarrollo de ARM2. Wilson reescribió posteriormente BBC Basic en lenguaje ensamblador ARM, y el profundo conocimiento obtenido al diseñar el conjunto de instrucciones permitió que el código fuera muy denso, lo que convirtió a ARM BBC Basic en una prueba excelente para cualquier emulador ARM. El objetivo original de una computadora principalmente basada en ARM se logró en 1987 con el lanzamiento del Acorn Archimedes.[16]
En 1992, Acorn ganó nuevamente el Queen's Award for Technology por el ARM.
El ARM2 contaba con un bus de datos de 32 bits, un espacio de direcciones de 26 bits y 27 registros de 32 bits. 8 bits del registro de contador de programa estaban disponibles para otros fines; los 6 bits superiores (disponibles debido al espacio de direcciones de 26 bits) servían como banderas de estado, y los 2 bits inferiores (disponibles porque el contador de programa siempre estaba alineado a palabras) se usaban para establecer modos. Aunque el bus de direcciones se extendió a 32 bits en el ARM6, el código del programa aún debía residir dentro de los primeros 64 megabytes de memoria en modo de compatibilidad de 26 bits, debido a los bits reservados para las banderas de estado.[17] El ARM2 tenía un recuento de transistores de solo 30,000, en comparación con el modelo 68000 de Motorola, seis años más antiguo, con 68,000.[18] Gran parte de esta simplicidad provenía de la falta de microcódigo (que representa aproximadamente una cuarta parte o un tercio del 68000) y de (como la mayoría de las CPU de la época) no incluir ninguna caché. Esta simplicidad permitía un bajo consumo de energía, pero un rendimiento superior al Intel 80286. Un sucesor, el ARM3, se produjo con una caché de 4 KB, lo que mejoró aún más el rendimiento.[19]
Apple, DEC, Intel, Marvell: ARM6, StrongARM, XScale[editar]A finales de la década de 1980, Apple Computer y VLSI Technology comenzaron a trabajar con Acorn en versiones más nuevas del núcleo ARM. En 1990, Acorn escindió el equipo de diseño en una nueva empresa llamada Acorn RISC Machines Ltd., que se convirtió en ARM Ltd cuando su empresa matriz, ARM Holdings plc, cotizó en la Bolsa de Valores de Londres y NASDAQ en 1998.[20]
El nuevo trabajo de Apple-ARM eventualmente evolucionaría hacia el ARM6, lanzado por primera vez a principios de 1992. Apple utilizó el ARM 610 basado en ARM6 como base para su asistente digital personal (PDA) Apple Newton. En 1994, Acorn utilizó el ARM 610 como unidad central de procesamiento (CPU) principal en sus computadoras Risc PC. DEC licenció la arquitectura ARM6 y produjo el StrongARM. A 233 MHz, esta CPU consumía solo un vatio (las versiones más nuevas consumen mucho menos). Este trabajo fue transferido posteriormente a Intel como parte de un acuerdo de demanda, e Intel aprovechó la oportunidad para complementar su línea i960 con el StrongARM. Intel desarrolló posteriormente su propia implementación de alto rendimiento llamada XScale, que desde entonces ha vendido a Marvell.
Licenciamiento[editar]El núcleo ARM ha permanecido esencialmente del mismo tamaño a lo largo de estos cambios. ARM2 tenía 30,000 transistores, el ARM6 creció solo a 35,000. El negocio principal de ARM es la venta de núcleos IP, que los licenciatarios utilizan para crear microcontroladores y CPU basados en esos núcleos. El fabricante de diseño original combina el núcleo ARM con otras partes para producir una CPU completa, típicamente una que se puede construir en fundiciones de semiconductores existentes a bajo costo y aún así ofrecer un rendimiento sustancial. La implementación más exitosa ha sido el ARM7TDMI con cientos de millones vendidos. Atmel ha sido un centro de diseño precursor en el sistema embebido basado en ARM7TDMI.
Las arquitecturas ARM utilizadas en teléfonos inteligentes, asistentes digitales personales y otros dispositivos móviles van desde ARMv5, utilizado en dispositivos de gama baja, hasta ARMv6, hasta la serie Cortex-A (ARMv7) en dispositivos de gama alta actuales. ARMv7 incluye una unidad de punto flotante de hardware, con una velocidad mejorada en comparación con el punto flotante basado en software.
En 2009, algunos fabricantes introdujeron netbooks basados en CPU de arquitectura ARM, compitiendo directamente con netbooks basados en Intel Atom.[21] Según la firma de analistas IHS iSuppli, para 2015, se estima que los circuitos integrados ARM estarán en el 23% de todas las computadoras portátiles.[22]
Núcleos ARM[editar]Artículo principal: Lista de núcleos de microprocesador ARM
Arquitectura Familia diseñada por ARM Holdings Familia diseñada por terceros Perfil Cortex
ARMv1 ARM1
ARMv2 ARM2, ARM3 Amber
ARMv3 ARM6, ARM7
ARMv4 ARM7TDMI, ARM8, ARM9TDMI StrongARM, FA526
ARMv5 ARM7EJ, ARM9E, ARM10E XScale, FA626TE, Feroceon, PJ1/Mohawk
ARMv6 ARM11
ARMv6-M ARM Cortex-M0, ARM Cortex-M0+, ARM Cortex-M1 Microcontrolador
ARMv7-M ARM Cortex-M3 Microcontrolador
ARMv7E-M ARM Cortex-M4 Microcontrolador
ARMv7-R ARM Cortex-R4, ARM Cortex-R5, ARM Cortex-R7 Tiempo real
ARMv7-A ARM Cortex-A5, ARM Cortex-A7, ARM Cortex-A8,
ARM Cortex-A9, ARM Cortex-A12, ARM Cortex-A15 Scorpion, Krait, PJ4/Sheeva, Swift Aplicación
ARMv8-A ARM Cortex-A53, ARM Cortex-A57[23] X-Gene, Denver Aplicación
ARM proporciona una lista de proveedores que implementan núcleos ARM en sus diseños.[24]
Ejemplos de aplicaciones de núcleos ARM[editar]Artículo principal: Lista de aplicaciones de núcleos ARM
Los núcleos ARM se utilizan en varios productos, particularmente PDA y teléfonos inteligentes. Algunos ejemplos informáticos son Microsoft Surface, Apple iPad y ASUS Eee Pad Transformer. Otros incluyen el iPhone de Apple, el reproductor multimedia portátil iPod, la cámara digital Canon PowerShot A470, la consola de juegos portátil Nintendo DS y el sistema de navegación paso a paso TomTom.
En 2005, ARM participó en el desarrollo de la computadora de la Universidad de Manchester, SpiNNaker, que utilizó núcleos ARM para simular el cerebro humano.[25]
Los chips ARM también se utilizan en Raspberry Pi, BeagleBoard, BeagleBone, PandaBoard y otras computadoras de placa única, porque son muy pequeños, económicos y consumen muy poca energía.
Arquitectura[editar] Esta sección necesita citas adicionales para su verificación. Ayude a mejorar este artículo agregando citas de fuentes confiables. El material sin fuente puede ser cuestionado y eliminado. (Marzo de 2011)
Desde 1995, el ARM Architecture Reference Manual ha sido la fuente principal de documentación sobre la arquitectura del procesador ARM y el conjunto de instrucciones, distinguiendo las interfaces que todos los procesadores ARM deben admitir (como la semántica de las instrucciones) de los detalles de implementación que pueden variar. La arquitectura ha evolucionado con el tiempo y, a partir de la serie Cortex de núcleos, se definen tres "perfiles":
Perfil "Aplicación": serie Cortex-A
Perfil "Tiempo real": serie Cortex-R
Perfil "Microcontrolador": serie Cortex-M.
Los perfiles pueden subconjuntar la arquitectura. Por ejemplo, el perfil ARMv6-M (utilizado por Cortex M0 / M0+ / M1) es un subconjunto del perfil ARMv7-M que admite menos instrucciones.
Modos de CPU[editar]La arquitectura ARM especifica varios modos de CPU, según la arquitectura. En cualquier momento, la CPU puede estar en un solo modo, pero puede cambiar de modo debido a eventos externos (interrupciones) o mediante programación.[26]
Modo usuario
El único modo no privilegiado.
Modo de interrupción rápida
Un modo privilegiado al que se entra cada vez que el procesador acepta una interrupción FIQ.
Modo de interrupción
Un modo privilegiado al que se entra cada vez que el procesador acepta una interrupción IRQ.
Modo supervisor (svc)
Un modo privilegiado al que se entra cada vez que la CPU se restablece o cuando se ejecuta una instrucción SWI.
Modo aborto
Un modo privilegiado al que se entra cada vez que ocurre una excepción de aborto de prefetch o aborto de datos.
Modo indefinido
Un modo privilegiado al que se entra cada vez que ocurre una excepción de instrucción indefinida.
Modo sistema (ARMv4 y superior)
El único modo privilegiado al que no se entra por una excepción. Solo se puede entrar ejecutando una instrucción que escriba explícitamente en los bits de modo del CPSR.
Modo MON (solo extensiones de seguridad)
Se introduce un modo monitor para admitir la extensión TrustZone en el núcleo ARM.
HYP también conocido como modo PL2 (ARMv7)
Un modo de extensiones de virtualización / hipervisor en el núcleo ARM que se introdujo en la arquitectura ARM-7v más reciente (a partir de 2012).[27]
Conjunto de instrucciones[editar]La implementación original de ARM estaba cableada sin microcódigo, como el mucho más simple procesador de 8 bits 6502 utilizado en microcomputadoras Acorn anteriores.
La arquitectura ARM incluye las siguientes características RISC:
Arquitectura de carga/almacenamiento.
Sin soporte para accesos a memoria no alineados (aunque ahora compatible desde núcleos ARMv6, con algunas excepciones relacionadas con instrucciones de carga/almacenamiento múltiple de palabras).
Banco de registros uniforme de 16 × 32 bits (incluyendo el Contador de Programa, el Puntero de Pila y el Registro de Enlace).
Ancho de instrucción fijo de 32 bits para facilitar la decodificación y el pipelining, a costa de una densidad de código reducida. Posteriormente, el conjunto de instrucciones Thumb aumentó la densidad de código.
Ejecución en su mayoría de un solo ciclo de reloj.
Para compensar el diseño más simple, en comparación con procesadores como el Intel 80286 y el Motorola 68020, se utilizaron algunas características de diseño adicionales:
Ejecución condicional de la mayoría de las instrucciones, reduciendo la sobrecarga de saltos y compensando la falta de un predictor de saltos.
Las instrucciones aritméticas modifican los códigos de condición solo cuando se desea.
Desplazador de barril de 32 bits que se puede utilizar sin penalización de rendimiento con la mayoría de las instrucciones aritméticas y cálculos de direcciones.
Modos de direccionamiento indexado potentes.
Un registro de enlace para llamadas rápidas a funciones hoja.
Subsistema de interrupciones simple pero rápido de 2 niveles de prioridad con bancos de registros conmutados.
Instrucciones aritméticas[editar]ARM admite instrucciones de suma, resta y multiplicación. Las instrucciones de división de enteros solo están implementadas por núcleos ARM basados en las siguientes arquitecturas ARM:
Las arquitecturas ARMv7-M y ARMv7E-M siempre incluyen instrucciones de división.[28]
La arquitectura ARMv7-R siempre incluye instrucciones de división en el conjunto de instrucciones Thumb, pero opcionalmente en el conjunto de instrucciones ARM.[29]
La arquitectura ARMv7-A incluye opcionalmente instrucciones de división. Las instrucciones pueden no estar implementadas, o implementadas solo en el conjunto de instrucciones Thumb, o en ambos conjuntos, o implementadas si se incluyen las Extensiones de Virtualización.[29]
Registros[editar]Los registros R0-R7 son los mismos en todos los modos de CPU; nunca están bancarizados.
R13 y R14 están bancarizados en todos los modos de CPU privilegiados excepto el modo sistema. Es decir, cada modo al que se puede entrar debido a una excepción tiene su propio R13 y R14. Estos registros generalmente contienen el puntero de pila y la dirección de retorno de las llamadas a funciones, respectivamente.
Registros entre modos de CPU usr sys svc abt und irq fiq
R0
R1
R2
R3
R4
R5
R6
R7
R8 R8_fiq
R9 R9_fiq
R10 R10_fiq
R11 R11_fiq
R12 R12_fiq
R13 R13_svc R13_abt R13_und R13_irq R13_fiq
R14 R14_svc R14_abt R14_und R14_irq R14_fiq
R15
CPSR
SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq
Alias:
R13 también se denomina SP, el Puntero de Pila.
R14 también se denomina LR, el Registro de Enlace.
R15 también se denomina PC, el Contador de Programa.
Ejecución condicional[editar]Casi todas las instrucciones ARM tienen una característica de ejecución condicional llamada predicación, que se implementa con un selector de código de condición de 4 bits (el predicado). Para permitir la ejecución incondicional, uno de los códigos de cuatro bits hace que la instrucción se ejecute siempre. La mayoría de las otras arquitecturas de CPU solo tienen códigos de condición en instrucciones de salto.
Aunque el predicado ocupa 4 de los 32 bits en un código de instrucción, y por lo tanto reduce significativamente los bits de codificación disponibles para desplazamientos en instrucciones de acceso a memoria, evita las instrucciones de salto al generar código para sentencias if pequeñas. Además de eliminar las propias instrucciones de salto, esto preserva la canalización de búsqueda/decodificación/ejecución a costa de solo un ciclo por instrucción omitida.
El ejemplo estándar de ejecución condicional es el algoritmo euclidiano basado en resta:
En el lenguaje de programación C, el bucle es:
while (i != j)
{
if (i > j)
{
i -= j;
}
else
{
j -= i;
}
}
En ensamblador ARM, el bucle es:
loop: CMP Ri, Rj ; establece la condición "NE" si (i != j),
; "GT" si (i > j),
; o "LT" si (i < j)
SUBGT Ri, Ri, Rj ; si "GT" (Mayor que), i = i-j;
SUBLT Rj, Rj, Ri ; si "LT" (Menor que), j = j-i;
BNE loop ; si "NE" (No igual), entonces bucle
que evita los saltos alrededor de las cláusulas then y else. Si Ri y Rj son iguales, no se ejecutará ninguna de las instrucciones SUB, eliminando la necesidad de un salto condicional para implementar la verificación while en la parte superior del bucle, por ejemplo, si se hubiera utilizado SUBLE (menor o igual).
Una de las formas en que el código Thumb proporciona una codificación más densa es eliminar el selector de cuatro bits de las instrucciones que no son de salto.
Otras características[editar]Otra característica del conjunto de instrucciones es la capacidad de plegar desplazamientos y rotaciones en las instrucciones de "procesamiento de datos" (aritméticas, lógicas y de movimiento entre registros), de modo que, por ejemplo, la sentencia C
a += (j << 2);
podría representarse como una instrucción de una sola palabra y un solo ciclo:[30]
ADD Ra, Ra, Rj, LSL #2
Esto hace que el programa ARM típico sea más denso de lo esperado con menos accesos a memoria; por lo tanto, la canalización se utiliza de manera más eficiente.
El procesador ARM también tiene características raramente vistas en otras arquitecturas RISC, como el direccionamiento relativo al PC (de hecho, en el ARM de 32 bits[1] el PC es uno de sus 16 registros) y modos de direccionamiento de pre y post incremento.
El conjunto de instrucciones ARM ha aumentado con el tiempo. Algunos procesadores ARM antiguos (anteriores a ARM7TDMI), por ejemplo, no tienen instrucción para almacenar una cantidad de dos bytes.
Pipeline y otros problemas de implementación[editar]Los ARM7 e implementaciones anteriores tienen un pipeline de tres etapas; las etapas son búsqueda, decodificación y ejecución. Los diseños de mayor rendimiento, como el ARM9, tienen pipelines más profundos: Cortex-A8 tiene trece etapas. Los cambios adicionales de implementación para un mayor rendimiento incluyen un sumador más rápido y una lógica de predicción de saltos más extensa. La diferencia entre los núcleos ARM7DI y ARM7DMI, por ejemplo, era un multiplicador mejorado; de ahí la "M" añadida.
Coprocesadores[editar]La arquitectura ARM proporciona una forma no intrusiva de extender el conjunto de instrucciones mediante "coprocesadores" a los que se puede acceder mediante instrucciones MCR, MRC, MRRC, MCRR y similares. El espacio de coprocesadores está dividido lógicamente en 16 coprocesadores numerados del 0 al 15, siendo el coprocesador 15 (cp15) reservado para algunas funciones de control típicas, como la gestión de cachés y la operación de MMU en procesadores que lo tienen.
En las máquinas basadas en ARM, los dispositivos periféricos suelen estar conectados al procesador mapeando sus registros físicos en el espacio de memoria ARM o en el espacio de coprocesador, o conectándose a otro dispositivo (un bus) que a su vez se conecta al procesador. Los accesos a coprocesadores tienen menor latencia, por lo que algunos periféricos, como un controlador de interrupciones XScale, están diseñados para ser accesibles de ambas maneras, a través de memoria y a través de coprocesadores.
En otros casos, los diseñadores de chips solo integran hardware utilizando el mecanismo de coprocesador. Por ejemplo, un motor de procesamiento de imágenes podría ser un núcleo ARM7TDMI pequeño combinado con un coprocesador que tiene operaciones especializadas para admitir un conjunto específico de primitivas de transcodificación HDTV.
Depuración[editar] Esta sección necesita citas adicionales para su verificación. Ayude a mejorar este artículo agregando citas de fuentes confiables. El material sin fuente puede ser cuestionado y eliminado. (Marzo de 2011)
Todos los procesadores ARM modernos incluyen instalaciones de depuración de hardware, lo que permite a los depuradores de software realizar operaciones como detener, ejecutar paso a paso y establecer puntos de interrupción en el código desde el reinicio. Estas instalaciones se construyen utilizando soporte JTAG, aunque algunos núcleos más nuevos admiten opcionalmente el protocolo de dos hilos "SWD" de ARM. En los núcleos ARM7TDMI, la "D" representaba soporte de depuración JTAG, y la "I" representaba la presencia de un módulo de depuración "EmbeddedICE". Para las generaciones de núcleos ARM7 y ARM9, EmbeddedICE sobre JTAG era un estándar de depuración de facto, aunque no estaba garantizado arquitectónicamente.
La arquitectura ARMv7 define instalaciones de depuración básicas a nivel arquitectónico. Estas incluyen puntos de interrupción, puntos de observación y ejecución de instrucciones en un "Modo de Depuración"; instalaciones similares también estaban disponibles con EmbeddedICE. Se admiten tanto la depuración en "modo de parada" como en "modo monitor". El mecanismo de transporte real utilizado para acceder a las instalaciones de depuración no está especificado arquitectónicamente, pero las implementaciones generalmente incluyen soporte JTAG.
Existe una arquitectura de depuración ARM "CoreSight" separada, que no es requerida arquitectónicamente por los procesadores ARMv7.
Herramientas[editar]La arquitectura ARM es compatible con un conjunto de herramientas de desarrollo como Emprog ThunderBench para ARM. Estas herramientas permiten a los ingenieros de desarrollo programar el dispositivo de arquitectura ARM utilizando un lenguaje de alto nivel como C.[31]
Instrucciones de mejora DSP[editar]Para mejorar la arquitectura ARM para el procesamiento de señales digitales y aplicaciones multimedia, se añadieron instrucciones DSP al conjunto.[32] Estas se indican con una "E" en el nombre de las arquitecturas ARMv5TE y ARMv5TEJ. Las variantes E también implican T, D, M e I.
Las nuevas instrucciones son comunes en las arquitecturas de procesadores de señales digitales. Incluyen variaciones de multiplicación-acumulación con signo, suma y resta saturada, y conteo de ceros iniciales.
Extensiones SIMD para multimedia[editar]Introducidas en la arquitectura ARMv6.[33]
Jazelle[editar]Artículo principal: Jazelle
Jazelle DBX (Direct Bytecode eXecution) es una técnica que permite que el bytecode de Java se ejecute directamente en la arquitectura ARM como un tercer estado de ejecución (y conjunto de instrucciones) junto con los modos ARM y Thumb existentes. El soporte para este estado se indica con la "J" en la arquitectura ARMv5TEJ y en los nombres de los núcleos ARM9EJ-S y ARM7EJ-S. El soporte para este estado es obligatorio a partir de ARMv6 (excepto para el perfil ARMv7-M), aunque los núcleos más nuevos solo incluyen una implementación trivial que no proporciona aceleración de hardware.
Thumb[editar] Esta sección necesita citas adicionales para su verificación. Ayude a mejorar este artículo agregando citas de fuentes confiables. El material sin fuente puede ser cuestionado y eliminado. (Marzo de 2011)
Para mejorar la densidad del código compilado, los procesadores desde el ARM7TDMI (lanzado en 1994[34]) han contado con el conjunto de instrucciones Thumb, que tiene su propio estado. (La "T" en "TDMI" indica la característica Thumb). Cuando está en este estado, el procesador ejecuta el conjunto de instrucciones Thumb, una codificación compacta de 16 bits para un subconjunto del conjunto de instrucciones ARM.[35 ] La mayoría de las instrucciones Thumb se mapean directamente a instrucciones ARM normales. El ahorro de espacio proviene de hacer que algunos de los operandos de las instrucciones sean implícitos y limitar el número de posibilidades en comparación con las instrucciones ARM ejecutadas en el estado del conjunto de instrucciones ARM.
En Thumb, los opcodes de 16 bits tienen menos funcionalidad. Por ejemplo, solo los saltos pueden ser condicionales, y muchos opcodes están restringidos a acceder solo a la mitad de los registros de propósito general de la CPU. Los opcodes más cortos proporcionan una mejor densidad de código en general, incluso si algunas operaciones requieren instrucciones adicionales. En situaciones donde el puerto de memoria o el ancho de bus están limitados a menos de 32 bits, los opcodes Thumb más cortos permiten un mayor rendimiento en comparación con el código ARM de 32 bits, ya que es posible que se necesite cargar menos código de programa en el procesador a través del ancho de banda de memoria restringido.
El hardware embebido, como Game Boy Advance, típicamente tiene una pequeña cantidad de RAM accesible con un datapath completo de 32 bits; la mayoría se accede a través de un datapath secundario de 16 bits o más estrecho. En esta situación, generalmente tiene sentido compilar código Thumb y optimizar manualmente algunas de las secciones más intensivas en CPU utilizando instrucciones ARM completas de 32 bits, colocando estas instrucciones más anchas en la memoria accesible por bus de 32 bits.
El primer procesador con un decodificador de instrucciones Thumb fue el ARM7TDMI. Todas las familias ARM9 y posteriores, incluido XScale, han incluido un decodificador de instrucciones Thumb.
Thumb-2[editar]La tecnología Thumb-2 se introdujo en el núcleo ARM1156, anunciado en 2003. Thumb-2 extiende el limitado conjunto de instrucciones de 16 bits de Thumb con instrucciones adicionales de 32 bits para dar al conjunto de instrucciones más amplitud, creando así un conjunto de instrucciones de longitud variable. Un objetivo declarado para Thumb-2 era lograr una densidad de código similar a Thumb con un rendimiento similar al conjunto de instrucciones ARM en memoria de 32 bits. En ARMv7, se puede decir que este objetivo se ha cumplido.[cita requerida]
Thumb-2 extiende tanto el conjunto de instrucciones ARM como Thumb con manipulación de campos de bits, saltos de tabla y ejecución condicional. Un nuevo "Lenguaje Ensamblador Unificado" (UAL) admite la generación de instrucciones Thumb-2 o ARM a partir del mismo código fuente; las versiones de Thumb vistas en los procesadores ARMv7 son esencialmente tan capaces como el código ARM (incluida la capacidad de escribir controladores de interrupciones). Esto requiere un poco de cuidado y el uso de una nueva instrucción "IT" (if-then), que permite hasta cuatro instrucciones sucesivas ejecutarse en función de una condición probada. Al compilar en código ARM, esto se ignora, pero al compilar en Thumb-2 genera una instrucción real. Por ejemplo:
; if (r0 == r1)
CMP r0, r1
ITE EQ ; ARM: sin código ... Thumb: instrucción IT
; then r0 = r2;
MOVEQ r0, r2 ; ARM: condicional; Thumb: condición a través de ITE 'T' (then)
; else r0 = r3;
MOVNE r0, r3 ; ARM: condicional; Thumb: condición a través de ITE 'E' (else)
; recuerde que la instrucción Thumb MOV no tiene bits para codificar "EQ" o "NE"
Todos los chips ARMv7 admiten el conjunto de instrucciones Thumb-2. Otros chips de las series Cortex y ARM11 admiten tanto el "estado del conjunto de instrucciones ARM" como el "estado del conjunto de instrucciones Thumb-2".[36][37][38]
También conocido como Thumb-2EE y comercializado como Jazelle RCT (Runtime Compilation Target), la tecnología ThumbEE se presentó oficialmente en 2005 y debutó en el núcleo del procesador ARM Cortex-A8. Funcionando como el cuarto modo operativo distinto para los procesadores ARM, ThumbEE introduce modificaciones específicas al conjunto de instrucciones de longitud variable Thumb-2 existente. Estos ajustes arquitectónicos optimizan el pipeline de instrucciones específicamente para código máquina generado dinámicamente por compiladores just-in-time (JIT) dentro de entornos de ejecución administrados. Diseñado como un objetivo de ejecución para lenguajes interpretados de alto nivel o basados en máquinas virtuales, incluidos Java, C#, Perl y Python, ThumbEE permite que los flujos de trabajo de compilación JIT generen código binario más denso sin sacrificar el rendimiento en tiempo de ejecución.
ThumbEE incorpora varias capacidades de hardware únicas para facilitar la ejecución de código administrado. Aplica una validación automática de punteros nulos para todas las operaciones de carga y almacenamiento de memoria, incluye un opcode dedicado para la verificación de límites de matrices en tiempo de ejecución, otorga acceso directo al banco de registros r8 a r15, la misma región que almacena el estado de la máquina virtual Java Jazelle/DBX, e introduce instrucciones de salto especializadas para invocar rutinas de controlador de tiempo de ejecución predefinidas.[39] Los controladores son fragmentos de código compactos y frecuentemente invocados que implementan la lógica central del lenguaje de alto nivel, como la asignación dinámica de memoria para objetos recién instanciados. Todas estas capacidades se implementan reutilizando un pequeño conjunto de opcodes Thumb-2 no utilizados, cuyo comportamiento de ejecución está controlado por el estado activo del modo ThumbEE del procesador.
Deprecación de ThumbEE
El 23 de noviembre de 2011, ARM deprecó oficialmente todo uso por parte de desarrolladores del conjunto de instrucciones ThumbEE.[40] Esta depreciación eliminó la aceleración de hardware Jazelle nativa, lo que significa que los núcleos de procesador modernos ya no proporcionan descarga de hardware dedicada para la ejecución de bytecode Java. Tras este cambio, el estado operativo ThumbEE solo se conserva en las microarquitecturas de CPU para mantener la compatibilidad con binarios heredados que contienen instrucciones específicas de ThumbEE. Además, la instrucción BXJ (branch-and-exchange-Jazelle) se redefinió para comportarse de manera idéntica a la instrucción BX estándar en todos los contextos operativos modernos.[41]
Extensión de punto flotante (VFP)
Se ha propuesto desde mayo de 2013 fusionar el artículo ARMhf en esta sección para una documentación unificada. (Discusión abierta)
Vector Floating-Point (VFP) es una extensión de coprocesador de punto flotante dedicada superpuesta a la arquitectura ARM base. Proporciona aritmética de punto flotante de precisión simple y doble de bajo costo, totalmente compatible con el estándar ANSI/IEEE 754-1985. La aceleración de hardware VFP sirve a una amplia gama de casos de uso embebidos, incluidos asistentes digitales personales, teléfonos inteligentes, canalizaciones de codificación y decodificación de audio, renderizado 3D, procesamiento de audio digital, dispositivos de impresión, decodificadores de televisión y sistemas de control automotriz. Las primeras revisiones de VFP admitían un modo de ejecución vectorial limitado destinado al procesamiento paralelo de datos; sin embargo, este modo procesaba elementos vectoriales de forma secuencial en lugar de en paralelo, sin lograr las ganancias de rendimiento de la computación SIMD (Single Instruction, Multiple Data) verdadera. Como resultado, esta característica de ejecución vectorial original se eliminó poco después del lanzamiento,[42] siendo reemplazada por el motor NEON Advanced SIMD más potente.
Ciertos núcleos ARM, como el Cortex-A8, integran un módulo VFPLite de rendimiento reducido en lugar de una unidad VFP completa. VFPLite requiere aproximadamente diez veces más ciclos de reloj para completar cálculos de punto flotante equivalentes en comparación con la implementación VFP completa.[43] Históricamente, los procesadores ARM han incluido variantes de coprocesadores de punto flotante y SIMD alternativos como FPA, FPE e iwMMXt. Si bien estos módulos proporcionan funcionalidad matemática superpuesta con VFP, utilizan codificaciones de opcode incompatibles y no pueden ejecutar binarios nativos de VFP.
Se han lanzado múltiples revisiones de VFP a lo largo de las generaciones de arquitectura ARM:
- VFPv1: Obsoleto permanentemente y ya no compatible con núcleos modernos.
- VFPv2: Una extensión de conjunto de instrucciones opcional para arquitecturas ARMv5TE, ARMv5TEJ y ARMv6.
- VFPv3-D32: Compatible con versiones anteriores de VFPv2, agregando operación de FPU sin excepciones, un conjunto predeterminado de treinta y dos registros de punto flotante de 64 bits, instrucciones de conversión escalar-float-doble (VCVT) y soporte de valores inmediatos para transferencias de datos de registro VMOV.
- VFPv3-D16: Equivalente en características a VFPv3-D32 pero limitado a dieciséis registros FPU de 64 bits para reducir el área de silicio.
- VFPv3-F16: Una variante poco común que agrega soporte de hardware para aritmética de punto flotante de media precisión de 16 bits IEEE 754-2008.
- VFPv4: Integrado en el núcleo Cortex-A5, introduciendo instrucciones de multiplicación-acumulación fusionada (FMA) para un cálculo numérico más eficiente.
SIMD avanzado (NEON)
La extensión Advanced SIMD, conocida comercialmente como NEON y también denominada Media Processing Engine (MPE), es un conjunto de instrucciones SIMD combinado de 64 y 128 bits diseñado para proporcionar aceleración de hardware estandarizada para procesamiento de medios, análisis de señales y cargas de trabajo computacionales. NEON se incluye como hardware estándar en todos los procesadores Cortex-A8 y se implementa como una característica opcional para los núcleos de la serie Cortex-A9.[44] El motor permite un procesamiento de medios de muy bajo consumo: puede decodificar completamente flujos de audio MP3 a una velocidad de reloj de CPU de solo 10 MHz y ejecutar códecs de voz GSM Adaptive Multi-Rate (AMR) con una frecuencia máxima de reloj de 13 MHz. NEON cuenta con un conjunto de instrucciones especializado completo, archivos de registros independientes dedicados y pipelines de ejecución separados desacoplados del núcleo entero principal.[45]
Esta extensión admite datos enteros de 8, 16, 32 y 64 bits junto con valores de punto flotante de precisión simple de 32 bits, lo que permite operaciones SIMD aceleradas para decodificación de audio, codificación/decodificación de video, gráficos 2D/3D y cargas de trabajo de juegos. NEON puede procesar hasta 16 elementos de datos independientes en una sola instrucción. Su archivo de registros se comparte físicamente con la unidad de punto flotante VFP para optimizar la utilización de silicio. Si bien los procesadores Cortex-A8 y Cortex-A9 incluyen capacidad de registros vectoriales de 128 bits, procesan vectores de 128 bits en dos pasadas de ejecución de 64 bits secuenciales.[43] En contraste, la generación más reciente Cortex-A15 admite la ejecución paralela completa de 128 bits en un solo ciclo de pipeline para un mayor rendimiento.
Extensiones de seguridad (TrustZone)
Comercializadas bajo el nombre de TrustZone Technology, las Extensiones de Seguridad ARM se introdujeron por primera vez en la arquitectura ARMv6KZ a nivel de aplicación y en todas las generaciones de procesadores posteriores. La tecnología ofrece una alternativa rentable a la integración de un núcleo de seguridad dedicado completamente separado dentro de un sistema en chip (SoC). Logra el aislamiento particionando un solo núcleo de CPU física en dos dominios de ejecución virtuales reforzados por hardware, denominados oficialmente "mundos" para evitar conflictos de terminología con otras convenciones de nomenclatura de dominios de privilegio.
El procesador puede cambiar de contexto entre el mundo seguro y el mundo no seguro (normal) bajo reglas de control de acceso mediadas por hardware, evitando que los datos confidenciales y el código protegido se filtren del dominio seguro de mayor privilegio al dominio no confiable. Este mecanismo de cambio de mundo opera ortogonalmente a todas las demás características de la CPU, permitiendo que ambos dominios se ejecuten de forma independiente mientras comparten el mismo hardware de procesador físico. Los controladores de memoria en el chip y las interfaces periféricas son completamente conscientes del estado actual del mundo, lo que permite un control de acceso de hardware granular para restringir el acceso a secretos criptográficos, firmware protegido y código ejecutable autenticado almacenado en el dispositivo.
Una implementación típica de TrustZone ejecuta un sistema operativo rico en funciones, como Android o Linux, dentro del mundo no seguro, mientras que el firmware ligero crítico para la seguridad se ejecuta dentro del mundo seguro. Este firmware de mundo seguro se basa en iteraciones optimizadas para TrustZone de Trusted Foundations Software desarrollado originalmente por Trusted Logic Mobility. La arquitectura permite una gestión de derechos digitales (DRM) robusta para la protección de contenido multimedia en dispositivos ARM y aplica restricciones a nivel de hardware para bloquear manipulaciones no autorizadas del dispositivo.[46] Trusted Foundations Software fue adquirido posteriormente por Gemalto, mientras que el competidor Giesecke & Devrient desarrolló un marco de ejecución seguro rival llamado Mobicore. En abril de 2012, ARM, Gemalto y Giesecke & Devrient fusionaron sus activos de software TrustZone para formar la empresa conjunta Trustonic.[47][48] Además, Open Virtualization proporciona una implementación de referencia de código abierto del modelo de ejecución de mundo seguro TrustZone con fines de investigación y desarrollo.[49]
Es importante señalar que los detalles de implementación de bajo nivel propietarios de TrustZone no se han publicado completamente para una auditoría de seguridad pública independiente. Como resultado, el nivel exacto de garantía de seguridad proporcionado contra modelos de amenazas específicos sigue siendo difícil de cuantificar de manera concluyente para los investigadores externos.
Protección de páginas No-Execute
A partir de la arquitectura ARMv6, los procesadores ARM admiten permisos de páginas de memoria aplicados por hardware conocidos como XN (eXecute Never). Esta característica de protección de memoria marca regiones de memoria designadas como no ejecutables, evitando la ejecución de código malicioso o no intencionado desde segmentos de datos y mitigando vectores comunes de ataques de corrupción de memoria.[50]
ARMv8 y arquitectura de 64 bits
Lanzada a finales de 2011, la arquitectura ARMv8 introdujo una revisión arquitectónica fundamental para los diseños de procesadores ARM. Introduce un estado de ejecución nativo de 64 bits denominado AArch64 junto con un nuevo conjunto de instrucciones dedicado de 64 bits llamado A64. Dentro de la especificación ARMv8, el ecosistema heredado de 32 bits se denomina formalmente AArch32 para el estado del procesador y A32 para el conjunto de instrucciones clásico de 32 bits. El conjunto de instrucciones de longitud variable Thumb se renombra como T32 y no tiene equivalente nativo de 64 bits. ARMv8 habilita dos modos operativos híbridos: las aplicaciones de usuario de 32 bits pueden ejecutarse de forma nativa sobre un sistema operativo completo de 64 bits, y un sistema operativo de 32 bits puede ser virtualizado y administrado por una capa de hipervisor de 64 bits.[1] Múltiples proveedores de semiconductores, incluidos Applied Micro, AMD, Broadcom, Calxeda, HiSilicon, Samsung y STMicroelectronics, anunciaron públicamente hojas de ruta de productos basados en ARMv8 tras el lanzamiento de la arquitectura.[51][52][53][54] ARM presentó oficialmente sus dos primeros núcleos de aplicación ARMv8-A, el Cortex-A53 y el Cortex-A57, el 30 de octubre de 2012.[23]
En ambos estados de ejecución AArch32 y AArch64, ARMv8 eleva las unidades de punto flotante VFPv3/V4 y las extensiones NEON Advanced SIMD de opcionales a características obligatorias del núcleo. La arquitectura también introduce instrucciones de aceleración criptográfica dedicadas que proporcionan descarga de hardware para operaciones de cifrado AES y algoritmos hash SHA-1/SHA-256, mejorando el rendimiento de seguridad nativo para sistemas embebidos y de servidores modernos cifrados.
Características de AArch64:
Nuevo conjunto de instrucciones, A64
Tiene 31 registros de propósito general de 64 bits.
SP y PC dedicados separados.
Las instrucciones siguen teniendo 32 bits de longitud y son en su mayoría iguales a A32 (con las instrucciones LDM/STM y la mayoría de la ejecución condicional eliminadas).
La mayoría de las instrucciones pueden tomar argumentos de 32 o 64 bits.
Se asume que las direcciones son de 64 bits.
SIMD avanzado (NEON) mejorado
Tiene 32 × 128 registros de 128 bits (frente a 16), también accesibles a través de VFPv4.
Soporta punto flotante de doble precisión.
Totalmente compatible con IEEE 754.
Las instrucciones de cifrado/descifrado AES y hash SHA-1/SHA-2 también utilizan estos registros.
Un nuevo sistema de excepciones
Menos registros bancarizados y modos.
Traducción de memoria desde direcciones virtuales de 48 bits basada en el LPAE existente, que fue diseñado para extenderse fácilmente a 64 bits
Soporte de sistemas operativos:
Licenciamiento de arquitectura ARM, soporte de kernel y ecosistema comercial (reescrito)
Los parches del kernel de Linux que introducen soporte oficial para la arquitectura ARMv8 fueron enviados para revisión pública por Catalin Marinas, un ingeniero de software que trabaja en ARM Ltd. Estos parches se fusionaron formalmente y se integraron en el kernel principal de Linux con el lanzamiento de la versión 3.7 a finales de 2012.[55]
Licenciatarios de ARM
Esta sección requiere citas adicionales independientes para su verificación factual. Se anima a los lectores y editores a complementar referencias de fuentes confiables para fortalecer el artículo. Las afirmaciones sin soporte de citas válidas pueden ser cuestionadas y eliminadas. (Marzo de 2011)
La fotografía muestra el dado de un microcontrolador STM32F103VGT6, un chip construido alrededor del núcleo ARM Cortex-M3. Este dispositivo cuenta con 1 megabyte de memoria flash integrada, una unidad central de procesamiento (CPU) de 72 MHz y periféricos integrados para control de motores, comunicación Universal Serial Bus (USB) e interfaces de bus Controller Area Network (CAN). El componente es fabricado por STMicroelectronics.
Es notable que ARM Ltd opera como una empresa de propiedad intelectual (IP) de semiconductores sin fábrica y no fabrica ni vende directamente chips de CPU físicos o dispositivos microcontroladores de usuario final basados en sus propias arquitecturas. En cambio, la empresa monetiza principalmente sus diseños de procesadores mediante la concesión de licencias de arquitectura y núcleo ARM a socios externos calificados en toda la industria mundial de semiconductores. ARM ofrece acuerdos de licencia flexibles con estructuras de costos y alcances de entregables diferenciados adaptados a diversos escenarios de clientes. Para todos los licenciatarios, ARM proporciona descripciones de hardware integrables de núcleos de procesador ARM estándar, un conjunto completo de herramientas de desarrollo de software que incluye compiladores dedicados, depuradores y kits de desarrollo de software (SDK) completos, además del derecho comercial a fabricar y vender silicio semiconductor terminado integrado con núcleos de CPU ARM con licencia.
Las empresas de diseño de chips sin fábrica que integran núcleos ARM en sus diseños personalizados de sistema en chip (SoC) suelen buscar núcleos IP previamente verificados y listos para producción que requieren una modificación mínima. Para estos clientes, ARM proporciona archivos de netlist a nivel de compuerta del núcleo ARM seleccionado, acompañados de modelos de simulación abstractos y programas de prueba estandarizados para agilizar la integración del circuito y la verificación funcional durante la fase de diseño del chip. En contraste, los clientes más avanzados, incluidos los fabricantes de dispositivos integrados (IDM) y las fundiciones de semiconductores comerciales, a menudo optan por código RTL (Register Transfer Level) completamente sintetizable escrito en lenguaje de descripción de hardware Verilog.
Poseer datos RTL sintetizables permite a los licenciatarios realizar una optimización arquitectónica profunda, modificación funcional y extensiones de conjunto de instrucciones propietarias en la etapa de diseño de hardware. Este nivel de personalización permite a los equipos de diseño lograr objetivos de rendimiento especializados que no se pueden realizar utilizando netlists de fábrica sin modificar, como frecuencias de reloj ultra altas, operación de muy bajo consumo para dispositivos embebidos y extensiones de conjunto de instrucciones personalizadas para tareas de aceleración dedicadas. Si bien los términos de licencia de ARM prohíben a las empresas asociadas revender la arquitectura ARM en bruto o la IP del procesador en sí a terceros, los licenciatarios conservan todos los derechos para distribuir productos de hardware terminados que contengan núcleos ARM, incluidos chips semiconductores independientes, placas de desarrollo de evaluación y sistemas embebidos completamente ensamblados.
Las fundiciones comerciales de productos básicos representan una categoría especial de titulares de licencias de ARM. Además del derecho a vender obleas de silicio prefabricadas y chips terminados con núcleos ARM integrados, estas fundiciones suelen mantener privilegios de licencia para reconfigurar y refabricar núcleos de procesador ARM en nombre de sus clientes de diseño externos.
ARM estructura su modelo de precios de IP en función del valor técnico percibido y el posicionamiento en el mercado de cada cartera de núcleos de procesador. En general, los núcleos ARM de nivel de entrada y de menor rendimiento tienen tarifas de licencia iniciales más bajas en comparación con las arquitecturas de núcleo de gama alta y ricas en funciones. Desde una perspectiva de implementación, los núcleos basados en RTL sintetizable tienen costos de licencia más altos que los núcleos de macro rígida (caja negra) precompilados con diseños físicos fijos.
La estructura de costos general se vuelve más compleja cuando las fundiciones comerciales tienen derechos de licencia ARM por volumen. Fundiciones importantes como Samsung y Fujitsu pueden ofrecer costos de IP subsidiados a sus clientes de fabricación interna. En este modelo de negocio, los diseñadores de chips que obtienen núcleos ARM a través del servicio de diseño interno de la fundición pueden reducir o eliminar por completo las tarifas de licencia estándar de ARM sin recurrencia de ingeniería (NRE). Sin embargo, este beneficio de costo tiene desventajas: Fujitsu y Samsung suelen cobrar de dos a tres veces más por oblea de silicio fabricada que las fundiciones puras dedicadas como TSMC y UMC.[cita requerida]
Para aplicaciones embebidas de volumen bajo a medio, las fundiciones orientadas a servicios de diseño ofrecen costos totales de proyecto más bajos debido a las tarifas de licencia de IP ARM subsidiadas. Para componentes semiconductores producidos en grandes volúmenes, el ahorro a largo plazo de los costos de fabricación de obleas más bajos supera los cargos únicos de NRE de ARM, lo que hace que las fundiciones puras dedicadas sean la opción económicamente más eficiente.
Un gran número de empresas de diseño de semiconductores y circuitos integrados mantienen licencias de IP ARM activas en diversas líneas de productos. Los titulares de licencias prominentes incluyen Analog Devices, empresas que proporcionan servicios analíticos de microscopio electrónico de barrido (SEM), AppliedMicro, Atmel, Broadcom, Cirrus Logic, Energy Micro, Faraday Technology, Freescale Semiconductor, Fujitsu, Intel (a través de un acuerdo legal con Digital Equipment Corporation), IBM, Infineon Technologies (desarrollador de la familia de MCU de 32 bits Infineon XMC4000), Marvell Technology Group, MediaTek, Nintendo, Nvidia, NXP Semiconductors, OKI, Qualcomm, Samsung, Sharp, STMicroelectronics y Texas Instruments, entre docenas de otros actores mundiales de la industria.
Licencia arquitectónica de ARM
Una licencia arquitectónica de ARM difiere fundamentalmente de la licencia de núcleo estándar tanto en costo como en barrera técnica. La licencia arquitectónica conlleva un umbral financiero sustancialmente más alto y exige extensos recursos de ingeniería internos, ya que los licenciatarios obtienen el derecho a diseñar microarquitecturas de CPU personalizadas compatibles con el conjunto de instrucciones (ISA) oficial de ARM, en lugar de simplemente integrar núcleos de procesador prediseñados. Debido a los altos requisitos técnicos y de capital, solo un pequeño número de empresas posee esta licencia arquitectónica avanzada, incluidas Intel (originalmente adquirida a través de su acuerdo con Digital Equipment Corporation), Marvell, Qualcomm y Broadcom.[56]
Costos de licencia aproximados
El informe financiero anual oficial de ARM de 2006 reveló que la empresa generó £88.7 millones en ingresos por regalías, derivados de envíos de licenciatarios que totalizaron 2.45 mil millones de unidades semiconductoras basadas en ARM.[57] Estos datos equivalen a una tarifa de regalía promedio por unidad de £0.036 en todos los dispositivos enviados. El valor promedio cubre todo el espectro de generaciones de núcleos ARM, desde núcleos modernos de alto rendimiento de alto costo hasta núcleos embebidos heredados de bajo costo.
En el mismo año fiscal, ARM registró £65.2 millones en ingresos directos por licencias de IP de núcleos de procesador,[58] con un total de 65 nuevos contratos de licencia de procesador firmados a nivel mundial.[59] Esto arroja un costo de licencia inicial promedio de aproximadamente £1 millón por licencia de núcleo individual, nuevamente promediado entre arquitecturas de vanguardia nuevas y diseños de núcleos heredados maduros.
Según el desglose financiero de 2006, aproximadamente el 60% de los ingresos centrados en procesadores de ARM provino de regalías por unidad, mientras que el 40% restante provino de tarifas de licencia iniciales. Al combinar ambas fuentes de ingresos, la contribución financiera promedio por producto final enviado alcanzó aproximadamente £0.06 para la comunidad de fabricantes y desarrolladores embebidos en general. Es fundamental tener en cuenta que las tarifas de licencia de IP únicas se asocian predominantemente con tecnologías de procesador recién lanzadas, mientras que los envíos masivos de unidades (y, por lo tanto, los ingresos acumulados por regalías) están impulsados principalmente por arquitecturas de núcleo maduras y establecidas con largos ciclos de vida en el mercado. Como resultado, las cifras promedio anteriores no pueden representar con precisión los costos exactos de licencia y regalías individuales para ningún producto específico basado en ARM o variante de núcleo de procesador.