Beruflich Dokumente
Kultur Dokumente
http://mspgcc.sourceforge.net/
■ 28 Instructions sur 16 bits R2/SR/CG1 Status Reg
Outils GNU pour la compilation ■ Notamment la doc mspgcc (download puis documentation)
Processeurs embarqués
.....
Pile d’exécution Pile d’exécution
■ 16 registres 16 bits (r0-r16)
tanguy.risset@insa-lyon.fr ■ David Patterson , John Hennessy Computer Organization ◆ r0: PC (Program counter)
R14 General Purpose
Lab CITI, INSA de Lyon and Design: the hardware software interface ◆ r1: SP (Stack pointeur)
Morgan-Kaufmann, 1998. ◆ r2: SR (status register) Z
dest src
C
■ Wayne Wolf Computers as Components: Principles of ◆ r3: constante 0 V
N
16 bit ALU
Pile d’exécution
16
Pile d’exécution ■ ports séries
Data Bus 8
Conv
l’embarqué: GCC
◆ Écriture à l’adresse 0x130, positionne le premier l’embarqué: GCC ■ Sur le MSP430F449: 0xFFE0
l’embarqué: GCC
msp430−gcc msp430−gdb−insight msp430−gcc msp430−gdb−insight
wsim
Pile d’exécution
opérande (unsigned mult) Pile d’exécution ◆ 0x0 à 0x1FF: 0xFFDF Pile d’exécution
Word/Byte
}
Contradiction ? Variété des processeurs embarqués
introduction au MSP 430 introduction au MSP 430 ■ Alors d’ou vient la position d’Intel (16% du marché des introduction au MSP 430
Processeurs embarqués
● Processeurs embarqués
Processeurs embarqués
● Processeurs embarqués
semi-conducteurs) ? Processeurs embarqués
● Processeurs embarqués
● Éconnomie
● ISA
● Éconnomie
● ISA
■ processeurs: 2% du silicium, 30% des revenus ● Éconnomie
● ISA
● Pipeline ● Pipeline ● Pipeline
● Classification
● Charactéristiques Processeurs embarqués ● Classification
● Charactéristiques
● Classification
● Charactéristiques
Outils GNU pour la compilation Outils GNU pour la compilation Outils GNU pour la compilation
introduction au MSP 430 ■ Quel est le le microprocesseur le plus vendu ? introduction au MSP 430 ■ 3 milliards de processeurs 8 bits vendus par an (8051, 6805 introduction au MSP 430 ■ La mémoire contient les données et les instructions
Processeurs embarqués ◆ Réponse classique: "Le Pentium: 92% du marché" Processeurs embarqués
etc.) Processeurs embarqués
● Processeurs embarqués ● Processeurs embarqués ● Processeurs embarqués
■ L’unité centrale (CPU) charge les instructions depuis la
● Éconnomie
● ISA
■ Faux!...... ● Éconnomie
● ISA
■ 32 bits (Pentium, Athlon, mais aussi PowerPC, 68000, MIPS, ● Éconnomie
● ISA
mémoire.
● Pipeline ◆ En fait les Pentium ne représentent que 2% des ● Pipeline
ARM etc.) ● Pipeline
● Classification ● Classification ● Classification
■ Un ensemble de registres aide le CPU:
● Charactéristiques microprocesseurs vendus dans le monde. ● Charactéristiques
■ La plupart (98%) sont embarqués (3 fois plus d’ARM vendus ● Charactéristiques
◆ Compteur d’instructions (Program counter: PC),
Outils GNU pour la compilation Outils GNU pour la compilation
que de Pentium) Outils GNU pour la compilation
◆ Registre d’instruction (Instruction register: IR)
Un compilateur pour Un compilateur pour Un compilateur pour
l’embarqué: GCC l’embarqué: GCC l’embarqué: GCC
◆ Pointeur de pile (stack pointer: SP)
Memory Proc
introduction au MSP 430 ■ Données et instructions dans des mémoires séparées introduction au MSP 430 ■ Une instruction peut designer plusieurs opérations introduction au MSP 430 ■ Petites instructions simples, toutes de même taille, ayant
Processeurs embarqués
● Processeurs embarqués
■ Autorise deux accès simultanés à la mémoire. Processeurs embarqués
● Processeurs embarqués
élémentaires. Processeurs embarqués
● Processeurs embarqués
toutes (presque) le même temps d’exécution
● Éconnomie ● Éconnomie Ex: un load, une opération arithmétique et un store, ● Éconnomie
■ Pas d’instruction complexe
● ISA ■ Utilisé pour la plupart des DSP ● ISA ● ISA
● Pipeline
◆ meilleure bande passante
● Pipeline Ex: calculer une interpolation linéaire de plusieurs ● Pipeline
● Classification ● Classification ● Classification
■ Accélération en pipelinant l’exécution (entre 3 et 7 étages de
● Charactéristiques
◆ Performances plus prédictibles ● Charactéristiques valeurs en mémoire. ● Charactéristiques
pipeline pour une instruction) ⇒ augmentation de la vitesse
Outils GNU pour la compilation Outils GNU pour la compilation ■ Accélération par des mécanismes matériels complexes Outils GNU pour la compilation
d’horloge
Un compilateur pour
Instruction Proc Un compilateur pour Un compilateur pour
l’embarqué: GCC l’embarqué: GCC
■ Grandes variations de taille et de temps d’exécution pour les l’embarqué: GCC ■ Code plus simple à générer, mais moins compact
Memory
instructions
Pile d’exécution Pile d’exécution Pile d’exécution
■ Tous les microprocesseurs modernes utilisent ce paradigme:
Data
■ Résulte en un code compact mais complexe à générer. SPARC, MIPS, ARM, PowerPC, etc.
Memory ■ Vax, Motorola 68000, Intel x86/Pentium
Le jeu d’instruction Exemple: instructions de l’ISA du Pentium Exemple: instructions de l’ISA du MSP
introduction au MSP 430 ■ Le jeu d’instruction (Instruction Set Architecture: ISA) a une introduction au MSP 430 JE EIP + displacement
4 4 8
introduction au MSP 430 1 operand instruction
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Processeurs embarqués
● Processeurs embarqués
importance capitale Processeurs embarqués
● Processeurs embarqués
JE Condition Displacement
Processeurs embarqués
● Processeurs embarqués
0 0 0 1 0 0 opcode B/W Ad Dest reg.
● Éconnomie ◆ Il détermine les instructions élémentaires exécutées par le ● Éconnomie ● Éconnomie
● ISA ● ISA Call ● ISA
● Pipeline CPU. ● Pipeline 8 32 ● Pipeline
● Classification ● Classification ● Classification relative Jumps
● Charactéristiques ◆ C’est un équilibre entre la complexité matérielle du CPU ● Charactéristiques
CALL Offset
● Charactéristiques 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Outils GNU pour la compilation et la facilité d’exprimer les actions requises Outils GNU pour la compilation Mov $EBX, [EDI+displacement] Outils GNU pour la compilation
0 0 1 condition PC offset (10 bits)
Un compilateur pour ◆ On le représente de manière symbolique (ex: MSP, code Un compilateur pour
6 1 1 8 8
Un compilateur pour
l’embarqué: GCC l’embarqué: GCC MOV d w r−m postbyte Displacement l’embarqué: GCC
sur 16 bits): 2 operands instruction
Pile d’exécution Pile d’exécution Pile d’exécution
mov r5,@r8 ; commentaire [R8]<-R5 Push ESI 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
5 3
lab: ADD r4,r5 ; R5<-R5+R4 PUSH Reg opcode Dest reg. Ad B/W As Dest reg.
■ JNE -56
Test $EDX, Immediate
7 1 8 32 ■ ADD.W R4,R4
TEST w PostByte Immediate
introduction au MSP 430 ■ L’unité de contrôle configure le chemin de donnée suivant introduction au MSP 430 ■ Physiquement, l’architecture du processeur est organisée en introduction au MSP 430 ■ Avant le début de l’exécution de l’instruction à l’adresse 100
Processeurs embarqués
● Processeurs embarqués
l’instruction à exécuter. Processeurs embarqués
● Processeurs embarqués
calculs combinatoires pour chaque étape de pipeline, Processeurs embarqués
● Processeurs embarqués
Processor
● Éconnomie
■ L’exécution d’une instruction est décomposée en plusieurs ● Éconnomie séparés par des registres. ● Éconnomie
Datapath
● ISA ● ISA ● ISA
● Pipeline
● Classification
phases d’un cycle. ● Pipeline
● Classification
● Pipeline
● Classification Control unit
ALU
PC IR
Memory
100 la R0,500 500 10
Memory 104 add R1,R0,1
108 sw R1,500
introduction au MSP 430 ■ Le pipeline dépend de l’architecture, pour le MIPS: introduction au MSP 430 ■ Lorsque l’instruction suivante ne peut pas être exécutée tout introduction au MSP 430 ■ Chargement de l’instruction
Processeurs embarqués ◆ Instruction Fetch (IF, Fetch): Processeurs embarqués
de suite, cela crée une "bulle". Processeurs embarqués
● Processeurs embarqués ● Processeurs embarqués ● Processeurs embarqués
charge l’instruction dans l’IR Processor Datapath
● Éconnomie
● ISA
● Éconnomie
● ISA
■ Par exemple une addition utilisant un registre qui vient d’être ● Éconnomie
● ISA
◆ Instruction Decode (ID, Decode):
● Pipeline
● Classification
● Pipeline
● Classification
chargé doit être retardé d’un cycle. ● Pipeline
● Classification
ALU
● Charactéristiques décode l’instruction et met en place le contrôle du chemin ● Charactéristiques ● Charactéristiques
Control unit
control/Status
Outils GNU pour la compilation de donnée Outils GNU pour la compilation Outils GNU pour la compilation R0 Register File R1
IR
Un compilateur pour ◆ Execute (Ex): exécute le calcul dans le chemin de Un compilateur pour Un compilateur pour
PC
l’embarqué: GCC l’embarqué: GCC l’embarqué: GCC 100 la R0,500 R2 R3
donnée.
Pile d’exécution Pile d’exécution Pile d’exécution
◆ Memory access (Mem): accède la mémoire
◆ Write Back (WB): écrit dans le banc de registre
Memory
100 la R0,500 500 10
104 add R1,R0,1
108 sw R1,500
introduction au MSP 430 ■ Décodage de l’instruction introduction au MSP 430 ■ Accès mémoire introduction au MSP 430 ■ Exécution non pipelinée:
Processeurs embarqués Processeurs embarqués Processeurs embarqués ◆ 5 cycles pour exécuter une instruction
● Processeurs embarqués ● Processeurs embarqués ● Processeurs embarqués
Processor Processor
● Éconnomie Datapath ● Éconnomie
Datapath ● Éconnomie ◆ ⇒ 15 cycles pour 3 instructions.
● ISA ● ISA ● ISA
● Pipeline ● Pipeline ALU ● Pipeline
ALU
● Classification ● Classification Control unit ● Classification
Control unit
● Charactéristiques ● Charactéristiques control/Status ● Charactéristiques
control/Status
R0 Register File R1 R0 Register File R1
Outils GNU pour la compilation Outils GNU pour la compilation Outils GNU pour la compilation
IR PC IR
PC
Un compilateur pour Un compilateur pour Un compilateur pour
l’embarqué: GCC 100 la R0,500 R2 R3 l’embarqué: GCC 100 la R0,500 R2 R3 l’embarqué: GCC
Memory Memory
500 100 la R0,500 500 10
100 la R0,500 10
104 add R1,R0,1 104 add R1,R0,1
introduction au MSP 430 ■ Exécution (rien pour load) introduction au MSP 430 ■ Write Back introduction au MSP 430 ■ Chargement de l’instruction load
Processeurs embarqués Processeurs embarqués Processeurs embarqués
● Processeurs embarqués ● Processeurs embarqués Processor ● Processeurs embarqués
● Éconnomie
Processor Datapath ● Éconnomie
Datapath ● Éconnomie
Processor Datapath
● ISA ● ISA ● ISA
● Pipeline ● Pipeline ALU ● Pipeline
ALU ALU
● Classification ● Classification Control unit ● Classification
Control unit Control unit
● Charactéristiques ● Charactéristiques control/Status ● Charactéristiques
control/Status control/Status
R0 Register File R1 R0 Register File R1 R0 Register File R1
Outils GNU pour la compilation Outils GNU pour la compilation Outils GNU pour la compilation
IR PC IR IR
PC 10 PC
Un compilateur pour Un compilateur pour Un compilateur pour
l’embarqué: GCC 100 la R0,500 R2 R3 l’embarqué: GCC 100 la R0,500 R2 R3 l’embarqué: GCC 100 la R0,500 R2 R3
Pile d’exécution Pile d’exécution Pile d’exécution
introduction au MSP 430 ■ Décodage de l’instruction load introduction au MSP 430 ■ Accès mémoire de l’instruction load introduction au MSP 430 ■ Write Back de rien
Processeurs embarqués Processeurs embarqués Processeurs embarqués
● Processeurs embarqués
■ et Chargement de Rien (bulle car l’instruction suivante ● Processeurs embarqués
■ Exécution de rien ● Processeurs embarqués
■ Accès mémoire de l’instruction add (rien)
● Éconnomie
● ISA
retardée) ● Éconnomie
● ISA ■ Décodage de l’instruction add
● Éconnomie
● ISA ■ Exécution de l’instruction store (rien)
● Pipeline ● Pipeline ● Pipeline
● Classification
Processor
● Classification ■ Chargement de l’instruction store ● Classification
● Charactéristiques Datapath ● Charactéristiques ● Charactéristiques Processor Datapath
Outils GNU pour la compilation Outils GNU pour la compilation Outils GNU pour la compilation
ALU Processor Datapath ALU
Un compilateur pour Control unit load Un compilateur pour Un compilateur pour add
add Control unit
l’embarqué: GCC control/Status l’embarqué: GCC l’embarqué: GCC
control/Status
ALU
R0 Register File R1 R0 Register File R1
Pile d’exécution Pile d’exécution Control unit Pile d’exécution
PC IR add IR
control/Status PC 10
R0 Register File R1
104 R2 R3 120 R2 R3
PC IR
108 sw R1,500 R2 R3
sw
108 sw R1,500
- p. 37/207 - p. 39/207 - p. 41/207
introduction au MSP 430 ■ Exécution de l’instruction load (rien) introduction au MSP 430 ■ Write Back de l’instruction load introduction au MSP 430 ■ Write Back de l’instruction add
Processeurs embarqués Processeurs embarqués Processeurs embarqués
● Processeurs embarqués
■ Décodage de rien ● Processeurs embarqués
■ Accès mémoire de rien ● Processeurs embarqués
■ Accès mémoire de l’instruction store (bypass)
● Éconnomie ● Éconnomie ● Éconnomie
● ISA ■ Chargement de l’instruction add ● ISA ■ Exécution de l’instruction add (bypass) ● ISA
● Pipeline ● Pipeline ● Pipeline Processor Datapath
● Classification ● Classification ■ Décodage de l’instruction store ● Classification
● Charactéristiques Processor Datapath
● Charactéristiques ● Charactéristiques
ALU
Control unit add
Outils GNU pour la compilation Outils GNU pour la compilation Outils GNU pour la compilation
Processor Datapath control/Status
ALU
Un compilateur pour
Control unit Un compilateur pour sw Un compilateur pour R0 Register File R1
l’embarqué: GCC l’embarqué: GCC l’embarqué: GCC IR
control/Status ALU PC 11
10
Pile d’exécution
R0 Register File R1 Pile d’exécution Control unit Pile d’exécution
IR control/Status load 124 R2 R3
PC 10
R0 Register File R1
104 add R1,R0,1 R2 R3
PC IR
10
116 R2 R3 sw
Memory
100 la R0,500 500 11
Memory 104 add R1,R0,1
100 la R0,500 500 10
Memory 108 sw R1,500
104 add R1,R0,1
100 la R0,500 500 10
108 sw R1,500
104 add R1,R0,1
108 sw R1,500
- p. 38/207 - p. 40/207 - p. 42/207
Bilan architecture non pipelinée Parallélisme au sein du processeur Principe du Cache
de ces delai slots: une ou deux instructions après le 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 22
23 N−1
branchement sont exécutées, que le branchement soit
Mémoire principale (DRAM)
pris ou pas (comme si elles étaint écrites avant le * * * *
branchement). +
32 bits
Processeurs embarqués ■ Super Scalaire Processeurs embarqués ◆ Mémoires statiques (SRAM): petites, rapides, Processeurs embarqués Processeur Processeur
● Processeurs embarqués ● Processeurs embarqués ● Processeurs embarqués /DSP /DSP
● Éconnomie ◆ Duplication des unités, ● Éconnomie consommatrices, peu denses (chères). ● Éconnomie
ASIC / ASIP
● ISA ● ISA ● ISA D: cache de données
● Pipeline ◆ Répartition au vol des instructions sur les unités ● Pipeline ◆ Mémoires dynamiques (DRAM): grandes, lentes, très ● Pipeline I: cache d’instructions
D I D I
● Classification ● Classification ● Classification
● Charactéristiques disponibles (re-ordonnancement des instructions: out of ● Charactéristiques denses, transactions chères ● Charactéristiques
Outils GNU pour la compilation order execution) Outils GNU pour la compilation ■ De plus en plus de place On-Chip pour la mémoire (dans ce Outils GNU pour la compilation
introduction au MSP 430 ■ Beaucoup de Processeurs à usage général ayant une ou introduction au MSP 430 ■ SPARC introduction au MSP 430 ■ Plus de 100 processeurs embarqués 32 bits sur le marché
Processeurs embarqués
● Processeurs embarqués
deux générations Processeurs embarqués
● Processeurs embarqués
◆ Un des premier RISC à avoir été embarqué (pratiquement Processeurs embarqués
● Processeurs embarqués
■ Les constructeurs de FPGA proposent des soft-processeurs
● Éconnomie
■ 4, 8, 16 ou 32 bits (taille des mots) ● Éconnomie plus aujourd’hui) ● Éconnomie
pour configurer les FPGA: Nios (Altera), MicroBlaze (Xilinx)
● ISA ● ISA ● ISA
● Pipeline ● Pipeline ◆ SPARC est une architecture brevetée (soft core, ● Pipeline
● Classification
■ RISC et CISC ● Classification ● Classification
■ Certain processeurs RISC (Crusoe de Transmetta) peuvent
● Charactéristiques ● Charactéristiques Intellectuel Property: IP), plusieurs compagnies fabriquent ● Charactéristiques
■ DSP: Digital Signal Processor exécuter du code CISC (Intel)
Outils GNU pour la compilation Outils GNU pour la compilation des SPARC Outils GNU pour la compilation
◆ Principe: recompilation du code à l’exécution (runtime
Un compilateur pour
■ ASIP: Application Specific Integrated Processor Un compilateur pour ■ 29000 (AMD) Un compilateur pour
l’embarqué: GCC l’embarqué: GCC l’embarqué: GCC compilation)
◆ Le 29000 a eu beaucoup de succès (imprimante laser ◆ Gain obtenus par un mécanisme de cache, d’optimisation
Pile d’exécution Pile d’exécution Pile d’exécution
Apple) grâce à ces 192 registres poussée des portion de code répétées (boucle), et grâce
◆ AMD a arrêté la production car le développement des
au parallélisme de niveau instruction
outils coûtait trop cher. ◆ Réduction drastique de la consommation pour des
■ i960 (intel) performances équivalentes
◆ Le i960 a été le plus vendu des processeurs embarqués
au milieu des années 90 (router réseau et HP Laserjet).
introduction au MSP 430 ■ Famille des Motorola 68000 introduction au MSP 430 ■ MIPS (microprocessor without interlocked pipeline stages) introduction au MSP 430 ■ Utilisé pour le contrôle embarqué
Processeurs embarqués ◆ Un des plus vieux processeur embarqué (ex Sun, Mac) Processeurs embarqués ◆ Originellement pour les stations puissantes (SGI) Processeurs embarqués ◆ Censeur, contrôleurs simples
● Processeurs embarqués ● Processeurs embarqués ● Processeurs embarqués
● Éconnomie ◆ Architecture CISC ● Éconnomie ◆ Puis, marché des consoles de jeux (Nitendo N64) ● Éconnomie ◆ Manipule des événements, quelques données mais en
● ISA ● ISA ● ISA
● Pipeline ◆ ISA propre et les meilleurs outils de développement, ● Pipeline ◆ Famille très étendue: du plus gros (MIPS 20Kc, 64 bit) au ● Pipeline faible quantité
● Classification ● Classification ● Classification
● Charactéristiques beaucoup d’utilisateurs ● Charactéristiques plus petit (SmartMIPS, 32 bit pour carte à puce) ● Charactéristiques ◆ Exemple: camescope, disque dur, appareil photo
Outils GNU pour la compilation ■ Famille des x86 Outils GNU pour la compilation ■ ARM (Advanced RISC Machines, ex Acorn) Outils GNU pour la compilation numérique, machine à laver, four à micro-onde
Un compilateur pour ◆ Démarre au 8086 (Intel) puis 80286, 386, 486, Pentium, et Un compilateur pour ◆ Un des 32 bits embarqués les plus populaires : Un compilateur pour ■ Quelques caractéristiques fréquentes
l’embarqué: GCC l’embarqué: GCC l’embarqué: GCC
Pile d’exécution
Athlon (AMD) Pile d’exécution
téléphones portables Pile d’exécution
◆ Périphériques présents sur le circuit (timer, convertisseur
◆ En processeurs embarqués: 5 fois moins que MIPS, ARM ◆ Faible consommation analogique numérique, interface de communication),
ou 68000. ◆ Le successeur: StrongArm est commercialisé par Intel accessible directement grâce aux registres
◆ architecture CISC, compatible avec le code du 8086 sous le nom de XScale ◆ Programme et données intégrées au circuit
◆ compatibilité mais mauvaises performances ◆ Accès direct du programmeur à de nombreuses broches
■ SuperH (ou SH: Hitachi) Utilisé dans les stations Sega et les
PDA du circuit
◆ Instructions spécialisées pour les manipulation de bits.
■ PowerPC autant utilisé en embarqué qu’en ordinateur
■ Le MSP430 appartient à cette catégorie
introduction au MSP 430 ■ Utilisés pour les applications de traitement du signal introduction au MSP 430 ■ Manipulations au niveau bit: introduction au MSP 430 ■ Gestion spécifique du cache
Processeurs embarqués ◆ Grande quantités de données numérisées, souvent Processeurs embarqués ◆ Utilisé pour les algorithmes de cryptage mais surtout pour Processeurs embarqués ◆ Les caches améliorent les performances mais introduisent
● Processeurs embarqués ● Processeurs embarqués ● Processeurs embarqués
● Éconnomie organisées en flux ● Éconnomie les pilotes de périphériques. ● Éconnomie du non-déterminisme.
● ISA ● ISA ● ISA
● Pipeline ◆ Filtre numérique sur téléphone, TV numérique, ● Pipeline ◆ La plupart des périphériques indiquent leur état au ● Pipeline ◆ Les contraintes spécifiques des systèmes embarqués ont
● Classification ● Classification ● Classification
● Charactéristiques synthétiseur de sons ● Charactéristiques processeur en mettant un certain bit à 1 dans un certain ● Charactéristiques entraîné des mécanismes particuliers pour les cache
Outils GNU pour la compilation ■ Relativement proche des GPP, mais quelques Outils GNU pour la compilation registre. Outils GNU pour la compilation
◆ On peut vouloir bloquer le cache (cache locking): forcer
◆ Un processeur standard doit rapatrier le mot de 32 bit, certaines données ou instruction à se charger et rester
Un compilateur pour
l’embarqué: GCC
caractéristiques en plus: Un compilateur pour
l’embarqué: GCC
Un compilateur pour
l’embarqué: GCC
◆ Bande passante élevée (deux bus) masquer et tester à 0 dans le cache (on parle aussi de mémoire scratch-pad
Pile d’exécution Pile d’exécution Pile d’exécution
◆ Instructions dédiées pour les calculs de traitement du ◆ Les instructions BIC, BIT et BIS du MSP430 font des memory ou de software controlled cache).
signal: multiplication accumulation, manipulation au niveau bit dans la mémoire ◆ La plupart des caches utilisent une politique de
◆ Arithmétique spécifique (mode d’arrondi) Write-Back: une donnée modifiée dans le cache n’est pas
◆ Registres dédiés pour certains opérateurs. forcément immédiatement recopiée en memoire. Dans le
◆ Constructeurs: Texas Instrument, puis Analog Devices, cas de périphériques mappés en mémoire, il est
Motorola indispensable de recopier immédiatement (politique
write-through)
Quelques mécanismes matériels utiles Quelques mécanismes matériels utiles Quelques mots sur la consommation
introduction au MSP 430 ■ Densité de code: introduction au MSP 430 ■ Données non-alignés introduction au MSP 430 ■ Trois composantes de la consommation d’une porte logique
Processeurs embarqués
● Processeurs embarqués
◆ La taille du code est importante pour les codes Processeurs embarqués
● Processeurs embarqués
◆ De nombreux traitements manipulent des données de Processeurs embarqués
● Processeurs embarqués
(inverseur)
● Éconnomie embarqués car elle influe sur la taille de la mémoire ● Éconnomie taille non-multiple de 32 (paquets TCP/IP, video streams, ● Éconnomie ◆ Consommation dynamique : Pdyn = C.V 2
● ISA ● ISA ● ISA
CC
● Pipeline utilisée ● Pipeline clés d’encryption, 20 bits, 56 bits) ● Pipeline (C capacité de la porte)
● Classification ● Classification ● Classification
● Charactéristiques ◆ Un programme C compilé pour SPARC prendra deux fois ● Charactéristiques ◆ Les processeurs RISC savent uniquement transférer des ● Charactéristiques
◆ Consommation statique : Pstatic = VCC .Ileak
Outils GNU pour la compilation plus de place en mémoire que le même programme Outils GNU pour la compilation mots (32 bits) alignés (calés sur une adresse multiple de Outils GNU pour la compilation (VCC : tension d’alimentation, Ileak intensité des
Un compilateur pour compilé pour le 68030. Un compilateur pour 32 bits). Un compilateur pour courants de fuite)
◆ Consommation de court-circuit Pcs = K.τ.(VCC − 2VT h )3 .
l’embarqué: GCC l’embarqué: GCC l’embarqué: GCC
◆ En général les code RISC sont deux fois moins dense que ◆ La plupart des architectures CISC (68k, x86) peuvent faire
Pile d’exécution Pile d’exécution Pile d’exécution
les codes CISC (ex: instruction TBLS du 68300: table des chargements non alignés (K:constante technologique ; VT h :tension seuil ;
lookup and interpolate) τ :temps de montée descente du signal)
◆ Les options de compilation doivent être utilisées avec ■ Aujourd’hui (2004) Pdyn ≫ Pstatic ≫ Pcs
précaution. ■ Demain (2007) Pdyn ≈ Pstatic ≫ Pcs
◆ Le code est quelquefois stocké compressé et
decompressé au vol par du matériel spécifique.
introduction au MSP 430 ■ Généralisation naïve en prenant en compte une activité introduction au MSP 430 ■ Gestion dynamique de la fréquence d’horloge introduction au MSP 430
Processeurs embarqués
● Processeurs embarqués
moyenne α (nombre moyen de portes commutant) Processeurs embarqués
● Processeurs embarqués
■ Exemple: processeur Crusoe (Transmetta) Processeurs embarqués
Pile d’exécution
■ Cette modélisation est très imprécise pour un circuit dont le Pile d’exécution
comportement n’est pas stationnaire (ex: processeur)
Réduction statique de la consommation Low Power Mode pour le MSP430 Le projet GNU
introduction au MSP 430 ■ Le facteur le plus important est la tension d’alimentation introduction au MSP 430 ■ Différent mode pour réduire la consommation introduction au MSP 430 ■ Le projet GNU, initié par Richard Stallman en 1984, vise à
Processeurs embarqués
● Processeurs embarqués
(VCC ) d’abord 3.3 V puis 2.5 V. Les versions récentes de Processeurs embarqués
● Processeurs embarqués
◆ LPM0: le CPU est arrété Processeurs embarqués
créer un système d’exploitation complet qui réponde aux
● Éconnomie Xscale (strong ARM, Intel) et les puces smartCard ● Éconnomie ◆ LPM1, LPM2: l’horloge rapide (MCLK) est aussi arrétée Outils GNU pour la compilation
● Outils GNU pour la
principes du logiciel libre
● ISA ● ISA
● Pipeline fonctionnent a 0.65 V ● Pipeline ◆ LPM3 le générateur d’horloge est arrété compilation
● GNU
■ Licence GPL (GNU General Public License) ou LGPL (GNU
● Classification ● Classification
◆ LPM4 : l’oscillateur du crystal est arrété
● Charactéristiques ■ On peut différencier les tensions en fonction du bloc du chip: ● Charactéristiques
● Compilation
Lesser General Public License)
Outils GNU pour la compilation 1.5 V pour le processeur, 3.3 pour l’interface du bus et les Outils GNU pour la compilation ■ Le temps de reprise est d’autant plus long que la veille est Un compilateur pour
l’embarqué: GCC ■ Philosophie unix: programmes modulaires assemblés en un
Un compilateur pour
l’embarqué: GCC
pattes d’entrée/sortie (ex: Strong ARM de Digital) Un compilateur pour
l’embarqué: GCC
profonde. Pile d’exécution système complexe:
Pile d’exécution
■ Plus la technologie est intégrée, moins elle consomme Pile d’exécution
◆ Portabilité
(capacité diminuée). ◆ Standard Posix
◆ Performances
■ Fréquence d’horloge peu élevée compensée par le
parallélisme ■ Prise en main plus difficile que les outils commerciaux.
■ Complexité réduite des différents composants (moins de ■ Modèle économique de plus en plus suivi par les industriels.
registres, architectures RISC)
introduction au MSP 430 ■ Le compilateur gcc est la pièce maîtresse du projet GNU. introduction au MSP 430 ■ le processus de compilation est divisé en trois phases: introduction au MSP 430 ■ Certaines phases d’optimisations sont ajoutées, elles
Processeurs embarqués
Compilateur C, C++ et Objective-C de très grande qualité, Processeurs embarqués Processeurs embarqués
peuvent être très calculatoires
Outils GNU pour la compilation
● Outils GNU pour la
ses performances dépassent souvent celles des meilleurs Outils GNU pour la compilation
● Outils GNU pour la
Front−End Middle−End Back−End
Outils GNU pour la compilation
● Outils GNU pour la
■ Quelques exemples de transformation indépendantes de la
compilation compilateurs commerciaux. compilation compilation
machine:
Ordonnancement
● GNU ● GNU ● GNU
Alloc. Reg.
Scanning
Selection
● Compilation
■ Autres compilateurs g77, gnat, gpc,. . . ● Compilation ● Compilation
◆ Élimination d’expressions redondantes
Parsing
C.S.A
Opt1
Opt2
Opt3
Un compilateur pour Un compilateur pour Un compilateur pour
l’embarqué: GCC ■ emacs éditeur de texte multifonction qui peut faire aussi l’embarqué: GCC l’embarqué: GCC ◆ Élimination de code mort
Pile d’exécution office d’environnement intégré de programmation (IDE) Pile d’exécution Pile d’exécution ◆ Propagation de constantes
introduction au MSP 430 ■ Le flot complet de compilation est le suivant: introduction au MSP 430 ■ Le front-end d’un compilateur pour code embarqué utilise les introduction au MSP 430 Global value numbering
Local and global copy propagation
Constant folding
Algebraic simplifications
Processeurs embarqués Processeurs embarqués
mêmes techniques que les compilateurs traditionnels (on Processeurs embarqués Sparse conditional constant propagation
Dead code elimination
Outils GNU pour la compilation
● Outils GNU pour la
Outils GNU pour la compilation
● Outils GNU pour la
peut vouloir inclure des partie d’assembleur directement) Outils GNU pour la compilation
● Outils GNU pour la
C Local and global common subexpression elimination Partial redundancy elimination
compilation
● GNU
compilation
● GNU
■ Parsing LR(1): Le parseur est généré à partir de la compilation
● GNU Loop invariant code motion
● Compilation ● Compilation
grammaire du langage. ● Compilation
introduction au MSP 430 ■ La phase de génération de code est dédiée à l’architecture introduction au MSP 430 introduction au MSP 430 ■ La commande gcc lance plusieurs programmes suivant les
Processeurs embarqués
cible. Les techniques de compilation reciblable sont utilisées Processeurs embarqués Processeurs embarqués
options
Outils GNU pour la compilation
pour des familles d’architectures. Outils GNU pour la compilation Outils GNU pour la compilation ◆ Le pré-processeur cpp
● Outils GNU pour la
Un compilateur pour Un compilateur pour ◆ Le compilateur cc1
compilation
● GNU
■ Les étapes les plus importantes sont l’embarqué: GCC l’embarqué: GCC
● Compilation
◆ Sélection de code
● GCC ● GCC ◆ L’assembleur gas
● gcc ● gcc
Un compilateur pour
◆ Allocation de registre ● gdb ● gdb ◆ L’éditeur de liens ld
l’embarqué: GCC ● Pile d’exécution ● Pile d’exécution
◆ Ordonnancement d’instructions
■ gcc: ftp://ftp.gnu.org/gnu/gcc/gcc-3.3.tar.gz ■ gcc -v permet de visualiser les différents programmes
Pile d’exécution Pile d’exécution Pile d’exécution
■ Assembleur, éditeur appelés par gcc
de lien et utilitaire de manipulation de binaire (objdump, etc..)
ftp://ftp.gnu.org/gnu/binutils/binutils-2.9.1.tar.gz
■ Run-time library (printf, malloc, etc.): newlib (ou
glibc) ftp://ftp.gnu.org/gnu/glibc/
Un compilateur pour l’embarqué: GCC Installation de GCC pour MSP430 Le pré-processeur: cpp ou gcc -E
introduction au MSP 430 ■ GCC: Gnu C Compiler ou Gnu Compiler Collection introduction au MSP 430 ■ tar zxf gcc-3.3.tar.gz introduction au MSP 430 ■ cpp0 pour msp430-gcc
Processeurs embarqués Processeurs embarqués Processeurs embarqués
■ http://gcc.gnu.org/ ■ tar zxf binutils-2.9.1.tar.gz ■ msp430-gcc -mmcu=msp430x449 -E ex1.c -o ex1.i
Outils GNU pour la compilation Outils GNU pour la compilation Outils GNU pour la compilation
■ Outil développé par la communauté mondiale, ■ cd binutils-2.9.1 ■ Les tâches du préprocesseur sont :
Un compilateur pour Un compilateur pour Un compilateur pour
l’embarqué: GCC développement rapide. l’embarqué: GCC configure l’embarqué: GCC ◆ élimination des commentaires,
● GCC ● GCC ● GCC
-target=msp430 ◆ l’inclusion de fichier source,
● gcc
● gdb
■ De plus en plus utilisé pour le calcul embarqué car il est ● gcc
● gdb
● gcc
● gdb
make all install ◆ la substitution de texte,
● Pile d’exécution
reciblable. ● Pile d’exécution ● Pile d’exécution
Pile d’exécution Pile d’exécution ■ Même chose pour gcc (L’exécutable est nommé Pile d’exécution ◆ la définition de macros,
■ Exemple d’utilisation
msp430-gcc) ◆ la compilation conditionnelle.
◆ Créer un compilateur pour le MSP430 sur votre Pentium
◆ Insérer une routine d’interruption dans votre programme ■ Voir le fichier configure.sub pour les plate-formes cibles ■ Exemple:
◆ Répartir les différentes sections de votre code dans possibles #define MAX(a, b) ((a) > (b) ? (a) : (b))
différentes mémoires. ■ On peut aussi compiler gcc sur une machine pour l’utiliser ex1.c ...
sur une autre machine (ou il produira du code pour une f=MAX(3,b);
troisième machine): GCC est un Cross-compiler
#define MAX(a, b) ((a) > (b) ? (a) : (b))
ex1.i ...
f=((3) > (b) ? (3) : (b));
- p. 74/207 - p. 76/207 - p. 78/207
Le compilateur cc1 ou gcc -S Assembleur produit par mspgcc -S Éditeur de liens: ld
.text
.p2align 1,0
introduction au MSP 430 ■ Génère du code assembleur introduction au MSP 430 .global main introduction au MSP 430 ■ Produit l’exécutable (a.out par défaut) à partir des codes
Processeurs embarqués
■ msp430-gcc -O0 -mmcu=msp430x449 -S main.c -o
Processeurs embarqués .type main,@function Processeurs embarqués
objets des programmes et des librairies utilisées.
Outils GNU pour la compilation Outils GNU pour la compilation Outils GNU pour la compilation
main.S main: ■ Il y a deux manières d’utiliser les librairies dans un
Un compilateur pour Un compilateur pour Un compilateur pour
l’embarqué: GCC ■ Exemple : l’embarqué: GCC /* prologue: frame size = 2 */ l’embarqué: GCC programme
● GCC ● GCC ● GCC
.L__FrameSize_main=0x2 ◆ Librairies dynamiques ou partagées (shared, option par
● gcc void main() ● gcc ● gcc
● gdb
● Pile d’exécution
{ int i;
● gdb
● Pile d’exécution .L__FrameOffset_main=0x6
● gdb
● Pile d’exécution
défaut): le code de la librairie n’est pas inclus dans
Pile d’exécution Pile d’exécution mov #(__stack-2), r1 Pile d’exécution
l’exécutable, le système charge dynamiquement le code
i=0;
mov r1,r4 de la librairie en mémoire lors de l’appel du programme.
On n’a besoin que d’une version de la librairie en mémoire
while (1) /* prologue end (size=3) */
même si plusieurs programmes utilisent la même librairie.
{ mov #llo(0), @r4
La librairie doit donc être installée sur la machine, avant
i++; .L2: d’exécuter le code.
nop(); add #llo(1), @r4 ◆ Librairies statiques (static): le code de la librairie est
Assembleur correspondant (vu par gdb-insight) Assembleur as ou gas Manipuler les fichiers binaires
introduction au MSP 430 ■ -c :pas d’édition de liens introduction au MSP 430 ■ gdb est un debugger symbolique, c’est-à-dire un utilitaire introduction au MSP 430 ■ Lorsque l’on lance gdb avec la commande gdb exgdb.c,
Processeurs embarqués
■ -o file: renomme le fichier de sortie file au lieu de
Processeurs embarqués
Unix permettant de contrôler le déroulement de programmes Processeurs embarqués
gdb a chargé l’exécutable, il attend alors une commande
Outils GNU pour la compilation
a.out Outils GNU pour la compilation
C. Outils GNU pour la compilation gdb, comme par exemple run (pour exécuter le
Un compilateur pour Un compilateur pour
■ gdb permet (entre autres) de mettre des points d’arrêt dans
Un compilateur pour
programme), break (pour mettre un point d’arret dans le
l’embarqué: GCC ■ -g : insère les informations nécessaires à l’utilisation d’un l’embarqué: GCC l’embarqué: GCC
● GCC ● GCC
un programme, de visualiser l’état de ses variables, de ● GCC programme), step (pour avancer d’une instruction dans le
● gcc déboggeur (gbd, ddd). ● gcc ● gcc
● gdb ● gdb
calculer des expressions, d’appeler interactivement des ● gdb programme), etc.
● Pile d’exécution ■ -Wall : fait le maximum de vérifications statiques possibles ● Pile d’exécution ● Pile d’exécution
Attention aux optimisation: -01 Exemple de session gdb Exemple de session gdb
#include <stdio.h> ■ Suite de la session:
(gdb) break main
int main() Breakpoint 1 at 0x8048424: file exgdb.c, line 6.
introduction au MSP 430 ■ Assembleur du main (while(1) {i++; nop()}) avec introduction au MSP 430 introduction au MSP 430
(gdb)
insight: fenètre des registres du MSP insight: état de la mémoire du MSP Outils de GCC
Outils GNU pour la compilation Outils GNU pour la compilation Outils GNU pour la compilation
introduction au MSP 430 introduction au MSP 430 ■ make, documentation introduction au MSP 430 ■ On peut include directement des instructions assembleur
Processeurs embarqués Processeurs embarqués
http://www.gnu.org/software/make/manual/make.html Processeurs embarqués
dans le code C avec la fonction __asm__
Outils GNU pour la compilation Outils GNU pour la compilation
■ gcc home page: http://gcc.gnu.org/ Outils GNU pour la compilation
int main(void) {
Un compilateur pour Un compilateur pour Un compilateur pour
int i;
l’embarqué: GCC l’embarqué: GCC ■ gdb documentation l’embarqué: GCC
● GCC ● GCC ● GCC
int *p,*res;
● gcc ● gcc http://www.gnu.org/software/gdb/documentation/, ● gcc
● gdb ● gdb ● gdb
● Pile d’exécution ● Pile d’exécution ● Pile d’exécution
__asm__("mov #304, R4"); // p=0x130;
Pile d’exécution Pile d’exécution Pile d’exécution
__asm__("mov #2, @R4"); // *p=2;
__asm__("mov #312, R4"); //p=0x138;
__asm__("mov #5, @R4"); //*p=5;
__asm__("mov #314, R4");
__asm__("mov @R4, R5"); //Res=mem(0x13A);
nop();
}
■ Permet d’écrire des pilotes de périphériques, de contrôler la
gestion des interruptions sans système d’expoitation
- p. 98/207 - p. 100/207 - p. 102/207
Assembleur dans le code C Gestionnaire d’interruption Le LD script
introduction au MSP 430 ■ On peut aussi mettre explicitement des variables dans des introduction au MSP 430 ■ Beaucoup de périphériques dédiés /* code C de gestion de l’interruption */
introduction au MSP 430 ■ L’éditeur de liens assemble les différents fichiers objets
void isr_C( void ) {
Processeurs embarqués
registres sans connaître l’allocation de registres faite par le Processeurs embarqués
communiquent avec le processeur /* ISR: interupt service routine
Processeurs embarqués
résultant de la compilation séparée des différents fichiers.
Outils GNU pour la compilation
processeur Outils GNU pour la compilation
par des interruptions faire quelque chose en C */
...
Outils GNU pour la compilation
■ C’est là que sont résolus les appels à des fonctions entre
Un compilateur pour Un compilateur pour ◆ Problèmes (adresse mémoire Un compilateur pour
l’embarqué: GCC ■ Exemple: utilisation de la fonction fsinx du 68881: l’embarqué: GCC
}
l’embarqué: GCC fichiers ou à des fonctions de bibliothèques non fournies par
● GCC
● gcc __asm__("fsinx %1,%0" : "=f" (result) : "f" (angle)); ● GCC
● gcc
invalide), erreur de transmission /* code assembleur utilisé
● GCC
● gcc l’utilisateur
● gdb ● gdb sur le bus dans le code source */ ● gdb
● Pile d’exécution ■ %0 et %1 représentent le résultat et l’opérande de la ● Pile d’exécution __asm__(" ● Pile d’exécution ■ C’est aussi là que sont agencées les différentes sections
◆ Fin de tache pour un accélérateur .global _isr
Pile d’exécution fonction qui vont correspondre aux variables result et Pile d’exécution _isr: Pile d’exécution mémoire dans l’espace d’adressage final.
matériel
angle du programme C /* Sauvegarde des registres
◆ Détection de données pour un * choisis
■ "f" est une directive indiquant à gcc qu’il doit utiliser des senseurs
*/
push r0
registres flottants push r1
■ GCC ne peut pas généralement pas ...
/* appel du gestionnaire */
directement compiler un jsr _isr_C
gestionnaire d’interruption (retour /* restauration des registre
* et retour
par rte: return from exception) */
...
■ on peut contourner ce problème en pop r1
pop r0
encapsulant la procédure de gestion rte
de l’interruption ");
Contrôler les section du programme Gestionnaire d’interruption pour MSP430 Exemple de LD script (MIPS)
introduction au MSP 430 ■ Le code assembleur contient différentes sections. Par introduction au MSP 430 ■ Le compilateur msp430-gcc dispose de facilité pour cela introduction au MSP 430 /* Une list de fichier à inclure (les autres sont
spécifiés par la ligne de commande */
Processeurs embarqués
exemple avec GCC Processeurs embarqués
■ Le mot cles interrupt (CODE_INTERRUPT) permet de Processeurs embarqués
INPUT(libc.a libg.a libgcc.a libc.a libgcc.a)
Outils GNU pour la compilation ◆ La section .text contient les instructions du programme Outils GNU pour la compilation Outils GNU pour la compilation
déclarer une fonction comme handler d’interruption et de /* Specification du format de sortie
Un compilateur pour ◆ La section .data contient des données statiques etc. Un compilateur pour Un compilateur pour
l’embarqué: GCC l’embarqué: GCC faire les traitement supplémentaires par rapport à un appel l’embarqué: GCC
■ Spécification de fichier de
(binaire :bin}, Intel Hex:
ihex, debug coff-\$target */
● GCC ● GCC ● GCC
● gcc
■ Le concepteur de logiciel embarqué veut souvent contrôler ● gcc de fonction normal (ici essentiellement sauvegarde du SP ● gcc
librairie
OUTPUT_FORMAT("coff-sh")
● gdb
● Pile d’exécution
explicitement la répartition des variables globales dans les ● gdb
● Pile d’exécution
sur la pile). ● gdb
● Pile d’exécution
■ Il peut vouloir aussi contrôler la répartition des sections dans elles sont dans le répertoire /include/msp430, là ou les
■ 5 sections nommées rom : ORIGIN = 0x00000400, LENGTH = 127k
reset: ORIGIN = 0xBFC00000, LENGTH = 0x00000400
ram : ORIGIN = 0x400000, LENGTH = 128k
les composants matériels (à l’édition de lien et au outils mspgcc ont étés installé. En particulier cache : ORIGIN = 0xfffff000, LENGTH = 4k
◆ msp430x44x.h
■ Utilisation de la directive __attibute__
◆ msp430/basic_timer.h
const int put_this_in_rom
◆ ...
__attribute__((section("myconst" )));
const int put_this_in_flash
__attribute__((section("myflash" )));
Outils GNU pour la compilation /* the interrupt Outils GNU pour la compilation
■ Le programmeur à cette vision de la mémoire virtuelle: Outils GNU pour la compilation SP
Un compilateur pour
mémoire vector table */
{
__bss_start = . ; Un compilateur pour Un compilateur pour
.vect :
l’embarqué: GCC
● GCC
■ Création d’un symbole au {
*(.bss)
*(COMMON)
l’embarqué: GCC l’embarqué: GCC
introduction au MSP 430 introduction au MSP 430 ■ Appel d’une procédure: empilement de l’enregistrement introduction au MSP 430
moment de l’appel.
Lien statique et Lien dynamique Exemple: fibonnacci sur MSP Code assembleur fibonnacci (options -O2)
0x1258 <fib>: push r11 ;
0x125a <fib+2>: push r10 ;
0x125c <fib+4>: mov r15, r10 ;
introduction au MSP 430 ■ Considérons une procédure employeur qui appelle une introduction au MSP 430 int fib (int i) introduction au MSP 430 0x125e <fib+6>: cmp #2, r15 ;subst r3 with As==10
0x1260 <fib+8>: jl $+24 ;abs dst addr 0x1278
Processeurs embarqués
procédure fils. Processeurs embarqués { Processeurs embarqués
0x1262 <fib+10>: add #-1, r10 ;subst r3 with As==11
Outils GNU pour la compilation
■ Dans l’AR de fils, l’ARP appelant pointe sur l’AR de Outils GNU pour la compilation if (i<=1) return(1); Outils GNU pour la compilation
0x1264 <fib+12>: mov r10, r15 ;
Un compilateur pour
l’embarqué: GCC employeur.
Un compilateur pour
l’embarqué: GCC
else return(fib(i-1)+fib(i-2)); Un compilateur pour
l’embarqué: GCC
0x1266 <fib+14>: call #4696 ;#0x1258
} 0x126a <fib+18>: mov r15, r11 ;
Pile d’exécution
● Pile
■ Ce pointeur l’ARP est quelquefois appelé le lien dynamique, il Pile d’exécution
● Pile
Pile d’exécution
● Pile
0x126c <fib+20>: add #-1, r10 ;subst r3 with As==11
pointe sur l’environnement de la procédure appelante (ici 0x126e <fib+22>: mov r10, r15 ;
0x1270 <fib+24>: call #4696 ;#0x1258
employeur).
0x1274 <fib+28>: add r11, r15 ;
■ Considérons maintenant la procédure mère dans laquelle 0x1276 <fib+30>: jmp $+4 ;abs dst addr 0x127a
fils à été déclarée. 0x1278 <fib+32>: mov #1, r15 ;subst r3 with As==01
0x127a <fib+34>: pop r10 ;
■ Dans certains langages comme Pascal, la procédure fils 0x127c <fib+36>: pop r11 ;
peut accéder aux variables de mère 0x127e <fib+38>: ret
■ Pour cela on a besoin d’un lien statique qui est un pointeur
sur l’environnement de la procédure ou l’on a été déclaré.