CAPITOLO 1 ARCHITETTURA DI UN SISTEMA A MICROPROCESSORE Introduzione Architettura Elementi caratteristici di una CPU Classificazione memorie Gestione dispositivi di I/O: polling, interrupt, DMA Tutto in uno: cenni a microcontrollori e PLC Parole chiave 1 CAPITOLO 1: ARCHITETTURA DI UN SISTEMA A MICROPROCESSORE INTRODUZIONE Agli inizi degli anni '60 comparvero sul mercato i primi circuiti integrati digitali. Servendosi di tali dispositivi divenne più semplice la progettazione e la realizzazione di sistemi logici. Utilizzando la tecnica denominata a logica cablata, i sistemi venivano progettati utilizzando i circuiti integrati digitali offerti dal mercato (porte logiche, registri, contatori, ecc.) in funzione dell'applicazione specifica. Inoltre, aumentando sempre più il numero di componenti integrati su un unico chip di silicio, ovvero le funzioni logiche che il singolo circuito integrato era in grado di svolgere, divennero sempre più complesse e sofisticate le funzioni disponibili. Tuttavia il costo del dispositivo integrato aumentava con la sua complessità, e solo una sua larga diffusione permetteva l'abbattimento del costo di produzione, cosa non sempre possibile in quanto esso spesso era rivolto ad utilizzazioni specifiche. Nacque pertanto ben presto la necessità di disporre di un unico dispositivo che permettesse di essere utilizzato in applicazioni diverse con poche modifiche. Sulla base di queste motivazioni venne realizzato agli inizi degli anni '70 un circuito integrato destinato a rivoluzionare il mondo dell'elettronica e della sistemistica in generale, a cui fu dato il nome di microprocessore (C.P.U. = Central Process Unit). Tale dispositivo, con una struttura interna molto complessa per svolgere correttamente le funzioni per cui era stato realizzato, aveva bisogno di essere programmato, ovvero che gli venisse fornita una successione ordinata di istruzioni sul modo di operare. Il microprocessore può quindi essere considerato un dispositivo adatto a svolgere funzioni diverse, modificando solo in modo minimo la parte circuitale (hardware) ad esso connessa, ma variando di volta in volta, in base all'applicazione richiesta, il programma di gestione (software). I sistemi realizzati con l'applicazione di una CPU sono detti a logica programmabile. Il microprocessore può essere utilizzato in una vastissima gamma di applicazioni che vanno dai sistemi di controllo, alla strumentazione di misura, dalle apparecchiature domestiche quali lavastoviglie e televisori 2 a quelle elettromedicali, senza dimenticare una delle più diffuse applicazioni, ovvero il Personal Computer. ARCHITETTURA DI UN SISTEMA A MICROPROCESSORE Un microprocessore in genere, pur contenendo al suo interno tutti i circuiti di calcolo e di controllo, per poter operare correttamente ha bisogno di essere applicazioni per collegato cui il con altri processore è dispositivi impiegato (da in base solo alle non è utilizzabile). Si è già detto che l'uso di un microprocessore può essere rivolto alle più varie applicazioni, che vanno dai sistemi di controllo di tipo industriale, all'utilizzazione molto diffusa in sistemi di elaborazione dati. In ogni caso al microprocessore debbono essere collegati sia dei moduli di memoria che i dispositivi per l’ingresso e l'uscita dei dati. E dunque necessario parlare di sistema a microprocessore e non semplicemente di microprocessore. Nella figura è riportato un semplice schema di sistema con memorie e dispositivi di I/O. In esso è evidenziata la funzione di collegamento tra i vari componenti svolta dai BUS DATI, BUS INDIRIZZI e BUS CONTROLLI. 3 Il sistema è costituito da una CPU da memorie RAM e ROM da uno o più dispositivi d'ingresso e d'uscita. Lo schema può servire per comprendere come il microprocessore possa scambiare informazioni con la memoria e con i dispositivi di I/O (Input / Output). Mediante il bus indirizzi vengono identificate le locazioni di memoria dove vengono memorizzati i dati nelle operazioni di scrittura o da cui la CPU riceve i dati (o i codici delle istruzioni, cioè il programma) nelle operazioni di lettura. Inoltre, sempre per mezzo del bus indirizzi il microprocessore identifica i dispositivi d'ingresso, ad esempio la tastiera di un computer, da cui riceve i dati nello operazioni di lettura da periferica o quelli d'uscita, ad esempio il monitor di un computer, a cui invia i dati nelle operazioni di scrittura su periferica. Il bus dati è utilizzato per il trasferimento (lettura o scrittura) dei dati dalla CPU con le locazioni di memoria o con i dispositivi di ingresso / uscita (detti anche periferici o dispositivi di I/O). Il bus controlli, oltre a funzioni specifiche che non saranno qui esplicitate, è utilizzato dalla CPU per segnalare alla memoria e ai dispositivi di I/O la direzione del flusso dei dati e il tipo di dispositivo coinvolto nel trasferimento (memoria o I/O). L’architettura a BUS presenta diversi vantaggi il principale dei quali è dato dalla modularità del sistema; è infatti particolarmente semplice ampliare il sistema con l’aggiunta di nuovi componenti collegandoli ai BUS. Tale vantaggio risulta evidente pensando alle schede madri dei Personal Computer, dove attraverso gli slot di espansione è possibile ampliare le prestazioni e le caratteristiche del sistema attraverso nuove schede (es: modem, acquisizione dati, porte parallela) o nuovi chip di memoria. I diversi “oggetti” sono collegati ai bus con una modalità che consenta di evitare conflitti e/o indecisioni nella comunicazione che avviene sempre tra due soli componenti del sistema e quasi sempre uno dei due è il microprocessore. 4 BUS DATI (bidirezionale) CS1 CPU CS2 CS3 MEMORIA I/O DECOD 1 DECOD 2 espansione READ WRITE DECOD 3 BUS INDIRIZZI BUS CONTROLLI Lo schema di figura (dove per semplicità si sono rappresentate solo 4 linee per bus) mette in evidenza i circuiti di decodifica che, generando dei segnali di chip select, permettono di selezionare i diversi dispositivi. I segnali CS permettono di togliere il componente dallo stato di alta impedenza (che corrisponde al virtuale scollegamento del componente dal bus dati) garantendo la corretta comunicazione solo tra due componenti. Altri segnali particolarmente importanti per la comunicazione provengono dal BUS CONTROLLI e sono i segnali di READ e WRITE, pilotati dalla CPU, e specificano la direzione dei dati nel trasferimento. 5 Nella figura sotto riportata si mette in evidenza la sostanziale differenza tra un collegamento a Bus ed un collegamento punto a punto, dove è evidente la difficoltà di aggiungere un nuovo elemento al sistema. ELEMENTI CARATTERISTICI DI UNA CPU La CPU costituisce il cuore e l’elemento più importante del sistema; in esso sono rappresentate le funzioni logiche, di controllo e aritmetiche. La CPU è in grado di prelevare le istruzioni del programma da svolgere contenute nella memoria (fase di fetch) e di interpretarle ed eseguirle (fase di execute). Tale istruzioni sono evidentemente in forma binaria. Grazie ai programmi compilatori (ad esempio turbo Pascal, Turbo C, Basic) è possibile scrivere programmi per Personal Computer utilizzando linguaggi particolarmente semplici ed intuitivi (linguaggi ad alto livello) che vengono poi “converititi” automaticamente nell’unico linguaggio interpretato ed eseguito dalla CPU che viene denominato linguaggio macchina. Le principali caratteristiche di una CPU che ne identificano le peculiarità e la potenza possono essere cosi sintetizzate: • Set istruzioni, cioè l’insieme delle istruzioni che la CPU è in grado di svolgere; si tenga presente che alcuni microprocessori delle prime generazioni non sono in grado di svolgere l’operazione di moltiplicazione che quindi viene svolta tramite un algoritmo (programma) costituito da somme ripetute. • Velocità di funzionamento ed esecuzione delle istruzioni; si identificano tali caratteristiche attraverso il clock di sistema (frequenza di funzionamento passata negli anni da qualche MHz a centina di Mhz) e il MIPS (milioni di istruzioni eseguite in un secondo). 6 • Architettura interna, insieme dei registri di lavoro, coprocessore matematico per svolgere le operazioni logico aritmetiche di una certa complessità, memoria cache per il reperimento veloce delle istruzioni da svolgere. A titolo esemplificativo si riporta l’architettura interna della CPU Z80 7 CLASSIFICAZIONE MEMORIE 8 GESTIONE DISPOSITIVI DI I/O: POLLING, INTERRUPT, DMA Un sistema a microprocessore deve eseguire programmi più o meno complessi, trasferire dati alle periferiche esterne e ricevere da queste informazioni. Durante l'esecuzione dei programmi vi è anche un flusso continuo di dati dalla CPU alle memorie e viceversa. Il video, la tastiera, la stampante, il plotter, il drive ecc., sono gli esempi più noti di dispositivi periferici. In molti casi il trasferimento dei dati dalla CPU alle periferiche e alle memorie deve rispettare procedure ben precise e codificate. Le tecniche di scambio dei dati tra il sistema e le periferiche possono essere classificate in tre distinte categorie: • Polling • Interruzione • DMA L’utilizzazione di una tecnica piuttosto che un'altra richiede una attenta analisi delle procedure software e dei dispositivi hardware da adottare al fine di valutare quale sia la tecnica che contribuisca ad aumentare l’efficienza del sistema a microprocessore e che meglio si adatti alle specifiche di progetto Di seguito sono presi in considerazioni gli aspetti principali delle tecniche di trasferimento dati tra la CPU e le periferiche. Polling (interrogazione ciclica) È la tecnica più semplice per lo scambio di informazioni tra microprocessore e le periferiche perché è essenzialmente software. Prevede che la CPU sotto il controllo di un programma ben definito, controlli continuamente e in modo ciclico lo stato delle periferiche ad essa collegate. In pratica la CPU effettua un test sulla condizione della periferica verificando il livello di un bit di flag secondo il diagramma di flusso della figura di seguito riportata. 9 Se il flag è attivo (generalmente a livello logico basso), la CPU esegue un programma di servizio al termine del quale verifica lo stato del flag della seconda periferica e così via. Naturalmente la CPU passa immediatamente a controllare il flag del la seconda periferica se quella interpellata non ha bisogno dell'attenzione della CPU. Questa tecnica di gestione delle periferiche risulta onerosa per la CPU perché essa è continuamente impegnata a verificare lo stato dei bit di flag ed inoltre, essendo l'interrogazione ciclica, non si ha la possibilità di stabilire una gerarchia tra le richieste di servizio avanzate contemporaneamente da più periferiche La tecnica del polling risulta altresì poco efficiente perché se una periferica appena interrogata ha bisogno di essere servita dalla CPU deve aspettare, prima di essere nuovamente interrogata, che la CPU verifichi io stato di tutte le rimanenti periferiche, e soddisfi le eventuali richieste di servizio da esse avanzate. 10 Interruzione (o Interrupt) Per superare le limitazioni della tecnica del polling, la gestione dello scambio di informazioni tra CPU e periferiche è spesso affidata alla tecnica dell'interruzione, la quale prevede che sia la periferica, a differenza di quanto avviene ne polling, ad avanzare la richiesta di servizio alla CPU. In tal modo la periferica può interrompere la CPU in qualsiasi momento (vedi figura), in relazIone alle esigenze specifiche, senza dover attendere i tempi dell’interrogazione ciclica. Tutte le CPU sono provviste, a seconda della complessità della loro architettura di uno o più ingressi predisposti per ricevere il segnale di richiesta di interruzione da parte della periferica. Quando la CPU riceve il segnale di richiesta di interruzione interrompe, se risultano soddisfatto determinate condizioni, l'esecuzione del programma principale (MAIN) e manda in esecuzione un sottoprogramma (routine o subroutine) predisposto per fa gestione di alcune situazioni di emergenza per le quali la periferica richiede l'attenzione della CPU. Al termine della routine di servizio la CPU riprende esecuzione de) programma principale. L’interruzione è dunque la sospensione temporanea del programma principale affinché la CPU possa evadere la richiesta di servizio avanzata dalla periferica. MAIN Richiesta di interrupt Routine di servizio alla richiesta di interruzione 11 DMA (Direct Memory Access – accesso diretto in memoria) Nella tecnica DMA la periferica richiede alla CPU il controllo dei BUS per gestire in modo autonomo, senza cioè l’intervento del microprocessore, il trasferimento dei dati con le memorie. In pratica nella tecnica DMA un dispositivo di supporto, detto DMA controller, regola il flusso dei dati dalla periferica alla memoria e viceversa. La tecnica DMA è utilizzata quando bisogna gestire i trasferimenti di blocchi di dati ad alta velocità perché, a differenza di quelli gestiti da programma, non sono necessarie operazioni di lettura e scrittura. BUS REQUEST BUS ACK C.P.U. MEMORIA Dispositivo PERIFERICA I/O DMA DATI INDIRIZZI Di particolare significato risultano le due linee di bus request e bus acknoweledge che consentono la gestione del DMA. MICROCONTROLLORI E PLC Con il termine Microcontrollore (microcontrollor) si intende comunemente un sistema a microprocessore integrato su un unico chip, che comprende, oltre alla CPU, una memoria di programma, solitamente di sola lettura (PROM, EPRCM o EEPROM), una memoria RAM, generalmente di dimensioni ridotte, per i risultati intermedi dell'elaborazione e per lo stack e periferici di I/O) vari (porte seriali e/o parallele, contatori, timer ecc.); per quanto appena esposto questi circuiti integrati vengono anche detti microcomputer single chip. Con queste caratteristiche, dovrebbe essere evidente che i microcontrollori sono stati concepiti soprattutto per applicazioni industriali di controllo, in cui il programma di gestione, una volta messo a punto non ha più necessità di essere modificato (o di esserlo raramente). Sono le applicazioni che gli americani chiamano “embedded”, cioè incorporate in prodotti e apparati finiti, che possono andare dagli 12 elettrodomestici intelligenti, ai sistemi di comunicazione o sicurezza, alla strumentazione, all'automazione in campo automobilistico, ecc In questo senso si vogliono qui ricordare ad alcuni microcontrollori particolarmente diffusi quali la famiglia PIC (il 16C84 costituisce importante elemento delle PlayStation), la famiglia ST o le famiglie prodotte da Motorola, Siemens e da diversi altri importanti produttori che hanno progettato e realizzati microcontrollori dedicati a loro applicazioni. I microcontroller PIC (acronimo per Programmable. Integrated Controller) si distaccano dalla struttura di un microprocessore classico, essenzialmente perché sono delle CPU RISC (Reduced InsLrucLion Set Computing, elaborazione con insieme di istruzioni ridotto) basate su una struttura del tipo Harward (dall'Università dove è stata sviluppata), che si distingue dalla macchina di Von Neuman classica per avere memoria programma e memoria dati (e relativi bus) separati. La filosofia RISC consiste sostanzialmente nel prevedere poche e semplici istruzioni, tutte della stessa lunghezza e (possibilmente) tutte richiedenti lo stesso numero di cicli macchina sta per il fetch che per l'esecuzione. Questa caratteristica unita alla separazione fisica dei canali lungo cui fluiscono istruzioni e dati, permette di ottenere una sovrapposizione (Pipelining) delle fasi di Fetch di un'istruzione con quella di esecuzione della precedente “senza buchi" e quindi in modo molto più efficiente di quello che, per esempio, si ha in termini di velocità complessiva dell'elaborazione nei microprocessori della Famiglia 8086, dove istruzioni diverso hanno tempi diversi sia di fetch che di esecuzione. Da un punto di vista delle applicazioni di potenza in impianti industriali e civili hanno avuto larga diffusione i PLC, Controllori Logici Programmabili, che al pari dei microcontrollori hanno la caratteristica della semplice riprogrammabilità per ottenere le più svariate funzioni attraverso le linee (in genere a 24 (v) ed in numero variabile da modello a modello) di segnali I/O. 13 PAROLE CHIAVE 14 15