Post on 09-May-2020
S. Salvatori - Microelettronica – maggio 2019 – (1)
Microelettronica
Organizzazione hardware
del processore ARM
prof. Stefano Salvatori
A.A. 2018/2019
Eccetto dove diversamente specificato, i contenuti di questo documento sono rilasciati sotto Licenza Creative Commons Attribuzione 3.0 Italia.
Corso introduttivo di progettazione di sistemi embedded
S. Salvatori - Microelettronica – maggio 2019 – (2)
Sommario
● Pipeline a 3 stadi
● Pipeline a 5 stadi
● Esempi di esecuzione di istruzioni (datapath)
● Note sul progetto ARM– Clock a due fasi e timing– ALU– Barrel shifter– Moltiplicatore– Banco dei registri– Layout– Logica di controllo
● Interfacciamento verso un coprocessore
S. Salvatori - Microelettronica – maggio 2019 – (3)
Introduzione: le idee di ARM
● L’organizzazione dell’ARM è cambiata poco rispetto al primo progetto degli anni ’90;
● con la tecnologia, da 3 um (ARM1) a 0.3 um (ARM7), sono migliorate le prestazioni mentre gli schemi di base sono rimasti gli stessi;
● Il successivo progresso (ARM9) ha previsto un cambio dell'architettura:● pipeline a 5 stadi ● memoria dati e memoria programma separate (architettura
Harward)● Attualmente ARM ha sviluppato diversi uP “ritagliati” a seconda
dell'applicazione.
S. Salvatori - Microelettronica – maggio 2019 – (4)
Organizzazione per
pipeline a 3-stadi
(ARM7-TDMI*)
*Thumb, Debugger, Multiplier, ICE
S. Salvatori - Microelettronica – maggio 2019 – (5)
Organizzazione per pipeline a 3-stadi
● Registri: • 2 uscite• 1 ingresso • 2 linee dedicate per il PC
● Barrel-shifter● ALU● Address register + incrementer● data registers● Decoder istruzioni + logica di controllo
2 operandi per l'ALU
multiply
data out register
instruction
decode
&
control
incrementer
registerbank
address register
barrelshifter
A[31:0]
D[31:0]
data in register
ALU
control
PC
PC
ALU bus
A bus
B bus
register
S. Salvatori - Microelettronica – maggio 2019 – (6)
Pipeline a 3 stadi
Fetch. L’istruzione è prelevata dalla memoria e posta nella linea di pipeline dell’istruzione.
Decode. L’istruzione occupa il blocco di decodifica (ma non il datapath): l’istruzione è decodificata e sono preparati i segnali di datapath per il prossimo ciclo di clock.
Execute. L’istruzione occupa il datapath: sono letti gli operandi (registri), si ha lo shift, è svolta l’operazione ALU e il risultato è scritto nel banco dei registri.
fetch decode execute
time
1
fetch decode execute
fetch decode execute
2
3
instruction
S. Salvatori - Microelettronica – maggio 2019 – (7)
In ogni periodo è impegnata una differente sezione hardware;
Per istruzioni di data-processing occorrono tre colpi di clock;
Con la pipeline si ha l’esecuzione di una istruzione per ciclo di clock e periodo di latenza pari a 3.
fetch decode execute
time
1
fetch decode execute
fetch decode execute
2
3instruction
L'hardware è diviso in sezioni.Ciascuna sezione è impegnata in ogni ciclo di clock
throughput
Pipeline a 3 stadi
S. Salvatori - Microelettronica – maggio 2019 – (8)
Esecuzione di un'istruzione a più cicli● L’esecuzione è meno regolare;
● Nell’esempio: ADD seguita da STR:
fetch ADD decode execute
time
1
fetch STR decode calc. addr.
fetch ADD decode execute
2
3
data xfer
fetch ADD decode execute4
5 fetch ADD decode execute
instruction
datapath
decode
acc. mem
S. Salvatori - Microelettronica – maggio 2019 – (9)
Program counter
● Il program counter PC (= r15 di uso generale) deve contenere un valore che consenta di caricare le istruzioni successive
● Per la pipeline, in pratica, il PC punta 8 byte (2 istruzioni) oltre l’istruzione corrente (fase di execute)
● Questo è di fondamentale importanza nel caso di salti relativi alla posizione attuale (è comunque il compilatore a calcolare l’offset del salto)
● Per altri usi del PC, letto come r15, il programmatore deve svolgere un'attenta analisi
S. Salvatori - Microelettronica – maggio 2019 – (10)
Esempi di esecuzione
di istruzioni
per l'ARM7
S. Salvatori - Microelettronica – maggio 2019 – (11)
Data processing tra due registri
2 operandi provenienti da due registri Il secondo operando è passato per il
barrel-shifter I due giungono alla ALU Il risultato giunge al banco di registri
address register
increment
registersRd
Rn
PC
Rm
as ins.
as instruction
mult
data out data in i. pipe
(a) register - register operations
operazione tra 2 registri. Datapath:
Il PC è incrementato e l'istruzione successiva caricata in i.pipe
S. Salvatori - Microelettronica – maggio 2019 – (12)
Data processing tra un reg. e un immediato
2 operandi: contenuto di un registro e un immediato (1 byte)
Il secondo operando è passato per il barrel-shifter
I due giungono alla ALU Il risultato giunge al banco di registri
operazione tra registro e immediatoDatapath:
address register
increment
registersRd
Rn
PC
as ins.
as instruction
mult
data out data in i. pipe
[7:0]
(b) register - immediate operations
Il PC è incrementato e l'istruzione successiva caricata in i.pipe
S. Salvatori - Microelettronica – maggio 2019 – (13)
Store (data transfer): 1° ciclo
Una istruzione di load/store calcola l’indirizzo di memoria nello stesso modo con cui una istruzione di data-processing tratta gli operandi;
datapath:
address register
increment
registersRn
PC
lsl #0
= A / A + B / A - B
mult
data out data in i. pipe
[11:0]
(a) 1st cycle - compute address
Primo ciclo(calcola l'indirizzo)
base offset
calcolo di PC(fine 1° ciclo)
A | A+B | A-B
S. Salvatori - Microelettronica – maggio 2019 – (14)
datapath:
address register
increment
registersRn
Rd
shifter
= A + B / A - B
mult
PC
byte? data in i. pipe
(b) 2nd cycle - store data & auto-index
secondo ciclo(scrive in mem.)
auto-indexinguscirà PC(fine 2° ciclo)
Se riguarda 1 byte:Il valore è replicato 4 volte
Nel caso di LOAD in un 3° ciclo si ha il trasferimento da data in nel registro
Store (data transfer): 2° ciclo
S. Salvatori - Microelettronica – maggio 2019 – (15)
In una istruzione di salto, nel 1° ciclo si calcola l'indirizzo a cui saltare
L'offset (immediato a 24 bit) subisce uno shift di 2 bit →allineamento con word ...… sommato al contenuto di PC
datapath:
address register
increment
registersPC
lsl #2
= A + B
mult
data out data in i. pipe
[23:0]
(a) 1st cycle - compute branch target
Primo ciclo(calcola indirizzo)
Salti (branch, B)
S. Salvatori - Microelettronica – maggio 2019 – (16)
Nota:il ritorno è in realtà a un indirizzo PC-4 (PC “guarda” sempre due istruzioni avanti) nel 3° ciclo (→ pipeline refill) viene aggiustato il valore
datapath:
address register
increment
registersR14
PC
shifter
= A
mult
data out data in i. pipe
(b) 2nd cycle - save return address
secondo ciclo(salva ind. di ritorno)
Salti (branch with link, BL)
Nel caso di “branch with link”, per ritornare all'istruzione successiva a quella di branch:PC è copiato in r14
S. Salvatori - Microelettronica – maggio 2019 – (17)
Organizzazione
nel caso di
pipeline a 5-stadi
S. Salvatori - Microelettronica – maggio 2019 – (18)
Aumentare il numero di slot
● La soluzione a 3-stadi è molto efficace ed è stata adottata fino all’ARM7;
● Per sistemi con migliori prestazioni dobbiamo ricercare soluzioni più efficienti:
clk
istrprogr f
CPINT
n° medio di cicli di clock per istruzione
Per diminuire il tempo complessivo di esecuzione di un programma:
• aumentare fCLK
• diminuire CPInumero maggiore di stadi per la pipeline
S. Salvatori - Microelettronica – maggio 2019 – (19)
Organizzazione per pipeline a 5 stadi
Aumentare fCLK
• semplificare la logica di ogni stadio della pipeline
aumentare il numero di stadi della pipeline
Diminuire CPI• le istruzioni devono essere riconfigurate in modo
che diminuisca il numero di slot che esse occupano nella pipeline
• ridurre gli stalli dovuti ad istruzioni che siano interdipendenti
S. Salvatori - Microelettronica – maggio 2019 – (20)
“Il collo di bottiglia”
● Il modello di Von Neumann limita la possibilità di ridurre CPI a causa degli accessi alla memoria, sia di programma che di dei dati;
● Il sistema di memoria dovrebbe consentire di acquisire maggiori informazioni/ciclo (>32 bit) oppure:
● separare la memoria di programmada quella dei dati
S. Salvatori - Microelettronica – maggio 2019 – (21)
Pipeline a 5 stadi (ARM9TDMI)
● Nei processori ARM con pipeline a 5-stadi:
• fetch: l’istr. è prelevata e depositata nella pipeline;
• decode: l’istr. è decodificata e gli operandi prelevati dai registri;
• execute: shift dell’operando e risultato dell’ALU. Se l’istr. è un load/store, con l’ALU si calcola l’indirizzo di memoria;
• buffer/data: eventuale accesso alla memoria, altrimenti il risultato dell’ALU è posto in un buffer per mantenere lo stesso flusso della pipeline per tutte le istruzioni;
• write back: il risultato è caricato in un registro (incluso il load da memoria).
instructionfetch
regwriteshift/ALU
r. read
decode
data memoryaccess
buffer/data WriteFetch Decode Execute
mem
S. Salvatori - Microelettronica – maggio 2019 – (22)
ARM9TDMI
Registri: 3 porte di lettura e 2 di scrittura (*)
Memorie separate:• I-cache: per istruzioni
• D-cache: per i dati Incr. per LDM e STM Data-forwarding:
• i risultati sono passati tra gli stadi appena sono disponibili
(*) Normalmente nei RISC: 2 per lettura e 1 per scrittura.
S. Salvatori - Microelettronica – maggio 2019 – (23)
Data forwarding
Nella pipeline a 5 stadi il ciclo di esecuzione è praticamente spezzato in 3 slot;
Se un'istruzione ha bisogno del dato prodotto dall'istruzione precedente si ha dipendenza;
Lo stallo si avrebbe se il dato fosse richiesto prima che il risultato venga trasferito nel registro di destinazione
Nell'ARM9TDMI sono inseriti percorsi per i dati che presentano il risultato appena disponibile: data forwarding
S. Salvatori - Microelettronica – maggio 2019 – (24)
Stallo inevitabile (read-after-write)
Nella seguente sequenza:
LDR r3, [..]
ADD r1, r2, r3
il dato in r3 è disponibile dalla prima istruzione solo nel penultimo ciclo buffer/data
mentre la seconda la richiede nel ciclo di esecuzione
instructionfetch
regwriteshift/ALU
r. read
decode
data memoryaccess
Memory WriteFetch Decode Execute
Il compilatore deve evitare di porre in sequenza questo tipo di istruzioni
S. Salvatori - Microelettronica – maggio 2019 – (25)
Compatibilità
● Per ARM con pipeline a 3 stadi il PC punta 8 byte (2 istruzioni) oltre l’istruzione corrente;
● Con la pipeline a 5 stadi gli operandi sono letti un ciclo prima rispetto a quella a tre stadi: PC+4 anziché PC+8;
● Per avere compatibilità gli ARM con pipeline a 5 stadi emulano quelli a 3 stadi
● L'incrementer di PC bypassa il registro di pipeline tra fetch e decode → PC+4 per l'istruzione attuale = PC+8 per l'istruzione successiva.
S. Salvatori - Microelettronica – maggio 2019 – (26)
Alcune soluzioni
nell'architettura ARM
S. Salvatori - Microelettronica – maggio 2019 – (27)
Segnale di clock
Sono utilizzati latch in luogo di flip-flop
→ sensibili ai livelli e non ai fronti del clock È necessario un clock a due fasi
1 clock cycle
phase 1
phase 2
Φ1
Φ2
dato
Φ1 Φ2Le due fasi sono derivate da un unico segnale di clock in ingresso (PLL)
Datapath ← RTLControl ← FSM
S. Salvatori - Microelettronica – maggio 2019 – (28)
Ciclo datapath
I bus sono dinamici (precaricati: anche se manca il clock lo stato è mantenuto)
read bus valid
shift out valid
ALU out
shift time
ALU time
registerwrite time
registerreadtime
ALU operandslatched
phase 1
phase 2
prechargeinvalidatesbuses
Ciclo = lett.reg + shift + ALU + scritt.reg + sep.fasi
S. Salvatori - Microelettronica – maggio 2019 – (29)
Adder nel primo prototipo ARM
Ripple-carry adder (32 stadi)
AB
Cin
sum
Cout
AOI
OAIARM1:
S. Salvatori - Microelettronica – maggio 2019 – (30)
Adder in ARM2
4-bit Carry look ahead (8 stadi)
A[3:0]
B[3:0]
Cin[0]
sum[3:0]
Cout[3]
4-bitadderlogic
P
G
ARM2
AOI
OAI
S. Salvatori - Microelettronica – maggio 2019 – (31)
Funzioni della ALU per l 'ARM2
fs5 fs4 fs3 fs2 fs1 fs0 ALU output
0 0 0 1 0 0 A and B
0 0 1 0 0 0 A and not B
0 0 1 0 0 1 A xor B
0 1 1 0 0 1 A plus not B plus carry
0 1 0 1 1 0 A plus B plus carry
1 1 0 1 1 0 not A plus B plus carry
0 0 0 0 0 0 A
0 0 0 0 0 1 A or B
0 0 0 1 0 1 B
0 0 1 0 1 0 not B
0 0 1 1 0 0 zero
S. Salvatori - Microelettronica – maggio 2019 – (32)
ALU per ARM2
Logica per il risultato (1 bit)
ALUbus
432105
NBbus
NAbus
carrylogic
fs:
G
P