Architettura della CPU

La CPU

L'elemento fondamentale di un sistema di elaborazione, come proposto da Von Neumann, è la CPU (Central Processing Unit)

Nel corso dei decenni l'evoluzione delle CPU è stata enorme in termini di capacità di elaborazione e velocità, ma la struttura interna, cioè l'architettura, ha mantenuto le caratteristiche e le funzionalità evidenziate nella figura sotto.

Schema a blocchi della CPU

Si possono individuare i seguenti blocchi:

  • CU (Control Unit): coordina e gestisce le operazioni interne dei vari blocchi in base ai segnali ricevuti dall'esterno e alle istruzioni da eseguire;

  • ALU (Arithmetic Logic Unit): esegue tutte le operazioni logico-matematiche necessarie richieste dall'unità di controllo;

  • REGISTERS: piccole aree di memoria (le dimensioni massime dipendono da quanti bit può elaborare simultaneamente l'unità di controllo) molto veloci che conservano i dati da elaborare e le informazioni relative alle operazioni da eseguire durante l'esecuzione delle istruzioni;

  • CACHE interna: area di memoria nella quale sono inserite le istruzioni successive a quella in corso di esecuzione, velocizzando così le operazioni; è organizzata su più livelli (L1, L2, ecc.) in base alla velocità di accesso e alla frequenza d'uso;

  • LCU (Logic Control Unit): insieme di circuiti che trasformano gli impulsi elettrici provenienti dall'esterno in segnali utili per l'unità di controllo e trasformano in impulsi elettrici i comandi provenienti dall'unità di controllo;

  • MI (Memory Interface): insieme di circuiti che si occupa di fornire ai bus esterni di comunicazione (dati e indirizzi) gli impulsi necessari per le comunicazioni con la memoria e con le periferiche e di trasformare gli impulsi ricevuti dall'esterno in segnali utili per l'unità di controllo;

  • BUS interno (o CPU bus): insieme di collegamenti elettrici che consente di trasferire dati e indirizzi tra i vari blocchi del microprocessore.

I Registri

Un registro è una piccola e veloce memoria interna alla CPU.

Dal punto di vista tecnologico, un registro è un insieme di elementi fisici bistabili, detti bit.

Il termine bit è una contrazione di Binary digit e rappresenta la più piccola unità di memorizzazione di un elaboratore che può assumere solo due valori (in genere 0 e 1)

Poiché ciascun elemento ha due configurazioni stabili possibili, per cui per convenzione sono associati i simboli 0 e 1, un registro formato da n bit è in grado di assumere 2n2^n configurazioni di stato diverse.

Nella figura sotto un registro di 16 bit (contiene la sequenza di bit, 0001 1000 0110 0011)

Registro a 16 bit

Lo stato di un registro, cioè la configurazione dei suoi bit, rappresenta l'informazione che vi è memorizzata; essa è conservata fino a quando non la si altera.

Su un registro si può effettuare l'operazione di scrittura, che consente di depositare i bit che compongono l'informazione, e l'operazione di lettura, che permette di acquisire dall'esterno il valore dei bit memorizzati.

Anche i registri hanno attraversato un'evoluzione negli anni e ne sono aumentati di numero e dimensione, crescendo col le potenze di 2: inizialmente registri a 8 bit, poi 16, 32 , fino allo standard attuale a 64 bit.

I registri fondamentali, presenti in tutte le CPU (pur con nomi differenti a seconda dell'azienda produttrice di microprocessori), sono presentati nella figura sotto.

Architettura di una generica CPU con registri fondamentali

Le linee rosse rappresentano i bus su cui viaggiano i segnali di controllo, mentre le linee blu rappresentano i bus su cui viaggiano dati e indirizzi.

Vediamo lo scopo di ciascun registro:

  • AR (Address Register): memorizza gli indirizzi per gli accessi in memoria (dunque solo dalla CPU verso la memoria).

  • DR (Data Register): memorizza i dati provenienti:

    • dalla memoria diretti alla CPU;

    • dalla CPU diretti alla memoria;

  • IR (Istruction Register): memorizza il codice operativo (opcode) dell'istruzione da eseguire. Sulla base dell'opcode, l'unità di controllo capisce quale operazione deve essere eseguita e ne comanda l'esecuzione.

  • PC (Program Counter): memorizza l'indirizzo della prossima istruzione da eseguire.

  • SR (Status Register): memorizza, tramite una serie di flag, lo stato del processore successivo all'esecuzione dell'ultima operazione. I suoi bit assumono valore 0 o 1 in base al risultato dell'operazione svolte dal processore.

  • SP (Stack Pointer): memorizza l'indirizzo top dello stack. Lo stack è un'area della memoria in cui i dati sono letti/scritti in modalità Last-In-First-Out (LIFO). Tipicamente si usa per salvare l'indirizzo di ritorno della subroutine (funzioni o procedure) chiamate dal main program. L'ultima subroutine chiamata è la prima ad essere finita e per tornare al main program serve l'indirizzo di ritorno, salvato in cima alla pila (stack) e puntato da SP.

  • R0,..., Rn: registri di lavoro (o registri generali) che memorizzano i risultati temporanei in ingresso e in uscita dall'ALU.

Il CICLO MACCHINA

La CPU ha il compito di eseguire una sequenza di istruzioni (un programma).

Prima preleva l'istruzione insieme a eventuali dati dalla memoria esterna (la RAM) e carica tutto negli opportuni registri. Poi l'ALU elabora l'istruzione e mette a disposizione il risultato in un registro dedicato o in memoria.

Tutto questo rappresenta un ciclo macchina o fetch-execute cycle.

Schema a blocchi del ciclo macchina

Le fasi durante le quali la CPU compie un intero ciclo sono cinque e si ripetono in sequenza fino al termine del programma:

  1. IF (Instruction Fetch): lettura dell'istruzione da memoria;

  2. ID (Instruction Decode): decodifica dell'istruzione e lettura dati dai registri;

  3. EX (Execution): esecuzione dell'istruzione;

  4. MEM (Memory): scrittura del risultato in memoria (solo per certe istruzioni);

  5. WB (Write Back): scrittura del risultato nel registro opportuno e aggiornamento dello stato.

Gli attuali microprocessori superano la suddivisione delle istruzioni in cinque fasi. E' possibile frazionare la fasi del ciclo in sequenze di micro-operazioni, ognuna di una complessità comparabile alle altre, che sono ripetute identicamente su flussi continui di dati. Ottimizzando i microprocessori, ogni micro-operazione è eseguita in un ciclo di clock.

Un ciclo macchina è così costituito da una sequenza di fasi, ognuna a sua volta costituita da micro-operazioni eseguite dalla CPU. La durata di una micro-operazione prende il nome di cycle time ed è comunemente indicata con tCPUt_{CPU} .

ESEMPIO

Frequenza di clock = 2GHz

tCPUt_{CPU} = 0,5 ns (nanosecondi)

Il valore 1/tCPU1 / t_{CPU} è la frequenza di clock della CPU, misurata in gigaherz (GHz).

Nella figura sotto sono mostrate tre istruzioni eseguite in sequenza, in cui ogni intervallo dell'asse del tempo rappresenta un tCPUt_{CPU}, che per semplicità supponiamo corrispondere alla durata di una fase (anche se sarebbe più realistico che corrispondesse alla curata di una delle micro-operazioni in cui è suddivisa ogni fase).

Se ogni fase ha un tCPUt_{CPU} di 0,5 ns, occorreranno 7,5 ns ( = 3 istruzioni * 5 fasi * 0,5 ns) per eseguirle.

Ciclo macchina sequenziale

Il flusso di esecuzione dei cicli macchina coinvolge tutti i registri che abbiamo visto trattando la CPU.

Il flowchart nella figura sotto mostra i passi principali del ciclo e i registri coinvolti (i blocchi tratteggiati indicano le azioni non obbligatorie realizzate a ogni ciclo).

FASE 1: IF

  • L'indirizzo della prima istruzione viene caricato nel Program Counter e poi da quasto nell'Address Register.

  • L'istruzione è prelevata (fetch) dalla memoria e caricata nell'Instruction Register (anche eventuali dati vengono caricati nel Data Register).

  • Il Program Counter viene incrementato al fine di puntare alla successiva istruzione da eseguire. La posizione dell'istruzione successiva è (salvo nelle istruzioni di salto) implicita; il programma è eseguito in sequenza e quindi l'indirizzo dell'istruzione successiva corrisponde all'indirizzo della prima istruzione successiva all'istruzione corrente.

FASE 2: ID

L'opcode dell'istruzione è decodificato e in base a esso si caricano nei registri di lavoro (R0, ..., Rn) gli operandi necessari all'istruzione e si attivano le microcircuiterie necessarie a svolgere l'operazione richiesta.

FASE 2: EX

Le elaborazioni previste dall'opcode dell'istruzione sono eseguite nell'ALU, sfruttando i registri di lavoro (R0, ..., Rn) per eventuali risultati parziali.

FASE 4: MEM

Consiste nell'eventuale scrittura del risultato di un'operazione in memoria (per esempio in caso di assegnamento di valori a variabili del programma) o verso le periferiche.

FASE 5: WB

Il risultato dell'esecuzione dell'istruzione viene scritto nel Data Register e lo stato del processore a seguito dell'esecuzione viene settato nello Status Register.

Flowchart del ciclo macchina

Esercizi

A) Considera la seguente situazione:

Drawing

Esegui le seguenti istruzioni e rispondi alle domande:

  1. Prendi il dato contenuto nella locazione di indirizzo D000 e mettilo in Registro A.

    Registro A = ...............................

  2. Prendi il dato contenuto nella locazione di indirizzo D001 e mettilo in Registro B.

    Registro B = ...............................

  3. Prendi l'istruzione contenuta nella locazione di memoria in cui l'indirizzo è in PC e mettila in IR

    IR = .............................................

  4. Supponendo che l'istruzione appena letta sia A - B, esegui l'istruzione. Se il risultato è minore di 0, metti il risultato nella locazione di memoria di indirizzo D002; se è maggiore o uguale a 0, mettilo nella locazione di memoria di indirizzo D003 (i numeri in memoria sono rappresentati in complemento a 2).

  5. Somma 1 al contenuto di PC e metti il risultato in PC . Prendi l'istruzione contenuta nella locazione il cui risultato è in PC è mettila in IR.

    IR = ...........................................

B) Determina la dimensione minima di un bus indirizzi utile a indirizzare 8kbyte.

C) Determina l'indirizzo minimo e l'indirizzo massimo delle locazioni di una memora con capacità 256 kbit e locazioni di 1 byte.

D) Una memoria contiene complessivamente 232 bit. Quante celle da 1 byte si possono avere, e quante da 4 byte? (esprimi i calcoli mantenendo le potenze di 2)

E) Se l'ultima cella di memoria ha indirizzo FFFFh e ogni cella è di 8 bit, quanti byte contiene la memoria? Quanti bit? Quante word? (parole di 2 byte)

Last updated