Sei sulla pagina 1di 15

Politecnico di Milano

Dip. di Elettronica, Informazione e Bioingegneria


prof.ssa Anna Antola prof.ssa Donatella Sciuto
prof. Luca Breveglieri prof.ssa Cristina Silvano

AXO – Architettura dei Calcolatori e Sistemi Operativi


PRIMA PARTE – giovedì 10 settembre 2020

Cognome ________________________ Nome ________________________

Matricola _____________ Codice persona ____________________________

Istruzioni – ESAME ONLINE


È vietato consultare libri, eserciziari e appunti, nonché cellulari e altri dispositivi mobili di calcolo o comunica-
zione. Chiunque non dovesse attenersi alla regola vedrà annullata la propria prova.
La prova va sempre consegnata completando la procedura prevista nel modulo (form) dell’esame con INVIO
(SUBMIT) del testo risolto. Se lo studente intende RITIRARSI deve inviare messaggio di posta elettronica
(email) al docente dopo avere completata la procedura.

Dallo HONOR CODE


In qualsiasi progetto o compito, gli studenti devono dichiarare onestamente il proprio contributo e devono
indicare chiaramente le parti svolte da altri studenti o prese da fonti esterne.
Ogni studente garantisce che eseguirà di persona tutte le attività associate all'esame senza alcun aiuto di
altri; la sostituzione di identità è un reato perseguibile per legge.
Durante un esame, gli studenti non possono accedere a fonti (libri, note, risorse online, ecc) diverse da quel-
le esplicitamente consentite.
Durante un esame, gli studenti non possono comunicare con nessun altro, né chiedere suggerimenti.
In caso di esame a distanza, gli studenti non cercano di violare le regole a causa del controllo limitato che il
docente può esercitare.
L’accettazione dello Honor Code costituisce prerequisito per l’iscrizione agli esami.

Tempo a disposizione 1 h : 30 m

Valore indicativo di domande ed esercizi, voti parziali e voto finale:

esercizio 1 (6 punti) _________________________

esercizio 2 (4 punti) _________________________

esercizio 3 (6 punti) _________________________

voto finale: (16 punti) ______________________


esercizio n. 1 – linguaggio macchina
prima parte – traduzione da C ad assembler

Si deve tradurre in linguaggio macchina simbolico (assemblatore) MIPS il frammento di programma C ripor-
tato sotto. Il modello di memoria è quello standard MIPS e le variabili intere sono da 32 bit. Non si tenti
di accorpare od ottimizzare insieme istruzioni C indipendenti. Si facciano le ipotesi seguenti:
 il registro “frame pointer” fp non è in uso
 le variabili locali sono allocate nei registri, se possibile
 vanno salvati (a cura del chiamante o del chiamato, secondo il caso) solo i registri necessari
Si chiede di svolgere i quattro punti seguenti (usando le varie tabelle predisposte nel seguito):
1. Si descriva il segmento dei dati statici dando gli indirizzi assoluti e gli spiazzamenti delle variabili globali
rispetto al registro global pointer gp, e si traducano in linguaggio macchina le dichiarazioni delle varia-
bili globali.
2. Si descrivano l’area di attivazione della funzione minimum e l’allocazione delle variabili locali e dei pa-
rametri di minimum nei registri.
3. Si traduca in linguaggio macchina il codice degli statement riquadrati nel prog. principale main.
4. Si traduca in linguaggio macchina il codice dell’intera funzione minimum (vedi tab. 4 strutturata).

// sezione dichiarativa costanti e variabili globali


#define N 128
int vet [N] // variabile globale di tipo array
int min = 0 // variabile globale di tipo scalare

void sort (int  addr, int len) // testata procedura sort


void print (int num) // testata procedura print

int minimum (int  addr)  // funzione minimum


int i, w // variabili locali di tipo scalare
int tmp [N] // variabile locale di tipo array
i = 0
do 
w = vet [i]
tmp [i] = w
i++
 while (i != N) // do
