Sei sulla pagina 1di 61

CALCOLATORI ELETTRONICI

REALIZZAZIONE DEL DLX TRAMITE


STRUTTURA SEQUENZIALE
MULTICICLO

Struttura interna di una CPU


Linguaggi ad alto livello/
Applicazioni

SW

Informatica

Sistema operativo
Assembler
ISA
Architettura di un calcolatore
Memoria

I/O

Reti sequenziali

HW

CPU

Reti combinatorie
Algebra di Boole e aritmetica binaria

Codifica binaria dellinformazione


Elettronica

BASI FISICO-MATEMATICHE

Rappresentazione astratta dellhardware di


un calcolatore elettronico

RL

CALCOLATORE ELETTRONICO
Memoria
principale

Unit di elaborazione
(CPU)

PROGRAMMA
DATI

ALU
REGISTRI

Bus di sistema

REGISTRI DI STATO
REGISTRI DI TRANSITO
Interfacce di I/O
3

Datapath e Unit di Controllo (1)

La struttura di una CPU, come tutte le reti logiche sincrone che elaborano dati, pu essere
strutturata in due blocchi Unit di Controllo e Datapath
La CPU, per funzionare, ha bisogno della memoria esterna su cui risiedono il programma e i dati
interrupt
Segnali di
comando

ready

Unit di Controllo (U.d.C.)

reset

istruzioni

memoria

Segnali di controllo

FLAG

clock

Data Path
Dati (in/out)

CPU
BUS indirizzi
BUS dati
BUS comandi

Datapath e Unit di Controllo (2)


DATAPATH: contiene tutte le unit di elaborazione ed i
registri necessari per lesecuzione delle istruzioni della CPU.
Ogni istruzione appartenente allISA eseguita mediante una
successione di operazioni elementari, dette micro-operazioni
Micro-operazione: operazione eseguita allinterno del
DATAPATH in un ciclo di clock (esempi: trasferimento di un
dato da un registro ad un altro registro, elaborazione ALU)
CONTROLLER: una RSS che in ogni ciclo di clock invia un
ben preciso insieme di segnali di controllo al DATAPATH al
fine di specificare lesecuzione di una determinata microoperazione

NEW

Struttura del DLX (esecuzione sequenziale)


I segnali di controllo
non sono indicati!

S1

Flag

S2

DEST

EXT-32
ALU

IEN

A
Unit di
controllo

Register File

B
PC
TEMP

Uscita sempre
abilitata

IAR
MAR

IR
Instruction
register

MDR
Dati in scrittura

Il segnale di
clock lo
stesso per
lu.d.c. e per
tutti i registri
del data path

Parallelismo
dellarchitettura: 32 bit
(bus, ALU e registri hanno
parallelismo 32 bit)

Data path

Indirizzi

Memoria

Dati in lettura

Istruzioni

Registro Edge-Triggered a 32bit con


Write Enable (WE*) e uscita 3-state
OE*

OE*

WE*
D0

1
0

M
U
X

O0

WE*

O[31..0]

Q0

D
Flip-Flop D

CK

D1

CK

D[31..0]

Registri del data path:


1

M
U
X

O1

Q1

D
Flip-Flop D

D31

1
0

M
U
X

O31
D

Q31

Flip-Flop D

Registro Edge-Triggered a 32bit con


Write Enable(WE*) ed uscite 3-state duplicate
OE2*

OE2*
OE1*
WE*

CK
1

D0
CK

M
U
X

Q0

Flip-Flop D

O10
O20

OE1*

WE*
D[31..0]
O2[31..0]
O1[31..0]

Registri del data path:


A
B
PC
IAR
MAR
MDR

O131
O231

TEMP

Esempio : esecuzione della micro-operazione TEMP PC


I segnali in rosso (segnali di
controllo) provengono dallUnit di
Controllo

I segnali di controllo in grassetto sono


attivi nel ciclo di clock in cui la microoperazione TEMP PC viene eseguita
S1
S2

OE1*
OE2_PC#

OE2*

O1

O2

PC
I

WE*

OE1*
OE2*

O1

O2

TEMP
I

WE*

WE_TEMP#

i2

i1
u

u = i2

ALU
clock

DEST

NEW

Register File: segnali di controllo


S1

IR[25..21]

S2

RF_RD1#

RD1*
Raddr1[4..0]

32

32

Rdata1[31..0]

RF_WR#

DEST

Register File
(RF)
WR*

32

32
Wdata[31..0]

32

Waddr[4..0]
32

32

32
5
32

32

IR[20..16]

Rdata2[31..0]
Raddr2[4..0]
RD2*

32

RF_WR_ADDR[4..0]

RF_RD2#
IR[20..16] IR[15..11] 11111

10

Il register file del DLX


32
RD1*
Raddr1[4..0]

RD2*
Raddr2[4..0]

READ
LOGIC1

READ
LOGIC2

OE1*
OE2*
O1[31..0]
O2[31..0]

