Familia de arquitectura ARM

Ajustar Compartir Imprimir Citar
Familia de arquitecturas informáticas basadas en RISC

ARM (estilizado en minúsculas como arm, anteriormente un acrónimo de Advanced RISC Machines y originalmente Acorn RISC Machine) es una familia de arquitecturas de conjuntos de instrucciones de computadora con conjunto de instrucciones reducido (RISC) para procesadores de computadora, configuradas para diversos entornos. Arm Ltd. desarrolla las arquitecturas y las licencia a otras empresas, que diseñan sus propios productos que implementan una o más de esas arquitecturas, incluidos los diseños de sistema en un chip (SoC) y sistema en módulo (SOM), que incorporan diferentes componentes como memoria, interfaces y radios. También diseña núcleos que implementan estas arquitecturas de conjunto de instrucciones y licencia estos diseños a muchas empresas que incorporan esos diseños de núcleo en sus propios productos.

Debido a su bajo costo, consumo mínimo de energía y menor generación de calor que sus competidores, los procesadores ARM son deseables para dispositivos livianos, portátiles y alimentados por batería, incluidos teléfonos inteligentes, computadoras portátiles y tabletas, y otros sistemas integrados. Sin embargo, los procesadores ARM también se usan para computadoras de escritorio y servidores, incluida la supercomputadora más rápida del mundo (Fugaku) de 2020 a 2022. Con más de 230 mil millones de chips ARM producidos, a partir de 2022, ARM es la familia de instrucción más utilizada. establecer arquitecturas (ISA) y las ISA producidas en mayor cantidad. Actualmente, los núcleos Cortex ampliamente utilizados, los más antiguos "clásicos" núcleos y variantes de núcleos SecurCore especializados están disponibles para cada uno de estos para incluir o excluir capacidades opcionales.

Ha habido varias generaciones del diseño ARM. El ARM1 original usaba una estructura interna de 32 bits, pero tenía un espacio de direcciones de 26 bits que lo limitaba a 64 MB de memoria principal. Esta limitación se eliminó en la serie ARMv3, que tiene un espacio de direcciones de 32 bits, y varias generaciones adicionales hasta ARMv7 siguieron siendo de 32 bits. Lanzada en 2011, la arquitectura ARMv8-A agregó soporte para un espacio de direcciones de 64 bits y aritmética de 64 bits con su nuevo conjunto de instrucciones de longitud fija de 32 bits. Arm Ltd. también ha lanzado una serie de conjuntos de instrucciones adicionales para diferentes reglas; el "pulgar" La extensión agrega instrucciones de 32 y 16 bits para mejorar la densidad del código, mientras que Jazelle agregó instrucciones para manejar directamente el código de bytes de Java. Los cambios más recientes incluyen la adición de subprocesos múltiples simultáneos (SMT) para mejorar el rendimiento o la tolerancia a fallas.

Historia

Micro BBC

Ordenadores Bellota' El primer diseño ampliamente exitoso fue el BBC Micro, presentado en diciembre de 1981. Esta era una máquina relativamente convencional basada en la CPU MOS Technology 6502, pero funcionaba aproximadamente al doble del rendimiento de los diseños de la competencia como Apple II debido a su uso de dinámica aleatoria más rápida. memoria de acceso (DRAM). La DRAM típica de la época funcionaba a unos 2 MHz; Acorn llegó a un acuerdo con Hitachi para obtener un suministro de piezas de 4 MHz más rápidas.

Las máquinas de la época generalmente compartían la memoria entre el procesador y el búfer de cuadros, lo que permitía que el procesador actualizara rápidamente el contenido de la pantalla sin tener que realizar entradas/salidas (E/S) por separado. Como el tiempo de visualización del video es exigente, el hardware de video tenía que tener acceso prioritario a esa memoria. Debido a una peculiaridad del diseño del 6502, la CPU dejó la memoria intacta la mitad del tiempo. Por lo tanto, al ejecutar la CPU a 1 MHz, el sistema de video podría leer datos durante esos tiempos de inactividad, ocupando el ancho de banda total de 2 MHz de la RAM. En BBC Micro, el uso de RAM de 4 MHz permitió utilizar la misma técnica, pero funcionando al doble de velocidad. Esto le permitió superar a cualquier máquina similar en el mercado.

Ordenador comercial Bellota

1981 fue también el año en que se introdujo la computadora personal de IBM. Usando el Intel 8088 recientemente presentado, una CPU de 16 bits en comparación con el diseño de 8 bits del 6502, ofreció un mayor rendimiento general. Su introducción cambió radicalmente el mercado de las computadoras de escritorio: lo que había sido en gran parte un mercado de pasatiempos y juegos que surgió durante los cinco años anteriores comenzó a cambiar a una herramienta comercial imprescindible donde los diseños anteriores de 8 bits simplemente no podían competir. También estaban llegando al mercado diseños más nuevos de 32 bits, como el Motorola 68000 y el National Semiconductor NS32016.

Acorn comenzó a considerar cómo competir en este mercado y produjo un nuevo diseño de papel llamado Acorn Business Computer. Se fijaron el objetivo de producir una máquina con diez veces el rendimiento de la BBC Micro, pero al mismo precio. Esto superaría y bajaría el precio de la PC. Al mismo tiempo, la reciente introducción de Apple Lisa trajo el concepto de interfaz gráfica de usuario (GUI) a una audiencia más amplia y sugirió que el futuro pertenecía a las máquinas con una GUI. El Lisa, sin embargo, costaba $9,995, ya que estaba repleto de chips de soporte, grandes cantidades de memoria y una unidad de disco duro, todo muy caro en ese entonces.

Luego, los ingenieros comenzaron a estudiar todos los diseños de CPU disponibles. Su conclusión acerca de los diseños de 16 bits existentes fue que eran mucho más caros y todavía eran "un poco malos", y ofrecían solo un rendimiento ligeramente superior al de su diseño BBC Micro. También exigieron casi siempre una gran cantidad de chips de soporte para operar incluso a ese nivel, lo que elevó el costo de la computadora en su conjunto. Estos sistemas simplemente no alcanzarían el objetivo de diseño. También consideraron los nuevos diseños de 32 bits, pero estos cuestan aún más y tenían los mismos problemas con los chips de soporte. Según Sophie Wilson, todos los procesadores probados en ese momento funcionaron casi igual, con un ancho de banda de aproximadamente 4 Mbit/segundo.

Dos eventos clave llevaron a Acorn por el camino hacia ARM. Uno fue la publicación de una serie de informes de la Universidad de California, Berkeley, que sugerían que un diseño de chip simple podría, sin embargo, tener un rendimiento extremadamente alto, mucho más alto que los últimos diseños de 32 bits del mercado. El segundo fue una visita de Steve Furber y Sophie Wilson al Western Design Center, empresa dirigida por Bill Mensch y su hermana, que se había convertido en la sucesora lógica del equipo MOS y ofrecía nuevas versiones como la WDC 65C02. El equipo de Acorn vio a estudiantes de secundaria que producían diseños de chips en máquinas Apple II, lo que sugería que cualquiera podía hacerlo. Por el contrario, una visita a otra empresa de diseño que trabajaba en una CPU moderna de 32 bits reveló un equipo con más de una docena de miembros que ya estaban en la revisión H de su diseño y, sin embargo, aún contenía errores. Esto consolidó su decisión de finales de 1983 de comenzar su propio diseño de CPU, la máquina Acorn RISC.

Conceptos de diseño

Los diseños originales de Berkeley RISC eran, en cierto sentido, sistemas de enseñanza, no diseñados específicamente para el desempeño absoluto. A los conceptos básicos de registro pesado y carga/almacenamiento del RISC, ARM agregó una serie de notas de diseño bien recibidas del 6502. La principal de ellas fue la capacidad de servir interrupciones rápidamente, lo que permitió que las máquinas ofrecieran rendimiento de entrada/salida sin hardware externo agregado. Para ofrecer interrupciones con un rendimiento similar al del 6502, el diseño de ARM limitó su espacio de direcciones físicas a 64 MB de espacio direccionable total, lo que requiere 26 bits de dirección. Como las instrucciones tenían 4 bytes (32 bits) de largo y debían alinearse en límites de 4 bytes, los 2 bits inferiores de una dirección de instrucción siempre eran cero. Esto significaba que el contador de programa (PC) solo necesitaba tener 24 bits, lo que permitía almacenarlo junto con las banderas del procesador de ocho bits en un único registro de 32 bits. Eso significaba que al recibir una interrupción, todo el estado de la máquina se podía guardar en una sola operación, mientras que si la PC tuviera un valor completo de 32 bits, requeriría operaciones separadas para almacenar la PC y los indicadores de estado. Esta decisión redujo a la mitad la sobrecarga de interrupción.

