introduzione ai microprocessori - Eledea · La CPU Z80 La Zilog Z80 è sicuramente la più longeva...

23
1 INTRODUZIONE AI MICROPROCESSORI

Transcript of introduzione ai microprocessori - Eledea · La CPU Z80 La Zilog Z80 è sicuramente la più longeva...

1

INTRODUZIONE

AI

MICROPROCESSORI

2

Processo sotto

controllo

osservazioniazioni

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.

3

Processo sotto

controllo

Segnali

( stati )

Segnali

(comandi)

• Dispositivi analogici

• Reti Logiche

• Sistemi programmabili

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.

4

Scelta del sistema di controllo

Parametri di scelta

• Parallelismo delle operazioni

• Numero delle variabili di controllo

• Complessità delle operazioni sotto controllo

• Velocità di risposta

• Modularità del sistema (espandibilità)

• Flessibilità del controllo

• Affidabilità dei componenti e del controllo

Controlli Analogici

Controlli Digitali Cablati

Controlli Digitali Programmabili

La scelta sulla tipologia del sistema di controllo dipende da molteplici parametri che spesso non

determinano una preferenza univoca.

5

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.

6

Schema semplificato di un computer

Unità Centrale

(Microprocessore)

RAM

ROM

I / O

Periferiche di IN

• Tastiere

• Microfoni

• Trasduttori

• Interruttori

Periferiche di OUT

• LED, Display

• Stampanti, Altoparlanti

• Motori, Relays

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.

7

INTEGRAZIONE E …. MODULARITA’

[architettura a BUS]

CPU

microprocessore

ADDRESS BUS

DATA BUS

CONTROL BUS

MEMORIA PORTE I / O

MONDO ESTERNO

ESPANSIONI

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.

8

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.

9

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.

10

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.

11

A F

B C

D E

H L

A’ F’

B’ C’

D’ E’

H’ L’

I

R

IX

IY

SP

PC

Registri di uso

generale

Registri di uso

speciale

Registri fondamentali

Registri alternativi

Vettore interruzioni

Rinfresco memoria

Registri

Indice

Stack Pointer

Program Counter

Registri

Interni

Z80

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).

12

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”.

13

LA SINTASSI DEL LINGUAGGIO ASSEMBLER Z80

VERBO NOME , NOME

AZIONE DESTINAZIONE SORGENTE

STRUTTURA DI ALCUNE ISTRUZIONI Z80

LD A, C0 OP. COD. OPERANDO

LD A, (0400) H L

OP. COD. OPERANDO OPERANDO

3E C0

3E 00 04L H

JP 011C H L

OP. COD. OPERANDO OPERANDOC3 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).

14

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

0101 C0 1100 0000

0102 LD(0400), A 32 0011 0010

0103 00 0000 0000

0104 04 0000 0100

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).

15

FASI DI ESECUZIONE DI UN’ISTRUZIONE ASSEMBLER

Esempio 1: LDA, C0

Address 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.

16

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.

17

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).

18

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.

19

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.

20

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.

21

Fig. 4

Fig. 3

Fig. 2Fig. 1

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.

22

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”.

23