D[31..0]

R0

Wdata[31..0]

WE*

OE1*
OE2*
Rdata1[31..0]
Rdata2[31..0]

32
32

O1[31..0]
O2[31..0]

WRITE LOGIC

32

WR*
Waddr[4..0]

D[31..0]

R31

WE*

N.B. I 32 registri del RF sono registri Edge-Triggered con Write Enable(WE*) ed uscite 3-state duplicate, tutti comandati dallo stesso clock

11

Read & Write Logic


Le 3 reti combinatorie sono identiche. La loro funzione infatti di
attivare luscita corrispondente alla codifica presente agli ingressi, se
lingresso di abilitazione attivo: si tratta quindi di un decoder con
ingresso di enable e uscita attive basse
EN0*

EN*
EN* 0

ADDR[4..0]

D
E
C

EN1*

31

EN31*

12

Esempio di microoperazione: C A + B
Strutture del DP controllate
dalla -operazione

Segnali di controllo attivi


durante la -operazione (nei
campi in verde)

O O W
E E R
1 2 #
# #

PC

TEMP

IAR

MAR

MDR

ALU
ADD

I DUE BUS SORGENTE FUNZIONANO COME MUX DISTRIBUITI: SU OGNI BUS


SORGENTE UN SOLO REGISTRO DEL DATA PATH E ABILITATO A TRASFERIRE IL
SUO CONTENUTO ALLA ALU IN OGNI PERIODO DI CLOCK
IL BUS DESTINAZIONE DISTRIBUISCE IL DATO IN USCITA DALLA ALU A TUTTI I
REGISTRI DEL DATA PATH CHE HANNO LINGRESSO DI WR# ATTIVO.
LAGGIORNAMENTO DEI REGISTRI DEL DATA PATH (TERMINE DELLA MICROOPERAZIONE) AVVIENE SUL FRONTE POSITIVO DEL CLOCK IN CUI IL SEGNALE DI
WR# E ATTIVO
13

Micro-operazione C A + B : forme donda


TCK

clock
OE1#(A)

Tc(max) TOE(max)

TALU(max)

Tsu(min)

OE2#(B)
WR#(C)

S1

S2

DEST

A+B

14

Frequenza massima di funzionamento del datapath

I registri campionano sul fronte positivo del clock, hanno due porte di uscita
O1 e O2 e dispongono di tre ingressi di controllo:
un ingresso di Write Enable (WE*) ed uno di Output Enable per ogni porta
(OE1* e OE2*)

Al fine di valutare la massima frequenza a cui possibile far funzionare il data


path importante conoscere le seguenti temporizzazioni:
TC (max) : ritardo max tra il fronte positivo del clock e listante in cui i
segnali di controllo generati dallunit di controllo sono validi
TOE (max) : ritardo max tra larrivo del segnale OE e listante in cui i dati del
registro sono disponibili sul bus
TALU (max) : ritardo massimo introdotto dalla ALU
TSU (min) : tempo di set-up minimo dei registri (requisito minimo per il
corretto campionamento da parte dei registri)

La massima frequenza di funzionamento del data path si calcola come segue:

TCK > TC (max) + TOE (max) + TALU (max) + TSU (min)


fCK(max) = 1/TCK
15

Scrittura e lettura contemporanea di un registro

S1

S2

DEST

+
ALU

R25

C A + B
R25 C
C

CLOCK (TCK)
Ain
A

+
ALU

Bin
B

R25

La ALU caratterizzata da un
ritardo TALU con il quale fornisce
il risultato.
Supponiamo tutti i registri edgetriggered uguali, caratterizzati
da:
TSU tempo di set-up
TH tempo di hold
TR tempo di risposta
16

Temporizzazioni
t4

t3

t2

t1

t0
TSU TH

Ain

Bin

ALUout

13

R25

13

tR25 tC = TCK

R25 = 3 in tR25 = t2 + TR

TR TALU

C = 3 in tC = t1 + TR

17

Tipologia di micro-operazioni
ALU Rk Ri op Rj
I valori ammissibili per i registri sorgente Ri , Rj e per il registro destinazione Rk
sono riportati nella seguente tabella:

A B C PC TEMP
Operandi sorgente Ri, Rj
Operando destinazione Rk

x x
x

IAR

MAR MDR

REGISTER FILE A RS1 , B RS2

IR
x

RD C

MEMORY MDR M[MAR] , M[MAR] MDR, IR M[PC]


LE MICRO-OPERAZIONI DI TIPO REGISTER FILE POSSONO ESSERE ESEGUITE IN
PARALLELO NELLO STESSO PERIODO DI CLOCK.
UNA MICRO-OPERAZIONE DI TIPO ALU PUO ESSERE ESEGUITA IN PARALLELO
AD UNA (O PIU) MICRO-OPERAZIONI DI TIPO REGISTER-FILE O MEMORY**
** in questo caso loperazione ALU non deve modificare i registri MDR e MAR

18

Esercizio
Micro-operazione