Otro cambio, y uno de los más importantes en términos de rendimiento práctico en el mundo real, fue la modificación del conjunto de instrucciones para aprovechar el modo de página DRAM. El modo de página, introducido recientemente, permitía que los accesos posteriores a la memoria se ejecutaran el doble de rápido si se encontraban aproximadamente en la misma ubicación, o "página", en el chip DRAM. El diseño de Berkeley no consideró el modo de página y trató toda la memoria por igual. El diseño de ARM agregó instrucciones especiales de acceso a la memoria similares a vectores, los 'ciclos S', que podrían usarse para llenar o guardar múltiples registros en una sola página usando el modo de página. Esto duplicó el rendimiento de la memoria cuando se podían usar y fue especialmente importante para el rendimiento de los gráficos.

Los diseños de Berkeley RISC utilizaron ventanas de registro para reducir la cantidad de registros guardados y restaurados realizados en llamadas de procedimiento; el diseño ARM no adoptó esto.

Wilson desarrolló el conjunto de instrucciones y escribió 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 director ejecutivo de Acorn, Hermann Hauser, y solicitó más recursos. Hauser dio su aprobación y reunió a un pequeño equipo para diseñar el procesador real basado en el ISA de Wilson. El proyecto oficial de la máquina Acorn RISC comenzó en octubre de 1983.

ARM1

ARM1 2o procesador para la BBC Micro

Acorn eligió la tecnología VLSI como el "socio de silicio", ya que eran una fuente de ROM y chips personalizados para Acorn. Acorn proporcionó el diseño y VLSI proporcionó el diseño y la producción. Las primeras muestras de silicio ARM funcionaron correctamente cuando se recibieron y probaron por primera vez el 26 de abril de 1985. Conocidas como ARM1, estas versiones funcionaban a 6 MHz.

La primera aplicación ARM fue como un segundo procesador para BBC Micro, donde ayudó a desarrollar software de simulación para finalizar el desarrollo de los chips de soporte (VIDC, IOC, MEMC) y aceleró el software CAD utilizado en el desarrollo de ARM2. Posteriormente, Wilson reescribió BBC BASIC en lenguaje ensamblador ARM. 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 extremadamente buena para cualquier emulador ARM.

ARM2

El resultado de las simulaciones en las placas ARM1 condujo a la introducción a fines de 1986 del diseño ARM2 que funciona a 8 MHz y a la versión acelerada de principios de 1987 a 10 a 12 MHz. Un cambio significativo en la arquitectura subyacente fue la adición de un multiplicador de Booth, mientras que antes la multiplicación tenía que llevarse a cabo en el software. Además, un nuevo modo de solicitud de interrupción rápida, FIQ para abreviar, permitió que los registros 8 a 14 se reemplazaran como parte de la interrupción misma. Esto significaba que las solicitudes de FIQ no tenían que guardar sus registros, lo que aceleraba aún más las interrupciones.

El ARM2 tenía aproximadamente siete veces el rendimiento de un sistema típico basado en 68000 de 7 MHz como el Commodore Amiga o el Macintosh SE. Era el doble de rápido que un Intel 80386 funcionando a 16 MHz y aproximadamente a la misma velocidad que un superminiordenador VAX-11/784 multiprocesador. Los únicos sistemas que lo superaron fueron las estaciones de trabajo basadas en Sun SPARC y MIPS R2000 RISC. Además, como la CPU se diseñó para E/S de alta velocidad, prescindió de muchos de los chips de soporte que se ven en estas máquinas; en particular, carecía de un controlador de acceso directo a memoria (DMA) dedicado que a menudo se encontraba en las estaciones de trabajo. El sistema de gráficos también se simplificó en función del mismo conjunto de suposiciones subyacentes sobre la memoria y el tiempo. El resultado fue un diseño dramáticamente simplificado, que ofrece un rendimiento a la par con las costosas estaciones de trabajo pero a un precio similar al de las computadoras de escritorio contemporáneas.

El ARM2 presentaba un bus de datos de 32 bits, un espacio de direcciones de 26 bits y 27 registros de 32 bits, de los cuales 16 son accesibles en cualquier momento (incluida la PC). El ARM2 tenía una cantidad de transistores de solo 30 000, en comparación con el modelo 68000 de Motorola, seis años antes, con alrededor de 68 000. Gran parte de esta simplicidad provino de la falta de microcódigo, que representa entre un cuarto y un tercio de los transistores del 68000, y la falta (como la mayoría de las CPU actuales) de un caché. Esta simplicidad permitió que el ARM2 tuviera un bajo consumo de energía y, sin embargo, ofreciera un mejor rendimiento que el Intel 80286.

Se produjo un sucesor, ARM3, con una memoria caché de 4 KB, lo que mejoró aún más el rendimiento. El bus de direcciones se amplió a 32 bits en el ARM6, pero el código del programa aún tenía que estar dentro de los primeros 64 MB de memoria en el modo de compatibilidad de 26 bits, debido a los bits reservados para las banderas de estado.

Máquinas RISC avanzadas Ltd. – ARM6

Sistema basado en microprocesador en un chip
Morir un microprocesador ARM610

A fines 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 dividió el equipo de diseño en una nueva empresa llamada Advanced 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. El nuevo Apple-ARM El trabajo eventualmente evolucionaría hacia el ARM6, lanzado por primera vez a principios de 1992. Apple usó el ARM610 basado en ARM6 como base para su Apple Newton PDA.

Primeros licenciatarios

En 1994, Acorn usó el ARM610 como la unidad central de procesamiento (CPU) principal en sus computadoras RiscPC. DEC obtuvo la licencia de la arquitectura ARMv4 y produjo StrongARM. A 233 MHz, esta CPU consumía solo un vatio (las versiones más nuevas consumen mucho menos). Posteriormente, este trabajo pasó a Intel como parte de un acuerdo judicial, e Intel aprovechó la oportunidad para complementar su línea i960 con StrongARM. Posteriormente, Intel desarrolló su propia implementación de alto rendimiento denominada XScale, que desde entonces ha vendido a Marvell. El recuento de transistores del núcleo ARM se mantuvo esencialmente igual a lo largo de estos cambios; ARM2 tenía 30 000 transistores, mientras que ARM6 creció solo a 35 000.

Cuota de mercado

En 2005, alrededor del 98 % de todos los teléfonos móviles vendidos usaban al menos un procesador ARM. En 2010, los productores de chips basados en arquitecturas ARM informaron envíos de 6100 millones de procesadores basados en ARM, lo que representa el 95 % de los teléfonos inteligentes, el 35 % de los televisores digitales y los decodificadores, y el 10 % de las computadoras móviles. En 2011, la arquitectura ARM de 32 bits fue la arquitectura más utilizada en dispositivos móviles y la de 32 bits más popular en sistemas integrados. En 2013, se produjeron 10 mil millones y 'los chips basados en ARM se encuentran en casi el 60 por ciento de los dispositivos móviles del mundo'.

Licencias

Morir un microcontrolador STM32F103VGT6 ARM Cortex-M3 con memoria flash de 1 MB por STMicroelectronics

Licencia básica

El negocio principal de Arm Ltd. es vender núcleos IP, que los licenciatarios utilizan para crear microcontroladores (MCU), CPU y sistemas en chips basados en esos núcleos. El fabricante del diseño original combina el núcleo ARM con otras partes para producir un dispositivo completo, generalmente uno que se puede construir en plantas de fabricación de semiconductores (fabs) existentes a bajo costo y aún así ofrecer un rendimiento sustancial. La implementación más exitosa ha sido ARM7TDMI con cientos de millones vendidos. Atmel ha sido un centro de diseño precursor en el sistema integrado basado en ARM7TDMI.

