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
Scarica

INTRODUZIONE AI MICROPROCESSORI