SI/NO

C A + B
TEMP TEMP + 4
A B
R31 A
PC MDR + MAR
IAR A + B
A R5
R3 C
MAR MDR
TEMP PC + A
A C
TEMP C
C R1 + R2
R3 R4 + R5

** = quanto vale
TEMP al termine della
micro-operazione?
Quanti cicli di clock
richiede la micro
operazione?

Micro-operazioni

SI/NO

Micro-operazioni

C A + B
TEMP TEMP + 4

M[MAR] MDR
TEMP TEMP + 4**

TEMP A
PC A
IAR A

MDR M[MAR]
MAR MAR + TEMP

TEMP A + B
C A + B
C A + B
R3 C
A R4
B R8
R8 C
C A + B

A R5
B R5
TEMP A + B
C A + B
R5 C
M[MAR] MDR
M[MAR] MDR
MDR MDR + TEMP
M[TEMP] IAR

A R4
B R8
R8 C
C MAR + B

MDR M[MAR]
PC PC + 4

TEMP A + B
C MAR + A

IAR MDR
M[MAR] MDR

MDR M[PC]
TEMP MDR

SI/NO

Dati i seguenti valori


dei registri:
A=3
B=5
C=6
E le seguenti microoperazioni:
C A + B
R7 C
Dire quanto valgono C
e R7 al termine
dellesecuzione, nel
caso in cui le microoperazioni:
1) Vengano eseguite
nello stesso clock
2) Vengano eseguite in
due clock successivi

C A
MAR B
C TEMP
R3 C

19

NEW

I passi dellesecuzione delle istruzioni


Nel DLX sequenziale multi-ciclo, lesecuzione di tutte le istruzioni pu essere
scomposta in 5 passi, ciascuno eseguito in uno o pi cicli di clock
Tali passi sono detti:
1) INSTRUCTION FETCH (IF): listruzione viene prelevata dalla memoria e posta in un
registro chiamato IR (Instruction Register) allinterno dellunit di controllo
2) INSTRUCTION DECODE/REGISTER FETCH (ID): listruzione in IR viene decodificata e
vengono prelevati gli operandi sorgente RS1 e RS2 dal Register File e copiati
rispettivamente nei due registri A e B. Viene inoltre aggiornato il PC per puntare
alla successiva istruzione (PC PC + 4)
3) EXECUTE (EX): elaborazione aritmetica o logica mediante la ALU
4) MEMORY ACCESS (MEM): accesso alla memoria
5) WRITE-BACK (WB): scrittura sul Register File del valore contenuto in C

20

Il progetto dellUnit di Controllo


Una volta definito il Set di Istruzioni e progettato il DATA PATH, il passo
successivo del progetto di una CPU il progetto dellUnit di Controllo
(CONTROLLER)
Il CONTROLLER una Rete Sequenziale Sincrona: il suo funzionamento
pu essere specificato tramite un diagramma degli stati
Il CONTROLLER (come tutte le RSS) permane in un determinato stato per
un ciclo di clock e transita (pu transitare) da uno stato allaltro in
corrispondenza degli istanti di sincronismo (fronti del clock)
Ad ogni stato corrisponde quindi un ciclo di clock. Le micro-operazioni che
devono essere eseguite in quel ciclo di clock sono specificate (in linguaggio
Register Transfer Language) nel diagramma degli stati che descrive il
funzionamento del CONTROLLER allinterno degli stati
A partire dalla descrizione RTL si sintetizzano poi i segnali di controllo
che devono essere inviati al DATA PATH per eseguire le operazioni
elementari associate ad ogni stato

Micro-operazioni da eseguire STATO


21

Il set di istruzioni del DLX


Le principali istruzioni aritmetiche e logiche (ALU):
Istruzioni logiche: AND(I), OR(I), XOR(I)
Istruzioni aritmetiche: ADD(I), SUB(I), MULT, DIV
Istruzioni di traslazione logica (a destra anche aritmetica): SLL(I), SRL(I), SRA(I)
Istruzioni di SET CONDITION: Scn(I)(U), con cn = EQ, NE, LT, GT, LE, GE
Le principali istruzioni di trasferimento dati
Load byte, Load Halfword, Load Word (LB(U), LH(U), LW)
Store byte, Store Halfword, Store Word (SB, SH, SW)
Le principali istruzioni di trasferimento del controllo
Istruzioni di salto condizionato: BNEZ, BEQZ
Istruzioni di salto incondizionato diretto e indiretto: J, JR
Istruzioni di chiamata a procedura: JAL, JALR
Le principali istruzioni di gestione degli interrupt
Istruzione di ritorno dalla procedura di servizio delle interruzioni: RFE
Abilitazione/disabilitazione degli interrupt: STI, CLI
(I): con operando immediato; (U): senza segno

22

Formato delle istruzioni del DLX: R,I,J


IR[31..26]

IR[25..21]

IR[20..16]

IR[15..11]

IR[10..0]