Las arquitecturas ARM utilizadas en teléfonos inteligentes, PDA y otros dispositivos móviles van desde ARMv5 hasta ARMv8-A.

En 2009, algunos fabricantes introdujeron netbooks basadas en CPU de arquitectura ARM, en competencia directa con las netbooks basadas en Intel Atom.

Arm Ltd. ofrece una variedad de términos de licencia, que varían en costo y resultados. Arm Ltd. proporciona a todos los licenciatarios una descripción de hardware integrable del núcleo ARM, así como un conjunto completo de herramientas de desarrollo de software (compilador, depurador, kit de desarrollo de software) y el derecho a vender silicio fabricado que contiene la CPU ARM.

Los paquetes SoC que integran los diseños principales de ARM incluyen las tres primeras generaciones de Nvidia Tegra, la familia Quatro de CSR plc, Nova y NovaThor de ST-Ericsson, Silicon Labs Precision32 MCU, productos OMAP de Texas Instruments, productos Hummingbird y Exynos de Samsung, A4, A5 y A5X de Apple y i.MX de NXP.

Los licenciatarios de Fabless, que desean integrar un núcleo ARM en su propio diseño de chip, generalmente solo están interesados en adquirir un núcleo de propiedad intelectual de semiconductor verificado listo para fabricar. Para estos clientes, Arm Ltd. ofrece una descripción de la lista de conexiones del núcleo ARM elegido, junto con un modelo de simulación abstracto y programas de prueba para ayudar a la integración y verificación del diseño. Los clientes más ambiciosos, incluidos los fabricantes de dispositivos integrados (IDM) y los operadores de fundición, optan por adquirir la propiedad intelectual del procesador en formato RTL (Verilog) sintetizable. Con el RTL sintetizable, el cliente tiene la capacidad de realizar optimizaciones y extensiones a nivel de arquitectura. Esto le permite al diseñador lograr objetivos de diseño exóticos que de otro modo no serían posibles con una lista de conexiones sin modificar (alta velocidad de reloj, muy bajo consumo de energía, extensiones del conjunto de instrucciones, etc.). Si bien Arm Ltd. no otorga al licenciatario el derecho de revender la arquitectura ARM en sí, los licenciatarios pueden vender libremente productos fabricados, como dispositivos de chip, placas de evaluación y sistemas completos. Las fundiciones comerciales pueden ser un caso especial; no solo se les permite vender núcleos ARM terminados que contienen silicio, sino que generalmente tienen el derecho de volver a fabricar núcleos ARM para otros clientes.

Arm Ltd. fija el precio de su IP en función del valor percibido. Los núcleos ARM de menor rendimiento suelen tener costos de licencia más bajos que los núcleos de mayor rendimiento. En términos de implementación, un núcleo sintetizable cuesta más que un núcleo macro duro (caja negra). Para complicar los asuntos de precios, una fundición comercial que posee una licencia ARM, como Samsung o Fujitsu, puede ofrecer a los clientes fabulosos costos de licencia reducidos. A cambio de adquirir el núcleo ARM a través de los servicios de diseño internos de la fundición, el cliente puede reducir o eliminar el pago de la tarifa de licencia inicial de ARM.

En comparación con las fundiciones de semiconductores dedicadas (como TSMC y UMC) sin servicios de diseño internos, Fujitsu/Samsung cobra de dos a tres veces más por oblea fabricada. Para aplicaciones de volumen bajo a medio, una fundición de servicios de diseño ofrece precios generales más bajos (mediante el subsidio de la tarifa de licencia). Para piezas de gran volumen producidas en masa, la reducción de costos a largo plazo que se puede lograr a través de precios más bajos de obleas reduce el impacto de los costos NRE (ingeniería no recurrente) de ARM, lo que hace que la fundición dedicada sea una mejor opción.

Las empresas que han desarrollado chips con núcleos diseñados por Arm incluyen la subsidiaria Annapurna Labs de Amazon.com, Analog Devices, Apple, AppliedMicro (ahora: MACOM Technology Solutions), Atmel, Broadcom, Cavium, Cypress Semiconductor, Freescale Semiconductor (ahora NXP Semiconductors), Huawei, Intel, Maxim Integrated, Nvidia, NXP, Qualcomm, Renesas, Samsung Electronics, ST Microelectronics, Texas Instruments y Xilinx.

Basado en la licencia de tecnología ARM Cortex

En febrero de 2016, ARM anunció la licencia de tecnología Built on ARM Cortex, a menudo abreviada como licencia Built on Cortex (BoC). Esta licencia permite a las empresas asociarse con ARM y realizar modificaciones en los diseños de ARM Cortex. Estas modificaciones de diseño no se compartirán con otras empresas. Estos diseños básicos semipersonalizados también tienen libertad de marca, por ejemplo, Kryo 280.

Las empresas que son licenciatarias actuales de la tecnología ARM Cortex integrada incluyen Qualcomm.

Licencia de arquitectura

Las empresas también pueden obtener una licencia de arquitectura de ARM para diseñar sus propios núcleos de CPU utilizando los conjuntos de instrucciones ARM. Estos núcleos deben cumplir totalmente con la arquitectura ARM. Las empresas que han diseñado núcleos que implementan una arquitectura ARM incluyen Apple, AppliedMicro (ahora: Ampere Computing), Broadcom, Cavium (ahora: Marvell), Digital Equipment Corporation, Intel, Nvidia, Qualcomm, Samsung Electronics, Fujitsu y NUVIA Inc. (adquirida por Qualcomm en 2021).

Acceso flexible ARM

El 16 de julio de 2019, ARM anunció ARM Flexible Access. ARM Flexible Access proporciona acceso ilimitado a la propiedad intelectual (IP) de ARM incluida para el desarrollo. Se requieren tarifas de licencia por producto una vez que el cliente llega a la finalización de la fundición o la creación de prototipos.

El 75 % de la IP más reciente de ARM durante los últimos dos años está incluida en ARM Flexible Access. A partir de octubre de 2019:

Núcleos

