• Non ci sono risultati.

Università degli Studi dell’Insubria Dipartimento di Scienze Teoriche e Applicate Architettura degli elaboratori Compito del 20-12-2017 Prof. Marco Tarini

N/A
N/A
Protected

Academic year: 2021

Condividi "Università degli Studi dell’Insubria Dipartimento di Scienze Teoriche e Applicate Architettura degli elaboratori Compito del 20-12-2017 Prof. Marco Tarini"

Copied!
4
0
0

Testo completo

(1)

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)

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 3

a) 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)

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)

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.

.

data orig:

.word 12 -13 15 … 0 dest:

.space 84 # 20 elem più la guardia (lo 0 finale): 21x4 .text

main:

la $s1 orig # s1: indice array di input la $s4 dest # s4: indice array di output ciclo:

lw $s2 ($s1) # s2: elemento corrente

addi $s1 $s1 4 # nota: s1 va incrementato comunque bltz $s2 ciclo # se s2<0, continue (prossima iter.) sw $s2 ($s4) # memorizza s2 nell’output

addi $s4 $s4 4 # incrementa s4 (non avviene se s2<0!) bnez $s2 ciclo # se s2 non è 0, vai alla prossima ite

# (quindi, se s2==0, esci dal ciclo, # ma nota che allora lo 0 è già stato # salvato nell’output, come richiesto) fine:

# exit program li $v0 10

syscall

Riferimenti

Documenti correlati

– Soluzione: si passa alla funzione un ulteriore parametro di tipo array, che viene “riempito” con il risultato.. E i parametri di

utilizzando i blocchi funzionali standard come quelli visti a lezione (ma non, ovviamente, quello che effettua la moltiplicazione!).. Ovviamente, nessuno degli altri registri

Il programma deve calcolare il valore del massimo numero nella sequenza, e della somma di tutti i numeri della sequenza, e memorizzare questi due valori delle

(b) Un progettista ha stimato che, incrementando il costo, si può ottenere uno a scelta dei seguenti due effetti: incrementare la dimensione della cache di

Il programma deve riempire un secondo array, memorizzato alla locazione “dest” (destinazione), che contenga tutti gli elementi strettamente positivi del primo array,

Premere il tasto Start ha l’effetto di riazzerare il timer e farlo partire (il timer continua a scorrere, anche se il tasto Start viene rilasciato, fino alla pressione del

(c) Se una porta AND (a due ingressi) costa quanto 2 porte NOT, e una porta OR (a due ingressi) costa quanto 3 porte NOT (e non è disponibile nessun altro tipo di porta), quale

Quindi possiamo considerarlo come un solo array, con il doppio degli elementi.. Scandiamo il doppio degli elementi a partire dal