Università degli Studi dell’Insubria
Dipartimento di Scienze Teoriche e Applicate Architettura degli Elaboratori
Cognome e nome Matricola
Esercizio 1 (6 pts)
(a) Scrivi un’espressione logica in seconda forma (prodotto di somme) ottimizzata che realizzi il comportamento espresso dalla tabella qui a fianco.
Sono riportati solo gli input leciti (cioè, l’espressione logica può restituire qualsiasi risultato, per gli input che non sono riportati). Usa il metodo di ottimizzazione di Karnaugh.
(b) Ipotizza che l’espressione che hai scritto nel punto precedente venga implementata in un circuito usando solo porte OR e AND a due ingressi, e porte NOT. Stima il numero totale di porte di ogni tipo che saranno necessarie. Nota: non è richiesto lo schema del circuito.
Esercizio 2 (6 pts)
Esprimi in notazione esponenziale normalizzata in base 2 le seguenti quantità:
(a) 531 (b) 1/6 (c) 32 Mega (d) 0.04 (e) 30/64 (f) 34.25
Esercizio 3 (3 pts)
Data la seguente rappresentazione in CP2 dei numeri x e y x : 0 0 1 1 0 0 1 1 0 0 1 1 y : 1 1 0 0 1 1 0 0 1 1 0 0
scrivere la rappresentazione dei loro rispettivi valori assoluti |x| e |y|, nello stesso formato.
Esercizio 4 (6 pts)
Un dispositivo timer, provvisto di tre bottoni esterni Start, Stop e Reset, e di un clock interno, fornisce 1 bit in output. Il dispositivo conta internamente i cicli di clock che avvengono dal momento in cui si preme il tasto Start, fino al momento in cui si preme il tasto Stop. Se i cicli di clock trascorsi in questo intervallo superano i cinquecento, allora l’output passa ad 1, e vi rimane fino a che non viene premuto il tasto Reset (che lo azzera di nuovo).
I tasti non possono fisicamente essere premuti contemporaneamente: al più uno è premuto in ogni momento. 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 tasto Stop).
Scrivere un circuito che prende in input i tre tasti, e restituisce il bit di output.
Si possono usare tutti i comuni blocchi funzionali combinatori e sequenziali visti a lezione (sommatori, mutex, selezionatori, registri con comando di caricamento e/o precaricamento, latch S-R, etc).
INPUT OUT - A B C D PUT 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1
Esercizio 5 (6 pts)
Si supponga di avere a disposizione il datapath mostrato a fianco (è uno di quelli visti a lezione). L’ALU dispone delle seguenti funzioni dei suoi due ingressi A e B:
Add: R = A+B Sub: R = A – B PassA: R = A PassB: R = B
IsZero: esiti = A_è_zero Cmp: esiti = A_è_minore_di_B Not: R = not A
Si scriva un microprogramma che
realizza l’operazione: LOAD_MIN rd , rs, rt (“Load the smaller”) avente opcode = 30. L’effetto di di tale operazine è quello di caricare nel registro rd il contenuto della memoria del minore dei due indirizzi rs e rt. Includere anche la fase di fetch.
Il microprogramma deve essere fornito come tabella che riporti, per ogni opcode, esiti, e passo, i comandi della Control Unit, e il passo successivo.
Esercizio 6 (6 pts)
Si completi il programma Assembly MIPS qui sotto.
Come si vede, nella sezione dati è registrata una stringa, che si può assumere contenere solo caratteri alfabetici maiuscoli.
Il tuo programma deve volgere questa stringa in minuscolo. Si ricorda che i caratteri “a” e “A” hanno codice ASCII 97 e 65 rispettivamente.
Per agevolare la stesura del codice, si fornisce qua a fianco una tabella con le sintassi di alcune possibili istruzioni.
.data
stringa: .asciiz "PIPPOPIPPO"
.globl main .text
main:
<qui il tuo codice>
fine:
# exit program li $v0 10
syscall
la reg , etichetta load address li reg , valore load immediate move regA , regB copia regB su regA lw reg , offset(reg) load word
sw reg , offset(reg) store word lh reg , offset(reg) load half word sh reg , offset(reg) store half word lb reg , offset(reg) load byte sb reg , offset(reg) store byte add reg , reg , reg add (somma) addi reg,reg,valore add immediate sub reg , reg , reg subtract (differenza)
j etichetta jump
bgez reg , etichetta branch on greater or equal than zero beqz reg , etichetta branch on euqal zero bnez reg , etichetta branch on not equal
zero