Nell’articolo di oggi analizzeremo come la ALU esegue le operazioni.
Negli articoli precedenti abbiamo visto:
- Come funziona una CPU: progetto di circuiti logici #0
- Come funziona una CPU: Flip-Flop SR asincrono #0.1
- Come funziona una CPU: Flip-Flop sincrono #0.1.1
- Come funziona una CPU: Flip-Flop D #0.1.2
- Come funziona una CPU: Flip-Flop Master-Slave #0.1.3
- Come funziona una CPU: Modello di Huffman #0.2
- Come funziona una CPU: progetto di circuiti sequenziali sincroni #0.2.1
- Come funziona una CPU: progetto dei circuiti logici #0.3
- Come funziona una CPU: porte logiche operanti su parole #0.3.1
- Come funziona una CPU: multiplexer #0.3.2
- Come funziona una CPU: decodificatore #0.3.3
- Come funziona una CPU: codificatore (encoder) #0.3.4
- Come funziona una CPU: codificatore prioritario (priority encoder) #0.3.4.1
- Come funziona una CPU: sommatore full-adder #0.3.5
- Come funziona una CPU: sommatore Ripple Carry Adder #0.3.5.1
- Come funziona una CPU: sommatore seriale #0.3.5.2
- Come funziona una CPU: Sommatore con carry-lookahead #0.3.5.3
- Come funziona una CPU: ALU spiegata in modo semplice #0.3.5.4
- Come funziona una CPU: comparatore #0.3.5.5
- Come funziona una CPU: registro a m-bit #0.3.6
- Come funziona una CPU: registro a scalamento (Shift Register) #0.3.6.1
- Come funziona una CPU: contatore semplice #0.3.7
- Come funziona una CPU: contatore asincrono (ripple counter) #0.3.7.1
- Come funziona una CPU: contatore sincrono #0.3.7.2
- Come funziona una CPU: bus spiegato in modo semplice #0.3.8
- Come funziona una CPU: introduzione alla cpu #0.4
- Come funziona una CPU: architettura base di una CPU #0.4.1
- Come funziona una CPU: operazioni fondamentali CPU #0.4.2
Facendo riferimento alla figura sottostante immaginiamo di voler eseguire l’operazione di somma tra 2 registri R5 ed R6, andando a scrivere il risultato in un terzo registro R7. L’unità di controllo dovrà quindi utilizzare il registro Y connesso al primo ingresso della ALU (il cui altro ingresso è collegato al Bus) per memorizzare il primo operando. Il secondo operando invece, arriverà direttamente al secondo ingresso della ALU.
Di seguito riportiamo la sequenza di operazioni gestite dall’unità di controllo:
- acquisizione e trasferimento di R5 in Y;
- trasferimento di R6 sul Bus interno, in modo che possa giungere all’ingresso della ALU;
- comunicazione alla ALU del tipo d’istruzione da eseguire (somma in questo caso);
- memorizzazione in Z del valore prodotto in uscita dalla ALU;
- trasferimento del risultato sul Bus interno;
- acquisizione del risultato dal Bus interno e conseguente scrittura dello stesso in R7;
L’unità di controllo deve quindi attivare il segnale di controllo della ALU che specifichi l’operazione di somma, deve attivare il segnale di Load Zin di Z per consentire a quest ultimo di ricevere in ingresso l’output della ALU, deve attivare il segnale Zout e anche il segnale R7in per memorizzare in tale registro il risultato finale.
N.B. Bisogna evitare assolutamente che si crei un ciclo tra ALU e Bus interno, violando così il vincolo di assenza di cicli nei circuiti combinatori ben formati (d’altronde la ALU è un circuito combinatorio). Esso si creerebbe in assenza del registro Z che ”cattura” e trattiene l’output della ALU, in attesa dell’attivazione del segnale Zout. Si noti inoltre che il registro Y ha solo un segnale di ”in” mentre il registro Z ha sia un segnale di ”in” che un segnale di ”out”.
Riassumiamo qui di seguito la sequenza di segnali attivati dall’unità di controllo:
- R5out;
- Yin;
- R6out;
- Add;
- Zin;
- Zout;
- R7in;
Con ”attivare un segnale” s’intende porre il segnale ad 1. Ogni segnale, dopo esser stato portato ad 1, deve essere riportato a 0 (rispettando opportuni intervalli di tempo in modo da consentire la corretta esecuzione delle istruzioni). Ad ogni periodo di Clock l’UC genera i segnali di controllo necessari perché l’unità funzionale esegua un’operazione elementare, detta microistruzione. Ad ognuna di esse corrisponde l’attivazione di 1 o più segnali di controllo. Per eseguire una qualunque istruzione è necessario un certo numero di microistruzioni, ognuna corrispondente a quanto eseguito dal processore in un periodo di Clock. Ciò vuol dire che, per eseguire la precedente istruzione, sono necessari 7 periodi di Clock (1 per microistruzione).
Iscriviti ai nostri gruppi Telegram
Link utili