Arquitectura Core
bit-width
Cores Perfil Refe-
rences
Arm Ltd. Terceros
ARMv1
32
ARM1
Clásico
ARMv2
32
ARM2, ARM250, ARM3Amber, STORM Open Soft Core
Clásico
ARMv3
32
ARM6, ARM7
Clásico
ARMv4
32
ARM8StrongARM, FA526, ZAP Open Source Processor Core
Clásico
ARMv4T
32
ARM7TDMI, ARM9TDMI, SecurCore SC100
Clásico
ARMv5TE
32
ARM7EJ, ARM9E, ARM10EXScale, FA626TE, Feroceon, PJ1/Mohawk
Clásico
ARMv6
32
ARM11
Clásico
ARMv6-M
32
ARM Cortex-M0, ARM Cortex-M0+, ARM Cortex-M1, SecurCore SC000
Microcontrolador
ARMv7-M
32
ARM Cortex-M3, SecurCore SC300Apple M7
Microcontrolador
ARMv7E-M
32
ARM Cortex-M4, ARM Cortex-M7
Microcontrolador
ARMv8-M
32
ARM Cortex-M23, ARM Cortex-M33
Microcontrolador
ARMv7-R
32
ARM Cortex-R4, ARM Cortex-R5, ARM Cortex-R7, ARM Cortex-R8
Hora real
ARMv8-R
32
ARM Cortex-R52
Hora real
64
ARM Cortex-R82
Hora real
ARMv7-A
32
ARM Cortex-A5, ARM Cortex-A7, ARM Cortex-A8, ARM Cortex-A9, ARM Cortex-A12, ARM Cortex-A15, ARM Cortex-A17Qualcomm Scorpion/Krait, PJ4/Sheeva, Apple Swift (A6, A6X)
Aplicación
ARMv8-A
32
ARM Cortex-A32
Aplicación
64/32
ARM Cortex-A35, ARM Cortex-A53, ARM Cortex-A57, ARM Cortex-A72, ARM Cortex-A73X-Gene, Nvidia Denver 1/2, Cavium ThunderX, AMD K12, Apple Cyclone (A7)/Typhoon (A8, A8X)/Twister (A9, A9X)/Hurricane+Zephyr (A10, A10X), Qualcomm Kryo, Samsung M1/M2 ("Mongoose") /M3 ("Meerkatkat")
Aplicación
64
ARM Cortex-A34
Aplicación
ARMv8.1-A
64/32
TBACavium ThunderX2
Aplicación
ARMv8.2-A
64/32
ARM Cortex-A55, ARM Cortex-A75, ARM Cortex-A76, ARM Cortex-A77, ARM Cortex-A78, ARM Cortex-X1, ARM Neoverse N1Nvidia Carmel, Samsung M4 ("Cheetah"), Fujitsu A64FX (ARMv8 SVE 512-bit)
Aplicación
64
ARM Cortex-A65, ARM Neoverse E1 con multitelección simultánea (SMT), ARM Cortex-A65AE (también teniendo como ejemplo ARMv8.4 Dot Product; hecho para tareas críticas de seguridad como sistemas avanzados de asistencia al conductor (ADAS))Apple Monsoon+Mistral (A11) (septiembre de 2017)
Aplicación
ARMv8.3-A
64/32
TBA
Aplicación
64
TBAApple Vortex+Tempest (A12, A12X, A12Z), Marvell ThunderX3 (v8.3+)
Aplicación
ARMv8.4-A
64/32
TBA
Aplicación
64
ARM Neoverse V1Apple Lightning+Thunder (A13), Apple Firestorm+Icestorm (A14, M1)
Aplicación
ARMv8.5-A
64/32
TBA
Aplicación
64
TBA
Aplicación
ARMv8.6-A
64
TBAApple Avalanche+Blizzard (A15, M2), Apple Everest+Sawtooth (A16)
Aplicación
ARMv8.7-A
64
TBA
Aplicación
ARMv9-A
64
ARM Cortex-A510, ARM Cortex-A710, ARM Cortex-A715, ARM Cortex-X2, ARM Cortex-X3, ARM Neoverse N2
Aplicación
  1. ^ a b Aunque la mayoría de los datapaths y los registros de CPU en los procesadores ARM iniciales eran de 32 bits, la memoria direccional se limitaba a 26 bits; con bits superiores, entonces, utilizados para banderas de estado en el registro de contador del programa.
  2. ^ a b c ARMv3 incluyó un modo de compatibilidad para apoyar las direcciones de 26 bits de versiones anteriores de la arquitectura. Este modo de compatibilidad opcional en ARMv4, y eliminado completamente en ARMv5.

Arm proporciona una lista de proveedores que implementan núcleos ARM en su diseño (productos estándar específicos de la aplicación (ASSP), microprocesadores y microcontroladores).

Ejemplos de aplicaciones de núcleos ARM

Tronsmart MK908, a Rockchip-based quad-core Android "mini PC", con un micro Tarjeta SD junto a ella para una comparación de tamaño

Los núcleos ARM se utilizan en una serie de productos, en particular PDA y teléfonos inteligentes. Algunos ejemplos informáticos son los dispositivos Surface, Surface 2 y Pocket PC de primera generación de Microsoft (después de 2002), los iPad de Apple, las tabletas Eee Pad Transformer de Asus y varias computadoras portátiles Chromebook. Otros incluyen los teléfonos inteligentes iPhone de Apple y los reproductores multimedia portátiles iPod, las cámaras digitales Canon PowerShot, el híbrido Nintendo Switch, el procesador de seguridad Wii y las consolas de juegos portátiles 3DS, y los sistemas de navegación paso a paso TomTom.

En 2005, Arm participó en el desarrollo de la computadora SpiNNaker de la Universidad de Manchester, que utilizó núcleos ARM para simular el cerebro humano.

Los chips ARM también se usan 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 de 32 bits

Un ARMv7 fue utilizado para alimentar versiones antiguas de los populares ordenadores de un solo tablero de Raspberry Pi como este Raspberry Pi 2 de 2015.
Un ARMv7 también se utiliza para alimentar a la familia CuBox de ordenadores de una sola tabla.

La arquitectura ARM de 32 bits (ARM32), como Armv7-A (implementando AArch32; consulte la sección sobre Armv8-A para obtener más información), fue la arquitectura más utilizada en dispositivos móviles a partir de 2011.

Desde 1995, varias versiones del Manual de referencia de la arquitectura ARM (ver § Enlaces externos) han sido la principal fuente de documentación sobre la arquitectura del procesador ARM y el conjunto de instrucciones, distinguiendo las interfaces que todos los procesadores ARM son necesarios para apoyar (como la semántica de instrucciones) de los detalles de implementación que pueden variar. La arquitectura ha evolucionado con el tiempo y la versión siete de la arquitectura, ARMv7, define tres "perfiles" de arquitectura:

Aunque los perfiles de arquitectura se definieron primero para ARMv7, ARM definió posteriormente la arquitectura ARMv6-M (utilizada por Cortex M0/M0+/M1) como un subconjunto del perfil ARMv7-M con menos instrucciones.

Modos de CPU

Excepto en el perfil M, la arquitectura ARM de 32 bits especifica varios modos de CPU, según las características de la arquitectura implementada. En cualquier momento, la CPU puede estar en un solo modo, pero puede cambiar de modo debido a eventos externos (interrupciones) o programáticamente.

Conjunto de instrucciones

La implementación ARM original (y posterior) se conectó sin microcódigo, como el procesador 6502 de 8 bits mucho más simple que se usaba en las microcomputadoras Acorn anteriores.

La arquitectura ARM de 32 bits (y la arquitectura de 64 bits en su mayor parte) incluye las siguientes funciones RISC:

Para compensar el diseño más simple, en comparación con procesadores como Intel 80286 y Motorola 68020, se utilizaron algunas características de diseño adicionales:

Instrucciones aritméticas

ARM incluye operaciones aritméticas de enteros para sumar, restar y multiplicar; algunas versiones de la arquitectura también admiten operaciones de división.

ARM admite multiplicaciones de 32 bits × 32 bits con un resultado de 32 bits o un resultado de 64 bits, aunque los núcleos Cortex-M0/M0+/M1 no admiten resultados de 64 bits. Algunos núcleos ARM también admiten multiplicaciones de 16 bits × 16 bits y 32 bits × 16 bits.

Las instrucciones de división solo se incluyen en las siguientes arquitecturas ARM:

Registros

Registros a través de modos CPU
usrSyssvcabtundirqfiq
R0
R1
R2
R3
R4
R5
R6
R7
R8R8_fiq
R9R9_fiq
R10R10_fiq
R11R11_fiq
R12R12_fiq
R13R13_svcR13_abtR13_undR13_irqR13_fiq
R14R14_svcR14_abtR14_undR14_irqR14_fiq
R15
CPSR
SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq

Los registros R0 a R7 son los mismos en todos los modos de CPU; nunca están bancarizados.

Los registros R8 a R12 son los mismos en todos los modos de CPU, excepto en el modo FIQ. El modo FIQ tiene sus propios registros R8 a R12 distintos.

R13 y R14 se almacenan en todos los modos de CPU privilegiados excepto el modo de sistema. Es decir, cada modo al que se puede ingresar debido a una excepción tiene su propio R13 y R14. Estos registros generalmente contienen el puntero de la pila y la dirección de retorno de las llamadas a funciones, respectivamente.

Alias:

El registro de estado del programa actual (CPSR) tiene los siguientes 32 bits.

Ejecución condicional

Casi todas las instrucciones ARM tienen una función 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 las instrucciones de bifurcación.

Aunque el predicado ocupa cuatro de los 32 bits en un código de instrucción y, por lo tanto, reduce significativamente los bits de codificación disponibles para los desplazamientos en las instrucciones de acceso a la memoria, evita las instrucciones bifurcadas al generar código para instrucciones if pequeñas. Además de eliminar las propias instrucciones de bifurcación, esto preserva la canalización de obtención/descodificación/ejecución al costo de solo un ciclo por instrucción omitida.

Un algoritmo que proporciona un buen ejemplo de ejecución condicional es el algoritmo euclidiano basado en restas para calcular el máximo común divisor. En el lenguaje de programación C, el algoritmo se puede escribir como:

