Università degli Studi dell’Insubria
Dipartimento di Scienze Teoriche e Applicate Architettura degli elaboratori
Prof. Marco Tarini
Cognome e nome ____________________________ Matricola __________
Esercizio 1
Sia F una funzione da tre valori booleani a,b,c a un valore boolano, definita dall’espressione
F(a,b,c) = ( ( a NAND b) == ( b XOR c ) ) OR ( c AND a )
Dove il simbolo == rappresenta ovviamente l’ugualianza fra valori booleani
(a) Scrivi un’espressione equivalente ottimizzata come PdS (Prodotto di Somme)
(b) Disegna il corrispondente circuito che calcola F. Puoi usare solo porte a due ingressi.
(c) Ora il nostro committente specifica che i tre bit in ingresso a,b,c non saranno mai tutti 1 né tutti 0. Ripeti i due punti precedenti, ottimizzando il PdS e il circuito sotto quest’ulteriore ipotesi.
(d) Il nuovo circuito: è meno caro (S/N)? E’ più veloce (S/N)? Ha un consumo minore (S/N)?
Argomenta ciascuna risposta con max 1 frase. Ipotizza che tutte le porte abbiano lo stesso tempo di commutazione.
Esercizio 2
(a) Esprimi 2134 in base 2. (b) Esprimi 3.15 in base 2
Un’archiettura usa numeri in virgola mobile con 8 bit di mantissa e 8 di esponente (offset a 128), e numeri interi a 12 bit in comlemento a 2. Per quest’architettura, rispondi alle domande da (c) a (i).
Riporta, in base 10: (c) il valore del minore numero intero esprimibile. (d) e del maggiore; (e) il valore del maggiore float esprimibile; (f) del minore; (g) e il più piccolo numero float strettamente positivo (cioè >0)
(h) costruisci un caso in cui una somma fra due interi costituisce un overflow. Specifica quale numero viene ottenuto
(i) un’operazione di cambio di segno di un intero può causare overflow? Se si, riporta un caso
Esercizio 3
Si ha a disposizione il datapath mostrato a fianco (è uno di quelli visti a lezione). L’ALU dispone delle funzioni:
ADD, SUB, RSHIFT, LSHIFT
Costruire un microprogramma capace per realizzare l’operazione
SUM3 Rd, Ri, Rj, Rk
che ha l’effetto di memorizzare nella locaizone RAM individuada da Rd la somma dei tre registri inidicati da Ri, Rj, Rk.
Minimizzare il numero di micro-operazioni.
Non è necessario riportare la fase di fetch.
ALU PC
MAR MDR
IR
Reg. file R0..Rn
Temp Addr
Data
V
Z
A B
R 4
select
ALUctrl MUX
Zout Zin
Vin MDRin
Ri_in Ri_out Temp_in Temp_out
IRin ZExtout SignExtout
MDRout MARin
PCin PCout
Extender
CPU BUS
2 Esercizio 4
Un dispositivo possiede un ingresso A a 4 bit e un output B a 8 bit. Inoltre prende un bit di controllo R (Reset) e produce un ulteriore bit F (segnalazione di avvenuto overFlow).
Quando, sul fronte disendente del ciclo di clock, A vale 0, B si azzera; in caso contrario, B viene incrementato del valore attuale di A. Se questo causa overflow, F diviene 1, e lo rimane indefinitivamente (indipendentemente dai successivi valori A) fino a quando, dall’esterno, non viene settato il bit di controllo R, che azzera F.
Il reset dell’overflow avviene asincornicamente (cioè non aspettando il segnale di clock).
Progetta il circuito che realizza questo comportamento. Puoi usare i comuni blocchi funzionali visti a lezione.
Esercizio 5
Completa il programma Assembly MIPS qui sotto.
Nella sezione dati, come si vede, viene memorizzato un array “numeretti”, terminato da 0, che contiene una sequenza di numeri (di lunghezza non nota). Il programma deve scopire se nella sequenza compaia un numero di numeri 7 maggiore che non di numeri 17 (gli altri numeri non contano), e saltare alla corrispondente delle due locazioni riportate in fondo – in caso di partià, si proceda in uno qualsiasi dei due modi.
Ottimizza per quanto puoi il tuo codice, minimizzando il numero di istruzioni.
Per agevolare la scrittura, qui a destra si fornisce una tabella con la sintassi di alcune possibili istruzioni MIPS.
Scrivi solo il codice da sostituire alla parte indicata
.
data
numeretti:
.word 3 7 12 1 17 ... 0 .globl main
.text main:
<il tuo codice va qui>
piu_sette:
...
piu_diciassette:
...
la reg , etichetta load address (copia l’indirizzo nel registro)
li reg , valore load immediate (copia il valore nel registro)
lw reg , offset(reg) load word
(l’offset è opzionale) sw reg , offset(reg) store word
(l’offset è opzionale) add reg , reg , reg add (somma) addi reg,reg,valore add immediate sub reg , reg , reg subtract (differenza)
j etichetta jump
jr reg jump register
jal etichetta jump and link
bnez reg , etichetta branch on not equal to zero
beqz reg , etichetta branch on equal to zero
bgtz reg , etichetta branch on greater than zero
bgez reg , etichetta branch on greater than or equal to zero