Microprocessori - Il microprocessore (μP) rappresenta la forma tecnologicamente più evoluta e miniaturizzata dell' unità centrale di elaborazione (CPU: central processing unit): è infatti una CPU integrata in un unico chip. Il microcontrollore (μC) è un sistema di elaborazione costituito da un μP, memorie e unità di ingresso/uscita (I/O), realizzato anch’esso in un unico circuito integrato. - Fra i parametri che caratterizzano un μP si possono distinguere: la frequenza del clock (anche superiore al GHz), che determina la velocità di elaborazione; il parallelismo ossia la larghezza della parola di dati (4, 8, 16,..., 64 bit); la capacità di indirizzamento ossia il numero n di bit costituenti l’indirizzo (con n bit si possono indirizzare 2n locazioni). - Il struttura di un μP comprende essenzialmente: la ALU (unità aritmetico-logica), in grado di eseguire operazioni aritmetiche e logiche; il contatore di programma (PC: program counter), che contiene l’indirizzo dell’istruzione da prelevare ed eseguire; il registro di stato (SR: status register), in cui vengono memorizzati i bit di flag conseguenti un’operazione aritmetica o logica; il puntatore di stack (SP: stack pointer), che punta alla cima dello stack (pila); i registri di lavoro, il cui impiego è essenziale nella programmazione; l’unità di controllo, che provvede alla decodifica delle istruzioni e alla temporizzazione dei segnali del μP. Tutte queste parti sono interconnesse dal bus dei dati, dal bus degli indirizzi e dal bus di controllo. - L’elaborazione di una istruzione prevede una fase di prelievo o fetch, in cui il μP preleva il codice operativo dell'istruzione dalla memoria, una fase interna al μP di decodifica ed una fase di esecuzione (execute) nella quale il μP può compiere operazioni: di lettura e scrittura in memoria, oppure di lettura e scrittura in dispositivi di I/O, oppure interne alla CPU oppure ancora di risposta a segnalazioni esterne (richieste di interruzione e richieste di controllo dei bus). - L’intervallo temporale in cui si svolge un’istruzione costituisce il ciclo istruzione. Questo si compone di uno o più cicli macchina, dei quali il primo, sempre presente, è il ciclo di lettura del codice operativo. Ogni ciclo macchina è costituito a sua volta da un certo numero di cicli di clock. - Il μP Z80 presenta un parallelismo di 8 bit dati con 16 linee indirizzo (64 kbyte di memoria indirizzabili) ed una frequenza massima di clock di 8 MHz. Dispone di due banchi di registri di lavoro (A accumulatore, B e C, D e E, H e L) e di ben 158 istruzioni. La tensione di alimentazione è +5V. - I terminali dello Z80, in contenitore DIP, sono 40; oltre alle linee dati (D0 - D7) e alle linee indirizzi (A0 - A15) si segnalano le seguenti linee (tutte attive basse): - M1: è attivo (basso) nel primo ciclo macchina (CM1) in corrispondenza della lettura del codice operativo (fase di fetch); - MREQ: segnala attivandosi una operazione di lettura o di scrittura in memoria; - IORQ: segnala una operazione di lettura o di scrittura in un dispositivo di I/O; - RD: segnale un’operazione di lettura; - WR: segnala una operazione di scrittura; - RFSH: viene attivato insieme con MREQ durante il ciclo di rinfresco delle memorie dinamiche in CM1. - INT: segnala una richiesta di interruzione mascherabile da programma; - NM1: segnala una richiesta di interruzione non mascherabile; - RESET: inizializza il μP partendo dalla locazione 00H; - BUSREQ: segnala la richiesta di un dispositivo esterno di gestire i bus dati e indirizzi; - BUSACK: segnala che il μP ha lasciato la gestione dei bus al dispositivo esterno. - Dall’esame dei diagrammi di temporizzazione dello Z80 si nota che nel ciclo di prelievo, gli indirizzi vengono posti sul bus subito dopo il fronte di salita del primo ciclo di clock T1, mentre MREQ e RD vengono attivati sul fronte di discesa di T1. I dati forniti dalla memoria vengono letti in corrispondenza del fronte di salita di T3 e perciò devono risultare stabili prima di questo istante (tempo di set-up). Nei cicli di lettura in memoria e nei dispositivi di I/O la lettura dei dati avviene invece sul fronte di discesa di T3. Nel ciclo di scrittura MREQ viene ancora attivata sul fronte di discesa di T1 mentre WR è attivata sul fronte di discesa di T2. I dati sono resi disponibili con un certo ritardo rispetto al fronte di discesa di T1 ma con un certo anticipo rispetto all’attivazione di WR. - Le istruzioni sono espresse come una successione codificata di bit (codice macchina); esse contengono sempre un codice operativo, che indica al μP le operazioni da eseguire e, solitamente, uno o due operandi. Codice operativo e operandi possono occupare la stessa locazione di memoria o più facilmente locazioni successive. Per facilitare il programmatore le istruzioni sono espresse in linguaggio mnemonico o assembly. L’assembler o assemblatore è un programma che consente di tradurre le istruzioni dalla forma mnemonica al linguaggio macchina. - Il metodo di indirizzamento può essere implicito, immediato, diretto da memoria o da registro, indiretto da memoria o da registro, relativo, indicizzato. Ad esempio l’istruzione NEG (rendi negativo il contenuto dell’accumulatore ) è di tipo implicito; LD A, 22H (carica nell’accumulatore il dato esadecimale 22) è di tipo immediato; LD A, B (carica in A il contenuto del registro B) è diretta da registro; LD A, (4000H) (carica in A il contenuto della locazione 4000) è diretto da memoria; LD A, (HL) (carica in A il contenuto della locazione il cui indirizzo è contenuto nel registro HL) è di tipo indiretto da registro. - Le istruzioni, con riferimento allo Z80, possono essere del seguente tipo: di trasferimento o caricamento, di trasferimento e ricerca di gruppo, aritmetiche e logiche, di controllo della CPU, di rotazione o scorrimento, di manipolazione di bit, di salto, di chiamata e ritorno, di ingresso e uscita. - Il trasferimento dei dati fra CPU e dispositivi di I/O può avvenire essenzialmente secondo tre modalità: - Trasferimento iniziato dalla CPU, in cui lo scambio dei dati è controllato dalla CPU e quindi dal programma; - Trasferimento pilotato da interruzione, in cui ad innescare il trasferimento è il dispositivo di I/O, che invia alla CPU un segnale di interruzione; - DMA o accesso diretto alla memoria (direct memory access), in cui il trasferimento dei dati fra memoria e periferiche avviene direttamente senza transitare attraverso la CPU, che sospende momentaneamente la sua attività.