int gcd()int a, int b) {} mientras ()a ! b) // Entramos en el bucle cuando un tratadob o un títulob, pero no cuando a=b si ()a  b) // Cuando un experto hacemos esto a -= b; más // Cuando un tratadob hacemos eso (no si (un(a)b) necesario desde que un!=b se registra mientras se condiciona) b -= a; retorno a;}

El mismo algoritmo se puede reescribir de una manera más cercana a las instrucciones ARM de destino como:

bucle: // Compare a y b GT = a  b; LT = a . b; NE = a ! b; // Realizar operaciones basadas en los resultados de la bandera si()GT) a -= b; // Subtract *only* if greater-than si()LT) b -= a; // Subtract *only* if less-than si()NE) Goto bucle; * Sólo* si los valores comparados no eran iguales retorno a;

y codificado en lenguaje ensamblador como:

; asignar un registro r0, b a r1Loop: CP/RP r0, r1 ; establecer la condición "NE" si (a != b), ; "GT" si (a > b), ; o "LT" si SUBGT r0, r0, r1 ; si "GT" (Greater Than), entonces a = a-b SUBLT r1, r1, r0 ; si "LT" (Less Than), entonces b = b-a BNE bucle ; si "NE" (no igual), entonces bucle B lr ; retorno

que evita las ramas alrededor de las cláusulas then y else. Si r0 y r1 son iguales, ninguna de las instrucciones SUB se ejecutará, eliminando la necesidad de una rama condicional para implementar el while verifique en la parte superior del bucle, por ejemplo, si se hubiera usado SUBLE (menor que 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 bifurcación.

Otras funciones

Otra característica del conjunto de instrucciones es la capacidad de doblar, desplazar y rotar en las instrucciones de procesamiento de datos (aritmética, lógica y movimiento de registro-registro), de modo que, por ejemplo, la declaración en lenguaje C:

a += ()j .. 2);

podría representarse como una instrucción de una palabra y un ciclo:

ADD Ra, Ra, Rj, LSL #2

Esto da como resultado que el programa ARM típico sea más denso de lo esperado con menos accesos a la memoria; por lo tanto, la tubería se utiliza de manera más eficiente.

El procesador ARM también tiene funciones que rara vez se ven en otras arquitecturas RISC, como el direccionamiento relativo a la PC (de hecho, en el ARM de 32 bits, la PC es uno de sus 16 registros) y los modos de direccionamiento previo y posterior al incremento.

El conjunto de instrucciones ARM ha aumentado con el tiempo. Algunos de los primeros procesadores ARM (anteriores a ARM7TDMI), por ejemplo, no tienen instrucciones para almacenar una cantidad de dos bytes.

Conducciones y otros problemas de implementación

ARM7 y las implementaciones anteriores tienen un canal de tres etapas; las etapas son buscar, decodificar y ejecutar. Los diseños de mayor rendimiento, como el ARM9, tienen canalizaciones más profundas: Cortex-A8 tiene trece etapas. Los cambios de implementación adicionales para un mayor rendimiento incluyen un sumador más rápido y una lógica de predicción de bifurcación más amplia. La diferencia entre los núcleos ARM7DI y ARM7DMI, por ejemplo, fue un multiplicador mejorado; de ahí la "M" añadida.

Coprocesadores

La arquitectura ARM (anterior a Armv8) proporciona una forma no intrusiva de ampliar el conjunto de instrucciones utilizando "coprocesadores" que se pueden abordar utilizando MCR, MRC, MRRC, MCRR e instrucciones similares. El espacio del coprocesador se divide lógicamente en 16 coprocesadores con números del 0 al 15, el coprocesador 15 (cp15) se reserva para algunas funciones de control típicas, como administrar las memorias caché y el funcionamiento de la MMU en los procesadores que lo tienen.

En las máquinas basadas en ARM, los dispositivos periféricos generalmente se conectan al procesador asignando sus registros físicos al espacio de memoria ARM, al espacio del coprocesador o conectándose a otro dispositivo (un bus) que a su vez se conecta al procesador. Los accesos a los coprocesadores tienen una latencia más baja, por lo que algunos periféricos (por ejemplo, un controlador de interrupciones XScale) son accesibles de ambas formas: a través de la memoria ya través de los coprocesadores.

En otros casos, los diseñadores de chips solo integran hardware mediante el mecanismo del coprocesador. Por ejemplo, un motor de procesamiento de imágenes podría ser un pequeño núcleo ARM7TDMI combinado con un coprocesador que tiene operaciones especializadas para admitir un conjunto específico de primitivas de transcodificación de HDTV.

Depuración

Todos los procesadores ARM modernos incluyen funciones de depuración de hardware, lo que permite a los depuradores de software realizar operaciones como detener, ejecutar paso a paso y puntos de interrupción del código a partir del reinicio. Estas instalaciones están construidas con soporte JTAG, aunque algunos núcleos más nuevos admiten opcionalmente el "SWD" de dos hilos propio de ARM. protocolo. En los núcleos ARM7TDMI, el "D" representaba la compatibilidad con la depuración de JTAG y la "I" presencia representada de un "EmbeddedICE" módulo de depuración. Para las generaciones de núcleo ARM7 y ARM9, EmbeddedICE sobre JTAG era un estándar de depuración de facto, aunque no estaba garantizado desde el punto de vista arquitectónico.

La arquitectura ARMv7 define las funciones básicas de depuración a nivel arquitectónico. Estos 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. Tanto el "modo de parada" y "supervisar" Se admite la depuración de modo. El mecanismo de transporte real utilizado para acceder a las funciones de depuración no está especificado en la arquitectura, pero las implementaciones generalmente incluyen compatibilidad con JTAG.

Hay un ARM independiente "CoreSight" arquitectura de depuración, que no es requerida arquitectónicamente por los procesadores ARMv7.

Puerto de acceso de depuración

El puerto de acceso de depuración (DAP) es una implementación de una interfaz de depuración ARM. Hay dos implementaciones compatibles diferentes, el puerto de depuración JTAG de cable serie (SWJ-DP) y el puerto de depuración de cable serie (SW-DP). CMSIS-DAP es una interfaz estándar que describe cómo varios software de depuración en una PC host pueden comunicarse a través de USB con el firmware que se ejecuta en un depurador de hardware, que a su vez se comunica a través de SWD o JTAG con una CPU ARM Cortex habilitada para CoreSight.

Instrucciones de mejora de DSP

Para mejorar la arquitectura ARM para el procesamiento de señales digitales y aplicaciones multimedia, se agregaron instrucciones DSP al conjunto. Estos se indican con una "E" en 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 (DSP). Incluyen variaciones en la multiplicación-acumulación con signo, la suma y resta saturadas y el conteo de ceros a la izquierda.

Extensiones SIMD para multimedia

Introducido en la arquitectura ARMv6, este fue un precursor de Advanced SIMD, también llamado Neon.

Jazelle

Jazelle DBX (ejecución directa de código de bytes) es una técnica que permite que el código de bytes de Java se ejecute directamente en la arquitectura ARM como un tercer estado de ejecución (y conjunto de instrucciones) junto con el modo ARM y Thumb existentes. El apoyo a este estado se indica mediante la "J" en la arquitectura ARMv5TEJ y en los nombres principales ARM9EJ-S y ARM7EJ-S. Se requiere soporte para este estado 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.

Pulgar

Para mejorar la densidad del código compilado, los procesadores desde ARM7TDMI (lanzado en 1994) han incluido el conjunto de instrucciones Thumb, que tienen su propio estado. (La "T" en "TDMI" indica la función Thumb.) Cuando está en este estado, el procesador ejecuta el conjunto de instrucciones Thumb, una codificación compacta de 16 bits para un subconjunto de ARM conjunto de instrucciones. La mayoría de las instrucciones Thumb se asignan directamente a instrucciones ARM normales. El ahorro de espacio proviene de hacer implícitos algunos de los operandos de la instrucción 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 códigos de operación de 16 bits tienen menos funcionalidad. Por ejemplo, solo las bifurcaciones pueden ser condicionales y muchos códigos de operación están restringidos a acceder solo a la mitad de todos los registros de propósito general de la CPU. Los códigos de operación más cortos brindan una densidad de código mejorada en general, aunque algunas operaciones requieren instrucciones adicionales. En situaciones en las que el puerto de memoria o el ancho del bus están limitados a menos de 32 bits, los códigos de operación Thumb más cortos permiten un mayor rendimiento en comparación con el código ARM de 32 bits, ya que es posible que sea necesario cargar menos código de programa en el procesador por encima del ancho de banda de memoria restringido.

