SECONDA PROVA INTERMEDIA DEL MODULO DI 5 giugno 2015 NOME: COGNOME: MATRICOLA: ESERCIZIO 1 (12 punti) 1. (5 punti) Si scriva una funzione Assembly MIPS, chiamata paridispari che, ricevendo un intero x non negativo in $4 scriva in $5 il valore 1 se x è dispari, 0 altrimenti. Si usino solo le istruzioni MIPS elencate nelle dispense del corso. La funzione non deve alterare il valore in $4 dopo l elaborazione del risultato. 2. (7 punti) Si scriva un programma Assembly MIPS che scriva nella locazione di memoria 1024 il numero di elementi dispari in un vettore v. Il vettore è formato da interi non negativi eccetto l ultimo, negativo, che non dovrà far parte del conteggio degli elementi dispari. Si usi la funzione paridispari sviluppata nel quesito precedente. ESERCIZIO 2 (7 punti) Si considerino i numeri 201.75 e 205.51. 1. (2 punti) Rappresentare i due numeri nel formato binario, considerando un campo complessivo di 32 bit: a. In virgola fissa, con parte frazionaria di 12 bit e bit di segno. b. In virgola mobile, con mantissa frazionaria e normalizzata rappresentata in segno e valore 1.M ed esponente a 8 bit in eccesso 128. 2. (3 punti) Sommare i due numeri rappresentati in virgola mobile seguendo i passi dell'algoritmo usato nei calcolatori (senza dimenticare il bit implicito!). 3. (2 punti) Indicare a quanto ammonta in percentuale la perdita di precisione eventuale nella rappresentazione della somma in virgola mobile rispetto al valore atteso. ESERCIZIO 3 (6 punti) Si progetti una ALU utilizzando un parallel adder e delle opportune reti logiche, descrivendo il relativo schema e realizzazione circuitale con le caratteristiche indicate dalla seguente tabella di verità: s1 s0 F 0 0 A 0 1 A-B 1 0 B-A 1 1 B ESERCIZIO 4 (8 punti) L'ampiezza della linea dati del bus di un calcolatore è pari a 32 bit. La frequenza del clock della CPU è di 1.25 GHz. 1) (3 punti) Ipotizzando che il bus sincrono abbia la stessa frequenza di clock della CPU e la durata di una trasmissione sul bus sia pari a 4 cicli di clock, e che il tempo di ciclo della memoria sia pari a 40 cicli di clock, illustrare chiaramente il protocollo di lettura su bus sincrono utilizzando l opportuno grafico, indicando il tempo complessivo di trasferimento di una parola di 32 bit. 2) (3 punti ) Se le istruzioni di CPU necessarie ad effettuare il trasferimento dati da una periferica alla memoria, nel caso in cui i trasferimenti periferica-calcolatore vengano gestiti mediante IO da programma, richiedono nel complesso 20 cicli di clock per essere eseguite tutte, calcolare la massima velocità di trasferimento (in bit/s) fra periferica e calcolatore che è possibile raggiungere, effettuando i trasferimenti mediante IO da programma. 3) (2 punti) Calcolare la massima velocità di trasferimento dati (in bit/s) nel caso in cui il trasferimento avvenga in DMA.
Soluzioni ESERCIZIO 1 Parte 1. Ci limitiamo a memorizzare nello stack $4 dato il vincolo posto dal testo di non alterarlo permanentemente durante il processo di elaborazione. paridispari: addi $29, $29, -4 sw $4, 0($29) muli $4, $4, 2 15 lui $4, 0 move $5, $0 beq $4, $5, ispari addi $5, $0, 1 ispari: lw $4, 0($29) addi $29, $29, 4 jr $31 Parte 2. Utilizziamo tre registri: $9 per l offset di v, $11 per la condizione v[i]<0, $12 per il conteggio. v[i] viene memorizzato direttamente in $4 in modo da aver già pronto il passaggio dei parametri per paridispari. main: move $9, $0 move $12, $0 lw $4, v($0) for: slt $11, $4, $0 bne $11, $0, exit jal paridispari add $12, $12, $5 addi $9, $9, 4 lw $4, v($9) j for exit: sw $12, 1024($0)
Esercizio 2 Parte 1. I due valori tradotti in base due sono: 201.75 11001001.11 205.51 11001101.1000001010001111 Sia in virgola mobile che in virgola fissa si ha una perdita di precisione sul secondo numero. Infatti in virgola fissa, con 12 bit di parte frazionaria si ha: Segno Parte intera Parte frazionaria 0 0000000000011001001 110000000000 0 0000000000011001101 100000101000 Per la virgola mobile abbiamo 201.75 1.100100111 * 2 7 205.51 1.10011011000001010001111 * 2 7 Da cui: 7 rappresentato a 8 bit in eccesso 128 7+128=10000111 Segno Esponente Mantissa 0 10000111 10010011100000000000000 0 10000111 10011011000001010001111 Parte 2. La somma dei due valori passa per: - Allineamento delle mantisse, non necessario in quanto i due valori hanno eguale esponente - Somma delle mantisse, con bit implicito: 01.10010011100000000000000 + 01.10011011000001010001111 = 11.00101110100001010001111 - Ridimensionamento dell esponente del risultato: 1.10010111010000101000111 * 2 8 Segno Esponente Mantissa 0 10001000 10010111010000101000111 Parte 3. Andiamo a rappresentare il valore ottenuto in base 10: 1.10010111010000101000111 * 2 8 = 110010111.010000101000111 407.258026123046875 Il valore atteso era 407.26. La perdita di precisione è dunque del 4.85 * 10-4 %.
Esercizio 4 Soluzione 2) La durata di un ciclo di clock è pari a 1/(1.250 GHz) = 0.8 ns La lettura su un bus sincrono avviene secondo il protocollo seguente: Segnale di READ sulla linea di controllo e contemporaneamente l indirizzo della locazione in cui risiede il dato sulla linea indirizzi: 4 cicli di clock = 3.2 ns Lettura della parola dalla memoria: 0.8*40 = 32 ns Trasferimento della parola dalla memoria: se la parola da leggere ha ampiezza pari a 32 bit trasferimento della parola = 3.2 ns Tempo totale per leggere una parola dalla memoria = (6.4 + 32) ns = 38.4 ns 3.2 ns 32 ns 3.2 ns CLOCK READ ADDRESS DATA 2) Sono necessari 20 cicli di clock per trasferire un blocco di 32 bit, cioè si trasferisce un blocco con la frequenza di 1.25/20 GHz. La massima velocità di trasferimento è dunque pari a (32 1.25 10 9 )/20 bit/s = 2 10 9 bit/s. 3) In DMA è possibile trasferire un blocco per ogni ciclo di clock (modalità block transfer ), quindi la velocità sarà 20 volte maggiore del caso precedente. Pertanto la massima velocità di trasferimento è pari a (32 1.25 10 9 ) bit/s = 40 10 9 bit/s.
ESERCIZIO 3 Per il circuito e le funzioni circuitali si vedano le dispense del corso. In funzione delle operazioni richieste si hanno i valori seguenti per gli operandi e il riporto in ingresso: s1 s0 F A B cin 0 0 A A 0 0 0 1 A-B A B 1 1 0 B-A A B 1 1 1 B 0 B 0 s1s0 Ai 00 01 11 10 0 1 1 1 1 A new i = s 1 A i + s 1 s 0 A i s1s0 Bi 00 01 11 10 0 1 1 1 1 B new i = s 1 s 0 B i + s 1 B i c in = s 0 s 1 L esercizio per essere completato richiede il disegno su porte logiche dei tre circuiti di cui sopra, la cui realizzazione si lascia allo studente.