Tipo

6 bit

5 bit

5 bit

5 bit

11bit

op-cod

S1

S2

ext-op-cod

op-cod

S1

S2

op-cod

operando immediato (16 bit)


offset (26 bit)

TIPO R
ALU

RD RS1 op RS2
TIPO I

ALU con operando immediato

RS2 RS1 op operando immediato

Load/Store

RS1 = contiene lindirizzo in memoria


RS2 = registro destinazione/sorgente
operando immediato = offset rispetto a RS1

Branch condizionate

RS1 = registro sorgente su cui testare la condizione per il salto


operando immediato = offset rispetto al PC

Jump Register (JR)

RS1 = contiene lindirizzo di destinazione a cui saltare

Jump and Link register (JALR)

viene salvato il PC prima di aggiornarlo


RS1 = contiene lindirizzo di destinazione a cui saltare
TIPO J

Trasferimento del controllo diretto e


incondizionato (J e JAL)

offset = offset rispetto al PC


in JAL, viene salvato il PC prima di aggiornarlo

23

Modello di esecuzione del programma


Il programma risiede in memoria ed costituito da istruzioni
codificate in forma binaria
In memoria risiedono anche gli operandi delle istruzioni, cio i dati
elaborati e da elaborare
Le istruzioni vengono eseguite dalla CPU in sequenza
La CPU una macchina sequenziale sincrona e a livello di
massima astrazione il suo automa ha due stati:
CLOCK
RESET

IF

EX

IF (INSTRUCTION FETCH):
lettura in memoria della
prossima istruzione da eseguire
EX (EXECUTE): esecuzione
dellistruzione letta in IF

Per funzionare la CPU ha bisogno almeno degli ingressi di RESET e


CLOCK. Quando il RESET non attivo la CPU perennemente legge e
esegue istruzioni, cambiando stato ad ogni impulso di clock.
La frequenza del clock uno dei parametri che caratterizzano larchitettura della CPU

24

Esempio elementare di Data Path e Unit di


controllo (PROVA I del 14/04/2010)
DATA_IN2[7..0]

Reset# COD_OP

DATA_IN1[7..0]

RESET* OP
Segnali di
controllo

SF
M
WE_AB
Flag

DATA_OUT[7..0]

8
B

WE_C
Unit di controllo

Data Path

T0
25

Diagramma degli stati dellunit di controllo


Reset* OP SF, M WE_AB WE_C
0--,101

11-, -10

E1
1-1,101
1-0,101

0--,-00

1--,-00

1--, -00

1-0,001
0--,-00
10-, -10

E0

1-1,001

0--,001

0--,-00

26

Il diagramma degli stati del controller


Ready ?

IR M[PC]
PC PC + 4
A RS1
B RS2

Instruction Fetch

Instruction Decode*

INIT

BRANCH

ALU

SET

JUMP

DATA TRANSFER

* Oltre a decodificare listruzione possibile prelevare gli operandi sorgente dal


Register File ed incrementare il PC ( un esempio di micro-operazioni ALU e register
file eseguite in parallelo nello stesso clock)

27

Gli stati della fase di fetch e la gestione delle interruzioni


Nella fase di FETCH si deve verificare se presente un interrupt (evento esterno
asincrono che la CPU deve servire con apposito software):
se linterrupt presente e pu essere servito (IEN = 1) si esegue implicitamente
listruzione di chiamata a procedura allindirizzo 0, e si salva lindirizzo di ritorno
nellapposito registro IAR
se linterrupt non presente o le interruzioni non sono abilitate, si va a
leggere in memoria la prossima istruzione da eseguire (il cui indirizzo in PC)
Dallultimo stato
dellistruzione
precedente

(int and IEN) = 1

(int and IEN) = 0

Istruzione STI (tipo R):


IEN 1

IAR PC
Ready ?

Istruzione CLI (tipo R):

IR M[PC]

IEN 0
Istruzione RFE (tipo R):
PC IAR
IEN 1

IAR:
Interrupt
Address
Register

PC 0
IEN 0
Alla fase di
decodifica

IEN:
Interrupt
Enable
Flag

28

Fase di fetch (IF) & gestione degli interrupt:


primo clock
S2

DEST = S1

DEST

ALU

INT

Interrupt?
IEN

PC
Unit di
controllo
IAR
IR
Instruction
register
Data path
Se presente una richiesta di interrupt (INT = 1) e gli interrupt sono abilitati (IEN = 1)
lu.d.c. deve:
1) salvare il valore corrente del PC
2) caricare il valore 0 nel PC e disabilitare IEN (IEN = 0) (pu essere fatto allinterno dello
stesso periodo di clock)

29

Fase di fetch (IF) & gestione degli interrupt:


secondo clock
DEST = 0

DEST

ALU

INT

IEN