sort (tmp, i)
return tmp [0]
 // minimum

void main ( )  // prog. principale


min = minimum (vet)
print (min)
 // main

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 2 di 2


punto 1 – variabili globali (numero di righe non significativo)

per ciascuna variabile dichiarata


codice MIPS della sezione dichiarativa globale
specificare

.data 0x 1000 0000 // segmento dati statici indrizzo assoluto spiazzamento


iniziale hex nel rispetto a
.equ N, 128 // costante N segmento dati statici gp  0x 1000 8000

VET: .space 512 // 128  4 = 512 1000 0000 8000

MIN: .word 0 // varglob MIN (iniz) 1000 0200 8200

punto 2 – area e registri di MINIMUM (numero di righe non significativo)

area di attivazione di MINIMUM

contenuto simbolico spiazzamento rispetto a stack pointer

ra 520 indirizzi alti

s0 516
s1 512
tmp 0

indirizzi bassi
La funzione non è foglia, pertanto salva il reg ra in pila. Le varloc I e W sono allocate nei registri s0 e s1, e
tali registri vanno salvati in pila. La varloc di tipo array TMP va allocata in pila (essendo strutturata non può
andare nei registri), nell’area di attivazione, subito sotto le due celle dove salvare i registri s0 e s1 che
ospitano le varloc scalari I e W, e lo stack pointer sp punta esattamente all’elemento TMP [0], ossia
all’elemento iniziale di TMP.

allocazione dei parametri e delle


variabili locali di MINIMUM nei registri

parametro / variabile locale registro

addr a0
i s0
w s1

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 3 di 3


punto 3 – codice MIPS degli statement riquadrati di MAIN – (numero di righe non significativo)

// min = minimum (vet)

la $a0, VET // prepara arg ADDR

jal MINIMUM // chiama funz MINIMUM

sw $v0, MIN // memorizza varglob MIN

// print (min)

lw $a0, MIN // prepara argomento NUM

jal PRINT // chiama proc PRINT

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 4 di 4


punto 4 – codice MIPS dell’intera funzione MINIMUM – (numero di righe non significativo)
MINIMUM: addiu $sp, $sp, -524 // COMPLETARE - crea area attiv.
// .equ per spiazzamenti in pila e salvataggio reg - NON VANNO RIPORTATI
// i = 0
li $s0, 0 // inizializza varloc I

DO: // do 
// w = vet [i]
la $t0, VET // carica indir iniz array glob VET
sll $t1, $s0, 2 // allinea indice I
addu $t0, $t0, $t1 // calcola indir elem VET [I]
lw $s1, ($t0) // carica VET[I] e aggiorna varloc W

// tmp [i] = w
sll $t1, $s0, 2 // allinea indice I (si può riusare)
addu $t0, $sp, $t1 // calcola indir elem TMP [I]
sw $s1, ($t0) // aggiorna elem TMP [I]

// i++
addi $s0, $s0, 1 // aggiorna varloc I

//  while (i != N)
li $t2, N // carica cost N
bne $s0, $t2, DO // confronta e vai a DO

// sort (tmp, i)
move $a0, $sp // prepara arg ADDR
move $a1, $s0 // prepara arg LEN
jal SORT // chiama funz SORT

// return tmp [0]


lw $v0, ($sp) // prepara valusc

// istruzioni per ripristino reg e rientro - NON VANNO RIPORTATE

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 5 di 5


La varloc di tipo array TMP è memorizzata in pila, nell’area di attivazione, e lo stack pointer punta
esattamente all’elemento TMP [0], ossia all’elemento iniziale di TMP.

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 6 di 6


seconda parte – assemblaggio e collegamento
Dati i due moduli assemblatore seguenti, si compilino le tre tabelle seguenti relative a:
 i due moduli oggetto prodotti dall’assemblatore
 le basi di rilocazione del codice e dei dati dei moduli
 la tabella globale dei simboli e la tabella del codice eseguibile
