MICROELETTRONICA

Enciclopedia Italiana - IX Appendice (2015)

MICROELETTRONICA.

Vincenzo Bonaiuto
Fausto Sargeni

– Tecnologie microelettroniche. Applicazioni real-time. Architettura di un microprocessore. Architetture multi-core. FPGA: processori hard-core e soft-core. Bibliografia

L’evoluzione della m. nell’ultimo decennio ha caratterizzato in modo profondo i tempi in cui viviamo. Tutte le attività della nostra vita quotidiana dipendono e sono permeate della tecnologia delle comunicazioni e dell’informazione (ICT, Information and Communications Technology), realizzate per mezzo dei prodotti della microelettronica. Essa ha generato nuovi bisogni e soddisfatto esigenze impensabili fino a pochi decenni fa. La società dell’informazione che stiamo vivendo è caratterizzata da una disponibilità sempre più diffusa e facilmente accessibile di strumenti elettronici, sempre più complessi dal punto di vista microelettronico. Tali strumenti risultano di semplice utilizzo anche per un utente non tecnico e di costo sempre più economico. Infatti, molto spesso utilizziamo, o sottoutilizziamo, apparecchiature elettroniche (per es., smartphone) che contengono componenti microelettronici molto complessi in grado di ospitare anche miliardi di transistor e che sono in grado di elaborare milioni di informazioni al secondo, con elevate capacità di memorizzazione dei dati.

Nell’ultimo decennio, lo sviluppo di tecnologie microelettroniche sempre più complesse ha caratterizzato la nascita e la diffusione di componenti microelettronici (microprocessori) utilizzati in tutte le apparecchiature alimentate a energia elettrica, anche per effettuare semplici operazioni di controllo, che in precedenza venivano svolte da sistemi elettromeccanici o da circuiti realizzati con componenti semplici (circuiti discreti). L’elaborazione dei segnali elettrici o, in generale, delle informazioni, rappresenta il campo di applicazione dei circuiti microelettronici. Infatti, l’elaborazione di segnali provenienti da sensori permette la realizzazione di sistemi di controllo (si pensi, per es., alla centralina elettronica di un’automobile) che regolano tutte le funzioni, sia quelle essenziali relative alla sicurezza sia quelle relative ai servizi e al comfort.

Questa diffusione dell’utilizzo dei microprocessori ha portato molto spesso all’incorporazione (embedded) del microprocessore stesso in sistemi più complessi (allo scopo di monitorarne e controllarne le risorse e le funzioni), dei quali costituisce una parte integrante. I microprocessori embedded rappresentano quindi spesso un elemento essenziale, anche se molte volte non visibile esternamente, di quasi tutti i sistemi oggi in commercio, siano essi di tipo consumer o industriale. Esempi possono essere facilmente trovati non solo in quei sistemi che, per loro natura, richiedono alte prestazioni (per es., nelle applicazioni aeronautiche), ma anche per il controllo di processo, il controllo domotico, lo streaming multimediale o le applicazioni nel settore automobilistico (un’automobile di fascia alta può contenere anche più di 50 microprocessori) e, nel prossimo futuro, anche per la gestione delle risorse energetiche e nelle applicazioni portatili nel campo della salute. La riduzione dei costi delle tecnologie elettroniche e la disponibilità a buon mercato di diverse tipologie di sensori rende possibile la ‘sensorizzazione’ di un numero sempre maggiore di sistemi. Nell’ultimo decennio i sistemi embedded hanno presentato una crescita esponenziale e, secondo recenti studi, il 98% circa dei sistemi a microprocessore è costituito da sistemi di tipo embedded.

