5393_CalcolatoriLA

Post on 26-Oct-2015

46 views 3 download

description

Calcolatori LA Bologna

Transcript of 5393_CalcolatoriLA

Appunti di Calcolatori Elettronici L-A

Daniele Tiles

28 maggio 2006

.

Indice

Indice 3

Introduzione 7

1 I calcolatori elettronici 9

1 Il modello di riferimento . . . . . . . . . . . . . . . . . . . . . 9

2 Rappresentazione astratta dell’hardware di un calcolatore elet-

tronico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 La CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

4 Accesso da parte della CPU ai dati e alle istruzioni: indirizza-

mento della memoria . . . . . . . . . . . . . . . . . . . . . . . 12

4.1 Spazio di indirizzamento in memoria . . . . . . . . . . 13

4.2 Accesso alle interfacce di I/O: spazio di indirizzamento

in I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5 Trasferimento di informazioni sul bus, comandati dalla CPU . 15

5.1 Tipi di segnali . . . . . . . . . . . . . . . . . . . . . . . 16

5.2 La cache: ottimizzazione delle prestazioni . . . . . . . . 16

6 Agenti master e slave . . . . . . . . . . . . . . . . . . . . . . . 16

6.1 Sistemi multimaster . . . . . . . . . . . . . . . . . . . . 17

2 Architettura dell’hardware di un calcolatore elettronico 19

1 Le prestazioni di un calcolatore: CPUtime . . . . . . . . . . . . 19

2 Le memorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.1 ROM e EPROM . . . . . . . . . . . . . . . . . . . . . 21

2.2 Spazio d’indirizzamento e parallelismo . . . . . . . . . 22

2.3 Ancora EPROM . . . . . . . . . . . . . . . . . . . . . . 23

4 Indice

2.4 Le RAM . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.5 Una cella di RAM . . . . . . . . . . . . . . . . . . . . 25

3 I circuiti notevoli . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.1 Il 244 . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.2 Il 245 . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.3 Il 373 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.4 Il 374 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3 Il linguaggio macchina (Istruction Set Architecture - ISA) 31

1 Rappresentazione simbolica delle istruzioni macchina: l’assem-

bler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2 Classificazione dei linguaggi macchina . . . . . . . . . . . . . . 33

3 Tipologia delle istruzioni . . . . . . . . . . . . . . . . . . . . . 33

3.1 Tecniche di indirizzamento degli operandi in memoria . 34

3.2 Classificazione in base agli operandi . . . . . . . . . . . 35

4 Alcune definizioni e istruzioni . . . . . . . . . . . . . . . . . . 35

4.1 Allineamento dei byte in memoria . . . . . . . . . . . . 36

4 ISA DLX 37

1 Formati delle istruzioni nelle architetture R-R (DLX) . . . . . 37

1.1 IA 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2 ISA DLX: Implementazione mediante la struttura sequenziale 39

2.1 Calcolo del periodo di clock . . . . . . . . . . . . . . . 41

3 Il diagramma degli stati del controller . . . . . . . . . . . . . . 41

3.1 Altri esempi e osservazioni . . . . . . . . . . . . . . . . 43

4 I passi dell’esecuzione delle istruzioni . . . . . . . . . . . . . . 44

5 ISA Pipelined 47

1 CPU DLX Pipelined . . . . . . . . . . . . . . . . . . . . . . . 47

1.1 L’architettura Harvard . . . . . . . . . . . . . . . . . . 49

1.2 Altre osservazioni . . . . . . . . . . . . . . . . . . . . . 49

2 Alee nelle pipeline . . . . . . . . . . . . . . . . . . . . . . . . . 50

2.1 Alee di controllo . . . . . . . . . . . . . . . . . . . . . 51

2.2 Branch Target Buffer . . . . . . . . . . . . . . . . . . . 52

Indice 5

6 Decodifica indirizzi e mapping 53

1 Decodifica parziale . . . . . . . . . . . . . . . . . . . . . . . . 55

7 L’8088 57

1 Una prima descrizione del processore: i segnali . . . . . . . . . 57

2 Registri Interni . . . . . . . . . . . . . . . . . . . . . . . . . . 59

2.1 Modalita d’indirizzamento . . . . . . . . . . . . . . . . 60

3 Altre caratteristiche dell’8088 . . . . . . . . . . . . . . . . . . 61

4 Caratteristiche del BUS . . . . . . . . . . . . . . . . . . . . . 62

5 Generazione dei segnali per pilotare il bus, i comandi . . . . . 63

5.1 Generazione del clock e del reset . . . . . . . . . . . . . 64

5.2 Generazione del segnale di READY . . . . . . . . . . . 65

6 Calcolo degli stati di wait nel caso di cicli di lettura dalla

memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

8 La gestione dell’Input/Output 67

1 Le periferiche . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

1.1 L’8255 . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

1.2 Parola di controllo dell’8255 . . . . . . . . . . . . . . . 69

2 Le Interruzioni . . . . . . . . . . . . . . . . . . . . . . . . . . 70

2.1 Meccanismi d’interruzione dell’8088 (stesso per tutta

la famiglia) . . . . . . . . . . . . . . . . . . . . . . . . 70

2.2 PIC 8259 . . . . . . . . . . . . . . . . . . . . . . . . . 71

Introduzione

Questi appunti rappresentano il formato elettronico degli appunti da me pre-

si nell’anno accademico 2003/2004. Questo documento non e da considerarsi

ufficiale e/o sostitutivo alle dispense del professore, ma si spera possa essere

d’aiuto per lo studio della materia. (Anzi, mio spassionato consiglio: ricon-

trollate piu volte le slide, e se ci son delle discrepanze, fidatevi delle slide!)

Se si riscontrano errori o mancanze, potete riferirmele all’email

daniele.tiles@gmail.com, in modo che possa correggerle al piu presto.

Capitolo 1

I calcolatori elettronici

Un calcolatore elettronico non e nulla di piu o di meno di una rete logica,

ovvero una rete retroazionata con un certo numero di flip-flop. Cio che lo

contraddistingue e la complessita della rete progettata, che e notevole.

1 Il modello di riferimento

Il primo esempio di calcolatore elettronico puo essere ricondotto alla Mac-

china di Von Neumann, progettata intorno agli anni 40 del secolo scorso:

una macchina teorica come quella di Turing, ma allo stesso tempo piu com-

plessa e dettagliata, e con la possibilita di poter scegliere la sorgente di input.

Un calcolatore elettronico consiste in una architettura del tutto generale, che

porta a realizzazioni poco dipendenti da quello che e il funzionamento desi-

derato. Il funzionamento desiderato viene espresso in termini di sequenze di

istruzioni (programma) che sono memorizzate su un apposito supporto di me-

moria; per cambiare il funzionamento basta quindi cambiare il programma.

L’architettura e tale da trattare problemi piu complessi di quelli visti nelle

reti logiche, a scapito pero di una minore efficienza.

2 Rappresentazione astratta dell’hardware di

un calcolatore elettronico

In un calcolatore elettronico, l’hardware necessita di un suo set di informa-

zioni per poter comunicare con il software. Questo set viene detto linguaggio

10 I calcolatori elettronici

macchina.

Nella figura seguente si puo vedere una generica rappresentazione della strut-

tura logica di un calcolatore.

Figura 1.1: Struttura logica di un calcolatore

Alcune definizioni dei nomi presenti nello schema:

• I registri sono un insieme di flip-flop che hanno un comportamento

simile

