Architettura degli Elaoratori e delle Reti Lezione 5 Circuiti cominatori notevoli F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 5 1 Comparatore! Confronta parole di n it " IN: 2 gruppi di n it " OUT: 1 it A n C " OUT = 1 se i due IN sono uguali " OUT = 0 se diversi. B n 1 C i = A i B i C = C 0 C 1... C n 1 L 5 2
Comparatore! Comparatore a n ingressi: schema circuitale a 0 0 a 0 0 a 1 a 1 1 OUT 1 OUT a n-1 a n-1 n-1 n-1 n porte XNOR + 1 AND ad n ingressi n porte XOR + 1 NOR ad n ingressi L 5 3 Decodificatore (decoder)! n ingressi, 2 n uscite! Il numero espresso sugli ingressi è usato per asserire (porre a 1) la linea di uscita di tale indice " con 4 linee di input e 16 di output (da 0 a 15), se in ingresso arriva il valore 0110, in uscita si alza la linea di indice 5 (la sesta!)! usato per inidirizzare la memoria i 1 i n o 1 o 2 n L 5 4
La funzione decoder L 5 5 Multiplexer! Operatore di selezione " IN: n linee di input (data) k linee di controllo (select) " OUT: 1 linea Il valore fornito sulla linea di controllo viene connessa all uscita la linea di ingresso selezionata. data out! Quante linee di controllo? k = ceil ( log 2 n ) 0 0 select Linee di input: n = 4 Linee di controllo: k = ceil( log 2 4 ) = 2 L 5 6
Multiplexer inario! n = 2, k = 1 " Selezione S apre la porta opportuna " Circuito logico a 3 ingressi, 1 uscita S X 0 X 1 C 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 C = SX 0 X 1 + SX 0 X 1 + SX 0 X 1 + SX 0 X 1 = = SX 0 + SX 1 L 5 7 Sintesi Multiplexer in forma canonica POS C = ( S + X 0 + X 1 )( S + X 0 + X 1 )( S + X 0 + X 1 )( S + X 0 + X 1 ) = " a = S + X # 1 $ = S + X 0 [( )( + X 1 )] ( a + X 0 ) a + X 0 = + X 1 [ ( )] = = [ + ( X 1 + X 1 ) + X 1 X 1 ] [ a] = a = = ( S + X 1 )( S + X 0 ) S X 0 X 1 C 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 L 5 8
Multiplexer (Mux) a più vie.! Una sola porta alla volta viene aperta dal segnale S. " Le porte sono mutuamente esclusive. L 5 9 HALF Adder (1 it)! Somma aritmetica tra 2 it " 2 ingressi: addendi: a, " 2 uscite: somma: s riporto: r a HA r out s Taella della verità a somma riporto 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 L 5 10
FULL Adder (1 it)! Gestisce anche il riporto in ingresso r in a " 3 ingressi: " 2 uscite: s, r OUT FA a r in r out s r out s 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 r out s = m 1 + m 2 + m 4 + m 7 r out = m 3 + m 5 + m 6 + m 7 s = ar in = ar in + ar + ar in in + ar + ar in in + ar + ar in in L 5 11 Semplificando le espressioni s = ar in = = ( a )r in + ( a + a)r in = = ( a )r in + ( a )r in = ( ) r in = a r out = ar in = = a( r in + r in ) + ( a + a)r in = = a + ( a )r in L 5 12
Implementazione circuitale s = ( a )r in + ( a )r in = a r out = a + ( a )r in ( ) r in r in r out a s L 5 13 Moltiplicazione inaria 1 1 0 1 1 x (27 10 ) 1 1 1 = (7 10 ) 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 Moltiplicando Moltiplicatore 1 1 0 1 1 1 0 1 1 1 1 0 1 (189 10 ) Prodotto! Come fare il calcolo con circuiti logici? " Possiamo scomporre l operazione in due stadi: " Primo stadio: prodotti parziali si mette in AND ciascun it del moltiplicatore con i it corrispondenti del moltiplicando " Secondo stadio: somme si effettuano le somme (full adder) dei it sulle righe contenenti i prodotti parziali L 5 14
La matrice dei prodotti parziali In inario i prodotti parziali sono degli AND L 5 15 Il circuito che effettua i prodotti L 5 16
Somma prime 2 righe dei prodotti parziali 1 0 1 1 x 0 1 1 1 = 1 1 1 1 0 1 1 + 1 0 1 1 1 1 0 0 0 0 1 + 1 0 1 1 1 1 0 1 1 0 1 L 5 17 Somma della terza riga 1 1 0 1 1 x 1 1 1 = 1 1 1 1 1 1 1 0 1 1 + 1 1 0 1 1 1 1 0 1 0 0 0 1 + 1 1 0 1 1 1 0 1 1 1 1 0 1 L 5 18
Somma prodotti parziali circuito completo Overflow: A e B su: N it # P su: 2N it L 5 19 Valutazione del cammino critico! N = 4 " Ritardo AND = 1 " Ritardo HA = 1 " Ritardo FA = 3 1! Cammino critico = 20 8 5 2 17 17 14 11 20 20 20 17 12 6 2 1 L 5 20
ALU: Arithmetic-Logic Unit ALU: Arithmetic-Logic Unit! Esegue le operazioni aritmetico-logiche +,, x,,... and, or, not, xor, =,,...! Normalmente integrata nel processore " Inizio anni 90 # introduzione con il nome di co-processore matematico " Le ALU non compaiono solamente nei micro-processori! E un circuito cominatorio " Rappresentaile come insieme di funzioni logiche! Opera su parole (N it) " 6502, 8080, Z-80 8 it " MIPS, 80386: 32 it " PowerPC G5, Athlon64: 64 it! Struttura modulare " Blocchi funzionali da 1 it, replicati N volte L 5 21 Struttura MODULARE di una ALU ALU a N it $ N ALU a 1 it (ALU elementari) ALUop Struttura ALU elementare: a 0! Ingressi: Operandi: a k, k Riporto in ingresso: r in Selettore operazione: ALUop 0 ALU 0 y 0 a 1! Uscite: Risultato: y k Riporto in uscita: r out 1 ALU 1 y 1 a 2 ALU op 2 ALU 2 y 2 Calcolo... Selezione a N 1 N 1 ALU N 1 y N 1 L 5 22
Progettazione della ALU! Porta AND / OR " Selezionaile! Componenti: " 1 porta AND " 1 porta OR " 1 Multiplexer (MUX) a Calcolo... ALU op Selezione ALU op y a ALUop = 0 y = AND(a,) ALUop = 1 y = OR(a,) y L 5 23 FULL Adder (1 it)! Gestisce anche il riporto in ingresso " 3 ingressi: a,, r IN " 2 uscite: s, r OUT a r in full adder s r out a r in r out s 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 s = ar in = a r in r out = ar in = a + ( a )r in r in a r out s L 5 24
ALU 1 it Operazioni:! OR, AND, somma r in ALUop! ALUop: 2 it 00: s = a and 01: s = a or 10: s = a + + r in a y r out L 5 25 ALU a 32 it! Come collegare N ALU a 1 it per ottenere ALU a N it?! ALU a N it:! ALU in parallelo, ma... " Propagazione dei riporti " Limite alla velocità di calcolo Flusso dei riporti a 0 0 a 1 1 a 2 2 0 ALUop r IN r OUT r IN ALU 0 ALU 1 r OUT r IN ALU 2 r OUT y 0 y 1 y 2 a N 1 N 1 r IN ALU r N 1 OUT y N 1 Flusso di calcolo L 5 26
Sottrazione! Sottrazione addizione dell opposto: a = a + ( ) " Posso farlo con gli stessi circuiti dell addizione, ma devo costruire a partire da! Complemento a 2: = not() + 1 " Inversione logica it-a-it " Aggiunta della costante 1 : pongo r in (0) = 1 Inversione logica it-a-it: Invertitore: If (inverti=1) f = ~ else f = invertib f 0 0 0 0 1 1 1 0 1 f = XOR invertib invertib f 1 1 0 L 5 27 ALU - it i-esimo Operazioni: AND, OR, +, Propagazione riporti: r in (i) = r out (i-1) i = 1, 2, 3,...31 Addizione: r in (0) = 0, invertib = 0 invertib ALUop Sottrazione: r in (0) = 1, invertib = 1 FA r out L 5 28
Comparazione (confronto)! Comparazione: if a < then y = 1 (y = 0...01) " Fondamentale per dirigere il flusso di esecuzione (test, cicli...) if (a<) y = [ 0 0 0 0 1 ] else y = [ 0 0 0 0 0 ]! Implementazione: if ALUop = comparazione then y(i) = 0, i = 1, 2, 3,..., N 1 if (a < ) y(0) = 1 else y(0) = 0 Devo: " Imporre tutti i it di y (tranne y 0 ) a 0; " Calcolare y 0 in ase alla condizione a< L 5 29 Come sviluppare la comparazione?! IDEA: in complemento a 2, il MSB della somma (it di segno) = 1 per numeri negativi # s MSB = 1 a < a < 0 # s MSB = 1 Implementazione:! Nuovo ingresso: LESS IF:ALUop = comparazione # s i = LESS i! Operazioni: " Calcolare la differenza a (senza mandarla in uscita) " Inviare l uscita del sommatore del MSB a LESS di ALU 0 s N 1 LESS 0 " Questa uscita viene chiamata segnale di set L 5 30
ALUi con comparatore Less(i) 0 i = 1, 2, 3,... N 1 Less(0) s 31 iff (a < ) & (S = comparazione) invertib r in ALUop a i i Less(i) r out L 5 31 Overflow! Esempio decimale: " a + = c dove a,,c tutti codificati con 2 cifre decimali " a = 19, = 83 " Overflow: 19 + 83 = (1)02! Supponendo il MSB dedicato al it di segno... " 019 + 083 = 102 " L overflow modifica il MSB (in compl. a 2, dedicato al segno)! Overflow nella somma quando: a + = s, a > 0, > 0 MSB di a e = 0, MSB di s = 1 a + = s, a < 0, < 0 MSB di a e = 1, MSB di s = 0! Si può avere overflow con a e di segno opposto? L 5 32
Circuito di riconoscimento dell overflow! 3 ingressi, tutti dalla ALU N 1 : " MSB di a, e somma: a N 1 N 1 s N 1 a 31 31 s 31 overflow 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 0 a 31 31 s 31 Overflow detector over flow L 5 33 Overflow Overflow nella differenza: 019 ( 083 ) = 102! Overflow nella differenza quando: a + ( ) = s, a > 0, ( ) > 0 MSB di a e ( ) = 0, MSB di s = 1 a + ( ) = s, a < 0, ( ) < 0 MSB di a e ( ) = 1, MSB di s = 0 + : MSB di : MSB di ( ) = MSB di NOT() $ +/ : MSB di f invertib f! Utilizzando f, a valle dello XOR, anziché, il rivelatore di overflow funziona sia per la somma che per la differenza! L 5 34
Circuito di riconoscimento dell overflow! 3 ingressi, tutti dalla ALU31: " MSB di a, e somma: a 31 31 s 31 a 31 f 31 s 31 overflow 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 0 a 31 f 31 s 31 Overflow detector over flow L 5 35 Struttura ALU N 1 con Overflow detector invert_b r in ALUop a N 1 y N 1 N 1 less N 1 =0 less 0 ALU N 1 Overflow L 5 36
ALU completa a 32 it! InvertiB e r IN (0) sono lo stesso segnale Test di uguaglianza:! Operazioni necessarie " Impostare una differenza. " Effettuare l OR di tutti i it somma. " Uscita dell OR = 0 i due numeri sono uguali Operazioni possiili: " AND " OR " Somma / Sottrazione " Comparazione " Test di uguaglianza L 5 37 ALU a 32 it: struttura finale ALUop ALUop funzione 000 and 001 or 010 + (add) 110 (su) 111 set less than L 5 38