Lezione n.7 Il moltiplicatore binario e il ciclo di base di una CPU 1
SOMMARIO Architettura del moltiplicatore Architettura di base di una CPU Ciclo principale di base di una CPU Riprendiamo l analisi del moltiplicatore binario che avevamo iniziato a vedere nella lezione 6. Ricordiamo che usiamo un meccanismo di accumulo parziale dei risultati. Abbiamo bisogno di 1 registro a 16 bit per immagazzinare i prodotti parziali ottenuti (siamo nell ipotesi di prodotto tra due numeri a 8 bit). E possibile risparmiare sul numero di registri usati utilizzando lo stesso registro per immagazzinare in tempi diversi dati diversi, cioè sia il risultato parziale sia il moltiplicatore. Infatti: Dopo che i bit di X sono stati usati per il prodotto parziale non sono più necessari. Contemporaneamente la dimensione del prodotto parziale cresce, ed è possibile condividere la parte del registro dove è memorizzato X, per accumulare il moltiplicatore e la parte meno significativa del risultato. Esempio: Y=1.1011 X=0.0101 Passo Operazione Accumulatore Registro Q Prodotto parziale ottenuto 0 inizializzazione 0000 0000 P0 1 P0+X4*y 1011 0101 P1 2 P1*2-1 0101 1010 P2 3 P2+X3*y 0101 1010 P3 4 P3*2-1 0010 1101 P4 5 P4+X2*y 1101 1101 P5 6 P5*2-1 0110 1110 P6 7 P6+X4*y 0110 1110 P7 8 P7*2-1 0011 0111 P8 Il contenuto dell accumulatore nel caso del prodotto parziale P1 è dato da 1011*1=1011. ovvero Y*X4 perché P0=0, mentre Q contiene X. Al passo 2 viene fatta l operazione di shift a destra che comporta la perdita del quarto bit di Q (il bit 1 in rosso) e l entrata del bit 0 nell accumulatore. Il motivo è che il bit più a destra ( quello in rosso) nel contenuto del registro Q dopo che ho fatto il prodotto parziale non mi serve più, quindi faccio uno shift a destra. 2
Con questa tecnica riusciamo a risparmiare un registro a 8 bit. Era una tecnica usata da Von Neumann quando i costi hardware erano alti. Ora non si usa più. Schema del moltiplicatore binario (la struttura) EX-OR Q (7) M (0) accumulatore Registro Q Registro M Sommatore Parallelo OUTBUS INBUS Il registro M viene usato per immagazzinare Y Il registro Q immagazzina la X iniziale Q(7) è il bit più significativo di X (segno di X) e M(0) è il bit più significativo di Y (segno di Y) La porta EX-OR fa il prodotto tra i bit di segno L accumulatore immagazzina il risultato parziale Il sommatore parallelo carica i dati nell accumulatore Il segno di X lo preleviamo da Q(7) per effetto degli scorrimenti successivi a destra. Questo calcolo del segno viene fatto alla fine, cioè quando è stato già calcolato il modulo. 3
Esempio di programma RTL che riassume il funzionamento del moltiplicatore binario Si deve associare all architettura il comportamento che vogliamo che l architettura abbia. Il comportamento è la descrizione a livello RTL dell algoritmo, cioè in termini di spostamento di dati tra registri. Definizione dei registri (caso del prodotto di due numeri a 8 bit) A(0:7) registro A ad 8 bit; M(0:7) registro M ad 8 bit; Q(0:7) registro Q ad 8 bit; COUNT (0:2) registro contatore a 3 bit (3 bit perché deve contare fino a 8 prodotti parziali ); INBUS(0:7); OUTBUS(0:7) bus d ingresso e bus d uscita a 8 bit. A e Q sono registri concatenati e formano quindi un registro a 16 bit. Begin A:=0; COUNT:=0; inizializzazione dell accumulatore e del contatore INPUT M:=INBUS; carica il numeroy Q:=INBUS; carica il numero X ADD: A(0:7):=A(1:7)+M(1:7)*Q(7); primo prodotto parziale; M(1:7) è il modulo di Y mentre Q(7) la prima volta contiene il bit meno significativo di X SHIFT: A(0):=0; A(1:7).Q:=A.Q(0:6); questo permette di fare lo shift a destra; A.Q(0:6) significa tutto A e i primi 7 bit di Q, mentre A(1:7).Q significa gli ultimi 7 bit di A e tutto Q; l operazione di assegnamento indica allora che tutto A e Q(0:6) va a finire in A(1:7) e tutto Q; Q(7) è sparito perché c è stato lo shift a destra; TEST : COUNT:=COUNT+1; incremento If COUNT7 then go to ADD; FINISH : A(0):=M(0) Q(7); permette di calcolare il segno perché ora Q(7) contiene il bit di segno di X e M(0) contiene il segno di Y Q(7):=0; OUT: OUTBUS:=Q; il trasferimento del contenuto di Q è necessario perché contiene una parte del prodotto. Infatti il prodotto finale è contenuto nei registri A e Q che sono concatenati e formano un unico registro. OUTBUS:=A; i dati escono attraverso il canale d uscita. 4
Completiamo ora il progetto aggiungendo al percorso dati la parte di controllo EX-OR Q (7) M (0) accumulatore Registro Q Registro M Sommatore Parallelo OUTBUS INBUS Segnali di controllo esterni Sono le operazioni d inizializzazione del sistema Begin End Clock Unità di controllo (UC) L Unità di controllo riceve dei segnali esterni e genera dei segnali di controllo interni. Vediamo quali sono i segnali di controllo che dobbiamo inserire nel percorso dati e a cosa servono. Sono in numero di 13: C1 C2 CK Segnali di controllo interni che agiranno sul percorso dati del moltiplicatore Segnali di controllo C0 C1 C2 Operazioni A:=0 azzera A ovvero l accumulatore COUNT:=0 azzera il contatore Carica A(0) 5
C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 CALCOLATORI ELETTRONICI M:=INBUS carica Y nel registro M Q:=INBUS carica Q con X A(1:7):=ADDER carica A(1:7) con la somma parziale Ingresso 2 dell ADDER:= M and Q Scorrimento a destra di A.Q; il segnale C7 comanda lo scorrimento a destra della coppia di registri A e Q Incrementa COUNT A(0):=Cout oppure M(0) Q(7); C9 serve per far si che in A(0) venga caricato il riporto dell operazione di somma (cioè Cout) oppure l EXOR tra M(0) e Q(7). In A(0) viene caricato il riporto Cout ad ogni operazione di somma parziale. Sarà 0 se non c è alcun riporto. Solo alla fine di tutte le somme parziali viene caricato il segno. Quindi durante le fasi del calcolo della somma viene caricato Cout. Q(7):=0 BUFFER:=A carica la parte più significativa del risultato nel buffer, mantenendolo per il tempo necessario affinché l OUTBUS si liberi OUTBUS:=Q Spiegazione del segnale C9. Il segnale C9 comanda un MUX, quindi in A(0) viene caricato a seconda del valore di C9, l uscita della EXOR (segno di Y*X) oppure l uscita del sommatore parallelo, cioè il riporto Cout. 6
Cout Segno (x*y) EX-OR C7 MUX 1 accumulatore C9 Q (7) Registro Q M (0) Registro M C11 C5 Buffer 7 Sommatore Parallelo 7 Somma parziale 8 8 C4 MUX 2 C6 OUTBUS 0 M INBUS Gli ingressi del MUX 1 sono parole da 1 bit, mentre gli ingressi del MUX 2 sono parole da 7 bit. L ingresso indicato con 0 indica che al sommatore parallelo arriva una parola di 7 bit tutti a 0 cioè un vettore di zeri. Il segnale di controllo C6 fa si che all ingresso del sommatore sia presente Y (contenuto del registro M), oppure il vettore di zeri. Nel caso sia presente Y significa che il bit meno significativo di X cioè X4 vale 1 e questo comporta che il prodotto Y*X4=Y. Nel caso in cui il bit X4 valga 0 allora il prodotto Y*X4=0 e quindi al sommatore arriva il vettore di zeri. Esempio: Y 1011 X X4 0 0000 Il segnale di controllo C11 agisce come segnale di caricamento parallelo di un buffer, in pratica carica il risultato finale dell accumulatore all interno di un buffer (è un registro) e lo mantiene, in attesa di essere presentato al bus d uscita (OUTBUS). Abbiamo concluso il Moltiplicatore binario che ci serve per la descrizione della CPU. Viene ora analizzata l architettura di base di un sistema di elaborazione. 7
Architettura di base di un sistema di elaborazione Essa è formata da un unità centrale di elaborazione (CPU Central Processing Unit) e dalla memoria, che nel modello di Von Neumann immagazzina dati e istruzioni. L interazione tra questi due elementi è essenziale in un sistema di calcolo. La CPU interagisce con la memoria che contiene i dati elaborati ma anche le istruzioni che devono ancora essere eseguite. Il collegamento tra la CPU e la memoria è quindi l aspetto più critico di un sistema di calcolo. Differenza tra architettura di Von Neumann e l architettura di Harward Architettura di Von Neumann (esiste un unica memoria che contiene sia istruzioni che dati) CPU Memoria Istruzioni e Dati Architettura di Harward (la memoria dati e la memoria istruzioni sono separate). Si differenza dalla architettura Von Neumann perché ha spazi di memoria separati per la memoria di programma e la memoria dei dati con bus dati/indirizzi e controllo separati. In questo modo si aumenta la velocità di elaborazione. E molto usata nei microcontrollori e nei DSP (Digital Signal Processor processori usati per il trattamento dei segnali). 8
Write MD CPU Read MD dati Memoria Dati istruzioni indirizzi indirizzi Memoria istruzioni Può essere a sola lettura Funzionamento: 1. la cpu genera l indirizzo dell istruzione da eseguire. 2. In base all indirizzo viene selezionata la locazione corrispondente della memoria istruzioni e letta l istruzione 3. dalla memoria dati la cpu legge i dati necessari per l esecuzione dell istruzione (read Md) dopo aver specificato l indirizzo della locazione della memoria dati 4. il risultato ottenuto viene memorizzato nella memoria dati (write MD) La memoria E costituita da milioni di celle, realizzate utilizzando semiconduttori, ciascuna delle quali memorizza un bit d informazione. Normalmente queste celle non vengono lette o scritte individualmente ma sono raggruppate in locazioni di memoria da 8-16-32-64 bit (parole o word). Ogni locazione di memoria è individuata da un indirizzo e sulla singola locazione sono possibili operazioni di lettura e scrittura. 9
Decoder Indirizzi generati quasi sempre dalla CPU. In base a questi indirizzi il decoder individua nella memoria il dato che interessa Matrice di memoria Dati Controlli Segnali di controllo necessari per gestire le operazioni di lettura e scrittura I contenuti delle locazioni di memoria possono essere sia istruzioni che operandi e questi ultimi possono essere sia numeri che lettere. Le operazioni di lettura e scrittura e tutte le operazioni di temporizzazione vengono gestite dai segnali di controllo. I dati vengono mandati verso l esterno se l operazione è di lettura o verso l interno se è di scrittura. Le linee di dato consentono l ingresso e l uscita delle informazioni dalla memoria. Le linee di dato sono bidirezionali, mentre le linee d indirizzo consentono di trasmettere l informazione solo dalla CPU alla memoria, in pratica sono unidirezionali. Il ciclo di base di una qualsiasi istruzione (Instruction Cycle) L esecuzione di un istruzione si suddivide in due operazioni fondamentali/principali: 1. Operazione di fetch, vale a dire l operazione di lettura dell istruzione dalla memoria 2. Operazione di esecuzione, vale a dire lettura dei dati necessari ( acquisizione degli operandi) e svolgimento dell operazione. E l esecuzione vera e propria dell istruzione. Il ciclo fetch-esecuzione viene ripetuto ciclicamente per eseguire un programma. In sintesi: La fase di fetch consente l acquisizione della nuova istruzione. La fase di esecuzione consente lo svolgimento dell operazione. La fase di fetch è uguale per tutte le istruzioni, che ovviamente si differenziano nella fase di esecuzione. Al termine della fase di esecuzione viene eseguita la fase di fetch dell istruzione successiva. 10