A diferencia de las arquitecturas de procesador con instrucciones de longitud variable (16 o 32 bits), como Cray-1 e Hitachi SuperH, los conjuntos de instrucciones ARM y Thumb existen de forma independiente. El hardware integrado, como Game Boy Advance, generalmente tiene una pequeña cantidad de RAM accesible con una ruta de datos completa de 32 bits; se accede a la mayoría a través de una ruta de datos secundaria de 16 bits o más estrecha. En esta situación, por lo general tiene sentido compilar el código de Thumb y optimizar manualmente algunas de las secciones con mayor uso de CPU utilizando instrucciones ARM completas de 32 bits, colocando estas instrucciones más amplias en la memoria accesible del bus de 32 bits.

El primer procesador con un decodificador de instrucciones Thumb fue el ARM7TDMI. Todas las familias ARM9 y posteriores, incluida XScale, han incluido un decodificador de instrucciones Thumb. Incluye instrucciones adoptadas de Hitachi SuperH (1992), que obtuvo la licencia de ARM. Las familias de procesadores más pequeños de ARM (Cortex M0 y M1) implementan solo el conjunto de instrucciones Thumb de 16 bits para obtener el máximo rendimiento en las aplicaciones de menor costo.

Pulgar-2

La tecnología

Thumb-2 se introdujo en el ARM1156 core, anunciado en 2003. Thumb-2 amplía el conjunto limitado de instrucciones de 16 bits de Thumb con 32 bits adicionales instrucciones para dar más amplitud al conjunto de instrucciones, produciendo 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 la memoria de 32 bits.

Thumb-2 amplía el conjunto de instrucciones Thumb con manipulación de campos de bits, bifurcaciones de tabla y ejecución condicional. Al mismo tiempo, el conjunto de instrucciones ARM se amplió para mantener una funcionalidad equivalente en ambos conjuntos de instrucciones. Un nuevo "lenguaje ensamblador unificado" (UAL) admite la generación de instrucciones Thumb o ARM desde el mismo código fuente; Las versiones de Thumb que se ven en los procesadores ARMv7 son esencialmente tan capaces como el código ARM (incluida la capacidad de escribir controladores de interrupción). Esto requiere un poco de cuidado y el uso de un nuevo "IT" Instrucción (si-entonces), que permite ejecutar hasta cuatro instrucciones sucesivas en función de una condición probada, o en su inversa. Al compilar en código ARM, esto se ignora, pero al compilar en Thumb genera una instrucción real. Por ejemplo:

; si (r0 == r1)CP/RP r0, r1ITE EQ ; ARM: sin código... Thumb: Instrucciones de TI; entonces r0 = r2;MOVEQ r0, r2 ; ARM: condicional; Tumba: condición a través de ITE 'T' (entonces); si no r0 = r3;MOVNE r0, r3 ; ARM: condicional; Tumba: condición vía 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. Todos los chips de la serie Cortex-A, la serie Cortex-R y la serie ARM11 admiten tanto el "estado del conjunto de instrucciones ARM" y 'Estado del conjunto de instrucciones de pulgar', mientras que los chips de la serie Cortex-M solo admiten el conjunto de instrucciones de pulgar.

Entorno de ejecución de pulgar (ThumbEE)

ThumbEE (erróneamente llamado Thumb-2EE en alguna documentación de ARM), que se comercializó como Jazelle RCT (Runtime Compilation Target), se anunció en 2005 y quedó obsoleto en 2011 Apareció por primera vez en el procesador Cortex-A8. ThumbEE es un cuarto estado del conjunto de instrucciones, que realiza pequeños cambios en el conjunto de instrucciones extendido Thumb-2. Estos cambios hacen que el conjunto de instrucciones sea especialmente adecuado para el código generado en tiempo de ejecución (p. ej., mediante compilación JIT) en entornos de ejecución gestionados. ThumbEE es un objetivo para lenguajes como Java, C#, Perl y Python, y permite que los compiladores JIT generen código compilado más pequeño sin reducir el rendimiento.

Las nuevas funciones proporcionadas por ThumbEE incluyen comprobaciones automáticas de puntero nulo en cada instrucción de carga y almacenamiento, una instrucción para realizar una comprobación de límites de matriz e instrucciones especiales que llaman a un controlador. Además, debido a que utiliza la tecnología Thumb-2, ThumbEE brinda acceso a los registros r8–r15 (donde se mantiene el estado de Jazelle/DBX Java VM). Los controladores son pequeñas secciones de código llamado con frecuencia, comúnmente utilizado para implementar lenguajes de alto nivel, como la asignación de memoria para un nuevo objeto. Estos cambios provienen de la reutilización de un puñado de códigos de operación y de saber que el núcleo está en el nuevo estado ThumbEE.

El 23 de noviembre de 2011, Arm dejó de usar el conjunto de instrucciones ThumbEE y Armv8 eliminó la compatibilidad con ThumbEE.

Coma flotante (VFP)

La tecnología

VFP (Vector Floating Point) es una extensión de coprocesador de unidad de punto flotante (FPU) para la arquitectura ARM (implementada de manera diferente en Armv8; los coprocesadores no están definidos allí). Proporciona computación de punto flotante de precisión simple y precisión doble de bajo costo que cumple totalmente con el ANSI/IEEE Std 754-1985 Standard for Binary Floating-Point Arithmetic. VFP proporciona computación de punto flotante adecuada para un amplio espectro de aplicaciones como PDA, teléfonos inteligentes, compresión y descompresión de voz, gráficos tridimensionales y audio digital, impresoras, decodificadores y aplicaciones automotrices. La arquitectura VFP estaba destinada a admitir la ejecución de "modo vectorial" pero estas operaban en cada elemento del vector secuencialmente y, por lo tanto, no ofrecían el rendimiento de una verdadera instrucción única, paralelismo de vectores de datos múltiples (SIMD). Por lo tanto, este modo vectorial se eliminó poco después de su introducción, para ser reemplazado por el SIMD avanzado mucho más potente, también llamado Neon.

Algunos dispositivos, como el ARM Cortex-A8, tienen un módulo VFPLite reducido en lugar de un módulo VFP completo y requieren aproximadamente diez veces más ciclos de reloj por operación flotante. La arquitectura Pre-Armv8 implementó punto flotante/SIMD con la interfaz del coprocesador. Otras unidades de punto flotante y/o SIMD que se encuentran en los procesadores basados en ARM que utilizan la interfaz del coprocesador incluyen FPA, FPE, iwMMXt, algunas de las cuales se implementaron en el software mediante captura, pero podrían haberse implementado en el hardware. Proporcionan algunas de las mismas funciones que VFP, pero no son compatibles con el código de operación. FPA10 también proporciona precisión ampliada, pero implementa el redondeo correcto (requerido por IEEE 754) solo en precisión simple.