PC
Unit di
controllo
IR
Instruction
register
Data path
Se presente una richiesta di interrupt (INT = 1) e gli interrupt sono abilitati (IEN = 1)
lu.d.c. deve:
1) salvare il valore corrente del PC
2) caricare il valore 0 nel PC e disabilitare IEN (IEN = 0) (pu essere fatto allinterno dello
stesso periodo di clock)

30

Fase di fetch (IF)


MEMRDC#

Ciclo di bus

READY

IEN

PC
Unit di
controllo
IR
Instruction
register
Data path
Indirizzi

Memoria
Istruzioni

31

Are you ready?


Per leggere per esempio dalla memoria listruzione da eseguire, la CPU genera un ciclo di bus di lettura
in memoria. La memoria sar abbastanza veloce da portare in uscita sul bus dati il codice dellistruzione
in un periodo di clock (per consentire di essere campionato da IR rispettando il tempo di set-up)?
tSU

Clock
BA[31..0]

tSU

Ciclo di bus con


0 stati di wait

PC

MEMRDC#
BD[31..0]
BA[31..0]

SI
Istruzione
Ciclo di bus con
1 stato di wait

PC

NO

MEMRDC#
BD[31..0]

Istruzione

Fase di decodifica (ID)


S2

DEST = S2 + 4

DEST

ALU

A
Unit di
controllo

Register File

B
PC

IR
Instruction
register
Data path

Durante questa fase lu.d.c. decodifica listruzione presente in IR andando a


leggerne il codice operativo. In base al codice operativo verranno seguiti i
passi necessari per completare listruzione secondo quanto riportato nei
lucidi seguenti (nei quali la fase di fetch e decodifica risultano racchiuse in
un unico stato chiamato INIT)

33

Controllo per le istruzioni ALU


INIT
Register

Immediate

TEMP B

ADD
C A + TEMP

Execute

TEMP (IR15)16 ## IR15..0

SUB
C A - TEMP

AND
C A & TEMP

XOR
C A ^ TEMP

OR
C A | TEMP

RD C

Write Back

34

Controllo per le istruzioni SET CONDITION


INIT
Register

Immediate

TEMP B

SEQ

SLT

A==TEMP

A < TEMP

TEMP (IR15)16 ## IR15..0


SGE

A TEMP

SNE

SGT

A TEMP

A > TEMP

YES

Il risultato del test


un input per lunit
di controllo

Execute

SLE

A TEMP

NO

C 1

C 0

RD C

Lu.d.c. ha quindi al suo


interno la logica per
effettuare i confronti

Write Back
35

SET CONDITION (dettagli)


Come fa effettivamente la CPU a testare le diverse condizioni relative alle
differenti istruzioni di SET CONDITION?
Lunit di controllo programma lALU per eseguire in tutti i casi loperazione di
differenza tra i due operandi
In base al valore dei FLAG ZF, OF, SF e al tipo di confronto richiesto lunit di
controllo poi in grado di stabilire se nel registro RD andr caricato il valore 0 o
1
Lu.d.c potr poi dire allALU di fornire come risultato la costante 1 o 0
(operazione fornita dallALU). Lu.d.c. ha quindi al suo interno la logica per
stabilire il valore del risultato del confronto in base al tipo di condizione da
valutare

In alternativa possibile prevedere di avere unALU modificata che sia in


grado di effettuare il confronto. In questo caso gi allinterno del clock in cui
viene calcolato il risultato possibile stabilire cosa andr caricato nel
registro RD
NOTA: Le stesse considerazioni valgono anche per listruzione di BRANCH

36

Uno zoom sullALU


S1

S2

32

Flag

DEST

EXT-32
32

IEN

Unit di
controllo
Uscita sempre
abilitata

IR
Instruction
register

32

Segnali di controllo per lALU


M, C[2..0], CI
Data path

(IR15)16 ## IR15..0

Occorrer effettuare lestensione del segno nel caso di istruzioni


che prevedano un operando immediato. Questa operazione potr
essere effettuata da una rete combinatoria (EXT-32)

37

NEW

Alu estesa per fare i confronti


M
C[2..0]

CI

A[31..0]

U[31..0]
ALU

B[31..0]
Cond[2..0]

Significato

000

If (A<B) then U = 1 else U= 0

001

If (A>B) then U = 1 else U = 0

010

If (AB) then U = 1 else U = 0

011

If (AB) then U = 1 else U = 0

100

If (A=B) then U = 1 else U = 0

101

If (AB) then U = 1 else U = 0

CMP

Cond[2..0]

Se CMP=0, lALU
esegue le operazione
aritmetico-logiche
come sempre. Se
CMP=1, allora lALU
esegue il confronto
specificato da
Cond[2..0] e
considera i numeri A
e B come numeri con
segno (S=1) o senza
segno (S =0).

(nuovi segnali di controllo)

38

Controllo per le istruzioni di BRANCH


Execute

INIT
BEQZ
NO

BNEZ

A=0

A0
YES

NO

Il risultato
del test un
input per
lunit di
controllo

PC PC + (IR15)16 ## IR15..0

39

Controllo per le istruzioni di JUMP


