Università degli Studi dell’Insubria
Dipartimento di Scienze Teoriche e Applicate Architettura degli Elaboratori
Prof. Marco Tarini
Testo con traccia della soluzione Esercizio 1 (5 pts)
Dato il circuito qui accanto:
a. Determinarne il tempo di commutazione, se ogni porta AND e OR impiega 3 ns, e ogni porta NOT 1 ns.
Risposta: 3+3+1 = 7
b. Scrivere la tabella delle verità della funzione associata.
Scrivere un’espressione equivalente in prima forma canonica., ottimizzata utilizzando le mappe di Karnaugh.
A \B + BC
A B C d =
A+B e =
\B f = C+e Z =
f ∙ d
0 0 0 0 1 1 0
0 0 1 0 1 1 0
0 1 0 1 0 0 0
0 1 1 1 0 1 1
1 0 0 1 1 1 1
1 0 1 1 1 1 1
1 1 0 1 0 0 0
1 1 1 1 0 1 1
f d
e
Esercizio 2 (5 pts)
Mostare la rappresentazione del numero –146.4 in virgola mobile, con 12 bit di mantissa e 5 bit di esponente (offset a 16), con troncamento (quindi arrotondando per difetto).
146
10= –10010010
20.4
10= –0.01100…
2–146.4
10= –146
10+ 0.4
10= –10010010.011001…
2= –1.0010010011001…
2x 2
7 (forma canonica)1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 1 1 1
segno (neg.)
mantissa
(tutti i bit, omettendo il “1 virgola”)
esponente (7 + 16)
Determina quale valore viene effettivamente rappresentato (usando il procedimento inverso).
x = –1.001001001100
2x 2
7= –10010010.01100
2= –10010010
2+ 0.01100
2= –146 + 1/4 + 1/8
= –146 + 0.25 + 0.125 = –146.375
Oppure:
= –10010010
2+ 0.011
2= –146 + 011
2/ 2
3= –146 + 3 / 8
= –146.375
Esercizio 3 (2 pts)
Disegnare un circuito che implementa una funzione OR (a due ingressi) usando solo porte NOR .
Spiegazione: NOT (A NOR B) = ( A OR B )
Ma il NOT lo posso fare con NOR: (A NOR A ) è lo stesso di ( NOT A).
Quindi… A OR B = (A NOR B) NOR (A NOR B)
Esercizio 4 (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 = isZeroA Not: R = not A
Si scriva un microprogramma che realizza l’operazione: JALI imm (“Jump and link to immediate”) avente opcode = 22. L’effetto di tale operazine è quello di memorizzare il Program Counter corrente nel registro 31, e di saltare all’istruzione indicata dal campo immediate. Il microprogramma deve includere la fase di fetch.
OP- Code
Step
(μPC) Esiti Controlli Next
Step (sigificato inteso):
X 0 X MAR_in, PC_OUT
ALUcrt = PassB Read
1 MAR PC
X 1 X PC_out, PC_in,
sel4, ALUcrt = SUM, WFMC
2 PC PC + 4 MDR RAM[ MAR ] X 2 X MDR_out_B , IR_in,
ALUcrt = PassB
3 IR MDR
22 3 X PC_out, R31_in, ALUcrt = PassB
4 R31 PC
22 4 X PC_in IMM_out ALUcrt = PassB
0 PC imm (che è parte di IR)
Note:
Passo 0 1 2= istruction fetch (nota che l’opCode non è rilevante, infatti vale X (“qualsiasi valore”) Ogni scrittura di registro passa per il Bus C.
ad es, nel passo 3, il PC viene copiato nel Bus B, da qui entra nella ALU come secondo parametro, che lo riproduce inalterato in uscita. Dall’uscita della ALU, il valore di PC viene riversato nel bus C da dove viene copiato in R31.
In questo es, gli esiti non sono mai rilevanti, infatti sono tutti X (“qualsiasi valore”)
Esercizio 5 (4 pts)
Realizzare un circuito sequenziale per controllare un dispositivo provvisto di lampadina LED.
L’uscita U del circuito determina se la lampadina è accesa. Il dispositivo ha due stati: disattivato e lampeggiante. Quando è disattivato, la lampadina rimane spenta. Quando è lampeggiante, la lampadina alterna fra accesa e spenta una volta ogni ciclo di clock.
Il dispositivo è provvisto di un solo tasto, collegato direttamente all’unico input del circuito (oltre al clock). Questo segnale alterna fra i due stati del dispositivo.
Si possono usare tutte le comuni porte (AND, OR, XOR, NOT…) e i blocchi funzionali sequenziali (latch, flip flop sincronizzati, etc) o combinatori.
Note:
Il bit A registra lo stato del dispositivo. Alterna fra 0 e 1 quando input vale 1.
Il bit B registra la fase del blink (acceso/spento): alterna fra 0 e 1 ad ogni ciclo di clock.
La lampadina è accesa quando entrambi sono in fase ON.
Questa è solo una delle tante possibili soluzioni.
Notare, tuttavia, che un solo bit di stato non può essere sufficiente.
Esercizio 6 (3 pts)
Si disegni il circuito di un bistabile SR. Si ricorda che tale latch prende in input un segnale S (set) e uno R (reset), e restituisce in uscita un valore corrente Q e il suo negato \Q. Quando S vale 1, il valore di Q viene messo a 1. Quando il R vale 1, il valore di Q assume 0. Quando entrembi valgono 0, il valore di Q rimane inalterato.
Soluz: vedere lucidi
Esercizio 7 (6 pts)
Si completi il programma Assembly MIPS qui sotto.
Ipotizzare che nella sezione dati sia stato memorizzato un array che contiene un sequenza di un certo numero di valori interi strettamente positivi (maggiori di 0), memorizzati in altrettanti words.
L’array è terminato dal valore speciale 0.
Al termine del programma, il registro s0 deve contenere il maggiore di questi valori, oppure 0 se non è memorizzato alcun valore nell’array.
Indizio: bastano meno di una dozzina fra istruzioni ed etichette.
Per agevolare la stesura del codice, si fornisce qua a fianco una tabella con le sintassi di alcune possibili istruzioni.
Scrivere solo il codice da sostituire alla parte indicata in rosso.
Note: nella soluzione qui sotto si usano tre registri:
t0: memorizza l’indirizzo del dato da leggere t1: il dato letto
s0: il valore del massimo fra tutti i dati letti.
Ad ogni iterazione, si legge un dato dall’indirizzo t0 e lo si mette in t1.
Se t1 0, si interrompe il ciclo (se questo avviene al primo ciclo, s0 mantiene il suo valore iniziale, cioè 0 – come richiesto).
Altrimenti, si paragona t1 con s0: se è maggiore, t1 è il nuovo valore di s0. Il paragone viene fatto sottraendo t1 da s0 e testando se la differnza (cioè t2) è maggiore di 0. L’uguaglianza non conta:
se t1 e s0 sono uguali, si può sovrascrivere s0 con t1 oppure no.
.
data dati:
.word <qui verranno messi i dati>
.globl main .text
main:
la t0 dati li s0 0
ciclo:
lw t1 (t0) addi t0 t0 4 jeqz t1 over sub t2 s0 t1 bgtz t2 ciclo move s0 t1 j ciclo over:
# 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)
move regA , regB copia il registro B nel registro A
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
bgez reg , etichetta branch on greater or equal than zero bgtz reg , etichetta branch on greater than
zero
bnez reg , etichetta branch on not equal zero
beqz reg , etichetta branch on equal zero