SE203
2024-2025
ARM ne fabrique pas de processeurs mais conçoit des IPs.
Les clients de ARM sont les fabricants de circuits
En plus des cœurs de processeurs ARM fourni/contribue:
Plusieurs types de licences existent en fonction des besoins des clients:
Les cœurs historiques ne sont plus supposés être utilisés dans de nouveaux produits, mais on peut encore les rencontrer dans des équipements industriels.
Historiquement ARM ne concevait que des processeurs 32 bits. En 2011, avec l’architecture Armv8-A, ARM propose des cœurs 64 bits applicatifs. Vu les objectifs de ce cours, nous nous limiterons aux cœurs 32 bits.
Plusieurs fabricants:
En utilisant l’architecture ARM, ces fabricants de composant profitent d’un environnement logiciel commun et mature. Ils évitent ainsi de devoir développer et maintenir un cœur de processeur et des outils logiciels associés.
Leurs produits se différencient par les par les périphériques spécifiques ajoutés autour des cœurs et l’architecture des systèmes.
Regroupe dans le même circuit:
Processeur RISC 32 bits
16 registres
Architecture Load/Store
Comme les autres processeurs RISC, les processeurs ARM ont une architecture Load/Store. Les données sur lesquelles les calculs sont effectués doivent d’abord être copiées de la mémoire vers les registres internes.
Les instructions de calcul ne peuvent opérer que sur des sonnées déjà présentes dans les registres. Le résultat est aussi stocké dans un registre interne. Seul le contenu d’un registre peut être réécrit en mémoire.
Le plus petit élément adressable en mémoire et l’octet (8 bits).
Il faut avoir une convention d’adresse pour les 4 octets d’un l’accès à un mot de 32 bits (endianess).
Les ARM modernes sont souvent little-endian (octet de poids faible d’un mot de 32 bits est à l’adresse la plus basse).
La majorité des processeurs ARM “communs” sont little-endian.
Notez aussi qu’il y a une contrainte d’alignement et que les adresses des mots de 32 bits sont multiples de 4.
0xc
) et ainsi de
suite.Pour certains cœurs (historiques, Cortex-M ou R), il est possible d’avoir des modèles bigendian (pratique pour certaines applications réseau).
Pour certains cœurs (les Cortex-A), il existe des mécanismes pour intervertir l’ordre des octets durant les accès mémoire.
l’ARM7 a été produit entre 1993 et 2001 (source wikipedia).
Premier processeur ARM utilisé dans des téléphones portables
Très proche des processus ARM modernes
Ce processeur a une architecture moderne, tout en étant suffisamment simple et documentée pour présenter le fonctionnement des processeurs ARM.
Aussi, elle permettra de mieux saisir la notion d’Architecture telle qu’utilisée par ARM.
Architecture Von Neuman
16 registres
Barrel Shifter en plus de l’ALU
Interface de debug standard
Le banc de registres est composé de 16 registres (r0
à
r15
). Le registre pointant vers l’instruction à récupérer
en mémoire est le registre r15
. Il est appelé
PC
pour Program Counter.
Le banc de registres possède une entrée et deux sorties. Ceci implique qu’à un moment donné, on peut:
Les sorties du banc de registres vont vers l’ALU (Arithmetic and Logic Unit). Une des entrées passe par un Barrel Shifter ce qui permet d’appliquer des décalages et rotations sur une des entrées de l’ALU.
La mémoire est connectée au processeur par un bus avec:
Comme le bus est partagé pour les instructions et les données, en interne, il est relié au:
De plus, ce cœur de processeur inclu une interface de debug standard (Embeded ICE) permettant la prise de contrôle du flot d’exécution par un développeur logiciel.
Les instructions sont exécutées en 3 cycles d’horloge.
Pour permettre d’augmenter la fréquence de fonctionnement, chaque instruction est découpée en 3 étapes.
Comme les ressources nécessaires à ces 3 étapes sont différentes, on peut les utiliser en parallèle pour des instructions différentes.
Ceci s’appelle le Pipeline et permet, théoriquement, d’exécuter une instruction à chaque cycle.
En régime permanent, nous avons l’exécution d’une instruction par cycle (IPC).
Que se passe-t-il quand on lit ou écrit des données en mémoire?
Le pipline est figé (stall) et attente de la fin de l’accès aux données.
Comme l’ARM7 ne possède qu’une seule interface pour accéder aux données et aux instructions, en cas de lecture ou d’écriture, on ne peut pas lire une nouvelle instruction.
Le nombre d’instructions par cycle IPC va donc baisser.
D’autres instructions peuvent produire des ruptures de pipeline, par exemple les sauts dans les programmes qui nécessitent d’abandonner les instructions en cours puisque qu’on va reprendre l’exécution ailleurs dans le code.
Pour cet exemple, on suppose que le programme (la suite
d’instructions) commence à l’adresse 0x20000000
.
La première étape consiste donc à récupérer cette instruction. On
présente donc l’adresse de la première instruction (ici
ldr
) Cette adresse est contenue dans un registre interne du
processeur le compteur programme ou PC
.
L’instruction ldr r0,[r8,0x10]
demande à lire ce qui se
trouve à l’adresse r8+16
dans le registre
r0
.
Notez qu’en même temps le compteur programme est incrémenté pour préparer la suite.
Pour les processeurs ARM, les adresses des instructions doivent être alignées. C’est-à-dire multiples de la taille de l’instruction en octet (ici 4).
Durant ce cycle, l’adresse de la seconde instruction est présentée. La première instruction est en phase de décodage. On identifie que:
r8
.L’adresse de la 3 instruction est présentée. En même temps la deuxième instruction est décodée.
L’exécution de la 1e instruction commence. Comme c’est une lecture en mémoire, on doit d’abord calculer l’adresse. Dans un processeur ARM7, ce calcul utilise l’ALU qui.
Ici, l’adresse est calculée à partir de la valeur du registre
r8
et de la valeur 16
qui a été récupérée à
partir de l’instruction dans la phase précédente (on parle de valeur
immédiate).
Le pipeline est mis en pause (stall) mettant en attente l’exécution des autres instructions.
L’adresse calculée (ici 0x10000010
) est présentée sur le
bus pour lire la donnée en mémoire.
La donnée sera récupérée à la fin du cycle.
La donnée est écrite dans le registre r0
.
Finalement, l’exécution des instructions suivantes peut reprendre.
Ici, l’instruction add r1,r0,r4, lsl #2
calcul la somme
entre le contenu de r0
et r4
décalé à gauche
de 2 positions.
Le T
du ARM7TDMI veut dire qu’il supporte le mode
Thumb.
PC
avance de 2 en 2La réduction de la taille du programme est possible car les instructions les plus communes (celles qu’on rencontre souvent dans un programme) sont favorisées et ont un encodage 16 bits dédié.
Pour les autres, elles doivent être décomposées en une série d’instructions 16 bits.
Pour les architectures modernes, le mode Thumb-2 a été développé.
La figure est tirée de White Paper: An Introduction to the ARM Cortex-M3 Processor. Elle représente les performances et tailles relatives pour le programme de test Dhrystone sur un Cortex-M3. Le document date d’octobre 2006.
Dans les documentations récentes d’ARM ainsi que les outils associés (compilateurs, assembleur…) seul le terme Thumb est utilisé bien que l’encodage puisse être différent en fonction du processeur cible.
Plus sur les détails de l’architecture de l’ARM9TDMI sur le site de référence d’ARM.
ARM7TDMI vs ARM9TDMI
Learn the architecture - Introducing the Arm architecture (sur le site d’ARM).
Notez aussi l’existence de:
Le document suivant donne, de façon synthétique, une description des Cortex-M:
Notez qu’il existe une nouvelle famille de Cortex-M (ARMv8-M) avec des fonctions supplémentaires liées à la sécurité.
Des périphériques autour du cœur du processeur.
Un Système sur puce (SOC pour System On Chip)
Pour les Cortex-M, les plages d’adresses attribuées aux périphériques sont standardisées. Par exemple, le code qui sera exécuté au démarrage est toujours à l’adresse 0.
Aussi, certains éléments du cœur (le contrôleur d’interruption par exemple), sont mappés en mémoire et ont une adresse standard (PPB pour Private Peripheral Bus).
Pour la construction de ces systèmes, ARM a imposé des protocoles de bus. Les cœurs utilisent le protocole AMBA (Advanced Microcontroller Bus Architecture) et sur les microcontrôleurs, on retrouve souvent des modules utilisant les protocoles:
Plus d’informations sur le protocole AMBA sur le site de référence.
Le STM32-L475
est un microcontrôleur avec:
C’est le microcontrôleur que nous utiliseront en TD.
© Copyright 2023, Tarik Graba, Télécom Paris. | |
Le contenu de cette page est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International . |