INIT
JR

JALR, JAL

Execute

C PC
JALR

JAL

PC A

JR

PC PC + (IR25)6 ## IR25..0

JALR, JAL
R31 C

Write Back

40

NEW

Controllo per le istruzioni di DATA TRANSFER


INIT

Execute

MAR A + (0)16 ## IR15..0

Execute

Memory

STORE

Ready ?

MDR B

Ready ?

M[MAR] 32 MDR

LOAD
MDR M[MAR]
LW

SW

C MDR
LB

C (MDR7)24 ## MDR7..0
Ready ?

Ready ?

M[MAR] 16 MDR15..0

M[MAR] 8 MDR7..0

SH

LBU
C

SB

(0)24

## MDR7..0

C (MDR15)16 ## MDR15..0

Memory
RS2 C

C (0)16 ## MDR15..0

LH
LHU

Execute
Write Back

41

NEW

Fase di execute (EX)


S1

Flag

S2

DEST

EXT-32
ALU

A
Unit di
controllo

DEST = S1 OP S2
C

B
PC
TEMP
IAR

IR
Instruction
register

MAR
MDR
Data path

42

NEW

Fase di memory (MEM)


MEMRDC#

Ciclo di bus

S1

DEST

S2

MEMWRC#

READY

Unit di
controllo
MAR

IR
Instruction
register

MDR
Dati in scrittura

Data path

Indirizzi

Memoria

Dati in lettura

43

Fase di write-back (WB)

Unit di
controllo

Register File

IR
Instruction
register
Data path

44

Sintesi del diagramma degli stati dellu.d.c


del DLX sequenziale multiciclo
STORE

LOAD

J/JR

MEM

BRANCH NOT TAKEN

STORE

LOAD

I1

I0

IF

ID

EX1

EX2

BRANCH TAKEN

SET CONDITION

EX3

JAL/JALR
ALU

IEN and INT = 1

LOAD

WB
NOTA: Non vengono considerati gli ingressi di READY e RESET

IF

ID

EX1

EX2

ALU

SET CONDITION

JUMP

BRANCH

DATA TRANSFER

EX3

MEM

WB

Viene eseguito
un ciclo di bus

X
X

X
$

$ = solo nel caso di jump-and-link, # = solo nel caso di branch-taken, & = solo nel caso di LOAD

&

ALU
Scrittura sul
register file

45

Numero di clock necessari per eseguire le istruzioni (CPI)


IF

ID

EX1

EX2

ALU

SET CONDITION

JUMP

BRANCH

DATA TRANSFER

EX3

MEM

WB
X

X
$

&

$ = solo nel caso di jump-and-link, # = solo nel caso di branch-taken, & = solo nel caso di LOAD

Ipotizzando che non siano presenti stati di wait, ovvero che ogni ciclo di bus duri 1 clock, il numero di
clock necessari per eseguire una singola istruzione (CPI) sono i seguenti:
Istruzione

CPI

ALU

SET CONDITION

STORE

LOAD

JUMP

JUMP AND LINK

BRANCH (not taken)

BRANCH (taken)

46

Influenza degli stati di wait sul calcolo del


CPI
Nel caso in cui la memoria non sia pronta secondo quanto previsto dalla normale durata
dei cicli di bus*, questi vengono estesi introducendo degli stati di WAIT. Diremo
quindi che (le seguenti affermazioni sono equivalenti):
laccesso alla memoria richiede n stati di wait
ogni accesso alla memoria richiede n+1 periodi di clock
* considereremo per semplicit che la durata di un ciclo di bus senza stati di wait sia pari
ad 1 clock
Supponendo che la memoria richieda n stati di wait e che unistruzione effettui m cicli
di bus, il CPI dellistruzione risulter:
CPI = CPI0 stati di wait + m * n
dove CPI0 stati di wait rappresenta il CPI calcolato considerando di non avere stati di wait
NOTA: tutte le istruzioni avranno almeno m = 1 dovuto alla fase di fetch. Le
istruzioni di LOAD e STORE avranno inoltre un ulteriore ciclo di bus dovuto
rispettivamente alla fase di caricamento del dato dalla memoria o alla scrittura
di un dato in memoria
47

CPImedio e stati di wait


Esercizio: calcolare il CPImedio derivante dellimplementazione sequenziale del DLX
considerando come benchmark GCC, la cui frequenza delle varie classi di istruzioni
riportata nel seguito. Si faccia inoltre lipotesi che gli accessi alla memoria richiedano
uno stato di wait.
Istruzione

LOAD

STORE

ALU

SET

JUMP

BRACH (taken)

BRANCH (not taken)

Frequenza

21%

12%

37%

6%

2%

12%

10%

Soluzione:
Istruzione

CPIi

Frequenza

CPIi * frequenza

LOAD

6 + 2**

0.21

1.68

STORE

5+2

0.12

0.84

ALU

5 + 1*

0.37

2.22

SET

6+1

0.06