Tecnologie microelettroniche. – Tali tecnologie si sono sempre più sviluppate negli ultimi anni nelle seguenti direzioni: riduzione delle dimensioni planari, sovrapposizione di un numero maggiore di strati di interconnessione, aumento della frequenza di funzionamento, sviluppo delle tecnologie dei contenitori dei chip (package). Come predetto dalla legge di Moore del 1965, la quale dedusse che la densità dei dispositivi su semiconduttore si sarebbe raddoppiata ogni uno/due anni per lo sviluppo delle tecniche fotolitografiche, le dimensioni planari del singolo transistor sono state sempre più ridotte, passando da risoluzioni fotolitografiche di micrometri a pochi nanometri. Questa continua miniaturizzazione delle dimensioni del singolo transistor ha portato alla realizzazione di componenti molto complessi in termini di numero di transistor nel singolo circuito integrato (integrated circuit, IC). Inoltre, lo sviluppo delle tecnologie chimico-fisiche del processo tecnologico ha portato anche una crescente affidabilità, sia in termini di resa (ossia di diminuzione dei difetti di fabbricazione nelle varie fasi del processo stesso) sia in termini di uniformità del processo su die (area di silicio dove vengono realizzati i circuiti) più grandi (Shen, Lipasti 2013).

Queste caratteristiche hanno consentito la realizzazione di circuiti integrati di notevole densità, per es. il processore A8 contenuto in uno smartphone Apple iPhone 6 e nel quale si trovano circa due miliardi di transistor con una tecnologia da 20 nm in 89 mm2. La sovrapposizione di strati di metallizzazione consente di realizzare più interconnessioni tra blocchi di circuiti complessi. Ciò è di fondamentale importanza per realizzare SoC (System on a Chip), sistemi su singolo chip, che non sono solamente complessi sistemi di elaborazione, come i microprocessori, ma possono comprendere anche componenti e circuiti di periferia, anche non digitali, come attuatori, sensori, circuiti di interfaccia, elementi microelettromeccanici, realizzabili con la stessa tecnologia degli IC e quindi durante lo stesso processo di fabbricazione (per es. MEMS, Micro Electro-Mechanical Systems, per la realizzazione di accelerometri, magnetometri, giroscopi).

Oltre al numero degli strati di metallizzazione, i processi tecnologici più evoluti utilizzano anche differenti metalli per la realizzazione delle interconnessioni. Infatti, l’utilizzo del rame al posto dell’alluminio ha comportato un aumento della velocità di trasmissione dei segnali e, di conseguenza, un incremento della frequenza di funzionamento (riduzione della costante di tempo associata alla linea di interconnessione), a causa della minore resistività del rame rispetto all’alluminio.

Per quanto riguarda i packages, essi sono contenitori di plastica o ceramica dove vengono inseriti i dies e che collegati con minuscoli fili d’oro a piedini o contatti metallici, servono a collegare il die con la scheda elettronica esterna (PCB, Printed Circuit Board). La complessità dei SoC ha richiesto un aumento delle dimensioni dei packages, del numero dei contatti e anche delle tecniche di saldatura tra die e package. L’aumento del numero dei contatti ha comportato una complessità nell’utilizzo e nel montaggio di singoli SoC da parte dei progettisti elettronici: per es., i processori comunemente utilizzati nei notebook hanno un numero di contatti superiore al migliaio. Per questi motivi è possibile progettare schede elettroniche complesse in grado di contenere uno o più SoC, limitando in questo modo il numero dei contatti esterni. Il collegamento dei dies con il package può essere realizzato con le tecniche flip chip: il die viene progettato con piazzole di contatto non solo sulla periferia ma anche sulla faccia superiore e poi viene capovolto sul package per realizzare le connessioni senza bisogno di fili di saldatura.

Un ulteriore problema che è cresciuto di importanza con l’aumento delle frequenze di funzionamento e delle aree dei dies è la dissipazione termica dei SoC. Il consumo di potenza elettrica in un transistor (in tecnologia CMOS, Complementary Metal-Oxide Semiconductor) è dipendente dalla frequenza di commutazione e quindi aumentando la frequenza di funzionamento e il numero dei transistor, i SoC richiedono una maggiore potenza elettrica e di conseguenza è maggiore la dissipazione del calore prodotto. I produttori di SoC integrano allora nello stesso chip anche sensori e tecnologie per il controllo della temperatura (per es., Thermal monitor, CoreTemp) che regolano la velocità di funzionamento dei processori e la velocità delle ventole di raffreddamento in funzione della temperatura rilevata, che non deve superare i 70 °C (limite superiore delle specifiche di temperatura per circuiti integrati per uso civile). In alcuni computer, composti da molti processori (per es., supercomputer), non è sufficiente il solo raffreddamento ad aria forzata e sono utilizzati anche sistemi di raffreddamento più complessi con liquidi o gas (Saha, Zummo, Celata 2010).