VFPv1
Obsoleto
VFPv2
Una extensión opcional a la instrucción ARM establecida en las arquitecturas ARMv5TE, ARMv5TEJ y ARMv6. VFPv2 tiene 16 registros FPU de 64 bits.
VFPv3 o VFPv3-D32
Se implementó en la mayoría de procesadores Cortex-A8 y A9 ARMv7. Es compatible con VFPv2, excepto que no puede atrapar excepciones de punto flotante. VFPv3 tiene 32 registros FPU de 64 bits como estándar, añade instrucciones VCVT para convertir entre escalar, flotar y doble, añade modo inmediato a VMOV de tal manera que las constantes se pueden cargar en registros FPU.
VFPv3-D16
Como antes, pero con sólo 16 registros FPU de 64 bits. Aplicado en procesadores Cortex-R4 y R5 y Tegra 2 (Cortex-A9).
VFPv3-F16
Infrecuente; admite IEEE754-2008 punto flotante de media precisión (16 bits) como formato de almacenamiento.
VFPv4 o VFPv4-D32
Aplicado en procesadores Cortex-A12 y A15 ARMv7, Cortex-A7 opcionalmente tiene VFPv4-D32 en el caso de una FPU con Neon. VFPv4 tiene 32 registros FPU de 64 bits como estándar, añade soporte de media precisión como formato de almacenamiento e instrucciones multiacumuladas fusionadas a las características de VFPv3.
VFPv4-D16
Como es anterior, pero sólo tiene 16 registros FPU de 64 bits. Aplicado en procesadores Cortex-A5 y A7 en el caso de una FPU sin Neon.
VFPv5-D16-M
Aplicada en Cortex-M7 cuando existe una opción de núcleo flotante de doble precisión.

En Debian Linux y derivados como Ubuntu y Linux Mint, armhf (ARM hard float) hace referencia a la arquitectura ARMv7, incluido el hardware adicional de punto flotante VFP3-D16 extensión (y Thumb-2) arriba. Los paquetes de software y las herramientas de compilación cruzada usan los sufijos armhf vs. arm/armel para diferenciarse.

SIMD Avanzado (Neón)

La extensión Advanced SIMD (también conocida como Neon o "MPE" Media Processing Engine) es un conjunto combinado de instrucciones SIMD de 64 y 128 bits que proporciona aceleración estandarizada para aplicaciones de procesamiento de señales y medios. Neon está incluido en todos los dispositivos Cortex-A8, pero es opcional en los dispositivos Cortex-A9. Neon puede ejecutar la decodificación de audio MP3 en CPU que se ejecutan a 10 MHz y puede ejecutar el códec de voz GSM adaptativo de velocidad múltiple (AMR) a 13 MHz. Cuenta con un conjunto de instrucciones completo, archivos de registro separados y hardware de ejecución independiente. Neon admite datos de punto flotante de precisión simple (32 bits) y datos enteros de 8, 16, 32 y 64 bits y operaciones SIMD para manejar el procesamiento de audio y video, así como el procesamiento de gráficos y juegos. En Neon, el SIMD admite hasta 16 operaciones al mismo tiempo. El hardware Neon comparte los mismos registros de punto flotante que se usan en VFP. Los dispositivos como ARM Cortex-A8 y Cortex-A9 admiten vectores de 128 bits, pero se ejecutarán con 64 bits a la vez, mientras que los dispositivos Cortex-A15 más nuevos pueden ejecutar 128 bits a la vez.

Una peculiaridad de Neon en los dispositivos Armv7 es que vacía todos los números subnormales a cero y, como resultado, el compilador GCC no lo usará a menos que -funsafe-math-optimizations, que permite perder valores anómalos, está activado. "Mejorado" Neón definido desde que Armv8 no tiene esta peculiaridad, pero a partir de GCC 8.2 aún se requiere la misma bandera para habilitar las instrucciones de Neón. Por otro lado, GCC considera que Neon es seguro en AArch64 para Armv8.

ProjectNe10 es el primer proyecto de código abierto de ARM (desde su inicio; mientras adquirían un proyecto anterior, ahora llamado Mbed TLS). La biblioteca Ne10 es un conjunto de funciones comunes y útiles escritas tanto en Neon como en C (para compatibilidad). La biblioteca se creó para permitir a los desarrolladores usar las optimizaciones de Neon sin aprender Neon, pero también sirve como un conjunto de ejemplos de código ensamblado e intrínseco de Neon altamente optimizados para rutinas comunes de DSP, aritmética y procesamiento de imágenes. El código fuente está disponible en GitHub.

Tecnología ARM Helio

Helio es la extensión de vector de perfil M (MVE). Agrega más de 150 instrucciones escalares y vectoriales.

Extensiones de seguridad

TrustZone (para perfil Cortex-A)

Las Security Extensions, comercializadas como TrustZone Technology, se encuentran en ARMv6KZ y arquitecturas de perfil de aplicación posteriores. Proporciona una alternativa de bajo costo para agregar otro núcleo de seguridad dedicado a un SoC, al proporcionar dos procesadores virtuales respaldados por control de acceso basado en hardware. Esto permite que el núcleo de la aplicación cambie entre dos estados, denominados mundos (para reducir la confusión con otros nombres para los dominios de capacidad), para evitar que la información se filtre del mundo más confiable al mundo menos confiable. Este cambio de mundo es generalmente ortogonal a todas las demás capacidades del procesador, por lo que cada mundo puede operar independientemente del otro mientras usa el mismo núcleo. Luego, la memoria y los periféricos conocen el mundo operativo del núcleo y pueden usarlo para proporcionar control de acceso a los secretos y el código en el dispositivo.

Por lo general, un sistema operativo enriquecido se ejecuta en el mundo menos confiable, con un código especializado en seguridad más pequeño en el mundo más confiable, con el objetivo de reducir la superficie de ataque. Las aplicaciones típicas incluyen la funcionalidad DRM para controlar el uso de medios en dispositivos basados en ARM y evitar cualquier uso no aprobado del dispositivo.

En la práctica, dado que los detalles de implementación específicos de las implementaciones propietarias de TrustZone no se divulgaron públicamente para su revisión, no está claro qué nivel de seguridad se proporciona para un modelo de amenaza determinado, pero no son inmunes a los ataques.

Open Virtualization es una implementación de código abierto de la arquitectura mundial confiable para TrustZone.

AMD ha licenciado e incorporado la tecnología TrustZone en su tecnología de procesador seguro. Habilitadas en algunos productos, pero no en todos, las APU de AMD incluyen un procesador Cortex-A5 para manejar un procesamiento seguro. De hecho, el núcleo Cortex-A5 TrustZone se había incluido en productos AMD anteriores, pero no estaba habilitado debido a limitaciones de tiempo.

Samsung Knox utiliza TrustZone para fines como la detección de modificaciones en el kernel, el almacenamiento de certificados y la atestación de claves.

TrustZone para Armv8-M (para perfil Cortex-M)

La extensión de seguridad, comercializada como TrustZone para la tecnología Armv8-M, se introdujo en la arquitectura Armv8-M. Si bien contiene conceptos similares a TrustZone para Armv8-A, tiene un diseño arquitectónico diferente, ya que el cambio de mundo se realiza mediante instrucciones de bifurcación en lugar de excepciones. También admite el manejo seguro de interrupciones intercaladas de cualquier mundo, independientemente del estado de seguridad actual. Juntas, estas características brindan llamadas de baja latencia al mundo seguro y manejo receptivo de interrupciones. ARM proporciona una pila de referencia de código mundial seguro en forma de Trusted Firmware para M y PSA Certified.

Protección de página sin ejecución

A partir de ARMv6, la arquitectura ARM admite la protección de página sin ejecución, que se conoce como XN, para eXecute Never.

Extensión de dirección física grande (LPAE)

La extensión de dirección física grande (LPAE), que amplía el tamaño de la dirección física de 32 bits a 40 bits, se agregó a la arquitectura Armv7-A en 2011.

El tamaño de la dirección física puede ser incluso mayor en los procesadores basados en la arquitectura de 64 bits (Armv8-A). Por ejemplo, es de 44 bits en Cortex-A75 y Cortex-A65AE.

Armv8-R y Armv8-M

Las arquitecturas Armv8-R y Armv8-M, anunciadas después de la arquitectura Armv8-A, comparten algunas características con Armv8-A. Sin embargo, Armv8-M no incluye ninguna instrucción AArch64 de 64 bits, y Armv8-R originalmente no incluía ninguna instrucción AArch64; esas instrucciones se agregaron a Armv8-R más tarde.

Armv8.1-M

La arquitectura Armv8.1-M, anunciada en febrero de 2019, es una mejora de la arquitectura Armv8-M. Trae nuevas características que incluyen:

Arquitectura de 64/32 bits

Armv8-A Plataforma con Cortex A57/A53 MPCore grande. chip de CPU LITTLE

Armv8

Armv8-A