• Il PC o Program Counter e un registro dell’Unita di elaborazione (detta

anche CPU, Central Processing Unit, che serve per reperire le istruzioni

che devono essere elaborate proprio dalla CPU.

• L’ALU e l’Arithmetic Logic Unit, una rete combinatoria importantissi-

ma per la CPU: e quella che si preoccupa di eseguire tutti i calcoli.

• I registri di transito e di stato rappresentano le zone di input e output

del calcololatore elettronico.

• Il bus di sistema e il supporto di interconnessione fra i blocchi che costi-

tuiscono l’elaboratore: ci transitano i segnali digitali che rappresentano

le variabili binarie. I blocchi interconnessi al bus sono detti bus agent.

1.3 La CPU 11

Durante lo sviluppo dei calcolatori elettronici, si e dovuto mantenere co-

stante questa struttura per poter in ogni modo supportare il software che

veniva realizzato: un’alterazione di tale modello porterebbe a dei problemi di

compatibilita.

3 La CPU

La Central Processing Unit e una macchina sequenziale sincrona. . . il com-

portamente di un calcolatore elettronico si puo quindi semplificare al massimo

in una rete a 2 stati.

Figura 1.2: Gli stati di un calcolatore elettronico

• IF o Instruction Fetch e lo stato in cui la CPU legge in memoria la

prossima istruzione da eseguire.

• EX o EXecute e lo stato in cui la CPU esegue l’istruzione letta nello

stato IF.

La CPU per poter funzionare richiede almeno due ingressi: quello di RESET

e quello di CLOCK ovviamente, essendo una macchina sincrona. Nel caso il

RESET non fosse attivo, la CPU legge ed esegue perennemente istruzioni,

cambiando lo stato ad ogni impulso di clock. La frequenza di clock e uno dei

parametri che caratterizzano la CPU: e circa di 10 volte superiore al clock

presente sul bus.

Come fa la CPU a sapere da dove reperire l’istruzione successiva mentre e

nello stato di IF? Nel Program Counter viene memorizzato l’indirizzo dell’i-

struzione successiva, e viene incrementato ad ogni istruzione di fetch. Nel-

12 I calcolatori elettronici

l’immagine seguente e rappresentato il grafico del PC in funzione del tempo,

nel caso il calcolatore esegua un loop di 4 istruzioni.1

Figura 1.3: Grafico del PC in funzione del tempo, nel caso la CPU esegua un

loop di 4 istruzioni

In realta, non e detto che la CPU esegue le istruzioni nell’ordine prefissato.

Per esempio, nei processori son presenti dei compilatori che sono in grado di

generare il codice macchina partendo da un linguaggio di programmazione

ad alto livello, e che riescono anche ad ottimizzare i programmi, ottenendo

una sequenza diversa da quella programmata. Oggi giorno la situazione e

ancora piu complicata per via dei calcolatori fuori ordine: questi leggono n

istruzioni contemporaneamente, senza rispettare quindi l’ordine imposto dal

processore.

4 Accesso da parte della CPU ai dati e alle

istruzioni: indirizzamento della memoria

Molte memorie 2sono degli insiemi consecutivi di celle, e quindi si puo indi-

viduare ogni cella mediante il suo indirizzo. In generale ogni cella e composta

da 8 bit, dal quale si deduce che il byte e la piu piccola quantita di memoria

1E da notare che la pendenza delle linee e un indicatore del numero delle istruzionieseguite nell’unita di tempo.

2Non tutte: un esempio son le memorie cache

1.4.1 Spazio di indirizzamento in memoria 13

indirizzabile.3

Una memoria e quindi pari a un vettore di 2n elementi, ovvero che sono indi-

viduabili mediante gli indirizzi compresi nel range fra [0, 2n− 1]. Gli indirizzi

si indicano solitamente mediante codice esadecimale4

La dimensione dello spazio d’indirizzamento di una CPU e uno dei parametri

che ne caratterizza l’architettura. Questa si puo esprimere in:

• KiloByte = 210 byte

• MegaByte = 220 byte

• GigaByte = 230 byte

4.1 Spazio di indirizzamento in memoria

Lo spazio di indirizzamento e continuamente migliorato con il progredire della

tecnologia:

• l’8085 aveva uno spazio di indirizzamento pari a 64 KB, con indirizzi a

16 bit

• l’8086 aveva uno spazio di indirizzamento pari a 1 MB, con indirizzi a

20 bit, rappresentati in 5 cifre esadecimali.

• i primi Pentium avevano uno spazio di indirizzamento pari a 4 GB, con

indirizzi a 32 bit, rappresentati in 8 cifre esadecimali.

• Infine, i Pentium III e IV hanno uno spazio di indirizzamento pari a 64

GB, con indirizzi a 36 bit.5

Nell’immagine seguente si puo vedere la rappresentazione logica di uno spazio

di indirizzamento a 4 Gb.In tale spazio vengono “mappati” i dispositivi fisici di memoria: in questo

modo la CPU e in grado di riconoscere e di usare i componenti fisici della

memoria (la CPU ragiona solo mediante indirizzi)! Puo essere che i singoli

3E quindi importante notare che sul bus non deve solo passare il dato, ma anchel’indirizzo

4Che non ha nulla a che vedere con l’ASCII. . .5Un processore a 36 bit significa che ad ogni colpo di clock riesce a leggere fino a 36

bit (non sempre 36, puo anche leggerne di meno), e cio permette il parallelismo.

14 I calcolatori elettronici

Figura 1.4: Rappresentazione logica dello spazio di indirizzamento per una

memoria a 4 Gb, ovvero la memoria viene vista come una serie di byte se-

quenziali. Agli estremi della memoria vengono indicati il primo e l’ultimo

indirizzo indicabile, mentre l’area rossa rappresenta appunto il dispositivo

fisico mappato.

componenti fisici non abbiamo memoria sufficiente per costituire la memo-

ria logica dell’architettura: in questo caso basta predisporre nell’architet-

tura tanti componenti in modo da ottenere la memoria logica desiderata,

“mappandoli” tutti.

4.2 Accesso alle interfacce di I/O: spazio di indirizza-

mento in I/O

Come e gia stato detto, il processore di un calcolatore elettronico ragiona solo

mediante indirizzi logici: si ha quindi che anche i dispositivi di I/O devono

essere mappati perche il processore possa “riconoscerli e usarli”.

I dispositivi di I/O possono essere mappati o in uno spazio distinto da quello

usato per le memorie, oppure nello stesso. In quest’ultimo caso si dice che

l’I/O e mappato in memoria (memory mapped I/O). In generale lo spazio di

indirizzamento per i dispositivi di I/O e piu piccolo dello spazio di indirizza-

mento in memoria. Si ha quindi che il numero degli indirizzi in I/O sia molto

inferiore al numero di indirizzi della memoria centrale6.

6Si dice memoria centrale quegli indirizzi che sono direttamente raggiungibili dalprocessore

1.5 Trasferimento di informazioni sul bus, comandati dalla CPU 15

Con il passare degli anni e l’evoluzione della tecnologia dei processori, si ha

che il numero degli indirizzi per i dispositivi in I/O in realta e rimasto circa

lo stesso, cioe 64 Kb. Questo numero e anche eccessivo, ma in questo mo-

do si possono avere degli indirizzi ridondanti che possono avere la loro utilita.

Come si fa a discriminare i due diversi spazi di indirizzamento? Sul bus e

presente un segnale detto qualificatore che specifica il tipo di indirizzo che

sta transitando sul bus.7.

5 Trasferimento di informazioni sul bus, co-

mandati dalla CPU

La CPU puo comandare come trasferimenti di informazioni sul bus

• Trasferimenti da e verso dispositivi mappati nello spazio d’indirizza-

mento in memoria come

– Lettura di istruzioni e dati (gli operandi dei primi) dalla memoria– Scrittura dei risultati nella memoria

• Trasferimento da e verso dispositivi mappati nello spazio di indirizza-

mento in I/O come:

– Lettura di dati dalle interfacce– Scrittura dei risultati sulle interfacce

Per gestire correttamente questi trasferimenti (ovvero la scrittura/lettura di

dati su/da indirizzi emessi dal processore, che comanda il trasferimento), il

bus di sistema deve disporre di 3 gruppi di segnali:

• Segnali di indirizzo

• Segnali di dato

• Segnali di controllo/comandi o sincronizzazioni

e quindi ha bisogno di 3 piste distinte, una per ogni tipo di segnale.

Il bus e il vero collo di bottiglia delle prestazioni di un sistema. . . si ha quindi

che:

• Deve essere il piu veloce possibile

• Deve essere sempre sfruttato al massimo, anche quando il processore

non lo richiede7Si potrebbe usare le istruzioni di memoria per trasferire dati dai dispositivi di I/O,

ma in generale e sconsigliato.

16 I calcolatori elettronici

5.1 Tipi di segnali

Ci sono 4 segnali indispensabili per il funzionamento di un calcolatori:

• Memory read (Si fornisce l’indirizzo di una cella di memoria, e si vuole

il valore contenuto in quella cella)

• Memory write (il duale del precedente)

• I/O read

• I/O write

Tuttavia esistono molti altri segnali che son necessari al funzionamento del si-

stema: per esempio il segnale di wait e necessario per poter segnalare da parte

dei dispositivi esterni al processore di fermarsi prima di richiedere/scrivere

dati perche devono terminare un loro processo.

5.2 La cache: ottimizzazione delle prestazioni

La cache e una memoria interna molto veloce, che contiene un sottoinsieme

delle informazioni presenti in memoria, quelle che hanno la piu alta proba-

bilita di essere richiamate dal processore (di norma, i programmi consistono

i tantissimi loop, e quindi le informazioni necessarie al processore non so-

no tantissime). Utilizzando la cache, quando il processore lavora su dati che

ha gia a disposizione non si deve preoccupare di reperirli: il problema ora

consiste nello svuotare la cache quando i dati non sono piu utilizzati e nel

riempirla con i dati che sono piu richiesti dal processore. . . con lo sviluppo

della tecnologia si hanno dei processori che contengono al loro interno delle

memorie cache. Quello che quindi si e costruito alla fine e una gerarchia delle

memorie, ovvero queste vengono classificate secondo il loro uso e il modo in

cui il processore riesce ad accederci.

6 Agenti master e slave

Tutti i dispositivi collegati al bus di sistema sono detti agenti, e vengono

catalogati a seconda del loro comportamento:

• Master : generano indirizzi e segnali di comando (come per esempio la

CPU nei casi precedenti)

• Slave: accettano passivamente indirizzi e segnali di comando (negli

esempi precedenti, le memorie e i dispositivi di I/O son afenti slave)

1.6.1 Sistemi multimaster 17

• Master/Slave: si tratta di dispositivi che con il passare del tempo

alternano il ruolo da master a slave e viceversa.

Finora si e trattato di schemi in cui e presente un singolo agente master (la

CPU), e che vengono detti appunto sistemi a singolo master.

Il trasferimento di un’informazione tra agenti del bus avviene con una se-

quenza di eventi che viene detta nel loro insieme cicli del bus. Ad ogni ciclo

di bus, si ha che un agente master indirizza un agente slave.

6.1 Sistemi multimaster

Si tratta di sistemi in cui son presenti piu master. . . per esempio, un cal-

colatore elettronico con una CPU e un’interfaccia con DMA8 e un sistema

multimaster.

Un sistema con piu CPU affacciate sullo stesso bus e detto UMA, Uniform

Memory Access. Si ha quindi che si deve gestire chi deve comandare il bus,

ovvero deve essere presente solo un master alla volta a comandare sul bus.

Per poter progettare un sistema del genere, oltre a una corretta gerarchia del-

le memorie serve una specie di “semaforo” per poter segnalare ai vari agenti

master quando il bus e libero.9

I problemi nel progettare un sistema multimaster sono due: fisico (come colle-

gare fisicamente i master al bus) e logico (come liberare il bus). Quest’ultimo

viene risolto da un sistema operativo multimaster, che e molto piu complesso

di quello monomaster.

Quando puo un master cedere il suo turno? Solo quando e stato concluso

un ciclo di bus10. Nel frattempo, un master non attivo sul bus puo fare lo

8Direct Memory Access: e la funzione di accesso autonomo alla memoria. Per gestire iltrasferimento di dati fra gli agenti slave, serve un controller del DMA, un DMAC

9In un sistema del genere, lo spazio d’indirizzamento puo essere riempito a “chiazze dileopardo”, a differenza di cio che accade di solito (ovvero la memoria e riempita in manieracontigua): il programma che viene elaborato nel calcolatore deve essere conscio di questoproblema. . .

10Un ciclo di lettura/scrittura e indivisibile, una volta iniziato va per forza conclu-so. . . esistono delle eccezioni, come nel caso della memoria virtuale: questo e un sistema

18 I calcolatori elettronici

snooping agent, ovvero studia l’attivita presente sul bus per vedere se cio che

avviene lo riguarda.

Un esempio di problema: quante volte la CPU accede al bus per eseguire le

istruzioni:

A = B + C

D = E − F

G = A ·D

Per poter eseguire le tre operazioni, la CPU deve andare per 3 volte a reperire

il tipo di operazione da eseguire (quindi 3 volte nello stato IF) e quindi le

esegue 3 volte (3 volte nello stato EX). Per eseguire il fetch di una istruzione,

alla CPU basta un unico ciclo di bus, mentre per l’execute servono 3 cicli di

bus: due son necessari per poter leggere gli operandi delle istruzioni e infine

serve un terzo ciclo per scrivere il risultato ottenuto in memoria. Si hanno

quindi 3+3 · 3 = 12 cicli di bus per completare il programma. . . tuttavia, cio

non indica in quanto tempo viene effettivamente eseguito il programma.

hardware realizzato dal processore che fa credere al programma in esecuzione di avere tuttala memoria del calcolatore disponibile (sul disco si ha un “prolungamento” della memoriacentrale, ad accesso diretto. . . il dato comunque deve passare per la memoria centrale peressere letto.) In questo caso il ciclo deve essere interotto: il programma viene tempora-neamente fermato, si preleva e legge il dato in memoria centrale, e quindi il programmariprende dal punto in cui si era fermato. . .

Capitolo 2

Architettura dell’hardware di

un calcolatore elettronico

L’architettura dell’hardware di un calcolatore elettronico e definita dalla

terna:

• Il set d’istruzioni, ovvero l’architettura vista dall’utente: e detto anche

codice macchina

• La struttura interna

• La realizzazione circuitale, cioe la tecnologia microelettronica impiegata

nella realizzazione

Quello che si puo avere e che:

• Uno stesso set d’istruzioni puo essere realizzato con strutture interne

diverse

• La stessa struttura interna puo essere realizzata con tecnologie diverse.

• Infine, architetture diverse hanno delle prestazioni diverse.

Per esempio: aumentando il numero dei registri interni, si ha un minor traf-

fico sul bus, con prestazioni migliori. . .ma allo stesso tempo si ha una rete

logica piu complessa.

Come valutare quindi le prestazioni?

1 Le prestazioni di un calcolatore: CPUtime

Le prestazioni di un calcolatore vanno sempre riferite a un programma di ri-

ferimento, detto benchmark. Il CPUtime o “tempo di esecuzione” e il parame-

tro che caratterizza le prestazioni di un calcolatore rispetto a un determinato

20 Architettura dell’hardware di un calcolatore elettronico

benchmark:

CPUtime = Nistruzioni · CPImedio · Tck (2.1)

Dove:

• N e il numero di istruzioni per l’esecuzione del programma (dipende sia

dal benchmark scelto, sia dal linguaggio della macchina)

• CPImedio e il numero medio di clock per ogni istruzione, dipendente dal

benchmark e dalla struttura. Lo si puo determinare come

CPImedio =n∑

i=1

(CPIi ·

Ni

numero totale delle istruzioni

)(2.2)

dove CPIi e il numero di periodi per eseguire l’istruzione i-sima del

benchmark, e dove Ni e la frequenza dell’istruzione i-sima.

Se si ha un CPImedio basso, significa che e basso il CPI delle istruzioni

eseguite con frequenza maggiore.

• Tck e il periodo del clock della macchina, pari a1

fck

, ovvero l’inver-

so della frequenza del clock della macchina. Questa caratteristica di-

pende sia dalla struttura che dalla tecnologia utilizzata per realizzare

l’elaboratore

Esistono dei programmi di alto livello per controllare le prestazioni di un

calcolatore. Per esempio, il drystone e un programma in Fortran per con-

trollare i processori, i compilatori, la memoria . . . , cioe tutti gli elementi che

influenzano l’efficienza.1

Un altro parametro per le prestazioni e il “milioni di istruzioni per secondi”

o MIPS :

MIPS =Nistruzioni

CPUtime · 106(2.3)

che fornisce un’indicazione vaga della potenza di un processore (tuttavia,

questo parametro dipende dal tipo di istruzioni considerate . . . )

1Per quanto migliori la tecnologia, non esiste l’efficienza assoluta di un processore,perche dipende sempre a cosa e collegato e ai programmi che girano sul calcolatore

2.2 Le memorie 21

Infine, un altro parametro che si puo considerare e lo speed-up che corrisponde

all’accorciamento nel tempo di esecuzione fra due processori diversi:

SUA/B =CPUtime(B)

CPUtime(A)(2.4)

dove il processore B e il processore piu lento. Di norma, viene pero rappre-

sentato in maniera percentuale:

SUA/B % =CPUtime(B)

CPUtime(A)− 1· 100 (2.5)

2 Le memorie

I vari componenti tecnologici che possono costituire la memoria di un elabora-

tore elettronico vengono catalogate a seconda della tecnologia (RAM, ROM,

EPROM. . . ). Le RAM inoltre possono essere distinte in statiche (almeno due

transistor) o dinamiche 2(1 transistor). Nelle memorie, a una minore densita

del componente corrisponde una maggiore velocita.

2.1 ROM e EPROM

In realta, oggi le ROM non esistono piu, un tempo venivano costruite su

commissione. . . in realta si parla sempre si EPROM, ovvero di Erasable Pro-

grammable ROM. Si tratta di memorie non volatili, ovvero che non perdono

le istruzioni memorizzate nel caso che la tensioni cada. Hanno quindi le istru-

zioni primarie dell’elaboratore, e quindi stanno sul bus e vengono indirizzate

direttamente dal processore. Le EPROM possono dipendere dalla tempera-

tura.

Il nome di una EPROM viene calcolato come “27 + numero dei Kbits”. Per

esempio, la EPROM 27512 ha 512 Kbits, cioe corrisponde a 64 Kbyte di

memoria.3. Una EPROM si dice dual-line se ha i piedini su due lati.

2A differenza delle memorie statiche, dove l’informazione viene memorizzata in un FF,nelle memorie dinamiche questa e memorizzata in un condensatore (l’1 corrisponde al con-densatore carico, lo 0 al condensatore scarico). A tempi fissi quindi le memorie dinamichevanno rinfrescate, perche il condensatore comunque ha un suo tempo di scarica. . . tuttavia,questo refresh potrebbe provocare un conflitto di accesso con il processore. . . sono quindipiu lente.

3Importante: le EPROM vanno a multipli di 2, mentre le RAM a multipli di 4

22 Architettura dell’hardware di un calcolatore elettronico

Alcuni commenti ai piedini delle EPROM:

• VCC corrisponde all’alimentazione, mentre GND alla massa

• I bit A0. . .A16 sono i bit di indirizzamento. Essendo 17 bit di indiriz-

zamento, si ha che la memoria corrisponde a 217 = 131072 byte ovvero

128 Kbyte.

• I bit D0. . .D7 corrispondono ai bit di dato.

• Il bit CE∗, Chip Enable, e un piedino a logica negativa, ovvero e vero

quando si ha un segnale basso, uno 0. Nel caso sia alto, funziona la

decodifica

• Il bit OE∗, Output Enable, e quello che indica se l’output e attivo. Se

non lo e, le uscite sono in tristate4, e come se non fossero collegate a

niente.

Altre memorie che vengono utilizzate: le memorie flash, che sono EPROM

cancellabili, ma dove deve essere cancellata tutta l’informazione, e le OT-

PROM, One Time Programmable ROM (costano poco, e vengono usate per

la costruzione delle macchine automatiche)

2.2 Spazio d’indirizzamento e parallelismo

Nella figura si puo vedere il confronto fra memoria logica e memoria fisica.

Figura 2.1: Memoria logica e fisica

4Il segnale 3-state non e uno stadio logico ben definito (1 o 0). E un segnale volante,dipende dagli altri componenti a cui e collegato.

2.2.3 Ancora EPROM . . . 23

Il parallelismo indica il massimo numero di informazioni trasferibili in un ciclo

di bus. . . da cio si potrebbe pensare di realizzare la memoria logica come un

bus a 32 bit!

2.3 Ancora EPROM . . .

Nell’esempio presente sulle slides, si considera una memoria da 1 MegaByte.

La memoria e composta da 128 K celle ognuna da un byte. Nel disegno si

puo osservare a cosa corrisponde il dato i-simo, ovvero al bit i-esimo della

cella M-sima. Perche il dato sia disponibile, i bit CE∗ e OE∗ devono essere

abilitati, cioe bassi essendo logica negativa, perche il tristate faccia passare

l’informazione.

Figura 2.2: Circuito per decodificare i dati di una EPROM

Tuttavia, fra l’attivazione dei vari segnali d’ingresso e la disponibilita dei

dati in output passa un certo tempo. Esattamente, si dice tempo d’accesso il

tempo necessario fra l’abilitazione del segnale di CE∗, la stabilizzazione dei

segnali in ingresso e il tempo in cui i dati compaiono sui piedini di output5.

Tale intervallo di tempo dipende dalla decodifica, che e una rete combinato-

ria, ovvero si tratta di circuiti combinatori a piu livelli. . . il tempo dipende

quindi dal numero di questi livelli.

5In realta, come si puo vedere dal disegno, il tempo di attivazione dell’OE∗ e con-siderato. Cio che e trascurabile e invece il tempo del tri-state, rispetto a quello delladecodifica

24 Architettura dell’hardware di un calcolatore elettronico

Come vengono scritti i dati sulle EPROM? Il processore deve usare delle

tecniche diverse usate per le altre memorie, ovvero non puo scrivere in un

normale ciclo di bus. Inoltre, si deve ricordare anche che le EPROM manten-

gono le informazioni senza aver bisogno dell’alimentazione. . . esiste un piedino

detto “program” (PRG∗) che se viene attivato per un periodo considerato

lunghissimo (circa 200-300 micro secondi), se si sforzano dei segnali sui pie-

dini da dove si preleva i dati (ovvero i Di), si puo scrivere all’interno delle

EPROM. Inoltre, deve essere presente al piedino VPP una tensione costante

da 5 volt per poter programmare, una tensione superiore a quella presente

per le operazioni di lettura, che agisce su dei moss presenti nel circuito.6

2.4 Le RAM

Si parla innanzitutto di SRAM, Static Ram. E un circuito bistabile per la

memorizzazione dell’informazione (utilizza un flip-flop per memorizzare, e

quindi necessita per forza di 2 transistor). In generale il tempo d’accesso si

aggira sui 50-60 secondi, nel ciclo di lettura.

A differenza delle EPROM, nelle RAM serve un piedino detto WE∗ (Write

Enable) che deve essere sempre attivo in alternativa al segnale di OE∗: e il

segnale con cui si indica alla RAM che si intende scrivere invece che leggere

dai piedini di dato (I/Oi).7. A differenza delle EPROM, nelle RAM non e

presente il piedino per la programmazione, le letture e le scritture avvengono

nei normali cicli di bus. . .ma si tratta comunque di una memoria volatile.

Nelle RAM, se CE∗ non e attivato, non fa niente.

Un discorso sulle RAM “veloci”: questi circuiti consumano di piu delle solite

RAM, e hanno una densita circuitale inferiore (meno transistor, piu resisten-

ze). Si ha quindi una maggiore temperatura interna e un numero maggiore

di transizioni di correnti.

6Considerando questo piedino e il piedino NC (Non Connesso, non e presente alcuncollegamento interno per quel piedino), in teoria si potrebbe aumentare il valore dellamemoria (19 piedini, overro 219 che corrisponde quindi a 512 K celle. . .ma si tratta dicircuiti diversi)

7La disposizione fisica di questi piedini e come quella delle EPROM, ovvero c’e unacompatibilita meccanica.

2.2.5 Una cella di RAM 25

2.5 Una cella di RAM

Nel disegno si puo osservare una cella di RAM.

Figura 2.3: Una cella di RAM

Il bus dei dati e bidirezionale, mentre il bus degli indirizzi e monodireziona-

le. I segnali WR e RD corrispondono ai segnali WE∗ e OE∗. . . dovrebbero

essere in logica negativa, visto che se capita un segnale volante, ovvero un

segnale che non e chiaro cosa sia, questo viene sempre interpretato come se

fosse un 1 logico. In teoria i segnali volanti non ci dovrebbero essere, ma in

questo modo si e protetti dall’eventualita.

Quello che si puo osservare e che su ogni filo fisico esiste un unico segnale

pilota a ciclo, ma possono essere presenti piu ricevitori.

Come vengono decodificati gli indirizzi? Di norma mediante una serie di AND

in riga e colonna. Per esempio, se si hanno 16 celle, queste si possono indi-

viduare unicamente con 4 diversi fili (24 = 16), e quindi servono 4 AND per

riga e colonna!

Cosa succede se si ha power down? Esiste un circuito che mette a riposo il

circuito se CE∗ non e attivo (in questo modo si ha una minima corrente per

non perdere le informazioni memorizzate!)

26 Architettura dell’hardware di un calcolatore elettronico

3 I circuiti notevoli

In questa sezione verranno elencati e descritti alcuni circuiti notevoli per

l’architettura di un calcolatore elettronico.

3.1 Il 244

Il vero nome di questo componente sarebbe 74xx244, dove xx indica la tec-

nologia con cui e stato realizzato il circuito. Si tratta di un driver 3-state

(restituisce 1, 0 oppure questo valore che non puo essere interpretato esatta-

mente comeun 1 o uno 0) ad 8 bit, strutturato in 2 gruppi da 4 bit, con il

segnale di controllo (EN∗) in comune, o anche noto come buffer.

A cosa serve un buffer? Un buffer puo essere utilizzato:

• Per separare i monti, ovvero eletricamente i fili

• Per rigenerare il segnale (ha un alto fan-out)

Nel disegno si puo vedere lo schema di un 244. Se il chip EN∗ e attivo (cioe

Figura 2.4: Schema di un 244

e 0), il 244 riproduce fedelmente il segnale. . . , tuttavia, il 244 ha anche degli

svantaggi: prima di tutto ritarda il segnale, e poi occupa spazio all’interno

del calcolatore e consuma.

Bisogna stare attenti all’uso dei 244, specialmente non lo si deve mai mettere

in serie: nel caso il 244 a monte fosse disabilitato, il circuito risulterebbe come

spezzato, e logicamente si avrebbe un ingresso volante per il secondo 244, che

2.3.2 Il 245 27

non viene interpretato come un tri-state ma come un “1 sporco”; infatti si

trova in prossimita della soglia per cui si puo riconoscere l’1 logico. Conviene

quindi sempre inserire una resistenza fra i due 244, in modo che faccia da

pull-adder e non sia presente il segnale volante.

3.2 Il 245

Il 245 e un buffer bidirezionale: consiste fondamentalmente in 2 244 montati

in maniera tale da poter trasmettere i dati da una serie di fili a un’altra o

viceversa (appunto, in entrambe le direzioni). Il 245 e anche detto transre-

ceiver, ovveroe un componente che “trasmette e riceve”. Nella figura si puo

vedere lo schema di un transreceiver. In questo caso i segnali di controllo

Figura 2.5: Schema di un 245

sono due (EN∗e DIR) le cui combinazioni definiscono il comportamento del

245:

EN∗ DIR Risultato

1 1 I due bus sono scollegati fisicamente

0 1 Si trasmette da A verso B, A→ B

0 0 Si trasmette da B verso A, B → A

1 0 Combinazione impossibile da verificarsi

Un 245 si puo disporre fra una ram e il bus, in modo tale da fornire un

potenziamento elettrico.

28 Architettura dell’hardware di un calcolatore elettronico

3.3 Il 373

Si tratta di un 8-latch CD. Nella figura si puo osservare uno schema.

Figura 2.6: Schema di un 373

Come funziona? Quando il valore di C e alto (che dipende dal segnale di

clock), si ha che si ripete esattamente l’ingresso sull’uscita. Se C e 0 invece,

nel latch CD viene memorizzato l’ultimo valore presente su D (questi due

segnali pero non devono commutare contemporaneamente, altrimenti non si

riesce a memorizzare.

3.4 Il 374

Figura 2.7: Schema di un 374

Il 374 invece si tratta di un componente elettronico costituito da 8 flip-flop

D, che viene anche detto registri edge-triggered con uscite 3-state: infatti i

registri presenti nei calcolatori elettronici non sono nient’altro che un insieme

2.3.4 Il 374 29

di flip-flop.

A differenza del 373, il 374, avendo appunto dei flip-flop D, campiona l’in-

gresso quando il clock passa da 0 a 1. Inoltre, nella realta, ad ogni flip-flop

c’e un MUX a cui e collegato il segnale di WR∗: se il segnale non e abilitato,

allora il flip-flop mantiene in memoria il dato.

Capitolo 3

Il linguaggio macchina

(Istruction Set Architecture -

ISA)

Il linguaggio macchina1 serve per programmare il processore. Piu precisa-

mente l’ISA e il livello dell’architettura della CPU visibile a chi sviluppa

i compilatori e a chi programma in assembler2. L’ISA e costituita dall’in-

sieme delle istruzioni eseguibili e dal loro formato binario. Mediante queste

istruzioni s’accede alle risorse interne dell’elaboratore:

• Memoria

• Registri

• Variabili di stato (o variabili di sistema o flag).

Tra le risorse interne al calcolatore, solo quelle accessibili attraverso l’ISA

possono essere rese visibili e controllabili dal software.

L’ISA viene principalmente valutato in base all’efficienza del codice generato

dai compilatori (si deve quindi minimizzare il piu possibile il CPUtime.

Cosa deve contenere un’istruzione?

• Il tipo dell’operazione (anche detto codice operativo)

1Si tratta di linguaggi super-set, quando e necessario si aumentano il numero delleistruzioni, mantenendo comunque quelle vecchie, anche la decodifica

2La differenza fra il compilatore e l’assemblatore e: il compilatore genera un linguag-gio indipendente dalla macchina, mentre l’assemblatore genera del codice che dipendestrettamente da come e stata progettata la macchina, come l’ISA

32 Il linguaggio macchina (Istruction Set Architecture - ISA)

• Da dove si prendono gli operandi dell’istruzione (gli indirizzi3 che con-

tengono gli operandi sorgente)

• La codifica del registro R1 (cioe l’operando destinazione)

Tutte queste informazioni sono bit, che devono essere correttamente inter-

pretati. Il problema e che la dimensione dell’istruzione varia da processore

a processore, e in alcuni i campi dipendono dal codice operativo. . . Nella

struttura reale:

• dei bit possono precedere il codice operativo4

• il codice operativo non e detto che sia la prima informazione che arriva

al processore.

Avendo 8 bit di codice operativo, si possono avere fino a 256 operazioni

diverse. Per reperire gli operandi, servono 16 bit per ognuno, e quindi si

necessita per ogni operando di due cicli di bus.

1 Rappresentazione simbolica delle istruzioni

macchina: l’assembler

Il linguaggio assemblativo fa riferimento alla macchina stessa: l’assemblatore

e quella struttura che si preoccupa di convertire le istruzioni in linguaggio

macchina. Per esempio:

add R1, A,B

significa per il processore che deve fare la somma fra gli operando agli indi-

rizzi di memoria A e B, e deve porre il risultato nel registro R1.

Il numero delle traduzioni che la macchina deve eseguire per poter avere istru-

zioni a linguaggio macchina incide notevolmente sull’efficienza della macchina

stessa, n particolare, le traduzioni da linguaggio di alto livello a linguaggio

assemblativo.

3Di norma gli operandi son contenuti in memoria, per questo si passano gli indirizzi4I campi non sono a lunghezza finita: i primi bit indicano appunto all’operatore la

lunghezza dei campi. Il codice operativo usato e quello della Intel

3.2 Classificazione dei linguaggi macchina 33

2 Classificazione dei linguaggi macchina

I linguaggi macchina vengono classificati in base a:

1. Il numero delle operazioni eseguibili

2. Le tecniche d’indirizzamento (cioe le modalita di calcolo dell’indirizzo

degli operandi in memoria)

3. La sede degli operandi all’interno della CPU (ovvero la presenza di

stack, accumulatori e registri. Al crescere del numero di registri, mi-

gliora l’efficienza della macchina)

4. Il numero degli operandi che possono comparire in un’istruzione (da 05

a 3).

5. Gli operandi immediati: un operando immediato e un operando che

risiede direttamente nell’istruzione come, per esempio, una costante. Si

ha quindi che il valore e all’interno del codice, ma cio richiede un codice

operativo diverso . . .

6. La lunghezza delle istruzione (fissa o variabile)

7. Il numero degli indirizzi indirizzabili.

3 Tipologia delle istruzioni

Esistono diversi tipi di istruzioni che possono essere eseguite:

• Aritmetiche e logiche

• Istruzioni di trasferimento dati: LD indica Load, ovvero quando si cari-

ca il dato dalla memoria al registro, ST sta per Store, quando si carica

dal registro alla memoria. Il comando mov e usato da Intel:

mov ax, B (si pone il dato in una cella)

mov C, ax (da una cella si pone il dato in una variabile)

mov al, B (invece che 16, si spostano solo 16 bit)

. . . ce ne sarebbero molte altre . . .

(A destra si ha il sorgente, a sinistra la destinazione: per quanto simili,

a queste due istruzioni vengono generati due codici operativi diversi!!)

5Un’istruzione a 0 indirizzi e un’istruzione riferita ad uno stack (ovvero una push o unapop)

34 Il linguaggio macchina (Istruction Set Architecture - ISA)

• Istruzioni di trasferimento di controllo (come la jump, la call, la ret,

. . . )

• Istruzioni di sistema, per avere una diversa “situazione” (stato) del

processore.

• Istruzioni per operandi in virgola mobile, che richiedono l’uso di registri

e ALU diversi da quelli usati di solito.

3.1 Tecniche di indirizzamento degli operandi in me-

moria

Gli operandi possono essere indirizzati in due diversi modi:

1. L’indirizzamento diretto o per nome o a load time. Si tratta di indirizzi

definiti all’atto del caricamento in memoria.

2. L’indirizzamento indiretto p indiciato. In questo caso invece l’indirizzo

deve essere calcolato all’interno dell’istruzione. Esempio:

mov ax,alpha[SI]

In questo caso l’indirizzo dell’operando e pari alla somma fra la costante

alpha e SI, che e un registro che contiene l’indice del vettoree. Si hanno

quindi cosı degli indirizzi variabili dinamicamente, calcolati a run-time.

Questo puo essere utile per esempio fare la somma di tutti gli elementi

di un vettore.

mov i,0

mov r5,0

CICLO add r5,alfa(i)

add i,1

if(i < 10) then go to CICLO

mov S,r5

6

6CICLO e un label, serve per marcare l’istruzione a cui tornare per poter eseguirecorrettamente il ciclo.

3.3.2 Classificazione in base agli operandi 35

3.2 Classificazione in base agli operandi

In generale gli operandi di un’istruzione sono 2: un registro interno (la desti-

nazione del risultato dell’operazione) e un indirizzo di memoria.

Si possono distinguere 3 diverse ISA in base a come si memorizzano operandi:

1. Stack Architecture: dati e risultati vengono memorizzati nello stack

2. Accumulator Architecture: un operando e l’accumulatore della CPU.

3. GPR Architecture: General Purpose Register, gli operandi sono pre-

senti in registri interni o in memoria.

Un’altra classificazione e mediante il confronto fra il numero degli operandi

e il numero degli indirizzi:

Numero degli operandi Numero degli indirizzi Definizione

3 0 R-R (Register-Register)

2 1 M-R (Memory-Register)

3 3 M-M (Memomry-Memory)

4 Alcune definizioni e istruzioni

Prima di tutto, il nome di alcuni importanti multipli del byte:• Una word e un’informazione memorizzata in 2 byte

• Una double word corrisponde quindi a 4 byte

• Una q-word o quad-word corrisponde infine a 8 byte.

Sia mov ax, B e sia B una word. Allora quello che si “muove” e il byte

all’indirizzo B e quello all’indirizzo B + 1!

Qui di seguito sono riportate alcune istruzioni:

Istruzione Descrizione

<< n Vengono inseriti n zeri a destra

>> n Vengono inseriti n zeri a sinistra

xn...m Vengono considerati solo i bit da m a n, m < n

(x)n L’informazione viene ripetuta n volte

M [x] Contenuto di celle di memoria adiacenti a partire dall’indirizzo x

## Concatenazione

← Trasferimento di un dato, con dimensione pari alla destinazione

←n Trasferimento di un dato a n bit

36 Il linguaggio macchina (Istruction Set Architecture - ISA)

L’ultima istruzione viene usata quando il numero di bit da trasferire non e

noto a meno di specifiche.

Come vengono memorizzati i dati mulitbyte in memoria? Esistono due diversi

modi per memorizzare i multibyte. . . prima di tutto, definiamo come byte w -

alfa il byte costituito dai valori 33 e 77: 33—77. L’estremita indicata dal 33

edetta Big End, mentre quella con 77 e detta Little End. Si hanno quindi i

seguenti due modi per leggere i byte multibyte:

• Little Endian: si legge prima il byte meno importante (ovvero il 77 nel

caso del byte w alfa). E quello usato dalla Intel

• Big Endian: si legge prima il byte piu importante. E il metodo usato

dalla Motorola.

4.1 Allineamento dei byte in memoria

Sia B un blocco di dati di m byte, con m = 2k e sia B memorizzato in memoria

all’indirizzo A. Allora si dice che B e allineato se A e multiplo di m, cioe:

Indirizzo(B) mod m = 0 (Condizione di allineamento)

L’allineamento e importante perche dipende da come e stata costruita fisica-

mente la memoria. Si prenda in esame la figura: Quello che si ha per esempio

Figura 3.1: Memoria logica e memoria fisica

in una disposizione del genere della memoria e che:

• Per leggere i dati abcd, serve un solo ciclo di bus

• Per leggere invece (per esempio) bcde, servono due cicli di bus!

L’allineamento e una caratteristica molto utile: i dati allineati si leggono piu

velocemente (alcune ISA lo richiedono, fra cui il DLX).

Capitolo 4

ISA DLX

Caratteristiche generali dell’ambiente di esecuzione nelle architetture R-R a

32 bit DLX1:

• 4 GByte di memoria

• 32 registri da 32 bit general purpose (R0 . . . R31), con R0 = 0. Il program

counter e un ulteriore registro.

• 32 registri da 32 bit per il floating point

• Le istruzioni sono allineate a indirizzi multipli di 4 (Essendo a 32 bit,

cioe 4 byte, la prossima istruzione si trova all’istruzione PC + 4)

• Lo stack e gestito dal software

• Nelle istruzioni di tipo “JL” l’indirizzo di ritorno e salvato in R31

• Non esistono flag, le condizioni sono espresse da istruzioni (set condi-

tion)

• Registro flag per i floating point

• Un solo metodo d’indirizzamento

1 Formati delle istruzioni nelle architetture

R-R (DLX)

La lunghezza delle istruzioni e 32 bit (232 = 4GByte), e sono suddivisibili in

tre diverse tipologie:

1Non si considerato i registri a virgola mobile

38 ISA DLX

• Istruzioni di tipo R:

Codice operativo︸ ︷︷ ︸6bit

RS1︸︷︷︸5bit

RS2︸︷︷︸5bit

Rdes︸︷︷︸5bit

Estensione al codice operativo︸ ︷︷ ︸11bit

Corrispondono alle comuni istruzioni logiche del tipo:

Rdes ← RS1 operator RS2

• Istruzioni di tipo I :

Codice operativo︸ ︷︷ ︸6bit

RS1︸︷︷︸5bit

RS2︸︷︷︸5bit

Operando immediato︸ ︷︷ ︸16bit

Esempi sono le load, store, alu con operando immediato, JR, . . .

• Istruzioni di tipo J :

Codice operativo︸ ︷︷ ︸6bit

Offset di 26 bit︸ ︷︷ ︸26bit

Si tratta di istruzioni per il trasferimento di controllo diretto e in-

condizionato, come J (Jump: Salto incondizionato) e JL (Jump and

Link: chiamata a procedura, salva l’indirizzo di ritorno in R31)2.L’offset

indica la “distanza” con cui si deve saltare.

Esistono quindi diversi tipi di istruzioni3:

• Logiche: AND, ANDI4, OR, ORI, XOR, XORI

• Aritmetiche: ADD, ADDI, SUB, SUBI, MULT, DIV

• Traslazione logica: SLL, SLLI, SRL, SRLI, SRA, SRAI

• Istruzioni di set: Scn o ScnI con cn = EQ, NE, LT, GT, LE, GE

• . . .

Nell’ISA DLX e importante ricordare che le word sono di 32 bit.

2Esiste anche il salto condizionato, ovvero il branch3Sulle slide si trova l’elenco completo4Si tratta di operazioni con operando immediato

4.1.1 IA 16 39

1.1 IA 16

E un’altra ISA molto nota. . . Le caratteristiche salienti sono:

• Registri a 16 bit

• Esistono 4 registri “segmento” (SS, CS, DS, ES)

• Il registro Instruction Point e circa come il Program Counter, ed e

legato al registro CS

• Lo spazio d’indirizzamento e di 1 MegaByte (I registri sono a 16 bit,

non a 20. Servono quindi due indirizzi da 16 per ottenere un registro a

20 bit!)

2 ISA DLX: Implementazione mediante la strut-

tura sequenziale

Un calcolatore (una CPU) e costituito da un’unita di controllo5 e da un data

path6. Come si puo vedere nella figura sulle slide, le due strutture comuni-

cano fra di loro. Entrambe ricevono il segnale di clock per lavorare, e inoltre

all’U.d.C sono associati altri 3 segnali molto importanti:

• Reset: e un segnale presente in tutte le CPU, serve per far iniziare la

macchina in uno stato noto, forzato

• Ready: e il segnale di “sono pronto”, usato per esempio assieme al

segnale di interrupt per gestire l’attivita della CPU.

• Interrupt: segnale usato per interrompere l’attivita della CPU a favore

delle periferiche

Ogni operazione appartenente all’instruction set e eseguita mediante una suc-

cessione di operazioni elementari, dette micro-operazioni. Una micro-operazione

e eseguita all’interno del data path in un ciclo di clock (esempi: trasferimento

di un dato fra due registri, elaborazioni ALU, . . . ). Il controller e una RSS

(Rete Sequenziale Sincrona) che ad ogni ciclo invia un ben preciso insieme

di segnali di controllo al data path al fine di specificare l’esecuzione di una

5Struttura che istruisce i registri e le trasformazioni. Per esempio genera gli OE∗ e ilclock enable per i registri, i bit di controllo dell’ALU. . .

6E l’insieme dei registri piu i fili di interconnessione e le unita di trasformazione, comeper esempio la CPU

40 ISA DLX

determinata micro-operazione.

Nel primo esempio di struttura del DLX sequenziale, le caratteristiche prin-

cipali sono:• Presenza di due bus per i dati di di ingresso, S1 e S2 (sono dei MUX,

fatti con tri-state, e sono collegati con l’ALU).

• I registri (esclusi quello che vanno da R0 a R31) sono ignoti al program-

matore.

• Il Register File e un insieme ordinato di file, ovvero di registri noti al

programma. I registri A e B sono due registri intermedi fra il register

file e S1 e S2, mentre fra il bus di destinazione e il Register File esiste

un altro registro di passaggio C. La presenza dei registri A, B e C e

dovuta a motivi elettronici e di efficienza.

• Ad ogni ciclo di bus e presente un’unica sorgente.

• L’Instruction Register e una struttura presente all’interno della Control

Unit che contiene l’istruzione7 da eseguire. E collegato solo ai bus.

• Il Program Counter e sempre un registro a 32 bit, ma di cui sono

significativi solo i primi 30 (gli ultimi due sono sempre a 0). Questo

perche le istruzioni sono allineate a multipli di 4, e quindi PC = PC +

4.

• MDR (Memory Data Register) e un registro di transito dei dati scam-

biati con la memoria (o IN o OUT), non di indirizzi. (Si tratta di una

scelta architetturale)

• MAR (Memory Address Register) serve per indirizzare la memoria:

si deposita l’indirizzo della memoria dove si vuole legggere/scrivere il

dato.

• TEMP e un registro per il deposito temporaneo dei dati, contiene il

risultato intermedio ottenuto da una ALU.Insieme al MAR e l’unico

registro temporaneo presente.

• IAR e l’Interrupt Address Register

• IEN e l’Interrupt Enable Flag

• La lettura dell’istruzione e l’unica istruzione che va in parallelo al-

la somma del PC + 4 nella ALU. Tutte le altre operazioni e micro-

operazioni sono sequenziali

7Osservazione importante: nelle istruzioni sono presenti i dati, anche quelli immediati

4.2.1 Calcolo del periodo di clock 41

2.1 Calcolo del periodo di clock

Il periodo di clock si calcola sempre nel caso peggiore. . . Si definiscono le

seguenti misure:

1. TC(max): e il massimo ritardo fra il clock e i segnali di controllo

dell’U.d.C.

2. TOE(max): e il massimo ritardo tra il segnale di Output Enable dei

3-state e l’istante in cui i dati sono disponibili sul bus

3. TALU(max): e il massimo ritardo dell’ALU

4. TSET−UP (min) e il minimo ritardo per cui i dati sono disponibili sul

registro.

Si ha quindi che il periodo di clock deve essere:

TCLOCK > TC(max) + TOE(max) + TALU(max) + TSET−UP (min) (4.1)

Da cio quindi si deduce che e meglio avere un numero di operazioni maggio-

re, ma il piu corto possibile (in questo modo si progetta con una migliore

efficienza). Se il PC fosse un registro piu un contatore per determinare l’indi-

rizzo dell’istruzione successiva, non si dovrebbe aspettare che l’ALU si liberi

per calcolare.

3 Il diagramma degli stati del controller

Nello schema e rappresentato la parte del diagramma a stati comune a tutte

le operazioni:

MAR← PC (Fetch)

IR←M [MAR] (Ripetuto fino a quando non e ready)

PC ← PC + 4

A← RS1 (Decode)

B ← RS2

In seguito le istruzioni vanno all’ALU, al data transfer. . .

42 ISA DLX

Nel grafico manca che alla seconda istruzione e collegato il segnare di Ready

come loop. . . Infatti il segnale di Ready e collefato in maniera combinato-

ria con l’Instruction Register, in modo da ritardarlo finche non si e pronti

per proseguire con le istruzioni successive. RS1 e RS2 sono due registri che

appartengono al Register File, mentre tutte e tre le ultime istruzioni fanno

parte della fase di Decode.

Il primo e il secondo stato si potrebbero accorpare se si ponesse un MUX

per scegliere fra MAR e DES come sorgente delle informazioni da scrivere in

memoria. . . Non e sempre meglio accorpare (Minore e il numero degli stadi,

maggiore e la complessita circuitale: cio che non si puo fare nel tempo si fa

nello spazio. . . ). In teoria si potrebbero unire la lettura della memoria con

l’incremento del PC, ma non e il compromesso migliore. Se il PC fosse anche

un contatore, in teoria si potrebbe accorpare tutto in unico stadio.

Consideriamo come esempio l’istruzione per caricare un solo byte (LB). . . Nell’IR

l’istruzione si trova codificata in questo modo (supponendo LB R5, 10(R2)):

.

LB. RS1 ovveroR2 R5 10.

10 corrisponde all’offset, la parte che deve essere sommata alle altre infor-

mazioni per poter ottenere l’indirizzo, RS1 contiene l’indicazione del registro

di partenza (che corrisponde anche al registro A!), mentre in RS2 e contenu-

to il registro di destinazione. Tradotto secondo il diagramma degli stati del

controller diventa

MAR← A + (IR15)16##IR15...0 (Bit del segno ripetuto per 16 volte)

MDR←M [MAR] (Ripetuto fino a quando non e ready)

C ← (MDR7)24##MDR7...0

RD ← C

E un’operazione di tipo I come si puo vedere, e si deve anche notare che il

segnale di ready, nel caso della LB, e presente due volte quindi.Resta da definire il problema del segno, che e presente sia nell’indirizzo (per

poter fare la somma a 32 bit) che nel dato. Per poter decidere se e un valore

4.3.1 Altri esempi e osservazioni 43

valido o meno, il bit del segno deve passare attraverso un 3-state, comandato

dal segnale ENable, che e oppurtunatamente fornito dall’unita di controllo.8.

3.1 Altri esempi e osservazioni

Il comando STORE funziona solo per dati di tipo Word. Se si vuole quindi

trasferire informazioni di dimensioni pari a half-word o byte, bisogna prima

completare l’intera parola.

1. In un registro di memorizza la word in AND con una word di tutti

1 tranne gli 8 bit meno significativi, che son quindi tutti a 0. Questo

registro Rx risulta quindi avere un dato nei bit piu significativi e gli 8

bit meno significativi a 0.

2. In un altro registro Ry si memorizza la word in AND opposta, ovvero

dove gli 8 bit meno significativi son tutti 1 e gli altri son a 0.

3. Infine, facendo l’OR fra i due registri, si ottiene un registro con l’ultimo

byte che corrisponde al byte che si voleva trasferire.

Un ulteriore osservazione: in LB, LH, LBU, LHU, RS2 non serve, non si mette

in quel registro il dato. Si ha che RD = RS2 solo se questo e un operando

immediato.Se in TEMP si deposita o il valore del registro B o l’offset nel caso di operazio-

ni immediate con segno esteso, gli operandi dell’ALU diventano solo il regi-

stro A e il registro TEMP (per esempio, nel caso di somme, sottrazioni. . . fra

registri)Come possiamo definire le operazioni di salto?• Nel caso di salto condizionato, con 1 si salta, 0 no. Il bit meno signifi-

cativo puo quindi essere utilizzato a questo scopo, e viene determinato

dalla condizione

• Nel caso di salto non condizionato, ci son due casistiche: o e senza

ritorno o e con ritorno (e quindi bisogna salvare l’indirizzo di ritorno nel

registro R31!) (detto anche salto ad una subroutine). Questo e l’unico

modo in cui si puo fare, perchee non e presente alcuna struttura che

possa fare da stack. Nel caso del JAL quindi (Jump And Link) si ha

che

PC ← PC + (IR25)26##IR25...0

8Osservazione: per ogni registro son presenti 64 3-state, dal quale segue che son 32 perogni BUS

44 ISA DLX

In questo caso, l’offset e pari a 26 bit, ma se si vuole saltare (per

esempio) solo di 10 “unita”, basta che l’offset sia pari a 6. Infatti, al PC

e gia stato aggiunto 4 come valore, fatto direttamente dal compilatore!

Nel caso del BRANCH, invece, si ha un offset pari a 16 bit.

4 I passi dell’esecuzione delle istruzioni

L’esecuzione delle istruzioni puo essere scomposta in 5 passi:

1. FETCH: Si legge l’istruzione, e viene posta nell’IR

2. DECODE: L’istruzione viene decodificata e vengono prelevati gli ope-

randi sorgente dal register file

3. EXECUTE: Elaborazione aritmetica o logica mediante l’ALU

4. MEMORY: Accesso alla memoria e, nel caso di BRANCH, aggiorna-

mento del PC (operazione che e detta “Branch completition”)

5. WRITE-BACK: Scrittura dei risultati nel register file.

Se si esegue un’analisi delle istruzioni piu accurata, si puo definire un’archi-

tettura nuova, pipelined, che risulta anche essere piu efficiente:

• FETCH

MAR← PC

IR←M [MAR]

• DECODE

A← RS1

B ← RS2

PC ← PC + 4

• EXECUTE

– Memoria:

MAR← A + IR0...15##(IR15)16

MDR← B

9

9RD corrisponde a RS2 solo nelle store!

4.4 I passi dell’esecuzione delle istruzioni 45

– ALU:

C ← A op B (oppure IR0...15##(IR15)16)

– Branch:

TEMP ← PC + IR0...15##(IR15)16

COND ← A op 0

• MEMORY

– Memoria:

MDR←M [MAR] (LOAD)

M [MAR]←MDR (STORE)

– Branch:

IF (cond)⇒ PC ← TEMP

• WRITE-BACK

C ←MDR (Se e una load)

RD ← C

Capitolo 5

ISA Pipelined

Mediante il principio del pipelining si puo rendere piu veloce la CPU.Supponiamo di avere un sistema S che deve eseguire N volte un’attivita A (e

come una catena di montaggio).Definiamo quindi le seguenti proprieta:• Si dice latency il tempo che intercorre fra l’inizio e il completamento

dell’attivita A (indicato da TA)

• Si dice throughput la frequenza con cui vengono completate le attivita

Cosa vuol dire che il sistema non e piu sequenziale? Significa che si vuole

iniziare un’istruzione ad ogni ciclo di clock, nonostante la precedente non sia

ancora finita.Supponiamo che l’attivita A sa costituita da 4 sottoattivita pi, da eseguire

in sequenza, di durata uguale.• Nel caso sequenziale, non potendo suddividere l’attivita A, si ha che

il tempo di ogni attivita TPi =TA

4corrisponde anche al tempo di un

pipeline cycle, TP . Lo throughput e quindi pari a1

TA• Ma se questo sistema si rapresentasse mediante un sistema pipeline, si

avrebbe sı che TA = 4 · TP , ma il throughput sarebbe pari a1

TP

=4

TA

,

4 volte superiore!!

Ecco quindi il grande vantaggio di una pipeline: lo throughput e molto

maggiore a quello corrispondente a un sistema sequenziale.

1 CPU DLX Pipelined

I 5 stadi definiti nel capitolo precedente (InstructionFetch, InstructionDeco-

de, Execute, MEMory, WriteBack) corrispondono a dei circuiti combinatori,

48 ISA Pipelined

separati da registri flip-flop di tipo D.

Ad ogni ciclo di clock, i dati campionati nei registri vengono campionati per

i blocchi combinatori a valle, in modo da produrre i valori binari corretti che

saranno campionati dai registri D a valle di ogni circuito combinatorio solo

quando si ha un fronte di salita del clock (da 0 a 1).

Esempio: Al fronte di salita CLK1, i registri presenti fra IF e ID (detti IF/ID)

campionano i dati ricevuti da IF. Nell’intervallo che separa il CLK1 dal

CLK2, i dati memorizzati nei registri vengono utilizzati dal blocco combi-

natorio ID. Al fronte di salita CLK2, i registri ID/EX campionano i dati

ricevuti da ID, e contemporaneamente IF/ID campiona i nuovi dati ricevuti

da IF!

Si tratta di uno “shift-register con trasformazione”, i dati continua ad es-

sere memorizzato e passato all’unita successiva (idealmente sulla destra). E

un’architettura totalmente diversa, in cui ogni stadio opera in maniera indi-

pendente. Idealmente si potrebbe arrivare ad avere un CPI pari ad 1.1. Si ha

quindi che

Tclock = Td + Tp + Tsu (5.1)

Ovvero il clock cycle dipende dal ritardo del registro a monte (Td), dal ritardo

sullo stadio piu lento (Tp) e dal tempo di set-up del registro a valle.

Da osservare che il dato viene campionato nel registro di destinazione alla

fine dello stadio di WB, ma cio potrebbe causare problemi, visto che sia lo

stato di WB e MEM interagiscono entrambi con il registro MDR e son con-

secutivi. Per evitare questi problemi, in realta si usano due differenti MDR

(MDR e SMDR), in questo modo si puo gestire una load subito seguita subito

da una store. Si ha quindi che gli stadi di WB e MEM possono essere benis-

simo sovrapposti! Si possono sovrapporre due dati in attesa di essere scritti,

uno in memoria e uno sul register file.

1In realta, in caso di reti combinatorie velocissime, si devono inserire dei ritardi,aumentando quindi il tempo di hold dei flip-flop dei registri

5.1.1 L’architettura Harvard 49

Quando va incrementato il PC? Al termine di ogni stadio di Fetch, e separato

dall’ALU dello stato di EX!

1.1 L’architettura Harvard

In ogni ciclo di clock deve essere possibile eseguire due accessi alla memo-

ria (negli stadi di IF e MEM), uno per accedere all’Instruction Memory, e

l’altro al Data Memory. La soluzione a questo problema e data dall’utilizzo

dell’architettura Harvard : si utilizzano due memorie separate, per istruzioni

e dati, con indirizzamento e bus diversi.2

1.2 Altre osservazioni

Il controller nel DLX pipelined e “distribuito” fra gli stadi della pipeline.

Cosa succede se per esempio si deve fare un salto? Il PC e un dato che deve

essere portato da IF a EX! In EX son presenti due MUX a 32 bit per scegliere

i dati da essere elaborati dall’ALU. In un MUX si puo scegliere fra PC e dato

del registro A e nell’altro fra il dato del registro B e un dato immediato con

segno espanso. In questo modo le possibilita possibili sono:

• Calcolo del nuovo PC in caso di salto, usando l’offset necessario

• Si puo eseguire il salto ad un registro specifico

• Eseguire un’operazione fra il dato contenuto nel registro A e un dato

immediato

• Eseguire un’operazione fra i dati contenuti nei due registri A e B

Ma chi specifica all’ALU quale l’operazione da eseguire, e seleziona i dati

corretti sui due MUX? L’istruzione che viene portata avanti da uno stato

all’altro, ovvero quella contenuta nei registri ID/EX.

Nello stato di (data)MEM si portano invece gli indirizzi calcolati (per leggere

i dati) e se necessario, il dato da scrivere. All’uscita si ha il dato letto.

Solo quando si raggiunge lo stadio di Write-Back si puo usare il register file

(altrimenti si potrebbe avere delle situazioni di conflitto). Solo nello stadio

di WB si puo scrivere.

2Nei Pentium cio avviene nel processore con la presenza di 2 memorie cache

50 ISA Pipelined

Nel caso ci sia un JALR, nel branch target register va inserito il contenuto

del registro di ritorno.

2 Alee nelle pipeline

Si verifica una situazione di alea o “hazard” (malfunzionamenti intrinse-

chi) quando, in un ciclo di clock, un’istruzione presente in uno stadio della

pipeline, non puo essere eseguita in quel clock. Le alee si suddividono in:

• Alee strutturali : una risorsa e condivisa fra due stadi della pipeline.

Le istruzioni correntemente presenti in quegli stadi non possono essere

eseguite simultaneamente.

• Alee di dato: Sono dovute a dipendenze fra le istruzioni (esempio: un’i-

struzione legge un registro scritto dall’istruzione precedente. Se il dato

non e gia stato scritto, si ha una situazioen d’errore, detta Read after

Write)

• Alee di controllo: Le istruzioni che seguono un branch dipendono dal

risultato appunto del branch (taken/not taken)

Si dice stallo della pipeline quando un’istruzione viene bloccata perche non

puo essere eseguita. Come si puo fare per evitare le alee di dato (un possibile

stallo quindi)? Si utilizza una tecnica detta forwarding. Per poter far cio,

invece che utilizzare un normale ciclo di clock, si utilizza uno split-cycle: al

fronte positivo del clock si scrive sul registro, al fronte negativo si legge dal

registro.3.

Tuttavia, non tutte le alee di dato sono eliminabili con il forwarding (anche

un’operazione di LOAD puo dare atto ad un’alea di dato), deve essere stal-

lata la pipeline, per un clock.

Si parla di delayed load quando l’alea e gestita dal compilatore via software.

Quello che il compilatore fa e cercare di riempire tutti i delay-slot con un’i-

struzione “utile”, e nel caso peggiore inserisce una NOP, No OPeration. Ecco

3Suddividere il lavoro nei due fronti del clock non e detto che sia sempre conveniente.In un semiperiodo di clock si devono fare le stesse operazioni che prima si facevano in unperiodo intero

5.2.1 Alee di controllo 51

un’esempio:

LW R1, 32(R6)

LW R3, 10(R1)

ADD R5, R1, R3

LW R6, 20(R7)

LW R8, 40(R9)

Per evitare lo stallo, viene modificato l’ordine di queste istruzioni, anticipan-

do la penultima LW prima della ADD. In questo modo, non vi e stallo nella

pipeline.

In ogni caso, una NOP deve avere un suo corrispettivo hardware. . . un esem-

pio possibile e

ADD R3, R0, R3

2.1 Alee di controllo

Qual’e il problema? Non si vuole che le istruzioni saltate per via di un branch

non vengano eseguite. Cio si potrebbe ottenere in due diversi modi:

1. Si stalla la pipeline per 3 clock, in questo modo non si scrive sul register

file o in memoria, e non si e caricato il nuovo PC

2. Altrimenti, si eseguono le istruzioni fino a quando non si ha il risultato

del branch:

• Taken: le operazioni diventano NOP• Not Taken: si prosegue (al momento del check, le istruzioni non

erano ancora giunte allo stadio di MEM o WB!)

In questo caso si fanno sı 3 stalli, ma se e solo se il branch e taken

Similmente alla LOAD, anche il branch puo essere gestito via software dal

compilatore (si parla di delayed branch). Quello che si fa e anticipare le istru-

zioni che verrebbero eseguite sia che il branch sia taken che non (si hanno 3

delay-slot da riempire sicuramente)

52 ISA Pipelined

Come si potrebbe ridurre il numero degli stalli? Si rende l’ALU indipendente

dal branch (ma cio richiede un full-adder inevitabilmente piu complesso).

Infatti, nello stato di ID son presenti tutte le informazioni necessarie per

comprendere se si deve saltare o meno con la nuova ALU. In questo modo si

ha sı uno solo clock di stallo, ma a scapito di una rete logica piu complessa

(cio che non si puo fare nel tempo si fa nello spazio).4

2.2 Branch Target Buffer

Si utilizza il concetto di memoria “associativa”. Si utilizza una struttura ad

array, in cui vengono memorizzati in memoria gli indirizzi dei branch e ad esse

son associati l’indirizzo a cui si vorrebbe saltare (il predicted PC) e un bit

che indica se il branch e taken o not taken. Il PC viene quindi utilizzato per

vedere se all’indirizzo correntemente usato e associato un branch in questo

buffer. Si hanno due possibili casi:

• Hit: Si esegue il fetch all’indirizzo predetto

• Missi: Si esegue il fetch a PC + 4.

Se quindi si riconosce l’indirizzo di un branch, si esegue il salto, visto che si

ha gia a disposizione l’indirizzo di destinazione. Esistono comunque il proble-

ma di capire se e una predizione corretta o meno (son importantissime per i

bechmark). Infatti, mentre nel caso di una predizione corretta, non si hanno

cicli di stallo, nel caso di predizione errata, si hanno comunque 3 cicli di stallo!

Quanti bit devono essere usati per rappresentare l’informazione taken/untaken?

Normalmente due bit, tenere memorizzata solo l’ultima informazione in un

unico bit puo causare errori!

4Si potrebbe anche usare l’adder del PC con una serie di MUX per scegliere se sommare4 o l’offset e se usare PC o PC1

Capitolo 6

Decodifica indirizzi e mapping

In una qualunque architettura che venga realizzata, si ha necessariamente

bisogno di uno strumento:

• per poter relazionare gli indirizzi della memoria logica a quella fisica

(l’indirizzo a quale banco di RAM appartiene?)

• per poter indicare al processore come raggiungere una determinata

periferica

Il chip select e appunto quello strumento fisico che serve per capire quale

componente fisico si sta indirizzando. Si tratta quindi di realizzare una deco-

difica1 di determinati segnali per poter individuare, in maniera univoca, cosa

si sta indirizzando.

L’indirizzo emesso dal processore deve contenere due informazioni:

• Una parte individua il dispositivo fisico, in maniera univoca

• Un’altra parte individua cosa si vuole indirizzare del dispositivo (nel

caso di memorie: l’indirizzo indica sia il banco di memoria che la cella)

Per poter realizzare tutto cio, si utilizzano delle PAL, Programmable Array

Logic.

E importante notare che lo spazio di indirizzamento delle memorie deve esse-

re diverso dallo spazio di indirizzamento dei dispositivi di I/O2. In generale,

lo spazio d’indirizzamento per i dispositivi di I/O e pari a 64 Kbyte, e quindi

1Una decodifica e una funzione combinatoria: da n segnali di input, si ottengono msegnali di output = 2n

2Il DLX in realta usa il sistema memory mapped

54 Decodifica indirizzi e mapping

son necessari 16 bit per indirizzamento. E quindi necessario un bit che indichi

se e un indirizzo di memoria (1) o di I/O (0).

D’ora in poi si faranno alcune supposizioni:

• Tutti i dispositivi son allocati in maniera allineata

• Si usano dispositivi ad 8 bit e bus ad 8 bit

Nel caso di dispositivi tutti allineati, la decodifica risulta essere alquanto

semplice: e sempre un prodotto logico (altrimenti, diventa la somma di pro-

dotti logici . . . )

Esempio: supponiamo di voler avere una memoria logica da 32 Kbyte (215),

utilizzando come componenti fisici dispositivi da 8 Kbyte (213). Da cio risulta

che l’indirizzo di memoria logica risulta essere lungo 15 bit, ma i 13 bit

meno significativi indicano la cella della memoria a cui si vuole accedere.

15-13 = 2 bit sono utilizzati per indicizzare il crretto dispositivo: infatti,

per avere 32 Kbyte di memoria servono 4 dispositivi da 8 kbyte, e quindi

tutte le configurazioni dei due bit piu significativi sono usate per indicare il

dispositivo corretto3:

• CS1 = AD14 · AD13

• CS2 = AD14 · AD13

• CS3 = AD14 · AD13

• CS4 = AD14 · AD13

Si puo anche analizzare il problema inverso. Supponiamo di avere un’EPROM

da 2 MByte, son sufficienti 21 bit (221 = 21 MByte). Nel caso dell’8088,

quante memorie da 2 MByte ci stanno? Essendo 32 i bit d’indirizzamento

dell’8088, si hanno a disposizione 32 − 21 = 11 bit per poter indirizzare i

singoli dispositivi. Si possono quindi avere fino a 211 diversi dispositivi.

Si possono verificare casi in cui si deve determinare i chip select di disposi-

tivi di dimensione diversa, ma comunque allineati. Supponiamo per esempio

di aver gia inserito 3 memorie da 2 MByte, come si puo configurare il CS

della quarta memoria da 1 MByte? Essendo da 1 MByte, richiede solo 20

bit, e quindi servono 12 bit di indirizzamento. . . il CS risulta quindi essere

3Da ricordare che i Chip Select sono in forma negata

6.1 Decodifica parziale 55

AD31 · AD30 . . . AD22 · AD21 · AD20

Nel caso di dispositivi non allineati, la codifica e piu complessa. Si imma-

gini per esempio di voler codificare una memoria fisica da 8 Kbyte in una

memoria logica da 32 Kbyte, ma non allineata (occupando quindi meta di

un’allocazione e meta di un’altra): il CS deve appunto indicare che occupa

due diverse zone, utilizzando oltre a due prodotti logici, una somma logica!

CS = AD14 · AD13 · AD12 + AD14 · AD13 · AD12

In questo modo infatti si indicano proprio le due meta coinvolte nella deco-

difica!

1 Decodifica parziale

In generale, la disposizione della RAM e della EPROM fisicamente e tale da

poter permettere quella che e detta decodifica parziale.

Si immagini che 2 Kbyte di RAM siano allocati nella parte bassa della me-

moria logica, mentre 4 Kbyte di EPROM siano allocati nella parte alta della

memoria logica (“l’altra estremita”)4, in uno spazio totale di 32 Kbyte. La

decodifica quindi risulterebbe essere:

CSEPROM = AD14 · AD13 · AD12 (bastano 12 bit)

CSRAM = AD14 · AD13 · AD12 · AD11 (Bastano 11 bit)

Ma in questo caso si potrebbe pensare di ridurre la complessita della de-

codifica, proprio perche le due memorie appartengono a meta diverse della

memoria logica (alta/bassa). Per esempio, si potrebbe utilizzare proprio AD14

per distinguere fra le due memorie.

L’idea e proprio quella di utilizzare il minor numero possibile di bit per

non creare ambiguita con altre memorie. Da notare che la visibilita di un

dispositivo aumenta di 2m, con m il numero di bit ora ininfluenti per la

decodifica. All’aumento dei dispositivi, infatti, si cerca di trovare un bit tale

da discriminare le memorie di nuovo (una sorta di metodo dicotomico!)

4In generale, la RAM e appunto allocata in basso, e la EPROM in alto

Capitolo 7

L’8088

L’8088 e il processore capostipite della famiglia Intel: certe caratteristiche

tecnologiche si possono ancora notare nei processori moderni, tanto che lo

studio di questo processore aiutera molto a studiare processori come l’8086,

il Pentium I, e cosı via. . .

1 Una prima descrizione del processore: i se-

gnali

Qual’e l’attivita che un processore deve svolgere? Un processore non deve

fare nient’altro che trasferire dati dal “mondo interno” al “mondo esterno”.

Questa e l’unica vera attivita, ma allo stesso tempo puo essere alquanto

complicata (cosa e il mondo esterno? E se giungono piu segnali dal mondo

esterno?). A questo proposito due segnali importanti da notare subito sono1:

• INT: Questo e un segnale che proviene dall’esterno, e indica la presenza

di un’interruzione, una forzatura che viene inviata al processore. Quan-

do il processore riceve questo genere di segnale, deve interrompere le

attivita normali che stava eseguendo per poter far partire la sub-routine

associata a quella determinata interruzione.

• HOLD: questo e un segnale che permette la disposizione sul BUS di

piu dispositivi master, e indica appunto al processore se e presente o

meno un dispositivo che sta facendo richiesta di divenire master

L’8088 ha un impaccamento a 40 piedini: la mancanza di spazio ha costret-

to i progettisti a dover mettere i risultati delle elaborazioni del processore

1Da notare: la disposizione fisica dei segnali e diversa da quella logica a volte presentata

58 L’8088

sullo stesso bus dei dati (per questo i segnali si muovono da e verso il pro-

cessore. . . Inoltre, si dice che il bus dell’8088 e demultiplexato). Si ha quindi

tendenzialmente un ritardo, e serve un apposito tempo per poter “cattu-

rare gli indirizzi”, che altrimenti verrebbero cancellati! I due bus son cosı

caratterizzati:

• Bus dati: e a 8 bit (AD0...7), quindi il massimo dato possibile da tra-

sferire in un ciclo di bus e un byte. (ma ha comunque a disposizione

registri a 16 bit, che si possono trasferire direttamente.)

• Bus indirizzi: e a 20 bit (A8...19), quindi si ha che lo spazio d’indirizza-

mento dell’8088 e pari a 1 Mega (220)

Il processore ha in realta due modi di funzionamento, minimum e maximum

mode, determinato dal bit MIN/MAX*2 Analizziamo quindi alcuni dei segnali

presenti nell’8088:

• Son presenti due masse (GND). Questo e dovuto al fatto che il rumore

delle masse e molto piu pericoloso del rumore sull’alimentazione (Vcc).3

• ALE: Questo segnale sta per Address Latch Enable, ed e un particolare

clock con cui il processore indica che sta generando gli indirizzi, e che

son disponibili quindi sull’apposito bus.

• RD*: questo e un segnale con cui il processore indica che sta leggendo

i dati. Esiste ovviamente anche il segnale WR* per indicare che sta

scrivendo.

• DT/R*: questo segnale indica

– se e 1: si sta trasferendo dal processore al mondo esterno– se e 0: si sta trasferendo dal mondo esterno al processore

• Il segnale di READY

– deve essere a 1 perche il processore possa essere correntemente

eseguito il ciclo di bus– invece se e a 0, il processore si ferma.

• I segnali NMI, INT, INTA* verranno analizzati nel capitolo delle in-

terruzioni, sono i segnali preposti appunto per la gestione delle inter-

ruzioni.

2Si suppone che l’8088 lavorera sempre in minimum mode. In questo caso quindi, nelcaso di segnali che possono avere comportamenti diversi a seconda del modo, indicati conuna struttura come A/B, il segnale generato e sempre quello a sinistra (A in questo caso)

3L’8088 lavorava a 5 volt, ma oggi si usano potenziali inferiori

7.2 Registri Interni 59

2 Registri Interni

L’8088 e un processore segmentato. Questo significa che il processore, per

la costruzione dell’indirizzo, per quanto riguarda gli accessi alla memoria, fa

riferimento a 4 registri di segmento, ognuno a 16 bit:

• Code Segment

• Data Segment

• Stack Segment 4

• Extra Segment

Oltre ai registri di segmento, ci sono anche degli altri registri detti accumu-

latori: si tratta di 8 registri a 8 bit, ma sono anche indirizzabili a due a due,

come se fossero 4 registri a 16 bit.

Il segmento e un “concetto filosofico” (quando si pensa al programma, lo si

e gia suddiviso in subroutines, librerie, ecc. . . ). I segmenti sono degli insiemi

di dati che possono essere globalmente protetti da un sistema di protezione.

I segmenti son un insieme di informazioni coerenti fra di loro

Altri registri che son presenti son i registri indice (SI, DI), che vengono auto-

nomamente incrementati (servono per esempio per poter scorrere un vettore),

e registri di flag che son pure indirizzabili (son dei flip-flop, settabili indivi-

dualmente, ma raggruppati in registri)5.

Esistono quindi dei puntatori, lo Stack Pointer e l’Instruction Pointer (questo

e esattamente equivalente al PC). Si ha quindi che l’indirizzo corrente e dato

dall’IP e dal CS. Esiste anche un altro puntatore, il Base Pointer, che e un

altro registro con cui si potrebbe calcolare in maniera alternativa il registro.

Si puo quindi ottenere lo stesso indirizzo fisico come somma fra due diverse

coppie di addendi, i segmenti si possono sovraporre. L’indirizzo e quindi dato

dalla somma fra la base del segmento e l’offset del segmento.

4Essendo lo stack sempre a 16 bit, son necessari due cicli di bus nell’8088 per aggiungereun dato.

5Esempio: Il registro IF abilita o meno il processore per le interruzioni (cioe, il proces-sore potrebbe anche essere insensibile alle interruzioni). Questi set/reset son possibili siavia software, sia grazie all’esecuzione di particolari istruzioni

60 L’8088

Osservazione: I segmenti son allineati a 16 bit, ma gli indirizzi son a 20

bit. . . si ha quindi che nella generazione dell’indirizzo, i 4 bit meno significativi

sono a zero. L’indirizzo e quindi la somma modulo 64 Kbyte6 dei registri di

segmento. Di seguito un esempio di codice assembler contenenti alcuni esempi

di indirizzamento:

mov Ax, 32

mov Ax, [Bx]32

mov Ax, [Bx][Di]32

Da osservare che il segmento e sempre implicito nella somma e che gli indi-

rizzi sono relativi alla base del segmento.

Non esistono indirizzi assoluti (si dice rilocazione dinamica): si possono spo-

stare le posizioni cambiando solo i valori degli indici. Infatti, i programmi che

utilizzano quelle determinate sezioni utilizzano gli indici per accedere ai dati!

In questo modo si puo avere un compattamento della memoria. In realta, la

rilocazione dinamica e un’operazione lunga e costosa, e non viene eseguita

mai.

La protezione in realta nell’8088 non esiste, ma si tratta di un sistema che

garantisce che un “errore” non vada a modificare del codice in maniera errata.

2.1 Modalita d’indirizzamento

Esistono 5 diversi modi per indirizzare7, a seconda dei registri coinvolti:

• Diretto: segmento + offset

• Basato: segmento + (base + offset)

• Indicizzato: segmento + (indice + offset)

• Indicizzato basato: segmento + (indice + base + offset)

• Indiretto: segmento + (indice + base)

6Da ricordarsi che il riporto viene tagliato via e aggiunto il segmento, non si puo maiandare oltre ai 64 Kbyte; i valori oltre a 16 bit vengono troncati. Se si sbaglia nellagenerazione dell’indirizzo, il processore si blocca

7Non tutte le istruzioni si possono indirizzare in tutti i modi, e l’unico modo per saperecome indirizzare e consultare il manuale dell’8088.

7.3 Altre caratteristiche dell’8088 61

L’ultimo metodo richiede un doppio accesso alla memoria (infatti, viene cal-

colato questo indirizzo, a cui si riperisce non un dato, ma un ulteriore indi-

rizzo di memoria che contiene il dato/l’istruzione necessaria). Da ricordarsi

che il segmento va sempre traslato di 4 posizioni, e che devono essere eseguite

prima le operazioni presenti nella parentesi.

3 Altre caratteristiche dell’8088

Come gia detto, il bus dei dati dell’8088 e a 8 bit, ma i registri son a 16 bit8.

Questo quindi indica che son necessari due cicli di bus per poter riempire un

registro, che vengono eseguiti autonomamente.

I registri in realta non son tutti noti al programmatore, anzi! Nei processori

moderni si ha avuto un aumento proprio dei registri non noti al programma-

tore, mentre quelli noti son rimasti circa uguali.9

La struttura dell’8088 non e pipelined, ma e possibile suddividere la rete

logica in 2 grandi parti (ognuna di queste sezioni ha un suo controllo. . . ):

• l’Execution Unit

• La Bus Interface Unit

Queste strutture cercano di lavorare il piu possibile in parallelo. Per esem-

pio, l’offset viene calcolato nella ALU della EU, e quindi e riportato alla BIU.

L’8088 e poi dotato di una Instruction Queue: questa contiene i primi 4 byte

successivi all’istruzione corrente. Il sistema cerca quindi di approvviggionarsi

in anticipo!

Se la EU non sta facendo operazioni di memoria, la BIU e libera di pren-

dere dalla memoria questi byte successivi (per questo si dice che cercano di

lavorare in parallelo). In tutti gli altri casi, la EU ha la priorita per accedere

alla memoria. In questo modo comunque si sfrutta al meglio il BUS (funzio-

na un po’ come le memorie cache, che si vedranno nel corso di Calcolatori

Elettronici LS).

8L’MDR e un registro a 8 bit9Esempio di registri noti: gli accumulatori, lo Stack Pointer, il Base Pointer, DI, SI,. . . I

registri non noti son quelli temporanei (come erano TEMP, A e B)

62 L’8088

4 Caratteristiche del BUS

Il BUS e multiplexato nel tempo:

1. Prima si l’indirizzo della cella a cui si vuole accedere (di memoria, o

indirizzo del registro)

2. Poi si esegue il vero e proprio trasferimento

Il clock del BUS dell’8088 e un po’ anomalo: e a livello basso per2

3, mentre

e a livello alto per1

3Il minimo clock di BUS e pari a 4 clock di CPU (detti

T1...4). Da notare che solo in T1 viene attivato il segnale di ALE, che e il

segnale necessario per campionare l’indirizzo emesso dal processore proprio

nel periodo T1!

Il ciclo quindi inizia inserendo sia l’indirizzo che la tipologia dell’indirizzo

(memoria o I/O) che il tipo di trasferimento (lettura o scrittura). I bit degli

indirizzi son cosı suddivisi:

• AD0 − AD7: sono transienti, e quindi devono essere campionati

• A8 − A15: rimangono, e quindi NON devono essere campionati

• A10 − A19: In realta, anche questi devono essere campionati. . .

La fase d’indirizzamento termina in T2. Quando viene abbassato il segnale

di ALE, il processore non pilota piu il bus, e si prepara a ricevere i dati (in

scrittura si ha invece che il processore pilota in entrambi i casi). Nel caso

di lettura dalla memoria, il segnale READ si collega all’OE* delle memorie

coinvolte nel trasferimento, e quindi si ha che le memorie pilotano il bus !

Come si puo de-multiplexare il BUS? Si utilizzano dei 373 (LATCH CD) per

campionare gli indirizzi. Vengono utilizzati i 373 perche riproducono subito

l’ingresso in uscita, e sono quindi piu veloci dei 374. Inoltre, i 473 sono degli

amplificatori di FAN-OUT, e cio aumenta la capacita di pilotaggio. I 373 si

usano appunto per avere la sicurezza di aver caricato gli indirizzi campionati,

e per questo motivo che gli indirizzi vengono trasmessi attraverso AD[0 : 7]

e A[8 : 15].

Per evitare dei conflitti sul BUS, e quindi necessario mettere un 245 (son 8

transceiver bidirezionali) tra il processore e il BUS. Il segnale DEN* viene

7.5 Generazione dei segnali per pilotare il bus, i comandi 63

attivato solo quando il processore ha chiuso i suoi 3-state, e serve appunto

per evitare i conflitti elettrici (va collegato all’EN* del 245). Si ha quindi che

non si puo leggere o scrivere finche non si son campionati gli indirizzi sul 373.

5 Generazione dei segnali per pilotare il bus,

i comandi

Di seguito son riportati i comandi necessari per pilotare il bus, e le le loro

decodifiche:

MWRC∗ = IO/M∗ + WR∗

MRDC∗ = IO/M∗ + RD∗

}segnali di scrittura/lettura in memoria

IOWRC∗ = IO/M∗ + WR∗

IORDC∗ = IO/M∗ + RD∗

}segnali di scrittura/lettura in I/O

C’e pero da considerare un fatto: all’aumentare della logica dei segnali (crean-

do reti logiche sempre piu complesse) si introduce un maggior ritardo, e si

ha quindi un potenziale aumento del numero degli stati di WAIT.10

La soluzione addottata dall’architettura dell’8088 e stata quella di utilizzare

2 245 e una rete logica adeguata, in modo da ottenere due BUS distinti: uno

per la memoria e uno per i dati! I 245 vengono attivati a seconda delle com-

binazioni dei segnali di DEN* (come si era gia visto) e di IO/M*, che quindi

sceglie se il trasferimento e in memoria o in I/O. L’OR di questi due segnali

(nel caso del bus dei dati, con IO/M∗) diventa l’EN* dei 245!

Si e cosı giunti al tezo clock di BUS, T3. In questo clock, in caso di lettura

i dati vengono campionati sul fronte di discesa del clock. Questo e anche

l’unico clock del BUS in cui il processore va a controllare se e stato inviato

il segnale di READY, che e campionato sul fronte di salita del clock! Fino

a quando il segnale di READY e basso, non vengono campionati i dati, e si

continua a ripetere il clock T3.

Gli stati ripetuti si dicono periodi di wait, TW , mentre i periodi vuoti dopo il

periodo di clock T4 (ovvero finche non arriva un nuovo T1) son detti periodi

10N.B.: gli stati di WAIT sono multipli del periodo di clock. . .

64 L’8088

di idle.

Problema: chi genera per l’8088 questi segnali di clock, RESET e READY?

Servono dei circuiti d’appoggio (normalmente progettati dalla stessa casa del

processore. . . ) per generare questi segnali. Per esempio, l’8284 e un cirucito

d’appoggio, da anteporre all’8088, in grado di generare proprio i segnali di

CLOCK, RESET e READY11

5.1 Generazione del clock e del reset

Si vede sulle slide proprio l’8284 come circuito per generare sia il clock che

il reset. Nel caso venga inviato il segnale di reset, vengono eseguiti i seguenti

questi passaggi:

1. La prima istruzione viene letta all’indirizzo FFFF�, dove FFFF e

memorizzato nel code segment, mentre � nell’instruction pointer

2. Si pone l’Interrupt Enable a 0

3. Il valore degli altri registri e casuale.

Se non si considera il diodo presente nell’8284, la rete per generare il segnale

di reset e solo un circuito RC (dotato di resistenza e condensatore, con un

intereruttore: chiudendo l’interrutore, si fa scaricare il condensatore).

Il compito del segnale di reset e quello di lasciar operare il processore solo

quando tutti i circuiti del calcolatore hanno raggiunto una tensione di ali-

mentazione stabile (quindi, allo start-up il reset vale 1, e 0 quando si e giunti

alla stabilita).

A cosa serve il diodo? Con il diodo il condensatore si scarica molto piu velo-

cemente, e quindi viene attivato subito il segnale di reset!

Un’altra questione interessante e come sono alimentati questi circuiti d’ap-

poggio: se fossero alimentati con la stessa alimentazione degli altri circuiti,

subirebbero gli stessi transitori. In realta son alimentati anche da apposite

batterie che li tengonosempre alimentati (un tempo erano in tampone, ora

11Il processore richiede un set-up molto alto per il segnale di READY, e ilcomportamento del processore diventa ignoto se questo tempo di set-up non vienerispettato

7.5.2 Generazione del segnale di READY 65

sono al litio).

Per generare invece il segnale di clock, serve un circuito con un oscillatore

al quarzo (che si puo vedere sulle slide). Il quarzo infatti e un condensatore

naturale, che ha delle variazioni meccaniche solo quando giunge alla cosidetta

“frequenza fondamentale”. . . e quindi molto piu stabile di un solito conden-

satore!

Nel circuito son presenti due capacita, che son dette capacita di compensa-

zione, e servono per iniziare l’oscillazione.

Da osservare che l’8088 e un circuito che lavora a 5 MHz, ma si utilizza

un quarzo con frequenza fondamentale a 15 MHz. Questo perche il segnale

di clock viene “pulito, raddrizzato” e moltiplicato passando attraverso un

apposito circuitodetto Trigger-Schimdt.

5.2 Generazione del segnale di READY

Il READY e un segnale che deve essere sincrono con il fronte negativo del

clock, e quindi e garantito per il fronte positivo, quando viene campionato.

Oltre a cio, a differenza degli altri segnali, il segnale READY puo arrivare da

piu fonti. Il circuito lo si puo vedere come una serie di AND che confluiscono

in un OR per poter generare il segnale di OR che e campionato in un FF di

tipo D, a cui arriva il segnale di clock negato proprio per poter campionare

sul fronte negativo.

Un possibile circuito per la generazione dei READY e il 74164, che e uno

shift-register a (N+1) bit12, a cui si collega:

• “1” al segnale D

• Il segnale di ALE negato al CLR*

• E a seconda delle uscite considerate si ha il numero dei ritardi. I Qi

sono gli stati di wait.

Esempio: si possono scegliere 2 fra i Qi e collegarli rispettivame ai segnali

RDY1 e RDY2, ottenendo quindi due tipi di ready diversi. Collegando SELG∗1

12N.B.: I contatori son binari, non sono degli shift-register!!

66 L’8088

a IO/M∗ e SELG∗2 a IO/M∗, si discrimina se il ready proviene da una

sorgente di I/O o da una memoria.

6 Calcolo degli stati di wait nel caso di cicli

di lettura dalla memoria

Si raccomanda di guardare le slide per vedere le forme d’onda dei segnali.

Il campionamento dei dati avviene al termine di T3, sul fronte negativo, e si

ha che e corretto se sono rispettati i tempi di set-up e di hold (da ricordare

sempre che il segnale di ready e campionato sul fronte positivo di T3.

L’istante di campionamento e dato da:

Tsample = (3 + n) · TCLCL (7.1)

dove TCLCL e un periodo di clock, mentre n e il numero degli stati di wait

presenti nel ciclo.

Un ciclo di lettura viene eseguito correttamente se

TSAMPLE ≥ TDATA VALID (7.2)

Dove TDATA VALID e l’intervallo che intercorre fra l’inizio del ciclo di BUS di

lettura e l’istante in cui i dati provenienti dalla memoria sono validi e posso-

no essere campionati dalla CPU. Altri ritardi importanti che influenzano la

scelta del TSAMPLE sono:

• TCLAV(max) e il massimo ritardo con cui il processore garantisce che a

partire dal fronte negativo di T1 gli indirizzi son validi

• TDVCL(min) e il minimo tempo di set-up del registro “MDR” della CPU

• TCLRL(max) e il massimo ritardo per l’attivazione del segnale di READ.

• I vari ritardi introdotti dai 373 e 245

In generale, il tempo d’accesso e il tempo piu lungo presente.

Capitolo 8

La gestione dell’Input/Output

L’I/O non e nient’altro che un tipo particolare di memoria, normalmente

diversa (ma non sempre). Quello che si ha e che se si scrive un dato in tali

memorie si puo avere un’azione del dispositivo I/O.1.

Un’interfaccia di I/O ha 4 tipi di dato (scritti e letti come le altre memorie):

• Comandi (dal mondo interno al mondo esterno)

• Dati

• Indirizzi

• Stati (condizioni particolari del dispositivo)

Un’interfaccia di I/O deve essere in grado di sincronizzare la CPU con l’unita

di I/O (interlock)

Difetto fondamentale: il processore deve interrogare in continuazione il bit

di stato per sapere se c’e a disposizione un nuovo dato dal dispositivo (e cio

vale anche per l’output). Questo sistema e detto polling. Questo sistema e

altamente costoso, e quindi deve essere evitato. Si utilizza un sistema per cui

invece viene richiamato il processore. Per far cio si utilizza il sistema delle

interruzioni (o interrupt, in cui si usano due fili).

Se il filo viene attivato, il processore (dopo aver terminato l’ultima opera-

zione) sospende il programma corrente e viene forzato ad eseguire una “sub-

routine” di I/O (Si salva sullo stack l’indirizzo di ritorno! Nell’8088 viene

1Anche qui, conviene vedere gli esempi sulle slide, e bisogna ricordarsi: il clock di unFF non deve essere attivato all’inizio della write, ma alla fine (si usa un OR, non un AND)

68 La gestione dell’Input/Output

anche salvato il registro di flag e viene azzerrato l’Interrupt Enable). Si puo

anche avere il nesting di piu interrupt!

1 Le periferiche

Si puo associare il funzionamento di una periferica a quello di una memoria.

Si leggono e scrivono:

• Dati

• Controlli

• Stati

• Indirizzi

Una periferica e utile, ma non e strettamente necessaria: si tratta di un com-

ponente realizzato da terzi, e quindi si consegna la responsabilita di questo

coretto funzionamento a terzi!

1.1 L’8255

E un dispositivo che si trova ancora sul mercato. E un dispositivo a 40 pie-

dini, in grado di gestire fino a 3 porte bidirezionali parallele a 8 bit.

Son presenti due registri di indirizzo nell’8255 (A0 e A1). Questo quindi indica

che si possono coprire 4 locazioni (o si lavora su una delle 3 porte, oppure si

interviene per scrivere una parola di controllo. Infatti tutti questi dispositivi

possono avere piu modi di funzionamento, e si possono programmare). Serve

quindi un software che indichi il funzionamento di queste porte.

Se viene attivato il segnale di reset, tutte le porte lavorano come Input (dal

mondo esterno al processore). E da osservare che in realta la porta C e co-

stituita da da 2 porte a 4 bit (utile per la programmazione). Per accedere

al registro di controllo bisogna imporre sia A1 che A2 a 1. In questo modo

si accede a questo registro interno alla periferica e si puo programmare il

funzionamento del dispositivo. Per accdere quindi alla porta di controllo si

deve utilizzare come indirizzo il (Chip Select + 3)!

Quindi, per poter usare correttamente una periferica si deve:

8.1.2 Parola di controllo dell’8255 69

1. fare in modo che il programma mandi a tutte le interfaccie le corrette

configurazioni perche funzionino correttamente

2. e quindi si possono utilizzare i dispositivi.

Esistono 3 modalita (ma una non si studia):

• Modo 0, o anche detto Basic I/O: la lettura e la scrittura con il dispo-

sitivo avvengono senza sincronizzazione con il mondo esterno (tutte e

tre le porte possono lavorare in modo 0)

• Modo 1, o anche detto Strobed I/O: l’I/O e avviene tramite sincroniz-

zazione con il mondo esterno. Da notare che la porta C puo lavorare

solo in modo 0.

Le porte si possono riprogrammare? In teoria sı, ma cio dipende dai compo-

nenti a cui son collegati.

Se le porte A e B sono in modo 1, servono dei segnali per creare la sincro-

nizzazione. Per far cio, si utilizzano alcuni bit della porta C, che si dice che

viene requisita.

1.2 Parola di controllo dell’8255

Se il bit piu significativo (D7) e pari a 1, gli altri bit son considerati di configu-

razione del dispositivo. Invece, se e a 0, si possono modificare singolarmente

i bit della porta C!2.

La programmazione del dispositivo dipende ovviamente dall’utilizzo che se

ne fa. Per esempio, se i dati in arrivo dal dispositivo esterno cambiano troppo

velocemente, si deve utilizzare il modo 1.3

Nel caso di lettura di dati dal dispositivo esterno, si ha che:

1. La Unita Esterna attiva il segnale STB*, detto Strobed Input, che

funziona come un clock (indica che e pronto per scrivere dei dati)

2. L’8255 avverte la UE che il dato e stato accettato attivando IBF (e un

FF):

2Infatti basta usare 3 bit per indicare quale bit modificare della porta C, e con D0 siindica se scrivere 0 o 1

3Da osservare che, se il processore e piu veloce della periferica, servono un numeroadeguato di stati di wait, come nel caso delle memorie!

70 La gestione dell’Input/Output

• IBF = 1: La UE non deve scrivere, la CPU deve leggere• IBF = 0: (e avvenuta la lettura) la CPU non deve leggere, la UE

puo scrivere.

Il segnale di STB* serve come clock per campionare il dato da parte dell’8255.

I bit della porta C servono proprio per poter trasmettere/ricevere i segnali

di STB* e IBF.

In modo simile funziona il processo inverso, ovvero scrittura dal processore

sulla UE. Si utilizzano invece come segnali OBF* (Output Buffer Full, che

se messo a 0 indica alla periferica che e presente un nuovo dato per essere

scritto) e ACK* (la periferica indica che la scrittura e terminata).

Si supponga per esempio si sia programmatol’8255 come strobet output A.

Tramite dei 3-state, si stacca il registro di C6 dal piedino PC6, che viene

invece utilizzato per ACKA*. Sulle slide si possono vedere appunto cosa si

modifica a seconda della programmazione, e come vengono riutilizzati questi

bit.

Da ricordarsi per tutte le periferiche: gli Interrupt Enable vanno riferiti

direttamente alle sorgenti, e quindi per generare l’IE tutte le sorgenti di

Interruzione vanno in OR!

2 Le Interruzioni

Esistono due tipi di segnali per di interrupt:

• Interrupt mascherabili, mediante l’Interrupt Enable

• NMI (Not Maskerable Interrupt). Si tratta di Interrupt d’emergenza, e

per questo non son mascherabili!

2.1 Meccanismi d’interruzione dell’8088 (stesso per tut-

ta la famiglia)

Se il processore riconosce un’interrupt, deve capire di che tipo e e soprattutto

deve ricevere la sub-routine dell’interrupt piu importante che ha ricevuto in

quel lasso di tempo: e quindi necessaria una rete al di fuori del processore.

8.2.2 PIC 8259 71

Il processore, quando riconosce un’interrupt, genera due cicli di bus in cui

trasmette il segnale INTA* (Interrupt Acknowledge). Al secondo INTA*, il

processore si aspetta di ricevere 8 bit da un dispositivo esterno, che conten-

gono l’Interrupt Type (ovvero il tipo dell’interruzione). Quindi il processore

esegue uno shift a sinistra di due posizioni, e prende il numero ottenuto co-

me indirizzo per accedere ai 4 byte consecutivi in memoria che contengono il

Code Segment e l’Instruction Pointer dell’indirizzo della sub-routine!

• Primo INTA*: Congela la catena delle priorita e cosı evita le corse

critiche.

• Secondo INTA*: Si ottiene l’Interrupt Type.

Perche viene shiftato a sinistra di due (ovvero moltiplicato per 4)? Perche

un puntatore nell’8088 usa 4 byte (2 per il Code Segment, 2 per l’Instruction

Pointer), e in questo modo riesce ad ottenere l’indirizzo richiesto. Per esem-

pio, i primi due byte contengono il CS corrispondente alla subroutine per un

Interrupt Type uguale a 0, e i byte immediatamente successivi contengono

l’IP.4

Si dice Interrupt Vector il puntatore n-simo alle istruzioni di Interrupt.

Come si prosegue quindi?

1. Si salvano sugli stack il CS e l’IP dell’istruzione corrente

2. Si salva il registro di flag

3. Si disabilita l’Interrupt Enable

2.2 PIC 8259

Il PIC (Programmable Interrupt Controller) 8259 e una periferica ester-

na che e in grado di gestire fino a 8 richieste d’interruzioni, con priorita

(l’interruzione collegata a IR0 e l’interruzione con la massima prorita. L’8259:

• Invia il segnale di INT al processore, che puo essere messo in OR con

altre fonti di interruzione

• Ha un piedino INTA* dove puo ricevere appunto il segnale di INTA*

4Un KByte della memoria logica in basso nell’8088 e riservato ai puntatori alleinterruzioni!

72 La gestione dell’Input/Output

Inoltre, con l’8259 si possono mascherare selettivamente le interruzioni. Si

hanno quindi fino a 8 interrupt enablem una per ogni sorgente: se uno e di-

sabilitato, , significa che e stato mascherato.

Ci son tre registri da considerare (A0):

• IRR: Interrupt Request Register: e il registro a cui son collegati le

sorgenti di interrupt. Se riceve una richiesta di Interrupt da parte della

sorgente collegata ad IRi, viene settato il bit corrispondente.

• ISR: In-Service Register, e il registro che dice quali interruzioni son in

servizio

• IMR: Interrupt Mask Register, e il registro che indica quali istruzioni

son state mascherate

Il segnale d’interruzione da parte del dispositivo s’attiva se si presenta una

richiesta d’interruzione con piorita maggiore rispetto a quelle corrente, pre-

sente nell’ISR. E quindi necessario un meccanismo apposito per resettare i

bit dell’ISR.

In teoria, esisterebbero solo due parole di controllo (Input Control Word e

Output Control Word) che si possono scrivere, ma il significato dei byte tra-

smessi non dipende solo dall’indirizzo, ma anche dal tempo, si tratta di una

rete sequenziale!

Le Input Control Word:

• A0 = 0 e quarto bit a 1: corrisponde fondamentalmente a un reset, e la

prima informazione da inviare

• ICW1: viene indicata con il bit 0 a 1, e il bit 1 indica invece che questo

e l’unico 8259 presente nell’architettura. Il bit 3 invece informa se l’in-

terruzione deve essere eseguita se c’e un segnale a stabile (si dice che e

sensibile ai livelli) oppure ad ogni fronte positivo (e sensibile ai fronti).

• ICW2: con questa parola si ottiene l’Interrupt Type:

1. Tutti gli Interrupt Tupe son consecutivi2. I primi 5 bit (quelli piu significativi) vengono programmati, mentre

gli altri 3 indicano la tioplogia dell’interruzione (o meglio, indica

il numero dell’interruzione piu prioritaria)

• ICW3: viene usata solo se ci fossero piu 8259 nell’architettura:

8.2.2 PIC 8259 73

• ICW4: questa parola stabilisce la zona di memoria per i puntatori alle

interruzioni (sempre: A0 = 1, bit 0 a 1, bit 1,3 e 4 a 0. Il bit 2 si puo

assumere qualunque valore)

Naturalmente, si programma sempre un’unica volta:

1. Prima si configura correttamente il dispositivo

2. E quindi si attiva l’Interrupt Enable

Le Output Control Word:

• OCW1: e una parola di mascheramento (ogni bit indica per la corri-

spettiva interruzione se e mascherata [1] oppure no [0]). A0 = 1. E la

quarta parola che deve essere inviata al dispositivo.

• OCW2: indica un End of Interrupt non specifico (A0 = 0, quarto bit

a 0). Questo e il comando che, inviato al dispositivo, esegue un reset

dell’ISR dell’interruzione con priorita maggiore.

Con l’8259 si possono programmare le interruzioni con rotazione di prio-

rita: si possono cambiare le priorita, ma solo facendole ruotare tutte, attorno

all’interruzione meno prioritaria (questo significa che tutte le interruzioni

cambiano priorita!). Quello che si puo quindi fare e indicare il livello meno

prioritario, con un apposito comando. Esempio (sempre con A0 = 0), dando

questi comandi:

• 00100XXX: si indica EOI non specifico

• 11000XXX: viene settata la priorita al livello indicato dai 3 bit XXX

Se si ruota su un End Of Interrupt non specifico, si ha quindi che il livello

che si sta settando diviene il meno prioritario.

Trattandosi di 8 interruzioni, son necessarie 32 locazioni di memoria conse-

cutive per le interruzioni

Un Not Maskerable Interrupt (NMI) e riconosciuto dal processore quando

sul piedino corrispondente avviene una transizione da 0 a 1. Non si ha quindi

nessun nuovo INTA*, ma viene generato dal processore e vale 2.

Esistono istruzioni all’interno del processore per cui vengono generate inter-

ruzioni interne, che hanno Interrupt Type pari a 0. Si tratta di interruzioni

predefinite, e nell’8088 sono nelle prime 32 locazioni.