Sei sulla pagina 1di 4

ARCHITETTURA DEL PROCESSORE

Ho deciso di scrivere una serie di articoli inerenti l'architettura del processore riferito ai primissimi
modelli (come poteva essere il Motorola 68000 o i primi pentium) illustrando i principi base di un
qualunque processore anche se oggi la realtà è molto diversa e lontana da quella che mostrerò io.
Come sappiamo i componenti principali del computer sono il processore (CPU) e la memoria tutto
il resto può essere considerato come periferica, la scheda video e audio la scheda di rete e l'hard
disk sono tutte periferiche. Quindi il cuore del computer è la CPU (central processing unit) che ha il
compito fondamentale di leggere le istruzioni (in linguaggio macchina) dalla memoria e eseguirle.
In questo articolo cercheremo di capire la logica che sta dietro ai primi processori e come sia
possibile costruire una cpu che esegua le istruzioni che noi forniamo.

IL PROCESSORE
Il processore è diviso in due unità fondamentali che sono unità di controllo o control path e unità di
calcolo o data path, l'unità di controllo interpreta (e poi vediamo cosa vuol dire interpreta)
l'istruzione presente nel registro istruzioni (IR) e in base al tipo di istruzione (mov, add, branch ecc)
genera i segnali di controllo e li invia all'unità di calcolo che li esegue.

Interfaccia di bus

dati dati

ordini
Unità di calcolo o Unità di controllo o
Data path Control path
(registri e ALU) Istruzioni macchina

Il processore è interfacciato con il resto tramite il bus cioè una serie di collegamenti elettrici tramite
il quale si possono scambiare dati, indirizzi, linee di ordini ecc...

Unità di calcolo:
L'unità di calcolo non è altro che una rete sequenziale costituita da elementi di memoria (registri
disponibili al programmatore e altri riservati al processore) e svariate reti combinatorie come ad
esempio l'ALU (gestisce le operazioni logico-matematiche).
Reg. per il
Unità di controllo Programmatore
IR R1,R2,..,Rn

Bus interno al processore

PC MAR V
B C
MDR ALU Z
MUX
4 A

FIG. 1
select

Questa è una struttura di un'unità di calcolo a un solo bus interno, le frecce grigie sono i
collegamenti (bus del processore a cui sono collegati tutti i registri) i riquadri blu sono registri e in
più vi è la ALU e il MUX e le linee a mano libera sono gli ordini che l'unità di controllo può
impartire. Vediamo tutto nel dettaglio:

i registri
PC – è il program counter registro che contiene l'indirizzo di memoria dell'istruzione corrente del
programma che si sta eseguendo

IR – registro che contiene il tipo di istruzione che si sta per eseguire (add, mov etc...)

R1,Rn – registri messi a disposizione del programmatore (quelli che si usano in assembler)

MAR – registro che è collegato tramite un bus esterno alla memoria ram e contiene l'indirizzo
del dato che si vuole prelevare dalla memoria, il dato una volta prelevato viene messo dalla
ram nel registro MDR

MDR – contiene il dato appena letto dalla memoria

V e Z– i registri V e Z sono registri di appoggio usati dalla ALU per velocizzare le operazioni in un
numero di cicli di clock minori

IMPORTANTE!!!
L'unità di controllo è collegata fisicamente all'uscita di tutti i registri (linee a mano
libera nel disegno) con un porta tri-state che funziona come un interruttore, quando
l'ordine di controllo ha stato logico 0 il registro è staccato dal bus mentre quando ha
stato logico 1 il registro è collegato al bus e impone il valore dei propri bit sulle linee
del bus.
Veniamo al punto
dopo tutta questa spiegazione vediamo come l'unità di calcolo esegue le istruzioni, immaginiamo ad
esempio che il nostro programma debba eseguire una “mov R1,R2”, tutte le operazioni sono
scandite dal clock del processore ad esempio in un ciclo di clock sul bus può essere scritto il valore
di un solo registro e qualunque registro può leggere dal bus.

