L'architecture ARM est soumise à licence. Les entreprises titulaires ou anciennes titulaires d'une licence ARM incluent Advanced Micro Devices, Inc.,[11] Alcatel-Lucent, Altera, Apple Inc., copie de microcontrôleur ARM AppliedMicro, Atmel, BlackBerry (anciennement Research In Motion), Broadcom, Cirrus Logic, CSR plc, Cypress Semiconductor, Digital Equipment Corporation, Ember, Energy Micro, Freescale (scindé de Motorola en 2004), Fujitsu, Fuzhou Rockchip, Huawei, Intel (via DEC), LG, Marvell Technology Group, Microsemi, Microsoft, NEC, Nintendo, Nuvoton, Nvidia, NXP (anciennement Philips Semiconductor), Oki, ON Semiconductor, Panasonic, Qualcomm, Renesas, Samsung, Sharp, Silicon Labs, Sony, ST-Ericsson, STMicroelectronics, Symbios Logic, Texas Instruments, Toshiba, Yamaha, Xilinx et ZiiLABS.
ARM propose plusieurs conceptions de cœurs de microprocesseurs, dont les ARM7, ARM9, ARM11, Cortex-A8, Cortex-A9 et Cortex-A15. Les entreprises licencient souvent ces conceptions d'ARM pour les fabriquer et les intégrer dans leurs propres systèmes sur puce (SoC) avec d'autres composants, notamment la RAM, les GPU ou les radio-bandes de base (pour les téléphones mobiles).
Les boîtiers système sur puce intégrant les conceptions d'ARM incluent les trois premières générations de Nvidia Tegra, la famille Quatro de CSR plc, les Nova et NovaThor de ST-Ericsson, le Precision32 MCU de Silicon Labs, les produits OMAP de Texas Instruments, les produits Hummingbird et Exynos de Samsung, la gamme Ax SoC d'Apple et les i.MX de Freescale.
Les entreprises peuvent également obtenir une licence architecturale ARM pour concevoir leurs propres cœurs CPU utilisant le jeu d'instructions ARM. Les implémentations d'architecture ARM distinctes par les licenciés incluent l'A6 d'Apple, le X-Gene d'AppliedMicro, le Snapdragon et Krait de Qualcomm, le StrongARM de DEC, le XScale de Marvell (anciennement Intel) et le projet Denver de Nvidia.
Histoire [modifier] Conçue à l'origine par la société britannique Acorn Computers pour ses ordinateurs personnels, les premiers produits basés sur ARM étaient les modules coprocesseurs pour la série BBC Micro. Après le succès de l'ordinateur BBC Micro, Acorn Computers a envisagé comment évoluer à partir du processeur MOS Technology 6502 relativement simple pour aborder les marchés professionnels comme celui qui allait bientôt être dominé par l'IBM PC, lancé en 1981. Le plan Acorn Business Computer (ABC) nécessitait un certain nombre de processeurs secondaires pour fonctionner avec la plateforme BBC Micro, mais des processeurs tels que le Motorola 68000 et le National Semiconductor 32016 étaient jugés inadaptés, et le 6502 n'était pas assez puissant pour une interface utilisateur graphique.[12]
Après avoir testé tous les processeurs disponibles et les avoir trouvés insuffisants, Acorn a décidé qu'il lui fallait une nouvelle architecture. Inspiré par les articles sur le projet RISC de Berkeley, Acorn a envisagé de concevoir son propre processeur.[13] Une visite au Western Design Center à Phoenix, où le 6502 était mis à jour par une société essentiellement composée d'une seule personne, a montré aux ingénieurs d'Acorn Steve Furber et Sophie Wilson qu'ils n'avaient pas besoin de ressources massives ni d'installations de R&D de pointe.[14]
Wilson a développé le jeu d'instructions, écrivant une simulation du processeur en BBC Basic qui fonctionnait sur un BBC Micro avec un second processeur 6502. Cela a convaincu les ingénieurs d'Acorn qu'ils étaient sur la bonne voie. Wilson a approché le PDG d'Acorn, Hermann Hauser, et a demandé plus de ressources. Une fois l'approbation donnée, une petite équipe a été rassemblée pour implémenter le modèle de Wilson en matériel.
Un processeur ARM Conexant principalement utilisé dans les routeurs Acorn RISC Machine : ARM2 [modifier] Le projet officiel Acorn RISC Machine a débuté en octobre 1983. VLSI Technology a été choisie comme « partenaire silicium », car elle était une source de ROM et de puces personnalisées pour Acorn. La conception était dirigée par Wilson et Furber, et a été consciemment mise en œuvre avec une philosophie d'efficacité similaire à celle du 6502.[15] Un objectif de conception clé était d'obtenir un traitement d'entrée/sortie (interruptions) à faible latence comme le 6502. L'architecture d'accès mémoire du 6502 avait permis aux développeurs de produire des machines rapides sans utiliser de matériel DMA coûteux. VLSI a produit le premier silicium ARM le 26 avril 1985 – il a fonctionné du premier coup, et a été connu sous le nom d'ARM1 en avril 1985.[2] Les premiers systèmes de production nommés ARM2 étaient disponibles l'année suivante.
Le processeur secondaire ARM1 pour le BBC Micro La première application pratique de l'ARM fut en tant que processeur secondaire pour le BBC Micro, où il fut utilisé pour développer le logiciel de simulation afin de terminer le développement des puces de support (VIDC, IOC, MEMC), et pour accélérer le logiciel de CAO utilisé dans le développement de l'ARM2. Wilson a ensuite réécrit BBC Basic en langage assembleur ARM, et la connaissance approfondie obtenue en concevant le jeu d'instructions a permis un code très dense, faisant de l'ARM BBC Basic un excellent test pour tout émulateur ARM. L'objectif initial d'un ordinateur principalement basé sur ARM a été atteint en 1987 avec la sortie de l'Acorn Archimedes.[16]
En 1992, Acorn a de nouveau remporté le Queen's Award for Technology pour l'ARM.
L'ARM2 disposait d'un bus de données 32 bits, d'un espace d'adressage 26 bits et de 27 registres 32 bits. 8 bits du registre du compteur de programme étaient disponibles pour d'autres usages ; les 6 bits supérieurs (disponibles en raison de l'espace d'adressage 26 bits) servaient de indicateurs d'état, et les 2 bits inférieurs (disponibles car le compteur de programme était toujours aligné sur les mots) étaient utilisés pour définir les modes. Bien que le bus d'adresses ait été étendu à 32 bits dans l'ARM6, le code programme devait toujours se trouver dans les 64 premiers mégaoctets de mémoire en mode de compatibilité 26 bits, en raison des bits réservés pour les indicateurs d'état.[17] L'ARM2 avait un nombre de transistors de seulement 30 000, contre 68 000 pour le modèle Motorola 68000, plus ancien de six ans.[18] Cette simplicité venait en grande partie de l'absence de microcode (qui représente environ un quart à un tiers du 68000) et de l'absence (comme la plupart des CPU de l'époque) de cache. Cette simplicité a permis une faible consommation d'énergie, mais des performances meilleures que l'Intel 80286. Un successeur, l'ARM3, a été produit avec un cache de 4 Ko, ce qui a encore amélioré les performances.[19]
Apple, DEC, Intel, Marvell : ARM6, StrongARM, XScale [modifier] À la fin des années 1980, Apple Computer et VLSI Technology ont commencé à travailler avec Acorn sur des versions plus récentes du cœur ARM. En 1990, Acorn a scindé l'équipe de conception en une nouvelle société nommée Acorn RISC Machines Ltd., qui est devenue ARM Ltd lorsque sa société mère, ARM Holdings plc, a été introduite en bourse à la Bourse de Londres et au NASDAQ en 1998.[20]
Le nouveau travail Apple-ARM a finalement évolué vers l'ARM6, sorti au début de 1992. Apple a utilisé l'ARM6 basé sur l'ARM 610 comme base pour son assistant numérique personnel (PDA) Apple Newton. En 1994, Acorn a utilisé l'ARM 610 comme unité centrale de traitement (CPU) principale dans ses ordinateurs Risc PC. DEC a licencié l'architecture ARM6 et a produit le StrongARM. À 233 MHz, ce CPU ne consommait qu'un watt (les versions plus récentes consomment beaucoup moins). Ce travail a ensuite été transmis à Intel dans le cadre d'un règlement de litige, et Intel a saisi l'occasion pour compléter sa gamme i960 avec le StrongARM. Intel a ensuite développé sa propre implémentation haute performance nommée XScale qu'il a depuis vendue à Marvell.
Licence [modifier] Le cœur ARM est resté essentiellement de la même taille tout au long de ces évolutions. L'ARM2 avait 30 000 transistors, l'ARM6 n'a augmenté que jusqu'à 35 000. L'activité principale d'ARM est la vente de cœurs IP, que les licenciés utilisent pour créer des microcontrôleurs et des CPU basés sur ces cœurs. Le fabricant d'origine combine le cœur ARM avec d'autres parties pour produire un CPU complet, généralement capable d'être fabriqué dans des fonderies de semi-conducteurs existantes à faible coût tout en offrant des performances substantielles. L'implémentation la plus réussie a été l'ARM7TDMI avec des centaines de millions d'unités vendues. Atmel a été un centre de conception précurseur dans les systèmes embarqués basés sur ARM7TDMI.
Les architectures ARM utilisées dans les smartphones, les assistants numériques personnels et autres appareils mobiles vont de l'ARMv5, utilisé dans les appareils d'entrée de gamme, à l'ARMv6, et au Cortex A-Series (ARMv7) dans les appareils haut de gamme actuels. ARMv7 inclut une unité à virgule flottante matérielle, avec une vitesse améliorée par rapport à la virgule flottante logicielle.
En 2009, certains fabricants ont introduit des netbooks basés sur des CPU à architecture ARM, en concurrence directe avec les netbooks basés sur Intel Atom.[21] Selon le cabinet d'analystes IHS iSuppli, d'ici 2015, les circuits intégrés ARM devraient équiper 23 % de tous les ordinateurs portables.[22]
Cœurs ARM [modifier] Article principal : Liste des cœurs de microprocesseurs ARM
Architecture Famille conçue par ARM Holdings Famille conçue par un tiers Profil 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 Microcontrôleur
ARMv7-M ARM Cortex-M3 Microcontrôleur
ARMv7E-M ARM Cortex-M4 Microcontrôleur
ARMv7-R ARM Cortex-R4, ARM Cortex-R5, ARM Cortex-R7 Temps réel
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 Application
ARMv8-A ARM Cortex-A53, ARM Cortex-A57[23] X-Gene, Denver Application
Une liste des fournisseurs qui implémentent des cœurs ARM dans leurs conceptions est fournie par ARM.[24]
Exemples d'applications des cœurs ARM [modifier] Article principal : Liste des applications des cœurs ARM
Les cœurs ARM sont utilisés dans de nombreux produits, en particulier les PDA et les smartphones. Quelques exemples informatiques sont le Microsoft Surface, l'Apple iPad et l'ASUS Eee Pad Transformer. D'autres incluent le smartphone Apple iPhone, le baladeur multimédia iPod, l'appareil photo numérique Canon PowerShot A470, la console de jeux portable Nintendo DS et le système de navigation TomTom.
En 2005, ARM a participé au développement de l'ordinateur de l'Université de Manchester, SpiNNaker, qui utilisait des cœurs ARM pour simuler le cerveau humain.[25]
Les puces ARM sont également utilisées dans le Raspberry Pi, BeagleBoard, BeagleBone, PandaBoard et d'autres ordinateurs à carte unique, car elles sont très petites, peu coûteuses et consomment très peu d'énergie.
Architecture [modifier] Cette section nécessite des citations supplémentaires pour vérification. Veuillez aider à améliorer cet article en ajoutant des références à des sources fiables. Le matériel non sourcé peut être contesté et supprimé. (Mars 2011)
Depuis 1995, le ARM Architecture Reference Manual est la principale source de documentation sur l'architecture du processeur ARM et le jeu d'instructions, distinguant les interfaces que tous les processeurs ARM sont tenus de supporter (telles que la sémantique des instructions) des détails d'implémentation qui peuvent varier. L'architecture a évolué au fil du temps, et à partir de la série de cœurs Cortex, trois « profils » sont définis :
Profil « Application » : série Cortex-A
Profil « Temps réel » : série Cortex-R
Profil « Microcontrôleur » : série Cortex-M.
Les profils sont autorisés à sous-ensembler l'architecture. Par exemple, le profil ARMv6-M (utilisé par les Cortex M0 / M0+ / M1) est un sous-ensemble du profil ARMv7-M qui supporte moins d'instructions.
Modes CPU [modifier] L'architecture ARM spécifie plusieurs modes CPU, selon l'architecture. À tout moment, le CPU ne peut être que dans un seul mode, mais il peut changer de mode en raison d'événements externes (interruptions) ou par programmation.[26]
Mode utilisateur
Le seul mode non privilégié.
Mode interruption rapide
Mode privilégié dans lequel le processeur entre chaque fois qu'il accepte une interruption FIQ.
Mode interruption
Mode privilégié dans lequel le processeur entre chaque fois qu'il accepte une interruption IRQ.
Mode superviseur (svc)
Mode privilégié dans lequel le CPU entre lors d'une réinitialisation ou lorsqu'une instruction SWI est exécutée.
Mode d'arrêt (Abort)
Mode privilégié dans lequel le processeur entre chaque fois qu'une exception d'arrêt de préchargement ou d'arrêt de données se produit.
Mode indéfini
Mode privilégié dans lequel le processeur entre chaque fois qu'une exception d'instruction indéfinie se produit.
Mode système (ARMv4 et supérieur)
Le seul mode privilégié qui n'est pas entré par une exception. Il ne peut être entré que par l'exécution d'une instruction qui écrit explicitement dans les bits de mode du CPSR.
Mode MON (extensions de sécurité uniquement)
Un mode moniteur est introduit pour supporter l'extension TrustZone dans le cœur ARM.
Mode HYP alias PL2 Mode (ARMv7)
Un mode d'extensions de virtualisation / hyperviseur dans le cœur ARM introduit dans la dernière architecture ARM-7v (en 2012).[27]
Jeu d'instructions [modifier] L'implémentation ARM originale était câblée sans microcode, comme le processeur 8 bits 6502 beaucoup plus simple utilisé dans les micro-ordinateurs Acorn précédents.
L'architecture ARM inclut les fonctionnalités RISC suivantes :
Architecture load/store.
Pas de support pour les accès mémoire non alignés (bien que maintenant supporté depuis les cœurs ARMv6, avec quelques exceptions liées aux instructions de chargement/stockage de mots multiples).
Fichier de registres uniforme de 16 × 32 bits (incluant le compteur de programme, le pointeur de pile et le registre de liaison).
Largeur d'instruction fixe de 32 bits pour faciliter le décodage et le pipeline, au prix d'une densité de code réduite. Plus tard, le jeu d'instructions Thumb a augmenté la densité de code.
Exécution principalement en un seul cycle d'horloge.
Pour compenser la conception plus simple, par rapport à des processeurs comme l'Intel 80286 et le Motorola 68020, certaines fonctionnalités de conception supplémentaires ont été utilisées :
Exécution conditionnelle de la plupart des instructions, réduisant le surcoût des branchements et compensant l'absence de prédicteur de branchement.
Les instructions arithmétiques modifient les codes de condition uniquement sur demande.
Décaleur de baril 32 bits qui peut être utilisé sans pénalité de performance avec la plupart des instructions arithmétiques et des calculs d'adresse.
Modes d'adressage indexés puissants.
Registre de liaison pour les appels de fonctions feuilles rapides.
Sous-système d'interruption à 2 niveaux de priorité simple mais rapide avec bancs de registres commutés.
Instructions arithmétiques [modifier] L'ARM supporte les instructions d'addition, de soustraction et de multiplication. Les instructions de division entière ne sont implémentées que par les cœurs ARM basés sur les architectures ARM suivantes :
ARMv7-M et ARMv7E-M incluent toujours des instructions de division.[28]
ARMv7-R inclut toujours des instructions de division dans le jeu d'instructions Thumb, mais optionnellement dans le jeu d'instructions ARM.[29]
ARMv7-A inclut optionnellement des instructions de division. Elles peuvent ne pas être implémentées, ou implémentées uniquement dans le jeu d'instructions Thumb, ou dans les deux jeux d'instructions, ou si les extensions de virtualisation sont incluses.[29]
Registres [modifier] Les registres R0-R7 sont les mêmes dans tous les modes CPU ; ils ne sont jamais bancarisés.
R13 et R14 sont bancarisés dans tous les modes CPU privilégiés sauf le mode système. Autrement dit, chaque mode qui peut être entré à cause d'une exception a ses propres R13 et R14. Ces registres contiennent généralement respectivement le pointeur de pile et l'adresse de retour des appels de fonction.
Registres selon les modes 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 est également appelé SP, le pointeur de pile.
R14 est également appelé LR, le registre de liaison.
R15 est également appelé PC, le compteur de programme.
Exécution conditionnelle [modifier] Presque chaque instruction ARM possède une fonction d'exécution conditionnelle appelée prédication, implémentée avec un sélecteur de code de condition de 4 bits (le prédicat). Pour permettre une exécution inconditionnelle, l'un des codes sur 4 bits fait que l'instruction est toujours exécutée. La plupart des autres architectures CPU n'ont des codes de condition que sur les instructions de branchement.
Bien que le prédicat occupe 4 des 32 bits dans un code d'instruction, et réduise donc considérablement les bits d'encodage disponibles pour les déplacements dans les instructions d'accès mémoire, il évite les instructions de branchement lors de la génération de code pour les petites instructions if. En plus d'éliminer les instructions de branchement elles-mêmes, cela préserve le pipeline fetch/decode/execute au prix d'un seul cycle par instruction ignorée.
L'exemple standard d'exécution conditionnelle est l'algorithme d'Euclide basé sur la soustraction :
En langage C, la boucle est :
while (i != j)
{
if (i > j)
{
i -= j;
}
else
{
j -= i;
}
}
En assembleur ARM, la boucle est :
loop: CMP Ri, Rj ; définit la condition "NE" si (i != j),
; "GT" si (i > j),
; ou "LT" si (i < j)
SUBGT Ri, Ri, Rj ; si "GT" (supérieur à), i = i-j;
SUBLT Rj, Rj, Ri ; si "LT" (inférieur à), j = j-i;
BNE loop ; si "NE" (différent), alors boucle
ce qui évite les branchements autour des clauses then et else. Si Ri et Rj sont égaux, aucune des instructions SUB ne sera exécutée, éliminant le besoin d'un branchement conditionnel pour implémenter le contrôle while en haut de la boucle, par exemple si SUBLE (inférieur ou égal) avait été utilisé.
L'une des façons dont le code Thumb fournit un encodage plus dense est de supprimer le sélecteur de quatre bits des instructions non-branchement.
Autres fonctionnalités [modifier] Une autre caractéristique du jeu d'instructions est la possibilité d'intégrer des décalages et des rotations dans les instructions de « traitement de données » (arithmétiques, logiques et déplacements registre-registre), de sorte que, par exemple, l'instruction C
a += (j << 2);
pourrait être rendue comme une instruction d'un seul mot et d'un seul cycle :[30]
ADD Ra, Ra, Rj, LSL #2
Cela permet au programme ARM typique d'être plus dense que prévu avec moins d'accès mémoire ; ainsi, le pipeline est utilisé plus efficacement.
Le processeur ARM possède également des fonctionnalités rarement vues dans d'autres architectures RISC, telles que l'adressage relatif au PC (en effet, sur le 32 bits[1] ARM, le PC est l'un de ses 16 registres) et les modes d'adressage pré- et post-incrément.
Le jeu d'instructions ARM s'est enrichi au fil du temps. Certains processeurs ARM anciens (avant ARM7TDMI), par exemple, n'ont pas d'instruction pour stocker une quantité de deux octets.
Pipelines et autres problèmes d'implémentation [modifier] Les implémentations ARM7 et antérieures ont un pipeline à trois étages ; les étages étant fetch, decode et execute. Les conceptions plus performantes, comme l'ARM9, ont des pipelines plus profonds : le Cortex-A8 en a treize. D'autres modifications d'implémentation pour de meilleures performances incluent un additionneur plus rapide et une logique de prédiction de branchement plus étendue. La différence entre les cœurs ARM7DI et ARM7DMI, par exemple, était un multiplicateur amélioré ; d'où le "M" ajouté.
Coprocesseurs [modifier] L'architecture ARM offre un moyen non intrusif d'étendre le jeu d'instructions à l'aide de "coprocesseurs" qui peuvent être adressés à l'aide des instructions MCR, MRC, MRRC, MCRR et similaires. L'espace des coprocesseurs est divisé logiquement en 16 coprocesseurs numérotés de 0 à 15, le coprocesseur 15 (cp15) étant réservé à certaines fonctions de contrôle typiques comme la gestion des caches et le fonctionnement du MMU sur les processeurs qui en possèdent un.
Dans les machines basées sur ARM, les périphériques sont généralement connectés au processeur en mappant leurs registres physiques dans l'espace mémoire ARM ou dans l'espace coprocesseur, ou en les connectant à un autre périphérique (un bus) qui est lui-même connecté au processeur. Les accès aux coprocesseurs ont une latence plus faible, de sorte que certains périphériques, par exemple un contrôleur d'interruptions XScale, sont conçus pour être accessibles à la fois via la mémoire et via les coprocesseurs.
Dans d'autres cas, les concepteurs de puces intègrent uniquement du matériel utilisant le mécanisme des coprocesseurs. Par exemple, un moteur de traitement d'image pourrait être un petit cœur ARM7TDMI combiné à un coprocesseur doté d'opérations spécialisées pour prendre en charge un ensemble spécifique de primitives de transcodage HDTV.
Débogage [modifier] Cette section nécessite des citations supplémentaires pour vérification. Veuillez aider à améliorer cet article en ajoutant des références à des sources fiables. Le matériel non sourcé peut être contesté et supprimé. (Mars 2011)
Tous les processeurs ARM modernes incluent des installations de débogage matériel, permettant aux débogueurs logiciels d'effectuer des opérations telles que l'arrêt, le pas à pas et les points d'arrêt du code à partir de la réinitialisation. Ces installations sont construites à l'aide du support JTAG, bien que certains cœurs plus récents supportent optionnellement le propre protocole à deux fils "SWD" d'ARM. Dans les cœurs ARM7TDMI, le "D" représentait le support de débogage JTAG, et le "I" représentait la présence d'un module de débogage "EmbeddedICE". Pour les générations de cœurs ARM7 et ARM9, EmbeddedICE sur JTAG était un standard de débogage de facto, bien qu'il ne soit pas garanti architecturalement.
L'architecture ARMv7 définit des installations de débogage de base au niveau architectural. Elles incluent les points d'arrêt, les points de surveillance et l'exécution d'instructions dans un "Mode de débogage" ; des installations similaires étaient également disponibles avec EmbeddedICE. Les modes de débogage "halt" et "monitor" sont tous deux supportés. Le mécanisme de transport réel utilisé pour accéder aux installations de débogage n'est pas spécifié architecturalement, mais les implémentations incluent généralement le support JTAG.
Il existe une architecture de débogage ARM "CoreSight" distincte, qui n'est pas exigée architecturalement par les processeurs ARMv7.
Outils [modifier] L'architecture ARM est supportée par un ensemble d'outils de développement tels que Emprog ThunderBench pour ARM. Ces outils permettent aux ingénieurs de développement de programmer le dispositif à architecture ARM en utilisant un langage de haut niveau comme le C.[31]
Instructions d'amélioration DSP [modifier] Pour améliorer l'architecture ARM pour le traitement numérique du signal et les applications multimédia, des instructions DSP ont été ajoutées à l'ensemble.[32] Elles sont signalées par un "E" dans le nom des architectures ARMv5TE et ARMv5TEJ. Les variantes E impliquent également T, D, M et I.
Les nouvelles instructions sont courantes dans les architectures de processeurs de signaux numériques. Elles incluent des variations sur le multiply-accumulate signé, l'addition et la soustraction saturées, et le comptage des zéros de tête.
Extensions SIMD pour le multimédia [modifier] Introduites dans l'architecture ARMv6.[33]
Jazelle [modifier] Article principal : Jazelle
Jazelle DBX (Direct Bytecode eXecution) est une technique qui permet d'exécuter du Bytecode Java directement dans l'architecture ARM comme troisième état d'exécution (et jeu d'instructions) aux côtés des modes ARM et Thumb existants. Le support de cet état est signalé par le "J" dans l'architecture ARMv5TEJ, et dans les noms de cœurs ARM9EJ-S et ARM7EJ-S. Le support de cet état est requis à partir de ARMv6 (sauf pour le profil ARMv7-M), bien que les cœurs plus récents n'incluent qu'une implémentation triviale qui ne fournit pas d'accélération matérielle.
Thumb [modifier] Cette section nécessite des citations supplémentaires pour vérification. Veuillez aider à améliorer cet article en ajoutant des références à des sources fiables. Le matériel non sourcé peut être contesté et supprimé. (Mars 2011)
Pour améliorer la densité du code compilé, les processeurs depuis l'ARM7TDMI (sorti en 1994[34]) ont proposé le jeu d'instructions Thumb, qui a son propre état. (Le "T" dans "TDMI" indique la fonctionnalité Thumb.) Lorsqu'il est dans cet état, le processeur exécute le jeu d'instructions Thumb, un encodage compact de 16 bits pour un sous-ensemble du jeu d'instructions ARM.[35] La plupart des instructions Thumb sont directement mappées aux instructions ARM normales. L'économie d'espace provient du fait de rendre certains opérandes d'instruction implicites et de limiter le nombre de possibilités par rapport aux instructions ARM exécutées dans l'état du jeu d'instructions ARM.
En Thumb, les opcodes 16 bits ont moins de fonctionnalités. Par exemple, seuls les branchements peuvent être conditionnels, et de nombreux opcodes sont restreints à l'accès à la moitié seulement de tous les registres à usage général du CPU. Les opcodes plus courts offrent une meilleure densité de code globale, même si certaines opérations nécessitent des instructions supplémentaires. Dans les situations où le port mémoire ou la largeur du bus est contraint à moins de 32 bits, les opcodes Thumb plus courts permettent des performances accrues par rapport au code ARM 32 bits, car moins de code programme doit être chargé dans le processeur sur la bande passante mémoire limitée.
Le matériel embarqué, comme la Game Boy Advance, dispose généralement d'une petite quantité de RAM accessible avec un chemin de données complet de 32 bits ; la majorité est accessible via un chemin de données secondaire de 16 bits ou plus étroit. Dans cette situation, il est généralement judicieux de compiler du code Thumb et d'optimiser manuellement quelques-unes des sections les plus gourmandes en CPU en utilisant des instructions ARM 32 bits complètes, en plaçant ces instructions plus larges dans la mémoire accessible par le bus 32 bits.
Le premier processeur avec un décodeur d'instructions Thumb fut l'ARM7TDMI. Toutes les familles ARM9 et ultérieures, y compris XScale, ont inclus un décodeur d'instructions Thumb.
Thumb-2 [modifier] La technologie Thumb-2 a été introduite dans le cœur ARM1156, annoncé en 2003. Thumb-2 étend le jeu d'instructions Thumb 16 bits limité avec des instructions 32 bits supplémentaires pour donner plus d'ampleur au jeu d'instructions, produisant ainsi un jeu d'instructions de longueur variable. Un objectif déclaré pour Thumb-2 était d'atteindre une densité de code similaire à celle de Thumb avec des performances similaires à celles du jeu d'instructions ARM sur une mémoire 32 bits. Dans ARMv7, on peut dire que cet objectif a été atteint.[citation nécessaire]
Thumb-2 étend à la fois le jeu d'instructions ARM et Thumb avec des manipulations de champs de bits, des branchements de table et une exécution conditionnelle. Un nouveau "Unified Assembly Language" (UAL) supporte la génération d'instructions Thumb-2 ou ARM à partir du même code source ; les versions de Thumb vues sur les processeurs ARMv7 sont essentiellement aussi capables que le code ARM (y compris la possibilité d'écrire des gestionnaires d'interruptions). Cela nécessite un peu de soin et l'utilisation d'une nouvelle instruction "IT" (if-then), qui permet jusqu'à quatre instructions successives de s'exécuter en fonction d'une condition testée. Lors de la compilation en code ARM, cela est ignoré, mais lors de la compilation en Thumb-2, cela génère une instruction réelle. Par exemple :
; if (r0 == r1)
CMP r0, r1
ITE EQ ; ARM : pas de code ... Thumb : instruction IT
; then r0 = r2;
MOVEQ r0, r2 ; ARM : conditionnel ; Thumb : condition via ITE 'T' (then)
; else r0 = r3;
MOVNE r0, r3 ; ARM : conditionnel ; Thumb : condition via ITE 'E' (else)
; rappelez-vous que l'instruction MOV Thumb n'a pas de bits pour encoder "EQ" ou "NE"
Toutes les puces ARMv7 supportent le jeu d'instructions Thumb-2. D'autres puces des séries Cortex et ARM11 supportent à la fois l'"état du jeu d'instructions ARM" et l'"état du jeu d'instructions Thumb-2".[36][37][38]
Également connu sous le nom de Thumb-2EE et commercialisé sous la marque Jazelle RCT (Runtime Compilation Target), la technologie ThumbEE a été officiellement dévoilée en 2005 et a fait ses débuts dans le cœur du processeur ARM Cortex-A8. Fonctionnant comme le quatrième mode distinct pour les processeurs ARM, ThumbEE introduit des modifications ciblées au jeu d'instructions Thumb-2 existant. Ces ajustements architecturaux optimisent le pipeline pour le code machine généré dynamiquement par les compilateurs juste-à-temps (JIT) dans les environnements d'exécution gérés. Conçu comme une cible d'exécution pour les langages interprétés de haut niveau ou basés sur machine virtuelle, notamment Java, C#, Perl et Python, ThumbEE permet aux flux de travail JIT de générer un code binaire plus dense sans sacrifier les performances d'exécution.
ThumbEE intègre plusieurs capacités matérielles uniques pour faciliter l'exécution de code géré. Il impose une validation automatique des pointeurs nuls pour toutes les opérations de chargement et de stockage en mémoire, inclut un opcode dédié pour la vérification des limites de tableaux en cours d'exécution, accorde un accès direct au banc de registres r8 à r15 — la même zone qui stocke l'état de la machine virtuelle Java Jazelle/DBX — et introduit des instructions de branchement spécialisées pour invoquer des routines gestionnaires prédéfinies.[39] Les gestionnaires sont des snippets de code compacts fréquemment appelés qui implémentent la logique d'exécution des langages de haut niveau, comme l'allocation dynamique de mémoire pour les objets nouvellement instanciés. Toutes ces capacités sont implémentées en réutilisant un petit ensemble d'opcodes Thumb-2 inutilisés, le comportement d'exécution étant contrôlé par l'état actif du mode ThumbEE du processeur.
Dépréciation de ThumbEE
Le 23 novembre 2011, ARM a officiellement déprécié toute utilisation par les développeurs du jeu d'instructions ThumbEE.[40] Cette dépréciation a éliminé l'accélération matérielle Jazelle native, ce qui signifie que les cœurs de processeur modernes ne fournissent plus de déchargement matériel dédié pour l'exécution du bytecode Java. Suite à ce changement, l'état opérationnel ThumbEE n'est conservé que dans les microarchitectures CPU pour maintenir la compatibilité ascendante avec les binaires hérités contenant des instructions ThumbEE spécifiques. De plus, l'instruction BXJ (branch-and-exchange-Jazelle) a été redéfinie pour se comporter de manière identique à l'instruction BX standard dans tous les contextes d'exploitation modernes.[41]
Extension à virgule flottante (VFP)
Une proposition a été soumise depuis mai 2013 pour fusionner l'article ARMhf dans cette section pour une documentation unifiée. (Discussion ouverte)
Vector Floating-Point (VFP) est une extension coprocesseur à virgule flottante dédiée superposée à l'architecture ARM de base. Elle fournit une arithmétique à virgule flottante simple et double précision à faible coût, entièrement conforme à la norme ANSI/IEEE 754-1985. L'accélération matérielle VFP sert un large éventail de cas d'usage embarqués, notamment les assistants numériques personnels, les smartphones, les pipelines de codage et décodage audio, le rendu 3D, le traitement audio numérique, les périphériques d'impression, les décodeurs de télévision et les systèmes de contrôle automobile. Les premières versions de VFP supportaient un mode d'exécution vectorielle limité destiné au traitement parallèle de données ; cependant, ce mode traitait les éléments vectoriels de manière séquentielle plutôt qu'en parallèle, n'offrant pas les gains de performance d'un calcul parallèle SIMD (Single Instruction, Multiple Data). En conséquence, cette fonction vectorielle originale a été supprimée peu après sa sortie,[42] remplacée par le moteur NEON Advanced SIMD plus puissant.
Certains cœurs ARM, comme le Cortex-A8, intègrent un module VFPLite aux performances réduites au lieu d'une unité VFP complète. VFPLite nécessite environ dix fois plus de cycles d'horloge pour effectuer des calculs en virgule flottante équivalents par rapport à l'implémentation VFP complète.[43] Historiquement, les processeurs ARM ont inclus des variantes de coprocesseurs alternatifs pour la virgule flottante et SIMD, comme FPA, FPE et iwMMXt. Bien que ces modules offrent des fonctionnalités mathématiques qui se chevauchent avec VFP, ils utilisent des encodages d'opcodes incompatibles et ne peuvent pas exécuter de binaires VFP natifs.
Plusieurs révisions de VFP ont été publiées au fil des générations ARM :
- VFPv1 : Obsolète de façon permanente et non supporté dans les cœurs modernes.
- VFPv2 : Extension optionnelle pour les architectures ARMv5TE, ARMv5TEJ et ARMv6.
- VFPv3-D32 : Rétrocompatible avec VFPv2, ajoutant un fonctionnement FPU indépendant des exceptions, un ensemble par défaut de trente-deux registres 64 bits, des instructions de conversion scalaire-float-double (VCVT) et un support de valeurs immédiates pour les transferts de données VMOV.
- VFPv3-D16 : Équivalent à VFPv3-D32 mais limité à seize registres FPU 64 bits pour réduire la surface de silicium.
- VFPv3-F16 : Une variante rare ajoutant un support matériel pour l'arithmétique en virgule flottante demi-précision 16 bits IEEE 754-2008.
- VFPv4 : Intégré dans le cœur Cortex-A5, ajoutant des instructions de multiplication-accumulation fusionnées (FMA) pour des calculs numériques plus efficaces.
SIMD avancé (NEON)
L'extension Advanced SIMD, commercialisée sous le nom de NEON et également appelée Media Processing Engine (MPE), est un jeu d'instructions SIMD combiné 64 bits et 128 bits conçu pour fournir une accélération matérielle standardisée pour le traitement multimédia, l'analyse de signaux et les charges de travail de calcul numérique. NEON est inclus en tant que matériel standard sur tous les processeurs Cortex-A8 et implémenté comme fonctionnalité optionnelle pour les cœurs Cortex-A9.[44] Le moteur permet un traitement multimédia à très faible puissance : il peut décoder complètement des flux audio MP3 à une fréquence d'horloge CPU aussi basse que 10 MHz et exécuter des codecs vocaux GSM Adaptive Multi-Rate (AMR) avec une fréquence d'horloge maximale de 13 MHz. NEON dispose d'un jeu d'instructions spécialisé complet, de fichiers de registres indépendants dédiés et de pipelines d'exécution séparés découplés du cœur entier principal.[45]
Cette extension supporte les données entières 8 bits, 16 bits, 32 bits et 64 bits ainsi que les valeurs à virgule flottante simple précision 32 bits standard, permettant des opérations SIMD accélérées pour le décodage audio, le codage/décodage vidéo, les graphiques 2D/3D et les charges de travail de jeu. NEON peut traiter jusqu'à 16 éléments de données indépendants en une seule dispatching d'instruction. Son fichier de registres est partagé physiquement avec l'unité à virgule flottante VFP pour optimiser l'utilisation du silicium. Bien que les processeurs Cortex-A8 et Cortex-A9 incluent une capacité de registres vectoriels 128 bits, ils traitent les vecteurs 128 bits en deux passes d'exécution séquentielles de 64 bits.[43] En revanche, la génération plus récente Cortex-A15 supporte l'exécution parallèle complète 128 bits en un seul cycle de pipeline pour un meilleur débit.
Extensions de sécurité (TrustZone)
Commercialisée sous le nom de TrustZone Technology, l'extension de sécurité ARM a été introduite pour la première fois dans l'architecture ARMv6KZ au niveau application et dans toutes les générations de processeurs ultérieures. La technologie offre une alternative rentable à l'intégration d'un cœur de sécurité dédié totalement séparé dans un système sur puce. Elle réalise l'isolation en partitionnant un seul cœur CPU physique en deux domaines d'exécution virtuels matériellement imposés, officiellement appelés « mondes » pour éviter les conflits de terminologie avec d'autres conventions de dénomination de privilèges.
Le processeur peut basculer entre le monde sécurisé et le monde non sécurisé (normal) sous des règles de contrôle d'accès médiées par le matériel, empêchant les données confidentielles et le code protégé de fuir du domaine sécurisé à privilège élevé vers le domaine non fiable. Ce mécanisme de commutation de monde fonctionne orthogonalement à toutes les autres fonctionnalités du CPU, permettant aux deux mondes de s'exécuter indépendamment tout en partageant le même matériel physique. Les contrôleurs mémoire et les interfaces périphériques sur puce sont pleinement conscients de l'état actuel du monde, permettant un contrôle d'accès matériel fin pour restreindre l'accès aux secrets cryptographiques, au firmware protégé et au code exécutable authentifié stocké sur l'appareil.
Un déploiement typique de TrustZone exécute un système d'exploitation riche et complet, comme Android ou Linux, dans le monde non sécurisé, tandis qu'un firmware critique léger s'exécute dans le monde sécurisé. Ce firmware du monde sécurisé est basé sur des itérations de Trusted Foundations Software optimisées pour TrustZone, développé à l'origine par Trusted Logic Mobility. L'architecture permet une gestion robuste des droits numériques (DRM) pour la protection du contenu multimédia sur les appareils ARM et impose des restrictions matérielles pour bloquer les manipulations non autorisées.[46] Trusted Foundations Software a ensuite été acquis par Gemalto, tandis que le concurrent Giesecke & Devrient a développé un framework d'exécution sécurisé rival nommé Mobicore. En avril 2012, ARM, Gemalto et Giesecke & Devrient ont fusionné leurs actifs logiciels TrustZone pour former la coentreprise Trustonic.[47][48] De plus, Open Virtualization fournit une implémentation de référence open source du modèle d'exécution TrustZone pour la recherche et le développement.[49]
Il est important de noter que les détails d'implémentation propriétaires de bas niveau de TrustZone n'ont pas été entièrement divulgués pour un audit de sécurité public indépendant. En conséquence, le niveau exact d'assurance de sécurité fourni contre des modèles de menace spécifiques reste difficile à quantifier de manière concluante pour les chercheurs tiers.
Protection des pages non exécutables
À partir de l'architecture ARMv6, les processeurs ARM supportent des permissions de pages mémoire imposées par le matériel appelées XN (eXecute Never). Cette fonction de protection mémoire marque certaines régions mémoire comme non exécutables, empêchant l'exécution de code malveillant ou involontaire à partir de segments de données et atténuant les vecteurs d'attaque courants par corruption de mémoire.[50]
ARMv8 et architecture 64 bits
Sortie fin 2011, l'architecture ARMv8 a introduit une refonte fondamentale des conceptions de processeurs ARM. Elle introduit un état d'exécution 64 bits natif nommé AArch64 ainsi qu'un nouveau jeu d'instructions 64 bits dédié appelé A64. Dans la spécification ARMv8, l'écosystème 32 bits hérité est formellement étiqueté AArch32 pour l'état du processeur et A32 pour le jeu d'instructions 32 bits classique. Le jeu d'instructions Thumb à longueur variable est renommé T32 et n'a pas d'équivalent natif 64 bits. ARMv8 permet deux modes hybrides : les applications 32 bits peuvent s'exécuter nativement sur un système d'exploitation 64 bits complet, et un système d'exploitation 32 bits peut être virtualisé et géré par une couche hyperviseur 64 bits.[1] De nombreux fournisseurs de semi-conducteurs, dont Applied Micro, AMD, Broadcom, Calxeda, HiSilicon, Samsung et STMicroelectronics, ont annoncé publiquement des feuilles de route de produits basés sur ARMv8 après la sortie de l'architecture.[51][52][53][54] ARM a officiellement dévoilé ses deux premiers cœurs application ARMv8-A, les Cortex-A53 et Cortex-A57, le 30 octobre 2012.[23]
Dans les deux états d'exécution AArch32 et AArch64, ARMv8 élève les unités à virgule flottante VFPv3/V4 et les extensions NEON Advanced SIMD de fonctions optionnelles à obligatoires. L'architecture introduit également des instructions de cryptographie dédiées offrant un déchargement matériel pour les opérations de chiffrement AES et les algorithmes de hachage SHA-1/SHA-256, améliorant les performances de sécurité natives pour les systèmes embarqués et serveurs modernes cryptés.
Caractéristiques AArch64 :
Nouveau jeu d'instructions, A64
Possède 31 registres à usage général 64 bits.
SP et PC dédiés séparés.
Les instructions font toujours 32 bits et sont généralement similaires à A32 (les instructions LDM/STM et la plupart des exécutions conditionnelles ont été supprimées).
La plupart des instructions peuvent prendre des arguments 32 bits ou 64 bits.
Les adresses sont supposées être 64 bits.
SIMD avancé (NEON) amélioré
Possède 32 registres de 128 bits (contre 16), également accessibles via VFPv4.
Supporte la virgule flottante double précision.
Complètement conforme à la norme IEEE 754.
Les instructions de chiffrement/déchiffrement AES et de hachage SHA-1/SHA-2 utilisent également ces registres.
Nouveau système d'exception
Moins de registres bancarisés et de modes.
Translation mémoire à partir d'adresses virtuelles 48 bits basée sur le LPAE existant, conçu pour être facilement étendu à 64 bits
Support OS :
Licence de l'architecture ARM, support du noyau et écosystème commercial (réécrit)
Les correctifs du noyau Linux qui introduisent le support de l'architecture ARMv8 ont été soumis pour examen public par Catalin Marinas, ingénieur logiciel travaillant chez ARM Ltd. Ces correctifs ont été fusionnés officiellement et intégrés dans le noyau Linux principal avec la version 3.7 fin 2012.[55]
Licenciés ARM
Cette section nécessite des citations indépendantes supplémentaires pour une vérification factuelle. Les lecteurs et éditeurs sont encouragés à fournir des références fiables pour renforcer l'article. Les affirmations sans source valide peuvent être contestées et supprimées. (Mars 2011)
La photographie montre la puce d'un microcontrôleur STM32F103VGT6, un composant construit autour du cœur ARM Cortex-M3. Ce dispositif dispose de 1 mégaoctet de mémoire flash embarquée, d'une unité centrale de traitement (CPU) à 72 MHz, et de périphériques intégrés pour le contrôle moteur, la communication USB (Universal Serial Bus) et les interfaces CAN (Controller Area Network). Le composant est fabriqué par STMicroelectronics.
Notamment, ARM Ltd est une société de propriété intellectuelle de semi-conducteurs sans usine et ne fabrique ni ne vend directement des puces CPU physiques ou des dispositifs microcontrôleurs finaux basés sur ses propres architectures. Au lieu de cela, l'entreprise monétise principalement ses conceptions de processeurs en concédant sous licence la propriété intellectuelle d'architecture et de cœurs ARM à des partenaires tiers qualifiés dans l'industrie mondiale des semi-conducteurs. ARM propose des accords de licence flexibles avec des structures de coûts et des périmètres de livrables différenciés adaptés à divers scénarios de clients. Pour tous les licenciés, ARM fournit des descriptions matérielles intégrables de cœurs de processeurs ARM standard, une suite complète d'outils de développement logiciel incluant des compilateurs dédiés, des débogueurs et des kits de développement logiciel (SDK) complets, ainsi que le droit commercial de fabriquer et de vendre du silicium semi-conducteur fini intégrant des cœurs CPU ARM sous licence.
Les entreprises de conception de puces sans usine qui intègrent des cœurs ARM dans leurs systèmes sur puce (SoC) personnalisés recherchent généralement des cœurs IP pré-vérifiés et prêts à l'emploi nécessitant des modifications minimales. Pour ces clients, ARM fournit des fichiers de netlist de niveau porte du cœur ARM sélectionné, accompagnés de modèles de simulation abstraits et de programmes de test standardisés pour rationaliser l'intégration des circuits et la vérification fonctionnelle pendant la phase de conception de la puce. En revanche, les clients plus avancés, y compris les fabricants de dispositifs intégrés (IDM) et les fonderies de semi-conducteurs commerciales, optent souvent pour un code RTL (Register Transfer Level) entièrement synthétisable écrit en langage de description de matériel Verilog.
La possession de données RTL synthétisables permet aux licenciés de mener une optimisation architecturale approfondie, des modifications fonctionnelles et des extensions de jeu d'instructions propriétaires au niveau de la conception matérielle. Ce niveau de personnalisation permet aux équipes de conception d'atteindre des objectifs de performance spécialisés qui ne peuvent être réalisés en utilisant des netlists d'usine non modifiées, tels que des fréquences d'horloge ultra-élevées, une consommation d'énergie extrêmement faible pour les dispositifs embarqués, et des extensions de jeu d'instructions personnalisées pour des tâches d'accélération dédiées. Bien que les conditions de licence d'ARM interdisent aux sociétés partenaires de revendre l'architecture ARM brute ou la propriété intellectuelle du processeur elle-même à des tiers, les licenciés conservent le droit de distribuer des produits matériels finis contenant des cœurs ARM, y compris des puces semi-conductrices autonomes, des cartes de développement d'évaluation et des systèmes embarqués entièrement assemblés.
Les fonderies commerciales de mercurial représentent une catégorie spéciale de détenteurs de licences ARM. Au-delà du droit de vendre des tranches de silicium pré-fabriquées et des puces finies avec des cœurs ARM intégrés, ces fonderies conservent généralement des privilèges de licence pour reconfigurer et re-fabriquer des cœurs de processeur ARM pour le compte de leurs clients concepteurs externes.
ARM structure son modèle de prix IP en fonction de la valeur technique perçue et du positionnement sur le marché de chaque portefeuille de cœurs. En général, les cœurs ARM d'entrée de gamme et de moindre performance ont des frais de licence initiaux moins élevés que les architectures de cœurs haut de gamme riches en fonctionnalités. Du point de vue de l'implémentation, les cœurs à base de RTL synthétisable coûtent plus cher que les cœurs macro matériels précompilés (boîte noire) avec des dispositions physiques fixes.
La structure des coûts devient plus complexe lorsque les fonderies commerciales détiennent des droits de licence ARM en gros. Les grandes fonderies telles que Samsung et Fujitsu peuvent offrir des coûts IP subventionnés à leurs clients de fonderie internes. Dans ce modèle économique, les concepteurs de puces qui obtiennent des cœurs ARM via le service de conception interne de la fonderie peuvent réduire ou supprimer complètement les frais de licence NRE standard d'ARM. Cependant, cet avantage a des contreparties : Fujitsu et Samsung facturent généralement deux à trois fois plus par tranche de silicium fabriquée que les fonderies dédiées pure-play telles que TSMC et UMC.[citation nécessaire]
Pour les applications embarquées de volume faible à moyen, les fonderies axées sur les services de conception offrent des coûts totaux de projet inférieurs grâce aux frais de licence IP ARM subventionnés. Pour les composants semi-conducteurs produits en grand volume, les économies à long terme résultant des coûts de fabrication de tranches plus faibles l'emportent sur les frais NRE uniques d'ARM, ce qui rend les fonderies dédiées pure-play l'option économiquement plus efficace.
Un grand nombre d'entreprises de semi-conducteurs et de conception de circuits intégrés maintiennent des licences IP ARM actives dans diverses gammes de produits. Les détenteurs de licences notables incluent Analog Devices, des entreprises fournissant des services de laboratoire de microscopie électronique à balayage (SEM), AppliedMicro, Atmel, Broadcom, Cirrus Logic, Energy Micro, Faraday Technology, Freescale Semiconductor, Fujitsu, Intel (via un règlement juridique avec Digital Equipment Corporation), IBM, Infineon Technologies – développeur de la famille de MCU 32 bits Infineon XMC4000 – Marvell Technology Group, MediaTek, Nintendo, Nvidia, NXP Semiconductors, OKI, Qualcomm, Samsung, Sharp, STMicroelectronics et Texas Instruments, parmi des dizaines d'autres acteurs industriels mondiaux.
Licence architecturale ARM
Une licence architecturale ARM diffère fondamentalement des licences de cœurs standard en termes de coût et de barrière technique. La licence architecturale a un seuil financier nettement plus élevé et exige des ressources d'ingénierie internes étendues, car les licenciés obtiennent le droit de concevoir des microarchitectures CPU entièrement personnalisées conformes au jeu d'instructions officiel d'ARM, plutôt que de simplement intégrer des cœurs de processeur pré-conçus. En raison des exigences techniques et de capital élevées, seules quelques entreprises détiennent cette licence architecturale avancée, notamment Intel (acquise à l'origine par son règlement avec Digital Equipment Corporation), Marvell, Qualcomm et Broadcom.[56]
Coûts de licence approximatifs
Le rapport financier annuel officiel d'ARM de 2006 a révélé que la société a généré 88,7 millions de livres sterling de revenus de redevances, provenant des expéditions de licenciés totalisant 2,45 milliards d'unités semi-conductrices basées sur ARM.[57] Ces données équivalent à une redevance moyenne par unité de 0,036 £ pour tous les dispositifs expédiés. La valeur moyenne couvre l'ensemble du spectre des générations de cœurs ARM, des cœurs haute performance modernes coûteux aux cœurs embarqués hérités à faible coût.
Au cours du même exercice, ARM a enregistré 65,2 millions de livres sterling de revenus directs de licences provenant d'accords de propriété intellectuelle de cœurs de processeurs,[58] avec un total de 65 nouveaux contrats de licence de processeurs signés dans le monde.[59] Cela donne un coût de licence initial moyen d'environ 1 million de livres sterling par licence de cœur individuelle, toujours en moyenne sur les nouvelles architectures de pointe et les conceptions de cœurs hérités matures.
D'après la répartition financière de 2006, environ 60 % des revenus d'ARM axés sur les processeurs provenaient de redevances par unité, tandis que les 40 % restants provenaient de frais de licence initiaux. En combinant les deux flux de revenus, la contribution financière moyenne par produit final expédié atteignait environ 0,06 £ pour la communauté plus large des fabricants et des développeurs embarqués. Il est essentiel de noter que les frais de licence IP uniques sont principalement associés aux technologies de processeurs nouvellement publiées, tandis que les expéditions en volume – et donc les revenus de redevances cumulés – sont principalement générées par des architectures de cœurs matures établies avec de longs cycles de vie sur le marché. Par conséquent, les chiffres moyens ci-dessus ne peuvent pas représenter avec précision les coûts individuels exacts de licence et de redevances pour un produit ou une variante de cœur ARM spécifique.