Un esempio di SoC molto complesso è il processore Intel® Core™ i7-5775R (2015): realizzato con tecnologia 14 nm, ha un’architettura multi-core (ossia è composto da più unità di elaborazione che lavorano in parallelo, in questo caso due, eseguendo ciascuna contemporaneamente due diverse parti di programma in esecuzione, thread) a 64-bit, con frequenza di funzionamento (clock) di 3 GHz ed è contenuto in un package con 1150 o 1364 contatti con tecnica flip chip (fpBGA, Ball Grid Array). Il processore contiene tutte le interfacce per i circuiti di periferia, come canali di memorie DIMM (Dual In-line Memory Module) per RAM (Random Access Memory) e SATA (Serial Advanced Technology Attachment) per dischi rigidi, comunicazioni con componenti esterni mediante porte USB (Universal Serial Bus) 2.0 e 3.0, display VGA (Video Graphics Array) o digitale, rete LAN (Local Area Network), canali audio e porte di collegamento ad altri SoC, come porte SPI/PCI/GPIO (Serial Peripheral Interface/Peripheral Component Interconnect/ General Purpose Input/Output).

Applicazioni real-time. – Fra le varie applicazioni, il numero di quelle che richiedono, per la loro natura, un breve (o brevissimo) tempo di elaborazione (real-time processing) è in continuo aumento e presenta esigenze di disporre di un’elettronica sempre più affidabile e performante. La valutazione delle prestazioni di un microprocessore real-time dipende quindi non solo dalla correttezza del risultato ottenuto, ma anche dal tempo impiegato per ottenerlo. Non sempre la sfida di conseguire un risultato nel più breve tempo possibile si riesce a vincere aumentando la potenza del microprocessore (per es., aumentandone la frequenza di clock), che, come si è detto, è limitata da vincoli di tipo sia elettronico sia termico, ma più spesso progettando nuove architetture di calcolo in grado di ottenere tale risultato in modo più efficiente. In particolare, in questo ambito l’architettura dei microprocessori si è evoluta di pari passo con l’evoluzione dei compilatori software. La sfida consiste nella migliore interpretazione del programma che deve essere eseguito dal microprocessore per sfruttarne al meglio le risorse e, contemporaneamente, realizzare opportune architetture hardware in grado di svolgere più efficientemente le singole operazioni.

Architettura di un microprocessore. – Il recente sviluppo di dispositivi elettronici portatili e l’evoluzione della tecnologia ha radicalmente modificato i vincoli progettuali delle architetture dei microprocessori. Se, negli anni Ottanta e Novanta del secolo scorso, i vincoli erano rappresentati principalmente dalla necessità di ridurre l’occupazione di area di silicio disponibile sul chip, massimizzando le prestazioni necessarie a macchine di tipo desktop o server, nelle moderne architetture tali vincoli sono più orientati alla minimizzazione dei consumi elettrici, al fine di aumentare l’autonomia delle batterie dei dispositivi portatili, pur garantendo elevate potenze di calcolo.

Due sono i gruppi di architetture a microprocessore che hanno iniziato a svilupparsi in tali anni e i cui confini tendono oggi a essere molto meno definiti: i microprocessori basati su architettura RISC (Reduced Instruction Set Computer) e quelli basati sull’architettura CISC (Complex Instruction Set Computer). Il primo gruppo si poggia sulla filosofia che intende ottenere operazioni semplici ed eseguite ad altissima velocità (tipicamente, con un solo ciclo di clock) e molti registri per memorizzare i risultati intermedi. Il secondo, invece, prevede istruzioni più complesse, che richiedono anche diverse decine di cicli di clock per essere eseguite, nell’ottica di ridurre la complessità dei compilatori, ma a discapito dell’efficienza e della semplicità interna del chip (Stokes 2015).