Per eseguire un'istruzione questa deve prima essere prelevata dalla memoria quindi i primi 3 cicli di
clock sono uguali per qualunque istruzione assembler e gli ordini mandati dall'unità di controllo
sono i seguenti:

1 – PCout, MARin, read, select 4, add, Zin

il passo 1 consiste in questo:


viene messo a 1 l'uscita del registro PC in modo da scrivere il valore
di PC sul bus, contemporaneamente il registro MAR viene messo in
lettura dal bus e quindi si trasferisce il contenuto di PC in MAR,
poi con 'read' si invia l'ordine alla memoria di leggere l'indirizzo
contenuto nel registro MAR. Le altre operazioni servono per
incrementare il PC in modo da essere pronto a eseguire l'istruzione
successiva.

2 – Zout, PCin, WMFC


passo 2:
qui si completa l'aggiornamento del PC e poi si aspetta il dato
richiesto prima alla memoria
WMFC sta per “wait for memory function complete”

3 – MDRout,IRin
passo 3:
non appena la memoria è pronta MDR viene trasferito in IR,

Ora l'unità di controllo elabora il registro IR si accorge che contiene l'istruzione mov e produrrà i
seguenti passi di controllo. NB: da qui in poi i passi di controllo differiscono per ogni istruzione.

Per l'istruzione mov:

4 – R1out, R2in, end

questo passo dovreste averlo già capito l'uscita del registro R1 viene messo a
1 e il registro R2 viene messo in lettura dal bus. Il segnale di controllo “end”
indica che al prossimo ciclo di clock la sequenza ricomincia da capo
prelevando la nuova istruzione che sarà quella successiva perchè nei primi
due cicli avevamo aggiornato il PC in modo da averlo pronto dopo.

In conclusione
Questa illustrata prima era la sequenza di controllo per l'istruzione “mov R1,R2”, ora si dovrebbe
scrivere una sequenza di controllo per ogni istruzione assembler e per ogni tipo di indirizzamento
presente nell'istruzione. Si vede subito che un processore realizzato in questo modo non è per niente
efficiente però come primissimo approccio direi che si presta bene a scopo didattico ed è più
semplice da capire.
E come è fatta l'unità di controllo?
A questo punto resta da chiederci come è realizzata l'unità principale che emette i segnali di
controllo, non sto a disegnare lo schema ma questa consiste principalmente nel clock che scandisce
un contatore che tiene traccia del passo di controllo a cui è arrivata l'istruzione e una serie di porte
logiche (and or e not) che attivano i segnali di controllo al tempo giusto ad esempio:

riferendoci all'istruzione “mov R1,R2” di prima il segnale R1out lo creiamo con questa and:

(contatore=4) AND (IR contiene una mov)

Se ad esempio anche l'istruzione add al passo 5 contenesse R1out allora l'espressione di prima
diventerebbe:

[ (contatore=4) AND (IR contiene una mov) ] OR [ (contatore=5) AND (IR contiene una add) ]

Fine
Con questo articolo ho cercato di illustrare in grandi linee la logica che stava dietro ai primi
processori, ripeto questo non è neanche paragonabile alla realtà di oggi nel quale ci sono addirittura
più CPU all'interno dello stesso computer, più di un bus interno del processore, si usano tecniche di
pipelining per far in modo di eseguire contemporaneamente più di un'instruzione alla volta, tra il
processore e la memoria ram si inseriscono le memorie cache, sono meno capienti delle ram ma
decisamente più veloci e fanno in modo di ridurre il più possibile l'attesa del processore quando
richiede un dato alla memoria e tutta una serie di strategie tecnologiche che ogni produttore di CPU
adotta per rendere il proprio processore più veloce degli altri etc etc...
NB: se pensate che i processori vanno a circa 2 o 3 Ghz e le memorie RAM a circa 333Mhz potete
rendervi conto di quanto sia importante ridurre i tempi di attesa del processore!!!

Bene ora posso concludere!


Se qualcuno è interessato all'argomento lasciate un commento riguardo l'articolo e chiedete pure.

Un saluto da angolopc.it