0.42

JUMP

3+1

0.02

0.08

BRANCH (taken)

4+1

0.12

0.60

BRANCH (not taken)

3+1

0.10

0.40

Frequenza

CPI medio
=
6.24

M
Ni
= CPI i

N
istruzioni
i =1

** nelle LOAD e STORE oltre il ciclo di bus per la fase di fetch presente rispettivamente un ciclo di lettura o uno di scrittura
* presente solo il ciclo di bus di lettura relativo alla fase di fetch

48

Introduzione di una nuova istruzione


nellISA
Si supponga di voler estendere lISA con una nuova istruzione, ADDMEM Rz,Rx,Ry il
cui comportamento pu essere in linguaggio RTL (Register Transfer Language) come
segue: M[Rz] M[Rx] + M[Ry]
Occorre in primo luogo definire il formato che si utilizzer: in questo caso la scelta
obbligata ed il formato risulter R
IR[31..26]

IR[25..21]

IR[20..16]

IR[15..11]

IR[10..0]

Tipo

6 bit

5 bit

5 bit

5 bit

11bit

ADDMEM

-----------

Listruzione ADDMEM R3,R2,R1 risulter per esempio codificata come segue:


IR[31..26]

IR[25..21]

IR[20..16]

IR[15..11]

IR[10..0]

Tipo

6 bit

5 bit

5 bit

5 bit

11bit

ADDMEM

00010

00001

00011

----------49

Il diagramma degli stati delle nuova


istruzione
Ready ?

IR M[PC]
PC PC + 4
A RS1
B RS2
MAR A

Ready ?

MDR M[MAR]
MAR B
TEMP MDR

Ready ?

MDR M[MAR]
MDR MDR + TEMP
A RD
MAR A

Ready ?

M[MAR] MDR

Listruzione esegue 4 cicli di bus: 3 di lettura e 1 di scrittura in


memoria. Nel caso in cui la memoria richieda 0 stati di wait, il CPI
dellistruzione risulta: 10
In base al numero di stati di wait (n), il CPI dellistruzione sar: 10
+ 4*n
Se per esempio ogni accesso alla memoria richiede 3 clock (quindi
gli stati di wait sono 2), avremo che: CPI = 10 + 8 = 18
La stessa operazione svolta dallistruzione ADDMEM R3,R1,R2 ,
potrebbe essere ottenuta attraverso il seguente codice che sfrutta
le operazioni standard del DLX:
LW R4,0(R1)
LW R5,0(R2)
ADD R6,R4,R5
SW 0(R3),R6
In questo caso (sempre considerando 2 stati di wait), la durata in
termini di numero di clock del codice sopra riportato risulta essere:
LW
LW
ADD
SW

6
6
5
5

+
+
+
+

2*2
2*2
1*2
2*2

=
=
=
=

10
10
7
9

quindi in totale 36 clocks a differenza dei 18 dellistruzione


ADDMEM
sar conveniente introdurre la nuova istruzione nellISA se
operazioni di questo tipo verranno eseguite con molta frequenza
dalla CPU si abbassa il CPImedio (si veda il prossimo lucido)

50

RICHIAMO

CPImedio al variare del mix di istruzioni

Consideriamo un benchmark contenente M tipi diversi di istruzioni: I1, I2IM e siano:


Ni: numero di istruzioni di tipo i presenti nel benchmark

N
=
N
istruzioni
i
i =1

CPIi: numero di cicli di clock necessari ad eseguire unistruzione di tipo i

CPU time

CPU time

= CPI i Ni Tck
i =1

Per avere un basso


CPImedio necessario
che siano
veloci (basso CPIi) le
istruzioni eseguite pi
frequentemente

M
Ni
= Nistruzioni CPI i
Tck
Nistruzioni
i =1
CPImedio

51

RICHIAMO

il progetto dellUnit di Controllo


Una volta definito il Set di Istruzioni e progettato il DATAPATH, il passo
successivo del progetto di una CPU il progetto dellUnit di Controllo
(CONTROLLER)
Il CONTROLLER una Rete Sequenziale Sincrona: il suo funzionamento
pu essere specificato tramite un diagramma degli stati
Il CONTROLLER (come tutte le RSS) permane in un determinato stato per
un ciclo di clock e transita (pu transitare) da uno stato allaltro in
corrispondenza degli istanti di sincronismo (fronti del clock)
Ad ogni stato corrisponde quindi un ciclo di clock. Le micro-operazioni che
devono essere eseguite in quel ciclo di clock sono specificate (in linguaggio
Register Transfer Language) nel diagramma degli stati che descrive il
funzionamento del CONTROLLER allinterno degli stati

A partire dalla descrizione RTL si sintetizzano poi i segnali di


controllo che devono essere inviati al DATAPATH per eseguire le
operazioni elementari associate ad ogni stato
52

Segnali di controllo generati per le istruzioni ALU


INIT
Register

Immediate

TEMP B

Execute

