Unità di controllo - cablata, microprogrammata, singolo ciclo e multiciclo
In questa pagina 5
L'unità di controllo si occupa del prelievo, della decodifica e dell'esecuzione delle istruzioni immagazzinate in memoria (Organizzazione del processore - Von Neumann, Harvard, bus, ALU e registriOgni processore ha ALU, memoria e dispositivi di I/O. Nell'organizzazione Von Neumann dati e istruzioni stanno nella stessa memoria e viaggiano su un solo sistema di bus (semplice ed economica, usata nei µC più semplici); nell'organizzazione Harvard memorie e bus sono separati (più accessi per ciclo: tipica di DSP e µC veloci). I bus sono pilotati da porte tri-state; l'ALU lavora su registri (accumulatore o molti registri); il controllo è cablato o microprogrammato; la gerarchia di memoria va dai registri alla RAM interna e a quella esterna.Organizzazione del processore - Von Neumann, Harvard, bus, ALU e registri →). Genera i segnali di controllo che abilitano la lettura e la scrittura dei registri, le operazioni dell'ALU e gli accessi alla memoria. Storicamente si sono avuti due approcci, microprogrammato e cablato; inoltre si può scegliere se eseguire un'istruzione in un ciclo o in più cicli di clock.
Un processore semplice come esempio
Si consideri un processore con un solo bus a 8 bit, una ALU con accumulatore , due registri datiregistri che contengono gli operandi delle operazioni (, ), due registri di controllo (PC, IR), una RAM da 256 locazioni a 8 bit e due registri di interfaccia con la memoria (MAR e MDRMemory Data Register: registro che contiene il dato letto o da scrivere in memoria). Ogni unità è attivata dal controllore con segnali come "PC out" (scrive il registro sul bus) e "MAR in" (legge il bus nel registro). Consideriamo ADD R1, num, che esegue .
Prelievo (fetch). Si legge dalla memoria l'istruzione indirizzata dal PC, , in 3 segmenti:
- F1: PC out, MAR in (l'indirizzo va al MAR), clear , "Add" (l'ALU somma al bus: PC+0), "Carry in" (+1), in: in c'è PC+1;
- F2: out, PC in (il PC ora vale il precedente +1), MDR in (la memoria, letta all'indirizzo del vecchio PC, carica l'istruzione nel MDR);
- F3: MDR out, IR in.
Esecuzione (4 segmenti):
- E1: SRC out (il campo con l'indirizzo dell'istruzione va sul bus), MAR in;
- E2: out, in (si copia in mentre la memoria legge nel MDR);
- E3: MDR out, Add, in ();
- E4: out, in.
In totale 7 segmenti. La presenza di un solo bus impone la suddivisione: quando un registro deve essere letto dal bus e subito dopo scritto sul bus non si può fare nello stesso istante, e non sono ammessi due scrittori sul bus insieme. Quindi questa organizzazione è multiciclo. Non tutte le istruzioni usano tutti i segmenti: una Branch usa solo alcuni; se in alcuni cicli il processore resta fermo, si può iniziare un nuovo fetchfase di prelievo dell'istruzione dalla memoria prima (richiede un controllore che gestisca fetch ed execute in modo indipendente) e le istruzioni durano tempi diversi.
Controllo a logica cablata
Un circuito riceve l'OPCODE (il fetch si ripete automaticamente) e produce tutti i segnali di controllolinee che abilitano la lettura o scrittura di un registro, una operazione dell'ALU o un accesso alla memoria con le loro temporizzazioni: un decodificatorecircuito che attiva una sola tra più uscite in base al codice di ingresso (per esempio 4-16) identifica l'istruzione, un generatore di clock interni (un contatore) distribuisce i segmenti, un insieme di porte combina i due per produrre ogni segnale. Vantaggi: velocità e ottimizzazione. Svantaggi: scarsa flessibilità e correzione degli errori molto costosa. Oggi è il metodo normalmente usato, perché i metodi CADComputer Aided Design: programmi di progettazione assistita da calcolatore molto sofisticati riducono il rischio di errori anche su controllori molto complessi. È il controllo tipico dei processori RISCReduced Instruction Set Computer: poche istruzioni semplici.
Controllo microprogrammato
L'unità di controllola parte della CPU che dirige le altre unità generando i segnali di controllo è una CPU in miniatura che esegue il microcodice. Ogni istruzione (macro-istruzione) corrisponde a un microprogramma, memorizzato in una ROM interna e indirizzato a partire dall'OPCODEil campo della istruzione che dice quale operazione eseguire; ogni microprogrammaprogramma di microistruzioni che realizza una singola istruzione del processore si apre con il fetch della macro-istruzione seguente e si chiude ricaricando il PC. Nella forma più semplice ogni bit della parola di microcodicesequenza di microistruzioni memorizzata in ROM che realizza una istruzione è un segnale di controllo (microprogrammazione orizzontale: la parola è larga quanto il numero di segnali). Si può ridurre la ripetizione di segmenti di codice con la microprogrammazione verticale, dove il microcodice può saltare a zone non contigue (controllore più complesso).
| Cablato | Microprogrammato | |
|---|---|---|
| Velocità | alta | limitata |
| Flessibilità, modifica | scarsa, costosa | buona, facile |
| Area (costo) | contenuta | considerevole |
| Dove | RISC, DSP, µC recenti | CISC datati (anni '70) |
Singolo ciclo e multiciclo
Nel controllo a ciclo singolo ogni istruzione dura un periodo di clock, che deve quindi essere abbastanza lungo per l'istruzione più lenta (di solito la lettura da memoria, load). Requisiti minimi: memorie dati e istruzioni separate (con i propri bus), una ALU separata per incrementare il PC, gestione flessibile del PC per i salti. Fetch ed esecuzione avvengono "insieme" perché non usano le stesse risorse. Esempio: ADD R1, R2, risultato ha le operazioni (in parallelo) , , , , , . Non è però detto che sia il più veloce: tutte le istruzioni durano quanto la più lenta.
Nel controllo multiciclo il periodo di clock è determinato solo dall'unità funzionale più lenta (di solito la memoria) e ogni istruzione dura il numero di cicli che le serve.
Confronto numerico
Un processore ha memoria 2 ns, ALU 2 ns, registri 1 ns. Il programma di prova ha 24% di load, 12% di store, 44% di operazioni ALU su registri, 20% di salti.
- Singolo ciclo. La
loadrichiede: fetch 2 ns + ALU (offset) 2 ns + scrittura nel MAR 1 ns + memoria dati 2 ns + scrittura nel registro 1 ns ns. Quindi tutte le istruzioni durano 8 ns. - Multiciclo con clock da 2 ns (periodo = unità più lenta = memoria, diviso in 4 segmenti):
loadestore4 segmenti (8 ns), operazioni ALU 3 segmenti (6 ns), salti 2 segmenti (4 ns). Cicli medi , cioè ns per istruzione (contro 8 ns): il multicicloorganizzazione in cui un'istruzione occupa più periodi di clock è più veloce del 27% () sul mix considerato.
Errori comuni
- Pensare che il singolo cicloorganizzazione in cui ogni istruzione dura un solo periodo di clock sia sempre il più veloce: tutte le istruzioni vanno alla velocità della più lenta.
- Confondere architettura CISC con controllo microprogrammato (le due cose sono collegate storicamente, ma sono concetti distinti: Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamentoL'architettura è l'insieme delle risorse visibili al programmatore (istruzioni, modi di indirizzamento). RISC: poche istruzioni semplici, di uguale lunghezza, decodifica cablata, quasi tutte a 1 ciclo; CISC: molte istruzioni complesse, decodifica microprogrammata, più cicli. I DSP sono RISC "potenziati" (MAC, saturazione, barrel shifter, arrotondamento, VLIW, SIMD); i modi di indirizzamento tipici sono immediato, a registro, diretto, indiretto, con auto-incremento, circolare e a bit rovesciati (per la FFT).Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamento →).
- Dimenticare che con un solo bus le operazioni di lettura e scrittura sullo stesso registro vanno in segmenti diversi.
Versione ripasso
- Compito: fetch, decodifica, esecuzione; genera i segnali di controllo.
- Esempio: un bus, fetch in 3 segmenti (F1-F3) +
ADD R1,numin 4 (E1-E4) = 7 segmenti, multiciclo. - Cablato: OPCODE → decoder + clock interni; veloce, rigido (RISC, oggi). Microprogrammato: CPU in miniatura, ROM di microcodice (orizzontale/verticale); flessibile, lento, grande (CISC datati).
- Singolo ciclo: memorie separate + ALU per il PC; clock = istruzione più lenta. Multiciclo: clock = unità più lenta, durata per istruzione.
- Numeri:
load8 ns; multiciclo ns contro 8 ns. - Errori: singolo ciclo sempre più veloce; CISC=microprogrammato; un bus (Pipeline - accelerazione e conflittiLa pipeline divide l'esecuzione in $n$ stadi (fetch, decodifica, lettura, esecuzione, scrittura) che lavorano contemporaneamente su istruzioni diverse. Il clock è dettato dallo stadio più lento; a regime si completa un'istruzione per ciclo. Per $N$ istruzioni servono $(n+N-1),T_{clk}$: l'accelerazione rispetto al multiciclo tende a $n$ ma è sempre minore (riempimento, conflitti). I conflitti sono strutturali (stessa risorsa), sui dati (RAW...) e di controllo (salti): si risolvono con stalli (interlocking), bypass, sovrapposizione, riordino, salti ritardati. La latenza di una singola istruzione non diminuisce.Pipeline - accelerazione e conflitti →).