INTRODUZIONE AI MICROPROCESSORI 1 Processo sotto controllo azioni osservazioni obiettivi Per processo si intende un complesso di trasformazioni graduali e continue. Il processo può essere di qualsiasi natura: chimico, meccanico, elettrico… Controllare un processo significa agire per mantenere costanti o variabili entro limiti prestabiliti i parametri del processo. Una volta fissati gli obiettivi da raggiungere si tiene sotto osservazione l’andamento della grandezze di uscita per andare poi a modificare opportunamente le grandezze di ingresso. Come esempi di semplici processi da controllare si può pensare al riempimento/svuotamento di un serbatoio di cui si vuole controllate il livello del liquido in esso contenuto o ad un ambiente di cui si vuole “controllare” la temperatura, l’umidità e la quantità di luce. 2 Processo sotto controllo • Dispositivi analogici Segnali • Reti Logiche Segnali (comandi) • Sistemi programmabili ( stati ) Interfaccia con operatore o con altri sistemi Il controllo di un processo, che sia esso regolatore, di asservimento, di previsione o a valore programmato implica la presenza di un “dispositivo controllore”. Il controllo può essere affidato a dispositivi analogici, digitali o programmabili. 3 Scelta del sistema di controllo • Parallelismo delle operazioni • Numero delle variabili di controllo Parametri di scelta • Complessità delle operazioni sotto controllo • Velocità di risposta Controlli Analogici Controlli Digitali Cablati • Modularità del sistema (espandibilità) • Flessibilità del controllo • Affidabilità dei componenti e del controllo Controlli Digitali Programmabili La scelta sulla tipologia del sistema di controllo dipende da molteplici parametri che spesso non determinano una preferenza univoca. 4 Dispositivi Programmabili • Gate Array / Standard cell • PAL (Programmable Array Logic) • PLD (Programmable Logic Device) • ….. • Microelaboratore • Microprocessore • Microcontrollore I Gate Array, gli Standard cell, i PAL, i PLD sono circuiti digitali programmabili dedicati; sono i cosidetti “ASIC” (Application Specific Integrated Circuit) e vengono creati per una data particolare applicazione. Costituiscono la soluzione tecnologicamente più avanzata nella progettazione dell’hardware. IN genere vengono realizzati con le stesse procedure dei circuiti stampati commerciali( sbroglio, maschera, diffusione, ossidazione, attacco chimico) ma terminano con una fase di piazzamento e di interconnessione. Richiedono l’intervento della fonderia di silicio tranne i PLD che possono essere programmati dall’utilizzatore stesso ed in modo reversibile. Il microeelaboratore, sistema digitale, ad elevata integrazione diventa indispensabile quando nel processo il numero delle variabili da controllare diventa elevato, quando è richiesto l’intervento in tempo reale sul sistema avendo prima eseguito notevoli e complessi calcoli o quando viene richiesta la facile riconfigurabilità del sistema di controllo. Nella catena di acquisizione i sensori prelevano le grandezze fisiche e restituiscono segnali elettrici analogici (talvolta digitali). Le grandezze analogiche, opportunamente manipolate dalla catena, dopo essere convertite in segnali numerici dai convertitori A/D vengono acquisite dal microelaboratore. Esso restituisce decisioni determinando azioni che andranno a d interagire direttamente sul sistema controllato. 5 Schema semplificato di un computer Unità Centrale RAM (Microprocessore) ROM I/O Periferiche di IN Periferiche di OUT • Tastiere • LED, Display • Microfoni • Stampanti, Altoparlanti • Trasduttori • Motori, Relays • Interruttori Il microelaboratore è un sistema complesso costituito da u elevato numero di dispositivi digitali “a programma immagazzinato”. E’ una macchina di uso generale che svolge di volta involta funzioni diverse in relazione alla sequenza di istruzioni immagazzinate in memoria. Il dispositivo centrale, di primaria importanza e la CPU (Central Processing Unit) capace di svolgere operazioni logiche, aritmetiche e di controllo; la CPU opera su dati prodotti sia dalle sue stesse elaborazioni sia su dei dati provenienti da dispositivi esterni. Il blocco “ memoria centrale” composto da RAM e da ROM è sede sia dei dati che dei programmi. La CPU comunica con l’esterno attraverso dei dispositivi, anche essi programmabili, detti “Porte di input /output”. Anche le porte sono controllati dalla CPU. Solo attraverso le porte si possono effettuare collegamenti con eventuali dispositivi esterni. 6 INTEGRAZIONE E …. MODULARITA’ [architettura a BUS] ADDRESS BUS DATA BUS CPU CONTROL BUS microprocessore MEMORIA PORTE I/O E S P A N S I O N I MONDO ESTERNO IL microelaboratore è composto principalmente da tre grossi blocchi: la CPU, la memoria e le Porte. La CPU gestisce i dati e controlla tutti i dispositivi comunicando con essi attraverso collegamenti detti BUS in modo sincrono basato su un unico clock centrale. I bus sono degli insiemi di conduttori (8, 16,… ) sui quali transitano le informazioni. Sono suddivisi in relazione alla funzione che essi svolgono in “ Bus dei dati”, “Bus degli indirizzi” e “Bus dei controlli”. Le informazioni che viaggiano sui Bus raggiungono indistintamente tutti i dispositivi collegati ma vengono utilizzati solo da quei dispositivi che, di volta in volta, risultano indirizzati (abilitati) dalla CPU. Si definisce “ lunghezza di parola “ o parallelismo” dell’elaboratore il numero dei bit del suo data bus. I Bus dei dati è bidirezionale; in esso i dati viaggiano dalla CPU verso i dispositivi nella fase di “scrittura” e dai dispositivi verso la CPU nella fase di “lettura”. L’Address Bus è monodirezionale, orientato dalla CPU verso i vari dispositivi ; infatti è la CPU che “indirizza” le periferiche con le quali intende colloquiare. Il Control Bus ha le linee orientate individualmente a secondo della funzione che ognuna di esse svolge. 7 La CPU Z80 La Zilog Z80 è sicuramente la più longeva delle CPU a 8 bit. E’ un integrato costituito dalla Zilog nel 1976 nel comune package a 40 pin; inizialmente aveva una velocità di clock di 2,5 MHz. Rimase in Produzione per vent’anni, fino al 1985 sostanzialmente immutato se non per la velocità del clock che aumentò fino a 20 MHz. Aveva, in quel periodo, quasi monopolizzato il mercato con 158 istruzioni rispetto alle 78 originali del 8080 dell’Intel, suo predecessore, rispetto al quale non solo offriva sostanziali miglioramenti ma veniva anche proposto ad un prezzo nettamente concorrenziale. A tutt’oggi lo Z80 è ancora utilizzato come “microcontroller” nell’elettronica di hard disk, fax e stampanti. 8 SISTEMA STANDARD IL microelaboratore è composto principalmente da tre grossi blocchi: la CPU, la memoria e le Porte. La CPU gestisce i dati e controlla tutti i dispositivi comunicando con essi attraverso collegamenti detti BUS in modo sincrono basato su un unico clock centrale. I bus sono degli insiemi di conduttori (8, 16,… ) sui quali transitano le informazioni. Sono suddivisi in relazione alla funzione che essi svolgono in “ Bus dei dati”, “Bus degli indirizzi” e “Bus dei controlli”. Le informazioni che viaggiano sui Bus raggiungono indistintamente tutti i dispositivi collegati ma vengono utilizzati solo da quei dispositivi che, di volta in volta, risultano indirizzati (abilitati) dalla CPU. Si definisce “ lunghezza di parola “ o parallelismo” dell’elaboratore il numero dei bit del suo data bus. I Bus dei dati è bidirezionale; in esso i dati viaggiano dalla CPU verso i dispositivi nella fase di “scrittura” e dai dispositivi verso la CPU nella fase di “lettura”. L’Address Bus è monodirezionale, orientato dalla CPU verso i vari dispositivi ; infatti è la CPU che “indirizza” le periferiche con le quali intende colloquiare. Il Control Bus ha le linee orientate individualmente a secondo della funzione che ognuna di esse svolge. 9 Schema a blocchi della CPU Z80 Il blocco centrale della CPU Z80 è l’ALU ( Aritmetic and Logic Unit). In questo blocco vengono effettuate operazioni aritmetiche ( somma, sottrazione,..), operazioni logiche (AND, OR, XOR,..), comparazioni, scorrimento di bit verso destra o verso sinistra, incremento etc. I risultati di tutte queste operazioni, quasi sempre, avvengono attraverso un particolare registro detto “Accumulatore”. Non tutti i microprocessori dispongono di un registro Accumulatore. Oltre l’accumulatore la CPU dispone anche di altri registri che costituiscono praticamente la sua memoria. Di particolare rilevanza è il “Registro Istruzioni” (IR) nel quale vengono collocati i “codici operativi” delle istruzioni a mano a mano che esse vengono eseguite e il Program Counter di cui parleremo più avanti. La CPU genera una serie di segnali di controllo, diretti sia verso l’esterno che verso il suo interno, attraverso i quali sincronizza e temporizza tutte le operazioni. 10 R e g i s t r i I n t e r n i Registri fondamentali A F A’ F’ B C B’ C’ D E D’ E’ H L H’ L’ I Vettore interruzioni R Rinfresco memoria IX IY SP Z 8 0 Registri alternativi PC Registri Indice Registri di uso generale Registri di uso speciale Stack Pointer Program Counter I registri interni della CPU costituiscono la memoria interna del microprocessore. Il numero e la funzione dei registri varia da microprocessore a microprocessore ma alcuni di loro sono universali. Il “program counter” (PC) è un registro di 16 bit; esso garantisce l’accesso alla giusta cella di memoria e la sequenzialità delle istruzioni: all’inizio dell’esecuzione di ogni istruzione il PC si carica con l’indirizzo della cella cui è memorizzata la prima parte dell’istruzione e subito dopo si incrementa per fare abilitare la cella immediatamente successiva che contiene la seconda parte dell’istruzione. Al termine di ogni istruzione il PC si incrementa per contenere l’indirizzo della prossima istruzione. Lo “stack pointer” (SP) è un registro a 16 bit; esso viene caricato con l’indirizzo dell’ultimo dato caricato nello stack. Lo stack è una zona della memoria RAM esterna di tipo LIFO, in cui il programmatore memorizza particolari informazioni come per esempio l’indirizzo dell’ultima istruzione prima dell’esecuzione di una subroutine in modo da ripristinare la corretta prosecuzione del programma alla fine dell’interruzione. Il registro F di “FLAG” è un registro a 8 bit; il suo contenuto costituisce la “parola di stato”: I singoli bit del registro sono posti a 1 oppure a 0 a seconda del risultato di alcune operazioni svolte dall’ALU. Lo stato di questi bit viene spesso utilizzato durante la stesura del programma per eseguire importanti test decisionali. I bit di Flag dello Z80 (in ordine dal MSB al LSB) sono i seguenti: [S, Z, x, H, x, P/V, N, C LSB] con S: flag di segno, Z: flag di 0, H: flag di half/carry, P/V: flag di parity/overflow, N: flag di sottrazione, C: flag di carry (x indica un bit non significativo). 11 LA MEMORIA DELLO Z80 Lo Z80, come tutti i microprocessori, è una macchina programmabile; in essa la memoria è unica sia per i dati che per il programma ( le istruzioni); si dice di tipo “ Von Neumann” dal nome del suo inventore. (esistono anche macchine di tipo Harward dove le due memorie sono distinte). La CPU Z80 avendo 16 linee di Address bus può indirizzare fino ad un massimo di 64 K (216=65536) locazioni diverse di memoria. Come si vede in figura la memoria ha inizio con l’indirizzo 0000H e termina con l’indirizzo FFFFH; gran parte dell’area della memoria è utilizzata dalla CPU stessa (sistema operativo e registri interni) e solo alcune piccole porzioni di esse sono libere e utilizzabili dal programmatore. Lo spazio libero più ampio a disposizione del programmatore ha inizio dall’indirizzo 0068H per cui è usuale iniziare a scrivere il programma proprio a partire da questo indirizzo; in effetti si arrotonda a 0100H e la prima istruzione dei programmi è spesso “ ORG 0100”. 12 LA SINTASSI DEL LINGUAGGIO VERBO AZIONE NOME , DESTINAZIONE ASSEMBLER Z80 NOME SORGENTE STRUTTURA DI ALCUNE ISTRUZIONI Z80 LD A, C0 OP. COD. OPERANDO LD A, (0400) H L OP. COD. OPERANDO JP 011C H L OP. COD. OPERANDO 3E C0 OPERANDO OPERANDO 3E 00 04 L H C3 1C 01 L H Ogni istruzione, come già detto, ha un proprio codice operativo che esprime, salvo rare eccezioni, la tipologia di azione svolta dall’istruzione (p.e. trasferimento di un dato). Ogni microprocessore ha un proprio linguaggio assembler con la propria sintassi. Nello Z80 la sintassi è: “AZIONE DESTINAZIONE , SORGENTE”. L’azione espressa dal codice operativo coinvolge uno o due operandi che possono essere registri, costanti, celle di memoria. Gli operandi si intendono di 8 bit ( parallelismo della macchina) e nel caso di due operandi come nel caso di un indirizzo la sintassi vuole che si scriva prima la parte bassa ( L) e poi quella alta (H). 13 ESEMPIO DI UN SEMPLICE PROGRAMMA (Caricare C0 nella locazione 0400H di memoria) Indirizzo Linguaggio Codice Codifica Memoria Assembly Macchina Binaria (cod. mnemonico) (cod. Oggetto) 0100 LD,A C0 3E 0011 1110 C0 1100 0000 32 0011 0010 0103 00 0000 0000 0104 04 0000 0100 0101 0102 LD(0400), A Ogni microelaboratore esegue sequenzialmente le istruzioni che compongono il programma. Il programma in ultima analisi è una sequenza ordinata di parole ordinate corrispondenti ai codici delle istruzioni e dei dati alloggiati nella memoria. Nell’esempio si vuole che la CPU carichi la costante C0 nella locazione 0400H della memoria. Questo programma composto da sole due istruzioni, verrà scritto a partire dalla locazione 0100H della memoria e siccome ogni locazione contiene 8 bit le varie parole saranno inserite in locazioni successive. Questo programma, dunque, occuperà 5 locazioni consecutive ( dalla 0100H ala 0104H) L’hardware del microprocessore lavora in logica binaria ma questa è molto scomoda e insidiosa per il programmatore che preferisce scrivere i programmi in codice mnemonico; la traduzione del programma dalla forma mnemonica a quella esadecimale prima e binaria poi è affidata ad un apposito software detto “assemblatore” ( nei linguaggi evoluti esso prende il nome di compilatore). 14 FASI DI ESECUZIONE DI UN’ISTRUZIONE ASSEMBLER Esempio 1: Address LDA, C0 Op. Cod. 0100 3E ;si carica 3E in IR: “fetch” (ciclo M1) 0101 C0 ;si carica C0 nell’Acc. (ciclo M2) Esempio 2: DEC B Address Op. Cod. 0102 05 ;si carica 05 in IR: “fetch” (ciclo M1) Nel primo esempio si ha l’esecuzione dell’istruzione “LDA,C0”; si inizia ponendo nel PC l’indirizzo 0100H. Si distinguono due fasi: la fase di fetch (prelievo) e la fase di execute (esecuzione). La fase di fetch è la stessa per tutte le istruzioni: viene prelevato dalla memoria (locazione 0100) il codice operativo dell’istruzione (3E) e lo si carica nel registro istruzioni (IR) dove viene decodificato e l’istruzione viene riconosciuta. Segue la fase di execute differente da istruzione ad istruzione; durante questa fase viene eseguita una specifica sequenza di microistruzioni corrispondente al codice operativo 3E. Le sequenze, diverse per ogni codice operativo e tante quante sono le istruzioni del microprocessore risiedono nella ROM interna della CPU dove vengono collocate all’atto della fabbricazione del chip. Schematicamente: Fase di fetch: •0100H (contenuto del PC) viene posto sull’Address bus •3E (contenuto nella 0100H) viene posto nel IR •Il PC si incrementa e va a 0101 Fase di execute: •0101H viene posto sull’Address bus •C0 (contenuto nella 0101H) viene posto nell’Accumulatore. (esecuzione del microprogramma) •Il PC si incrementa e va a 0102H Il secondo esempio si riferisce all’istruzione “ DEC B” che non opera su un operando e per ciò questa istruzione non ha la fase di execute ma solo quella di fetch. 15 I cicli T e i cicli macchina L’esecuzione delle istruzioni avviene sotto il controllo della CPU che insieme al clock temporizzano tutte le operazioni. Il periodo del clock, dipendente dalla frequenza del microprocessore, prende il nome di “ciclo T” (per f = 4MHz si ha un ciclo T di 250 ns). La fase di fetch avviene in un “ciclo macchina M1” che può essere composto da 4, 5, o 6 cicli T a seconda della complessità dell’operazione da svolgere. Talvolta il codice operativo è formato da 2 byte, allora il fetch è composto da due cicli M1. La fase di execute avviene in un numero variabile di cicli macchina M dipendente dalla lunghezza del microprogramma. 16 LETTURA DEL OP. COD. (FETCH) LE TEMPORIZZAZIONI DEI SEGNALI DURANTE IL FETCH Nell’esempio di figura la fase di fetch dura quattro cicli T. Siccome il fetch è un’operazione di lettura in una locazione della memoria vengono attivati, oltre il bus degli indirizzi e il data bus, anche una serie di segnali di controllo che tempificherano le operazioni: •Il segnale MREQ (dalla CPU verso la memoria) con il quale la CPU richiede l’accesso in memoria. •Il segnale RD che abilita la lettura in memoria. •Il segnale M1 che segnala che la lettura riguarda un codice operativo. Tutti questi segnali si attivano (attivi bassi) in tempi prestabiliti e dopo che l’indirizzo sia stato posizionato dal PC sull’Address bus. Il contenuto della memoria viene posto sul data bus molto più tardi, quasi alla fine dei segnali MREQ, RD e M1 a causa dei lunghi tempi di abilitazioni e di accesso. Il contenuto del data bus (l’ Op. Cod.) viene posto nel registro IR per la decodifica e durante il tempo della decodifica si approfitta per eseguire il refresh delle memorie dinamiche; (ovviamente si riabbassa il MREQ per consentire il nuovo accesso per il rinfresco). 17 LETTURA E SCRITTURA IN MEMORIA LE TEMPORIZZAZIONI DEI SEGNALI DURANTE LA LETTURA E LA SCRITTURA IN MEMORIA Sia nella fase di lettura sia RD e nella fase ( come abbiamo visto per la lettura dell’ OP COD) i dati vengono posizionati sul Data Bus. Nell’operazione di scrittura, invece, il dato viene posizionato sul data Bus molto prima del segnale WR; esso si attiverà per un tempo molto breve e dovrà trovare il dato pronto e stabile per poterlo scrivere. 18 LETTURA / SCRITTURA IN UNA PERIFERICA LE TEMPORIZZAZIONI DEI SEGNALI DURANTE LA LETTURA E LA SCRITTURA IN UNA PERIFERICA Nelle operazioni di lettura e scrittura in un dispositivo periferico di input o di output vengono coinvolti, analogamente a quanto detto per la memoria, l’address bus, il RD e il WR. Ora però non viene attivato il segnale MREQ bensì l’IOREQ. Il segnale IOREQ, che fa parte del control bus dello S80, abilita la periferica esterna selezionata dall’address Bus; essa scambierà i dati attraverso il data bus. 19 SISTEMA MINIMO Z80 In riferimento a quanto descritto precedentemente, l’architettura standard di un sistema a microprocessore richiede una CPU, una ROM, una RAM, una Porta di uscita ed una di ingresso oltre, ovviamente, al generatore di clock, alla alimentazione e al circuito di Master Reset. Nello schema proposto è incluso il minimo indispensabile affinché, attraverso un semplice programma, si possa leggere lo stato di 8 interruttori e accendere 8 semplici LED. Sulla parte sinistra del blocco CPU sono rappresentati i segnali di controllo che gestiscono la abilitazione dei vari dispositivi e la tempificazione delle varie operazioni. Come dispositivo di uscita è utilizzato un Flip Flop D (p.e.t.) mentre come porta di ingresso un buffer 3-state controllato dal segnale IORQ (attivo basso). E’ da notare che nell’abilitazione delle memorie è stata eseguita la decodifica completa (non ambigua) degli indirizzi avendo utilizzato tutte le linee del address bus. 20 Fig. 1 Fig. 2 Fig. 4 Fig. 3 I quarzi sono cristalli con proprietà piezoelettriche: se sollecitati con una tensione elettrica generano deformazioni meccaniche e viceversa se sollecitati meccanicamente generano tensioni elettriche. Se la tensione applicata si annulla la deformazione si esaurisce attraverso un regime oscillatorio smorzato la cui frequenza dipende oltre che dalla forma geometrica del cristallo dalla sua frequenza naturale di vibrazione e dalla direzione del taglio che il cristallo ha subito. L’eccitazione del cristallo con una tensione alternata invece, esalta queste vibrazioni e determina un fenomeno di risonanza nella quale lo scambio di energia elettrica e meccanica avviene con bassissime perdite nel cristallo. Il circuito equivalente del quarzo (figura 2 ) è un circuito risonante RLC dove R corrisponde all’attrito meccanico delle vibrazioni, L all’inerzia della massa della lamina di quarzo utilizzata, C alla sua elasticità e Co alla capacità fra gli elettrodi. I quarzi vengono utilizzati per creare oscillatori piezoelettrici; ne esistono molteplici circuiti applicativi. In figura 3 viene proposto un oscillatore di Colpitts in cui il quarzo ha sostituito l’induttanza mentre in figura 4 viene proposto un generatore di clock che utilizza il 74LS04 come elemento amplificatore. 21 ESEMPIO DI PROGRAMMAZIONE IN ASSEMBLER Z80 Si vuole scrivere un programma che esegua la somma di due dati: •Il primo dato è la costante C0 •Il secondo dato è contenuto nel registro R Il programma deve: • Prelevare i dati. • Eseguire la loro somma. • Porre il risultato nella locazione 0200H di memoria se è stato generato un “CARRY”. • Porre il risultato nella locazione 0300H di memoria se non è stato generato un “CARRY”. 22 23