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.
Svolgimento:
A B C D Z 0 0 = 0 0 X 0 0 < 0 1 0 0 0 < 1 0 0 0 0 < 1 1 0 0 1 > 0 0 1 0 1 = 0 1 X 0 1 < 1 0 0 0 1 < 1 1 0 1 0 > 0 0 1 1 0 > 0 1 1 1 0 = 1 0 X 1 0 < 1 1 0 1 1 > 0 0 1 1 1 > 0 1 1 1 1 > 1 0 1 1 1 = 1 1 X
\C \D + A \C + A B
Il circuito viene banale.
NOTA:
Esistono molte altre soluzioni equivalenti (3 gruppi di 4 elementi ciascuno).
Tuttavia, soluzioni con un numero maggiore di gruppi, o un numero minore di elementi per gruppo, non sono ottimali!
2 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
= 0.001001100…2 ≈ 0.00100110 = +1.001102 × 2-3 ↑ nb: quindi per difetto
(b) 200
= 110010002 = +1.100102 × 2+7
(nota però che, nello standard ISO, esponente = tutti 1 segnala NaN o +/- Inf)
(c) 1
= 12 = +1.000002 × 20
(d) 0
(e) Calcolare quale numero è rappresentato da:
Quindi: – 1 .101002 × 2+4 = –110102 =
– 26
Esercizio 3a) Scrivi la tabella di verità dell’espressione: (a XOR b) AND a .
a b a XOR b (a XOR b) AND a
0 0 0 0
0 1 1 0
1 0 1 1 a∙\b
1 1 0 0
b) Scrivi un’espressione equivalente che usi solo gli operatori AND, NOT, e OR.
Banalmente: a AND NOT b (v. freccia nella tabella) Accettabile anche:
riscrivere XOR, per es come:
(a XOR b) = (a OR b) AND NOT (a AND b) // “uno o l’altro, ma non entrambi”
ottenendo: ( (a OR b) AND NOT (a AND b) ) AND a
0 0 1 0 1 0 0 1 1 0 + 8 – 3 = 5 manissa
0 1 1 1 1 1 0 0 1 0 + 8 + 7 = 15 manissa
0 1 0 0 0 0 0 0 0 0 + 8 + 0 = 8 manissa
0 0 0 0 0 0 0 0 0 0 + rappresentazione speciale di +/- 0
1 1 1 0 0 1 0 1 0 0
1 1 1 0 0 1 0 1 0 0 – 12 = 8 + 4 manissa
3 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).
Svolgimento:
Input: Output:
OP code
Step Esiti Comandi Next
Step
Effetti:
50 3 X PCout MDRin Vin 4 MDR PC , V PC
50 4 X RSout MARin WRITE 5 MAR RS
50 5 X ALUCRT=Add Select4=0 RDout Zin 6 Z V + RD
50 6 X Zout PCin WMFC 0 PC Z ,
RAM[ MAR ] MDR, goto 0
Note:
Chiaramente, esistono altre soluzioni: ad es, i passi 3 e 4 possono essere invertiti (ma WRITE al passo 4).
Il PC contiene già la posizione dell’istruzione corrente incrementata di 4 (come il testo specifica, l’incremento è già avvenuto durante il fetch dell’istruzione corrente).
Gli esiti della ALU, in questo esempio, non influiscono sul comportamento della Control Unit.
Nota sulle ottimizzazioni:
1) al passo 3, PC viene copiato sia in MDR che in V, in un sol passo (V servirà al passo 5).
2) solo al passo 6 si attende che la scrittura in RAM (iniziata al passo 4) sia conclusa, con WMFC.
Infatti, è necessario farlo prima che il prossimo fetch cominci (perché questo dovrà usare il registro MAR, sovrascrivendolo), ma non prima, perché né il 5 né il 6 richiedono l’uso dei registri connessi alla RAM (MAR o MDR); posticipare WMFC significa dare più tempo alla RAM di eseguire la propria operazione senza stallare la CPU. Quindi WFMC al passo 4 o 5 non è ottimizzato.
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
4 Esercizio 5 (con un esempio di svolgimento – ma molti altre soluz sono possibili) 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.
.