# Microprogrammazione

La microprogrammazione è una tecnica utilizzata per l'implementazione dell'unità di controllo della CPU, il dispositivo in grado di controllare l'esecuzione di istruzioni in linguaggio macchina, di interpretare ogni istruzione in linguaggio macchina tramite una sequenza di micro-operazioni eseguite direttamente dall'hardware, e di generare nella giusta sequenza i segnali di controllo che provocano l'esecuzione di ogni operazione elementare. Essa cominciò ad avere successo alla fine degli anni cinquanta grazie a Maurice Wilkes. Un approccio differente a quello classico di Wilkes è stato oggetto dell'attività di Giovan Battista Gerace nello sviluppo della Calcolatrice Elettronica Pisana.

## Implementazione

L'implementazione dell'unità di controllo può avvenire in due modi:
* Implementazione cablata: i circuiti di controllo interpretano il codice operativo e inviano segnali per l'esecuzione dell'operazione; questa implementazione viene chiamata “hardwired”.
* Implementazione microprogrammata: ad ogni codice operativo si fa corrispondere l'indirizzo di inizio di un microprogramma.
Nell'implementazione microprogrammata la fase di fetch e le fasi di execute possono essere descritte in un linguaggio di microprogrammazione.
Ad ogni istruzione macchina viene associato un microprogramma che è formato da una sequenza di microistruzioni. Esse sono formate da microordini (ognuno corrispondente ad un segnale di controllo) registrati nella memoria ROM (read only memory) detta anche memoria di controllo ed organizzati in una word chiamata word di controllo.
Nella word di controllo ogni bit corrisponde ad un microordine, ovvero rappresenta una linea di controllo. Le unità di controllo microprogrammate si possono suddividere in due categorie: unità di controllo realizzate con:
* microprogrammazione orizzontale quando le microistruzioni sono composte da un numero elevato di bit e quindi possono essere svolti molti compiti in parallelo, generando svariati segnali di controllo contemporaneamente;
* microprogrammazione verticale quando le microistruzioni presentano un numero limitato di bit. La microprogrammazione verticale conduce ad una minore velocità di funzionamento, in quanto, diminuendo il numero di bit, si ha bisogno di più microistruzioni per specificare tutte le operazioni svolte con una sola microistruzione “orizzontale”.
Nell'unità di controllo microprogrammata (vedi fig. 1) il codice operativo (C.O.) dell'istruzione in linguaggio macchina indirizza una locazione della memoria di mapping (memoria che contiene gli indirizzi di partenza dei microprogrammi) nella quale è registrato l'indirizzo di partenza del corrispondente microprogramma. Il µPC contiene l'indirizzo della memoria di controllo e il µIR contiene la microistruzione.
Le applicazioni della microprogrammazione sono svariate:
* Emulazione: utilizzo di un microprogramma per eseguire su una macchina programmi originariamente scritti per un'altra macchina.
* Supporto ai Sistemi Operativi: microprogrammi per implementare primitive del sistema operativo.
* Supporto ai linguaggio di alto livello: microprogrammi per implementare varie funzioni e tipi di dati.

## Architetture CISC

Le architetture CISC (Complex Instruction Set Computer) sono macchine con unità di controllo microprogrammata. La funzione principale di questa architettura è quella di fornire uno strumento per l'esecuzione flessibile e semplice. Caratteristiche delle architetture CISC sono:
* Ampio numero di istruzioni macchina che consentono di eseguire operazioni complesse;
* Istruzioni di lunghezza variabile;
* Formati d'istruzione differenti che rendono meno veloce la decodifica;
* Presenza di pochi registri e molte istruzioni che fanno riferimento alla memoria;
* Flessibilità nella definizione delle istruzioni;
* Possibilità di emulare un'altra macchina;
Esempi di applicazione delle architetture CISC sono:
* VAX11/780: nato nel 1978, composto da 303 istruzioni con dimensioni tra 2 e 57 byte e 22 modi di indirizzamento;
* Intel 80486: microprocessore a 32 bit nato nel 1989, composto da 235 istruzioni comprese tra 1 e 11 byte e con 11 modi di indirizzamento;
* Intel Pentium: microprocessore a 32 bit nato nel 1993 e con architettura superscalare;
* Intel Pentium pro: microprocessore a 32 bit nato nel 1995;
* Intel pentium II, III, IV: microprocessori a 32 bit nati a partire dal 1997 che incorporano nuove istruzioni in virgola mobile per elaborare in modo efficiente dati multimediali e per supportare applicazioni di grafica tridimensionale;

## Architetture RISC

Le architetture RISC (Reduced Instruction Set Computer) sono macchine con unità di controllo cablata. Tali architetture sono:
* Formate da un piccolo insieme di semplici istruzioni macchina;
* Ottimizzate da un numero elevato di registri generici e dall'adozione di compilatori;
Esempi di applicazione delle architetture RISC sono:
* IBM 801, prima macchina RISC realizzata dall'IBM come prototipo di studio;
* CPU SPARC (Scalable Processor Architecture), famiglia di CPU impiegata dalla SunMicrosystems nei propri calcolatori;
* Microprocessori PowerPC, Architettura RISC, nata da un consorzio tra IBM, Apple e Motorola;
* Microprocessori Intel Itanium (a 64 bit), nato nel 2001 e caratterizzato da molti registri (128 in Itanium 2);
* Microprocessori Pentium Dual Core a 64 bit, contenenti due CPU nello stesso package;
* Architettura MIPS
* DEC Alpha

## Confronto tra RISC e CISC

Prendendo in considerazione il costo di realizzazione dei due tipi di unità di controllo, si può pervenire alla rappresentazione grafica di fig. 2. Mentre il costo di realizzazione di un'unità di controllo cablata è proporzionale al numero di codici operativi diversi che devono essere sintetizzati e parte dal valore 0, l'unità di controllo microprogrammata ha un costo iniziale maggiore di zero, in quanto necessariamente dovrà essere realizzata la struttura di gestione dei microprogrammi, e sale più lentamente rispetto all'unità di controllo cablata, ma in modo lineare. Esiste quindi un valore X (un numero di codici operativi) al di sotto del quale è più economico realizzare l'unità di controllo in logica cablata e al di sopra del quale è più economico realizzarla in logica microprogrammata.