Dispositivo elettronico realizzato con la tecnologia dei circuiti integrati VLSI (sigla di very large scale integration), in grado di effettuare in modo autonomo operazioni aritmetiche e logiche secondo una successione preordinata di istruzioni, costituenti il programma esecutivo del m. stesso. Il m. è particolarmente adatto a essere interconnesso con dispositivi esterni, con i quali può interagire, trasmettendo e ricevendo dati e segnali di controllo attraverso porte di uscita e di ingresso. Grazie alla grande flessibilità di impiego, il m. è divenuto elemento caratterizzante di un gran numero di applicazioni ed è diffusamente utilizzato come dispositivo decisionale o di controllo in molti apparecchi di uso comune. Nei vari apparati o dispositivi sono presenti uno o più m. appositamente adattati alle singole esigenze, come, per es., nei distributori automatici, in vari tipi di elettrodomestici, nei sistemi di diagnostica o di controllo nell’automobile, nei dispositivi di lettura di compact disc. La versatilità e il basso costo dei m. ha reso anche possibile la realizzazione di vari calcolatori, specialmente nella classe dei personal computer (➔ PC) e delle piccole work station, permettendone di fatto la diffusione su larga scala.
Il m. rappresenta la naturale evoluzione di molte classi di circuiti logici e digitali realizzati con la tecnologia microelettronica. Negli anni 1960 e 1970 tali circuiti erano generalmente progettati singolarmente secondo una tecnica detta a logica sparsa che richiedeva uno studio e una realizzazione separata per ogni circuito. Tale tecnica di progettazione si è dimostrata inefficace con il crescere del numero di applicazioni ed è stata soppiantata con lo sviluppo delle tecnologie integrate LSI e VLSI che hanno permesso di realizzare su un singolo chip circuiti di complessità sempre più elevata a costi inferiori. Si è riconosciuto che la maggior parte dei dispositivi poteva essere realizzata mediante uno schema standard basato su un’architettura hardware di tipo programmabile, in modo che un unico dispositivo potesse essere adattato a più applicazioni semplicemente modificando l’insieme delle istruzioni memorizzate nel programma, senza dover progettare hardware differenti. Ciò ha permesso la realizzazione di vari tipi di m., subito facilmente adattati a un insieme molto vasto di applicazioni, a costi molto contenuti. Uno dei primi m. fu realizzato dalla Intel Corporation all’inizio degli anni 1970.
L’architettura di un m. appare simile a quella di un calcolatore tradizionale, con la differenza che tutte le varie parti sono realizzate in un singolo chip o in un numero di chip molto contenuto. Il numero dei chip utilizzati dipende da considerazioni economiche e dal tipo di applicazioni per le quali il m. è costruito. In un m. sono presenti vari elementi connessi fra loro per mezzo di alcuni canali di comunicazione detti bus, che possono trasmettere 4, 8, 16 o 32 bit. In un m. vi sono di norma tre tipi di bus (fig.): il bus dei dati, nel quale transitano le variabili numeriche e logiche da elaborare; il bus degli indirizzi, con il quale è possibile individuare una singola cella di memoria; il bus di controllo, attraverso il quale sono trasmessi i segnali di controllo dei vari elementi del microprocessore. Ai bus suddetti possono accedere vari dispositivi, fra i quali sono sempre presenti una unità aritmetico-logica (➔ CPU), una serie di registri, un decodificatore delle istruzioni, un sistema di controllo delle temporizzazioni, connessi con alcuni banchi di memoria e varie unità di ingresso e uscita.
Durante il funzionamento sono rese operative, in sequenza, le istruzioni presenti in una certa zona di memoria e sono effettuate le operazioni richieste. L’insieme delle operazioni programmabili, detto set di istruzioni, è caratteristico del singolo m. e comprende varie operazioni logiche e aritmetiche sui dati, spostamenti di allocazione in memoria, operazioni di salto nell’esecuzione del programma e operazioni logiche di confronto. A seconda dei casi le operazioni possono essere eseguite sui registri interni o sui dati presenti nei banchi di memoria. Attraverso sequenze di operazioni elementari possono essere effettuate operazioni più complesse. In questo senso si distingue a volte il programma del m. rispetto al microprogramma, il quale si riferisce ad istruzioni a livello più elementare. Il programma può allora essere formato da sequenze di istruzioni definite in base ad elementi del microprogramma. Elementi di programma o di microprogramma possono essere memorizzati in memorie elettroniche di tipo RAM, nel qual caso essi possono essere modificati a seconda delle esigenze, ovvero in memorie stabili di tipo ROM o EPROM, nel qual caso essi sono memorizzati in forma definitiva. In quest’ultimo caso le istruzioni costituiscono parte integrante del comportamento del m., come se fossero realizzate in hardware. A volte le istruzioni memorizzate in forma stabile sono indicate con il nome di firmware del dispositivo.
All’atto dell’accensione del m., ovvero dopo un segnale di azzeramento (reset), il programma inizia sempre a funzionare sulla base di alcune istruzioni del firmware. Caratteristica essenziale del m. è il numero di bit del bus dei dati, da cui dipende la lunghezza di parola relativa a tutti gli elementi di calcolo. Lunghezze di parola maggiori possono essere ottenute affiancando più parole di lunghezza inferiore. Altro elemento essenziale è la velocità di elaborazione che dipende dal circuito di temporizzazione primario, detto clock. La velocità massima del clock è fissata in base al tipo di circuiti integrati usati e ai tempi di risposta che con essi è possibile ottenere. Il m. può inviare segnali all’esterno attraverso opportune porte di tipo seriale o parallelo. Su tali porte sono trasferiti dati o segnali d’interesse utili a pilotare o controllare dispositivi esterni. In modo analogo un dispositivo esterno può trasferire informazioni al m. o richiederne l’intervento. In tal caso è molto importante garantire la corretta sincronizzazione del m. con l’evento esterno che di norma si presenta in modo asincrono rispetto alla temporizzazione interna. Due sono le soluzioni principali a tale problema. La prima è detta a ciclo di attesa e consiste nel far percorrere al m. una sequenza ciclica di istruzioni con la quale la richiesta di accesso alla porta esterna è periodicamente verificata. Quando l’evento esterno ha luogo, il m. si sincronizza in corrispondenza col primo ciclo di verifica positiva sull’interfaccia. Un m. in ciclo di attesa non può svolgere ovviamente altre funzioni utili per tutto il tempo di attesa. La seconda soluzione consiste nell’utilizzo delle cosiddette interruzioni. Tali interruzioni sono dei segnali di controllo, in ingresso al m., che provocano l’immediato blocco della sequenza di istruzioni che il m. stava eseguendo, in modo da permettere la comunicazione sincrona con il dispositivo di interfaccia. Allo scopo di non perdere informazioni, tale blocco è sempre preceduto da una operazione di salvataggio dello stato interno del m. (detto contesto e comprendente, per es., valori memorizzati nei registri e indirizzo dell’ultima istruzione eseguita), in modo da permettere al m. la ripresa del proprio programma senza discontinuità subito dopo che l’interruzione è stata servita.
Particolarmente semplice è la gestione dei cicli di attesa o delle interruzioni quando l’evento esterno si presenta con periodi di ripetizione lenti rispetto ai tempi di risposta del microprocessore. Caso tipico in tal senso è la gestione di tastiere o di elementi di controllo manuali, che intervengono con periodi non inferiori al decimo di secondo, tempo molto superiore ai tempi di risposta di qualunque microprocessore. Più complesso è il problema dell’interfaccia con eventi esterni rapidi per i quali deve essere stabilito un efficiente protocollo di comunicazione. In casi estremi può essere previsto l’uso di più m. in parallelo comunicanti fra loro, che sviluppano simultaneamente parti complementari delle operazioni d’interesse. In alcuni casi alcune operazioni richieste non sono compatibili in termini di velocità o di complessità con quelle ottenibili dal microprocessore. Generalmente ciò avviene quando le operazioni d’interesse danno luogo ad algoritmi piuttosto lunghi e quindi lenti se eseguiti con sequenze di istruzioni elementari. In questi casi è spesso utile affiancare al m. alcuni elementi espressamente costruiti per eseguire le operazioni richieste per mezzo di un hardware dedicato (acceleratori hardware). Ciò dà luogo a tempi più rapidi nell’esecuzione dei calcoli che risultano così compatibili con le esigenze derivanti dalle applicazioni. Esempi tipici in tal senso sono costituiti dai dispositivi per processamento di segnali, costituiti come un normale m. in aggiunta al quale è stato inserito un elemento hardware specifico, come per es. un dispositivo moltiplicatore o divisore di segnali. I dispositivi così ottenuti sono noti con il nome di DSP (sigla di digital signal processor).
La realizzazione del software o del firmware del programma (o del microprogramma) di un m. è piuttosto onerosa dovendo essere programmata nel linguaggio elementare tipico del m. stesso (assembler o linguaggio macchina). Inoltre essa deve tenere conto di tutte le esigenze di sincronizzazione dei vari eventi interni ed esterni al dispositivo. Al fine di rendere più rapido ed esente da errori tale tipo di programmazione, sono usati appositi dispositivi, detti sistemi di sviluppo, nei quali il m. stesso è emulato su un calcolatore di maggiori dimensioni, mentre la sequenza delle istruzioni è ottenuta con l’aiuto di compilatori e traduttori.