In funzione della complessità dell’algoritmo e del conseguente numero di operazioni elementari che il microprocessore deve eseguire, una delle soluzioni adottate dai progettisti è quella di distribuire tali operazioni fra più unità di calcolo, ottenendo, complessivamente, una riduzione del tempo totale e senza dover fare ricorso a un aumento della frequenza di clock. Soluzioni di questo tipo, che prendono il nome di architetture parallele, sono classificabili come parallelo spaziale e parallelo temporale. Il parallelo spaziale consiste nell’utilizzare più unità di calcolo alle quali affidare l’elaborazione di tutto l’algoritmo (o parte di esso), distribuendo i dati alle singole unità di calcolo secondo particolari strategie ed elaborando tali dati contemporaneamente (processori multi-core), al fine di ridurre il tempo di calcolo e quindi di aumentare il flusso dei risultati in uscita dal sistema. Tuttavia, non tutti gli algoritmi presentano caratteristiche tali da rendere possibile la parallelizzazione: per es., è possibile che, in tali sistemi, lo scheduler, cioè la sezione del sistema operativo che stabilisce un ordinamento temporale per l’esecuzione dei diversi blocchi di istruzioni secondo particolari politiche di gestione, non riesca a bilanciare fra le varie unità di calcolo la percentuale di utilizzo. Il parallelo temporale (pipeline) è invece una soluzione sulla quale sono basati i sistemi di tipo RISC e le architetture che sono da essi derivate (per es., ARM, Advanced RISC Machine).

Architetture multi-core. – La nuova tendenza nell’architettura di un microprocessore è di replicare più unità (cores) su un singolo die (CMP, Chip Multi-Processor; Blake, Dreslinski, Mudge 2009). Le applicazioni tipiche che sono in grado di sfruttare al meglio tali architetture sono quelle che richiedono un elevato numero di calcoli (number crunching). Queste architetture sono caratterizzate dalle modalità di interconnessione fra le diverse CPU (Central Processing Unit), le modalità di scambio di messaggi fra essi, e dalla modalità di condivisione della memoria. In particolare, la connessione fra i vari cores può essere di tipo statico (i legami tra i cores sono determinati a priori e sono fissi) oppure di tipo dinamico (i legami sono gestiti, in base alle necessità, da opportuni dispositivi in grado di instradare i messaggi). La memoria è generalmente suddivisa in moduli indipendenti, al fine di permettere il contemporaneo accesso a più cores. Il vantaggio che si riesce a ottenere con questo tipo di architettura è relativo alla gestione delle parti di programma a opera dello scheduler (multithreading). Nelle architetture a singolo core, la CPU è in grado di eseguire contemporaneamente due o più parti di programma (thread), come se avesse a disposizione due o più unità (virtuali), facendo eseguire, sequenzialmente, le varie istruzioni dei diversi threads, alternandole secondo specifiche priorità. In un sistema multi-core è invece possibile realizzare un vero multi-threading, nel senso che ciascun thread viene eseguito da un diverso core, ottenendo, nella maggior parte dei casi, un effettivo miglioramento delle prestazioni (per es., nei processori Intel® Core™ i7).

I microprocessori multi-core possono essere omogenei oppure eterogenei (Kumar, Tullsen, Jouppi et al. 2005).

I primi sono costituiti da cores che hanno tutti le medesime caratteristiche, come il set di istruzioni, la dimensione della cache (area di memoria ausiliaria), la frequenza di clock e così via; sono tutti cores non specializzati e sono quindi in grado di risolvere, anche se in modo non ottimizzato, ogni tipologia di thread. Un microprocessore multi-core di tipo eterogeneo ingloba invece nello stesso chip due o più cores ciascuno, con funzionalità specializzate (per es., Cell di IBM/Sony/Toshiba). In questo modo, quando lo scheduler assegna un particolare thread al core specializzato a eseguirlo, si riesce a ottenere, a spese di una maggiore complessità da parte dello scheduler, un effettivo miglioramento delle prestazioni. È possibile, inoltre, ridurre il consumo di potenza in modo dinamico anche spegnendo in modo selettivo singole unità o distribuendo alcuni threads meno critici a unità che presentano consumi inferiori.

Ovviamente, la prestazione del microprocessore è fortemente dipendente dal programma che deve essere eseguito e non è possibile ottenere un’accelerazione nelle prestazioni quando esistono delle parti dei programmi che sono intrinsecamente sequenziali, quando la comunicazione tra i processori comporta dei ritardi e quando la parallelizzazione dello specifico algoritmo ha come risultato un subottimo rispetto al suo equivalente di tipo sequenziale.

