Arquitectura ARM

ARM (Advance RISC Machine) es una arquitectura de procesador basado en RISC que se caracteriza por ser extremadamente eficiente en el uso de energía. Posee varias familias de procesadores y controladores adaptados a un uso específico cada una.

“RISC” son las siglas de; “Reduced Instruction Set Computing” el cual es una filosofía de diseño de microprocesadores o microcontroladores en donde se utiliza un conjunto de instrucciones de tamaño fijo y reducido (en cantidad). Esto quiere decir que el procesador o controlador posee instruciones simples que se optimizan para trabajar en conjunto y realizar operaciones más complejas.

ARM Ltd Holdings (la empresa propietaria) es la propietaria de esta arquitectura, y licencia los núcleos que crean a los fabricantes que deseen usarlos.

Generalmente las instrucciones se dividen en dos grandes grupos; carga/descarga de datos en/desde RAM y modificación (y posterior almacenamiento) de datos en registros.

Al conjunto de instrucciones que soporta el procesador se le llama; ISA (Instruction Set Available).

Aunque un CPU tenga un determinado conjunto ISA, puede ser que otro CPU de la misma arquitectura y fabricante pero de distinta familia tenga un ISA con diferencias mínimas o más notables (como instrucciones adicionales o la falta de alguna específica). Por eso siempre se recomienda utilizar el set básico para garantizar la mayor compatibilidad posible, igualmente cuando ARM Ltd Holdings licencia a un fabricante un determinado núcleo de CPU, el mismo indica que se debe mantener la compatibilidad de la ISA en su conjunto.

La arquitectura ARM posee varias familias, especialmente adaptadas a determinados requerimientos;

  • Sintaxis de la tabla;

    • Lo que se encuentra entre “[]” son variables.
    • Lo que se encuentra entre paréntesis de una versión de arquitectura son los núcleos y sus modelos.
FamiliaPropósitoVersión de arquitecturaArquitectura de bits
Cortex M[0-85]MicrocontroladorARMv6-M (M0, M0+, M1),
ARMv7-M (M3),
ARMv7E-M (M4, M7),
ARMv8-M (M23, M33),
ARMv8.1-M (M55, M85)
32
Cortex R[4-82]Real TimeARMv7-R (R4, R5, R7, R8), ARMv8-R (R52, R82)32 (R4, R5, R7, R8, R52) y 64 (R82)
Cortex A[5-720]Microprocesador generalARMv7-A (A5, A7, A8, A9, A12, A15, A17),
ARMv8-A (A32, A34, A35, A53, A57, A72, A73),
ARMv8.2-A (A55, A75, A76, A77, A78, A65, A65AE),
ARMv9.0-A (A510, A710, A715),
ARMv9.2-A (A520, A720)
32 (A5, A7, A8, A9, A12, A15, A17, A32, A34, A35, A53, A57, A72, A73, A55, A75, A76, A77, A78)
y 64 (A5, A7, A8, A9, A12, A15, A17, A32, A34, A35, A53, A57, A65, A65AEA72, A73, A55, A75, A76, A77, A78, A510, A710, A715, A520, A720)
Cortex X[1-4]Microprocesador de servidorARMv8.2-A (X1),
ARMv9.0-A (X2, X3),
ARMv9.2-A (X4)
32 (X1) y 64 (X1, X2, X3, X4)
Cortex NeoverseMicroprocesador de datacenter, supercomputadoras y edgeARMv8.2-A (N1), ARMv8.2-A (E1), ARMv8.4-A (V1), ARM9.0-A (E2, N2, V2)32 (N1) y
64 (N1, N2, E1, E2, V1, V2)

Algunos fabricantes licenciados como; Apple y NVIDIA, usan núcleos muy personalizados por ellos, por lo que a veces es muy dificil enmarcarlos en alguna familia.

System on a chip (SOC)

Esta arquitctura (ARM y también RISC-V) tiene una característica importante; permite unir diferentes núcleos (aunque sean de diferentes familias, aunque no es lo común) en un mismo chip, según necesidades del fabricante.

Adicionalmente para tener los menores costos operativos se suele integrar otros componentes en conjunto con los núcleos para dar la mejor performance. Es muy común unir al conjunto la memoria RAM para disminuir el consumo eléctrico y la latencia entre ambos (CPU y RAM). Pero esto dependerá del fabricante, ya que algunos deciden unir una GPU, un modem 4G/5G, el almacenamiento, etc mientras que otros solo crean la CPU en si (como los procesadores Ampere).

Por lo tanto los sistemas en un chip (SOC en inglés) pueden integrar una multitud de componentes.

Al blueprint (el plano) de un SOC se le conoce como “die”;

DIE del Apple M1
Copyright; https://x.com/Locuza

Consideraciones importantes sobre el boot

A diferencia de la arquitectura x86 (Intel) y x86_64 (AMD), ARM no tiene estandarizado el sistema de booteo a utilizar.

Esto significa que cada fabricante implementa el firmware como considere. El firmware es el programa más básico, que reside en el chip de forma directa y que se encarga de controlarlo (al chip) lógicamente para que pueda establecer sus funciones más básicas.

Por lo que, el firmware que se utiliza en la Raspberry Pi 4 (núcleos A72) no es el mismo que se utiliza en Pine64 RockPro64 (núcleos A53 y A72), y por ende la forma en que inician el procesador, la memoria RAM y luego el sistema operativo son distintos en cada uno.

Esto hace que cada programa que se quiera cargar en modo bare metal o embebido debe tener soporte específico para ese SOC y su firmware subyacente.

Bibliografia

  • Mi experiencia técnica en el campo
  • https://wiki.osdev.org/ARM_Overview