Le tabelle 1, 2 e 3 di entrambi i moduli MAIN e ENDLESS vanno compilate (alcune righe sono già date). Le
tabelle 1 e 3 di entrambi i moduli contengono già i codici operativi delle istruzioni (con le pseudo-istruzioni
espanse).

modulo MAIN modulo ENDLESS

.data .data
TMP .space 512 LENGTH .space 12
SUP .space 4 RANGE: .word 17
INF .word 0 .text
.text .globl ENDLESS
.globl MAIN ENDLESS: lw $t2, INF
MAIN: addi $t0, $zero, 36 beq $t2, $zero, MAINEND
sw $t0, SUP lw $t3, RANGE
jal ENDLESS beq $t3, $zero, ENDLESS
MAINEND: la $t1, TMP ENDEND: j ENDEND

Regola generale per la compilazione di tutte le tabelle contenenti codice:


 i codici operativi e i nomi dei registri vanno indicati in formato simbolico
 tutte le costanti numeriche all’interno del codice vanno indicate in esadecimale, senza prefisso 0x, e di
lunghezza giusta per il codice che rappresentano
esempio: un’istruzione come addi $t0, $t0, 15 è rappresentata come addi $t0, $t0, 000F
 nei moduli oggetto i valori numerici che non possono essere indicati poiché dipendono dalla rilocazione
successiva, vanno posti a zero e avranno un valore definitivo nel codice eseguibile
esempio: lw $t0, RIL diventa lw $t0, 0000($gp) nell’oggetto e diventa lw $t0, nnnn($gp)
nell’eseguibile, dove RIL è un simbolo rilocabile che si riferisce a un dato globale e nnnn è il valore
opportunamente calcolato durante la generazione dell’eseguibile

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 7 di 7


(1) – moduli oggetto
modulo MAIN modulo ENDLESS

dimensione testo: 14 hex (20 dec) dimensione testo: 14 hex (20 dec)

dimensione dati: 208 hex (520 dec) dimensione dati: 10 hex (16 dec)

testo testo

indirizzo (hex) istruzione indirizzo (hex) istruzione


0 addi $t0, $zero, 0024 0 lw $t2, 0000($gp)
4 sw $t0, 0000($gp) 4 beq $t2, $zero, 0000
8 jal 000 0000 8 lw $t3, 0000($gp)
C lui $a0, 0000 C beq $t3, $zero, FFFC
10 ori $a0, 0000 10 j 000 0000
14 14

dati dati

indirizzo (hex) contenuto (in esadecimale) indirizzo (hex) contenuto (in esadecimale)
0 non specificato 0 non specificato
200 non specificato C 11
204 0 10

tabella dei simboli tabella dei simboli


tipo può essere T (testo) oppure D (dato) tipo può essere T (testo) oppure D (dato)
simbolo tipo valore simbolo tipo valore
MAIN T 0000 0000 ENDLESS T 0000 0000
MAINEND T 0000 000C ENDEND T 0000 0010
TMP D 0000 0000 LENGTH D 0000 0000
SUP D 0000 0200 RANGE D 0000 000C
INF D 0000 0204

tabella di rilocazione tabella di rilocazione

indirizzo (hex) cod. operativo simbolo indirizzo (hex) cod. operativo simbolo
4 sw SUP 0 lw INF
8 jal ENDLESS 8 beq MAINEND
C lui TMP C lw RANGE
10 ori TMP 10 beq ENDLESS
14 j ENDEND

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 8 di 8


(2) – posizione in memoria dei moduli
MAIN ENDLESS

base del testo: 0040 0000 base del testo: 0040 0014

base dei dati: 1000 0000 base dei dati: 1000 0208

(3) – tabella globale dei simboli


