Organizzazione del processore - Von Neumann, Harvard, bus, ALU e registri
In questa pagina 5
Tutti i microprocessori, compresi µC e DSP (Microcontrollori e DSP - definizioni e scelta del dispositivoUn microcontrollore (µC) è un microprocessore con memoria e periferiche (ADC, timer, PWM, porte seriali) sullo stesso chip, pensato per il controllo; un DSP è un processore ottimizzato per l'elaborazione numerica del segnale in tempo reale (moltiplicatore e istruzione MAC, accessi multipli alla memoria, indirizzamento circolare, DMA). Oggi le due famiglie si sovrappongono (DSC). La scelta del dispositivo si fa su costo, prestazioni, periferiche e tempo di sviluppo (time to market), non sulla sola frequenza di clock.Microcontrollori e DSP - definizioni e scelta del dispositivo →), hanno tre elementi di base: l'ALU (unità aritmetico-logica con il suo controllo), la memoria e i dispositivi di I/O. Nei µC e nei DSP ciascuno di questi elementi ha caratteristiche speciali, dettate da costo e prestazioni richieste, rispetto ai processori per uso generico (GPP).
Due filosofie: Von Neumann e Harvard
Nell'organizzazione Von Neumann c'è una sola memoriail sistema che conserva dati e programma per dati e istruzioni, un bus datiinsieme di N linee che portano alla CPU operandi e istruzioni a bitcifra binaria e un bus indirizziinsieme di M linee con cui la CPU dice alla memoria quale locazione leggere o scrivere a bit. È semplice e quindi economica: la usavano i processori generici e oggi i µC di costo più basso (per esempio Intel 80C196, o i µC con core ARM7famiglia di core ARM a 32 bit con organizzazione Von Neumann, che hanno una SRAM di circa 16 kbyte e una FLASH di circa 256 kbyte viste come una memoria logica unica).
Nell'organizzazione Harvard dati e istruzioni stanno in memorie separate, con due o più sistemi di bus. Permette più accessi simultanei alla memoria nello stesso ciclo di clock e riduce il tempo di un programma. Esempio, il calcolo : in un'organizzazione Von Neumann il numero di accessi in memoria può arrivare a 4 (prelievo dell'istruzione, lettura di , lettura di , scrittura di , tutti sullo stesso bus); in una Harvard bastano 2 cicli perché istruzione e dato viaggiano su bus diversi. L'organizzazione Harvard è tipica dei DSP/DSC (Freescale 56F8xxx, Analog Devices serie 21xxx con 4 bus dati e 4 bus indirizzi), dei PIC (bus dati a 8 bit, bus istruzioni a 16) e dei nuovi ARM Cortex-Mfamiglia di core ARM con organizzazione Harvard e molti bus (molti bus separati, standard AMBA). I DSP più recenti usano organizzazioni dette Harvard modificate, con parallelismopresenza di più unità funzionali che lavorano contemporaneamente: alcune unità funzionali (per esempio l'ALU) sono duplicate per eseguire più azioni insieme.
I bus e le porte tri-state
All'interno del processore i bus collegano le unità funzionali. Sono fatti di linee (i "bit") che possono assumere due livelli logici. Il pilotaggio è affidato a porte con uscita tri-stateporta con tre stati di uscita: livello alto, livello basso e alta impedenza, cioè uscita scollegata: quando l'unità ha finito di trasmettere o ricevere si abilita l'alta impedenza e l'unità si disconnette dal bus, così più unità possono condividere gli stessi fili senza cortocircuitarsi. Nella porta tri-state CMOS un segnale Enable (attivo basso) abilita il buffer. Un µC o DSP ha in genere bus per dati e istruzioni distinti dal bus indirizzi, talvolta bus per le interruzioni o interni a una unità; il numero di linee dei vari bus può essere diverso.
Caratteristiche di una CPU
Gli elementi che qualificano la CPU di un µC o DSP sono la frequenza di clock, l'organizzazione hardware (numero di bit, risorse disponibili) e l'architettura (insieme di istruzioni). I datasheet li mettono in primo piano, talvolta in modo poco obiettivo. La frequenza di clocknumero di cicli del clock al secondo, cioè la cadenza del processore dei µC è bassa (alcune decine di MHz, fino a poche centinaia nei più recenti): molto meno dei processori per PC, perché costo e consumo non permettono di spingersi oltre.
Nella CPU si ritrovano gli stessi componenti dei processori generici: una o più ALU, vari registri (PC, IR, MBR, MAR, registro di stato), circuiti di controllo. Ma le soluzioni sono sempre compromessiscelte che bilanciano esigenze incompatibili, come velocità, costo e consumo tra velocità, consumo e costo.
ALU e registri
L'ALU esegue le operazioni aritmetiche (somma, differenza, spesso prodotto) e logiche (AND, OR) e lo scorrimento dei dati (ALU - sommatore, overflow, carry look-ahead e shiftL'ALU è un insieme di celle a 1 bit (full adder + selettori) collegate in parallelo: somma, sottrae ($A-B=A+\overline B+1$: si inverte $B$ e si porta il riporto iniziale a 1), fa AND/OR. Il ritardo è dominato dal riporto: nel ripple-carry cresce linearmente con i bit; col carry look-aheadtecnica che calcola in anticipo i riporti da generazione e propagazione, riducendo il ritardo i riporti si calcolano da generazione $g_i=A_iB_i$ e propagazione $p_i=A_i+B_i$ in pochi livelli di logica. L'overflow è $V=C_{in,n-1}\oplus C_{out,n-1}$. Gli shift logici inseriscono 0, gli aritmetici estendono il segno; il barrel shiftercircuito che sposta una parola di un numero qualsiasi di posizioni in un solo ciclo sposta di $m$ posti in un ciclo.ALU - sommatore, overflow, carry look-ahead e shift →). Nei µC l'ALU opera su 4, 8, 16, 32 bit; nei DSP su 16, 32 o più (fino a 256 per applicazioni speciali). Un moltiplicatore hardware a ciclo singolo è ormai comune anche nei µC.
I dati elaborati stanno in registri. Due organizzazioni:
- ALU con accumulatore: un solo registro di lavoro, le istruzioni sono del tipo
ADD X(somma all'accumulatore il contenuto della locazione ). È economica (µC come ST6, PIC). Gli operandi vengono dal MBRMemory Buffer Register: registro che contiene il dato appena letto dalla memoria o da scrivere e dall'accumulatore; uno dei due è sovrascritto dal risultato. - ALU con molti registri: istruzioni a più operandi, per esempio
ADD X, Y, Z(somma e e deposita in ), più veloci. Tipica dei µC ad alte prestazioni e dei DSP.
Un registro a bit si ottiene con flip-flop di tipo D con uscite bufferizzate per il bus. Oltre ai dati i registri della CPU ospitano: il program counterPC: registro con l'indirizzo della prossima istruzione da eseguire, il MARMemory Address Register: registro che contiene l'indirizzo della locazione di memoria da leggere o scrivere, l'IRInstruction Register: registro che contiene l'istruzione in esecuzione, il registro di stato (flag di overflow, zero, carry), i registri di gestione delle interruzioni e quelli di configurazione delle periferiche.
Metodi di controllo
Il controllo può essere a logica cablata, che traduce direttamente il codice operativo (OPCODE) nella sequenza di segnali necessari (decoder, sequencer, gate array), oppure microprogrammato, dove ogni istruzione è eseguita da un microprogramma contenuto in una ROM interna. Il cablato è veloce e ottimizzato ma poco flessibile (correggere un errore costa molto); il microprogrammato è flessibile e facile da correggere ma occupa area (costo) ed è lento. Oggi si usa il cablato; il microprogrammato resta nei vecchi processori CISC (Renesas H8S, Intel 8XC196). Dettagli in Unità di controllo - cablata, microprogrammata, singolo ciclo e multicicloL'unità di controllo preleva (fetch), decodifica ed esegue le istruzioni generando i segnali che attivano registri, ALU e memoria. Può essere cablata (logica dedicata, veloce, poco flessibile, oggi la norma) o microprogrammata (una piccola CPU con ROM di microcodice: flessibile ma lenta e grande). Con un solo bus le operazioni vanno distribuite su più segmenti di clock (multiciclo: il clock è dettato dall'unità più lenta); con memorie e ALU separate si può fare singolo ciclo (il clock è dettato dall'istruzione più lenta). Il tempo medio per istruzione dipende dal mix di istruzioni: $NC=\sum f_i,NC_i$.Unità di controllo - cablata, microprogrammata, singolo ciclo e multiciclo →.
Memoria e I/O
La memoria è sempre organizzata in modo gerarchico: la più veloce è nel processore (registri, banchi di registri, cache), poi la RAM interna al chip, infine eventuale memoria esterna (Memorie - gerarchia, SRAM, DRAM, ROM e FLASHNei µC e DSP si usa solo memoria a stato solido ad accesso immediato, interna (on chip) o esterna. Parametri: dimensione, velocità (tempo di accesso, latenza, banda), consumo, integrazione. La memoria è gerarchica (registri → cache → SRAM interna → esterna) grazie alla localitàtendenza dei programmi a riusare gli stessi dati e a usare dati vicini in memoria spaziale e temporale. Tipi: SRAM (veloce, 4-6 transistori per cella, volatile, nessun refresh), DRAM (carica in un MOS, serve il refresh, più densa e a minor consumo), ROM/OTP/EPROM/EEPROM e FLASH (gate flottante: scrittura per elettroni caldi, cancellazione per effetto tunnel, solo per blocchi, $>10^5$ cicli). Una "RAM" è qualunque memoria con tempo di accesso indipendente dalla posizione.Memorie - gerarchia, SRAM, DRAM, ROM e FLASH →). Nei chip prodotti in grandi volumi la memoria interna è spesso ROM o OTP (programmabile una volta) per abbattere i costi.
Le periferiche di I/O sono fondamentali: la principale area di impiego dei µC è la gestione di interfacce uomo-macchina (HMI) e di sensori e trasduttori. Quasi tutti hanno pin di I/O configurabili, unità di trasmissione seriale sincrona e asincrona, almeno un convertitore A/D e talvolta D/A, timer e PWM (Sottosistema di I-O - polling, interruzioni e DMALe periferiche si collegano al bus con una interfaccia che ha registri di dati (DREG), controllo (CREG) e stato (SREG); nei µC e DSP sono mappati in memoria (si leggono e scrivono come locazioni). Poiché le periferiche sono asincrone e lente, la sincronizzazione avviene per polling (inefficiente), per interruzioni (la più usata) o per DMA (costoso, per grandi quantità di dati). Una interruzione: completa l'istruzione, salva il contesto (PC e registro di stato, spesso altro), esegue la ISR, ripristina. Le sorgenti si distinguono con ISR di stato, interruzioni vettorizzate o daisy-chaincollegamento delle periferiche in catena, in cui il segnale di riconoscimento passa dall'una all'altra; le NMI non sono mascherabili.Sottosistema di I-O - polling, interruzioni e DMA →).
Errori comuni
- Credere che Harvard e Von Neumann si distinguano per la dimensione della memoria: si distinguono per separazione di memorie e bus.
- Dimenticare che le organizzazioni Harvard avanzate (più bus) di solito non si estendono alla memoria esterna: solo due bus (dati e istruzioni) escono dal chip.
- Confondere architettura (istruzioni visibili) e organizzazione (come sono fatti i circuiti): vedi Misura delle prestazioni - tempo di calcolo e indici MIPSLe prestazioni di un processore si misurano col tempo di calcolo di un programma: $T_{cal}=T_{clk}\sum_{i}N_i,NC_i$ (periodo di clock per numero di istruzioni di classe $i$ per cicli medi della classe). Aumentare la velocità vuol dire ridurre $T_{clk}$, i cicli per istruzione (organizzazione) o il numero di istruzioni (architettura). Gli indici MIPS, DMIPS, FLOPS misurano solo un picco e non permettono di confrontare famiglie diverse: si usa il benchmarking (kernel benchmarking per i DSP).Misura delle prestazioni - tempo di calcolo e indici MIPS →.
Versione ripasso
- Von Neumann: una memoria e un sistema di bus per dati e istruzioni (economica, µC semplici, ARM7: fino a 4 accessi per ). Harvard: memorie e bus separati (2 accessi), DSP/DSC, PIC, Cortex-M; Harvard modificata: unità duplicate.
- Bus: dati ( linee), indirizzi ( linee), talvolta interruzioni; pilotati da porte tri-state (alta impedenza = unità scollegata).
- ALU: a accumulatore (
ADD X, economica) o a molti registri (ADD X,Y,Z, veloce); registri PC, MAR, MBR, IR, di stato; moltiplicatore hardware. - Controllo: cablato (veloce, poco flessibile) o microprogrammato (flessibile, lento, CISC datati) (Unità di controllo - cablata, microprogrammata, singolo ciclo e multicicloL'unità di controllo preleva (fetch), decodifica ed esegue le istruzioni generando i segnali che attivano registri, ALU e memoria. Può essere cablata (logica dedicata, veloce, poco flessibile, oggi la norma) o microprogrammata (una piccola CPU con ROM di microcodice: flessibile ma lenta e grande). Con un solo bus le operazioni vanno distribuite su più segmenti di clock (multiciclo: il clock è dettato dall'unità più lenta); con memorie e ALU separate si può fare singolo ciclo (il clock è dettato dall'istruzione più lenta). Il tempo medio per istruzione dipende dal mix di istruzioni: $NC=\sum f_i,NC_i$.Unità di controllo - cablata, microprogrammata, singolo ciclo e multiciclo →).
- Memoria: gerarchia registri, cache, RAM interna, esterna (Memorie - gerarchia, SRAM, DRAM, ROM e FLASHNei µC e DSP si usa solo memoria a stato solido ad accesso immediato, interna (on chip) o esterna. Parametri: dimensione, velocità (tempo di accesso, latenza, banda), consumo, integrazione. La memoria è gerarchica (registri → cache → SRAM interna → esterna) grazie alla localitàtendenza dei programmi a riusare gli stessi dati e a usare dati vicini in memoria spaziale e temporale. Tipi: SRAM (veloce, 4-6 transistori per cella, volatile, nessun refresh), DRAM (carica in un MOS, serve il refresh, più densa e a minor consumo), ROM/OTP/EPROM/EEPROM e FLASH (gate flottante: scrittura per elettroni caldi, cancellazione per effetto tunnel, solo per blocchi, $>10^5$ cicli). Una "RAM" è qualunque memoria con tempo di accesso indipendente dalla posizione.Memorie - gerarchia, SRAM, DRAM, ROM e FLASH →). I/O: pin, seriali, ADC, timer.
- Errori: Harvard = più memoria; bus Harvard multipli sulla memoria esterna; architettura = organizzazione.
Teoria collegata
- ALU - sommatore, overflow, carry look-ahead e shift
- Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamento
- Memorie - gerarchia, SRAM, DRAM, ROM e FLASH
- Microcontrollori e DSP - definizioni e scelta del dispositivo
- Sottosistema di I-O - polling, interruzioni e DMA
- Unità di controllo - cablata, microprogrammata, singolo ciclo e multiciclo