ARM (stylisé en minuscules arm , anciennement acronyme de Advanced RISC Machines et à l'origine Acorn RISC Machine ) est une famille d' architectures de jeux d'instructions RISC...
Worldlex WikiFrancaisLecture gratuite
ARM (stylisé en minuscules arm , anciennement acronyme de Advanced RISC Machines et à l'origine Acorn RISC Machine ) est une famille d' architectures de jeux d'instructions RISC (ISA) pour processeurs informatiques . Arm Holdings développe les ISA et les concède sous licence à d'autres sociétés, qui construisent les appareils physiques qui utilisent le jeu d'instructions. Elle conçoit et octroie également des licences pour les cœurs qui implémentent ces ISA.
En raison de leur faible coût, de leur faible consommation d'énergie et de leur faible génération de chaleur, les processeurs ARM sont utiles pour les appareils légers, portables et alimentés par batterie, notamment les smartphones , les ordinateurs portables et les tablettes , ainsi que pour les systèmes embarqués . Cependant, les processeurs ARM sont également utilisés pour les ordinateurs de bureau et les serveurs , notamment Fugaku , le supercalculateur le plus rapide du monde de 2020 à 2022. Avec plus de 230 milliards de puces ARM produites, depuis au moins 2003, et avec sa domination croissante chaque année , ARM est la famille d'architectures de jeux d'instructions la plus utilisée.
Il y a eu plusieurs générations de la conception ARM. L'ARM1 d'origine utilisait une structure interne de 32 bits mais avait un espace d'adressage de 26 bits qui le limitait à 64 Mo de mémoire principale . Cette limitation a été supprimée dans la série ARMv3, qui dispose d'un espace d'adressage de 32 bits, et plusieurs générations supplémentaires jusqu'à ARMv7 sont restées en 32 bits. Sortie en 2011, l'architecture ARMv8-A a ajouté la prise en charge d'un espace d'adressage de 64 bits et d'une arithmétique de 64 bits avec son nouveau jeu d'instructions à longueur fixe de 32 bits. Arm Holdings a également publié une série de jeux d'instructions supplémentaires pour différentes règles ; l'extension « Thumb » ajoute des instructions de 32 et 16 bits pour une densité de code améliorée , tandis que Jazelle a ajouté des instructions pour gérer directement le bytecode Java . Les changements plus récents incluent l'ajout du multithreading simultané (SMT) pour améliorer les performances ou la tolérance aux pannes .
Histoire
BBC Micro
Le premier modèle à grand succès d' Acorn Computers fut le BBC Micro , lancé en décembre 1981. Il s'agissait d'une machine relativement conventionnelle basée sur le processeur MOS Technology 6502, mais qui fonctionnait à environ deux fois plus de performances que les modèles concurrents comme l' Apple II en raison de son utilisation d' une mémoire vive dynamique (DRAM) plus rapide. La DRAM typique de l'époque fonctionnait à environ 2 MHz ; Acorn a conclu un accord avec Hitachi pour la fourniture de pièces plus rapides à 4 MHz.
Les machines de l'époque partageaient généralement la mémoire entre le processeur et le tampon d'image , ce qui permettait au processeur de mettre à jour rapidement le contenu de l'écran sans avoir à effectuer des entrées/sorties séparées (E/S). Comme le timing de l'affichage vidéo est exigeant, le matériel vidéo devait avoir un accès prioritaire à cette mémoire. En raison d'une particularité de la conception du 6502, le processeur laissait la mémoire intacte pendant la moitié du temps. Ainsi, en faisant fonctionner le processeur à 1 MHz, le système vidéo pouvait lire les données pendant ces temps d'arrêt, occupant ainsi la bande passante totale de 2 MHz de la RAM. Dans le BBC Micro, l'utilisation d'une RAM à 4 MHz permettait d'utiliser la même technique, mais à une vitesse deux fois supérieure. Cela lui permettait de surpasser n'importe quelle machine similaire sur le marché.
Ordinateur d'entreprise Acorn
1981 est également l'année du lancement de l' ordinateur personnel IBM . Utilisant le processeur Intel 8088 récemment introduit , un processeur 16 bits par rapport à la conception 8 bits du 6502 , il offrait des performances globales supérieures. Son introduction a radicalement changé le marché des ordinateurs de bureau : ce qui était en grande partie un marché de loisirs et de jeux émergeant au cours des cinq années précédentes a commencé à se transformer en un outil professionnel indispensable où les conceptions 8 bits précédentes ne pouvaient tout simplement pas rivaliser. Même des conceptions 32 bits plus récentes arrivaient également sur le marché, comme le Motorola 68000 et le National Semiconductor NS32016 .
Acorn a commencé à réfléchir à la manière de concurrencer ce marché et a produit un nouveau modèle papier appelé Acorn Business Computer . Ils se sont fixé comme objectif de produire une machine avec dix fois les performances du BBC Micro, mais au même prix. Cela surpasserait et sous-évaluerait le PC. Dans le même temps, l'introduction récente de l' Apple Lisa a fait connaître le concept d' interface utilisateur graphique (GUI) à un public plus large et a suggéré que l'avenir appartenait aux machines avec une GUI. Le Lisa, cependant, coûtait 9 995 $, car il était équipé de puces de support, de grandes quantités de mémoire et d'un disque dur , tous très chers à l'époque.
Les ingénieurs ont alors commencé à étudier tous les modèles de processeurs disponibles. Leur conclusion concernant les modèles 16 bits existants était qu'ils étaient beaucoup plus chers et toujours « un peu nuls », offrant seulement des performances légèrement supérieures à leur conception BBC Micro. Ils exigeaient également presque toujours un grand nombre de puces de support pour fonctionner même à ce niveau, ce qui augmentait le coût de l'ordinateur dans son ensemble. Ces systèmes n'atteindraient tout simplement pas l'objectif de conception. Ils ont également envisagé les nouveaux modèles 32 bits, mais ceux-ci coûtaient encore plus cher et présentaient les mêmes problèmes avec les puces de support. Selon Sophie Wilson , tous les processeurs testés à cette époque fonctionnaient à peu près de la même manière, avec une bande passante d'environ 4 Mbit/s.
Deux événements clés ont conduit Acorn sur la voie de l'ARM. Le premier était la publication d'une série de rapports de l' Université de Californie à Berkeley , qui suggéraient qu'une conception de puce simple pouvait néanmoins avoir des performances extrêmement élevées, bien supérieures aux dernières conceptions 32 bits du marché. Le deuxième était une visite de Steve Furber et Sophie Wilson au Western Design Center , une société dirigée par Bill Mensch et sa sœur, qui était devenue le successeur logique de l'équipe MOS et qui proposait de nouvelles versions comme le WDC 65C02 . L'équipe Acorn a vu des étudiants du secondaire produire des configurations de puces sur des machines Apple II, ce qui laissait penser que n'importe qui pouvait le faire. En revanche, une visite dans une autre société de conception travaillant sur des processeurs 32 bits modernes a révélé une équipe avec plus d'une douzaine de membres qui étaient déjà sur la révision H de leur conception et pourtant elle contenait toujours des bugs. Cela a cimenté leur décision de fin 1983 de commencer leur propre conception de processeur, la machine RISC Acorn.
Concepts de conception
Les conceptions RISC originales de Berkeley étaient en quelque sorte des systèmes d'enseignement, pas conçus spécifiquement pour des performances absolues. Aux concepts de base de registres lourds et de chargement/stockage du RISC, ARM a ajouté un certain nombre de notes de conception bien accueillies du 6502. La principale d'entre elles était la capacité de servir rapidement les interruptions , ce qui permettait aux machines d'offrir des performances d'entrée/sortie raisonnables sans matériel externe ajouté. Pour offrir des interruptions avec des performances similaires à celles du 6502, la conception ARM limitait son espace d'adressage physique à 64 Mo d'espace adressable total, nécessitant 26 bits d'adresse. Comme les instructions étaient longues de 4 octets (32 bits) et devaient être alignées sur des limites de 4 octets, les 2 bits inférieurs d'une adresse d'instruction étaient toujours nuls. Cela signifiait que le compteur de programme (PC) n'avait besoin que de 24 bits, ce qui lui permettait d'être stocké avec les indicateurs de processeur à huit bits dans un seul registre de 32 bits. Cela signifie que lors de la réception d'une interruption, l'état complet de la machine peut être sauvegardé en une seule opération, alors que si le PC avait été une valeur complète de 32 bits, il aurait fallu des opérations distinctes pour stocker le PC et les indicateurs d'état. Cette décision a permis de réduire de moitié la charge d'interruption.
Un autre changement, et l'un des plus importants en termes de performances pratiques dans le monde réel, a été la modification du jeu d'instructions pour tirer parti du mode page DRAM . Récemment introduit, le mode page permettait aux accès ultérieurs à la mémoire de s'exécuter deux fois plus vite s'ils se trouvaient à peu près au même endroit, ou « page », dans la puce DRAM. La conception de Berkeley ne tenait pas compte du mode page et traitait toute la mémoire de la même manière. La conception ARM a ajouté des instructions d'accès à la mémoire de type vectoriel spéciales, les « cycles S », qui pouvaient être utilisées pour remplir ou sauvegarder plusieurs registres dans une seule page en utilisant le mode page. Cela doublait les performances de la mémoire lorsqu'elles pouvaient être utilisées, et était particulièrement important pour les performances graphiques.
Les conceptions RISC de Berkeley utilisaient des fenêtres de registre pour réduire le nombre de sauvegardes et de restaurations de registre effectuées dans les appels de procédure ; la conception ARM n'a pas adopté cette méthode.
Wilson a développé le jeu d' instructions, en é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 contacté le PDG d'Acorn, Hermann Hauser , et a demandé plus de ressources. Hauser a donné son accord et a réuni une petite équipe pour concevoir le processeur réel basé sur l'ISA de Wilson. Le projet officiel de machine RISC d'Acorn a démarré en octobre 1983.
ARM1
2ème processeur ARM1 pour le BBC Micro
Acorn a choisi VLSI Technology comme « partenaire silicium », car ils étaient une source de ROM et de puces personnalisées pour Acorn. Acorn a fourni la conception et VLSI a fourni la mise en page et la production. Les premiers échantillons de silicium ARM ont fonctionné correctement lorsqu'ils ont été reçus et testés pour la première fois le 26 avril 1985. Connues sous le nom d'ARM1, ces versions fonctionnaient à 6 MHz.
La première application ARM a été celle d'un second processeur pour le BBC Micro, où elle a contribué au développement du logiciel de simulation pour terminer le développement des puces de support (VIDC, IOC, MEMC) et a accéléré le logiciel de CAO utilisé dans le développement d'ARM2. Wilson a ensuite réécrit BBC BASIC en langage assembleur ARM . Les connaissances approfondies acquises lors de la conception du jeu d'instructions ont permis au code d'être très dense, faisant d'ARM BBC BASIC un test extrêmement efficace pour tout émulateur ARM.
ARM2
Le résultat des simulations sur les cartes ARM1 a conduit à l'introduction de la conception ARM2 à 8 MHz à la fin de 1986 et à la version accélérée à 10 à 12 MHz au début de 1987. Un changement significatif dans l'architecture sous-jacente a été l'ajout d'un multiplicateur Booth , alors qu'auparavant la multiplication devait être effectuée par logiciel. De plus, un nouveau mode de demande d'interruption rapide, FIQ en abrégé, a permis de remplacer les registres 8 à 14 dans le cadre de l'interruption elle-même. Cela signifiait que les demandes FIQ n'avaient pas besoin de sauvegarder leurs registres, ce qui accélérait encore les interruptions.
La première utilisation de l'ARM2 fut les modèles d'ordinateurs personnels Acorn Archimedes A305, A310 et A440 lancés en 1987.
Selon le benchmark Dhrystone , l'ARM2 était environ sept fois plus performant qu'un système 68000 à 7 MHz typique comme l' Amiga ou le Macintosh SE . Il était deux fois plus rapide qu'un Intel 80386 cadencé à 16 MHz et à peu près aussi rapide qu'un supermini-ordinateur multiprocesseur VAX-11/784 . Les seuls systèmes qui le surpassaient étaient les stations de travail Sun SPARC et MIPS R2000 RISC . De plus, comme le processeur était conçu pour des E/S à grande vitesse, il se passait de nombreuses puces de support présentes dans ces machines ; notamment, il manquait de contrôleur d'accès direct à la mémoire (DMA) dédié que l'on trouvait souvent sur les stations de travail. Le système graphique a également été simplifié sur la base du même ensemble d'hypothèses sous-jacentes sur la mémoire et la synchronisation. Le résultat était une conception considérablement simplifiée, offrant des performances comparables à celles des stations de travail coûteuses, mais à un prix similaire à celui des ordinateurs de bureau contemporains.
L'ARM2 était doté d'un bus de données 32 bits , d'un espace d'adressage 26 bits et de 27 registres 32 bits , dont 16 sont accessibles à tout moment (y compris sur le PC ). L'ARM2 avait un nombre de transistors de seulement 30 000, par rapport au modèle 68000 de Motorola, plus vieux de six ans, qui en comptait environ 68 000. Une grande partie de cette simplicité provenait de l'absence de microcode , qui représente environ un quart à un tiers des transistors du 68000, et de l'absence (comme la plupart des processeurs de l'époque) de cache . Cette simplicité permettait à l'ARM2 d'avoir une faible consommation d'énergie et un conditionnement thermique plus simple en ayant moins de transistors alimentés. Néanmoins, l'ARM2 offrait de meilleures performances que le modèle contemporain IBM PS/2 50 de 1987 , qui utilisait initialement un Intel 80286 , offrant 1,8 MIPS à 10 MHz, et plus tard en 1987, les 2 MIPS du PS/2 70, avec son Intel 386 DX à 16 MHz.
Un successeur, l'ARM3, a été produit avec un cache de 4 Ko, ce qui a encore amélioré les performances. Le bus d'adresse a été étendu à 32 bits dans l'ARM6, mais le code du programme devait toujours se trouver dans les 64 premiers Mo de mémoire en mode de compatibilité 26 bits, en raison des bits réservés pour les indicateurs d'état.
Machines RISC avancées Ltée – ARM6
Système basé sur un microprocesseur sur une puceDétruire un microprocesseur ARM610
À la fin des années 1980, Apple Computer et VLSI Technology ont commencé à travailler avec Acorn sur de nouvelles versions du cœur ARM. En 1990, Acorn a séparé l'équipe de conception en une nouvelle société appelée Advanced RISC Machines Ltd., qui est devenue ARM Ltd. lorsque sa société mère, Arm Holdings plc, a été introduite à la Bourse de Londres et au Nasdaq en 1998. Le nouveau travail d'Apple-ARM allait finalement évoluer vers l'ARM6, commercialisé pour la première fois au début de 1992. Apple a utilisé l'ARM610 basé sur ARM6 comme base pour son PDA Apple Newton .
Les premiers titulaires de licence
En 1994, Acorn utilisait l'ARM610 comme unité centrale de traitement (CPU) principale dans ses ordinateurs RiscPC . DEC a obtenu une licence pour l'architecture ARMv4 et a produit le StrongARM . À 233 MHz , ce processeur 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 profité de l'occasion pour compléter sa gamme i960 avec le StrongARM. Intel a ensuite développé sa propre implémentation haute performance appelée XScale , qu'elle a depuis vendue à Marvell . Le nombre de transistors du cœur ARM est resté essentiellement le même tout au long de ces changements ; ARM2 avait 30 000 transistors, tandis que ARM6 n'en comptait que 35 000.
Part de marché
En 2005, environ 98 % de tous les téléphones mobiles vendus utilisaient au moins un processeur ARM. En 2010, les producteurs de puces basées sur des architectures ARM ont déclaré avoir expédié 6,1 milliards de processeurs basés sur ARM , ce qui représente 95 % des smartphones , 35 % des téléviseurs numériques et des décodeurs et 10 % des ordinateurs portables . En 2011, l'architecture ARM 32 bits était l'architecture la plus largement utilisée dans les appareils mobiles et la plus populaire dans les systèmes embarqués. En 2013, 10 milliards ont été produits et « les puces basées sur ARM sont présentes dans près de 60 % des appareils mobiles du monde ».
Les architectures ARM utilisées dans les smartphones, PDA et autres appareils mobiles vont de ARMv5 à ARMv8-A .
En 2009, certains fabricants ont introduit des netbooks basés sur des processeurs à architecture ARM, en concurrence directe avec les netbooks basés sur Intel Atom .
Arm Holdings propose une variété de conditions de licence, dont le coût et les livrables varient. Arm Holdings fournit à tous les titulaires de licence une description matérielle intégrable du cœur ARM ainsi qu'un ensemble complet d'outils de développement logiciel ( compilateur , débogueur , kit de développement logiciel ) et le droit de vendre du silicium fabriqué contenant le processeur ARM.
Les packages SoC intégrant les conceptions de base d'ARM incluent les trois premières générations de Nvidia Tegra, la famille Quatro de CSR plc, Nova et NovaThor de ST-Ericsson, le microcontrôleur Precision32 de Silicon Labs, les produits OMAP de Texas Instruments , les produits Hummingbird et Exynos de Samsung, les A4 , A5 et A5X d'Apple et l'i.MX de NXP .
Les titulaires de licence sans usine , qui souhaitent intégrer un cœur ARM dans leur propre conception de puce, ne sont généralement intéressés que par l'acquisition d'un cœur de propriété intellectuelle de semi-conducteur vérifié et prêt à être fabriqué . Pour ces clients, Arm Holdings fournit une description de la liste de connexions de portes du cœur ARM choisi, ainsi qu'un modèle de simulation abstrait et des programmes de test pour faciliter l'intégration et la vérification de la conception. Les clients plus ambitieux, notamment les fabricants de dispositifs intégrés (IDM) et les opérateurs de fonderie, choisissent d'acquérir la propriété intellectuelle du processeur sous forme de RTL synthétisable ( Verilog ). Avec le RTL synthétisable, le client a la possibilité d'effectuer des optimisations et des extensions au niveau de l'architecture. Cela permet au concepteur d'atteindre des objectifs de conception exotiques qui ne seraient pas possibles autrement avec une liste de connexions non modifiée ( vitesse d'horloge élevée , très faible consommation d'énergie, extensions du jeu d'instructions, etc.). Bien qu'Arm Holdings n'accorde pas au titulaire de licence le droit de revendre l'architecture ARM elle-même, les titulaires de licence peuvent vendre librement des produits fabriqués tels que des puces, des cartes d'évaluation et des systèmes complets. Les fonderies commerciales peuvent être un cas particulier ; non seulement ils sont autorisés à vendre du silicium fini contenant des cœurs ARM, mais ils détiennent généralement le droit de reconditionner des cœurs ARM pour d'autres clients.
Arm Holdings fixe le prix de sa propriété intellectuelle en fonction de la valeur perçue. Les cœurs ARM les moins performants ont généralement des coûts de licence inférieurs à ceux des cœurs les plus performants. En termes de mise en œuvre, un cœur synthétisable coûte plus cher qu'un cœur macro dur (boîte noire). Pour compliquer les choses, une fonderie commerciale qui détient une licence ARM, comme Samsung ou Fujitsu, peut offrir aux clients de la fab des coûts de licence réduits. En échange de l'acquisition du cœur ARM par le biais des services de conception internes de la fonderie, le client peut réduire ou éliminer le paiement des frais de licence initiaux d'ARM.
Par rapport aux fonderies de semi-conducteurs spécialisées (comme TSMC et UMC ) sans services de conception internes, Fujitsu/Samsung facture deux à trois fois plus cher par plaquette fabriquée . Pour les applications à faible et moyen volume, une fonderie de services de conception offre un prix global plus bas (grâce à la subvention des frais de licence). Pour les pièces produites en masse en grande quantité, la réduction des coûts à long terme réalisable grâce à une tarification des plaquettes plus basse réduit l'impact des coûts NRE ( ingénierie non récurrente ) d'ARM, ce qui fait de la fonderie dédiée un meilleur choix.
Construit sur la licence de technologie ARM Cortex
En février 2016, ARM a annoncé la licence Built on ARM Cortex Technology, souvent abrégée en licence Built on Cortex (BoC). Cette licence permet aux entreprises de s'associer à ARM et d'apporter des modifications aux conceptions ARM Cortex. Ces modifications de conception ne seront pas partagées avec d'autres entreprises. Ces conceptions de cœur semi-personnalisées bénéficient également d'une liberté de marque, par exemple Kryo 280 .
Les entreprises actuellement titulaires de licences de la technologie Built on ARM Cortex incluent Qualcomm .
Licence d'architecte
Les entreprises peuvent également obtenir une licence d'architecture ARM pour concevoir leurs propres cœurs de processeur à l'aide des jeux d'instructions ARM. Ces cœurs doivent être entièrement conformes à l'architecture ARM. Parmi les entreprises qui ont conçu des cœurs mettant en œuvre une architecture ARM figurent Apple, AppliedMicro (désormais : Ampere Computing ), Broadcom, Cavium (désormais : Marvell), Digital Equipment Corporation , Intel, Nvidia, Qualcomm, Samsung Electronics, Fujitsu et NUVIA Inc. (acquise par Qualcomm en 2021).
Accès flexible ARM
Le 16 juillet 2019, ARM a annoncé ARM Flexible Access. ARM Flexible Access offre un accès illimité à la propriété intellectuelle (IP) ARM incluse pour le développement. Des frais de licence par produit sont exigés une fois qu'un client atteint la sortie de bande de fonderie ou le prototypage.
75 % des IP les plus récentes d'ARM au cours des deux dernières années sont incluses dans ARM Flexible Access. En octobre 2019 :
Débogage et traçage : CoreSight SoC-400, CoreSight SDC-600, CoreSight STM-500, CoreSight System Trace Macrocell, CoreSight Trace Memory Controller
Kits de conception : Corstone-101, Corstone-201
IP physique : Artisan PIK pour Cortex-M33 TSMC 22ULL comprenant des compilateurs de mémoire, des bibliothèques logiques, des GPIO et de la documentation
Outils et matériaux : Socrates IP ToolingARM Design Studio, modèles de systèmes virtuels
Assistance : Assistance technique ARM standard, formation en ligne ARM, mises à jour de maintenance, crédits pour la formation sur site et les revues de conception
Noyaux
Arm fournit une liste de fournisseurs qui implémentent des cœurs ARM dans leur conception (produits standard spécifiques à l'application (ASSP), microprocesseurs et microcontrôleurs).
Exemples d'applications des cœurs ARM
Tronsmart MK908, un mini PC Android quad-core basé sur Rockchip , avec une carte microSD à côté pour une comparaison de taille
Un ARMv7 a été utilisé pour alimenter les anciennes versions des ordinateurs monocartes populaires Raspberry Pi comme ce Raspberry Pi 2 de 2015.Un ARMv7 est également utilisé pour alimenter la famille d'ordinateurs monocarte CuBox .
L'architecture ARM 32 bits ( ARM32 ), comme ARMv7-A (implémentant AArch32 ; voir la section sur Armv8-A pour plus d'informations), était l'architecture la plus largement utilisée dans les appareils mobiles en 2011. [
Depuis 1995, différentes versions du manuel de référence de l'architecture ARM (voir § Liens externes) constituent la principale source de documentation sur l'architecture et le jeu d'instructions des processeurs ARM, distinguant les interfaces que tous les processeurs ARM doivent prendre en charge (comme la sémantique des instructions) des détails d'implémentation qui peuvent varier. L'architecture a évolué au fil du temps, et la version sept de l'architecture, ARMv7, définit trois « profils » d'architecture :
Profil A, le profil « Application », implémenté par les cœurs 32 bits de la série Cortex-A et par certains cœurs non ARM
R-profile, le profil « temps réel », implémenté par les cœurs de la série Cortex-R
Profil M, le profil « Microcontrôleur », implémenté par la plupart des cœurs de la série Cortex-M
Bien que les profils d'architecture aient été définis pour la première fois pour ARMv7, ARM a ensuite défini l'architecture ARMv6-M (utilisée par le Cortex M0 / M0+ / M1 ) comme un sous-ensemble du profil ARMv7-M avec moins d'instructions.
Modes du processeur
À l'exception du profil M, l'architecture ARM 32 bits spécifie plusieurs modes de processeur, en fonction des fonctionnalités d'architecture implémentées. À tout moment, le processeur ne peut être que dans un seul mode, mais il peut changer de mode en raison d'événements externes (interruptions) ou par programmation.
Mode utilisateur : Le seul mode non privilégié.
Mode FIQ : mode privilégié dans lequel on entre chaque fois que le processeur accepte une demande d'interruption rapide .
Mode IRQ : un mode privilégié dans lequel on entre chaque fois que le processeur accepte une interruption.
Mode superviseur (svc) : mode privilégié auquel on accède à chaque fois que le processeur est réinitialisé ou lorsqu'une instruction SVC est exécutée.
Mode d'abandon : mode privilégié dans lequel on entre chaque fois qu'une exception d'abandon de prélecture ou d'abandon de données se produit.
Mode non défini : mode privilégié dans lequel on entre chaque fois qu'une exception d'instruction non définie se produit.
Mode système (ARMv4 et supérieur) : seul mode privilégié qui n'est pas accessible par une exception. Il ne peut être accessible qu'en exécutant une instruction qui écrit explicitement dans les bits de mode du registre d'état du programme actuel (CPSR) à partir d'un autre mode privilégié (pas à partir du mode utilisateur).
Mode surveillance (extensions de sécurité ARMv6 et ARMv7, ARMv8 EL3) : un mode surveillance est introduit pour prendre en charge l'extension TrustZone dans les cœurs ARM.
Mode Hyp (ARMv7 Virtualization Extensions, ARMv8 EL2) : un mode hyperviseur qui prend en charge les exigences de virtualisation Popek et Goldberg pour le fonctionnement non sécurisé du processeur.
Mode thread (ARMv6-M, ARMv7-M, ARMv8-M) : mode pouvant être spécifié comme privilégié ou non privilégié. L'utilisation du pointeur de pile principal (MSP) ou du pointeur de pile de processus (PSP) peut également être spécifiée dans le registre CONTROL avec accès privilégié. Ce mode est conçu pour les tâches utilisateur dans un environnement RTOS, mais il est généralement utilisé en bare-metal pour la super-boucle.
Mode gestionnaire (ARMv6-M, ARMv7-M, ARMv8-M) : mode dédié à la gestion des exceptions (sauf les RESET qui sont gérées en mode Thread). Le mode gestionnaire utilise toujours MSP et fonctionne en niveau privilégié.
Jeu d'instructions
L'implémentation ARM originale (et ultérieure) é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 32 bits (et l'architecture 64 bits pour la plupart) inclut les fonctionnalités RISC suivantes :
Aucun support pour les accès mémoire non alignés dans la version originale de l'architecture. ARMv6 et versions ultérieures, à l'exception de certaines versions de microcontrôleurs, prennent en charge les accès non alignés pour les instructions de chargement/stockage de demi-mots et de mots simples avec certaines limitations, telles que l'absence d'atomicité garantie .
Fichier de registre uniforme 16 × 32 bits (comprenant 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 pipelining , au prix d'une diminution de la densité du code . Plus tard, le jeu d'instructions Thumb a ajouté des instructions de 16 bits et augmenté la densité du code.
Exécution principalement sur un seul cycle d'horloge.
Pour compenser la conception plus simple, par rapport aux processeurs tels que l'Intel 80286 et le Motorola 68020 , certaines caractéristiques de conception supplémentaires ont été utilisées :
L’exécution conditionnelle de la plupart des instructions réduit la surcharge de branchement et compense l’absence de prédicteur de branchement dans les premières puces.
Les instructions arithmétiques modifient les codes de condition uniquement lorsque cela est souhaité.
Le décaleur à barillet 32 bits peut être utilisé sans pénalité de performances avec la plupart des instructions arithmétiques et des calculs d'adresse.
ARM inclut des opérations arithmétiques entières pour l'addition, la soustraction et la multiplication ; certaines versions de l'architecture prennent également en charge les opérations de division.
ARM prend en charge les multiplications 32 bits × 32 bits avec un résultat 32 bits ou 64 bits, bien que les cœurs Cortex-M0 / M0+ / M1 ne prennent pas en charge les résultats 64 bits. Certains cœurs ARM prennent également en charge les multiplications 16 bits × 16 bits et 32 bits × 16 bits.
Les instructions de division ne sont incluses que dans les architectures ARM suivantes :
Les architectures Armv7-M et Armv7E-M incluent toujours des instructions de division.
L'architecture Armv7-R inclut toujours des instructions de division dans le jeu d'instructions Thumb, mais éventuellement dans son jeu d'instructions 32 bits.
L'architecture Armv7-A inclut éventuellement les instructions de division. Les instructions peuvent ne pas être implémentées, ou implémentées uniquement dans le jeu d'instructions Thumb, ou implémentées à la fois dans les jeux d'instructions Thumb et ARM, ou implémentées si les extensions de virtualisation sont incluses.
Registres
Les registres R0 à R7 sont les mêmes dans tous les modes CPU ; ils ne sont jamais mis en banque.
Les registres R8 à R12 sont identiques dans tous les modes CPU, à l'exception du mode FIQ. Le mode FIQ possède ses propres registres R8 à R12 distincts.
R13 et R14 sont répartis sur tous les modes CPU privilégiés, à l'exception du mode système. Autrement dit, chaque mode dans lequel il est possible d'entrer en raison d'une exception possède ses propres R13 et R14. Ces registres contiennent généralement le pointeur de pile et l'adresse de retour des appels de fonction, respectivement.
Le registre d'état actuel du programme (CPSR) comporte les 32 bits suivants.
M (bits 0 à 4) correspond aux bits du mode processeur.
T (bit 5) est le bit d'état du pouce.
F (bit 6) est le bit de désactivation FIQ.
I (bit 7) est le bit de désactivation IRQ.
A (bit 8) est le bit de désactivation de l'abandon des données imprécises.
E (bit 9) est le bit d'endianness des données.
IT (bits 10 à 15 et 25 à 26) correspond aux bits d’état si-alors.
GE (bits 16 à 19) correspond aux bits supérieurs ou égaux à.
DNM (bits 20 à 23) correspond aux bits à ne pas modifier.
J (bit 24) est le bit d'état Java.
Q (bit 27) est le bit de débordement collant.
V (bit 28) est le bit de débordement.
C (bit 29) est le bit de report/emprunt/extension.
Z (bit 30) est le bit zéro.
N (bit 31) est le bit négatif/inférieur à.
Exécution conditionnelle
Presque toutes les instructions ARM disposent d'une fonction d'exécution conditionnelle appelée prédication , qui est implémentée avec un sélecteur de code de condition à 4 bits (le prédicat). Pour permettre une exécution inconditionnelle, l'un des codes à quatre bits provoque l'exécution systématique de l'instruction. La plupart des autres architectures de processeurs n'ont des codes de condition que sur les instructions de branchement.
Bien que le prédicat occupe quatre des 32 bits d'un code d'instruction et réduise ainsi considérablement les bits de codage disponibles pour les déplacements dans les instructions d'accès à la mémoire, il évite les instructions de branchement lors de la génération de code pour les petites ifinstructions . En plus d'éliminer les instructions de branchement elles-mêmes, cela préserve le pipeline d'extraction/décodage/exécution au prix d'un seul cycle par instruction ignorée.
int gcd ( int a , int b ) { while ( a != b ) // On entre dans la boucle quand a < b ou a > b, mais pas quand a == b if ( a > b ) // Quand a > b on fait ceci a -= b ; else // Quand a < b on fait cela (pas besoin de "if (a < b)" puisque a != b est coché dans la condition while) b -= a ; return a ; }
Le même algorithme peut être réécrit d'une manière plus proche des instructions ARM cibles comme :
boucle : // Comparer a et b GT = a > b ; LT = a < b ; NE = a != b ;// Exécuter des opérations en fonction des résultats des indicateurs if ( GT ) a -= b ; // Soustraire *uniquement* si supérieur à if ( LT ) b -= a ; // Soustraire *uniquement* si inférieur à if ( NE ) goto loop ; // Boucle *uniquement* si les valeurs comparées ne sont pas égales return a ;
; affecter a au registre r0, b à la boucle r1 : CMP r0 , r1 ; définir la condition "NE" si (a ≠ b), ; "GT" si (a > b), ; ou "LT" si (a < b) SUBGT r0 , r0 , r1 ; si "GT" (supérieur à), alors a = a − b SUBLT r1 , r1 , r0 ; si "LT" (inférieur à), alors b = b − a Boucle BNE ; si "NE" (différent), alors boucle B lr ; retourner
ce qui évite les branches autour des clauses thenet else. Si r0et r1sont égaux, aucune des SUBinstructions ne sera exécutée, éliminant ainsi le besoin d'une branche conditionnelle pour implémenter la whilevérification 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 codage plus dense est de supprimer le sélecteur à quatre bits des instructions non ramifiées.
Autres caractéristiques
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étique, logique et déplacement de registre à registre), de sorte que, par exemple, l'instruction en langage C :
a += ( j << 2 );
pourrait être rendu comme une instruction d'un seul mot et d'un seul cycle :
AJOUTER Ra , Ra , Rj , LSL #2
Il en résulte que le programme ARM typique est plus dense que prévu avec moins d'accès à la 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 l'ARM 32 bits le PC est l'un de ses 16 registres) et les modes d'adressage pré- et post-incrémentation.
Le jeu d'instructions ARM a augmenté au fil du temps. Certains des premiers processeurs ARM (avant ARM7TDMI), par exemple, ne disposaient d'aucune instruction permettant de stocker une quantité de deux octets.
Pipelines et autres problèmes de mise en œuvre
Les implémentations ARM7 et antérieures ont un pipeline à trois étapes : les étapes étant la récupération, le décodage et l'exécution. Les conceptions plus performantes, telles que l'ARM9, ont des pipelines plus profonds : le Cortex-A8 a treize étapes. Les modifications d'implémentation supplémentaires pour des performances supérieures incluent un additionneur plus rapide et une logique de prédiction de branche plus étendue . La différence entre les cœurs ARM7DI et ARM7DMI, par exemple, était un multiplicateur amélioré ; d'où l'ajout du « M ».
Coprocesseurs
L'architecture ARM (pré-Armv8) fournit un moyen non intrusif d'étendre le jeu d'instructions en utilisant des « coprocesseurs » qui peuvent être adressés à l'aide d'instructions MCR, MRC, MRRC, MCRR et similaires. L'espace du coprocesseur est divisé logiquement en 16 coprocesseurs avec des numéros de 0 à 15, le coprocesseur 15 (cp15) étant réservé à certaines fonctions de contrôle typiques comme la gestion des caches et le fonctionnement de la MMU sur les processeurs qui en ont 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, dans l'espace coprocesseur ou en se connectant à un autre périphérique (un bus) qui à son tour se connecte 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'interruption XScale) sont accessibles de deux manières : via la mémoire et via les coprocesseurs.
Dans d'autres cas, les concepteurs de puces intègrent uniquement le matériel à l'aide du mécanisme de coprocesseur. Par exemple, un moteur de traitement d'image peut être un petit cœur ARM7TDMI associé à un coprocesseur doté d'opérations spécialisées pour prendre en charge un ensemble spécifique de primitives de transcodage HDTV.
Débogage
Tous les processeurs ARM modernes incluent des fonctions de débogage matériel, permettant aux débogueurs logiciels d'effectuer des opérations telles que l'arrêt, le passage en mode pas à pas et le point d'arrêt du code à partir de la réinitialisation. Ces fonctions sont construites à l' aide de la prise en charge JTAG , bien que certains cœurs plus récents prennent en charge en option le protocole à deux fils « SWD » d'ARM. Dans les cœurs ARM7TDMI, le « D » représentait la prise en charge du 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 une norme de débogage de facto, bien que non garantie architecturalement.
L'architecture ARMv7 définit des fonctions de débogage de base au niveau architectural. Celles-ci incluent des points d'arrêt, des points de surveillance et l'exécution d'instructions en « mode débogage » ; des fonctions similaires étaient également disponibles avec EmbeddedICE. Le débogage en « mode arrêt » et en mode « surveillance » est pris en charge. Le mécanisme de transport réel utilisé pour accéder aux fonctions de débogage n'est pas spécifié au niveau architectural, mais les implémentations incluent généralement la prise en charge de JTAG.
Il existe une architecture de débogage ARM « CoreSight » distincte, qui n'est pas requise architecturalement par les processeurs ARMv7.
Port d'accès de débogage
Le port d'accès de débogage (DAP) est une implémentation d'une interface de débogage ARM. Il existe deux implémentations différentes prises en charge, le port de débogage JTAG Serial Wire (SWJ-DP) et le port de débogage Serial Wire (SW-DP). CMSIS-DAP est une interface standard qui décrit comment divers logiciels de débogage sur un PC hôte peuvent communiquer via USB avec le micrologiciel exécuté sur un débogueur matériel, qui à son tour communique via SWD ou JTAG avec un processeur ARM Cortex compatible CoreSight.
Instructions d'amélioration du DSP
Pour améliorer l'architecture ARM pour le traitement du signal numérique et les applications multimédias, des instructions DSP ont été ajoutées au jeu d'instructions. Celles-ci sont signalées par un « E » dans le nom des architectures ARMv5TE et ARMv5TEJ. Les variantes E impliquent également T, D, M et I.
Introduite pour la première fois en 1999, cette extension du jeu d'instructions de base contrastait avec le coprocesseur DSP antérieur d'ARM connu sous le nom de Piccolo, qui utilisait un jeu d'instructions distinct et incompatible dont l'exécution impliquait un compteur de programme distinct. Les instructions Piccolo utilisaient un fichier de registres distinct de seize registres 32 bits, certaines instructions combinant des registres pour une utilisation comme accumulateurs 48 bits et d'autres instructions adressant des demi-registres 16 bits. Certaines instructions pouvaient fonctionner sur deux de ces valeurs 16 bits en parallèle. La communication avec le fichier de registres Piccolo impliquait le chargement dans Piccolo et le stockage à partir des instructions du coprocesseur Piccolo via deux tampons de huit entrées 32 bits. Décrit comme rappelant d'autres approches, notamment le SH-DSP d'Hitachi et le 68356 de Motorola, Piccolo n'utilisait pas de mémoire locale dédiée et s'appuyait sur la bande passante du cœur ARM pour la récupération des opérandes DSP, ce qui avait un impact sur les performances simultanées. Le jeu d'instructions distinct de Piccolo s'est également avéré ne pas être une « bonne cible de compilation ».
Extensions SIMD pour le multimédia
Introduit dans l'architecture ARMv6, il s'agissait d'un précurseur de Advanced SIMD, également appelé Neon.
Jazelle
Jazelle DBX (Direct Bytecode eXecution) est une technique qui permet d'exécuter directement le bytecode Java dans l'architecture ARM en tant que troisième état d'exécution (et jeu d'instructions) aux côtés des modes ARM et Thumb existants. La prise en charge de cet état est indiquée par le « J » dans l'architecture ARMv5TEJ et dans les noms de cœur ARM9EJ-S et ARM7EJ-S. La prise en charge de cet état est requise à partir d'ARMv6 (à l'exception du profil ARMv7-M), bien que les cœurs plus récents n'incluent qu'une implémentation triviale qui n'offre aucune accélération matérielle.
Pouce
Pour améliorer la densité du code compilé, les processeurs depuis l'ARM7TDMI (sorti en 1994 ) ont intégré le jeu d'instructions compressé Thumb , qui possède son propre état. (Le « T » dans « TDMI » indique la fonction Thumb.) Dans cet état, le processeur exécute le jeu d'instructions Thumb, un codage compact de 16 bits pour un sous-ensemble du jeu d'instructions ARM. La plupart des instructions Thumb sont directement mappées sur des 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.
Dans Thumb, les opcodes 16 bits ont moins de fonctionnalités. Par exemple, seules les branches peuvent être conditionnelles et de nombreux opcodes sont limités à l'accès à la moitié seulement de tous les registres à usage général du processeur. Les opcodes plus courts offrent une densité de code globalement améliorée, même si certaines opérations nécessitent des instructions supplémentaires. Dans les situations où la largeur du port mémoire ou du bus est limitée à moins de 32 bits, les opcodes Thumb plus courts permettent d'améliorer les performances par rapport au code ARM 32 bits, car moins de code de programme peut devoir être chargé dans le processeur sur la bande passante mémoire limitée.
Contrairement aux architectures de processeurs avec des instructions de longueur variable (16 ou 32 bits), telles que Cray-1 et Hitachi SuperH , les jeux d'instructions ARM et Thumb existent indépendamment l'un de l'autre. Le matériel embarqué, tel que 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 le code Thumb et d'optimiser manuellement quelques-unes des sections les plus gourmandes en ressources CPU à l'aide d'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 doté d'un décodeur d'instructions Thumb était l'ARM7TDMI. Tous les processeurs prenant en charge les jeux d'instructions 32 bits, à commencer par ARM9 et y compris XScale, ont inclus un décodeur d'instructions Thumb. Il comprend des instructions adoptées à partir du Hitachi SuperH (1992), qui a été licencié par ARM. Les plus petites familles de processeurs ARM (Cortex M0 et M1) implémentent uniquement le jeu d'instructions Thumb 16 bits pour des performances maximales dans les applications à moindre coût. Les processeurs ARM qui ne prennent pas en charge l'adressage 32 bits omettent également Thumb.
Pouce-2
La technologie Thumb-2 a été introduite dans le cœur ARM1156 , annoncé en 2003. Thumb-2 étend le jeu d'instructions limité de 16 bits de Thumb avec des instructions supplémentaires de 32 bits pour donner plus d'ampleur au jeu d'instructions, produisant ainsi un jeu d'instructions de longueur variable. L'un des objectifs déclarés de Thumb-2 était d'obtenir une densité de code similaire à celle de Thumb avec des performances similaires au jeu d'instructions ARM sur une mémoire 32 bits.
Thumb-2 étend le jeu d'instructions Thumb avec la manipulation de champs de bits, les branches de table et l'exécution conditionnelle. Dans le même temps, le jeu d'instructions ARM a été étendu pour maintenir une fonctionnalité équivalente dans les deux jeux d'instructions. Un nouveau « langage d'assemblage unifié » (UAL) prend en charge la génération d'instructions Thumb ou ARM à partir du même code source ; les versions de Thumb vues sur les processeurs ARMv7 sont essentiellement aussi performantes que le code ARM (y compris la capacité d'écrire des gestionnaires d'interruption). Cela nécessite un peu de prudence et l'utilisation d'une nouvelle instruction « IT » (si-alors), qui permet d'exécuter jusqu'à quatre instructions successives en fonction d'une condition testée, ou de son inverse. Lors de la compilation en code ARM, cela est ignoré, mais lors de la compilation en Thumb, il génère une instruction réelle. Par exemple :
; si (r0 == r1) CMP r0 , r1 ITE EQ ; ARM : pas de code ... Thumb : instruction IT ; alors r0 = r2 ; MOVEQ r0 , r2 ; ARM : conditionnel ; Thumb : condition via ITE 'T' (alors) ; sinon r0 = r3 ; MOVNE r0 , r3 ; ARM : conditionnel ; Thumb : condition via ITE 'E' (sinon) ; rappelons que l'instruction Thumb MOV n'a pas de bits pour encoder "EQ" ou "NE".
Toutes les puces ARMv7 prennent en charge le jeu d'instructions Thumb. Toutes les puces de la série Cortex-A qui prennent en charge ARMv7, toutes les séries Cortex-R et toutes les séries ARM11 prennent en charge à la fois « l'état du jeu d'instructions ARM » et « l'état du jeu d'instructions Thumb », tandis que les puces de la série Cortex-M ne prennent en charge que le jeu d'instructions Thumb.
Environnement d'exécution du pouce (ThumbEE)
ThumbEE (appelé à tort Thumb-2EE dans certaines documentations ARM), commercialisé sous le nom de Jazelle RCT (Runtime Compilation Target), a été annoncé en 2005 et obsolète en 2011. Il est apparu pour la première fois dans le processeur Cortex-A8 . ThumbEE est un quatrième état du jeu d'instructions, apportant de petites modifications au jeu d'instructions étendu Thumb-2. Ces modifications rendent le jeu d'instructions particulièrement adapté au code généré au moment de l'exécution (par exemple par compilation JIT ) dans les environnements d'exécution gérés . ThumbEE est une cible pour les langages tels que Java , C# , Perl et Python , et permet aux compilateurs JIT de générer un code compilé plus petit sans réduire les performances.
Les nouvelles fonctionnalités fournies par ThumbEE incluent des vérifications automatiques de pointeur nul sur chaque instruction de chargement et de stockage, une instruction pour effectuer une vérification des limites d'un tableau et des instructions spéciales qui appellent un gestionnaire. De plus, comme il utilise la technologie Thumb-2, ThumbEE donne accès aux registres r8–r15 (où l'état de la machine virtuelle Java Jazelle/DBX est conservé). Les gestionnaires sont de petites sections de code fréquemment appelées, couramment utilisées pour implémenter des langages de haut niveau, tels que l'allocation de mémoire pour un nouvel objet. Ces changements proviennent de la réutilisation d'une poignée d'opcodes et de la connaissance que le cœur est dans le nouvel état ThumbEE.
Le 23 novembre 2011, Arm a abandonné toute utilisation du jeu d'instructions ThumbEE, et Armv8 supprime la prise en charge de ThumbEE.
Virgule flottante (VFP)
La technologie VFP (Vector Floating Point) est une extension de coprocesseur à virgule flottante (FPU) de l'architecture ARM à virgule flottante simple précision et double précision à faible coût entièrement conforme à la norme ANSI/IEEE Std 754-1985 pour l'arithmétique binaire à virgule flottante . VFP fournit un calcul à virgule flottante adapté à un large éventail d'applications telles que les PDA, les smartphones, la compression et la décompression vocales, les graphiques tridimensionnels et l'audio numérique, les imprimantes, les décodeurs et les applications automobiles. L'architecture VFP était destinée à prendre en charge l'exécution d'instructions courtes en « mode vectoriel », mais celles-ci fonctionnaient sur chaque élément vectoriel de manière séquentielle et n'offraient donc pas les performances d'un véritable parallélisme vectoriel à instruction unique et données multiples (SIMD). Ce mode vectoriel a donc été supprimé peu de temps après son introduction, pour être remplacé par le SIMD avancé beaucoup plus puissant, également appelé Neon.
Certains dispositifs tels que l'ARM Cortex-A8 ont un module VFPLite réduit au lieu d'un module VFP complet et nécessitent environ dix fois plus de cycles d'horloge par opération flottante. L'architecture pré-Armv8 implémentait la virgule flottante/SIMD avec l'interface du coprocesseur. D'autres unités à virgule flottante et/ou SIMD trouvées dans les processeurs basés sur ARM utilisant l'interface du coprocesseur incluent FPA, FPE, iwMMXt , dont certaines ont été implémentées dans le logiciel par piégeage mais auraient pu être implémentées dans le matériel. Elles fournissent certaines des mêmes fonctionnalités que VFP mais ne sont pas compatibles avec lui en termes d'opcode . FPA10 fournit également une précision étendue , mais implémente l'arrondi correct (requis par IEEE 754) uniquement en simple précision.
VFPv1
Obsolète
VFPv2
Une extension facultative du jeu d'instructions ARM dans les architectures ARMv5TE, ARMv5TEJ et ARMv6. VFPv2 dispose de 16 registres FPU 64 bits.
VFPv3 ou VFPv3-D32
Implémenté sur la plupart des processeurs Cortex-A8 et A9 ARMv7. Il est rétrocompatible avec VFPv2, sauf qu'il ne peut pas intercepter les exceptions à virgule flottante. VFPv3 dispose de 32 registres FPU 64 bits en standard, ajoute des instructions VCVT pour convertir entre scalaire, float et double, ajoute le mode immédiat à VMOV de sorte que les constantes puissent être chargées dans les registres FPU.
VFPv3-D16
Comme ci-dessus, mais avec seulement 16 registres FPU 64 bits. Implémenté sur les processeurs Cortex-R4 et R5 et le Tegra 2 (Cortex-A9).
Implémenté sur les processeurs ARMv7 Cortex-A12 et A15, le Cortex-A7 dispose en option de VFPv4-D32 dans le cas d'un FPU avec Neon. VFPv4 dispose de 32 registres FPU 64 bits en standard, ajoute à la fois la prise en charge de la demi-précision comme format de stockage et des instructions de multiplication-accumulation fusionnées aux fonctionnalités de VFPv3.
VFPv4-D16
Comme ci-dessus, mais il ne dispose que de 16 registres FPU 64 bits. Implémenté sur les processeurs Cortex-A5 et A7 dans le cas d'un FPU sans Neon.
VFPv5-D16-M
Implémenté sur Cortex-M7 lorsque l'option de noyau à virgule flottante simple et double précision existe.
Dans Debian Linux et ses dérivés tels que Ubuntu et Linux Mint , armhf ( ARM hard float ) fait référence à l'architecture ARMv7, y compris l'extension matérielle à virgule flottante VFP3-D16 supplémentaire (et Thumb-2) ci-dessus. Les packages logiciels et les outils de compilation croisée utilisent les suffixes armhf et arm/armel pour les différencier.
SIMD avancé (Néon)
L' extension SIMD avancée (également connue sous le nom de Neon ou "MPE" Media Processing Engine) est un ensemble d'instructions SIMD combiné de 64 et 128 bits qui fournit une accélération standardisée pour les applications de traitement des médias et du signal. Neon est inclus dans tous les appareils Cortex-A8, mais est facultatif dans les appareils Cortex-A9. Neon peut exécuter le décodage audio MP3 sur des processeurs fonctionnant à 10 MHz et peut exécuter le codec vocal adaptatif multi-débit (AMR) GSM à 13 MHz. Il dispose d'un ensemble d'instructions complet, de fichiers de registre séparés et d'un matériel d'exécution indépendant. Neon prend en charge les données à virgule flottante en nombre entier de 8, 16, 32 et 64 bits et en simple précision (32 bits) et les opérations SIMD pour gérer le traitement audio et vidéo ainsi que le traitement graphique et de jeu. Dans Neon, le SIMD prend en charge jusqu'à 16 opérations en même temps. Le matériel Neon partage les mêmes registres à virgule flottante que ceux utilisés dans VFP. Les appareils tels que les ARM Cortex-A8 et Cortex-A9 prennent en charge les vecteurs 128 bits, mais s'exécutent avec 64 bits à la fois, tandis que les appareils Cortex-A15 plus récents peuvent exécuter 128 bits à la fois.
Une particularité de Neon dans les périphériques Armv7 est qu'il vide tous les nombres sous-normaux à zéro, et par conséquent le compilateur GCC ne l'utilisera pas à moins que -funsafe-math-optimizations, qui permet de perdre des nombres dénormaux, ne soit activé. Neon « amélioré » défini depuis Armv8 n'a pas cette particularité, mais à partir de GCC 8.2, le même indicateur est toujours requis pour activer les instructions Neon. D'un autre côté, GCC considère Neon comme sûr sur AArch64 pour Armv8.
ProjectNe10 est le premier projet open source d'ARM (depuis sa création ; alors qu'ils ont acquis un projet plus ancien, désormais nommé Mbed TLS ). La bibliothèque Ne10 est un ensemble de fonctions communes et utiles écrites à la fois en Neon et en C (pour la compatibilité). La bibliothèque a été créée pour permettre aux développeurs d'utiliser les optimisations de Neon sans apprendre Neon, mais elle sert également d'ensemble d'exemples de code intrinsèque et d'assemblage Neon hautement optimisés pour les routines courantes de DSP, d'arithmétique et de traitement d'images. Le code source est disponible sur GitHub.
Technologie ARM Helium
Helium est l'extension vectorielle M-Profile (MVE). Elle ajoute plus de 150 instructions scalaires et vectorielles.
Extensions de sécurité
TrustZone (pour le profil Cortex-A)
Les extensions de sécurité, commercialisées sous le nom de TrustZone Technology, sont disponibles dans les architectures de profil d'application ARMv6KZ et ultérieures. Elles offrent une alternative peu coûteuse à l'ajout d'un autre cœur de sécurité dédié à un SoC, en fournissant deux processeurs virtuels soutenus par un contrôle d'accès basé sur le matériel. Cela permet au cœur de l'application de basculer entre deux états, appelés mondes (pour réduire la confusion avec d'autres noms de domaines de capacité), afin d'empêcher la fuite d'informations du monde le plus fiable vers le monde le moins fiable. Ce changement de monde est généralement orthogonal à toutes les autres capacités du processeur, ainsi chaque monde peut fonctionner indépendamment de l'autre tout en utilisant le même cœur. La mémoire et les périphériques sont alors informés du monde de fonctionnement du cœur et peuvent l'utiliser pour fournir un contrôle d'accès aux secrets et au code sur l'appareil.
En règle générale, un système d'exploitation riche est exécuté dans le monde le moins fiable, avec un code de sécurité plus petit et spécialisé dans le monde le plus fiable, dans le but de réduire la surface d'attaque . Les applications typiques incluent la fonctionnalité DRM pour contrôler l'utilisation des médias sur les appareils basés sur ARM, et empêcher toute utilisation non approuvée de l'appareil.
En pratique, étant donné que les détails spécifiques de mise en œuvre des implémentations propriétaires de TrustZone n'ont pas été divulgués publiquement pour examen, on ne sait pas quel niveau d'assurance est fourni pour un modèle de menace donné , mais ils ne sont pas à l'abri des attaques.
Open Virtualization est une implémentation open source de l'architecture du monde de confiance pour TrustZone.
AMD a sous licence et intégré la technologie TrustZone dans sa technologie de processeur sécurisé . Les APU d'AMD incluent un processeur Cortex-A5 pour gérer le traitement sécurisé, qui est activé dans certains produits, mais pas dans tous. En fait, le cœur Cortex-A5 TrustZone avait été inclus dans les produits AMD antérieurs, mais n'avait pas été activé en raison de contraintes de temps.
Samsung Knox utilise TrustZone à des fins telles que la détection des modifications apportées au noyau, le stockage des certificats et l'attestation des clés.
TrustZone pour Armv8-M (pour le profil Cortex-M)
L'extension de sécurité, commercialisée sous le nom de TrustZone pour la technologie Armv8-M, a été introduite dans l'architecture Armv8-M. Bien qu'elle contienne des concepts similaires à TrustZone pour Armv8-A, elle présente une conception architecturale différente, car la commutation mondiale est effectuée à l'aide d'instructions de branchement au lieu d'utiliser des exceptions. Elle prend également en charge la gestion sécurisée des interruptions entrelacées à partir de l'un ou l'autre monde, quel que soit l'état de sécurité actuel. Ensemble, ces fonctionnalités fournissent des appels à faible latence vers le monde sécurisé et une gestion réactive des interruptions. ARM fournit une pile de référence de code mondial sécurisé sous la forme de Trusted Firmware for M et PSA Certified .
La Large Physical Address Extension (LPAE), qui étend la taille de l'adresse physique de 32 bits à 40 bits, a été ajoutée à l'architecture Armv7-A en 2011.
La taille de l'adresse physique peut être encore plus grande dans les processeurs basés sur l'architecture 64 bits (Armv8-A). Par exemple, elle est de 44 bits dans les Cortex-A75 et Cortex-A65AE.
Armv8-R et Armv8-M
Les architectures Armv8-R et Armv8-M , annoncées après l'architecture Armv8-A, partagent certaines caractéristiques avec Armv8-A. Cependant, Armv8-M n'inclut aucune instruction AArch64 64 bits, et Armv8-R n'incluait à l'origine aucune instruction AArch64 ; ces instructions ont été ajoutées à Armv8-R ultérieurement.
Armv8.1-M
L'architecture Armv8.1-M, annoncée en février 2019, est une amélioration de l'architecture Armv8-M. Elle apporte de nouvelles fonctionnalités, notamment :
Une nouvelle extension du jeu d'instructions vectorielles. L'extension vectorielle M-Profile (MVE), ou Helium, est destinée aux applications de traitement du signal et d'apprentissage automatique.
Améliorations supplémentaires de l'ensemble d'instructions pour les boucles et les branches (extension de branche à faible surcharge).
Amélioration du jeu d'instructions pour la gestion TrustZone pour l'unité à virgule flottante (FPU).
Nouvel attribut mémoire dans l'unité de protection mémoire (MPU).
Les améliorations apportées au débogage, notamment l'unité de surveillance des performances (PMU), l'extension de débogage sans privilèges et la prise en charge supplémentaire du débogage se concentrent sur les développements d'applications de traitement du signal.
Extension de fiabilité, de disponibilité et de facilité d'entretien (RAS).
Architecture 64/32 bits
Plateforme Armv8-A avec puce CPU Cortex A57/A53 MPCore big.LITTLE
Armv8
Armv8-A
Annoncé en octobre 2011, Armv8-A (souvent appelé ARMv8 alors que l'Armv8-R est également disponible) représente un changement fondamental de l'architecture ARM. Il prend en charge deux états d'exécution : un état 64 bits appelé AArch64 et un état 32 bits appelé AArch32 . Dans l'état AArch64, un nouveau jeu d'instructions A64 64 bits est pris en charge ; dans l'état AArch32, deux jeux d'instructions sont pris en charge : le jeu d'instructions 32 bits d'origine, appelé A32 , et le jeu d'instructions Thumb-2 32 bits, appelé T32 . AArch32 offre une compatibilité de l'espace utilisateur avec Armv7-A. L'état du processeur peut changer en cas de changement de niveau d'exception ; cela permet aux applications 32 bits d'être exécutées dans l'état AArch32 sous un système d'exploitation 64 bits dont le noyau s'exécute dans l'état AArch64, et permet à un système d'exploitation 32 bits de s'exécuter dans l'état AArch32 sous le contrôle d'un hyperviseur 64 bits exécuté dans l'état AArch64. ARM a annoncé ses cœurs Cortex-A53 et Cortex-A57 le 30 octobre 2012. Apple a été le premier à sortir un cœur compatible Armv8-A dans un produit grand public ( Apple A7 dans l'iPhone 5S ). AppliedMicro , en utilisant un FPGA , a été le premier à faire la démonstration d'Armv8-A. SoC Armv8-A de Samsung est l'Exynos 5433 utilisé dans le Galaxy Note 4 , qui dispose de deux clusters de quatre cœurs Cortex-A57 et Cortex-A53 dans une configuration big.LITTLE ; mais il ne fonctionnera qu'en mode AArch32.
Armv8-A ajoute à AArch32 et AArch64 les normes VFPv3/v4 et SIMD avancée (Neon). Il ajoute également des instructions de cryptographie prenant en charge AES , SHA-1 / SHA-256 et l'arithmétique des corps finis . AArch64 a été introduit dans Armv8-A et ses révisions ultérieures. AArch64 n'est pas inclus dans les architectures Armv8-R et Armv8-M 32 bits.
Un processeur ARMv8-A peut prendre en charge AArch32 et AArch64 ou les deux ; il peut prendre en charge AArch32 et AArch64 à des niveaux d'exception inférieurs et uniquement AArch64 à des niveaux d'exception supérieurs. Par exemple, l'ARM Cortex-A32 ne prend en charge que AArch32, l' ARM Cortex-A34 ne prend en charge que AArch64, et l' ARM Cortex-A72 prend en charge à la fois AArch64 et AArch32. Un processeur ARMv9-A doit prendre en charge AArch64 à tous les niveaux d'exception et peut prendre en charge AArch32 à EL0.
Armv8-R
Le support optionnel AArch64 a été ajouté au profil Armv8-R, le premier cœur ARM l'implémentant étant le Cortex-R82. Il ajoute le jeu d'instructions A64.
Armv9
Armv9-A
Annoncée en mars 2021, l'architecture mise à jour met l'accent sur l'exécution sécurisée et la compartimentation .
Système de bras prêt
Arm SystemReady, anciennement Arm ServerReady, est un programme de certification qui permet d'intégrer les systèmes d'exploitation et les hyperviseurs génériques prêts à l'emploi aux systèmes basés sur Arm, des serveurs de centres de données aux périphériques industriels et aux appareils IoT. Les principaux éléments constitutifs du programme sont les spécifications des exigences matérielles et micrologicielles minimales sur lesquelles les systèmes d'exploitation et les hyperviseurs peuvent s'appuyer. Ces spécifications sont les suivantes :
Architecture du système de base (BSA) et suppléments spécifiques au segment de marché (par exemple, supplément BSA du serveur)
Exigences de démarrage de base (BBR) et exigences de sécurité de démarrage de base (BBR)
Ces spécifications sont co-développées par Arm et ses partenaires au sein du Comité consultatif sur l'architecture système (SystemArchAC).
L'Architecture Compliance Suite (ACS) est l'outil de test qui permet de vérifier la conformité de ces spécifications. La spécification des exigences Arm SystemReady documente les exigences des certifications.
Ce programme a été présenté par Arm en 2020 lors du premier événement DevSummit . Son prédécesseur Arm ServerReady a été présenté en 2018 lors de l'événement Arm TechCon. Ce programme comprend actuellement quatre groupes :
SystemReady SR : cette bande est destinée aux serveurs et aux postes de travail qui prennent en charge les systèmes d'exploitation et les hyperviseurs qui attendent des interfaces UEFI , ACPI et SMBIOS . Windows, Red Hat Enterprise Linux et VMware ESXi-Arm nécessitent ces interfaces tandis que d'autres distributions Linux et BSD peuvent également les prendre en charge.
SystemReady LS (LinuxBoot System) : cette bande est destinée aux serveurs que les hyperscalers utilisent pour prendre en charge les systèmes d'exploitation Linux qui attendent le micrologiciel LinuxBoot ainsi que les interfaces ACPI et SMBIOS.
SystemReady ES (Embedded System) : cette bande est destinée aux périphériques industriels et IoT qui prennent en charge les systèmes d'exploitation et les hyperviseurs qui attendent des interfaces UEFI, ACPI et SMBIOS. Windows IoT Enterprise, Red Hat Enterprise Linux et VMware ESXi-Arm nécessitent ces interfaces tandis que d'autres distributions Linux et BSD peuvent également les prendre en charge.
SystemReady IR (IoT Ready) : cette bande est destinée aux périphériques industriels et IoT qui prennent en charge les systèmes d'exploitation qui attendent des interfaces UEFI et devicetree . Linux embarqué (par exemple, Yocto ) et certaines distributions Linux/BSD (par exemple, Fedora, Ubuntu, Debian et OpenSUSE) peuvent également prendre en charge.
Certifié PSA
PSA Certified , anciennement appelé Platform Security Architecture, est un cadre de sécurité et un système d'évaluation indépendants de l'architecture. Il est destiné à aider à sécuriser les appareils de l'Internet des objets (IoT) construits sur des processeurs SoC (System-on-a-Chip). Il a été introduit pour augmenter la sécurité lorsqu'un environnement d'exécution entièrement fiable est trop grand ou trop complexe.
L'architecture a été présentée par Arm en 2017 lors de l'événement annuel TechCon . Bien que le schéma soit indépendant de l'architecture, il a d'abord été implémenté sur des cœurs de processeur Arm Cortex-M destinés à être utilisés par des microcontrôleurs. PSA Certified comprend des modèles de menaces et des analyses de sécurité disponibles gratuitement qui démontrent le processus de décision sur les fonctionnalités de sécurité dans les produits IoT courants. Il fournit également des packages d'interface de programmation d'application (API) téléchargeables gratuitement, des spécifications architecturales, des implémentations de micrologiciels open source et des suites de tests associées.
Après le développement du cadre de sécurité de l'architecture en 2017, le système d'assurance certifié PSA a été lancé deux ans plus tard à Embedded World en 2019. PSA Certified propose un système d'évaluation de sécurité à plusieurs niveaux pour les fournisseurs de puces, les fournisseurs de systèmes d'exploitation et les fabricants d'appareils IoT. La présentation d'Embedded World a présenté aux fournisseurs de puces la certification de niveau 1. Un projet de protection de niveau 2 a été présenté en même temps. La certification de niveau 2 est devenue une norme utilisable en février 2020.
La certification a été créée par les parties prenantes conjointes de PSA pour permettre une approche de sécurité dès la conception pour un ensemble diversifié de produits IoT. Les spécifications certifiées PSA sont indépendantes de la mise en œuvre et de l'architecture, elles peuvent donc être appliquées à n'importe quelle puce, logiciel ou appareil. La certification élimine également la fragmentation du secteur pour les fabricants et développeurs de produits IoT .
Prise en charge du système d'exploitation
Systèmes d'exploitation 32 bits
Systèmes d'exploitation historiques
Le premier ordinateur personnel 32 bits basé sur ARM, l' Acorn Archimedes , était initialement destiné à exécuter un système d'exploitation ambitieux appelé ARX . Les machines étaient livrées avec RISC OS , qui a également été utilisé sur les systèmes ultérieurs basés sur ARM d'Acorn et d'autres fournisseurs. Certaines des premières machines Acorn étaient également capables d'exécuter un port Unix appelé RISC iX . (Il ne faut pas confondre ni l'un ni l'autre avec RISC/os , une variante contemporaine d'Unix pour l'architecture MIPS.)
Systèmes d'exploitation embarqués
L'architecture ARM 32 bits est prise en charge par un grand nombre de systèmes d'exploitation embarqués et temps réel , notamment :
En mars 2024, l'architecture ARM 32 bits était l'environnement matériel principal pour la plupart des systèmes d'exploitation d'appareils mobiles tels que les suivants, mais bon nombre de ces plates-formes telles qu'Android et Apple iOS ont évolué vers l'architecture ARM 64 bits :
La prise en charge d'Armv8-A a été intégrée à la version 3.7 du noyau Linux fin 2012. Armv8-A est pris en charge par un certain nombre de distributions Linux , telles que :
Windows - Windows 10 exécute des applications ARM 32 bits « x86 et 32 bits », ainsi que des applications de bureau ARM64 natives ; Windows 11 exécute des applications ARM64 natives et peut également exécuter des applications x86 et x86-64 via l'émulation. La prise en charge des applications ARM 64 bits dans le Microsoft Store est disponible depuis novembre 2018.
macOS prend en charge ARM depuis fin 2020 ; la première version à prendre en charge ARM est macOS Big Sur . Rosetta 2 ajoute la prise en charge des applications x86-64 , mais pas la virtualisation des plates-formes informatiques x86-64.
Portage vers les systèmes d'exploitation ARM 32 ou 64 bits
Les applications Windows recompilées pour ARM et liées à Winelib, à partir du projet Wine , peuvent fonctionner sur ARM 32 bits ou 64 bits sous Linux, FreeBSD ou d'autres systèmes d'exploitation compatibles. Les binaires x86, par exemple lorsqu'ils ne sont pas spécialement compilés pour ARM, ont été démontrés sur ARM en utilisant QEMU avec Wine (sur Linux et plus), mais ne fonctionnent pas à pleine vitesse ou avec la même capacité qu'avec Winelib.