TEMP (IR15)16 ## IR15..0

ADD

SUB

C A + TEMP

AND

C A - TEMP

XOR

C A & TEMP

OR

C A ^ TEMP

RD C
IR[31..26]

IR[25..21]

IR[20..16]

IR[15..11]

IR[10..0]

Tipo

6 bit

5 bit

5 bit

5 bit

11bit

op-cod

S1

S2

ext-op-cod

op-cod

S1

S2

operando immediato (16 bit)

C A | TEMP

Write Back

RD RS1 op RS2
RS2 RS1 op Imm

53

Fase di fetch (IF)


MEMRDC#

IEN

IR M[PC]
IR_WR# = 0
ADDR_MUX = 0
PC_RD1# = 0

Unit di
controllo

PC

IR
Instruction
register
Data path
Indirizzi

Memoria

MEMRDC#

Istruzioni

54

Fase di decodifica (ID)


S2

ALU_OP

DEST

ALU

A
Unit di
controllo

IR
Instruction
register

Register File

B
PC

PC_RD1# = 0
PC PC + 4
PC_WR# = 0
A RS1
ALU_OP: S2 + 4
B RS2
A_WR# = 0
B_WR# = 0
RF_RD1# = 0
RF_RD2# = 0
RF_RD_ADDR1[4..0] = IR25..21
RF_RD_ADDR2[4..0] = IR20..16

Data path

55

NEW

Fase di execute (EX)


S1

DEST

S2
EXT-32
ALU

Unit di
controllo

ALU_OP
C

B
IR
Instruction
register

EX0
TEMP_WR#=0
FORMATO R
B_RD1# = 0
TEMP B
ALU_OP: S1 + 0
FORMATO I
IR_RD# = 0
16
TEMP (IR15) ## IR15..0
ALU_OP: S2 + 0
EXT-32: (S215)16 ## S215..0

TEMP

EX1
A_RD1# = 0
TEMP_RD2# = 0
Data path
ALU_OP: f(IR31..26)
C_WR# = 0
C A + TEMP

56

NEW

Fase di write-back (WB)


C

Register File

Unit di
controllo

IR
Instruction
register

C_RD#=0
RF_WR# = 0
FORMATO J (JAL)
RF_WR_ADDR[4..0] = 11111
FORMATO R
RF_WR_ADDR[4..0] = IR15..11
FORMATO I
RF_WR_ADDR[4..0] = IR20..16

R31 C
RD C
RS2 C
Data path

IR

31..26

25..21

20..16

15..11

10..0

OPCOD

S1

S2

Ext-op

OPCOD

S1

S2

Immediato

57

NEW

Segnali di controllo: riassunto


ALU
ALU_OP[n-1..0]: n bit che rappresentano loperazione da far eseguire allALU
in un determinato istante
CICLI DI BUS
ADDR_MUX: indica se il MUX utilizzato per generare gli indirizzi debba
prelevare lindirizzo dal PC (0) o dal registro MAR (1)
DATA_MUX: indica se il MUX in ingresso al registro MDR debba avere in
ingresso il dato proveniente dal bus dati (0) o dal bus interno DEST (1)
MEMWRC#, MEMRDC#, (IOWRC#, IORDC# non presenti: I/O mappato in memoria)
REGISTER FILE
RF_RD1# , RF_RD2# : abilitano rispettivamente le due uscite del register file
RF_RD_ADDR1[4..0] , RF_RD_ADDR2[4..0] : entrambi sono a 5 bit ed
individuano i registri che vogliono essere letti (sono collegati rispettivamente a
IR[25..21] e IR[20..16])
RF_WR# : abilita la scrittura sul register file
RF_WR_ADDR[4..0] : 5 bit che individuano il registro su cui scrivere
REGISTRI DEL DATA PATH (A,B,C**,PC,MAR,MDR,TEMP) e IR* *Ha solamente
unuscita verso il bus
X_WR# : abilita la scrittura sul registro X
S2
**Ha solamente
X_RD1# : abilita la lettura della porta 1 del registro X
unuscita verso il
X_RD2# : abilita la lettura della porta 2 del registro X
register file

58

Implementazione dellUnit di Controllo come F.S.M.

Unit di controllo
(F.S.M.)

Uscite

Segnali di controllo
(per il data path)
MEMRDC#
MEMWRC#

Ingressi
Stato
presente

32
FLAG

IR

IEN INT

(codice operativo)

READY RESET

Registro
di stato

Stato
futuro

59

La microprogrammazione
ISA con svariate centinaia di operazioni di tipo
diverso
Il progetto di una macchina a stati finiti
risulterebbe impossibile
Micro-istruzione: insieme dei segnali di
controllo da asserire
Lunit di controllo pu venire espressa tramite
un micro-programma (sequenza di microistruzioni)
Micro-program counter

Occorre stabilire il formato delle micro-istruzioni


60

Implementazione tramite micro-codice

Segnali di
controllo

Codice Operativo (estratto da IR)


61