480 likes | 714 Views
Chapitre 4 : Présentation de la famille de Processeurs ARM. www.arm.com Smail Niar IUP3/MASTER1 INEM 2006. Historique de ARM Ltd. The ARM design was started in 1983 as a development project at Acorn Computers Ltd . ARM1 by 1985 , and ARM2 1986 :
E N D
Chapitre 4 : Présentation de la famille de Processeurs ARM www.arm.com Smail Niar IUP3/MASTER1 INEM 2006
Historique de ARM Ltd • The ARM design was started in 1983 as a development project at Acorn Computers Ltd. • ARM1 by 1985, and ARM2 1986 : • 32-bit data bus, a 26-bit address space and 16 32-bit registers. One of these registers served as the (word aligned) program counter with its top 6 bits and lowest 2 bits holding the processor status flags. • The ARM2 the simplest useful 32-bit microprocessor in the world, • with only 30,000 transistors, no microcode (which represents about 1/4 to 1/3rd of the 68000) • ARM3, was produced with a 4KB cache • Scanner des trucs du livre arm et les mettres ici.
ARM7 Thumb Family: ARM7TDMI - Integer processor. ARM9 Thumb Family: ARM920T - Dual 16k caches for applications running Symbian OS, Palm OS, Linux and Windows CE. ARM922T - Dual 8k caches for applications running Symbian OS, Palm OS, Linux and Windows CE Applications. ARM926EJ-S: Jazelle technology, memory management unit (MMU), variable size instruction and data caches (4K - 128K), instruction and data tightly coupled memory (TCM) interfaces. ARM946E-S: Variable size instruction and data cache (0K- 1M), instruction and data TCM(0 - 1M), and memory protection unit for embedded applications. ARM966E-S: Targets "hard real-time" applications requiring predictable instruction execution timings with high performance and low power consumption. ARM968E-S: The smallest, lowest power ARM9E family processor to date, aimed specifically at embedded real-time applications. ARM10E Family: ARM1020E - Features DSP instruction-set extensions, on-chip debugging capability, dual 32 kByte cache memories and full memory management unit (MMU) supporting Windows CE, Symbian OS, Linux and PalmOS. ARM1022E - as the ARM1020E, but with dual 16 kByte cache memories. ARM1026EJ-S - a fully synthesizable processor delivering a new level of performance, functionality and flexibility to enable innovative SoC applications. ARM11 Family: ARM11 MPCore - The ARM11 MPCore synthesizable multiprocessor is based on the ARM11 microarchitecture and can be configured to contain between one and four processors delivering up to 2600 Dhrystone MIPS of performance. ARM1136J - The award-winning ARM1136J processor features the ARMv6 instruction set with media extensions, ARM Jazelle technology, ARM Thumb code compression, and optional floating point coprocessor. Cortex Family: ARM Cortex-A Series, applications processors for complex OS and user applications.Supports the ARM, Thumb and Thumb-2 instruction sets. ARM Cortex-R Series, embedded processors for real-time systems. Supports the ARM, Thumb, and Thumb-2 instruction sets. ARM Cortex-M Series, deeply embedded processors optimized for cost sensitive applications.Supports the Thumb-2 instruction set only
N Z C V Etude de l’architecture et du jeu d’instruction ARM7www.arm.com r0 r8 r1 r9 0 31 r2 r10 CPSR r3 r11 r4 r12 r5 r13 r6 r14 r7 r15 (PC) CPSR : Current program status register
Format du CPSR • N (Negative), Z (Zero), C (Carry), V (oVerflow) • mode – control processor mode • T – control instruction set • T = 1 – instruction stream is 16-bit Thumb instructions • T = 0 – instruction stream is 32-bit ARM instructions (thumb) • I F – interrupt enables
Les modes du processeur ARM • Sur événement ou instruction, le processeur ARM entre dans les modes suivants: • Abort : echec accès mémoire • Fast interrupt request (haute priorité) et interrupt request (basse priorité) le processeur exécute ua routine d’interruption • Supervisor, état après le boot • System et user. Dans le mode « system », les applications ont plus de droit (notament écriture dans le CPSR) • Undefined: instruction indéfinie
Jeu d’instruction et ARM • Il y a trois jeu d’instructions ARM • ARM: c’est le jeu d’instruction par défaut sur 32 bits. Il y a 58 instructions dans ce mode et 15 reg+PC dispo • Thumb : mode instructions sur 16 bits. Il y a 30 instructions et 8 reg Dispo+PC. L’activation de ce mode et inversement se fait sur l’exécution d’une instruction (respectivement BX et BLX). • Jazelle : Exécution du byte code Java, Il y a un bit (J) dans le CPSR qui indique le mode Jazelle. Les instructions sont sur 8 bits. Une partie des instructions de la JVM sont exécutées directement par le micro-code et d’autre sont émulés (suite de plusieurs instructions).
Instruction fetched from memory Decoding of registers used in instruction Register(s) read from Register Bank Shift and ALU operation Write register(s) back to Register Bank Structure du Pipeline ARM7 • Le pipeline permet d’augmenter la vitesse d’exécution des instructions. Plusieurs instructions sont lancés simultanément. • ARM7 pipeline de profondeur3, en ordre. ARM7 FETCH PC PC - 4 DECODE EXECUTE PC - 8
A[31:0] control address register P incrementer C PC register bank instruction decode A multiply & L register U control A B b u b b s u u barrel s s shifter ALU data out register data in register D[31:0] Architecture ARM • Ensemble registres : 2 ports de lectures et 1 port d’écriture, R15 est réservé pour PC • Barrel shifter – décalage ou rotation d’une valeur en entrée • ALU – réalise des opérations arithmétiques et logiques • Memory address register : reg pour envoyer une adresse vers la mémoire. • Memory data in/ou registers : reg pour envoyer ou récupérer les données de la mémoire. • Instruction decoder and associated control logic : décodage des instructions
Principales différences de l’architecture embarqué ARM par rapport à MIPS • Certaines instructions prennent un nombre de cycles variables exemple les instructions de load/store multiple (voir après) • La présence du circuit de décalage, afin de faire du pré-calcul (prédélage) sur une entrée de l’UAL • Les instructions en mode THUMB ou mode compressé. Par défaut les instructions sont codé sur 32 bits, mais il est possible de passer en mode 16 bits. Augmentation de la densité du code (gain de 30%) • Exécution conditionnel (avec un prédicat) • Instructions Spécialisées (MMX ou SIMD): permet de supporter facilement des applications de traitement du signal numérique (DSP). Dans ce cas, une donnée de 32 bits est considérées comme deux données de 16 bits.
Explications • Le processeur ARM (core) contrôle le système • Les différents contrôleurs • TIC : Test Interface Controler • IC (non présent ici) Interrupt controler, memory controler • DMA (Direct Memory Access) réalise des accés directement de l’organe d’ES vers la mémoire (sans passer par le processeur)
Suite… • L’arbitre : reçoit des requêtes du bus et alloue le bus suivant la disponibilité. Arbitrage centralisé. • UART : Universal Asynchronious Receiver Transmetter, interface sériel asynchrone. • GPIO : Interface parallèle asynchrone ou synchrone • Les bus. ARM intègre dans ces plateformes un standard de bus AMBA. Il y a deux type de bus AMBA: Haut débit (Arm High performance Bus ou AHB) et faible débit (Arm System Bus ou ASB). Une nouvelle version du AHB appelée Multi-Layer permet d’avoir plusieurs maîtres de bus en même temps. APB pour les périphériques.
Gestion des Interruptions dans l’ARM Il existe deux types d’interruptions: • Les exceptions : d’origine logicielle suite à l’exécution d’une instruction, interne au programme • exemple : division par zéro, accès à une zone non autorisée, ..etc • Les Interruptions : d’origines matérielles, externes au programme. • Exemple : Opération d’E/S terminée, caractère dispo sur contrôleur clavier, ..etc. • Certains constructeurs : interruptions logicielles et interruptions matérielles
Interruptions Vectorisées • Lorsque l’It se produit, il faut la traiter: gestion de l’interruption • Le programme est alors dérouter vers le programme « traitement de l’interruption ». • A la fin de ce programme de traitement de l’It, on revient pour continuer le prg interrompu • Un vecteur d’It est l’adresse début d’une It • Table des vecteurs d’It : table en mémoire qui contient une série de vecteurs d’It
Utilisation de la table des vecteurs d’It • Une routine d’It: nécessite l’exécution de plusieurs instructions. Exemple pour IRQ: • Sauvegarder les registres, trouver quel l’organe qui a provoqué, lire la donnée, l’écrire dans un reg, ..etc • La tables des vecteurs d’It contient un saut vers une zone mémoire qui contient de traitement de l’It.
Des Registres Associés à chaque Mode r0 User/Syst in user mode r1 r2 r3 It modes only r4 r5 r6 r7 r8_fiq r8 r9_fiq r9 r10_fiq r10 r1 1_fiq r1 1 r13_und r12_fiq r13_irq r12 r13_abt r13_svc r14_und r13_fiq r14_irq r14_abt r13 r14_svc r14_fiq r14 r15 (PC) SPSR_und SPSR_irq SPSR_abt CPSR SPSR_svc SPSR_fiq svc abort irq undefi ned fiq User/Syst mode mode mode mode mode mode Dans le mode System/User les 16+CPSR regs sont dispo Dans le mode FIQ seuls r8_fiq à r14_fiq + SPSR_fiq sont dispo ….
Gestion des It • Inhibé les interruption (I ou F sont mis à 1 dans le CPSR). • Le reg PC et le reg CPSR sont sauvegardés resp. dans r14_mode et SPSR_mode (mode correspond à fiq, irq, abort..etc) • L’état du processeur change suivant “mode” • PC est positionné à une valeur comprise entre 0x0000 0000 et 0x0000 001C suivant le type de l’interruption. • La routine d’interruption est démarrée. En général, une instruction de saut est réalisée vers une zone qui commence par sauvegarder les registres dans la pile pointée par r13_mode • S’il s’agit de « fiq » ou « irq », on identifie le driver qui a généré l’It. • On exécute la routine d’It (transfert de caractère ou appel OS par ex) • Fin It: Remettre l’état du processeur avant It. • On remet les registres sauvegardés depuis la pile • On remet PC et CPSR depuis r14_mode et SPSR_mode resp.
ARM data instructions • Basic format: ADD r0,r1,r2 • Computes r1+r2, stores in r0. • Immediate operand: ADD r0,r1,#2 • Computes r1+2, stores in r0.
ADD, ADC : add (w. carry) SUB, SBC : subtract (w. carry) RSB, RSC : reverse subtract (w. carry) MUL, MLA : multiply (and accumulate) AND, ORR, EOR BIC : bit clear LSL, LSR : logical shift left/right ASL, ASR : arithmetic shift left/right ROR : rotate right RRX : rotate right extended with C ARM data instructions
ARM move instructions • MOV, MVN : move (negated) MOV r0, r1 ; r0 = r1 MVN r0, r1 ; r0 = -r1
ARM load/store instructions • LDR, LDRH, LDRB : load (half-word, byte) • STR, STRH, STRB : store (half-word, byte) • Addressing modes: • register indirect : LDR r0,[r1] • R0 = MC[r1] • with second register : LDR r0,[r1,-r2] • with constant : LDR r0,[r1,#4]
0x5 Load and Store Word or Byte: Base Register • The memory location to be accessed is held in a base register • STR r0, [r1] ; Store contents of r0 to location pointed to ; by contents of r1. • LDR r2, [r1] ; Load r2 with contents of memory location ; pointed to by contents of r1. Memory r0 SourceRegisterfor STR 0x5 r1 r2 DestinationRegisterfor LDR BaseRegister 0x200 0x5 0x200
Exemple: • En C: x = (a + b) - c; • En Assembler ARM: ADR r4,a ; get address for a LDR r0,[r4] ; get value of a ADR r4,b ; get address for b, reusing r4 LDR r1,[r4] ; get value of b ADD r3,r0,r1 ; compute a+b ADR r4,c ; get address for c LDR r2[r4] ; get value of c
C assignment, cont’d. SUB r3,r3,r2 ; complete computation of x ADR r4,x ; get address for x STR r3, [r4] ; store value of x
ARM flow of control • All operations can be performed conditionally, testing CPSR: • EQ (si Z=1) , NE (si Z=0), CS (si C=1), CC (si CC=0) , MI (si N=1), PL (si N=0), …..
ARM ISA: Instructions avec prédicats If(a==b) { a++; } else { a--; } CMP R1,R2 /* a dans R1, b dansR2*/ ADDEQ R1,#1 /* si égale ajouter 1*/ SUBNE R1,#1 /* soustraire 1 si non */
Example: if statement • C: if (a > b) { x = 5; y = c + d; } else x = c - d; • Assembler: ; compute and test condition ADR r4,a ; get address for a LDR r0,[r4] ; get value of a ADR r4,b ; get address for b LDR r1,[r4] ; get value for b CMP r0,r1 ; compare a < b BGE fblock ; if a >= b, branch to false block
If statement, cont’d. ; true block MOV r0,#5 ; generate value for x ADR r4,x ; get address for x STR r0,[r4] ; store x ADR r4,c ; get address for c LDR r0,[r4] ; get value of c ADR r4,d ; get address for d LDR r1,[r4] ; get value of d ADD r0,r0,r1 ; compute y ADR r4,y ; get address for y STR r0,[r4] ; store y B after ; branch around false block
If statement, cont’d. ; false block Fblock ADR r4,c ; get address for c LDR r0,[r4] ; get value of c ADR r4,d ; get address for d LDR r1,[r4] ; get value for d SUB r0,r0,r1 ; compute a-b ADR r4,x ; get address for x STR r0,[r4] ; store value of x after ...
Example: Conditional instruction implementation ; true block MOVLT r0,#5 ; generate value for x ADRLT r4,x ; get address for x STRLT r0,[r4] ; store x ADRLT r4,c ; get address for c LDRLT r0,[r4] ; get value of c ADRLT r4,d ; get address for d LDRLT r1,[r4] ; get value of d ADDLT r0,r0,r1 ; compute y ADRLT r4,y ; get address for y STRLT r0,[r4] ; store y
Conditional instruction implementation, cont’d. ; false block ADRGE r4,c ; get address for c LDRGE r0,[r4] ; get value of c ADRGE r4,d ; get address for d LDRGE r1,[r4] ; get value for d SUBGE r0,r0,r1 ; compute a-b ADRGE r4,x ; get address for x STRGE r0,[r4] ; store value of x
Example: FIR filter • C: for (i=0, f=0; i<N; i++) f = f + c[i]*x[i]; • Assembler ; loop initiation code MOV r0,#0 ; use r0 for I MOV r8,#0 ; use separate index for arrays ADR r2,N ; get address for N LDR r1,[r2] ; get value of N MOV r2,#0 ; use r2 for f
FIR filter, cont’.d ADR r3,c ; load r3 with base of c ADR r5,x ; load r5 with base of x ; loop body loop LDR r4,[r3,r8] ; get c[i] LDR r6,[r5,r8] ; get x[i] MUL r4,r4,r6 ; compute c[i]*x[i] ADD r2,r2,r4 ; add into running sum ADD r8,r8,#4 ; add one word offset to array index ADD r0,r0,#1 ; add 1 to i CMP r0,r1 ; exit? BLT loop ; if i < N, continue
Appel de sousProgramme • Appel de procédure: • Branch and link instruction: BL debutSP ; • Copie R15 (qui est PC) dans r14, ensuite met la valeur debutSP dans R15 • Pour revenir vers l’appellant: MOV r15,r14 • Dans les appels de procedure on utilise aussi r13 qui joue le rôle de pointeur de pile en mémoire.
Un exemple: Afficher hello World ; Hello World! ; AREA helloW, CODE, READONLY ; Déclaration du segment de code SWI_WriteC EQU &0 ; SysCall pour imprimer un caractère SWI_Exit EQU &11 ; SysCall pour terminer le programme ENTRY ;début du segment de code « main » START ADR r1, TEXT ; r1 -> texte à imprimer LOOP LDRB r0, [r1], #1 ; charger un caractère CMP r0, #0 ; comparaison avec caractère fin SWINE SWI_WriteC ; si non imprimer BNE LOOP ; .. ….revenir loop SWI SWI_Exit ; fin programme TEXT = "Hello World!", &0a, &0d, 0 ; chaîne + CR + LF + fin END
Dhrystone represents the result in a more meaningful than MIPS because • MIPS cannot be used across different instruction sets (e.g. RISC vs. CISC) for a same computation requirenment • DMIPS - Dhrystone million instructions per second - obtained when the Dhrystone score is divided by 1,757 (the number of Dhrystones per second obtained on the Vax|VAX 11/780, nominally a 1 MIPS machine).
Références • www.arm.com • http://en.wikipedia.org/wiki/ARM_architecture Une mine d’or d’informations intéressantes (gratuit en plus!!!)