ISTITUTI TECNICO INDUSTRIALE MATERIA: SISTEMI Indice: • GRANDEZZE FISICHE MULTIPLI E SOTTOMULTIPLI • LOGICA CABLATA E MICROPROGRAMMATA • CPU • ROM PROM EPROM EEPROM • RAM STATICA E DINAMICA • MICROPROCESSORI E MICROCONTROLLORI • ARCHITETTURA DI VON NEUMANN • MEMORIA VOLATILE E NON VOLATILE GRANDEZZE FISICHE MULTIPLI E SOTTOMULTIPLI Lo scopo della fisica Molto sinteticamente si può dire che è scienza ogni disciplina basata su fatti sperimentali,scienza esatta ogni scienza in grado di controllare il fenomeno osservato. Quindi la Biologia è scienza, la Medicina è scienza, la Fisica è scienza esatta, ma l’Astrologia non è scienza e non è esatta. Lo scopo della Fisica è descrivere (cioè fornire risposte su come avvengono) i fenomeni naturali. Tale descrizione avviene attraverso la formulazione delle leggi della Fisica, cioè di relazioni che permettano la determinazione, anche numerica, delle grandezze fisiche che caratterizzano il fenomeno descritto. Le leggi della Fisica, una volta determinate, si suppone che siano valide in tutto l’universo e per sempre, dall’origine dei tempi, oggi e nel futuro. Le leggi della Fisica vanno considerate precarie, nel senso che si può sempre incontrare un fenomeno che non viene spiegato dalla teoria. Occorre quindi rigettare la teoria e costruirne una più completa. Le lezioni di questo corso si basano sul libro: R. A. Serway & J. W. Jewett Principi di Fisica, Volume I, Quarta edizione. EdiSES, Napoli, 2007, che sarà indicato nel testo come “Serway & Jewett “. Lo scopo della fisica Molto sinteticamente si può dire che è scienza ogni disciplina basata su fatti sperimentali,scienza esatta ogni scienza in grado di controllare il fenomeno osservato. Quindi la Biologia è scienza, la Medicina è scienza, la Fisica è scienza esatta, ma l’Astrologia non è scienza e non è esatta. Lo scopo della Fisica è descrivere (cioè fornire risposte su come avvengono) i fenomeni naturali. Tale descrizione avviene attraverso la formulazione delle leggi della Fisica, cioè di relazioni che permettano la determinazione, anche numerica, delle grandezze fisiche che caratterizzano il fenomeno descritto. Le leggi della Fisica, una volta determinate, si suppone che siano valide in tutto l’universo e per sempre, dall’origine dei tempi, oggi e nel futuro. Le leggi della Fisica vanno considerate precarie, nel senso che si può sempre incontrare un fenomeno che non viene spiegato dalla teoria. Occorre quindi rigettare la teoria e costruirne una più completa. Le lezioni di questo corso si basano sul libro: R. A. Serway & J. W. Jewett Principi di Fisica, Volume I, Quarta edizione. EdiSES, Napoli, 2007, che sarà indicato nel testo come “Serway & Jewett “. Le grandezze fisiche e la loro misura La definizione di una grandezza fisica si dice operativa quando fornisce, insieme alle sue caratteristiche, anche il modo di misurare tale grandezza. Misurare una grandezza fisica significa associarle un valore numerico che indica quante volte essa è minore o maggiore di una grandezza ad essa omogenea, assunta come campione di riferimento, a cui si attribuisce il valore unitario. Grandezze fisiche si dicono omogenee quando possono essere misurate attraverso le stesse operazioni. La misura di una grandezza si dice diretta quando si effettua per confronto con una grandezza ad essa omogenea scelta come campione di riferimento, come mostrato in figura 1.1. La misura di una grandezza si dice indiretta quando il suo valore è ottenuto dalla misura di altre grandezze, legate ad essa da una legge fisica. L’analisi dimensionale L’analisi dimensionale utilizza il fatto che le dimensioni di una grandezza fisica possono essere trattate come grandezze algebriche. Per esempio, le grandezze possono essere sommate o sottratte tra loro solamente se hanno le stesse dimensioni. Inoltre, i termini di ciascun membro di una equazione debbono avere le stesse dimensioni. Il controllo dimensionale di una relazione tra grandezze fisiche espressa tramite un’equazione è una condizione necessaria ma non sufficiente per verificare la sua correttezza. Un esempio di controllo dimensionale è mostrato in figura 1.2, dove le dimensioni delle grandezze fisiche indicate sono: spazio [s] = L; velocità [v] = L/T; accelerazione [a] = L/T2. Lo scopo della fisica Molto sinteticamente si può dire che è scienza ogni disciplina basata su fatti sperimentali,scienza esatta ogni scienza in grado di controllare il fenomeno osservato. Quindi la Biologia è scienza, la Medicina è scienza, la Fisica è scienza esatta, ma l’Astrologia non è scienza e non è esatta. Lo scopo della Fisica è descrivere (cioè fornire risposte su come avvengono) i fenomeni naturali. Tale descrizione avviene attraverso la formulazione delle leggi della Fisica, cioè di relazioni che permettano la determinazione, anche numerica, delle grandezze fisiche che caratterizzano il fenomeno descritto. Le leggi della Fisica, una volta determinate, si suppone che siano valide in tutto l’universo e per sempre, dall’origine dei tempi, oggi e nel futuro. Le leggi della Fisica vanno considerate precarie, nel senso che si può sempre incontrare un fenomeno che non viene spiegato dalla teoria. Occorre quindi rigettare la teoria e costruirne una più completa. Le lezioni di questo corso si basano sul libro: R. A. Serway & J. W. Jewett Principi di Fisica, Volume I, Quarta edizione. EdiSES, Napoli, 2007, che sarà indicato nel testo come “Serway & Jewett “. Le grandezze fisiche e la loro misura La definizione di una grandezza fisica si dice operativa quando fornisce, insieme alle sue caratteristiche, anche il modo di misurare tale grandezza. Misurare una grandezza fisica significa associarle un valore numerico che indica quante volte essa è minore o maggiore di una grandezza ad essa omogenea, assunta come campione di riferimento, a cui si attribuisce il valore unitario. Grandezze fisiche si dicono omogenee quando possono essere misurate attraverso le stesse operazioni. La misura di una grandezza si dice diretta quando si effettua per confronto con una grandezza ad essa omogenea scelta come campione di riferimento, come mostrato in figura 1.1. La misura di una grandezza si dice indiretta quando il suo valore è ottenuto dalla misura di altre grandezze, legate ad essa da una legge fisica. Le dimensioni di una grandezza Una grandezza fisica è detta fondamentale quando la sua definizione non dipende dalla definizione di altre grandezze e quindi la sua misura è effettuata per confronto con un campione di riferimento. Una grandezza fisica si dice derivata quando la sua definizione dipende dalla definizione di altre grandezze (fondamentali o derivate a loro volta). Le leggi fisiche, attraverso le quali sono definite le grandezze derivate, forniscono la relazione che lega ogni grandezza a quelle scelte come fondamentali. Ogni grandezza derivata può quindi esprimersi come prodotto di fattori ciascuno dei quali è una potenza di esponente opportuno (positivo, negativo, nullo, intero o frazionario) di una delle grandezze fondamentali. Se indichiamo con L una generica lunghezza, con T un tempo e con M una massa, le grandezze derivate che si basano solo su queste tre grandezze fondamentali si possono esprimere mediante il prodotto La Tb Mc Si dice allora che gli esponenti a, b e c sono le dimensioni di tale grandezza ordinatamente rispetto alle lunghezze, ai tempi e alle masse ed il prodotto suindicato si dice equazione dimensionale della grandezza fisica. Ad esempio, la superficie S ha le dimensioni di una lunghezza L al quadrato; in simboli: [S] = L2 La velocità v ha le dimensioni di una lunghezza L divisa un tempo T; in simboli: [v] = L T-1 L’analisi dimensionale L’analisi dimensionale utilizza il fatto che le dimensioni di una grandezza fisica possono essere trattate come grandezze algebriche. Per esempio, le grandezze possono essere sommate o sottratte tra loro solamente se hanno le stesse dimensioni. Inoltre, i termini di ciascun membro di una equazione debbono avere le stesse dimensioni. Il controllo dimensionale di una relazione tra grandezze fisiche espressa tramite un’equazione è una condizione necessaria ma non sufficiente per verificare la sua correttezza. Un esempio di controllo dimensionale è mostrato in figura 1.2, dove le dimensioni delle grandezze fisiche indicate sono: spazio [s] = L; velocità [v] = L/T; accelerazione [a] = L/T2. I sistemi di unità di misura La scelta delle grandezze fisiche fondamentali e quella dei campioni che le rappresentano sono arbitrarie. Operare ltale scelta significa stabilire un sistema di unità di misura. Nel 1971 sono state selezionate sette grandezze fisiche come fondamentali che costituiscono la base del Sistema Internazionale di Unità (SI) rappresentate in tabella 1.1. Esso fu adottato per la prima volta come unità fondamentale in un sistema di unità di misura dalla Repubblica Francese nel 1792, definendolo come la decimilionesima parte della distanza fra il polo nord e l’equatore e realizzando un metro campione come distanza fra due incisioni su una barra di metallo. L’esigenza di una maggiore precisione portò nel 1983 ad una nuova definizione: il metro è la lunghezza che la luce percorre nel vuoto in un intervallo di tempo pari a 1/(299 792 458) secondi, avendo assunto come valore della velocità della luce nel vuoto 299 792 458 m/s L’unità di tempo: il secondo La durata di un intervallo di tempo (tempo trascorso tra due avvenimenti) può essere misurato scegliendo come riferimento un fenomeno periodico, cioè che si ripeta sempre nello stesso modo. Se si assume come fenomeno periodico di riferimento la durata del giorno solare medio, il cui valore è mediato su quelli che assume durante l’anno ed è costituito da 86 400 secondi, l’unità di misura dell’intervallo di tempo è il secondo solare medio il cui simbolo è s. In analogia a quanto fu fatto per il metro, nel 1967 la sua definizione è cambiata in: il secondo è la durata corrispondente a 9 192 631 770 oscillazioni della radiazione emessa da un atomo di cesio 133 nella transizione tra due livelli iperfini dello stato fondamentale. Lo scopo della fisica Molto sinteticamente si può dire che è scienza ogni disciplina basata su fatti sperimentali,scienza esatta ogni scienza in grado di controllare il fenomeno osservato. Quindi la Biologia è scienza, la Medicina è scienza, la Fisica è scienza esatta, ma l’Astrologia non è scienza e non è esatta. Lo scopo della Fisica è descrivere (cioè fornire risposte su come avvengono) i fenomeni naturali. Tale descrizione avviene attraverso la formulazione delle leggi della Fisica, cioè di relazioni che permettano la determinazione, anche numerica, delle grandezze fisiche che caratterizzano il fenomeno descritto. Le leggi della Fisica, una volta determinate, si suppone che siano valide in tutto l’universo e per sempre, dall’origine dei tempi, oggi e nel futuro. Le leggi della Fisica vanno considerate precarie, nel senso che si può sempre incontrare un fenomeno che non viene spiegato dalla teoria. Occorre quindi rigettare la teoria e costruirne una più completa. Le lezioni di questo corso si basano sul libro: R. A. Serway & J. W. Jewett Principi di Fisica, Volume I, Quarta edizione. EdiSES, Napoli, 2007, che sarà indicato nel testo come “Serway & Jewett “. Le grandezze fisiche e la loro misura La definizione di una grandezza fisica si dice operativa quando fornisce, insieme alle sue caratteristiche, anche il modo di misurare tale grandezza. Misurare una grandezza fisica significa associarle un valore numerico che indica quante volte essa è minore o maggiore di una grandezza ad essa omogenea, assunta come campione di riferimento, a cui si attribuisce il valore unitario. Grandezze fisiche si dicono omogenee quando possono essere misurate attraverso le stesse operazioni. La misura di una grandezza si dice diretta quando si effettua per confronto con una grandezza ad essa omogenea scelta come campione di riferimento, come mostrato in figura 1.1. La misura di una grandezza si dice indiretta quando il suo valore è ottenuto dalla misura di altre grandezze, legate ad essa da una legge fisica. Le dimensioni di una grandezza Una grandezza fisica è detta fondamentale quando la sua definizione non dipende dalla definizione di altre grandezze e quindi la sua misura è effettuata per confronto con un campione di riferimento. Una grandezza fisica si dice derivata quando la sua definizione dipende dalla definizione di altre grandezze (fondamentali o derivate a loro volta). Le leggi fisiche, attraverso le quali sono definite le grandezze derivate, forniscono la relazione che lega ogni grandezza a quelle scelte come fondamentali. Ogni grandezza derivata può quindi esprimersi come prodotto di fattori ciascuno dei quali è una potenza di esponente opportuno (positivo, negativo, nullo, intero o frazionario) di una delle grandezze fondamentali. Se indichiamo con L una generica lunghezza, con T un tempo e con M una massa, le grandezze derivate che si basano solo su queste tre grandezze fondamentali si possono esprimere mediante il prodotto La Tb Mc Si dice allora che gli esponenti a, b e c sono le dimensioni di tale grandezza ordinatamente rispetto alle lunghezze, ai tempi e alle masse ed il prodotto suindicato si dice equazione dimensionale della grandezza fisica. Ad esempio, la superficie S ha le dimensioni di una lunghezza L al quadrato; in simboli: [S] = L2 La velocità v ha le dimensioni di una lunghezza L divisa un tempo T; in simboli: [v] = L T-1 L’analisi dimensionale L’analisi dimensionale utilizza il fatto che le dimensioni di una grandezza fisica possono essere trattate come grandezze algebriche. Per esempio, le grandezze possono essere sommate o sottratte tra loro solamente se hanno le stesse dimensioni. Inoltre, i termini di ciascun membro di una equazione debbono avere le stesse dimensioni. Il controllo dimensionale di una relazione tra grandezze fisiche espressa tramite un’equazione è una condizione necessaria ma non sufficiente per verificare la sua correttezza. Un esempio di controllo dimensionale è mostrato in figura 1.2, dove le dimensioni delle grandezze fisiche indicate sono: spazio [s] = L; velocità [v] = L/T; accelerazione [a] = L/T2. I sistemi di unità di misura La scelta delle grandezze fisiche fondamentali e quella dei campioni che le rappresentano sono arbitrarie. Operare ltale scelta significa stabilire un sistema di unità di misura. Nel 1971 sono state selezionate sette grandezze fisiche come fondamentali che costituiscono la base del Sistema Internazionale di Unità (SI) rappresentate in tabella 1.1. L’unità di lunghezza: il metro L’unità di misura per le lunghezze nel SI è il metro il cui simbolo è m. Esso fu adottato per la prima volta come unità fondamentale in un sistema di unità di misura dalla Repubblica Francese nel 1792, definendolo come la decimilionesima parte della distanza fra il polo nord e l’equatore e realizzando un metro campione come distanza fra due incisioni su una barra di metallo. L’esigenza di una maggiore precisione portò nel 1983 ad una nuova definizione: il metro è la lunghezza che la luce percorre nel vuoto in un intervallo di tempo pari a 1/(299 792 458) secondi, avendo assunto come valore della velocità della luce nel vuoto 299 792 458 m/s L’unità di tempo: il secondo La durata di un intervallo di tempo (tempo trascorso tra due avvenimenti) può essere misurato scegliendo come riferimento un fenomeno periodico, cioè che si ripeta sempre nello stesso modo. Se si assume come fenomeno periodico di riferimento la durata del giorno solare medio, il cui valore è mediato su quelli che assume durante l’anno ed è costituito da 86 400 secondi, l’unità di misura dell’intervallo di tempo è il secondo solare medio il cui simbolo è s. In analogia a quanto fu fatto per il metro, nel 1967 la sua definizione è cambiata in: il secondo è la durata corrispondente a 9 192 631 770 oscillazioni della radiazione emessa da un atomo di cesio 133 nella transizione tra due livelli iperfini dello stato fondamentale. . L’unità di massa: il chilogrammo Il campione di unità di misura della massa nel SI è il chilogrammo che rappresenta la massa di un blocco cilindrico di platino-iridio, conservato al Bureau des Poids et Mesures di Sèvres, nei pressi di Parigi e il cui simbolo è kg. I multipli Quando si ha a che fare con misure di grandezze molto grandi o molto piccole, si usano i multipli e sottomultipli elencati nelle tabelle 1.5 e 1.6. fattori di conversione Per convertire le unità di misura dal SI a un altro sistema e viceversa, si moltiplica il valore della grandezza per il rapporto tra l’unità di partenza e quella di arrivo (fattore di conversione). Esempi di conversione in unità del SI: 35 cm = 35 · 10-2 m 7 kg = 7 · 103 g 72 km/h = (72 · 103 m)/(3600 s) = 20 m/s Alcuni dei più usati fattori di conversione in unità del SI sono riportati nella tabella. LOGICA CABLATA E MICROPROGRAMMATA Logica cablata Con questo termine si intende la realizzazione, tramite opportuni dispositivi, di una serie di funzioni logiche di tipo combinatorio e/o sequenziale. In funzione della tecnologia scelta si dovranno affrontare problematiche di tipo elettrico, pneumatico od elettronico, ma si parte sempre da una serie di tabelle della verità che definiscono i requisiti cui deve rispondere il sistema. Dette tabelle saranno alla base delle scelte circuitali,con,cui,verrà,poi,realizzato,il,sistema. Logica programmata Con questo termine si intende l'implementazione tramite una serie di istruzioni, specifiche del "dispositivo informatico" scelto, di quanto richiesto da un determinato problema. Con questa tecnica si ottiene sia facilità di realizzazione e test delle soluzioni proposte, sia la possibilità di una facile "mantenibilità" di quanto sviluppato. I collegamenti fisici del "dispositivo informatico" con gli attuatori/sensori esterni allo stesso permetteranno la sua interazione con il processo che si intende governare mentre la logica con cui farla non sarà più demandata ad una "struttura fisica", ma sarà ottenuta tramite una serie di istruzioni presenti all'interno del "dispositivo informatico". CPU L'unità centrale di elaborazione, in sigla CPU (dal corrispondente termine inglese central processing unit), anche chiamata nella sua implementazione fisica processore, è uno dei due componenti principali della macchina di von Neumann, il modello su cui sono basati la maggior parte dei moderni computer. Compito della CPU è quello di leggere i dati dalla memoria ed eseguirne le istruzioni del programma in memoria; il risultato dell'esecuzione dipende dal dato su cui opera e dallo stato interno della CPU stessa, che tiene traccia delle passate operazioni. In base all'organizzazione della memoria si possono distinguere due famiglie di CPU: con architettura di von Neumann classica, in cui dati e istruzioni risiedono nella stessa memoria (è dunque possibile avere codice automodificante). Questa architettura è la più comune, perché è semplice e flessibile. con architettura Harvard, in cui dati e istruzioni risiedono in due memorie separate. Questa architettura garantisce migliori prestazioni poiché le due memorie possono lavorare in parallelo riducendo le alee strutturali, ma è ovviamente più complessa da gestire. È tipicamente utilizzata nei DSP. Una generica CPU contiene: una Unità di Controllo CU (Control Unit) che legge dalla memoria le istruzioni, se occorre legge anche i dati per l'istruzione letta, esegue l'istruzione e memorizza il risultato se c'è, scrivendolo in memoria o in un registro della CPU. una ALU (Arithmetic Logic Unit) che si occupa di eseguire le operazioni logiche e aritmetiche; dei registri, speciali locazioni di memoria interne alla CPU, molto veloci, a cui è possibile accedere molto più rapidamente che alla memoria: il valore complessivo di tutti i registri della CPU costituisce lo stato in cui essa si trova attualmente. Due registri sempre presenti sono: il registro IP (Instruction Pointer) o PC (Program Counter), che contiene l'indirizzo in memoria della prossima istruzione da eseguire; il registro dei flag: questo registro non contiene valori numerici convenzionali, ma è piuttosto un insieme di bit, detti appunto flag, che segnalano stati particolari della CPU e alcune informazioni sul risultato dell'ultima operazione eseguita. I flag più importanti sono: Flag di stato: Overflow: indica se il risultato dell'operazione precedente era troppo grande per il campo risultato: 0 assenza di overflow,1 overflow Zero: vale 1 se l'ultima operazione ha avuto risultato zero, altrimenti vale 0. Carry: vale 1 se l'ultima operazione ha ecceduto la capacità del registro che contiene il risultato, altrimenti vale 0 (esempio: in un registro a 8 bit, che può rappresentare solo numeri da 0 a 255, la somma 178+250 darebbe come risultato 172, cioè 428 256, e il carry verrebbe posto a 1 insieme al flag di overflow). Segno: indica il segno del risultato dell'operazione precedente: 0 risultato positivo,1 risultato negativo Flag di controllo: Interrupt: se a questo flag viene assegnato valore 1, la CPU smette di rispondere alle richieste di servizio esterne delle periferiche (i segnali delle linee IRQ) finché non viene ripristinato al valore 0, o finché non arriva dall'esterno un segnale di RESET. Oltre a queste unità possono esserne presenti altre, per esempio: una FPU (Floating Point Unit) che si occupa di eseguire calcoli in virgola mobile; una MMU (Memory Management Unit) che si occupa di tradurre gli indirizzi di memoria logici in indirizzi fisici, supportando la protezione della memoria e/o uno o più meccanismi di memoria virtuale. Una generica CPU deve eseguire i suoi compiti sincronizzandoli con il resto del sistema: perciò è dotata, oltre a quanto sopra elencato, anche di uno o più bus interni che si occupano di collegare registri, ALU, unità di controllo e memoria: inoltre all'unità di controllo interna della CPU fanno capo una serie di segnali elettrici esterni che si occupano di tenere la CPU al corrente dello stato del resto del sistema e di agire su di esso. Il tipo e il numero di segnali esterni gestiti possono variare ma alcuni, come il RESET, le linee di IRQ e il CLOCK sono sempre presenti. Per quanto riguarda i registri, le CPU possono gestirli in molti modi: i più comuni sono registri nominativi (CPU CISC classiche), file di registri (RISC) e stack di registri (Transputer e simili). Stack di registri: i registri sono organizzati in una struttura a stack (pila); questa architettura ha il vantaggio di non dover specificare su quale registro interno operare (è sempre quello in cima allo stack) ottenendo istruzioni più corte e più semplici da decodificare. Il rovescio della medaglia è che nel caso sia necessario un dato "sepolto" in fondo allo stack, il suo recupero è un'operazione molto lenta. Registri nominativi: ogni registro è identificato singolarmente e le istruzioni che usano registri specificano di volta in volta quale registro devono usare. Spesso alcuni registri sono dedicati a scopi particolari (registri indice, accumulatori, registri di segmento ecc.) imponendo la non ortogonalità del set di istruzioni (vedi oltre). La gran maggioranza delle CPU generiche degli anni '70 e '80 è di questo tipo. File di registri: I registri sono organizzati come una memoria interna della CPU e indicizzati: la CPU "alloca" un certo numero di registri per ogni processo e/o subroutine in esecuzione, eliminando la necessità di accedere alla RAM per salvare gli stack di chiamata delle funzioni e i dati di task switching nei sistemi multitask. Una CPU è un circuito digitale sincrono: vale a dire che il suo stato cambia ogni volta che riceve un impulso da un segnale di sincronismo dettoclock, che ne determina di conseguenza la velocità operativa, detta velocità di clock: quindi il tempo di esecuzione di una istruzione si misura in cicli di clock, cioè in quanti impulsi di clock sono necessari perché la CPU la completi. In effetti, una parte importante e delicata di ogni CPU è il sistema di distribuzione che porta il segnale di clock alle varie unità e sottounità di cui è composta, per fare in modo che siano sempre in sincronia: tale sistema si dirama in una struttura ad albero con divisori e ripetitori che giunge ovunque nella CPU. Nei processori più moderni (Pentium, Athlon, PowerPC) questa "catena di ingranaggi" elettronica arriva ad impiegare circa il 30% di tutti i transistor disponibili. La velocità di questa distribuzione determina in maniera diretta la massima frequenza operativa di una CPU: nessuna CPU può essere più veloce del suocritical path, cioè del tempo che impiega il clock per percorrere il tratto più lungo in tutto l'albero di distribuzione del clock. Per esempio, se il segnale di clock di una data CPU impiega un nanosecondo per attraversare tutto il chip ed arrivare fino all'ultima sottounità, questa CPU potrà operare a non più di 1 GHz, perché altrimenti le sue componenti interne perderebbero la sincronizzazione, con risultati imprevedibili (per avere un margine di sicurezza, il limite pratico sarà anzi ben minore di 1GHz). Le istruzioni di una CPU (instruction set) sono semplicemente dei numeri, detti opcode o codici operativi: in base al loro valore l'unità di controllo intraprende delle azioni predefinite, come per esempio leggere la successiva locazione di memoria per caricare un dato, oppure attivare la ALU per eseguire un calcolo, oppure scrivere il contenuto di un registro in una certa locazione di memoria o in un altro registro, oppure una combinazione di queste. Per una persona, stendere programmi scrivendo direttamente gli opcode è estremamente noioso e prono all'errore. Per questo motivo si utilizza l'assembly, che associa un simbolo mnemonico ad ogni istruzione della CPU e introduce una sintassi che permette di esprimere i vari metodi di indirizzamento in modo più intuitivo. Una caratteristica importante dell'insieme (set) delle istruzioni di una CPU è la sua ortogonalità: vale a dire, il fatto che ogni istruzione che usi i registri possa usarli tutti indifferentemente (tranne quelli "speciali" come l'IP) e che nessun registro sia in qualche modo privilegiato rispetto agli altri perché su di esso si possono compiere operazioni particolari: è stato dimostrato che un set di istruzioni ortogonali, a parità di tempo di esecuzione delle istruzioni e di numero dei registri, è più efficiente di uno non ortogonale. Schema a blocchi semplificato di una CPU Tipicamente la CPU è l'Interprete del linguaggio macchina. Come tutti gli interpreti, si basa sul seguente ciclo: Acquisizione dell'istruzione: il processore preleva l'istruzione dalla memoria, presente nell'indirizzo (tipicamente logico) specificato da un registro "speciale" ("speciale" opposto di "generico"), il PC Decodifica: una volta che la word è stata prelevata, viene determinata quale operazione debba essere eseguita e come ottenere gli operandi, in base ad una funzione il cui dominio è costituito dai codici operativi (tipicamente i bit alti delle word) ed il codominio consiste nei brani di microprogramma da eseguire Esecuzione: viene eseguita la computazione desiderata. Nell'ultimo passo dell'esecuzione viene incrementato il PC: tipicamente di uno se l'istruzione non era un salto condizionale, altrimenti l'incremento dipende dall'istruzione e dall'esito di questa Questo ciclo elementare può essere migliorato in vari modi: per esempio, la decodifica di una istruzione può essere fatta contemporaneamente all'esecuzione della precedente e alla lettura dalla memoria della prossima (instruction prefetch) e lo stesso può essere fatto con i dati che si prevede saranno necessari alle istruzioni (data prefetch). La stessa esecuzione delle istruzioni può essere suddivisa in passi più semplici, da eseguire in stadi successivi, organizzando la unità di controllo e la ALU in stadi consecutivi, come delle catene di montaggio (pipeline''): in questo modo più istruzioni possono essere eseguite "quasi contemporaneamente", ciascuna occupando ad un certo istante uno stadio diverso della pipeline. Il problema di questo approccio sono le istruzioni di salto condizionato: la CPU non può sapere a priori se dovrà eseguire o no il salto prima di aver eseguito quelle precedenti, così deve decidere se impostare la pipeline tenendo conto del salto o no: e in caso di previsione errata la pipeline va svuotata completamente e le istruzioni in corso di decodifica rilette da capo, perdendo un numero di cicli di clock direttamente proporzionale al numero di stadi della pipeline. Per evitare questo i processori moderni hanno unità interne (“Branch prediction unit”) il cui scopo è tentare di prevedere se, data una istruzione di salto condizionato e quelle eseguite in precedenza, il salto dovrà essere eseguito o no. Inoltre i processori possono implementare al loro interno più unità di esecuzione per eseguire più operazioni contemporaneamente. Questo approccio incrementa le prestazioni delle CPU ma ne complica notevolmente l'esecuzione, dato che per poter eseguire in modo efficiente più operazioni in parallelo la CPU deve poter organizzare le istruzioni in modo diverso da come sono organizzate dal programmatore (esecuzione fuori ordine). Una ulteriore evoluzione di questo concetto è stata implementata nei processori multicore Itanium, che implementano delleistruzioni predicative che possono o meno essere eseguite a seconda del risultato di altre, eseguite in precedenza o contemporaneamente. Quando i transistor disponibili su un solo chip erano pochi e i calcolatori venivano spesso programmati in assembly, era naturale sfruttarli in modo tale da avere CPU con istruzioni potenti, evolute e complesse: più queste erano vicine alle istruzioni dei linguaggi di programmazione ad alto livello più il computer sarebbe stato facile da programmare, e i programmi avrebbero occupato poco spazio in memoria (anch'essa poca e preziosa). Le CPU progettate secondo questo approccio sono dette CISC ed avevano unità di controllo complesse capaci di sfruttare al meglio pochi registri e i cui programmi erano di dimensioni relativamente piccole. A cavallo fra gli anni '70 e gli '80 la situazione però cambiò rapidamente: la RAM divenne più economica e comparvero i primi compilatori moderni, ottimizzanti, in grado di generare linguaggio macchina molto efficiente: per questo si iniziò a pensare ad un nuovo modo di progettare le CPU, prendendo in esame la possibilità di usare i transistor disponibili per avere invece molti registri e un set di istruzioni elementare, molto ridotto, che delegasse al compilatore il lavoro di tradurre le istruzioni complesse in serie di istruzioni più semplici, permettendo così di avere unità di controllo particolarmente semplici e veloci. Attualmente la distinzione fra queste due classi di architetture è venuta in gran parte meno: il numero di transistor disponibili su un solo chip è aumentato tanto da poter gestire molti registri ed anche set di istruzioni complesse. ROM PROM EPROM EEPROM Read only memory (il cui acronimo è ROM) è un dispositivo di memoria interna a sola lettura: normalmente i dati memorizzati in una ROM possono essere letti, ma non modificati. Pur essendo realizzata, come il resto della memoria, su supporto elettronico a semiconduttori, la ROM non è volatile. Questo tipo di memoria serve per conservare i dati e i programmi necessari a inizializzare il calcolatore o le sue periferiche, che sono di uso comune ad ogni accensione (quando né i programmi applicativi né il sistema operativo sono stati ancora caricati nella memoria di lavoro), oppure per contenere i programmi per la diagnostica sullo stato della macchina. La ROM contiene dunque i file che permettono al sistema di accendersi e di funzionare correttamente. In particolare lì viene contenuto il BIOS (Basic Input Output System). Dal punto di vista "fisico", la ROM è un componente hardware (solitamente un circuito integrato)contenente dati disponibili per la sola consultazione. I bit vengono memorizzati già in fabbrica durante la loro realizzazione, posizionando degli appositi interruttori (che poi non saranno più modificabili) su 1 (interruttore chiuso) e 0 (interruttore aperto). Oggi, comunque, le ROM sono cadute in disuso a favore delle memorie Flash (che, pur essendo permanenti, sono riscrivibili), per esempio le memorie EEPROM; tuttavia il termine ROM viene ancora utilizzato per indicare quelle memorie non volatili che mantengono i dati in memoria anche in mancanza di alimentazione. La PROM (acronimo di Programmable Read-Only Memory) è una tipologia di memoria informatica, in particolare una tipologia di memoria scrivibile una sola volta a stato solido. Nasce come evoluzione della ROM a maschera volta a ridurne i notevoli costi di produzione dovuti alla progettazione delle maschere per l'impiantazione ionica. La ROM a maschera infatti richiedeva di cambiare l'intera linea di produzione ogni qual volta fosse necessario modificare anche una minima parte dei circuiti logici. La PROM invece contiene dei fusibili che possono essere bruciati secondo le esigenze per creare i circuiti logici richiesti e richiede un'apparecchiatura speciale per le operazioni di scrittura. Sono state fatte però anche delle PROM dove invece dei fusibili venivano usati degli antifusibili nei quali il collegamento viene creato invece di venire bruciato. La EPROM, acronimo di Erasable Programmable Read Only Memory, è una memoria di sola lettura cancellabile tramite raggi ultravioletti. Si tratta di un'evoluzione della PROM che, una volta programmata, non poteva essere più modificata (salvo usare trucchi da alchimista). La EPROM invece può essere totalmente cancellata (per un numero limitato ma consistente di volte) e riprogrammata a piacimento. La sua invenzione, nel 1971, è dovuta ad un ingegnere israeliano, Dov Frohman, fuoriuscito dalla Fairchild Semiconductor per unirsi a Moore, Noycee Grove, fondatori della società Intel, fuoriusciti da Fairchild l'anno prima. Programmazione EPROM in tecnologia CMOS da 32 KB (256 Kbit) La scrittura nelle celle di una memoria EPROM si realizza tramite un fenomeno di breakdown a valanga. Infatti viene fatta scorrere una forte corrente tra Drain e Source. Con una certa probabilità, alcuni elettroni "caldi" riescono a penetrare nel Gate flottante. La cella è programmata quando nel gate flottante è presente una carica tale da inibire l'accensione del dispositivo. Esisteva un metodo per velocizzare la programmazione. Nelle specifiche fornite del costruttore sulle temporizzazioni dei segnali, era indicato anche il tempo di programmazione, cioè per quanto tempo sul pin adibito a questa funzione doveva permanere la tensione di programmazione (Vpp), i valori erano di qualche decina di millisecondi. Per sicurezza (a causa delle tolleranze di costruzione), questo valore era posto largamente al di sopra del tempo normalmente impiegato da una cella a portarsi a valore 0 (scritta), pertanto in molti casi, in alternativa alla temporizzazione standard, si adottava il metodo "adattativo", il quale consisteva in due operazioni ripetute più volte; veniva fornita tensione di programmazione per un decimo del tempo standard, dopodiché veniva letta la cella, il ciclo si ripeteva fino a che la cella non risultasse programmata, a questo punto veniva fornita tensione di programmazione per un tempo uguale alla somma dei tentativi di programmazione precedenti, in pratica se erano occorsi in totale 15 millisecondi per portare la cella a 0, veniva fornita tensione di programmazione per altri 15 millisecondi, con il raddoppio del tempo di programmazione si aveva certezza di stabilità del dato scritto. Ovviamente tutta la sequenza avveniva in automatico, gestita dal firmware dell'eprom programmer. A fine programmazione si copriva la finestrella con un'etichetta sulla quale era riportato il livello di release del microcodice, e nello stesso tempo poneva in condizioni di buio il chip. Cancellazione Questo Microcontrollore 8749 mantiene il suo programma in una EPROM interna Per permettere l'irradiazione ultravioletta, il die della EPROM è posizionato nel package al di sotto di una finestrella trasparente. Nelle prime versioni, la finestra veniva chiusa con una sottile lastrina di quarzo, in seguito fu utilizzato il semplice vetro, utilizzando la quantità necessaria a coprire come una lente il foro tondo ricavato nella metà superiore del package ceramico destinato a questo dispositivo. La cancellazione avveniva per mezzo di un attrezzo chiamato Eprom Eraser, una semplice scatola contenente una lampada a raggi UV di tipo UV-C e un temporizzatore elettromeccanico, il quale permetteva di impostare il tempo di irradiazione fino ad un massimo di 45 minuti; gli Eraser più piccoli erano dotati di una lampada in grado di cancellare in un'unica operazione una dozzina di EPROM. La cancellazione consisteva nel portare tutti i bit (celle o locazioni) a valore alto (1), la EPROM a questo punto tornava a essere programmabile. Le EPROM sono ormai da considerare obsolete e non vengono praticamente più usate. Sono state sostituite dalle memorie flash oEEPROM che possono essere cancellate elettricamente senza dover ricorrere ai raggi UV. Tipi di EPROM Ingrandimenti del die di una EPROM Sono stati prodotti diversi tipi di EPROM che si differenziano - oltre che per la capacità di memoria disponibile, anche per la velocità (tempo di accesso) e per le tensioni di lavoro e di programmazione. Generalmente ciascun programmatore ha un elenco di chip, divisi per produttore, per automatizzare le operazioni di impostazione ai fini della programmazione, la quale poteva essere effettuata in due modi: trasferire all'Eprom-Programmer il file in codice esadecimale residente su floppy o hard disk di un computer tramite un'interfaccia, oppure copiare direttamente il contenuto di una EPROM campione, in una o più EPROM vergini. Le EPROM con capacità fino a 4096 byte (32768 celle), con sigla commerciale 2732, adottavano un package a 24 pin, interamente occupati dai 12 fili di indirizzo, 8 fili dei dati, 1 di selezione chip, 1 per la programmazione e 2 per l'alimentazione. Per le versioni successive, a partire dal chip siglato 2764, avente capacità doppia (8192 byte per un totale di 65536 celle), si rese necessario impiegare un package a 28 pin, venendo a mancare il pin necessario ad ospitare il tredicesimo filo di indirizzo; più avanti nel tempo con l'aumentare di capacità, anche il package a 28 pin non fu più sufficiente. Il package era unicamente ceramico, dovendo garantire la tenuta stagna della finestra. A partire dal chip con capacità di 8 Kbyte in poi, alcuni di questi tipi di memoria furono prodotti anche usando la tecnologia CMOS, consentendo una forte riduzione nel consumo di corrente a beneficio anche di una minore produzione di calore. La EEPROM, acronimo di Electrically Erasable and Programmable Read Only Memory, è una memoria ROM programmabile da parte dell'utente. Le operazioni di scrittura, cancellazione e riscrittura hanno luogo elettricamente. Ciascuna cella di memoria capace di memorizzare un singolo bit è costituita da due transistori MOS, uno "di memoria" e uno "di accesso". Nascita della tecnologia La tecnologia EEPROM è stata sviluppata sulla base della preesistente tecnologia EPROM al fine di ovviare al problema della cancellazione dei dati. In ambito EPROM, infatti, mentre la scrittura può avere luogo per via elettrica, la cancellazione viene effettuata attraverso l'esposizione a radiazione UV, con conseguenti inconvenienti di natura logistica (rimozione del chip dalla scheda su cui è assemblato, perdita di tempo). EPROM ST M27C512 Il transistor di memoria Il transistor di memoria ha due gate. Il primo è un gate tradizionale, collegato elettricamente con il resto del gruppo. In questa tecnologia è denominato control gate. Il secondo gate è sepolto nell'ossido e quindi isolato elettricamente. Esso è separato dal primo gate, così come dal canale del transistor, per mezzo di un sottilissimo strato di materiale isolante. Per questo motivo è detto floating gate. In gergo, lo si definisce flottante. A differenza delle EPROM, nelle EEPROM vi è una regione, in prossimità del drain, in cui lo spessore dello strato di ossido che separa il floating gate dal canale è ridotto al punto tale da permettere il passaggio di elettroni per effetto tunnel (FowlerNordheim). Il transistor di memoria viene programmato attraverso il pilotaggio in tensione del control gate. La variazione del potenziale a cui questo si trova esposto determina, nella zona in cui il ridotto spessore dell'ossido isolante lo rende possibile, il manifestarsi dell'effetto tunnel e la conseguente attrazione di elettroni dal drain al gate sepolto. Il transistor di accesso Come nel caso delle memorie EPROM, anche le EEPROM presentano una criticità legata alla fase di cancellazione. Il processo di scarica del floating gate può infatti determinare, come effetto indesiderato, l'accumulo di una carica positiva con conseguente variazione della tensione di soglia del dispositivo. Il problema è stato risolto mediante l'introduzione dei transistori di accesso, che sono parte integrante della cella. La presenza di questi ultimi determina tuttavia, un maggiore impiego di area rispetto alle EPROM. Per ovviare a questo problema sono nate lememorie flash. È bene ricordare che le memorie flash differiscono dalle EEPROM per il fatto che la programmazione si basa, in quest'ultimo caso, sul fenomeno fisico della iniezione a valanga, e non su quello dell'effetto tunnel. Il transistor di accesso, pilotato dalla word line, svolge inoltre la funzione di mettere in comunicazione il transistor di memoria con la bit line quando è necessario leggere il dato binario immagazzinato sotto forma di carica elettrica all'interno del canale del transistor. RAM DINAMICA La ram dinamica è il dispositivo di memoria più usato in ambito informatico, è utilizzata in banchi come di memoria principale. È realizzata su un chip di silicio e svolge la stessa funzione della ram statica, ma a differenza di questa, l'elemento di memoria è un semplicecondensatore, anziché un flip-flop. Ha un basso costo ed un capacità elevata, ma a differenza della ram statica, necessita di un circuito di servizio per l'operazione di rinfresco (refresh). Questa operazione è necessaria data la natura della cella di memoria che è costituita da un condensatore il quale risulta a valore logico 1 se è carico e a valore 0 se è scarico, pertanto per mantenere carichi i condensatori aventi valore 1, il circuito di refresh fornisce a intervalli di tempo costante, un impulso di corrente di ricarica. La memoria ad accesso casuale, acronimo RAM (del corrispondente termine inglese Random-Access Memory), è una tipologia di memoria informatica caratterizzata dal permettere l'accesso diretto a qualunque indirizzo di memoria con lo stesso tempo di accesso. La memoria ad accesso casuale si contrappone alla memoria ad accesso sequenziale e alla memoria ad accesso diretto rispetto alle quali presenta tempi di accesso sensibilmente inferiori motivo per cui è utilizzata come memoria primaria. La tipologia di memoria ad accesso casuale più comune attualmente è a stato solido, a lettura-scrittura e volatile, ma rientrano nella tipologia di memoria ad accesso casuale la maggior parte delle tipologie di ROM (inteso nell'accezione più comune e non come memoria a sola lettura), la NOR Flash (una tipologia di memoria flash), oltre a varie tipologie di memorie informatiche utilizzate ai primordi dell'informatica e oggi non più utilizzate come ad esempio la memoria a nucleo magnetico. Esclusivamente l'acronimo RAM (non il termine "memoria ad accesso casuale") ha anche una seconda accezione più ristretta ma attualmente più diffusa secondo cui la RAM è una memoria ad accesso casuale della tipologia più comune cioè a stato solido, a lettura-scrittura e volatile. Memoria DIMM PC133 L'uso della memoria RAM è comune a tutte le architetture hardware, sia a singolo processore che multiprocessore e costituisce la memoria primaria dell'elaboratore. A seconda dell'architettura usata, la CPU può accedere direttamente alla memoria oppure accedervi tramite appositi controller. Nel caso di sistemi multiprocessore, la memoria primaria può essere condivisa da più processori oppure può essere partizionata, nel qual caso ogni processore dispone di una memoria privata. Esistono anche architetture miste dove è presente sia una memoria primaria condivisa da tutti i processori che una memoria privata dedicata ad ognuno di essi. Il processore carica dalla RAM, quando non presenti nella propria cache interna, le istruzioni da eseguire e i dati da elaborare per poi riscriverli nuovamente in RAM. Poiché generalmente è più lenta del processore, la sua velocità è un fattore determinante per le prestazioni dell'intero calcolatore. Caratteristica comune a tutti i tipi di RAM utilizzati per la memoria principale è quella di perdere il proprio contenuto nel momento in cui viene a mancare l'alimentazione elettrica. Sono allo studio altri tipi di memoria, basati su altri principi, che in futuro potrebbero consentire di superare questa limitazione. Tipologie SRAM Vecchia RAM a nuclei magneticida 1,5 Megabit Nelle SRAM, acronimo di Static Random Access Memory, ovvero RAM statica ogni cella è costituita da un latch realizzato da due porte logiche. Le celle sono disposte a matrice e l’accesso avviene specificando la riga e la colonna. Consentono di mantenere le informazioni per un tempo infinito, sono molto veloci, consumano poco e quindi dissipano poco calore. La necessità di usare molti componenti, però, le rende molto costose, difficili da impacchettare e con una scarsa capienza. Proprio per la loro bassa capienza, sono solitamente usate per le memorie cache, dove sono necessarie elevate velocità in abbinamento a ridotti consumi e capienze non troppo elevate (dell'ordine di pochi Mb). DRAM Memoria DIMM DDR La DRAM, acronimo di Dynamic Random Access Memory, ovvero RAM dinamica, è costituita, a livello concettuale, da un transistor che separa un condensatore, il quale mantiene l'informazione, dai fili di dati. A livello pratico non viene usato un vero condensatore ma si sfruttano le proprietà elettrico/capacitive dei semiconduttori. È così possibile usare un solo componente per ogni cella di memoria, con costi molto ridotti e la possibilità di aumentare notevolmente la densità di memoria. A causa del non perfetto isolamento il condensatore si scarica, quindi dopo un breve lasso di tempo il suo contenuto diventa inaffidabile. Si rende necessario perciò ricaricarlo, l'operazione è detta di "refreshing", provvedendo ad eseguire un'operazione di lettura fittizia e riscrittura entro il tempo massimo in cui il contenuto può essere considerato ancora valido. Queste operazioni sono eseguite da un circuito interno alle memorie stesse. Oltre a comportare un certo dispendio di energia rendono più lenta la memoria in quanto, mentre si sta eseguendo il rinfresco, non è possibile accedervi. Le memorie DRAM si possono considerare abbastanza affidabili anche perché molto spesso ad ogni riga della memoria è associato un bit di parità, che consente di individuare eventuali errori singoli all'interno della riga, oppure una serie di bit (log n), che opportunamente impostati nel momento di ogni scrittura, generano il codice di Hamming corrispondente, che consente di individuare e correggere errori singoli e individuare errori doppi. È importante sottolineare come l'operazione di lettura sia distruttiva, in quanto nel momento in cui un dato viene letto viene anche perso; risulta quindi necessaria la sua riscrittura immediata e questo porta a uno spreco di tempo. Le DRAM sono asincrone, ovvero l'accesso in scrittura ed in lettura è comandato direttamente dai segnali in ingresso al contrario delle memorie sincrone in cui il passaggio da uno stato all'altro è sincronizzato ad un segnale di clock. Per ogni cella sono presenti un numero basso di componenti che permettono di ottenere un’alta capacità complessiva del dispositivo, un basso assorbimento di potenza e costi ridotti, sono dunque utilizzate generalmente per la memoria principale del sistema. SDRAM Memoria SODIMM DDR, utilizzata per i personal computer portatili. La SDRAM, acronimo di Synchronous Dynamic Random Access Memory, ovvero DRAM sincrone, si differenzia dalla DRAM normale per il fatto che l'accesso è sincrono, ovvero governato dal clock. Tale segnale di clock temporizza e sincronizza le operazioni di scambio di dati con il processore, raggiungendo una velocità almeno tre volte maggiore delle SIMM con EDO RAM. Tipicamente saldata in un modulo di tipo DIMM, è normalmente impiegata come memoria principale deiPersonal Computer di tipo Pentium e successivi. Alcuni esempi sono classificati come : SDR SDRAM : indica le originarie memorie SDRAM. Con l'evoluzione tecnica, questa tipologia ha preso il suffisso SDR ossia Single Data Rate, per differenziarle dalle successive SDRAM con controller DDR. Il single data rate indicava l'accettazione di un comando e il trasferimento di 1 word di dati per ciclo di clock (tipicamente 100 e 133 Mhz). Il data bus era diversificato ma tipicamente erano impiegate su moduli DIMM da 168 pin e potevano operare su 64 bit (non-ECC) o 72 bit (ECC) alla volta. DDR SDRAM DDR2 DDR3 SODIMM : da notare che il package SODIMM non necessariamente contiene memoria SDRAM FeRAM La FeRAM, acronimo di Ferroelectric Dynamic Random Access Memory, ha la peculiarità di mantenere i dati senza l'ausilio del refresh di sistema. Utilizzano un materiale denominato ferroelettrico che ha la capacità di mantenere la propria polarizzazione anche dopo esser scollegato dalla fonte energetica. Memoria a cambiamento di fase Le memoria a cambiamento di fase sono delle memorie ad accesso casuale che utilizzano il cambiamento di fase di un materiale per memorizzare le informazioni. Questo permette alle memoria di mantenere le informazioni anche senza alimentazione, come le memorie flashma rispetto a queste hanno alcuni vantaggi. La principale è la velocità di scrittura che può arrivare ad essere più rapida di 30 volte, come ciclo di vita 10 volte maggiore e nota non trascurabile un costo minore dato dalla lavorazione più veloce. Si prevede che entro il 2010 questa tecnologia sostituirà l'attuale tecnologia NOR. Frequenze Microprocessore Ingrandimento del Die di un moderno microprocessore Un microprocessore, anche abbreviato dellaCPU in un singolo circuito integrato. in µP, è un'implementazione fisica Il microprocessore è attualmente l'implementazione fisica della CPU più comune, utilizzata dalla quasi totalità dei computer e in altri dispositivi digitali (come ad esempio telefoni cellulari, stampanti, scanner). Può essere considerato il "motore" di elaborazione dati, racchiuso in un unico circuito integrato, in grado di leggere, elaborare e scrivere informazioni in un memoria o verso altri dispositivi digitali. Il primo microprocessore Il 4004 con la copertura rimossa (a sinistra) e come veniva venduto (a destra) Come altre innovazioni tecnologiche il microprocessore apparve appena la tecnologia lo consentì dato che l'idea di integrare i componenti di una CPU in un singolo circuito integrato era una soluzione logica. Quasi contemporaneamente infatti, iniziarono lo sviluppo l'Intel 4004, il Texas Instruments TMS 1000, e il Garrett AiResearch Central Air Data Computer. Nel 1968 Garrett iniziò a sviluppare un sistema elettronico per competere con i sistemi elettromeccanici utilizzati nei caccia militari. L'obiettivo del progetto era equipaggiare il nuovo F-14 Tomcat che allora era in sviluppo. Il progetto venne completato nel 1970 e utilizzava integrati MOS per il core della CPU. Il progetto era semplice e innovativo e vinse sui competitori elettromeccanici venendo utilizzato fin dai primi Tomcat. La marina americana però considerò il progetto tanto innovativo che impedì la pubblicazione di articoli sul sistema fino al 1997, per cui questo microprocessore rimase semisconosciuto. Texas Instruments (TI) sviluppò il sistema TMS 1000 a 4 bit per applicazioni embedded pre-programmate. Il 17 settembre 1971 annunciò il modello TMS 1802NC, programmabile, che poteva essere utilizzato per implementare un calcolatore. L'Intel 4004, processore a 4 bit, venne presentato il 15 novembre 1971 e fu sviluppato da Federico Faggin e Marcian Hoff. TI presentò la prima richiesta di brevetto per il microprocessore. Gary Boone ottenne l'assegnazione del brevetto U.S. Patent 3,757,306 per l'architettura di un microprocessore a singolo chip il 4 settembre 1973. Non è mai stato reso noto se realmente l'azienda avesse avuto il microprocessore funzionante nei suoi laboratori. Comunque sia nel 1971 che nel 1976 Intel e TI stipularono un accordo in cui Intel pagava a TI i diritti per l'utilizzo del suo brevetto. Un riassunto della storia è contenuto nella documentazione che Intel presentò in tribunale quando fu chiamata in giudizio da Cyrix per violazione dei brevetti e Ti intervenne come proprietario del brevetto originario. Interessante è il fatto che recentemente Intel e TI abbiano affermato di avere brevetti che potrebbero coprire il brevetto del "microprocessore". Inquesta pagina web TI e Intel predatano il brevetto descrivendo un microcontrollore che potrebbe coprire il brevetto del microprocessore essendo il progetto indicato concettualmente simile: Gary Boone e Michael J. Cochran presso la TI ne depositarono il brevetto, U.S. Patent 4,074,351, che pur essendo più simile a un microcontroller potrebbe coprire anche quello del microprocessore. Secondo "A History of Modern Computing'", (MIT Press), pp. 220–21, Intel venne contattata dalla Computer Terminals Corporation (in seguito nota come Datapoint) di San Antonio TX per l'acquisto dell'integrato che stava sviluppando. In seguito Datapoint decise di non utilizzare l'integrato e Intel lo immise sul mercato come 8008 nell'aprile del 1972, riscuotendo un certo successo, creando il primo vero mercato per i microprocessori: fu la base del famoso computer Mark-8 venduto in scatola di montaggio da Radio-Electronics nel 1973. Processori a 8 bit significativi Intel 8080A Il 4004 venne seguito nel 1972 dall'8008, il primo microprocessore a 8 bit del mondo, evoluto successivamente nel più famoso Intel 8080 (1974). Dal progetto 8080 venne derivato il clone Z80 prodotto nel 1976 dalla ZiLOG, società fondata da alcuni fuoriusciti dalla Intel, tra i quali lo stesso Federico Faggin. Compatibile a livello di set istruzioni, lo Z80 includeva diversi miglioramenti che lo fecero rapidamente preferire all'8080 dagli sviluppatori. Intel reagì producendo nel 1976 una propria versione migliorata dell'8080, l'8085, ancora compatibile a livello binario con i programmi scritti per l'8080. Motorola presentò nell'agosto del 1974 il 6800, primo processore ad adottare un registro indice. Molto versatile, ebbe un discreto successo, oscurato in parte l'anno successivo dal lancio del MOS Technology 6502: era ispirato all'architettura del 6800, dotato di alcune soluzioni tecniche migliorative e soprattutto caratterizzato da un costo drasticamente inferiore (25 USD contro i 175 UDS del 6800), cosa che lo rese estremamente popolare. Il 6502 fu scelto, ad esempio, da Steve Wozniak per l'Apple Inel 1976 ed il successivo Apple II nel 1977. Motorola reagì con il 6809 (1979), uno dei più potenti e ortogonali processori a 8 bit mai sviluppati: non usava microcodice, e l'unità di controllo era interamente in logica cablata. I successori del 6809 risultarono essere troppo complessi per poter mantenere questo approccio e vennero equipaggiati con una tradizionale unità logica a microcodice. Il progetto 6809 è alla base di una serie molto diffusa di microcontrollori tutt'ora utilizzata in sistemi embedded. The Western Design Center, Inc. (WDC) presentò nel 1982 il 65C02 con tecnologia CMOS e licenziò il progetto a molte altre ditte che svilupparono i processori alla base dei computer Apple IIc e IIe. Il processore fu utilizzato anche in pacemaker, defibrillatori, automobili, prodotti industriali e di consumo. WDC fu pioniera nella vendita delle proprietà intellettuali e fu seguita anni dopo da Architettura ARM e altre ditte che basano i loro guadagni sullo sviluppo e sulla vendita delle proprietà intellettuali. Un altro processore a 8 bit che ebbe una discreta fama fu il Signetics 2650 un processore con un'architettura innovativa e un potente set di istruzioni. Tutti questi processori furono alla base della "rivoluzione" degli home computer, poiché grazie al loro basso prezzo permisero la realizzazione di veri computer ad un costo accessibile. Il primo microprocessore utilizzato per applicazioni spaziali fu l'RCA RCA 1802 (conosciuto anche come CDP1802 o RCA COSMAC) (presentato nel 1976) che venne utilizzato dalle sonde NASA Voyager, Viking e dalla sonda Galileo (lanciata nel 1989 e arrivata nel 1995 su Giove). L'RCA COSMAS era la prima implementazione della tecnologia CMOS. IL CDP1802 venne utilizzato dato che era a basso consumo e dato che era prodotto con una tecnologia (Silicon on Sapphire) che lo rendeva meno sensibile ai raggi cosmici e alle cariche elettrostatiche. Il 1802 può essere considerato il primo microprocessore anti radiazione della storia. Processori a 16 bit Il TMS-9900 il primo microprocessore a 16 bit su singolo chip Il primo microprocessore a 16 bit fu il National Semiconductor IMP-16 basato su più integrati. Venne presentato nel 1973 e una versione a 8 bit chiamata IMP-8 venne presentata nel 1974. Nel 1975 National presento il primo microprocessore a 16 bit su singolo chip il PACE, che fu seguito dalla versione NMOS chiamata INS8900. Altri sistemi multichip a 16 bit furono l'LSI-11 prodotto da Digital Equipment Corporation per il minicomputer PDP 11/03 e il MicroFlame 9440 della Fairchild Semiconductor prodotto tra il 1975 e il 1976. Il primo microprocessore a 16 bit su singolo chip fu il Texas Instruments TMS9900un processore compatibile con la linea TI 990 di minicomputer. Il 990 venne utilizzato dai minicomputer TI990/4, dall'home computer TI-99/4A e dai computer TM990 prodotti da terze parti. Il processore era inserito in un integrato ceramico da 64 pin di tipo DIP mentre molti altri microprocessori a 8 bit dell'epoca utilizzavano un più economico package a 40 pin di tipo plastico. Il successivo TMS 9980 venne sviluppato per competere con l'Intel 8080 e venne inserito in un package plastico di 40 pin. Il processore era compatibile con il set di istruzioni TI 990 ma per poter utilizzare solo 40 pin faceva muovere 8 bit di dati per ciclo di clock e gestiva un indirizzamento di 16 KB. Il successore TMS 9995 aveva una nuova architettura. La famiglia venne espansa con il 99105 e il 99110. La Western Design Center, Inc. presento nel 1984 il CMOS 65816 una versione a 16 bit del WDC CMOS 65C02. Il 65816 fu il cuore dell'Apple IIGS e del Super Nintendo Entertainment System, uno dei progetti a 16 bit più famosi dell'epoca. Diversamente da TI, Intel non aveva una linea di minicomputer da emulare e decise di usare l'8085 come base per il suo progetto a 16 bit, realizzando così l'Intel 8086, capostipite di quella che poi sarebbe diventata la famiglia X86, i cui discendenti sono molto diffusi nei modernipersonal computer. Realizzò anche una versione con il bus esterno a 8 bit, l'8088, che venne impiegato nel primo IBM PC modello 5150. Successivi sviluppi furono gli Intel 80186, 80286 e nel 1985 l'Intel 80386, la prima versione a 32 bit compatibile X86. La prima Memory management unit (MMU) integrata in un microprocessore venne sviluppata da Childs e altri per Intel e ricevette il brevetto U.S. Patent 4,442,484. Progetti a 32 bit Il Motorola 68000, il primo microprocessore a 32 bit a larga diffusione I progetti a 16 bit erano disponibili da pochi anni quando sul mercato iniziarono ad apparire architetture a 32 bit. Il primo microprocessore a 32 bit fu il BELLMAC-32A prodotto dalla AT&T Bell Labse i primi esemplari furono prodotti nel 1980 mentre la produzione in serie iniziò nel 1982 (si veda qui per la bibliografia o qui per le caratteristiche). Nel 1984 dopo lo smembramento della AT&T il microprocessore venne rinominato WE 32000 (WE daWestern Electric) e vennero sviluppati due successori, il WE 321000 e il WE 32200. Questi microprocessori vennero utilizzati nei minicomputer AT&T 3B5 e 3B15. Il 3B2 fu il primo superminicomputer da tavolo. I processori vennero utilizzati anche inCompanion il primo computer portatile a 32 bit e in Alexander il primo supermicrocomputer grande quanto un libro. Il sistema era dotato anche di cartucce ROM, simili a quelle utilizzate da alcune console attuali. Tutte queste macchine eseguivano l'originale Unix sviluppato dai Bell Labs e includevano il primo gestore grafico chiamato xt-layer. Il primo processore a 32 bit ad arrivare sul mercato dei personal computer fu però il Motorola 68000 presentato nel 1979. Il 68000 possedeva un'architettura interna a 32 bit ma un bus dati a 16 bit per ridurre il numero di pin del package. Motorola normalmente lo indicava come un processore a 16 bit sebbene l'architettura interna fosse chiaramente a 32 bit. La combinazione di alta velocità, ampio spazio di indirizzamento (16 MB) e costo contenuto ne fecero un processore molto diffuso: venne usato dall'Apple Lisa e dal Macintosh e da molti altri sistemi come l'Atari ST e l'Amiga, e anche Olivetti lo impiegò sulla sua linea di minicomputer denominata L1. Dato il successo ottenuto, Motorola sviluppò una serie di successori del 68000: il secondo della famiglia fu l'MC 68010 che aggiunse il supporto della memoria virtuale. Nel 1984 presentò il Motorola 68020, la prima versione con bus dati e indirizzi a 32 bit. Il 68020 fu molto popolare nei superminicomputer Unix e diverse compagnie produssero macchine basate su questo microprocessore. Il successivo Motorola 68030 (1987) introdusse la MMU nel microprocessore; la famiglia 68000 in quel periodo era l'unica a contendere la palma di processori per personal computer alla famiglia x86, con un grosso vantaggio in termini di prestazioni e versatilità. Il successivo Motorola 68040 (1991) inserì il coprocessore matematico nel microprocessore e migliorò notevolmente le sue prestazioni grazie all'adozione della pipeline. Tuttavia Motorola, operando anche in altri mercati oltre a quello dei microprocessori, non fu in grado di tenere il passo con Intel e le varie case produttrici di processori x86 compatibili sul piano della ricerca e dell'accelerazione tecnologica: i successivi processori della serie, il 68050 e 68060, offrivano un incremento prestazionale molto modesto, rimanendo staccati dalle prestazioni offerte dai modelli x86 compatibili di prezzo analogo. Alcune società avevano utilizzato il 68020 per realizzare soluzioni embedded. Ci fu un periodo dove il numero di 68020 utilizzati in sistemi embedded era uguale a quello dei personal computer con processore Pentium [1]. Motorola a tal proposito sviluppò la famiglia ColdFirederivata dal 68020. Tra l'inizio e la metà degli anni '80 National Semiconductor presentarono una versione a 32 bit del loro precedente processore, il processore chiamato NS 16032 aveva una piedinatura compatibile con la versione a 16 bit. Il successore con piedinatura in grado di trasmettere 32 bit di dati e indirizzi fu l'NS 32032 che venne utilizzato in una linea di computer industriali prodotti da OEM. In quel periodo la Sequent presentò il primo sistema server SMP basato su NS 32032. Questi sistemi vennero abbandonati alla fine degli anni 80. Altre architetture come l'interessante Zilog Z8000 arrivarono troppo tardi sul mercato e non ebbero seguito. Processori a 64 bit per personal computer L'Athlon 64, prima CPU a 64 bit compatibile con l'architettura x86 Sebbene i microprocessori a 64 bit fossero disponibili per i sistemi di fascia alta (server e workstation) fin dagli anni 90, solo dopo l'inizio del nuovo millennio si iniziarono a vedere sistemi a 64 bit per il mercato dei personal computer. AMD presentò il primo sistema a 64 bit compatibile con l'architettura x86 nel settembre 2003 con l'Athlon 64. Questo microprocessore implementava l'AMD64 una espansione a 64 bit dell'IA-32 sviluppata da AMD. Intel arrivò poco dopo con l'estensione x86-64 che pur con un nome diverso era l'estensione sviluppata da AMD; infatti ne era pienamente compatibile. I processori supportavano le istruzioni a 32 bit per compatibilità ma solo con la modalità a 64 bit riuscivano a mostrare a pieno la loro potenza. Con il passaggio a 64 bit vennero raddoppiati i registri gestiti dal set di istruzioni dei processori per migliorare le prestazioni dei sistemi. La penuria di registri è sempre stata un problema per le architetture x86. Il passaggio dei processori PowerPC ad un'architettura a 64 bit fu invece indolore, i processori vennero sviluppati durante l'inizio degli anni 90 e vennero previsti fin dall'inizio le estensioni a 64 bit. I registri degli interi e la gestione degli indirizzi venne estesa a 64 bit mentre la parte in virgola mobile era già a 64 bit. Non furono aggiunti nuovi registri e le prestazioni dei programmi a 32 bit non erano penalizzate dalla nuova architettura. Architetture Multicore Un approccio per incrementare le performance di un computer consiste nell'utilizzo di più processori, come nelle architetture SMP utilizzate in server e workstation a partire dagli anni '90. L'inseguimento della legge di Moore ha però presentato difficoltà sempre maggiori, così come nella progettazione di singoli chip più prestanti, mano a mano che si avvicinavano i limiti fisici della tecnologia. Conseguentemente, i produttori hanno cercato soluzioni alternative per inseguire i costanti aggiornamenti nel mercato. Grazie anche alla continua evoluzione della tecnologia di fabbricazione dei chip, si è resa possibile la realizzazione di processori multi core, costituiti dall'integrazione di più microprocessori (core) su un singolo chip. I processori multi-core consentono potenzialmente una moltiplicazione delle performance in base al numero dei core (ammesso che il sistema operativo sia in grado di avvantaggiarsene). I vari core possono condividere tra loro alcuni componenti come il bus di interfaccia o la cache di secondo livello. La prossimità estrema dei diversi core consente uno scambio di dati molto più veloce in comparazione con i sistemi SMP discreti tradizionali, migliorando le prestazioni generali. Nel 2005 è stato presentato il primo processore dual-core (a due core) e già nel 2007 i processori dual-core erano ampiamente diffusi in server, workstation e nei PC. Al 2008 si annoverano già processori quad-core (a quattro core) per applicazioni highend in ambito professionale ma anche domestico. La Sun Microsystems ha recentemente annunciato i chip Niagara e Niagara 2, entrambi con architettura eight-core (a otto core), mentre sono già ampiamente diffusi processori dual-core di Intel e AMD, tri-core di IBM (di derivazione PowerPC, utilizzate nella console Xbox 360) e quad-core per applicazioni high-end. RISC Un microprocessore RISC R4400 Tra la metà degli anni 80 e l'inizio degli anni 90 apparvero molti microprocessoriRISC ad alte prestazioni sebbene questi microprocessori vennero utilizzati principalmente in sistemi ad alte prestazioni basati su varianti del sistema operativo Unix e su macchine embedded. Da allora i sistemi RISC si diffusero ovunque e oramai anche i microprocessori Intel integrano all'interno un'architetture RISC che utilizza uno strato di emulazione per eseguire il codice x86 che è di tipo CISC. Il concetto RISC apparve nei supercomputer fin dagli anni 60 (CDC 6600) ma i primi progetti che puntarono allo sviluppo di microprocessori esplicitamente RISC risalgono agli anni 80 con i progetti Berkeley RISC e il progetto MIPS della Stanford University. Il primo microprocessore RISC commerciale fu l'R2000, un sistema a 32 bit appartenente all'architettura MIPS derivata dall'architettura sviluppata a Stanford. Il successore R3000 migliorò le prestazioni e l'R4000 fu il primo sistema a 64 bit RISC. Progetti concorrenti furono l'IBM POWER e il Sun SPARC. Poco dopo anche altri produttori iniziarono a rilasciare processori RISC, tra questi si segnalano l'AT&T CRISP, l'AMD 29000, l'Intel i860 e Intel i960, il Motorola 88000, il DEC Alpha e il PA-RISC. La guerra dei microprocessori ha eliminato quasi tutte le famiglie, solo il PowerPC e lo SPARC resistono nei sistemi di calcolo per server e supercomputer. I MIPS fino al 2006 furono utilizzati da Silicon Graphics per alcuni loro sistemi sebbene adesso siano utilizzati principalmente in applicazioni embedded. Alcune società come la ARM seguirono una strada diversa. Inizialmente i processori ARM vennero progettati per l'utilizzo nei personal computer ma nel giro di pochi anni la società si rese conto dell'elevata richiesta di processori a basso consumo per applicazioni embedded e si convertì invadendo il mercato embedded con opportune versione di processori ARM. Attualmente il mercato dei dispositivi embedded e dominato dai processori MIPS, ARM e PowerPC. Nel calcolo a 64 bit le architetture DEC SPARC, Power e Itanium sono tra le più popolari. Alpha, AMD64, MIPS, Realizzazione La realizzazione dei chip (e quindi anche dei microprocessori) avviene in diverse fasi. Il materiale di partenza è una fetta circolare di semiconduttore detta substrato: questo materiale, già debolmente drogato, viene ulteriormente drogato per impiantazione ionica per creare le zone attive dei vari dispositivi; vengono poi depositati una serie di sottili strati di materiali diversi che vanno a creare il wafer: Strati di semiconduttore policristallino; Strati isolanti sottili; Strati isolanti di ossido molto più spessi dei precedenti; Strati metallici per i collegamenti elettrici, generalmente costituiti da alluminio e più raramente da rame Reticolo di atomi di "silicio stirato" in un moderno microprocessore La geometria delle zone che devono ricevere il drogaggio è impressa con un processo di fotolitografia: ogni volta che il circuito integrato deve ricevere un nuovo strato o una nuova impiantazione di droganti, viene ricoperto da un sottile film fotosensibile, che viene impressionato tramite una maschera ad altissima definizione. Le zone del film illuminate divengono solubili e vengono asportate dal lavaggio, lasciando in tal modo scoperto il chip sottostante. Una volta terminata la creazione dei chip sul substrato, questi vengono testati, il substrato viene tagliato e i chip incapsulati nei packages con cui verranno montati sui circuiti stampati. In un circuito integrato si possono facilmente inserire transistor e diodi: è anche possibile creare su semiconduttore delle piccole resistenze e condensatori, ma in genere questi ultimi componenti occupano molto spazio sul chip e si tende ad evitarne l'uso, sostituendoli quando possibile con reti di transistor. Non è invece possibile integrare degli induttori, dei trasformatori, che devono quindi essere collegati esternamente al circuito integrato: lo stesso vale per i condensatori di media e grande capacità. In questi ultimi anni, tuttavia, si è iniziato ad usare il Silicio in combinazione col Germaniocon la tecnica del silicio stirato (Strained-Silicon). Questa tecnica consiste nel depositare, sul corpo del wafer di silicio, uno strato di silicio-germano di 2micron con concentrazione di germano pari al 20%; la concentrazione di germano non è uniforme in tutto lo strato: vi è una maggiore concentrazione sulla cima della struttura. A questo punto un sottilissimo strato di silicio dello spessore di circa 20nm viene depositato sullo strato di Silicio-Germano. Questa tecnica allunga il reticolato cristallino del Silicio di circa l'1% sia in direzione laterale che verticale e ciò permette un enorme incremento sulla mobilità dei portatori di carica, che incontrano una resistenza inferiore al loro passaggio e fluiscono fino al 70% più velocemente, cosa che rende più veloci i chip del circa 30% senza bisogno di ulteriori miniaturizzazioni. Il principio che sta alla base di tutto questo è che gli atomi di silicio dello strato sovrastante tendono ad allinearsi con quelli dello strato di Silicio-Germano che, essendo più spesso, obbliga gli atomi di silicio a spaziarsi di una distanza analoga a quella degli atomi di Silicio-Germanio. Nota: nei wafer di silicio da 8", non si usa più da tempo né rame né alluminio per i collegamenti, bensì diversi strati di Tungsteno (deposti a tot Angstrom, a seconda dello strato) che vanno a ricoprire le Vias che sono appunto i famosi piedini dove vengono fatti i collegamenti elettrici, con le micro-saldature. Il Tungsteno è deposto su tutto il wafer (sarebbe incocepile ricoprire migliaia e migliaia di Vias singolarmente) e viene rimosso per planarizzazione chimica-meccanica. Microprocessori specializzati Sebbene il termine microprocessore tradizionalmente indichi una CPU a singolo o multi integrato o un System-on-a-chip (SoC), nel corso degli anni sono state sviluppate delle unità funzionali di elaborazioni con notevoli affinità con i microprocessori. Per esempio i microcontrollori, iDigital Signal Processors (DSP) e le Graphics Processing Unit (GPU). Molti sistemi che ricadono in queste categorie sono dotati di limitate possibilità di programmazione o non sono completamente programmabili. Per esempio le prime GPU sviluppate negli anni 90 non erano programmabili o supportavano una limitata programmazione, solo recentemente le GPU hanno acquisito una certa libertà di programmazione. Non c'è universale consenso nella definizione di microprocessore ma in generale si assume che un microprocessore sia una CPU in grado di eseguire un programma generico e non una CPU limitata. L'RCA 1802 era un microprocessore specializzato, non perché fosse limitato nella programmazione, bensì perché era progettato per applicazioni spaziali e quindi aveva delle particolari caratteristiche. Il sistema venne definito a progetto statico dato che poteva variare la frequenza di funzionamento in modo arbitrario fino a raggiungere gli 0 Hz in modo da andare in stop totale. Le sonde Voyager, Viking e Galileoper utilizzare la minor potenza elettrica durante il viaggio spaziale mettevano in stop il processore. Dei timer o dei sensori risvegliavano il processore alzandone la frequenza quando era necessario che il sistema elaborasse dei dati per la navigazione, per il controllo orbitale, per l'acquisizione dati o per le comunicazione radio. Mercato dei microprocessori Nel 2003 il mercato dei microprocessori valeva 44 miliardi di dollari, la cifra include la produzione e la vendita dei microprocessori [2]. I microprocessori per personal computer pur rappresentando solo lo 0.2% del numero totale di pezzi prodotti assorbono la metà del fatturato totale. Circa il 55% delle CPU erano microcontrollori a 8 bit, più di due miliardi di microcontrollori a 8 bit furono venduti nel 1997 [3]. Meno del 10% delle CPU erano a 32 bit o 64 bit. Di tutte le CPU a 32 bit solo il 2% era utilizzato nei personal computer mentre il 98% era utilizzato in applicazioni embedded come elettrodomestici, controllori industriali, periferiche per computer e altro. Tenendo conto di tutti i microprocessori prodotti e del mercato totale il prezzo medio di un microprocessore è di 6 dollari statunitensi [4]. Architetture e microprocessori comuni AMD K5, K6, K6-2, K6-III, Duron, Athlon, Athlon XP, Athlon MP, Athlon XP-M (IA-32 32-bit Intel architettura x86) AMD Athlon 64, Athlon 64 FX, Athlon 64 X2, Opteron, Sempron, Turion 64 (architettura AMD64) architettura ARM, StrongARM, Intel PXA2xx Altera Nios, Nios II Architettura Atmel AVR (microcontrollori) EISC RCA 1802 (noto anche come RCA COSMAC, CDP1802) Cyrix M1, M2 (IA-32 architettura x86) DEC Alpha Intel 4004, 4040 Intel 8080, 8085, Zilog Z80 Intel 8086, 8088, 80186, 80188 (architettura x86 a 16 bit reale) Intel 80286 (architettura x86 a 16 bit modalità reale e protetta) Intel 80386, 80486, Pentium, Pentium Pro, Celeron, Intel Core Duo, Intel Core 2 Duo, Pentium II, Pentium III, Xeon, Pentium 4, Pentium M,Celeron M (IA-32 architettura intel x86 a 32 bit) Autimi Xeon, primi Pentium 4, Pentium D, Celeron D, Intel Core 2 (architettura EM64T) Intel Centrino (anche nella versione dual-core) Intel Itanium (architettura IA-64) Intel i860 Intel i960 Architettura MIPS Motorola 6800, MOS Technology 6502, Motorola 6809 Motorola 68000, ColdFire Motorola 88000 NexGen Nx586 (IA-32 architettura x86 a 32 bit) IBM POWER NSC 320xx OpenCores architettura OpenRISC PA-RISC PowerPC, G3, G4, G5 National Semiconductor SC/MP ("scamp") Signetics 2650 SPARC, UltraSPARC, UltraSPARC II–IV SuperH family Transmeta Crusoe, Efficeon (VLIW architettura x86, Intel x86 tramite emulazione) INMOS Transputer VIA C3,C7,Eden Series (IA-32 architettura x86 a 32 bit) Western Design Center 65xx XAP da Cambridge Consultants IA-32 32-bit MICROCONTROLLORI Il Microcontrollore o Microcontroller o MCU è un dispositivo elettronico integrato su singolo chip, nato come evoluzione alternativa alMicroprocessore. È progettato per interagire direttamente con il mondo esterno tramite unprogramma residente nella propria memoria interna e mediante l'uso di pinspecializzati o configurabili dal programmatore. Sono disponibili in 3 fasce di capacità elaborativa (ampiezza del bus dati): 8 bit, 16 bit e 32 bit. L'ampia gamma di funzioni di comando e controllo disponibili, sia analogiche che digitali, integrate sullo stesso chip, permette l'impiego delle MCU in sostituzione di schede elettroniche cablate tradizionali ben più complesse e costose. Per i microcontrollori sono rilasciati sistemi di sviluppo amatoriali e professionali anche in modalità open source. Differenze tra Microprocessore e Microcontrollore Microcontrollore PIC 18F8720 in contenitore 80-pin TQFP. Quando nell'Aprile del 1972 Intel ha introdotto sul mercato il primoprocessore a 8 bit - lo 8008 - esso consisteva di una ALU] (Arithmetic & Logical Unit) per svolgere operazioni logiche e matematiche e di una elementare CPU (Control Processing Unit) per controllare il flusso di dati e indirizzi tra la ALU e i circuiti esterni di supporto. Successivamente, l'architettura interna del Microprocessore (in seguito spesso chiamato semplicemente CPU) si è velocemente evoluta con blocchi interni complessi (numero di bit elaborati e movimentati) e con capacità e velocità di calcolo crescenti in modo esponenziale. Per quanto potente, il Microprocessore richiede sempre delle unità esterne - memorie, gestori di segnali e dispositivi periferici per poter dialogare e interagire con l'esterno. Il Microcontrollore è invece un sistema memoria permanente, la memoria volatile altri blocchi specializzati. A differenza generale (general purpose), è progettato funzionale ed ottimizzare il rapporto applicazione, completo, che integra il processore, la e i canali (pin) di I/O, oltre ad eventuali dei microprocessori, adatti per un uso per ottenere la massima autosufficienza prezzo-prestazioni per una specifica Tabella 1: confronto Microprocessore vs. Microcontrollore[1] Caratteristica Microcontrollore Microp Velocità massima di clock 200Mhz 4GHz Capacità elaborativa massima in MFLOPS 200 5000 Potenza minima dissipata in Watt (in stato di elaborazione[2]) 0.001 50 Prezzo minimo per singola unità in USD 0.5 50 Numero di pezzi venduti annualmente (in milioni) 11,000 1,000 In sintesi, il Microcontrollore è molto meno potente del Microprocessore, ma è economico, ha consumi energetici ridotti e, per la sua versatilità, viene utilizzato in parecchi milioni di prodotti. DSP Parallelamente al Microcontrollore, e in continua evoluzione di potenza e di mercato, esistono i DSP (Digital Signal Processor) che incorporano moduli specializzati nel trattamento in digitale di segnali analogici. I campi tipici di utilizzo sono nel controllo di azionamenti (motori), di componenti per auto e avionica, di trattamento di segnali multimediali (codifica/decodifica audio e video, streaming e, campo principe, nella telefonia mobile. Il DSP ha tipicamente una struttura a 32 bit, e prossimamente a 64 bit. Componenti del Microcontrollore L'architettura del Microcontrollore prevede un insieme di moduli fissi, comuni a tutti i modelli, e una serie di possibili estensioni in funzione del costruttore, del prezzo e della fascia applicativa): Unità di elaborazione (CPU) Memoria di programma (ROM, EPROM, FLASH) Memoria dati (RAM e EEPROM) Oscillatore interno o esterno Porte di I/O configurabili Gestione Interrupt[3] Moduli aggiuntivi Contatori e temporizzatori Moduli di comunicazione: (USART, I2C, SPI, USB, Ethernet, IrDA, CAN, Wi-Fi, Zigbee) Interfacce analogiche o tecnologia mista: ADC, DAC, PWM, Comparatori analogici Interfacce di visualizzazione e controllo: (LCD, Touch sensor) Motivazioni del successo Il successo e l'enorme crescita del Mercato di questi componenti sono dovuti a questi fattori: Basso costo (consente di sostituire 1 o più circuiti integrati tradizionali a costo inferiore). Ampia scalabilità di prestazioni, di complessità (da 8 pin a 144 pin) e velocità (da 1 MHz a 200 MHz). Vasta gamma di dotazioni in periferiche e moduli specializzati. Ridotto (al limite = 0) numero di componenti esterni, ovvero semplicità di realizzazione. Facilità di programmazione dovuta anche ai numerosi tool di sviluppo disponibili. Ampia (e spesso libera) disponibilità di librerie, codici di esempio e documentazione Possibilità e facilità di riprogrammazione (in-field e in-system). Grande flessibilità applicativa . Brevi tempi di introduzione sul mercato del prodotto finito. Applicazioni di impiego L'enorme volume di pezzi prodotti deriva dall'impiego massiccio di questo componente nei dispositivi elettronici di consumo e nei prodotti industriali si massa. Difatti, al primo posto in classifica come segmento di mercato troviamo l'automotive (auto e altri mezzi di trasporto), che utilizza decine, in alcuni casi anche centinaia, di componenti per singola unità industriale venduta. Segue il segmento della telefonia mobile e delle telecomunicazioni in genere, quindi vengono i prodotti medicali, i consumer e gli elettrodomestici. Spesso utilizziamo questi dispositivi senza rendercene conto, le smartcard delle carte di credito o per le cartoline musicali di auguri. come per Mercato Il Microntrollore occupa una posizione rilevante nel mercato complessivo dei semiconduttori, con una stima di introiti per circa 14 miliardi di USD e 10.8 miliardi di pezzi venduti nel 2008. La stima di crescita prevede un incremento del 10% fino al 2014, mentre i pezzi venduti saranno di 14 miliardi per la fine 2010. [4] È comunque un mercato molto frammentato, con più di 40 produttori e più di 50 architetture, nessuna delle quali detiene più del 5% del mercato. Il segmento delle MCU a 32 bit è quello maggiormente in crescita, con introiti annui attuali (2009) di circa il 25% del totale. I principali (in ordine decrescente di volumi di mercato) sono: Renesas Technology Freescale Semiconductor NEC Fujitsu Infineon Technologies Microchip ST Microelectronics Texas Instruments Atmel NXP Semiconductors Il catalogo di molte aziende sopra citate (es. Freescale, ST, Texas, NXP, Atmel) e altri ancora, comprende prodotti il cui core è una MCU ARM. Cenni storici Il primo Microcontrollore Il primo computer on-chip ottimizzato per applicazioni di controllo è stato il modello 8048 di Intel, rilasciato nel 1975, con RAM e ROM sullo stesso chip. Questo componente è stato utilizzato in più di un miliardo di tastiere per PC e numerose altre applicazioni. Nei primi anni di sviluppo del Microcontrollore, la maggior parte dei modelli era commercializzata in due varianti. La più economica era dotata di memoria di programma programmata in fabbrica (ROM) su specifiche del cliente oppure programmabile dall'utente una sola volta (OTP, One Time Programming). La seconda, più costosa, aveva la memoria di programma cancellabile EPROM mediante esposizione a luce ultravioletta del chip tramite la finestrella trasparente che lo sovrastava. Nel 1993, Microchip ha introdotto il modello di MCU PIC16C84, caratterizzato da memoria programma in EEPROM, ovvero cancellabile elettricamente, che permetteva sia lo sviluppo veloce del prototipo del prodotto finito, sia la modifica del Firmwarea circuito montato (In-System Programming). La semplificazione del contenitore (package), senza finestrella in quarzo, ha contribuito a ridurre il costo finale del componente. Nello stesso anno, Atmel [3] ha rilasciato il primo MCU che utilizzava una memoria di tipo Flash, ancora più semplice e veloce da programmare/modificare, più compatta e con un ciclo di vita (cancellazioni) molto più elevato. Questo ha segnato l'inizio del massiccio utilizzo del Microcontrollore nelle più disparate applicazioni. Sistemi di sviluppo per MCU rilasciati in modalità Open Source ACK (Amsterdam Compiler Kit) L'Amsterdam Compiler Kit [4] è un cross-compilatore GPL destinato agli ambienti Unix I processori trattati sono: 6500 Il 6502 è il noto processore dell'Apple e del Vic 20, il 6510 del Commodore 64 6800 6805 ARM 8080 Z80 Z8000 i86 i386 68000 : Nei microcontrollori complessi tipo il 68302,il solo 68000 viene programmato ed il RISC viene lasciato ad altri strumenti 68020 NS32016 S2650 SPARC L'efficienza del compiliatore è nella media dei compilatori commerciali proprietari. SDCC (Small Device C Compiler) L'SDCC (Small Devices C Compiler) [5] è un porting Open Source GPL per i microcontrollori delle sole famiglie Z80, 8051, 68HC11, PIC. È stato separato dal progetto GCC (Gnu Compilers Collection) per poter ottimizzare meglio il lavoro dei microcontrollori, dove serve una grande efficienza del compilatore e contemporaneamente vivere in un ambiente molto povero di risorse RAM e ROM. Nonostante il piccolo numero di target disponibili, il compilatore è molto quotato e nella maggior parte delle situazioni dà risultati migliori dei sistemi di sviluppo professionali commerciali, con lo svantaggio dell'assenza di una IDE integrata. Senza settaggi specifici il compilatore genera il codice per il controllore 8051 ARCHITETTURA DI VON NEUMANN Con l'espressione architettura di von Neumann (o macchina di von Neumann) ci si riferisce a uno schema di progettazione di calcolatori elettronici che prende nome dal matematico John von Neumann e che fu sviluppato per il sistema IAS machine e dell'Institute for Advanced Study. Lo schema si basa su cinque componenti fondamentali: CPU o unità di lavoro che si divide a sua volta in Unità operativa, nella quale uno dei sottosistemi più rilevanti è l'ALU (Arithmetic Logic Unit) Unità di controllo Unità di memoria, intesa come memoria di lavoro o memoria principale (RAM, Random Access Memory) 1. Unità di input, tramite la quale i dati vengono inseriti nel calcolatore per essere elaborati 2. Unità di output, necessaria affinché i dati elaborati possano essere restituiti all'operatore 3. Bus, un canale che collega tutti i componenti fra loro All'interno dell'ALU è presente un registro detto accumulatore, che fa da buffer tra input e output grazie a una speciale istruzione che carica una parola dalla memoria all'accumulatore e viceversa. È importante sottolineare che tale architettura, a differenza di altre, si distingue per la caratteristica di immagazzinare all'interno dell'unità di memoria, sia i dati dei programmi in esecuzione che il codice di questi ultimi. Bisogna comunque precisare che questa è una schematizzazione molto sintetica, sebbene molto potente: basti pensare che i moderni computer di uso comune sono progettati secondo l'architettura Von Neumann. Inoltre, quando si parla di unità di memoria si intende la memoria principale, mentre le memorie di massa sono considerate dispositivi di I/O. Il motivo di ciò è innanzitutto storico, in quanto negli anni quaranta, epoca a cui risale questa architettura, la tecnologia non lasciava neanche presupporre dispositivi come hard disk, CD-ROM, DVD-ROM o anche solo nastri magnetici, ma anche tecnico, se si considera che in effetti i dati da elaborare devono comunque essere caricati in RAM, siano essi provenienti da tastiera o da hard-disk. MEMORIA VOLATILE E MEMORIA NON VOLATILE MEMORIA NON VOLATILE La memoria non volatile è una tipologia di memoria informatica in grado di mantenere le informazioni anche quando non viene alimentata. Esempio di memorie non volatili sono le read only memory, le flash memory, la maggior parte di memorie magnetiche e i primi metodi di memorizzazione informatica come le schede perforate e i nastri perforati. Le memorie non volatili sono utilizzate comunemente come memorie secondarie per memorizzare dati intermedi o per memorizzare dati da archiviare. La più comune memoria utilizzata come memorie primaria è la memoria RAM che tendenzialmente è più veloce delle memorie secondarie ma ha lo svantaggio di perdere i dati quando l'alimentazione viene tolta. Diverse società stanno cercando di sviluppare memorie non volatili ma con caratteristiche di velocità, consumo e costo comparabili con quelle delle memorie RAM. L'utilizzo di memorie non volatili come memoria primaria potrebbe permettere di evitare le lente fasi di avvio dei computer, riducendo i tempi morti e riducendo i consumi energetici. Le memorie di archiviazione dati possono essere divise in memorie elettriche e memorie meccaniche, le memorie elettroniche sono relativamente veloci ma sono costose mentre le memorie meccaniche sono tendenzialmente più lente ma sono mediamente più economiche. Memorie elettriche Le memorie elettriche non volatili basano la loro capacità di memorizzazione sull'immagazzinamento di una certa quantità di carica ROM programmabili tramite maschera Questo genere di ROM sono formate da una serie di collegamenti a massa o all'alimentazione. Queste memorie sono progettate tramite delle maschere che definiscono i collegamenti e vengono prodotte in grandi volumi direttamente in fabbrica. Vengono usualmente utilizzate per memorizzare il codice del programma di avvio dei dispositivi elettronici, per memorizzare porzioni di codice che non vanno modificati nel tempo e che saranno inserite in prodotti creati in serie. ROM programmabile Un diverso approccio prevede la creazione di un integrato programmabile, la ROM contiene all'interno di ogni cella di memoria un microfusibileche può essere distrutto elettricamente al fine di portare lo stato della cella a zero o a uno (dipende da come è costruita la memoria). Una volta "bruciato" il fusibile questo non può più essere ricostruito. Le prime PLD utilizzavano un approccio simile per memorizzare le connessioni tra le porte logiche Nei nuovi progetti, si tende a utilizzare delle memorie programmabili al posto dei microfusibili. Erasable PROM Vi sono due grandi categorie di memorie non volatili basati su tecnologia EPROM. UV-erase EPROM Le prime memorie EPROM erano facilmente distinguibili dagli altri componenti per la presenza di un vetro al quarzo al centro dell'integrato. Queste memorie hanno un trasistor posizionato in ogni cella, il transistor ha un gate flottante, cioè il gate non risulta essere collegato elettricamente con nessun componente. Tramite l'utilizzo del breakdown a valanga si può spingere un certo numero di elettroni a entrare nel gate flottante, quando il gate flottante risulta aver immagazzinato un certo numero di elettroni la cella risulta essere programmata a zero. La rimozione della carica viene ottenuta tramite l'esposizione delle memoria alla radiazione ultravioletta, che favorisce lo svuotamento del gate flottante permettendo alle celle di memorie di tornare allo stato logico uno. OTP (one-time programmable) ROM Le ROM OTP sono fisicamente delle EPROM nelle quali non è stato montato la finestra di quarzo. Come le PROM possono essere programmate una sola volta, hanno sostituito quasi totalmente le PROM nelle produzioni elettroniche dato che possono essere programmate con le attrezzature delle EPROM e vengono utilizzate dove la possibilità di cancellare la memoria non è necessaria. Electrically erasable PROM Le Electrically erasable PROM sono delle memorie programmabili tramiti segnali elettrici che hanno il vantaggio di poter essere cancellate sempre tramite segnali elettrici, questo evita di dover rimuovere l'integrato del circuito per cancellarlo. Il processo di lettura e scrittura di una locazione appare quasi istantaneo all'utente sebbene la scrittura sia più lenta della lettura, la lettura viene invece eseguita a piena velocità dal sistema. Le locazioni possono essere scritte un numero limitato di volte, tra le 10 000 e le 100 000, a seconda della tecnologia. Le memorie EEPROM tendono ad avere capacità inferiori a quelle delle altre memorie non volatili ma risultano utili per memorizzare impostazioni e configurazioni di dispositivi come modem, ricevitori satellitari, etc. Memoria flash Le memorie flash sono sotto molti punti di vista simili alle memorie EEPROM, la differenza principale è che lavorano a pagine e quindi possono cancellare i dati solo a blocchi di pagine. La capacità è nettamente maggiore e vengono utilizzate come supporto di memorizzazione per fotocamere, macchine fotografiche digitali e BIOS per computer. Battery-backed static RAM Queste memorie sono delle comuni memorie RAM alle quali è stato aggiunto una batteria al fine di permettere di preservare i dati quando viene a mancare l'alimentazione. Usualmente queste memorie vengono prodotte con tecnologia CMOS al fine di minimizzare il consumo energetico. Le batterie utilizzate sono normalmente al litio al fine di fornire alimentazione per alcuni anni a piccole memorie. Memorie SDRAM da alcuni gigabyte, se collegate a batterie al litio, possono mantenere le informazioni per anni. Le impostazioni dei computer spesso sono memorizzate con memorie di questo tipo, queste memorie mantengono anche lo stato dell'orologio quando il computer non è alimentato. MEMORIA VOLATILE In ambito informatico la memoria è la parte del computer destinata a conservare informazioni per un certo periodo di tempo. La memorizzazione di informazioni in memoria, e il successivo recupero delle medesime, sono funzioni fondamentali nel funzionamento del computer. Una memoria può essere considerata astrattamente come una sequenza finita di celle in cui ogni cella contiene una sequenza finita di bit. Normalmente i bit sono gestiti a gruppi di otto, detti byte. Pertanto lo spazio fisico della memoria può essere immaginato come una sequenza di locazioni, ognuna contenente un byte. Ogni locazione è individuata da un preciso indirizzo, normalmente espresso tramite un numero intero positivo. Astrazione di von Neumann Astrazione di von Neumann Architettura di von Neumann Nell'architettura di Von Neumann, che rappresenta l'astrazione dei calcolatori elettronici usualmente impiegati, si vede come vengono impiegate le memorie nei calcolatori. La macchina di Von Neumann è divisa in una parte destinata al calcolo, detta processore, ed in una parte destinata alla memorizzazione. La seconda parte contiene sia i dati su cui la computazione opera, sia i programmi che istruiscono il processore riguardo quali computazioni effettuare. Operazioni Le operazioni effettuate sulla memoria di un computer sono fondamentalmente le seguenti: Inizializzazione. È il trattamento che subisce la memoria prima dell'uso normale. Alcuni tipi di memoria (per esempio la RAM elettronica) non hanno bisogno di inizializzazione; per tali memorie, il contenuto iniziale è impredicibile. Per le memorie a sola lettura, l'inizializzazione consiste nella scrittura dei dati effettuata in fase di produzione. Per i dischi magnetici, l'inizializzazione consiste nella scrittura di dati che costituiscono un casellario in cui porre le informazioni utili (la cosiddetta formattazione). Scrittura. È l'operazione di memorizzazione delle informazioni. Un esempio di scrittura è assegnare il byte 123 alla cella di indirizzo 1000. Lettura. È l'operazione di recupero di informazioni memorizzate. Un esempio di lettura è chiedere alla memoria il contenuto della cella di indirizzo 1000. Per parlare indifferentemente di lettura o di scrittura, si usa il termine accesso. Per esempio, per indicare che una memoria è veloce sia in lettura che in scrittura, si dice che ha un basso tempo di accesso. Classificazione La memoria informatica si può classificare secondo vari criteri: ordine di accesso (memorie ad accesso diretto o memorie ad accesso sequenziale); possibilità di scrittura (memorie a lettura-scrittura, memorie scrivibili una sola volta, memorie a sola lettura); velocità di lettura; velocità di scrittura; costo unitario; volatilità; tecnologia (elettronica, magnetica, ottica, magneto-ottica). Le memorie per computer possono usare varie tecnologie che forniscono prestazioni e costi molto variabili. Spesso per le memorie veloci ma dall'alto costo unitario si usa l'espressione "memoria centrale" o "memoria primaria", mentre per le memorie dal basso costo unitario ma lente si usa l'espressione "memoria di massa" o "memoria secondaria". Per gerarchia Memoria primaria Collegata alla scheda madre tramite connettori chiamati socket, la memoria primaria, anche chiamata memoria centrale o memoria principale, serve a contenere i programmi ed i dati nel momento in cui vengono elaborati. Per realizzare una memoria principale vengono normalmente utilizzate tecnologie a semiconduttore (cioè vengono utilizzati circuiti integrati a base di silicio). La memoria centrale è organizzata come una tabella di celle, ciascuna delle quali è denotata da un indirizzo (celle che contengono una sequenza di bit; ogni bit può rappresentare l'informazione 0 oppure 1 tramite un diverso stato elettrico). Ogni cella ha una dimensione prefissata e gli indirizzi delle celle variano tra 0 e n, dove n è una potenza di 2. Le operazioni che la memoria può effettuare sono due: lettura e scrittura. La lettura consiste nelle seguenti operazioni: trasferimento dalla CPU all'address register (abbreviato in AR) dell'indirizzo che si intende leggere; trasferimento dalla memoria al registro memory buffer (abbreviato in MB) del contenuto della cella il cui indirizzo è presente nel AR; trasferimento del contenuto del MB alla CPU. La scrittura consiste nelle seguenti operazioni: trasferimento dalla CPU all'AR dell'indirizzo che si intende scrivere e del contemporaneo trasferimento nel MB del valore che si intende scrivere; trasferimento del valore del MB alla cella di memoria il cui indirizzo è presente nel AR. Bisogna distinguere tra vari tipi di memorie primarie, a seconda della funzione svolta e delle loro caratteristiche peculiari. Di seguito vengono elencate quelle più importanti. RAM, l'acronimo per "random access memory", ovvero "memoria ad accesso casuale", è la memoria in cui vengono caricati i dati che devono essere utilizzati dal calcolatore per elaborare. La RAM può essere volatile (si cancella spontaneamente ed ha bisogno di essere aggiornata), statica o tamponata (mantiene l'alimentazione anche a macchina spenta). Il processore identifica le celle della RAM tramite indirizzi preassegnati che ne specificano la posizione: la memoria si presenta, quindi, come un enorme vettore (stringa ordinata di elementi detti byte, ciascuno individuabile con un indirizzo). Il termine "random" evidenzia che non ci sono differenze ad accedere alle varie celle della memoria. Le caratteristiche della RAM vengono ereditate anche da tutte le altre memorie ad accesso casuale (individuabili facilmente dal fatto che contengono RAM alla fine). Sostanzialmente le memorie RAM si suddividono in DRAM (dinamiche), SRAM statiche e che vengono utilizzate per la memoria cache. Cache RAM, una memoria associativa integrata nel processore, che ha la caratteristica di essere molto veloce; dato l'elevato costo, viene utilizzata esclusivamente per contenere i dati e le istruzioni utilizzati più di frequente (in modo da migliorare notevolmente le prestazioni del processore). ROM, l'acronimo per "read only memory", ovvero "memoria in sola lettura (o solamente leggibile)", è una memoria permanente (cioè ha un contenuto fisso che non può essere cancellato ed inoltre non è volatile), presente sulla scheda madre, che contiene le istruzioni che la CPU deve caricare per consentire l'avvio del sistema e le routine di base che prendono il nome di BIOS (Basic I/O System). EPROM, l'acronimo per "eresable programmable read only memory", ovvero "ROM cancellabile e programmabile", che è una memoria in sola lettura, ma ha la particolarità di poter essere cancellata in particolari condizioni. MRAM, l'acronimo per "magnetic ram", ovvero "RAM magnetica", è una memoria ad accesso casuale di "nuova generazione", che utilizza le proprietà del magnetismo, al posto di una serie di impulsi elettrici, per conservare le informazioni. La fase di trasferimento da memoria di sistema a memoria cache viene attuata da un appostito circuito che prende il nome di MMU (Memory Management Unit). La MMU svolge anche il compito di gestione virtuale della memoria. Inoltre c'è da far notare che a causa della dispersione della carica del condensatore, di capacità estremamente piccola, vi è bisogno di un rinfresco continuo dell'informazione. A questo compito è dedicato un canale del circuito di DMA che ad intervalli regolari (153 ms) deve necessariamente rinfrescare l'intera memoria del sistema per evitare la perdita irrimediabile dei dati e qui il collasso di funzionamento del computer. Memoria video Una particolare versione di memorie dinamiche viene utilizzata per la gestione dei video. In questi dispositivi si sfrutta l'azione del refresh, precedentemente richiamata per gestire le informazioni che dovranno periodicamente essere inviate al video evitando di passare quindi attraverso la CPU che renderebbe molto più lento il trasferimento dei dati. La tecnologia utilizzata attualmente per la realizzazione di memoria video è la GDDR (Graphics Double Data Rate) Memoria secondaria La memoria secondaria, anche chiamta memoria di massa, racchiude tutti quei dispositivi che consentono all'utente la memorizzazione in modo permanente, cioè che consentono di contenere dati e programmi in modo stabile (una volta spento il processore i dati non vengono persi). Tipi di memoria secondaria Qui sotto sono elencate le varie categorie di memorie secondarie: I dischi magnetici, composti da uno o più dischi (i disk pack) ricoperti di materiale ferromagnetico, vengono "letti e scritti" (cioè su questi dischi vengono salvati e recuperati i dati) mediante un braccio mobile dotato della "testina di lettura/scrittura". I dati vengono trasferiti ai dischi magnetici tramite un buffer nella memoria centrale ed occupano successive posizioni lungo le tracce, sotto forma di differenti stati di magnetizzazione. I settori dei dischi vengono letti e scritti interamente utilizzando il numero della superficie, della traccia e del settore. Il tempo di accesso ai dischi magnetici è superiore rispetto a quello della memoria centrale, ma i costi, a parità di quantità di informazione memorizzata, sono decisamente più bassi. Di questa categoria fanno parte ad esempio gli hard disk e i floppy disk (realizzati con materiale plastico flessibile). I dischi ottici, composti da materiale riflettente ricoperto da una sostanza protettiva, dove l'informazione viene registrata realizzando modificazioni della superficie riflettente e viene letta mediante un raggio laser che riscontra le irregolarità della superficie riflettente. I dischi ottici sono senza dubbio i supporti di memoria secondaria più diffusi: ne esistono di vari tipi, alcuni riscrivibili (cioè una volta scritti possono essere riscritti nuovamente) e non riscrivibili (una volta immagazzinati dei dati sul disco, questo non è più riscrivibile con altri dati). Fanno parte di questa categoria i CD, i CD-ROM e i DVD. I nastri magnetici, composti da fettucce di nastri magnetizzabili e gestiti dalle unità a nastro (che dispongono della testina lettura/scrittura), servono per svolgere funzioni di back-up e log (registrazione delle operazioni effettuate in un certo tempo). I nastri magnetici consentono solo un accesso sequenziale ai dati (cioè è necessario leggere tutti i dati precedenti prima di accedere ad un certo dato). Tra i vari tipi di nastri magnetici, le prestazioni migliori sono ottenute dagli streaming tape. La Flash memory, memoria elettronica non volatile di tipo EEPROM. Si presenta come Memory Card dall'ingombro ridotto. Memoria olografica Un altro tipo di memorie secondarie, però ancora in fase di sviluppo, sono le memorie olografiche. Queste nuove tecnologie olografiche di archiviazione, avranno il pregio di poter memorizzare i dati non su una superficie (come fanno i supporti attuali) ma su un volume: queste nuove memorie saranno dunque caratterizzate da una elevata capacità di archiviazione ed in più da tempi di accesso brevi. Tra le varie idee, il modo più promettente per archiviare più immagini olografiche sullo stesso mezzo è utilizzare differenti angoli di divergenzatra i due laser. Cambiando l'angolo di incidenza del raggio di lettura è possibile infatti leggere pagine diverse. Ci sono però alcune problematiche che ostacolano la realizzazione di queste nuove memorie; le più importanti sono: l'elevata precisione ottica richiesta per il progetto la difficoltà per l'allineamento dei vari componenti le problematiche legate all'imperfezione del materiale utilizzato il rischio della collimazione dei fasci il problema dell'elaborazione dei segnali di uscita dai quali vanno ricavati i bit inizialmente memorizzati Il motivo principale che spinge i ricercatori alla realizzazione di queste memorie, è che la registrazione di dati su media magnetici ed ottici arriverà velocemente a scontrarsi con i limiti fisici dei supporti e quindi le memorie, che ora sono adeguate, potrebbero non essere più sufficienti per le necessità future. Per tipo di accesso Le memorie ad accesso sequenziale possono essere lette e scritte solamente all'indirizzo immediatamente successivo all'indirizzo a cui è avvenuto l'accesso precedente. I principali esempi di memorie ad accesso sequenziale sono i nastri magnetici. Le memorie ad accesso diretto possono essere lette e scritte a qualunque indirizzo, indipendentemente dalle operazioni eseguite in passato. Sono dette anche memorie ad accesso casuale, in quanto, dal punto di vista del costruttore, la memoria non è in grado di prevedere il prossimo indirizzo a cui l'utente della memoria vorrà accedere. Per possibilità di scrittura da parte dell'utente finale La tipica memoria può essere sia letta che scritta. Questi dispositivi sono detti memorie a lettura-scrittura. Tuttavia sono utilizzate anche memorie che vengono scritte solo in fase di inizializzazione, e per le quali non è possibile la scrittura nell'uso normale. Tale inizializzazione può essere effettuata in modo incrementale dalla stessa apparecchiatura con cui vengono riletti i dati scritti. Questi dispositivi sono detti memorie scrivibili una sola volta, o WORM (Write Once, Read Many). Alternativamente, può essere necessario scrivere tutti i dati con un'apposita apparecchiatura esterna prima di poter usare la memoria in lettura. Questi dispositivi sono detti memorie a sola lettura, o ROM (Read-Only Memory). Ecco gli esempi più diffusi per ognuno dei tre suddetti tipi: Memorie a lettura-scrittura: carta con matita e gomma per cancellare, memorie RAM, memorie EPROM, memorie EEPROM, dischi ottici CD-RW, dischi ottici DVD-RW, memorie elettroniche flash, nuclei di ferrite, dischi rigidi, floppy disk, dischi magneto-ottici RW. Memorie scrivibili una sola volta: carta con penna a inchiostro indelebile, dischi magneto-ottici WORM, dischi ottici CD-R, dischi ottici DVD-R, memorie elettroniche PROM, memorie elettroniche OTPROM. Memorie a sola lettura: carta stampata, memorie elettroniche ROM, dischi ottici CD-ROM, dischi ottici DVD-ROM. Sulla base della permanenza dei dati Per le memorie a lettura-scrittura, il tempo di lettura è normalmente vicino al tempo di scrittura, per cui si parla genericamente di tempo di accesso. Per le memorie scrivibili una sola volta, la scrittura può essere molto più lenta della lettura; in tal caso, dato che la memoria verrà letta molte volte, si considera come più significativo il tempo di lettura. In generale, il costo unitario (cioè per byte) delle memorie cresce al crescere della velocità di lettura. Pertanto, la classificazione per velocità di lettura coincide sostanzialmente con la classificazione per costo unitario. In base a tale criterio, si ha la seguente gerarchia: Registri della CPU, che forniscono la massima velocità di accesso, al massimo costo unitario. Cache interna alla CPU, detta anche cache di primo livello. Cache esterna alla CPU, detta anche cache di secondo livello. Memoria centrale, detta anche memoria principale, e detta spesso semplicemente (ma impropriamente) RAM. Tamburi magnetici, oggi in disuso. Dischi fissi (magnetici). Dispositivi inseribili e rimovibili "a caldo", cioè senza spegnere il computer, come floppy disk, nastri, memorie flash, dischi ottici. Questi ultimi forniscono la minima velocità di accesso, al minimo costo unitario. Per tecnologia costruttiva Memoria cartacea Scheda perforata Nastro perforato Memoria elettronica Memoria a stato solido (anche detta memoria a semiconduttore) È una memoria elettronica a semiconduttore. Si presenta come componente elettronico da assemblare in un circuito elettronico. Memoria magnetica Memoria a nucleo magnetico Nastro magnetico Disco magnetico Floppy disk Hard disk Memoria ottica Disco ottico Disco magneto-ottico Memoria olografica