simbolo valore finale simbolo valore finale
MAIN 0040 0000 ENDLESS 0040 0014

MAINEND 0040 000C ENDEND 0040 0024

TMP 1000 0000 LENGTH 1000 0208

SUP 1000 0200 RANGE 1000 0214

INF 1000 0204

(3) – codice eseguibile


testo

indirizzo codice (con codici operativi e registri in forma simbolica)


0040 0000 addi $t0, $zero, 0024

0040 0004 sw $t0, 8200($gp)

0040 0008 jal 010 0005

0040 000C lui $a0, 0000

0040 0010 ori $a0, 1000

0040 0014 lw $t2, 8204($gp)

0040 0018 beq $t2, $zero, FFFC

0040 001C lw $t3, 8214($gp)

0040 0020 beq $t3, $zero, FFFC

0040 0024 j 010 0009

0040 0028

Non si richiede la tabella globale dei dati.

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 9 di 9


esercizio n. 2 – logica digitale
prima parte – logica sequenziale
Sia dato il circuito sequenziale composto da: un bistabile master-slave di tipo D (D e Q, dove D è l’ingresso
del bistabile e Q è lo stato / uscita del bistabile), due ingressi C e X e un’uscita F, e descritto dalle equazioni
nel riquadro.
Si chiede di completare il diagramma temporale riportato
qui sotto. Si noti che:
D     (!C) and (X xor Q)   si devono trascurare completamente i ritardi di pro-
pagazione delle porte logiche e i ritardi di commuta-
F      (!C and X) or (C and Q) zione dei bistabili
N.B.  operatore  XOR,  uscita  a  1  se  e  solo  se   i bistabili sono il tipo master-slave la cui struttura è
solo uno degli ingressi è a 1  stata trattata a lezione, con uscita che commuta sul
fronte di discesa del clock

tabella dei segnali (diagramma temporale) da completare


 Per i segnali D, Q e F si ricavi, per ogni ciclo di clock, l’andamento della forma d’onda corrispondente,
riportando i relativi valori 0 o 1 così come esemplificato per i segnali di ingresso X e C.
 A solo scopo di chiarezza, per il segnale X è riportata anche la forma d’onda per evidenziare la corri-
spondenza tra questa e i valori 0 e 1 presenti nella tabella dei segnali complessiva.

X
forma
d’onda

X 0 0 1 1 0 1 0 1 1 0 1 1 1 0 0 0 0 0 0 0

C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0

D 0 0 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 0 0 0

Q 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

F 0 0 1 1 0 1 0 1 1 0 1 1 1 0 1 1 0 0 0 0

CLK

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 10 di 10


seconda parte – logica combinatoria
Si vuole progettare una rete combinatoria che riceve in ingresso 3 bit (A, B e C) e fornisce sull’uscita U il bit
di parità pari della configurazione in ingresso.
Il comportamento della rete è quindi il seguente: se il numero di bit 1 presenti nella configurazione di in-
gresso è dispari, allora l’uscita U è posta a 1, altrimenti è posta a 0.

1. Completare la tabella sottostante con i valori dell’uscita U. Per facilitare lo svolgimento, le colon-
ne A, B e C che rappresentano gli ingressi della rete sono già state completate.

A B C U

0  0  0  0

0  0  1  1

0  1  0  1

0  1  1  0

1  0  0  1

1  0  1  0

1  1  0  0

1  1  1  1

2. Progettare la rete in prima forma canonica (forma SOP, somma di prodotti). Scrivere l’espressione
della prima forma canonica di U in funzione di A, B e C, senza ricorrere a semplificazioni o minimiz-
zazioni:

U = _________________________________________________ !A !B C + !A B !C + A !B !C + A B C

3. Considerata l’espressione ottenuta al punto precedente, manipolarla con le regole dell’algebra di Boole in
modo da ottenere un’espressione equivalente contenente solamente operatori XOR.

Espressione di partenza !A !B C + !A B !C + A !B !C + A B C