FPGA: processsori hard-core e soft-core. – Quando le necessità di tempo di calcolo sono troppo stringenti spesso non è facile (o possibile) realizzare il sistema mediante l’utilizzo di microprocessori di tipo commerciale. In questo ambito sono disponibili dispositivi elettronici digitali di tipo programmabile (FPGA, Field Programmable Gate Array; Meyer-Baese 2014). Tali dispositivi sono realizzati mediante una matrice di blocchi circuitali di tipo logico (CLB, Configurable Logic Block) collegati fra loro attraverso interconnessioni programmabili. Al contrario di un circuito dedicato (ASIC, Application Specific Integrated Circuit), che viene realizzato sulla base di particolari specifiche, un circuito FPGA può essere prodotto definendo, mediante un’opportuna programmazione, le interconnessioni fra i blocchi, e ritagliato sulla specifica applicazione. La progettazione logica digitale di questi dispositivi è da molti anni realizzata mediante l’utilizzo di linguaggi software di tipo descrittivo (HDL, Hardware Descriptive Language) che, con il progredire del livello di integrazione dell’elettronica, rende possibile il progetto in modo relativamente semplice e molto efficace anche per quello che riguarda i sistemi elettronici complessi. In questo particolare ambito, negli ultimi anni, alcuni dei produttori di dispositivi FPGA hanno iniziato la commercializzazione di nuovi componenti all’interno dei quali, insieme alla classica struttura hardware programmabile, sono stati inclusi uno o più microprocessori (hard-core processors, per es., Xilinx Virtex-II Pro oppure Altera Arria V). Una soluzione di questo tipo permette di utilizzare i microprocessori integrati per realizzare il codice relativo a parti di programma con minori esigenze di tempo di elaborazione e di utilizzare un circuito hardware dedicato per la realizzazione delle parti più critiche. Un’ulteriore opportunità fornita da un circuito FPGA è rappresentata dalla possibilità di integrare, questa volta combinando opportunamente i blocchi di celle hardware, uno o più microprocessori (soft-core processors) ritagliati ad hoc in base ai requisiti dello specifico sistema da implementare (per es., dimensione della memoria cache e della memoria istruzioni, numero di registri ecc.), nonché di implementare tutte le periferiche necessarie (UART, Universal Asynchronous Receiver-Transmitter; SPI; I2C, Inter-Integrated Circuit ecc.). Tale soluzione permette, inoltre di realizzare un numero elevato di microprocessori (anche molto superiore al centinaio), in funzione del numero di blocchi logici disponibili all’interno del dispositivo. La possibilità di utilizzare un vero microprocessore (oppure più soft-core processors) permette al progettista di scrivere il relativo codice di programma utilizzando linguaggi di programmazione (tipicamente, il linguaggio C) di più facile lettura e interpretazione rispetto al meno diffuso e conosciuto HDL, da parte di un numero maggiore di utenti. Ciò rende il sistema più robusto, sia per quanto riguarda la correttezza, sia per i successivi aggiornamenti del codice.

Bibliografia: R. Kumar, D.M. Tullsen, N.P. Jouppi et al., Heterogeneous chip multiprocessors, «Computer», 2005, 38,11, pp. 32-38, http://passat.crhc.illinois.edu/rakeshk/computer.pdf; G. Blake, R.G. Dreslinski, T. Mudge, A survey of multicore processors, «IEEE Signal processing magazine», 2009, 26, 6,pp. 26-37; S.K. Saha, G. Zummo, G.P. Celata, Review on flow boiling in microchannels, «International journal of microscale and nanoscale thermal & fluid transport phenomena», 2010, 1, 2,pp. 111-78; J.P. Shen, M.H. Lipasti, Modern processor design: fundamentals of superscalar processors, Long Grove (Ill.) 2013; U. Meyer-Baese, Digital signal processing with field programmable gate arrays, Berlino 2014; J. Stokes, Inside the machine. An illustrated introduction to microprocessors and computer architecture, San Francisco 2015.

TAG

Information and communications technology

Linguaggi di programmazione

Circuito integrato

Sistema operativo

Set di istruzioni