Documente Academic
Documente Profesional
Documente Cultură
Cursul 2
Arhitectura Embedded
Facultatea de Automatică și Calculatoare
Universitatea Politehnica București
20.02.2013 1
Comic of the day
ISA
Memory access
add T,T,B ; T = B + C*D 4
sub T,T,E ; T = B + C*D – E 4
add T,T,F ; T = B + C*D - E + F 4
add A,T,A ; A = B + C*D - E + F + A 4
Two address machines
• În exemplul anterior, aproape toate instrucțiunile foloseau
de două ori aceeași adresă.
– De ce să nu folosim acea adresă pe post de sursă și desținatie?
• IA-32 folosește aceasta schemă
A=B+C*D–E+F+A
Memory access
add T,B ; T = B + C*D 4
sub T,E ; T = B + C*D - E 4
add T,F ; T = B + C*D - E + F 4
add A,T ; A = B + C*D - E + F + A 4
One address machines
• Folosesc un registru special pentru a încărca operandul și a
stoca rezultatul (registru acumulator)
• Au fost printre primele arhitecturi de procesoare
– Necesită cel mai mic spațiu de memorie dintre toate
arhitecturile
A=B+C*D–E+F+A
Memory access
mult D ; accumulator = C*D 2
add B ; accumulator = C*D+B 2
sub E ; accumulator = C*D+B-E 2
add F ; accumulator = C*D+B-E+F 2
add A ; accumulator = C*D+B-E+F+A 2
store A ; store the accumulator contents in A 2
Zero address machines
• Folosesc stiva pentru stocarea operanzilor și a
rezultatului – stack machines
A=B+C*D–E+F+A
push E ; <E> 2
push C ; <C, E> 2
push D ; <D, C, E> 2
mult ; <C*D, E> 1
Memory access
push B ; <B, C*D, E> 2
add ; <B+C*D, E> 1
sub ; <B+C*D-E> 1
push F ; <F, B+D*C-E> 2
add ; <F+B+D*C-E> 1
push A ; <A, F+B+D*C-E> 2
add ; <A+F+B+D*C-E> 1
pop A ; <> 2
Comparație
Formatul instrucțiunii Len Accese la memorie
23 20
18 23
13 14
8 19
CISC World
CPU time = Instruction Count ´ Cycles Per Instruction ´ Clock cycle time
1 rotație 1 minut
8400m
0.19 m 3500 rotații
= 12.6 minute
Versiunea CPU
Câteodata se dă perioada
ceasului în loc de
Frecvență(ex. cycle = 333 ps)
æ n ö
CPU time = ç å ICi ´ CPI i ÷ ´ Clock cycle time
è i =1 ø
Câte instrucțiuni de
acest tip sunt în
program
CPU performance cu diferite
tipuri de instrucțiuni
RISC
minim maxim
CISC
RISC vs. CISC: Concluzie
RISC CISC
1. Pune accent pe software 1. Accent pe hardware
2. Instrucțiuni reduse într-un 2. Instrucțiuni complexe în unul
singur ciclu de ceas sau mai mulți cicli
3. Load & Store ca instrucțiuni 3. Load/Store încorporate în
separate instrucțiunea complexă
4. Cod cu multe instrucțiuni 4. Cod de lungime redusă
5. Complexitate redusă -număr 5. Complexitate mărită – număr
mic de tranzistoare pe chip mare de tranzistoare alocate
(lasă loc de periferice) executării instrucțiunilor
6. Necesită un spațiu mărit de complexe
memorie pentru program și 6. Nu are nevoie de foarte multă
date memorie
RISC vs. CISC
• Ce se intâmplă în prezent
– Granița dintre cele două arhitecturi este neclară
– Majoritatea procesoarelor au o arhitectură hibridă
• Intel Pentium: interpretor CISC peste un nucleu RISC
– Procesoarele CISC nu sunt potrivite pentru embedded
• RISC a monopolizat domeniul Embedded
– Cost redus al memoriei
– Compilatoare eficiente
– Costuri mici de fabricație
– Consum redus de energie
– Eficiență crescută
RISC și Embedded
• Procesoare RISC
– ARM
– MIPS
– Power Architecture (IBM, Freescale)
– Sun SPARC
– Atmel AVR
– Microchip PIC
– Și mulți alții
Arhitectura von Neumann
R1 …………….
0x100: LD R1, 0x400
R2 0x102: LD R2, 0x402
Adrese 0x104: MUL R1, R2
0x108: ST R1, 0x404
…………….
Date
……………..
Status Reg. 0x400: 2
Instr. Pointer Read/Write
0x402: 3
0x404: x
PC ……………..
Arhitectura von Neumann
Fetch 0x100
R1 …………….
0x100: LD R1, 0x400
R2 0x100 0x102: LD R2, 0x402
Adrese 0x104: MUL R1, R2
0x108: ST R1, 0x404
LD R1, 0x400 …………….
Date
……………..
Status Reg. 0x400: 2
LD R1, 0x400 Read/Write
0x402: 3
0x404: x
PC 0x100 R ……………..
Arhitectura von Neumann
Execute 0x100
R1 2 …………….
0x100: LD R1, 0x400
R2 0x400 0x102: LD R2, 0x402
Adrese 0x104: MUL R1, R2
0x108: ST R1, 0x404
2 …………….
Date
……………..
Status Reg. 0x400: 2
LD R1, 0x400 Read/Write
0x402: 3
0x404: x
PC 0x100 R ……………..
Arhitectura von Neumann
Fetch 0x102
R1 2 …………….
0x100: LD R1, 0x400
R2 0x102 0x102: LD R2, 0x402
Adrese 0x104: MUL R1, R2
0x108: ST R1, 0x404
LD R2, 0x402 …………….
Date
……………..
Status Reg. 0x400: 2
LD R2, 0x402 Read/Write
0x402: 3
0x404: x
PC 0x102 R ……………..
Arhitectura von Neumann
Execute 0x102
R1 2 …………….
0x100: LD R1, 0x400
R2 3 0x402 0x102: LD R2, 0x402
Adrese 0x104: MUL R1, R2
0x108: ST R1, 0x404
3 …………….
Date
……………..
Status Reg. 0x400: 2
LD R2, 0x402 Read/Write
0x402: 3
0x404: x
PC 0x102 R ……………..
Arhitectura von Neumann
Fetch 0x104
R1 2 …………….
0x100: LD R1, 0x400
R2 3 0x104 0x102: LD R2, 0x402
Adrese 0x104: MUL R1, R2
0x108: ST R1, 0x404
MUL R1, R2 …………….
Date
……………..
Status Reg. 0x400: 2
MUL R1, R2 Read/Write
0x402: 3
0x404: x
PC 0x104 R ……………..
Arhitectura von Neumann
Execute 0x104
R1 2 …………….
0x100: LD R1, 0x400
R2 3 0x102: LD R2, 0x402
Adrese 0x104: MUL R1, R2
0x108: ST R1, 0x404
6 …………….
Date
……………..
Status Reg. 0x400: 2
MUL R1, R2 Read/Write
0x402: 3
0x404: x
PC 0x104 ……………..
Arhitectura von Neumann
Fetch 0x108
R1 6 …………….
0x100: LD R1, 0x400
R2 3 0x108 0x102: LD R2, 0x402
Adrese 0x104: MUL R1, R2
0x108: ST R1, 0x404
ST R1, 0x404 …………….
Date
……………..
Status Reg. 0x400: 2
ST R1, 0x404 Read/Write
0x402: 3
0x404: x
PC 0x108 R ……………..
Arhitectura von Neumann
Execute 0x108
R1 6 …………….
0x100: LD R1, 0x400
R2 3 0x404 0x102: LD R2, 0x402
Adrese 0x104: MUL R1, R2
0x108: ST R1, 0x404
6 …………….
Date
……………..
Status Reg. 0x400: 2
ST R1, 0x404 Read/Write
0x402: 3
0x404: 6
PC 0x108 W ……………..
Arhitectura Harvard
Memorie Instructiuni
…………….
Adrese
R1 0x100: LD R1, 0x400
0x102: LD R2, 0x402
R2 Date
0x104: MUL R1, R2
Read/Write 0x108: ST R1, 0x404
…………….
Memorie Date
0x400: 2
Instruction Pointer Date 0x402: 3
PC 0x404: 6
Read/Write
……………..
Arhitectura Harvard
• ARMxyzTDMIEJFS
– x: series
– y: MMU
– z: cache
– T: Thumb
– D: debugger
– M: Multiplier
– I: EmbeddedICE (built-in debugger hardware)
– E: Enhanced instruction
– J: Jazelle (JVM)
– F: Floating-point
– S: Synthesizible version (source code version for EDA tools)
Revizii si produse ARM
cpsr
spsr spsr spsr spsr spsr
31 28 27 24 23 16 15 8 7 6 5 4 0
N Z C VQ J U n d e f i n e d I F T mode
f s x c
• Condition Flags • Interrupt Disable.
– N = rezultat Negativ UAL – I = 1: IRQ Disable.
– Z = rezultat Zero UAL – F = 1: FIQ Disable.
– C = Carry Flag
– V = oVerflow flag • Bitul T
– T = 0: Procesor in starea ARM
• Sticky Overflow Q – flag – T = 1: Procesor in starea Thumb
– Nu poate fi sters de alte operatii; decat
printr-o instructiune dedicata. • Biti Mode
– Specifica modul procesorului
• Bitul J
– J = 1: Procesorul in starea Jazelle
ARM – Program Counter
CF Destination 0 Destination CF
Destination CF
if (z==1) R1=R2+(R3*4)
se compilează în
O singură instrucțiune!
Exemple de cod
do
{
if(i > j) // When i>j we do that
i -= j;
else if(i < j) // When i<j we do that
j -= i;
else ; // When i==j we do nothing
} while(i != j); // Leave the loop when i==j
• Sintaxa:
– MUL{<cond>}{S} Rd, Rm, Rs Rd = Rm * Rs
– MLA{<cond>}{S} Rd,Rm,Rs,Rn Rd = (Rm * Rs) + Rn
– [U|S]MULL{<cond>}{S} RdLo, RdHi, Rm, Rs RdHi,RdLo := Rm*Rs
– [U|S]MLAL{<cond>}{S} RdLo, RdHi, Rm, Rs RdHi,RdLo := (Rm*Rs)+RdHi,RdLo
• Cicli de instructiune
– MUL
• 2-5 cicli pentru ARM7TDMI
• 1-3 cicli pentru StrongARM/XScale
• 2 cicli pentru ARM9E/ARM102xE
– +1 ciclu pentru ARM9TDMI (fata de ARM7TDMI)
– +1 ciclu pentru inmultirea acumulata (MLA)
– +1 ciclu pentru “long”
ARM – Load / Store
• Sintaxa:
– LDR{<cond>}{<size>} Rd, <address>
– STR{<cond>}{<size>} Rd, <address>
r1
Registru
Baza 0x200 0x200
31 ADDS r2,r2,#1 0
De ce Thumb?
32-bit ARM Instruction
Pentru majoritatea instructiunilor generate de
compilator:
n Executia conditionala nu e folosita
n Registrele sursa si destinatie sunt identice
15 ADD r2,#1 0 n Doar ultimii 16 biti din registru sunt folositi
16-bit Thumb Instruction n Constantele au marime limitata
ARM – Exemplu de Arhitectura
Interrupt
Controller
Peripherals I/O
nIRQ nFIQ
ARM
Core
8 bit ROM
(boot)
ARM - AMBA
Arbiter Reset
ARM
TIC
Remap/
External Bus Interface Timer
Pause
ROM External
Bridge
Bus
Interface
External
RAM On-chip Interrupt
Decoder RAM Controller