Introducción y detalles de la arquitectura ARM
Dirigido por Roger Wilson y Steve Furber, el equipo comenzó a desarrollar una nueva arquitectura similar al procesador avanzado MOS Technology 6502. Acorn cuenta con un gran número de ordenadores basados en la arquitectura 6502, por lo que diseñar un chip similar supondría una gran ventaja para la empresa.
El equipo desarrolló una versión prototipo de ARM1 en 1985, y el primer ARM2 "real" producido en masa se produjo en masa al año siguiente. ARM2 tiene un bus de datos de 32 bits y un espacio de direccionamiento de 26 bits y proporciona un rango de direccionamiento de 64 Mbytes y 16 registros de 32 bits. Uno de los registros se utiliza como contador de programa (longitud de palabra), y sus primeros 6 bits y sus últimos 2 bits se utilizan para almacenar indicadores de estado del procesador. El ARM2 era probablemente el microprocesador de 32 bits más simple y práctico del mundo, con sólo 30.000 transistores (en comparación con los 68.000 de Motorola seis años después, contenía 70.000 transistores). Es compacto porque no contiene microcódigo (ver microcódigo) (lo que significa que tiene sólo entre 1/3 y 1/4 del tamaño del 68000) y, a diferencia de la mayoría de las CPU actuales, no contiene ningún caché. Esta característica optimizada hace que consuma muy poca energía, pero puede funcionar mejor que Intel 80286. El procesador posterior ARM3 está equipado con una caché de 4 KB, lo que le permite funcionar mejor.
A finales de los años 80, Apple comenzó a cooperar con Acorn para desarrollar una nueva versión del núcleo ARM. Debido a la importancia de este proyecto, Acorn incluso fundó una nueva empresa en 1990 llamada Advanced RISC Machines Ltd. Debido a esto, a ARM a veces se le llama máquina RISC avanzada, en lugar de máquina Acorn RISC. Debido a que su empresa matriz ARM Holdings plc cotizó en la Bolsa de Valores de Londres y en NASDAQ en 1998[1], la avanzada máquina RISC se convirtió en un producto de ARM Ltd.
Este proyecto luego ingresó a ARM6, la primera versión lanzada. en 1991. Luego, Apple Computer utilizó el ARM610 de la arquitectura ARM6 como base para su PDA Apple Newton. En 1994, Acorn utilizó el ARM 610 como CPU en su PC Risc.
Tras estos cambios, gran parte del núcleo permanece sin cambios. ARM2 tenía 30.000 transistores, pero ARM6 sólo creció a 35.000. El concepto principal es que el núcleo ARM se puede combinar con algunas piezas seleccionadas a través de ODM para crear una CPU completa, y se puede fabricar en fábricas existentes para lograr una alta eficiencia a bajo costo.
El modelo de negocio de ARM es vender su núcleo de propiedad intelectual (núcleo IP) y autorizar a los fabricantes a producir microcontroladores y procesadores centrales basados en el núcleo según el diseño. La implementación más exitosa es ARM7TDMI, que ha vendido casi cientos de millones de dispositivos con microcontroladores integrados.
DEC compró los derechos de esta arquitectura (lo que causará confusión aquí es que también dejó que DEC Alpha desarrollara StrongARM. A 233 MHz, esta CPU consume solo un vatio de energía (los chips posteriores consumen menos). Este diseño se trasladó posteriormente para abordar las quejas de Intel, por lo que Intel aprovechó la oportunidad para reforzar su antigua línea i960 con la arquitectura StrongARM, que luego Intel desarrolló su propia implementación de alto rendimiento llamada XScale, que luego vendió a Marvell. >
La arquitectura más común que admite teléfonos inteligentes, PDA y otros dispositivos portátiles es la de los procesadores ARMv4.
Archivos de diseño
Se hace hincapié en métodos de diseño simples y rápidos. Todo el circuito no es un microcódigo, como el procesador de microcomputadora Acorn 6502 de 8 bits.
La arquitectura ARM incluye las siguientes características RISC:
Arquitectura de lectura/almacenamiento
No admite accesos a memoria sin direcciones (ahora compatibles con el kernel ARMv6).
Conjunto de instrucciones ortogonales (cualquier instrucción de acceso puede acceder a datos en cualquier modo de direccionamiento). Conjunto de instrucciones ortogonales)
Una gran cantidad de archivos de registro de 16 × 32 bits.
La longitud fija del código de operación de 32 bits reduce el consumo causado por la cantidad de códigos y reduce la carga de decodificación y canalización.
La mayoría se ejecutan dentro de un ciclo de CPU.
Para fortalecer este método de diseño simple, en comparación con procesadores de la misma época como Intel 80286 y Motorola 68020, se han agregado algunos diseños especiales:
La mayoría de las instrucciones pueden tener condicional la ejecución reduce la carga sobre las sucursales y compensa las deficiencias del predictor de sucursales.
Las instrucciones aritméticas sólo cambian los códigos de condición cuando es necesario.
La palanca de cambios de barril de 32 bits se puede utilizar para realizar la mayoría de instrucciones aritméticas y realizar cálculos sin pérdida de rendimiento.
Potente modo de direccionamiento de índices.
Subsistema de interrupción de doble prioridad simplificado pero rápido con conjunto de registros conmutables.
Un aspecto interesante del diseño ARM es que se utiliza un código de condición de 4 bits antes de cada instrucción para indicar si la ejecución de cada instrucción es condicional.
Esto reduce en gran medida la cantidad de bits de codificación utilizados en las instrucciones de acceso a la memoria. En otras palabras, evita la creación de instrucciones de rama para declaraciones pequeñas como if. Hay un ejemplo estándar con referencia al algoritmo del máximo común factor de Euclides:
En el lenguaje de programación C, el bucle es:
int gcd (int i, int j)
p>{
Y (i!= j)
Si (i & gtj)
I-= j;
Otro
j-= I;
Devolver I;
}
En lenguaje ensamblador ARM, el bucle es:
Bucle CMP Ri, Rj; establece la condición en "NE" (no igual a) si (i!= j)
"GT" (mayor que) si (i) > j ),
; o "LT" (menor que) si (I
Sub-puerta Ri, Ri, Rj; si "GT" (mayor que), I = I-j;
SUBLT Rj, Rj, Ri; si "LT" (menor que), j = j-I;
bucle BNE si "NE" (no es igual a), continuar bucle
Esto evita la bifurcación entre las cláusulas then y else
Otra característica del conjunto de instrucciones es que puede combinar funciones como cambios y rotaciones en instrucciones de "procesamiento de datos" (aritméticas, lógicas ). y movimiento entre registros), por ejemplo, descripción en lenguaje C
a+=(j & lt; & lt2);
En ARM, se puede simplificar en una línea que solo requiere una palabra Instrucciones que se pueden completar en un ciclo
Agregar Ra, Ra, Rj, LSL #2
Este resultado puede hacer que los programas ARM generales sean más compactos y tengan menos acceso a la memoria. Con frecuencia, la canalización se puede utilizar de manera más eficiente. Aunque la velocidad de ejecución de ARM generalmente se considera lenta, aún puede funcionar bien en comparación con diseños de CPU más complejos.
Algunas características no están disponibles. Se ve comúnmente en otras arquitecturas RISC, como el direccionamiento relativo a la PC (de hecho, la PC es uno de los 16 registros en ARM) y el direccionamiento de prefijo o postfijo.
Otras consideraciones son que los procesadores ARM aumentarán su instrucción. Por ejemplo, es posible que algunos de los primeros procesadores ARM (anteriores a ARM7TDMI) no hayan leído instrucciones de dos bytes, por lo que es estrictamente necesario generar código para estos procesadores. En este momento, se pueden utilizar tipos de datos como "cortos volátiles". Los objetos del lenguaje C no se pueden procesar.
ARM7 y la mayoría de los primeros diseños tienen una canalización de tres etapas: buscar instrucciones, decodificar instrucciones y ejecutar instrucciones. Otras formas de mejorar el rendimiento incluyen una mayor velocidad. sumadores y lógica de predicción de ramas más amplia.
Esta arquitectura utiliza "coprocesadores" para proporcionar una forma no intrusiva de ampliar el conjunto de instrucciones. Los coprocesadores se pueden abordar mediante instrucciones como MCR, MRC, MRRC y MCRR en software. El espacio del coprocesador se divide lógicamente en 16 coprocesadores, numerados del 0 al 15. El coprocesador número 15 (CP15) está reservado para algunas funciones de control comunes, como operar con unidades de administración de memoria y caché (si están incluidas en el procesador).
En las máquinas basadas en ARM, los periféricos generalmente se crean mapeando los registros físicos del dispositivo en el espacio de almacenamiento de ARM, el espacio del coprocesador, o conectándolos a otro dispositivo que a su vez está conectado al procesador (como bus) para conectarse al procesador. Los coprocesadores tienen una latencia de acceso más baja, por lo que algunos periféricos (como el controlador de interrupciones XScale) están diseñados para acceder a ellos de diferentes maneras (a través de la memoria y el coprocesador).
Thumb Los procesadores ARM más nuevos tienen un modo de instrucción de 16 bits llamado Thumb, que puede estar relacionado con el hecho de que cada instrucción de ejecución condicional consume 4 bits. En el modo Thumb, los códigos de operación más pequeños tienen menos funcionalidad. Por ejemplo, solo las ramas pueden ser condicionales y muchos códigos de operación no pueden acceder a todos los registros de la CPU. Sin embargo, los códigos de operación más cortos proporcionan una mejor densidad de codificación en general (nota: esto significa que el código ocupa espacio en la memoria), incluso si algunas operaciones requieren más instrucciones. Especialmente cuando 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 pueden utilizar el ancho de banda de memoria limitado de manera más eficiente, proporcionando un mejor rendimiento que el código de 32 bits. El hardware integrado típico tiene sólo un pequeño rango de direccionamiento de ruta de datos de 32 bits y otro rango de direccionamiento aún más estrecho de 16 bits (como el Game Boy Advance). En este caso, lo que normalmente funciona es compilar en código Thumb y usar el conjunto de instrucciones de 32 bits (no Thumb) para optimizar algunas áreas del programa relacionadas con la CPU para que quepan en la memoria con un ancho de bus limitado de 32 bits.
El primer procesador que utiliza la tecnología Thumb es ARM7TDMI. Todos los ARM9 y versiones superiores, incluido XScale, cuentan con tecnología Thumb.
Jazelle ARM también ha desarrollado una tecnología, Jazelle DBX (Direct Bytecode Execution), que les permite acelerar la ejecución de bytecode Java en determinadas arquitecturas de hardware. Al igual que otros modos de ejecución, puede acelerar la ejecución de algunos códigos de bytes cuando se llama a algún software especial que no admite códigos de bytes. Puede ejecutarse entre los modos ARM y Thumb existentes.
El primer procesador que utiliza la tecnología Jazelle es el ARM926EJ-S: Jazelle está marcado con la letra inglesa 'J' en el nombre de la CPU. Se utiliza para permitir a los fabricantes de teléfonos móviles acelerar la ejecución de juegos y aplicaciones Java ME, lo que impulsa el desarrollo continuo de esta tecnología.
La tecnología Thumb-2 Thumb-2 apareció por primera vez en el núcleo ARM1156 y se lanzó en 2003. Thumb-2 amplía el conjunto de instrucciones limitado de Thumb de 16 bits y hace que el conjunto de instrucciones esté más disponible con instrucciones adicionales de 32 bits. Por lo tanto, el objetivo esperado de Thumb-2 es lograr una densidad de codificación cercana a Thumb, pero lograr un rendimiento cercano al conjunto de instrucciones ARM en memoria de 32 bits.
Thumb-2 también deriva una variedad de instrucciones de los conjuntos de instrucciones ARM y Thumb, incluidas funciones como operaciones de campo de bits, ramas de tablas y ejecución condicional.
ThumbEE ThumbEE, también conocida como Thumb-2EE, conocida en la industria como tecnología Jazelle RCT, se lanzó en 2005 y apareció por primera vez en el procesador Cortex-A8. ThumbEE proporciona cierta extensibilidad de Thumb-2, lo que hace que el conjunto de instrucciones sea particularmente adecuado para la generación de código en tiempo de ejecución en el entorno de ejecución (como la compilación justo a tiempo). Thumb-2EE está diseñado específicamente para lenguajes como Limbo, Java, C#, Perl y Python, lo que permite a los compiladores justo a tiempo generar códecs más pequeños sin afectar el rendimiento.
ThumbEE proporciona nuevas funciones, incluida la comprobación automática de punteros no válidos cada vez que se accede a una instrucción, e instrucciones que pueden realizar comprobaciones de rango de matriz y bifurcarse a controladores que contienen pequeñas cantidades de código llamado con frecuencia, normalmente utilizado para la implementación. de características del lenguaje de alto nivel, como la asignación de memoria para nuevos objetos.
El conjunto de extensiones SIMD avanzado NEON, conocido en la industria como tecnología NEON, es un conjunto de instrucciones SIMD (instrucción única de datos múltiples) que combina 64 bits y 128 bits, y tiene la capacidad de estandarizar y acelerar Programas multimedia y de procesamiento de señales. NEON puede realizar decodificación de audio MP3 en una CPU de 10 MHz y puede realizar codificación de voz GSM AMR (Adaptive Multi-Rate) en frecuencias inferiores a 13 MHz. NEON tiene un extenso conjunto de instrucciones, su propia matriz de registros y hardware de ejecución independiente. NEON admite datos de punto flotante de precisión simple y enteros de 8 bits, 16 bits, 32 bits y 64 bits, se ejecuta en modo SIMD y realiza la parte de voz/video del procesamiento de gráficos y juegos. SIMD es un factor decisivo en los multiprocesadores vectoriales, que tienen múltiples funciones de procesamiento al mismo tiempo. En la tecnología NEON, SIMD puede soportar hasta 16 operaciones simultáneamente.
VFP VFP es una tecnología derivada de la arquitectura ARM en el coprocesador. Proporciona capacidades de operación de punto flotante de precisión simple y doble de bajo costo y es totalmente compatible con el estándar de operación de punto flotante binario ANSI/IEEE Std 754-1985. VFP proporciona la mayoría de las aplicaciones adecuadas para operaciones de punto flotante, como PDA, teléfonos inteligentes, compresión y descompresión de voz, gráficos 3D y efectos de sonido digitales, impresoras, decodificadores y aplicaciones automotrices. La arquitectura VFP también admite la ejecución paralela de instrucciones de vector corto SIMD (Instrucción única de datos múltiples). En aplicaciones como el procesamiento de imágenes y señales, esto resulta muy útil para reducir el tamaño de la codificación y mejorar la eficiencia de la salida.
En los procesadores basados en ARM, otros coprocesadores SIMD o de punto flotante visibles incluyen FPA, FPE e iwMMXt. Proporcionan una funcionalidad similar a VFP, pero no son compatibles a nivel de código de operación.
La tecnología TrustZone(TM) es una extensión de seguridad que aparece en la arquitectura central de la aplicación de ARMv6KZ y posteriores. Proporciona una solución de bajo costo diseñada para agregar un núcleo de seguridad dedicado a un sistema en chip (SoC), que admite dos procesadores virtuales con control de acceso basado en hardware. Este enfoque permite que el núcleo de la aplicación cambie entre dos estados (a menudo mundos renombrados para evitar confusión con los nombres de otros dominios funcionales). Bajo este marco, se puede evitar la fuga de información de dominios centrales más confiables a dominios menos seguros. Este cambio entre dominios centrales suele ser completamente independiente de las otras funciones del procesador, por lo que cada dominio puede ejecutarse de forma independiente pero seguir utilizando el mismo núcleo. Por lo tanto, la memoria y los dispositivos periféricos pueden saber cuál es el campo operativo central actual y de esta manera se puede proporcionar control de acceso para la confidencialidad y codificación del dispositivo. Una aplicación típica de la tecnología TrustZone es la capacidad de ejecutar completamente un sistema operativo en un entorno inseguro, con codificación menos segura en un entorno confiable.
El licenciante ARM en sí no se basa en sus propios diseños para fabricar o vender CPU, sino que licencia la arquitectura del procesador a los fabricantes interesados. ARM ofrece varios términos de licencia, incluidos elementos como precio y difusión. Para los licenciantes, ARM proporciona una descripción de hardware integrada del núcleo ARM, que incluye herramientas completas de desarrollo de software (compilador, depurador, SDK) y el derecho a vender obleas de silicio que contienen CPU ARM. Para un licenciatario de fábrica sin fábrica que desea integrar el núcleo ARM en su propio diseño de chip, esto generalmente es solo para obtener la certificación de un núcleo IP listo para producción. Para estos clientes, ARM lanzará el diseño del núcleo ARM seleccionado, junto con modelos de simulación abstractos y programas de prueba para ayudar a diseñar la integración y verificación. Se necesitan más clientes, incluidos los fabricantes de componentes integrados (IDM) y los fabricantes de obleas, para elegir la forma de RTL (nivel de transferencia de registro, como Verilog) para obtener la propiedad intelectual (IP) del procesador. Con RTL integrado, los clientes pueden optimizar y mejorar su arquitectura. Este enfoque permite a los diseñadores lograr objetivos de diseño adicionales (como alta frecuencia de oscilación, bajo consumo de energía, expansión del conjunto de instrucciones, etc.) sin estar restringidos por el diagrama de circuito inmutable.
Aunque ARM no autoriza a los licenciantes a revender la arquitectura ARM en sí, los licenciantes pueden vender productos (como componentes de chips, placas de evaluación, sistemas completos, etc.) a voluntad. Las fábricas comerciales son un caso especial porque no sólo se les conceden los derechos para vender silicio terminado que contenga núcleos ARM, sino que generalmente se reservan el derecho de reproducir núcleos ARM para otros clientes.
Como la mayoría de los vendedores de propiedad intelectual, ARM determina el precio de la propiedad intelectual en función de su valor de uso. En términos de arquitectura, los núcleos ARM de menor rendimiento tienen tarifas de licencia más bajas que los núcleos de mayor rendimiento. En términos de implementación de chips de silicio, los núcleos integrados son más caros que los núcleos macro (caja negra) de hardware. Para una cuestión de precios más complicada, las fábricas comerciales con licencias ARM (como Samsung de Corea del Sur y Fujitsu de Japón) pueden ofrecer precios de licencia más bajos a sus clientes de fábricas. A través de la tecnología de diseño propia de la fábrica, los clientes pueden obtener núcleos ARM con tarifas de licencia prepagas de ARM bajas o nulas. En comparación con las fábricas especializadas en semiconductores que no cuentan con su propia tecnología de diseño (como TSMC y UMC), Fujitsu/Samsung cobra entre dos y tres veces más por oblea. Para aplicaciones pequeñas y medianas, las fábricas con departamentos de diseño ofrecen precios generales más bajos (subsidiados por derechos de licencia). Para la producción en masa, las reducciones de costos a largo plazo pueden reducir los costos NRE de ARM a través de precios más bajos de las obleas, lo que convierte a las fábricas especializadas en una mejor opción.
Muchas empresas de semiconductores poseen licencias ARM: Atmel, Broad, Cirrus Logic, Freescale (independiente de Motorola en 2004), Fujitsu, Intel (con Digital Complaint como intermediario), IBM, Infineon Technologies, Nintendo, NXP Semiconductors (independiente de Philips en 2006), OKI Electric Industries, Samsung Electronics, Sharp, STMicroelectronics, Texas Instruments, VLSI y muchas otras empresas tienen diferentes formas de autorización ARM. Aunque los proyectos de licencia de ARM están cubiertos por contratos de confidencialidad, ARM es ampliamente considerado como uno de los núcleos de CPU más caros de la industria IP. Un producto de un solo cliente que contenga un núcleo ARM básico puede costar hasta 200.000 dólares en derechos de licencia. Si se trata de modificaciones arquitectónicas importantes, el costo puede exceder los 10 millones de dólares.