Salta al contenuto
Note per Studenti Unità di controllo - cablata, microprogrammata, singolo ciclo e multiciclo

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 ZZ, due registri datiregistri che contengono gli operandi delle operazioni (R1R_1, YY), 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 [R1]←[R1]+M[num][R_1]\leftarrow[R_1]+M[num].

Prelievo (fetch). Si legge dalla memoria l'istruzione indirizzata dal PC, [IR]←M[PC][IR]\leftarrow M[PC], in 3 segmenti:

  • F1: PC out, MAR in (l'indirizzo va al MAR), clear YY, "Add" (l'ALU somma Y=0Y=0 al bus: PC+0), "Carry in" (+1), ZZ in: in ZZ c'è PC+1;
  • F2: ZZ 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 numnum dell'istruzione va sul bus), MAR in;
  • E2: R1R_1 out, YY in (si copia R1R_1 in YY mentre la memoria legge M[num]M[num] nel MDR);
  • E3: MDR out, Add, ZZ in (Z=R1+M[num]Z=R_1+M[num]);
  • E4: ZZ out, R1R_1 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) [MARI]←[PC][MAR_I]\leftarrow[PC], [IR]←[MDRI][IR]\leftarrow[MDR_I], [PC]←[PC]+1[PC]\leftarrow[PC]+1, [Z]←[R1]+[R2][Z]\leftarrow[R_1]+[R_2], [MARD]←risultato[MAR_D]\leftarrow risultato, [MDRD]←[Z][MDR_D]\leftarrow[Z]. 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 load richiede: fetch 2 ns + ALU (offset) 2 ns + scrittura nel MAR 1 ns + memoria dati 2 ns + scrittura nel registro 1 ns =8=8 ns. Quindi tutte le istruzioni durano 8 ns.
  • Multiciclo con clock da 2 ns (periodo = unità più lenta = memoria, diviso in 4 segmenti): load e store 4 segmenti (8 ns), operazioni ALU 3 segmenti (6 ns), salti 2 segmenti (4 ns). Cicli medi NC=4 (0,24+0,12)+3⋅0,44+2⋅0,2=3,16NC=4\,(0{,}24+0{,}12)+3\cdot0{,}44+2\cdot0{,}2=3{,}16, cioè 3,16⋅2=6,323{,}16\cdot2=6{,}32 ns per istruzione (contro 8 ns): il multicicloorganizzazione in cui un'istruzione occupa più periodi di clock è più veloce del 27% (8/6,32=1,278/6{,}32=1{,}27) sul mix considerato.

Le due strategie si combinano con la pipeline: 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 →.

Errori comuni

Versione ripasso

Esercizi su questo argomento

Teoria collegata