Università degli Studi dell’Insubria
Dipartimento di Scienze Teoriche e Applicate Architettura degli elaboratori
Compito del 20-12-2017 Prof. Marco Tarini
Nome e cognome Matricola
Esercizio 1
Si desidera un circuito combinatorio a quattro ingressi A,B,C,D, e una uscita Z, che realizza questo comportamento: Z vale 1 se il numero binario a due cifre AB è maggiore di CD, 0 se AB è minore di CD. Al circuito non verranno mai forniti in ingresso valori di AB uguali a quelli di CD.
Realizzare il circuito, ottimizzando attraverso una mappa di Karnaugh, e sintetizzando l’espressione come somma di prodotti.
Esercizio 2
Un’architettura utilizza un formato in virgola mobile minimale, di soli 10 bit, di cui 4 di esponente (memorizzato in eccesso ad 8). L’ordine seguito è quello standard (l’esponente precede la mantissa), e si omette il primo uno della mantissa.
Specificare le rappresentazioni in questo formato dei seguenti numeri (arrotondando al rappresentabile più vicino):
(a) 0.15 (b) 200 (c) 1 (d) 0
(e) Calcolare quale numero è rappresentato da:
Esercizio 3
a) Scrivi la tabella di verità dell’espressione: (a XOR b) AND a .
b) Scrivi un’espressione equivalente che usi solo gli operatori AND, NOT, e OR.
Esercizio 4
Si supponga di avere a disposizione il datapath mostrato a fianco (è uno di quelli visti a lezione). L’ALU dispone delle funzioni:
Add: R = A+B PassB: R = B Sub: R = A – B And: R = A and B Si scriva un microprogramma che realizza una nuova operazione
RelJumpAndLink Rs Rd (salto relativo con link in RAM) avente opcode = 50, che ha l’effetto di memorizzare l’indirizzo della prossima istruzione all’indirizzo di memoria RAM indicato da Rs, e poi di incrementare l’indirizzo della prossima istruzione del valore di Rd (effettuando così il salto).
Non è richiesta la fase di fetch: il microprogramma parte dal passo 3, dopo la fase di fetch. Questa fase, come quella vista a lezione, incrementa già di 4 l’indirizzo dell’istruzione corrente.
Si ottimizzi il microprogramma, che deve essere fornito come tabella con input (l’opcode corrente, il passo, ed eventualmente gli esiti) ed output (i comandi, ed il passo successivo).
1 1 1 0 0 1 0 1 0 0
ALU PC
MAR MDR
IR
Reg. file R0..Rn
Temp Addr
Data
V
Z
A B
R 4
select
ALUctrl MUX
Zin Zout Vin MDRin
Ri_in Ri_out Temp_in Temp_out
IRin ZExtout SignExtout
MDRout MARin
PCin PCout
Extender
CPU BUS
2 Esercizio 5
Si completi il programma Assembly MIPS qui sotto, specificando cosa scrivere al posto dei due spazi indicati dalle dizioni “domanda 5A qui” e “domanda 5B qui”. Scrivere nel foglio protocollo solo il codice da sostituire in queste due parti.
Nella sezione dati, come si vede, viene memorizzato un array, alla locazione “orig” (origine), che contiene una sequenza numeri, strettamente positivi (>0) o strettamente negativi (<0), in un word ciascuno. Questo array è terminato dal valore 0.
Il programma deve riempire un secondo array, memorizzato alla locazione “dest” (destinazione), che contenga tutti gli elementi strettamente positivi del primo array, nello stesso ordine. I valori negativi devono essere semplicemente omessi. Anche questo secondo array deve essere terminato dal valore 0.
a) completare la definizione dei dati, riservando in memoria uno spazio sufficiente a memorizzare l’array di destinazione, ipotizzando che l’array di origine non contenga mai più di 20 elementi.
b) scrivere il codice che riempie l’array dest. Indizio: una soluzione ottimale richiede solo una decina fra istruzioni ed etichette.
Per agevolare la stesura del codice, sotto a destra si fornisce una tabella con la sintassi di alcune possibili istruzioni.
.
data orig:
.word 12 -13 15 … 0 dest:
<domanda 5A qui>
.text main:
<domanda 5B qui>
fine:
# exit program li $v0 10
syscall
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) move reg , reg move (copia un
registro in un altro) add reg , reg , reg add (somma fra
registri) 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
zero
beqz reg , etichetta branch on equal zero bltz reg , etichetta branch on less than
zero
beqz reg , etichetta branch on equal zero