!A ( !B C + B !C ) + A ( !B !C + B C )

!A ( B xor C) + A !(B xor C)

A xor B xor C

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 11 di 11


esercizio n. 3 – microarchitettura del processore pipeline

prima parte – struttura del processore


Sono dati il seguente frammento di codice macchina MIPS (simbolico), che comincia l’esecuzione all’indirizzo
indicato, e i valori iniziali specificati per alcuni registri.

indirizzo codice assemblatore registro contenuto iniziale


0x 0040 0800 add $t1, $t2, $t3 $t0 0x 0000 2222
0x 0040 0804 lw $t2, 0x AAAF($t3) $t1 0x 1001 0000
0x 0040 0808 addi $t3, $t0, 0x 7FFC $t2 0x 0001 0115
0x 0040 080C beq $t1, $t0, 0x FFFE $t3 0x 1000 FFF5
0x 0040 0810 memoria contenuto iniziale
0x 0040 0814 0x 1000 4004 0x 0044 0FFF
0x 1000 AAA4 0x 1AA1 3332

La pipeline non è ottimizzata per la gestione dei conflitti di controllo. Si consideri il ciclo di clock in cui
l’esecuzione delle istruzioni nei vari stadi è la seguente:

WB add $t1, $t2, $t3


M lw $t2, 0x AAAF($t3)
EX addi $t3, $t0, 0x 7FFC
ID beq $t1, $t0, 0x FFFE
IF

1) Indicare qual è il ciclo di clock considerato: 5 (quinto ciclo) ________________________________

2) Calcolare il valore di $t2 + $t3 nell’istruzione add:

0x 0001 0115 + 0x 1000 FFF5 = 0x 1002 010A ____________________________

3) Calcolare il valore dell’indirizzo di memoria dati nell’istruzione lw:

0x 1000 FFF5 + 0x FFFF AAAF = 0x 1000 AAA4 ____________________________

4) Calcolare il valore di $t0 + 0x 7FFC (costante immediata) nell’istruzione addi:

0x 0000 2222 + 0x 0000 7FFC = 0x 0000 A21E ____________________________

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 12 di 12


5) Completare le tabelle:
I campi Istruzione e di tipo NumeroRegistro possono essere indicati in forma simbolica, tutti gli altri in esa-
decimale (omettendo il prefisso 0x implicito). Utilizzare n.d. se il valore non può essere calcolato.

segnali all’ingresso dei registri di interstadio


(subito prima del fronte di SALITA del clock)
IF (n.s.) ID (beq) EX (addi) MEM (lw)
registro IF/ID registro ID/EX registro EX/MEM registro MEM/WB
.WB.MemtoReg .WB.MemtoReg .WB.MemtoReg

X 0 1
.WB.RegWrite .WB.RegWrite .WB.RegWrite

0 1 1
.M.MemWrite .M.MemWrite

0 0
.M.MemRead .M.MemRead

0 0
.M.Branch .M.Branch

1 0
.PC .PC .PC

0040 0814 0040 0810 ***********


.istruzione .(Rs) t1 dopo add

non specificata 1002 010A


.(Rt) t0 iniz .(Rt)
0000 2222 ***********
.Rt .Rt .R

$t0 08 $t3 0B $t2 0A


.Rd

***********
.imm/offset esteso .ALU_out somma addi .ALU_out ind memoria lw
FFFF FFFE 0000 A21E 1000 AAA4
.EX.ALUSrc .Zero .DatoLetto

0 0 1AA1 3332
.EX.RegDest

segnali relativi al RF (subito prima del fronte di DISCESA interno al ciclo di clock)
RF.RegLettura1 RF.DatoLetto1 RF.RegScrittura

$t1 09 beq 1001 0000 t1 iniz $t1 09 add


RF.RegLettura2 RF.DatoLetto2 RF.DatoScritto