Anunciado en octubre de 2011, Armv8-A (a menudo llamado ARMv8 mientras que Armv8-R también está disponible) representa un cambio fundamental en la arquitectura ARM. Agrega una arquitectura opcional de 64 bits llamada "AArch64" y el nuevo "A64" conjunto de instrucciones. AArch64 proporciona compatibilidad en el espacio de usuario con Armv7-A, la arquitectura de 32 bits, denominada en este documento "AArch32" y el antiguo conjunto de instrucciones de 32 bits, ahora denominado "A32". El conjunto de instrucciones Thumb se conoce como "T32" y no tiene equivalente de 64 bits. Armv8-A permite que las aplicaciones de 32 bits se ejecuten en un sistema operativo de 64 bits y un sistema operativo de 32 bits esté bajo el control de un hipervisor de 64 bits. ARM anunció sus núcleos Cortex-A53 y Cortex-A57 el 30 de octubre de 2012. Apple fue el primero en lanzar un núcleo compatible con Armv8-A en un producto de consumo (Apple A7 en iPhone 5S). AppliedMicro, usando un FPGA, fue el primero en hacer una demostración de Armv8-A. El primer SoC Armv8-A de Samsung es el Exynos 5433 utilizado en el Galaxy Note 4, que cuenta con dos grupos de cuatro núcleos Cortex-A57 y Cortex-A53 en una configuración grande.PEQUEÑA; pero se ejecutará solo en modo AArch32.

Para AArch32 y AArch64, Armv8-A hace que VFPv3/v4 y el estándar SIMD (Neon) avanzado. También agrega instrucciones de criptografía compatibles con AES, SHA-1/SHA-256 y aritmética de campo finito. AArch64 se introdujo en Armv8-A y su revisión posterior. AArch64 no está incluido en las arquitecturas Armv8-R y Armv8-M de 32 bits.

Armv8-R

Se agregó soporte AArch64 opcional al perfil Armv8-R, y el primer núcleo ARM que lo implementó fue el Cortex-R82. Agrega el conjunto de instrucciones A64.

Armv9

Armv9-A

Anunciada en marzo de 2021, la arquitectura actualizada se centra en la ejecución segura y la compartimentación.

Armar sistema listo

Arm SystemReady, anteriormente llamado Arm ServerReady, es un programa de certificación que ayuda a aterrizar los hipervisores y los sistemas operativos genéricos listos para usar en los sistemas basados en Arm, desde servidores de centros de datos hasta dispositivos industriales y de IoT. Los componentes clave del programa son las especificaciones de los requisitos mínimos de hardware y firmware en los que pueden confiar los sistemas operativos y los hipervisores. Estas especificaciones son:

Estas especificaciones son desarrolladas conjuntamente por Arm y sus socios en el Comité Asesor de Arquitectura del Sistema (SystemArchAC).

Architecture Compliance Suite (ACS) son las herramientas de prueba que ayudan a verificar el cumplimiento de estas especificaciones. La especificación de requisitos de Arm SystemReady documenta los requisitos de las certificaciones.

Este programa fue presentado por Arm en 2020 en el primer evento DevSummit. Su predecesor Arm ServerReady se presentó en 2018 en el evento Arm TechCon. Este programa incluye actualmente cuatro bandas:

Certificado por PSA

Certificado por PSA, anteriormente denominado Platform Security Architecture, es un esquema de evaluación y marco de seguridad independiente de la arquitectura. Su objetivo es ayudar a proteger los dispositivos de Internet de las cosas (IoT) construidos en procesadores de sistema en un chip (SoC). Se introdujo para aumentar la seguridad donde un entorno de ejecución de plena confianza es demasiado grande o complejo.

La arquitectura fue presentada por Arm en 2017 en el evento anual TechCon. Aunque el esquema es independiente de la arquitectura, se implementó por primera vez en núcleos de procesador Arm Cortex-M destinados al uso de microcontroladores. PSA Certified incluye modelos de amenazas y análisis de seguridad disponibles gratuitamente que demuestran el proceso para decidir sobre las características de seguridad en los productos IoT comunes. También proporciona paquetes de interfaz de programación de aplicaciones (API) descargables gratuitamente, especificaciones arquitectónicas, implementaciones de firmware de código abierto y conjuntos de pruebas relacionados.

Tras el desarrollo del marco de seguridad de la arquitectura en 2017, el esquema de garantía de la certificación PSA se lanzó dos años después en Embedded World en 2019. La certificación PSA ofrece un esquema de evaluación de seguridad de varios niveles para proveedores de chips, proveedores de sistemas operativos y fabricantes de dispositivos IoT. La presentación de Embedded World presentó a los proveedores de chips la Certificación de Nivel 1. Al mismo tiempo se presentó un borrador de protección de Nivel 2. La certificación de nivel 2 se convirtió en un estándar utilizable en febrero de 2020.

La certificación fue creada por PSA Joint Stakeholders para permitir un enfoque de seguridad por diseño para un conjunto diverso de productos IoT. Las especificaciones certificadas por PSA son independientes de la implementación y la arquitectura, por lo que se pueden aplicar a cualquier chip, software o dispositivo. La certificación también elimina la fragmentación de la industria para los fabricantes y desarrolladores de productos de IoT.

Soporte del sistema operativo

Sistemas operativos de 32 bits

Sistemas operativos históricos

La primera computadora personal basada en ARM de 32 bits, la Acorn Archimedes, se diseñó originalmente para ejecutar un sistema operativo ambicioso llamado ARX. Las máquinas se enviaron con el sistema operativo RISC, que también se usó en sistemas posteriores basados en ARM de Acorn y otros proveedores. Algunas de las primeras máquinas Acorn también podían ejecutar un puerto Unix llamado RISC iX. (Tampoco debe confundirse con RISC/os, una variante contemporánea de Unix para la arquitectura MIPS).

Sistemas operativos integrados

La arquitectura ARM de 32 bits es compatible con una gran cantidad de sistemas operativos integrados y en tiempo real, incluidos:

  • A2
  • Android
  • ChibiOS/RT
  • Deos
  • DRYOS
  • e Cos
  • embOS
  • FreeBSD
  • FreeRTOS
  • INTEGRIDAD
  • Linux
  • Microcontrolador Sistemas operativos
  • Mbed
  • MINIX 3
  • MQX
  • Nucleus PLUS
  • NuttX
  • Sistema operativo integrado (OSE)
  • OS-9
  • Pharos
  • Plan 9
  • PikeOS
  • QNX
  • RIOT
  • RTEMS
  • RTXC Quadros
  • SCIOPTA
  • ThreadX
  • TizenRT
  • T-Kernel
  • VxWorks
  • Windows Embedded Compact
  • Windows 10 IoT Core
  • Zephyr

Sistemas operativos de dispositivos móviles

La arquitectura ARM de 32 bits es el entorno de hardware principal para la mayoría de los sistemas operativos de dispositivos móviles, como:

  • Android
  • BlackBerry OS/BlackBerry 10
  • ChromeOS
  • Mobian
  • Sailfish
  • postmarketOS
  • Tizen
  • Ubuntu Touch
  • webOS

Anteriormente, pero ahora descontinuado:

  • Bada
  • Firefox OS
  • MeeGo
  • Newton OS
  • iOS 10 y anterior
  • Symbian
  • Windows 10 Mobile
  • Windows RT
  • Windows Phone
  • Windows Mobile

Sistemas operativos de escritorio y servidor

La arquitectura ARM de 32 bits es compatible con el sistema operativo RISC y con varios sistemas operativos similares a Unix, incluidos:

Sistemas operativos de 64 bits

Sistemas operativos integrados

Sistemas operativos de dispositivos móviles

Sistemas operativos de escritorio y servidor

Portación a sistemas operativos ARM de 32 o 64 bits

Las aplicaciones de Windows recompiladas para ARM y vinculadas con Winelib, del proyecto Wine, pueden ejecutarse en ARM de 32 o 64 bits en Linux, FreeBSD u otros sistemas operativos compatibles. binarios x86, p. cuando no están especialmente compilados para ARM, se han demostrado en ARM usando QEMU con Wine (en Linux y más), pero no funcionan a toda velocidad o con la misma capacidad que con Winelib.