Decoder Circuito combinatorio con n input e 2 n output Traduce gli n bit di input nell equivalente valore binario, e abilita a 1 l uscita corrispondente, mentre le altre uscite sono disabilitate a 0 Esiste anche l encoder, che esegue l operazione inversa Esempio di un decoder a 3 bit:
Multiplexer Due insiemi di input n input dati log 2 n input selettori L output corrisponde al valore del dato di input selezionato dai valori dei selettori di input Multiplexer 2 a 1 (a 1 bit) e sua implementazione Multiplexer 2 a 1 (a 32 bit) e sua implementazione
Arithmetic Logic Unit Circuito combinatorio all interno del processore per l esecuzione di istruzioni macchina di tipo aritmetico/ logiche (e di confronto) Quindi l ALU deve essere in grado di eseguire: somme (add) sottrazioni (sub) istruzioni di confronto (slt, beq, bne) funzioni logiche (and, or) Vediamo come è costruita una semplice ALU
Addizionatore L ALU deve includere un addizionatore per realizzare le somme di numeri interi in complemento a 2 Potremmo costruire un unico circuito combinatorio che implementa un addizionatore a n bit dati 2n input: A n-1 A 0 B n-1 B 0 n+1 diverse funzioni di output: Rip C n-1 C 0 solo due livelli di logica, ma con porte AND e OR con molti input fan-in delle porte molto elevato (non ammissibile) Soluzione di compromesso, basata su una serie di 1-bit adder collegati in sequenza il segnale deve attraversare più livelli di logica porte con fan-in limitato (ammissibile) circuito che usa lo stesso metodo usato dall algoritmo carta e penna a cui siamo abituati
Addizionatore a singolo bit A B Rip Sum Rip_out 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Rip Rip AB 0 1 AB 0 00 01 11 10 0 1 0 1 1 0 1 0 Sum 00 01 11 10 0 0 1 0 1 0 1 1 1 Sum = ~A ~B Rip + ~A B ~Rip + A B Rip + A ~B ~Rip Rip_out Rip_out = Rip B + A B + Rip A
Porta XOR La funzione Sum non può essere semplificata ben 4 porte AND La costruzione di un addizionassero a 1 bit diventa più semplice impiegando porte XOR funzione logica che vale 0 (F) se entrambi gli ingressi sono uguali, ovvero entrambi 0 (F) o entrambi 1 (T) esempio di or esclusivo (XOR) nel linguaggio comune: o rimango a casa oppure vado al cinema A B XOR 0 0 0 0 1 1 1 0 1 1 1 0
Addizionatore a 1 bit e XOR Visto che la somma tra una coppia di bit A e B si esprime con A xor B abbiamo: Sum = A xor B xor Rip Rip_out = A B + (A xor B) Rip A B Rip Sum Rip_out 0 0 0 0 0 0 0 1 1 0 A B Rip Sum 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Rip_out
1-bit ALU 1-bit ALU usata per eseguire le istruzioni macchina seguenti: and $2, $3, $4 or $2, $3, $4 CarryIn Operation add $2, $3, $4 Operation è un segnale di controllo a 2 bit usato per selezionare quale ingresso del multiplexer deve uscire a 0 1 Result determina il tipo di operazione che l ALU deve eseguire l ALU è la tipica componente che fa parte del Datapath (Parte Operativa) del processore La Parte Controllo comanda l esecuzione delle varie istruzioni settando opportunamente i segnali di controllo dell ALU (e delle altre componenti della Parte operativa) b CarryOut 2
32-bit ALU catena di 1-bit ALU con propagazione del Carry segnali di controllo per determinare l operazione che l ALU deve eseguire Operation: propagato a tutte le 1-bit ALU
Sottrazione La 1-bit ALU precedente può essere resa più complessa per poter eseguire: sub $2, $3, $4 Operazione di sottrazione: $2 = $3 - $4 trasformata in: $2 = $3 + (-$4) (-$4) significa che bisogna prima determinare l opposto (il complemento a 2) del numero signed contenuto in $4 il complemento a 2 si ottiene 1. effettuando l inversione (complemento a 1 bit-a-bit) 2. sommando 1 l ALU deve quindi possedere i circuiti predisposti per invertire il secondo operando e sommare 1 per sommare 1, basta porre ad 1 il carry-in dell ALU Binvert Operation Istruzione 0 00 and 0 01 or 0 10 sum 1 11 sub
Componente ALU Simbolo usato per rappresentare la componente ALU nel progetto della CPU. ALU operation comprende i segnali di controllo Bnegate e Operation.
Circuiti Sequenziali I circuiti combinatori sono in grado di calcolare funzioni che dipendono solo dai dati in input I circuiti sequenziali sono invece in grado di calcolare funzioni che dipendono anche da uno stato, cioè che dipendono anche da informazioni memorizzate in elementi di memoria interni In generale, la funzione calcolata dal circuito sequenziale ad un dato istante dipende dalla sequenza temporale dei valori in input al circuito La sequenza temporale determina infatti il valore memorizzato nello stato
SR Latch L SR Latch è un circuito, composto da 2 porte NOR concatenate, che costituisce l elemento base per costruire elementi di memoria più complessi Anche se (S,R)=(0,0), gli output del latch possono comunque essere diversi L output è il valore memorizzato nel latch Verificare infatti che il latch a sinistra memorizza il valore 0, mentre quello a destra memorizza il valore 1 Non c è clock
SR Latch 1 0 1 1 0 0 1 1 1 0 Poniamo (S,R)=(1,0) per effettuare il setting del latch a sinistra il valore memorizzato passa da 0 a 1 (e viene poi mantenuto riportando S=0) Poniamo (S,R)=(0,1) per effettuare il resetting del latch a destra il valore memorizzato passa da 1 a 0 (e viene poi mantenuto riportando R=0) La combinazione (S,R) = (0,0) viene detta combinazione di riposo, perché semplicemente mantiene il valore memorizzato in precedenza La combinazione di valori (S,R)=(1,1) non deve mai esser presentata al latch
SR Latch L SR Latch è un circuito, composto da 2 porte NOR concatenate, che costituisce l elemento base per costruire elementi di memoria più complessi Anche se (S,R)=(0,0), gli output del latch possono comunque essere diversi L output è il valore memorizzato nel latch Verificare infatti che il latch a sinistra memorizza il valore 0, mentre quello a destra memorizza il valore 1 Non c è clock
Clock Il clock serve per decidere quando un elemento che contiene uno stato deve essere aggiornato Ci occuperemo di clock edge-triggered: tutti i cambiamenti di stato avvengono sui fronti di salita o discesa del segnale di clock Fronte in discesa Periodo di clock Fronte in salita I segnali in input devono essere validi (stabili) quando si incontra il fronte Il periodo di clock deve essere lungo a sufficienza per permettere ai segnali elettrici dei circuiti di andare a regime
Clock Se il periodo di clock T è espresso in sec Frequenza di clock: F = 1/T Hz (numero di cicli al secondo) Se T = 10 nsec, qual è la frequenza del clock? 1 nsec = 10-9 sec 1 µsec = 10-6 sec 1 msec = 10-3 sec Freq = 1/T = 1 / ( 10 x 10-9 ) = 10 8 Hz = 10 2 x 10 6 Hz = 100 MHz Se T = 1 nsec, qual è la frequenza del clock? 1 nsec = 10-9 sec Freq = 1/T = 1/10-9 = 10 9 Hz = 1 GHz
D Latch D =1 corrisponde al setting: S=1 e R=0 D = 0 corrisponde al resetting: S=0 e R=1 La combinazione S=1 e R=1 non può mai verificarsi A causa delle 2 porte AND, quando il clock è deasserted abbiamo che nel latch non viene memorizzato alcun valore: S=0 e R=0 (viene mantenuto il valore precedentemente memorizzato) Viene memorizzato un valore (in dipendenza del valore di D) solo quando il clock è asserted Se il segnale C fosse invertito (porta NOT aggiuntiva), il latch memorizzerebbe sul valore basso del clock (cioè quando il clock è deasserted) Quando il clock è asserted, qualsiasi cambiamento di D viene propagato in uscita (trasparenza) Un elemento di memoria edge-triggered è chiamato flip-flop. Come realizzarlo?
D Flip-Flop D C Q Q Q Serie 2 D-latch: il primo viene detto master e il secondo slave Falling triggered: per semplicità, possiamo pensare che la memorizzazione avvenga in maniera istantanea su fronte di discesa del clock C D setup time C ritardo hold time Q Q
Circuito con memoria Durante ogni periodo di clock il circuito combinatorio dovrebbe calcolare una funzione sulla base dell attuale valore dell elemento di memoria (stato del circuito) l output calcolato dovrebbe diventare il nuovo valore da memorizzare nell elemento di memoria (nuovo stato del circuito) il nuovo valore memorizzato dovrebbe essere usato come input del circuito durante il ciclo di clock successivo l elemento di memoria deve essere usato sia come input che come output durante lo stesso ciclo di clock elemento di memoria circuito combinatorio
Registri Ogni registro è costituito da n flipflop, dove n è il numero bit che costituiscono una word D 32 D C Q 32 Q Più registri sono organizzati in una componente nota come register file Il clock non entra direttamente nei vari flip-flop, ma viene messo in AND D 0 D C Q Q 0 con un segnale di controllo: write Il segnale determina se, in D 2 D C Q Q 1 corrispondenza del fronte di discesa del clock, il valore di D debba (o meno) essere memorizzato nel registro D n-1 D C Q Q n-1
Register File
Lettura dal Register File Il Register file fornisce sempre in output una coppia di registri Non significativi, se i controlli non lo sono In tal caso, i circuiti che potenzialmente potrebbero usarli, devono ignorali
Scrittura nel Register File Decoder 5 a 32 per il segnale di scelta del registro Il segnale Write (in AND con il clock) abilita solo uno dei 32 registri Se il segnale di Write è non affermato, i possibili valori spuri in input non verranno memorizzati nel Register file