$t0 08 beq 0000 2222 t0 iniz 1002 010A t1 dopo add

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 13 di 13


seconda parte – pipeline e gestione di conflitti e stalli

Si consideri la sequenza di istruzioni sotto riportata:

1. lw $3, 4($1)
2. add $1, $3, $2
3. sw $1, 4($3)

    ciclo di clock 

    1  2  3  4  5  6  7  8  9  10  11  12  13 

ID 
1‐lw  IF 

EX  M  WB 3                 
istruzione 

ID 
2‐add    IF 
3, 2 
EX  M  WB 1               

3‐sw      IF  ID  EX  M  WB             


3, 1 

Si risponda alle domande seguenti, facendo l’ipotesi che la pipeline sia dotata dei seguenti percorsi di propa-
gazione: EX/EX, MEM/EX e MEM/MEM.

a) si riportino nel diagramma temporale


sopra predisposto tutte le dipendenze di Tabella 1 (numero di righe non significativo) 
dato istruzione percorso di  ciclo di clock dove
registro
istruzione  da cui  propagazione  è attivo il percorso
b) si riportino in tabella 1 – prime tre co- coinvolto 
dipende  e stalli  di propagazione 
lonne – le dipendenze di dato che risulta-
no essere conflitti 1 stallo + 
2  1  3  5 
MEM‐EX rs 
c) si completi in Tabella 2 il diagramma
temporale della pipeline, mettendo in evi- 3  1  3  na  na 
denza gli eventuali percorsi di propaga-
zione che possono essere attivati per ri- 3  2  1  EX‐EX rt  6 
solvere i conflitti, e gli stalli eventualmen-
te da inserire affinché la propagazione sia
efficace
         

d) si indichino in Tabella 1 – ultime due          


colonne – i percorsi di propagazione ef-
fettivamente attivati e gli stalli associati,  
e il ciclo di clock in cui risultano attivi  
 
Tabella 2 
  1  2  3  4  5  6  7  8  9  10  11  12  13  14 

IF  ID  EX  MEM  WB                   



1  (3)  3 

  IF  ID  ID  EX  MEM WB               



stallo  3, 2  (1)  (1)  1 

    IF  IF  ID  EX  MEM  WB             



stallo  3, 1 

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 14 di 14


e) Si consideri lo schema di PROCESSORE PIPELINE CON STALLO E PROPAGAZIONE, e i percorsi di pro-
pagazione effettivamente attivati e riportati in Tabella 1 della domanda precedente. Per ciascun
ciclo di clock in cui è attiva almeno una propagazione (solo di tipo EX/EX o MEM/EX), si
completi una colonna della Tabella 3 con le informazioni richieste.
Per i registri di interstadio che sono stati scritti in conseguenza di uno stallo, si indichi V.S. (valore di
stallo). Se il valore non può essere calcolato si usi n.d.

NOTA BENE: per percorsi attivi nello stesso ciclo di clock e riferiti alla stessa istruzione, utilizzare una
sola colonna per rappresentarli.

Tabella 3 

ciclo di clock dove


è attiva almeno 5 6
una propagazione

istruzione che ne
usufruisce
2 (add) 3 (sw)

tipo(i)
MEM-EX (rs) EX-EX (rt)
di propagazione

ID / EX.Rs $3 $3
segnali di ingresso all’unità di propagazione

ID / EX.Rt $2 $1

EX / MEM.R v.s. $1

EX / MEM.RegWrite 0 (stallo) 1

MEM / WB.R $3 v.s.

MEM / WB.RegWrite 1 0 (stallo)

MUX di propagazione
interessato
PA PB

ingresso di selezione
segnali di uscita

di propagazione

MUX PA
01 00
dell’unità

ingresso di selezione
MUX PB
00 10

AXO – prova 1 di giovedì 10 settembre 2020 – CON SOLUZIONI pagina 15 di 15

Potrebbero piacerti anche