You are on page 1of 73

Appunti di Calcolatori Elettronici L-A

Daniele Tiles 28 maggio 2006

Indice
Indice Introduzione 1 I calcolatori elettronici 1 2 3 4 Il modello di riferimento . . . . . . . . . . . . . . . . . . . . . Rappresentazione astratta dellhardware di un calcolatore elettronico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Accesso da parte della CPU ai dati e alle istruzioni: indirizzamento della memoria . . . . . . . . . . . . . . . . . . . . . . . 12 4.1 4.2 5 Spazio di indirizzamento in memoria . . . . . . . . . . 13 Accesso alle interfacce di I/O: spazio di indirizzamento in I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Trasferimento di informazioni sul bus, comandati dalla CPU . 15 5.1 5.2 6 6.1 Tipi di segnali . . . . . . . . . . . . . . . . . . . . . . . 16 La cache: ottimizzazione delle prestazioni . . . . . . . . 16 Sistemi multimaster . . . . . . . . . . . . . . . . . . . . 17 19 9 La CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3 7 9 9

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

2 Architettura dellhardware di un calcolatore elettronico 1 2

Le prestazioni di un calcolatore: CP Utime . . . . . . . . . . . . 19 Le memorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.1 2.2 2.3 ROM e EPROM . . . . . . . . . . . . . . . . . . . . . 21 Spazio dindirizzamento e parallelismo . . . . . . . . . 22 Ancora EPROM . . . . . . . . . . . . . . . . . . . . . . 23

4 2.4 2.5 3 3.1 3.2 3.3 3.4

Indice Le RAM . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Una cella di RAM Il 244 Il 245 Il 373 Il 374 . . . . . . . . . . . . . . . . . . . . 25

I circuiti notevoli . . . . . . . . . . . . . . . . . . . . . . . . . 26 . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 31

3 Il linguaggio macchina (Istruction Set Architecture - ISA) 1 2 3 Rappresentazione simbolica delle istruzioni macchina: lassem-

bler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Classicazione dei linguaggi macchina . . . . . . . . . . . . . . 33 Tipologia delle istruzioni . . . . . . . . . . . . . . . . . . . . . 33 3.1 3.2 4 4.1 4 ISA DLX 1 2 3 4 1.1 2.1 3.1 Tecniche di indirizzamento degli operandi in memoria . 34 Classicazione in base agli operandi . . . . . . . . . . . 35 Allineamento dei byte in memoria . . . . . . . . . . . . 36 37 IA 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 39 Calcolo del periodo di clock . . . . . . . . . . . . . . . 41 Altri esempi e osservazioni . . . . . . . . . . . . . . . . 43

Alcune denizioni e istruzioni . . . . . . . . . . . . . . . . . . 35

Formati delle istruzioni nelle architetture R-R (DLX) . . . . . 37 ISA DLX: Implementazione mediante la struttura sequenziale

Il diagramma degli stati del controller . . . . . . . . . . . . . . 41 I passi dellesecuzione delle istruzioni . . . . . . . . . . . . . . 44 47

5 ISA Pipelined 1 1.1 1.2 2 2.1 2.2

CPU DLX Pipelined . . . . . . . . . . . . . . . . . . . . . . . 47 Larchitettura Harvard . . . . . . . . . . . . . . . . . . 49 Altre osservazioni . . . . . . . . . . . . . . . . . . . . . 49 Alee di controllo . . . . . . . . . . . . . . . . . . . . . 51 Branch Target Buer . . . . . . . . . . . . . . . . . . . 52

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

Indice 6 Decodica indirizzi e mapping 1

5 53

Decodica parziale . . . . . . . . . . . . . . . . . . . . . . . . 55 57

7 L8088 1 2 3 4 5

Una prima descrizione del processore: i segnali . . . . . . . . . 57 Registri Interni . . . . . . . . . . . . . . . . . . . . . . . . . . 59 2.1 Modalit` a dindirizzamento . . . . . . . . . . . . . . . . 60 Altre caratteristiche dell8088 . . . . . . . . . . . . . . . . . . 61 Caratteristiche del BUS . . . . . . . . . . . . . . . . . . . . . 62 Generazione dei segnali per pilotare il bus, i comandi . . . . . 63 5.1 5.2 Generazione del clock e del reset . . . . . . . . . . . . . 64 Generazione del segnale di READY . . . . . . . . . . . 65

Calcolo degli stati di wait nel caso di cicli di lettura dalla memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

8 La gestione dellInput/Output 1 1.1 1.2 2 2.1 2.2

67

Le periferiche . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 L8255 . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Parola di controllo dell8255 . . . . . . . . . . . . . . . 69 Meccanismi dinterruzione dell8088 (stesso per tutta la famiglia) . . . . . . . . . . . . . . . . . . . . . . . . 70 PIC 8259 . . . . . . . . . . . . . . . . . . . . . . . . . 71

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

Introduzione
Questi appunti rappresentano il formato elettronico degli appunti da me presi nellanno accademico 2003/2004. Questo documento non ` e da considerarsi uciale e/o sostitutivo alle dispense del professore, ma si spera possa essere daiuto per lo studio della materia. (Anzi, mio spassionato consiglio: ricontrollate pi` u volte le slide, e se ci son delle discrepanze, datevi delle slide!) Se si riscontrano errori o mancanze, potete riferirmele allemail daniele.tiles@gmail.com, in modo che possa correggerle al pi` u presto.

Capitolo 1 I calcolatori elettronici


Un calcolatore elettronico non ` e nulla di pi` u o di meno di una rete logica, ovvero una rete retroazionata con un certo numero di ip-op. Ci` o che lo contraddistingue ` e la complessit` a della rete progettata, che ` e notevole.

Il modello di riferimento

Il primo esempio di calcolatore elettronico pu` o essere ricondotto alla Macchina di Von Neumann, progettata intorno agli anni 40 del secolo scorso: una macchina teorica come quella di Turing, ma allo stesso tempo pi` u complessa e dettagliata, e con la possibilit` a 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 desiderato. Il funzionamento desiderato viene espresso in termini di sequenze di istruzioni (programma ) che sono memorizzate su un apposito supporto di memoria ; per cambiare il funzionamento basta quindi cambiare il programma. Larchitettura ` e tale da trattare problemi pi` u complessi di quelli visti nelle reti logiche, a scapito per` o di una minore ecienza.

Rappresentazione astratta dellhardware di un calcolatore elettronico

In un calcolatore elettronico, lhardware necessita di un suo set di informazioni per poter comunicare con il software. Questo set viene detto linguaggio

10 macchina.

I calcolatori elettronici

Nella gura seguente si pu` o vedere una generica rappresentazione della struttura logica di un calcolatore.

Figura 1.1: Struttura logica di un calcolatore Alcune denizioni dei nomi presenti nello schema: I registri sono un insieme di ip-op che hanno un comportamento simile Il PC o Program Counter ` e un registro dellUnit` a di elaborazione (detta anche CPU, Central Processing Unit, che serve per reperire le istruzioni che devono essere elaborate proprio dalla CPU. LALU ` e lArithmetic Logic Unit, una rete combinatoria importantissima 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 costituiscono lelaboratore: 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 costante questa struttura per poter in ogni modo supportare il software che veniva realizzato: unalterazione di tale modello porterebbe a dei problemi di compatibilit` a.

La CPU

La Central Processing Unit ` e una macchina sequenziale sincrona . . . il comportamente di un calcolatore elettronico si pu` o quindi semplicare 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 listruzione 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 listruzione successiva mentre ` e nello stato di IF? Nel Program Counter viene memorizzato lindirizzo dellistruzione successiva, e viene incrementato ad ogni istruzione di fetch. Nel-

12

I calcolatori elettronici

limmagine seguente ` e rappresentato il graco del PC in funzione del tempo, nel caso il calcolatore esegua un loop di 4 istruzioni.1

Figura 1.3: Graco del PC in funzione del tempo, nel caso la CPU esegua un loop di 4 istruzioni In realt` a, non ` e detto che la CPU esegue le istruzioni nellordine pressato. 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 pi` u complicata per via dei calcolatori fuori ordine : questi leggono n istruzioni contemporaneamente, senza rispettare quindi lordine imposto dal processore.

Accesso da parte della CPU ai dati e alle istruzioni: indirizzamento della memoria

Molte memorie 2 sono degli insiemi consecutivi di celle, e quindi si pu` o individuare ogni cella mediante il suo indirizzo. In generale ogni cella ` e composta da 8 bit, dal quale si deduce che il byte ` e la pi` u piccola quantit` a di memoria
E da notare che la pendenza delle linee ` e un indicatore del numero delle istruzioni eseguite nellunit` a di tempo. 2 Non tutte: un esempio son le memorie cache
1`

1.4.1 Spazio di indirizzamento in memoria indirizzabile.3

13

Una memoria ` e quindi pari a un vettore di 2n elementi, ovvero che sono individuabili mediante gli indirizzi compresi nel range fra [0, 2n 1]. Gli indirizzi si indicano solitamente mediante codice esadecimale 4 La dimensione dello spazio dindirizzamento di una CPU ` e uno dei parametri che ne caratterizza larchitettura. Questa si pu` o 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: l8085 aveva uno spazio di indirizzamento pari a 64 KB, con indirizzi a 16 bit l8086 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. Inne, i Pentium III e IV hanno uno spazio di indirizzamento pari a 64 GB, con indirizzi a 36 bit.5

Nellimmagine seguente si pu` o vedere la rappresentazione logica di uno spazio di indirizzamento a 4 Gb. In tale spazio vengono mappati i dispositivi sici di memoria: in questo modo la CPU ` e in grado di riconoscere e di usare i componenti sici della memoria (la CPU ragiona solo mediante indirizzi)! Pu` o essere che i singoli
E quindi importante notare che sul bus non deve solo passare il dato, ma anche lindirizzo 4 Che non ha nulla a che vedere con lASCII. . . 5 Un processore a 36 bit signica che ad ogni colpo di clock riesce a leggere no a 36 bit (non sempre 36, pu` o anche leggerne di meno), e ci` o permette il parallelismo.
3`

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 sequenziali. Agli estremi della memoria vengono indicati il primo e lultimo indirizzo indicabile, mentre larea rossa rappresenta appunto il dispositivo sico mappato. componenti sici non abbiamo memoria suciente per costituire la memoria logica dellarchitettura: in questo caso basta predisporre nellarchitettura tanti componenti in modo da ottenere la memoria logica desiderata, mappandoli tutti.

4.2

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

Come ` e gi` a 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 perch` e 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 questultimo caso si dice che lI/O ` e mappato in memoria (memory mapped I/O ). In generale lo spazio di indirizzamento per i dispositivi di I/O ` e pi` u piccolo dello spazio di indirizzamento in memoria. Si ha quindi che il numero degli indirizzi in I/O sia molto inferiore al numero di indirizzi della memoria centrale6 .
Si dice memoria centrale quegli indirizzi che sono direttamente raggiungibili dal processore
6

1.5 Trasferimento di informazioni sul bus, comandati dalla CPU

15

Con il passare degli anni e levoluzione della tecnologia dei processori, si ha che il numero degli indirizzi per i dispositivi in I/O in realt` a` e rimasto circa lo stesso, cio` e 64 Kb. Questo numero ` e anche eccessivo, ma in questo modo si possono avere degli indirizzi ridondanti che possono avere la loro utilit` a. Come si fa a discriminare i due diversi spazi di indirizzamento? Sul bus ` e presente un segnale detto qualicatore che specica il tipo di indirizzo che sta transitando sul bus.7 .

Trasferimento di informazioni sul bus, comandati dalla CPU

La CPU pu` o comandare come trasferimenti di informazioni sul bus Trasferimenti da e verso dispositivi mappati nello spazio dindirizzamento 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 indirizzamento 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 pi` u veloce possibile Deve essere sempre sfruttato al massimo, anche quando il processore non lo richiede
Si potrebbe usare le istruzioni di memoria per trasferire dati dai dispositivi di I/O, ma in generale ` e sconsigliato.
7

16

I calcolatori elettronici

5.1

Tipi di segnali

Ci sono 4 segnali indispensabili per il funzionamento di un calcolatori: Memory read (Si fornisce lindirizzo 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 sistema: 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 perch` e 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 pi` u alta probabilit` a di essere richiamate dal processore (di norma, i programmi consistono i tantissimi loop, e quindi le informazioni necessarie al processore non sono tantissime). Utilizzando la cache, quando il processore lavora su dati che ha gi` a a disposizione non si deve preoccupare di reperirli: il problema ora consiste nello svuotare la cache quando i dati non sono pi` u utilizzati e nel riempirla con i dati che sono pi` u 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 ne ` e una gerarchia delle memorie, ovvero queste vengono classicate secondo il loro uso e il modo in cui il processore riesce ad accederci.

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 uninformazione tra agenti del bus avviene con una sequenza 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 pi` u master. . . per esempio, un calcolatore elettronico con una CPU e uninterfaccia con DMA8 ` e un sistema multimaster. Un sistema con pi` u CPU aacciate 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 delle 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: sico (come collegare sicamente i master al bus) e logico (come liberare il bus). Questultimo viene risolto da un sistema operativo multimaster, che ` e molto pi` u complesso di quello monomaster. Quando pu` o un master cedere il suo turno? Solo quando ` e stato concluso un ciclo di bus10 . Nel frattempo, un master non attivo sul bus pu` o fare lo
Direct Memory Access: ` e la funzione di accesso autonomo alla memoria. Per gestire il trasferimento di dati fra gli agenti slave, serve un controller del DMA, un DMAC 9 In un sistema del genere, lo spazio dindirizzamento pu` o essere riempito a chiazze di leopardo, a dierenza di ci` o che accade di solito (ovvero la memoria ` e riempita in maniera contigua): il programma che viene elaborato nel calcolatore deve essere conscio di questo problema. . . 10 Un ciclo di lettura/scrittura ` e indivisibile, una volta iniziato va per forza concluso. . . esistono delle eccezioni, come nel caso della memoria virtuale : questo ` e un sistema
8

18

I calcolatori elettronici

snooping agent, ovvero studia lattivit` a presente sul bus per vedere se ci` o che avviene lo riguarda. Un esempio di problema: quante volte la CPU accede al bus per eseguire le istruzioni: A=B+C D =EF G=AD 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 lexecute servono 3 cicli di bus: due son necessari per poter leggere gli operandi delle istruzioni e inne 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, ci` o non indica in quanto tempo viene eettivamente eseguito il programma.

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

Capitolo 2 Architettura dellhardware di un calcolatore elettronico


Larchitettura dellhardware di un calcolatore elettronico ` e denita dalla terna: Il set distruzioni, ovvero larchitettura vista dallutente: ` e detto anche codice macchina La struttura interna La realizzazione circuitale, cio` e la tecnologia microelettronica impiegata nella realizzazione Quello che si pu` o avere ` e che: Uno stesso set distruzioni pu` o essere realizzato con strutture interne diverse La stessa struttura interna pu` o essere realizzata con tecnologie diverse. Inne, architetture diverse hanno delle prestazioni diverse. Per esempio: aumentando il numero dei registri interni, si ha un minor trafco sul bus, con prestazioni migliori. . . ma allo stesso tempo si ha una rete logica pi` u complessa. Come valutare quindi le prestazioni?

Le prestazioni di un calcolatore: CP Utime

Le prestazioni di un calcolatore vanno sempre riferite a un programma di riferimento, detto benchmark. Il CP Utime o tempo di esecuzione ` e il parametro che caratterizza le prestazioni di un calcolatore rispetto a un determinato

20 benchmark:

Architettura dellhardware di un calcolatore elettronico

CP Utime = Nistruzioni CP Imedio Tck Dove:

(2.1)

N` e il numero di istruzioni per lesecuzione del programma (dipende sia dal benchmark scelto, sia dal linguaggio della macchina) CP Imedio ` e il numero medio di clock per ogni istruzione, dipendente dal benchmark e dalla struttura. Lo si pu` o determinare come
n

CP Imedio =
i=1

CP Ii

Ni numero totale delle istruzioni

(2.2)

dove CP Ii ` e il numero di periodi per eseguire listruzione i-sima del benchmark, e dove Ni ` e la frequenza dellistruzione i-sima. Se si ha un CP Imedio basso, signica che ` e basso il CPI delle istruzioni eseguite con frequenza maggiore. Tck ` e il periodo del clock della macchina, pari a 1 , ovvero linverfck so della frequenza del clock della macchina. Questa caratteristica dipende sia dalla struttura che dalla tecnologia utilizzata per realizzare lelaboratore Esistono dei programmi di alto livello per controllare le prestazioni di un calcolatore. Per esempio, il drystone ` e un programma in Fortran per controllare i processori, i compilatori, la memoria . . . , cio` e tutti gli elementi che inuenzano lecienza.1 Un altro parametro per le prestazioni ` e il milioni di istruzioni per secondi o MIPS : M IP S = Nistruzioni CP Utime 106 (2.3)

che fornisce unindicazione vaga della potenza di un processore (tuttavia, questo parametro dipende dal tipo di istruzioni considerate . . . )
Per quanto migliori la tecnologia, non esiste lecienza assoluta di un processore, perch` e dipende sempre a cosa ` e collegato e ai programmi che girano sul calcolatore
1

2.2 Le memorie

21

Inne, un altro parametro che si pu` o considerare ` e lo speed-up che corrisponde allaccorciamento nel tempo di esecuzione fra due processori diversi: SUA/B = CP Utime (B ) CP Utime (A) (2.4)

dove il processore B ` e il processore pi` u lento. Di norma, viene per` o rappresentato in maniera percentuale: SUA/B % = CP Utime (B ) 100 CP Utime (A) 1 (2.5)

Le memorie

I vari componenti tecnologici che possono costituire la memoria di un elaboratore 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 densit` a del componente corrisponde una maggiore velocit` a.

2.1

ROM e EPROM

In realt` a, oggi le ROM non esistono pi` u, un tempo venivano costruite su commissione. . . in realt` a si parla sempre si EPROM, ovvero di Erasable Programmable ROM. Si tratta di memorie non volatili, ovvero che non perdono le istruzioni memorizzate nel caso che la tensioni cada. Hanno quindi le istruzioni primarie dellelaboratore, e quindi stanno sul bus e vengono indirizzate direttamente dal processore. Le EPROM possono dipendere dalla temperatura. Il nome di una EPROM viene calcolato come 27 + numero dei Kbits. Per esempio, la EPROM 27512 ha 512 Kbits, cio` e corrisponde a 64 Kbyte di memoria.3 . Una EPROM si dice dual-line se ha i piedini su due lati.
A dierenza delle memorie statiche, dove linformazione viene memorizzata in un FF, nelle memorie dinamiche questa ` e memorizzata in un condensatore (l1 corrisponde al condensatore carico, lo 0 al condensatore scarico). A tempi ssi quindi le memorie dinamiche vanno rinfrescate, perch` e il condensatore comunque ha un suo tempo di scarica. . . tuttavia, questo refresh potrebbe provocare un conitto di accesso con il processore. . . sono quindi pi` u lente. 3 Importante: le EPROM vanno a multipli di 2, mentre le RAM a multipli di 4
2

22

Architettura dellhardware di un calcolatore elettronico

Alcuni commenti ai piedini delle EPROM: VCC corrisponde allalimentazione, mentre GND alla massa I bit A0 . . . A16 sono i bit di indirizzamento. Essendo 17 bit di indirizzamento, 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 decodica Il bit OE , Output Enable, ` e quello che indica se loutput ` e attivo. Se e come se non fossero collegate a non lo ` e, le uscite sono in tristate 4 , ` niente. Altre memorie che vengono utilizzate: le memorie ash, che sono EPROM cancellabili, ma dove deve essere cancellata tutta linformazione, e le OTPROM, One Time Programmable ROM (costano poco, e vengono usate per la costruzione delle macchine automatiche)

2.2

Spazio dindirizzamento e parallelismo

Nella gura si pu` o vedere il confronto fra memoria logica e memoria sica.

Figura 2.1: Memoria logica e sica


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

2.2.3 Ancora EPROM . . .

23

Il parallelismo indica il massimo numero di informazioni trasferibili in un ciclo di bus. . . da ci` o si potrebbe pensare di realizzare la memoria logica come un bus a 32 bit!

2.3

Ancora EPROM . . .

Nellesempio 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 pu` o osservare a cosa corrisponde il dato i-simo, ovvero al bit i-esimo della cella M-sima. Perch` e il dato sia disponibile, i bit CE e OE devono essere abilitati, cio` e bassi essendo logica negativa, perch` e il tristate faccia passare linformazione.

Figura 2.2: Circuito per decodicare i dati di una EPROM Tuttavia, fra lattivazione dei vari segnali dingresso e la disponibilit` a dei dati in output passa un certo tempo. Esattamente, si dice tempo daccesso il tempo necessario fra labilitazione 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 decodica, che ` e una rete combinatoria, ovvero si tratta di circuiti combinatori a pi` u livelli. . . il tempo dipende quindi dal numero di questi livelli.
In realt` a, come si pu` o vedere dal disegno, il tempo di attivazione dellOE ` e considerato. Ci` o che ` e trascurabile ` e invece il tempo del tri-state, rispetto a quello della decodica
5

24

Architettura dellhardware 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 pu` o scrivere in un normale ciclo di bus. Inoltre, si deve ricordare anche che le EPROM mantengono le informazioni senza aver bisogno dellalimentazione. . . esiste un piedino detto program (P RG ) che se viene attivato per un periodo considerato lunghissimo (circa 200-300 micro secondi), se si sforzano dei segnali sui piedini da dove si preleva i dati (ovvero i Di ), si pu` o scrivere allinterno 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

` un circuito bistabile per la Si parla innanzitutto di SRAM, Static Ram. E memorizzazione dellinformazione (utilizza un ip-op per memorizzare, e quindi necessita per forza di 2 transistor). In generale il tempo daccesso si aggira sui 50-60 secondi, nel ciclo di lettura. A dierenza delle EPROM, nelle RAM serve un piedino detto W E (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 dierenza 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 pi` u delle solite RAM, e hanno una densit` a circuitale inferiore (meno transistor, pi` u resistenze). Si ha quindi una maggiore temperatura interna e un numero maggiore di transizioni di correnti.
Considerando questo piedino e il piedino NC (Non Connesso, non ` e presente alcun collegamento interno per quel piedino), in teoria si potrebbe aumentare il valore della memoria (19 piedini, overro 219 che corrisponde quindi a 512 K celle. . . ma si tratta di circuiti diversi) 7 La disposizione sica di questi piedini ` e come quella delle EPROM, ovvero c` e una compatibilit` a meccanica.
6

2.2.5 Una cella di RAM

25

2.5

Una cella di RAM

Nel disegno si pu` o osservare una cella di RAM.

Figura 2.3: Una cella di RAM

Il bus dei dati ` e bidirezionale, mentre il bus degli indirizzi ` e monodirezionale. I segnali W R e RD corrispondono ai segnali W E 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 dalleventualit` a. Quello che si pu` o osservare ` e che su ogni lo sico esiste un unico segnale pilota a ciclo, ma possono essere presenti pi` u ricevitori. Come vengono decodicati gli indirizzi? Di norma mediante una serie di AND in riga e colonna. Per esempio, se si hanno 16 celle, queste si possono individuare unicamente con 4 diversi li (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 dellhardware di un calcolatore elettronico

I circuiti notevoli

In questa sezione verranno elencati e descritti alcuni circuiti notevoli per larchitettura di un calcolatore elettronico.

3.1

Il 244

Il vero nome di questo componente sarebbe 74xx 244, dove xx indica la tecnologia con cui ` e stato realizzato il circuito. Si tratta di un driver 3-state (restituisce 1, 0 oppure questo valore che non pu` o essere interpretato esattamente 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 buer. A cosa serve un buer? Un buer pu` o essere utilizzato: Per separare i monti, ovvero eletricamente i li Per rigenerare il segnale (ha un alto fan-out ) Nel disegno si pu` o vedere lo schema di un 244. Se il chip EN ` e attivo (cio` e

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 allinterno del calcolatore e consuma. Bisogna stare attenti alluso 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 prossimit` a della soglia per cui si pu` o riconoscere l1 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 buer bidirezionale : consiste fondamentalmente in 2 244 montati in maniera tale da poter trasmettere i dati da una serie di li a unaltra o viceversa (appunto, in entrambe le direzioni). Il 245 ` e anche detto transreceiver, ovvero` e un componente che trasmette e riceve. Nella gura si pu` o 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 deniscono il comportamento del 245: EN DIR 1 0 0 1 1 1 0 0 Risultato I due bus sono scollegati sicamente Si trasmette da A verso B, A B Si trasmette da B verso A, B A Combinazione impossibile da vericarsi

Un 245 si pu` o disporre fra una ram e il bus, in modo tale da fornire un potenziamento elettrico.

28

Architettura dellhardware di un calcolatore elettronico

3.3

Il 373

Si tratta di un 8-latch CD. Nella gura si pu` o 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 lingresso sulluscita. Se C ` e 0 invece, nel latch CD viene memorizzato lultimo valore presente su D (questi due segnali per` o 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 ip-op D, che viene anche detto registri edge-triggered con uscite 3-state : infatti i registri presenti nei calcolatori elettronici non sono nientaltro che un insieme

2.3.4 Il 374 di ip-op.

29

A dierenza del 373, il 374, avendo appunto dei ip-op D, campiona lingresso quando il clock passa da 0 a 1. Inoltre, nella realt` a, ad ogni ip-op c` e un MUX a cui ` e collegato il segnale di W R : se il segnale non ` e abilitato, allora il ip-op mantiene in memoria il dato.

Capitolo 3 Il linguaggio macchina (Istruction Set Architecture ISA)


Il linguaggio macchina1 serve per programmare il processore. Pi` u precisamente lISA ` e il livello dellarchitettura della CPU visibile a chi sviluppa i compilatori e a chi programma in assembler2 . LISA ` e costituita dallinsieme delle istruzioni eseguibili e dal loro formato binario. Mediante queste istruzioni saccede alle risorse interne dellelaboratore: Memoria Registri Variabili di stato (o variabili di sistema o ag). Tra le risorse interne al calcolatore, solo quelle accessibili attraverso lISA possono essere rese visibili e controllabili dal software. LISA viene principalmente valutato in base allecienza del codice generato dai compilatori (si deve quindi minimizzare il pi` u possibile il CP Utime . Cosa deve contenere unistruzione? Il tipo delloperazione (anche detto codice operativo )
Si tratta di linguaggi super-set, quando ` e necessario si aumentano il numero delle istruzioni, mantenendo comunque quelle vecchie, anche la decodica 2 La dierenza fra il compilatore e lassemblatore ` e: il compilatore genera un linguaggio indipendente dalla macchina, mentre lassemblatore genera del codice che dipende strettamente da come ` e stata progettata la macchina, come lISA
1

32

Il linguaggio macchina (Istruction Set Architecture - ISA) Da dove si prendono gli operandi dellistruzione (gli indirizzi3 che contengono gli operandi sorgente ) La codica del registro R1 (cio` e loperando destinazione )

Tutte queste informazioni sono bit, che devono essere correttamente interpretati. Il problema ` e che la dimensione dellistruzione 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 no 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.

Rappresentazione simbolica delle istruzioni macchina: lassembler

Il linguaggio assemblativo fa riferimento alla macchina stessa: lassemblatore ` e quella struttura che si preoccupa di convertire le istruzioni in linguaggio macchina. Per esempio: add R1 , A, B signica per il processore che deve fare la somma fra gli operando agli indirizzi 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 istruzioni a linguaggio macchina incide notevolmente sullecienza della macchina stessa, n particolare, le traduzioni da linguaggio di alto livello a linguaggio assemblativo.
Di norma gli operandi son contenuti in memoria, per questo si passano gli indirizzi I campi non sono a lunghezza nita: i primi bit indicano appunto alloperatore la lunghezza dei campi. Il codice operativo usato ` e quello della Intel
4 3

3.2 Classicazione dei linguaggi macchina

33

Classicazione dei linguaggi macchina


1. Il numero delle operazioni eseguibili 2. Le tecniche dindirizzamento (cio` e le modalit` a di calcolo dellindirizzo degli operandi in memoria) 3. La sede degli operandi allinterno della CPU (ovvero la presenza di stack, accumulatori e registri. Al crescere del numero di registri, migliora lecienza della macchina) 4. Il numero degli operandi che possono comparire in unistruzione (da 05 a 3). 5. Gli operandi immediati: un operando immediato ` e un operando che risiede direttamente nellistruzione come, per esempio, una costante. Si ha quindi che il valore ` e allinterno del codice, ma ci` o richiede un codice operativo diverso . . . 6. La lunghezza delle istruzione (ssa o variabile) 7. Il numero degli indirizzi indirizzabili.

I linguaggi macchina vengono classicati in base a:

Tipologia delle istruzioni


Aritmetiche e logiche Istruzioni di trasferimento dati: LD indica Load, ovvero quando si carica 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 mov mov ax, B C, ax al, B (si pone il dato in una cella) (da una cella si pone il dato in una variabile) (invece che 16, si spostano solo 16 bit)

Esistono diversi tipi di istruzioni che possono essere eseguite:

. . . 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!!)
Unistruzione a 0 indirizzi ` e unistruzione riferita ad uno stack (ovvero una push o una pop)
5

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 luso di registri e ALU diversi da quelli usati di solito.

3.1

Tecniche di indirizzamento degli operandi in memoria

Gli operandi possono essere indirizzati in due diversi modi: 1. Lindirizzamento diretto o per nome o a load time. Si tratta di indirizzi deniti allatto del caricamento in memoria. 2. Lindirizzamento indiretto p indiciato. In questo caso invece lindirizzo deve essere calcolato allinterno dellistruzione. Esempio:
mov ax,alpha[SI]

In questo caso lindirizzo delloperando ` e pari alla somma fra la costante alpha e SI, che ` e un registro che contiene lindice del vettoree. Si hanno quindi cos` degli indirizzi variabili dinamicamente, calcolati a run-time. Questo pu` o 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

CICLO ` e un label, serve per marcare listruzione a cui tornare per poter eseguire correttamente il ciclo.

3.3.2 Classicazione in base agli operandi

35

3.2

Classicazione in base agli operandi

In generale gli operandi di unistruzione sono 2: un registro interno (la destinazione del risultato delloperazione) 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 laccumulatore della CPU. 3. GPR Architecture: General Purpose Register, gli operandi sono presenti in registri interni o in memoria. Unaltra classicazione ` e mediante il confronto fra il numero degli operandi e il numero degli indirizzi: Numero degli operandi Numero degli indirizzi 3 2 3 0 1 3 Denizione R-R (Register-Register) M-R (Memory-Register) M-M (Memomry-Memory)

Alcune denizioni e istruzioni

Prima di tutto, il nome di alcuni importanti multipli del byte: Una word ` e uninformazione memorizzata in 2 byte Una double word corrisponde quindi a 4 byte Una q-word o quad-word corrisponde inne a 8 byte. Sia mov ax, B e sia B una word. Allora quello che si muove ` e il byte allindirizzo B e quello allindirizzo B + 1! Qui di seguito sono riportate alcune istruzioni: Istruzione << n >> n xn...m (x)
n

Descrizione Vengono inseriti n zeri a destra Vengono inseriti n zeri a sinistra Vengono considerati solo i bit da m a n, m < n Linformazione viene ripetuta n volte Contenuto di celle di memoria adiacenti a partire dallindirizzo x Concatenazione Trasferimento di un dato, con dimensione pari alla destinazione Trasferimento di un dato a n bit

M [x ] ## n

36

Il linguaggio macchina (Istruction Set Architecture - ISA)

Lultima istruzione viene usata quando il numero di bit da trasferire non ` e noto a meno di speciche. Come vengono memorizzati i dati mulitbyte in memoria? Esistono due diversi modi per memorizzare i multibyte. . . prima di tutto, deniamo come byte w alfa il byte costituito dai valori 33 e 77: 3377. Lestremit` a 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 ` quello usato dalla Intel caso del byte w alfa). E ` il metodo usato Big Endian : si legge prima il byte pi` u importante. E 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 allindirizzo A. Allora si dice che B ` e allineato se A ` e multiplo di m, cio` e: Indirizzo(B) mod m = 0 (Condizione di allineamento)

Lallineamento ` e importante perch` e dipende da come ` e stata costruita sicamente la memoria. Si prenda in esame la gura: Quello che si ha per esempio

Figura 3.1: Memoria logica e memoria sica 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! Lallineamento ` e una caratteristica molto utile: i dati allineati si leggono pi` u velocemente (alcune ISA lo richiedono, fra cui il DLX).

Capitolo 4 ISA DLX


Caratteristiche generali dellambiente 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 oating point Le istruzioni sono allineate a indirizzi multipli di 4 (Essendo a 32 bit, cio` e 4 byte, la prossima istruzione si trova allistruzione PC + 4) Lo stack ` e gestito dal software Nelle istruzioni di tipo JL lindirizzo di ritorno ` e salvato in R31 Non esistono ag, le condizioni sono espresse da istruzioni (set condition) Registro ag per i oating point Un solo metodo dindirizzamento

Formati delle istruzioni nelle architetture R-R (DLX)

La lunghezza delle istruzioni ` e 32 bit (232 = 4GByte), e sono suddivisibili in tre diverse tipologie:
1

Non si considerato i registri a virgola mobile

38 Istruzioni di tipo R :

ISA DLX

Codice operativo RS 1 RS 2 Rdes Estensione al codice operativo


6bit 5bit 5bit 5bit 11bit

Corrispondono alle comuni istruzioni logiche del tipo:

Rdes RS 1 operator RS 2 Istruzioni di tipo I : Codice operativo RS 1 RS 2 Operando immediato


6bit 5bit 5bit 16bit

Esempi sono le load, store, alu con operando immediato, JR, . . . Istruzioni di tipo J : Codice operativo Oset di 26 bit
6bit 26bit

Si tratta di istruzioni per il trasferimento di controllo diretto e incondizionato, come J (Jump: Salto incondizionato) e JL (Jump and Link: chiamata a procedura, salva lindirizzo di ritorno in R31 ) 2 .Loset 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 ... NellISA DLX ` e importante ricordare che le word sono di 32 bit.
2

Esiste anche il salto condizionato, ovvero il branch Sulle slide si trova lelenco completo 4 Si tratta di operazioni con operando immediato
3

4.1.1 IA 16

39

1.1

IA 16

` unaltra ISA molto nota. . . Le caratteristiche salienti sono: E 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 dindirizzamento ` 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!)

ISA DLX: Implementazione mediante la struttura sequenziale

Un calcolatore (una CPU) ` e costituito da ununit` a di controllo 5 e da un data path 6 . Come si pu` o vedere nella gura sulle slide, le due strutture comunicano fra di loro. Entrambe ricevono il segnale di clock per lavorare, e inoltre allU.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 lattivit` a della CPU. Interrupt: segnale usato per interrompere lattivit` a della CPU a favore delle periferiche Ogni operazione appartenente allinstruction set ` e eseguita mediante una successione di operazioni elementari, dette micro-operazioni. Una micro-operazione ` e eseguita allinterno 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 ne di specicare lesecuzione di una
Struttura che istruisce i registri e le trasformazioni. Per esempio genera gli OE e il clock enable per i registri, i bit di controllo dellALU. . . 6` E linsieme dei registri pi` u i li di interconnessione e le unit` a di trasformazione, come per esempio la CPU
5

40 determinata micro-operazione.

ISA DLX

Nel primo esempio di struttura del DLX sequenziale, le caratteristiche principali 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 lALU). I registri (esclusi quello che vanno da R0 a R31 ) sono ignoti al programmatore. Il Register File ` e un insieme ordinato di le, ovvero di registri noti al programma. I registri A e B sono due registri intermedi fra il register le 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 ecienza. Ad ogni ciclo di bus ` e presente ununica sorgente. LInstruction Register ` e una struttura presente allinterno della Control ` collegato solo ai bus. Unit che contiene listruzione7 da eseguire. E Il Program Counter ` e sempre un registro a 32 bit, ma di cui sono signicativi solo i primi 30 (gli ultimi due sono sempre a 0). Questo perch` e le istruzioni sono allineate a multipli di 4, e quindi PC = PC + 4. MDR (Memory Data Register ) ` e un registro di transito dei dati scambiati 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 lindirizzo 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 lunico registro temporaneo presente. IAR ` e lInterrupt Address Register IEN ` e lInterrupt Enable Flag La lettura dellistruzione ` e lunica istruzione che va in parallelo alla somma del PC + 4 nella ALU. Tutte le altre operazioni e microoperazioni sono sequenziali
7

Osservazione 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 deniscono le seguenti misure: 1. TC (max): ` e il massimo ritardo fra il clock e i segnali di controllo dellU.d.C. 2. TOE (max): ` e il massimo ritardo tra il segnale di Output Enable dei 3-state e listante in cui i dati sono disponibili sul bus 3. TALU (max): ` e il massimo ritardo dellALU 4. TSET U P (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 U P (min) (4.1) Da ci` o quindi si deduce che ` e meglio avere un numero di operazioni maggiore, ma il pi` u corto possibile (in questo modo si progetta con una migliore ecienza). Se il PC fosse un registro pi` u un contatore per determinare lindirizzo dellistruzione successiva, non si dovrebbe aspettare che lALU si liberi per calcolare.

Il diagramma degli stati del controller

Nello schema ` e rappresentato la parte del diagramma a stati comune a tutte le operazioni: M AR P C IR M [M AR] (Ripetuto no a quando non ` e ready) PC PC + 4 A RS1 B RS2 In seguito le istruzioni vanno allALU, al data transfer. . . (Decode) (Fetch)

42

ISA DLX

Nel graco manca che alla seconda istruzione ` e collegato il segnare di Ready come loop. . . Infatti il segnale di Ready ` e collefato in maniera combinatoria con lInstruction Register, in modo da ritardarlo nch` e 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 complessit` a circuitale: ci` o che non si pu` o fare nel tempo si fa nello spazio. . . ). In teoria si potrebbero unire la lettura della memoria con lincremento 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 listruzione per caricare un solo byte (LB). . . NellIR listruzione si trova codicata in questo modo (supponendo LB . LB. RS 1 ovvero R2 R5 10. 10 corrisponde alloset, la parte che deve essere sommata alle altre informazioni per poter ottenere lindirizzo, RS 1 contiene lindicazione del registro di partenza (che corrisponde anche al registro A!), mentre in RS 2 ` e contenuto il registro di destinazione. Tradotto secondo il diagramma degli stati del controller diventa M AR A + (IR15 )16 ##IR15...0 C (M DR7 )24 ##M DR7...0 RD C ` unoperazione di tipo I come si pu` E o vedere, e si deve anche notare che il segnale di ready, nel caso della LB, ` e presente due volte quindi. Resta da denire il problema del segno, che ` e presente sia nellindirizzo (per poter fare la somma a 32 bit) che nel dato. Per poter decidere se ` e un valore (Bit del segno ripetuto per 16 volte) R5 , 10(R2 )):

M DR M [M AR] (Ripetuto no a quando non ` e ready)

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 dallunit` a 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 lintera parola. 1. In un registro di memorizza la word in AND con una word di tutti 1 tranne gli 8 bit meno signicativi, che son quindi tutti a 0. Questo registro Rx risulta quindi avere un dato nei bit pi` u signicativi e gli 8 bit meno signicativi a 0. 2. In un altro registro Ry si memorizza la word in AND opposta, ovvero dove gli 8 bit meno signicativi son tutti 1 e gli altri son a 0. 3. Inne, facendo lOR fra i due registri, si ottiene un registro con lultimo byte che corrisponde al byte che si voleva trasferire. Un ulteriore osservazione: in LB, LH, LBU, LHU, RS 2 non serve, non si mette in quel registro il dato. Si ha che RD = RS 2 solo se questo ` e un operando immediato. Se in TEMP si deposita o il valore del registro B o loset nel caso di operazioni immediate con segno esteso, gli operandi dellALU diventano solo il registro A e il registro TEMP (per esempio, nel caso di somme, sottrazioni. . . fra registri) Come possiamo denire le operazioni di salto? Nel caso di salto condizionato, con 1 si salta, 0 no. Il bit meno signicativo pu` o 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 lindirizzo di ritorno nel registro R31 !) (detto anche salto ad una subroutine ). Questo ` e lunico modo in cui si pu` o fare, perche` e non ` e presente alcuna struttura che possa fare da stack. Nel caso del JAL quindi (Jump And Link) si ha che P C P C + (IR25 )26 ##IR25...0
Osservazione: per ogni registro son presenti 64 3-state, dal quale segue che son 32 per ogni BUS
8

44

ISA DLX In questo caso, loset ` e pari a 26 bit, ma se si vuole saltare (per esempio) solo di 10 unit` a, basta che loset sia pari a 6. Infatti, al PC ` e gi` a stato aggiunto 4 come valore, fatto direttamente dal compilatore! Nel caso del BRANCH, invece, si ha un oset pari a 16 bit.

I passi dellesecuzione delle istruzioni


1. FETCH: Si legge listruzione, e viene posta nellIR 2. DECODE: Listruzione viene decodicata e vengono prelevati gli operandi sorgente dal register le 3. EXECUTE: Elaborazione aritmetica o logica mediante lALU 4. MEMORY: Accesso alla memoria e, nel caso di BRANCH, aggiornamento del PC (operazione che ` e detta Branch completition) 5. WRITE-BACK: Scrittura dei risultati nel register le.

Lesecuzione delle istruzioni pu` o essere scomposta in 5 passi:

Se si esegue unanalisi delle istruzioni pi` u accurata, si pu` o denire unarchitettura nuova, pipelined, che risulta anche essere pi` u eciente: FETCH M AR P C IR M [M AR] DECODE A RS 1 B RS 2 PC PC + 4 EXECUTE Memoria: M AR A + IR0...15 ##(IR15 )16 M DR B
9
9

RD corrisponde a RS 2 solo nelle store!

4.4 I passi dellesecuzione delle istruzioni ALU: C A op B (oppure IR0...15 ##(IR15 )16 ) Branch: T EM P P C + IR0...15 ##(IR15 )16 CON D A op 0 MEMORY Memoria: M DR M [M AR] (LOAD) M [M AR] M DR (STORE) Branch: IF (cond) WRITE-BACK C M DR (Se ` e una load) RD C P C T EM P

45

Capitolo 5 ISA Pipelined


Mediante il principio del pipelining si pu` o rendere pi` u veloce la CPU. Supponiamo di avere un sistema S che deve eseguire N volte unattivit` a A (` e come una catena di montaggio). Deniamo quindi le seguenti propriet` a: Si dice latency il tempo che intercorre fra linizio e il completamento dellattivit` a A (indicato da TA ) Si dice throughput la frequenza con cui vengono completate le attivit` a Cosa vuol dire che il sistema non ` e pi` u sequenziale? Signica che si vuole iniziare unistruzione ad ogni ciclo di clock, nonostante la precedente non sia ancora nita. Supponiamo che lattivit` a A sa costituita da 4 sottoattivit` a pi , da eseguire in sequenza, di durata uguale. Nel caso sequenziale, non potendo suddividere lattivit` a A, si ha che TA il tempo di ogni attivit` a TP i = corrisponde anche al tempo di un 4 1 pipeline cycle, TP . Lo throughput ` e quindi pari a TA Ma se questo sistema si rapresentasse mediante un sistema pipeline, si 1 4 avrebbe s` che TA = 4 TP , ma il throughput sarebbe pari a = , TP TA 4 volte superiore!! Ecco quindi il grande vantaggio di una pipeline: lo throughput ` e molto maggiore a quello corrispondente a un sistema sequenziale.

CPU DLX Pipelined

I 5 stadi deniti nel capitolo precedente (InstructionFetch, InstructionDecode, Execute, MEMory, WriteBack) corrispondono a dei circuiti combinatori,

48 separati da registri ip-op di tipo D.

ISA Pipelined

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. Nellintervallo che separa il CLK1 dal CLK2, i dati memorizzati nei registri vengono utilizzati dal blocco combinatorio 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 allunit` a successiva (idealmente sulla destra). E unarchitettura totalmente diversa, in cui ogni stadio opera in maniera indipendente. 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 pi` u lento (Tp ) e dal tempo di set-up del registro a valle. Da osservare che il dato viene campionato nel registro di destinazione alla ne dello stadio di WB, ma ci` o potrebbe causare problemi, visto che sia lo stato di WB e MEM interagiscono entrambi con il registro MDR e son consecutivi. Per evitare questi problemi, in realt` a si usano due dierenti MDR (MDR e SMDR), in questo modo si pu` o gestire una load subito seguita subito da una store. Si ha quindi che gli stadi di WB e MEM possono essere benissimo sovrapposti! Si possono sovrapporre due dati in attesa di essere scritti, uno in memoria e uno sul register le.
1

In realt` a, in caso di reti combinatorie velocissime, si devono inserire dei ritardi, aumentando quindi il tempo di hold dei ip-op dei registri

5.1.1 Larchitettura Harvard

49

Quando va incrementato il PC? Al termine di ogni stadio di Fetch, ` e separato dallALU dello stato di EX!

1.1

Larchitettura Harvard

In ogni ciclo di clock deve essere possibile eseguire due accessi alla memoria (negli stadi di IF e MEM), uno per accedere allInstruction Memory, e laltro al Data Memory. La soluzione a questo problema ` e data dallutilizzo dellarchitettura 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 dallALU. In un MUX si pu` o scegliere fra PC e dato del registro A e nellaltro fra il dato del registro B e un dato immediato con segno espanso. In questo modo le possibilit` a possibili sono: Calcolo del nuovo PC in caso di salto, usando loset necessario Si pu` o eseguire il salto ad un registro specico Eseguire unoperazione fra il dato contenuto nel registro A e un dato immediato Eseguire unoperazione fra i dati contenuti nei due registri A e B Ma chi specica allALU qual` e loperazione da eseguire, e seleziona i dati corretti sui due MUX? Listruzione che viene portata avanti da uno stato allaltro, 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. Alluscita si ha il dato letto. Solo quando si raggiunge lo stadio di Write-Back si pu` o usare il register le (altrimenti si potrebbe avere delle situazioni di conitto). Solo nello stadio di WB si pu` o scrivere.
2

Nei Pentium ci` o 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.

Alee nelle pipeline

Si verica una situazione di alea o hazard (malfunzionamenti intrinsechi) quando, in un ciclo di clock, unistruzione presente in uno stadio della pipeline, non pu` o 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: unistruzione legge un registro scritto dallistruzione precedente. Se il dato non ` e gi` a stato scritto, si ha una situazioen derrore, 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 unistruzione viene bloccata perch` e non pu` o essere eseguita. Come si pu` o fare per evitare le alee di dato (un possibile stallo quindi)? Si utilizza una tecnica detta forwarding. Per poter far ci` o, 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 unoperazione di LOAD pu` o dare atto ad unalea di dato), deve essere stallata la pipeline, per un clock. Si parla di delayed load quando lalea ` e gestita dal compilatore via software. Quello che il compilatore fa ` e cercare di riempire tutti i delay-slot con unistruzione utile, e nel caso peggiore inserisce una NOP, No OPeration. Ecco
Suddividere 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 un periodo intero
3

5.2.1 Alee di controllo unesempio: LW R1 , 32(R6 ) LW R3 , 10(R1 ) ADD R5 , R1 , R3 LW R6 , 20(R7 ) LW R8 , 40(R9 )

51

Per evitare lo stallo, viene modicato lordine di queste istruzioni, anticipando 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 esempio 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. Ci` o si potrebbe ottenere in due diversi modi: 1. Si stalla la pipeline per 3 clock, in questo modo non si scrive sul register le o in memoria, e non si ` e caricato il nuovo PC 2. Altrimenti, si eseguono le istruzioni no 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 pu` o essere gestito via software dal compilatore (si parla di delayed branch ). Quello che si fa ` e anticipare le istruzioni 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 lALU indipendente dal branch (ma ci` o richiede un full-adder inevitabilmente pi` u 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 pi` u complessa (ci` o che non si pu` o fare nel tempo si fa nello spazio).4

2.2

Branch Target Buer

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 lindirizzo 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 allindirizzo correntemente usato ` e associato un branch in questo buer. Si hanno due possibili casi: Hit: Si esegue il fetch allindirizzo predetto Missi: Si esegue il fetch a PC + 4. Se quindi si riconosce lindirizzo di un branch, si esegue il salto, visto che si ha gi` a a disposizione lindirizzo di destinazione. Esistono comunque il problema 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 linformazione taken/untaken? Normalmente due bit, tenere memorizzata solo lultima informazione in un unico bit pu` o causare errori!

Si potrebbe anche usare ladder del PC con una serie di MUX per scegliere se sommare 4 o loset e se usare PC o PC1

Capitolo 6 Decodica 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 sica (lindirizzo a quale banco di RAM appartiene?) per poter indicare al processore come raggiungere una determinata periferica Il chip select ` e appunto quello strumento sico che serve per capire quale componente sico si sta indirizzando. Si tratta quindi di realizzare una decodica 1 di determinati segnali per poter individuare, in maniera univoca, cosa si sta indirizzando. Lindirizzo emesso dal processore deve contenere due informazioni: Una parte individua il dispositivo sico, in maniera univoca Unaltra parte individua cosa si vuole indirizzare del dispositivo (nel caso di memorie: lindirizzo indica sia il banco di memoria che la cella) Per poter realizzare tutto ci` o, si utilizzano delle PAL, Programmable Array Logic. ` importante notare che lo spazio di indirizzamento delle memorie deve esseE re diverso dallo spazio di indirizzamento dei dispositivi di I/O2 . In generale, lo spazio dindirizzamento per i dispositivi di I/O ` e pari a 64 Kbyte, e quindi
Una decodica ` e una funzione combinatoria: da n segnali di input, si ottengono m segnali di output = 2n 2 Il DLX in realt` a usa il sistema memory mapped
1

54

Decodica indirizzi e mapping

` quindi necessario un bit che indichi son necessari 16 bit per indirizzamento. E se ` e un indirizzo di memoria (1) o di I/O (0). Dora 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 decodica risulta essere alquanto semplice: ` e sempre un prodotto logico (altrimenti, diventa la somma di prodotti logici . . . ) Esempio: supponiamo di voler avere una memoria logica da 32 Kbyte (215 ), utilizzando come componenti sici dispositivi da 8 Kbyte (213 ). Da ci` o risulta che lindirizzo di memoria logica risulta essere lungo 15 bit, ma i 13 bit meno signicativi 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 congurazioni dei due bit pi` u signicativi sono usate per indicare il dispositivo corretto3 : CS1 = AD14 AD13 CS2 = AD14 AD13 CS3 = AD14 AD13 CS4 = AD14 AD13 Si pu` o anche analizzare il problema inverso. Supponiamo di avere unEPROM da 2 MByte, son sucienti 21 bit (221 = 21 MByte). Nel caso dell8088, quante memorie da 2 MByte ci stanno? Essendo 32 i bit dindirizzamento dell8088, si hanno a disposizione 32 21 = 11 bit per poter indirizzare i singoli dispositivi. Si possono quindi avere no a 211 diversi dispositivi. Si possono vericare casi in cui si deve determinare i chip select di dispositivi di dimensione diversa, ma comunque allineati. Supponiamo per esempio di aver gi` a inserito 3 memorie da 2 MByte, come si pu` o congurare 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
3

Da ricordare che i Chip Select sono in forma negata

6.1 Decodica parziale AD31 AD30 . . . AD22 AD21 AD20

55

Nel caso di dispositivi non allineati, la codica ` e pi` u complessa. Si immagini per esempio di voler codicare una memoria sica da 8 Kbyte in una memoria logica da 32 Kbyte, ma non allineata (occupando quindi met` a di unallocazione e met` a di unaltra): 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 met` a coinvolte nella decodica!

Decodica parziale

In generale, la disposizione della RAM e della EPROM sicamente ` e tale da poter permettere quella che ` e detta decodica parziale. Si immagini che 2 Kbyte di RAM siano allocati nella parte bassa della memoria logica, mentre 4 Kbyte di EPROM siano allocati nella parte alta della memoria logica (laltra estremit` a)4 , in uno spazio totale di 32 Kbyte. La decodica quindi risulterebbe essere: CSEPROM = AD14 AD13 AD12 (bastano 12 bit) (Bastano 11 bit)

CSRAM = AD14 AD13 AD12 AD11

Ma in questo caso si potrebbe pensare di ridurre la complessit` a della decodica, proprio perch` e le due memorie appartengono a met` a diverse della memoria logica (alta/bassa). Per esempio, si potrebbe utilizzare proprio AD14 per distinguere fra le due memorie. Lidea ` e proprio quella di utilizzare il minor numero possibile di bit per non creare ambiguit` a con altre memorie. Da notare che la visibilit` a di un dispositivo aumenta di 2m , con m il numero di bit ora ininuenti per la decodica. Allaumento dei dispositivi, infatti, si cerca di trovare un bit tale da discriminare le memorie di nuovo (una sorta di metodo dicotomico!)
4

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

Capitolo 7 L8088
L8088 ` e il processore capostipite della famiglia Intel: certe caratteristiche tecnologiche si possono ancora notare nei processori moderni, tanto che lo studio di questo processore aiuter` a molto a studiare processori come l8086, il Pentium I, e cos` via. . .

Una prima descrizione del processore: i segnali

Qual` e lattivit` a che un processore deve svolgere? Un processore non deve fare nientaltro che trasferire dati dal mondo interno al mondo esterno. Questa ` e lunica vera attivit` a, ma allo stesso tempo pu` o essere alquanto complicata (cosa ` e il mondo esterno? E se giungono pi` u segnali dal mondo esterno?). A questo proposito due segnali importanti da notare subito sono1 : INT: Questo ` e un segnale che proviene dallesterno, e indica la presenza di uninterruzione, una forzatura che viene inviata al processore. Quando il processore riceve questo genere di segnale, deve interrompere le attivit` a 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 pi` u dispositivi master, e indica appunto al processore se ` e presente o meno un dispositivo che sta facendo richiesta di divenire master L8088 ha un impaccamento a 40 piedini: la mancanza di spazio ha costretto i progettisti a dover mettere i risultati delle elaborazioni del processore
1

Da notare: la disposizione sica dei segnali ` e diversa da quella logica a volte presentata

58

L8088

sullo stesso bus dei dati (per questo i segnali si muovono da e verso il processore. . . Inoltre, si dice che il bus dell8088 ` e demultiplexato). Si ha quindi tendenzialmente un ritardo, e serve un apposito tempo per poter catturare 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 trasferire 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 dindirizzamento dell8088 ` e pari a 1 Mega (220 ) Il processore ha in realt` a due modi di funzionamento, minimum e maximum mode, determinato dal bit MIN/MAX*2 Analizziamo quindi alcuni dei segnali presenti nell8088: Son presenti due masse (GND). Questo ` e dovuto al fatto che il rumore delle masse ` e molto pi` u pericoloso del rumore sullalimentazione (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 sullapposito 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 perch` e 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 interruzioni, sono i segnali preposti appunto per la gestione delle interruzioni.
Si suppone che l8088 lavorer` a sempre in minimum mode. In questo caso quindi, nel caso di segnali che possono avere comportamenti diversi a seconda del modo, indicati con una struttura come A/B, il segnale generato ` e sempre quello a sinistra (A in questo caso) 3 L8088 lavorava a 5 volt, ma oggi si usano potenziali inferiori
2

7.2 Registri Interni

59

Registri Interni

L8088 ` e un processore segmentato. Questo signica che il processore, per la costruzione dellindirizzo, per quanto riguarda gli accessi alla memoria, fa riferimento a 4 registri di segmento, ognuno a 16 bit: Code Segment Data Segment Stack Segment Extra Segment Oltre ai registri di segmento, ci sono anche degli altri registri detti accumulatori: 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 losoco (quando si pensa al programma, lo si ` e gi` a 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 autonomamente incrementati (servono per esempio per poter scorrere un vettore), e registri di ag che son pure indirizzabili (son dei ip-op, settabili individualmente, ma raggruppati in registri)5 . Esistono quindi dei puntatori, lo Stack Pointer e lInstruction Pointer (questo ` e esattamente equivalente al PC). Si ha quindi che lindirizzo corrente ` e dato dallIP 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 pu` o quindi ottenere lo stesso indirizzo sico come somma fra due diverse coppie di addendi, i segmenti si possono sovraporre. Lindirizzo ` e quindi dato dalla somma fra la base del segmento e loset del segmento.
Essendo lo stack sempre a 16 bit, son necessari due cicli di bus nell8088 per aggiungere un dato. 5 Esempio: Il registro IF abilita o meno il processore per le interruzioni (cio` e, il processore potrebbe anche essere insensibile alle interruzioni). Questi set/reset son possibili sia via software, sia grazie allesecuzione di particolari istruzioni
4

60

L8088

Osservazione: I segmenti son allineati a 16 bit, ma gli indirizzi son a 20 bit. . . si ha quindi che nella generazione dellindirizzo, i 4 bit meno signicativi sono a zero. Lindirizzo ` 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 indirizzi sono relativi alla base del segmento. Non esistono indirizzi assoluti (si dice rilocazione dinamica ): si possono spostare 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 pu` o avere un compattamento della memoria. In realt` a, la rilocazione dinamica ` e unoperazione lunga e costosa, e non viene eseguita mai. La protezione in realt` a nell8088 non esiste, ma si tratta di un sistema che garantisce che un errore non vada a modicare del codice in maniera errata.

2.1

Modalit` a dindirizzamento

Esistono 5 diversi modi per indirizzare7 , a seconda dei registri coinvolti: Diretto: segmento + oset Basato: segmento + (base + oset) Indicizzato: segmento + (indice + oset) Indicizzato basato: segmento + (indice + base + oset) Indiretto: segmento + (indice + base)
Da ricordarsi che il riporto viene tagliato via e aggiunto il segmento, non si pu` o mai andare oltre ai 64 Kbyte; i valori oltre a 16 bit vengono troncati. Se si sbaglia nella generazione dellindirizzo, il processore si blocca 7 Non tutte le istruzioni si possono indirizzare in tutti i modi, e lunico modo per sapere come indirizzare ` e consultare il manuale dell8088.
6

7.3 Altre caratteristiche dell8088

61

Lultimo metodo richiede un doppio accesso alla memoria (infatti, viene calcolato questo indirizzo, a cui si riperisce non un dato, ma un ulteriore indirizzo di memoria che contiene il dato/listruzione necessaria). Da ricordarsi che il segmento va sempre traslato di 4 posizioni, e che devono essere eseguite prima le operazioni presenti nella parentesi.

Altre caratteristiche dell8088

Come gi` a detto, il bus dei dati dell8088 ` 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 realt` a non son tutti noti al programmatore, anzi! Nei processori moderni si ha avuto un aumento proprio dei registri non noti al programmatore, mentre quelli noti son rimasti circa uguali.9 La struttura dell8088 non ` e pipelined, ma ` e possibile suddividere la rete logica in 2 grandi parti (ognuna di queste sezioni ha un suo controllo. . . ): lExecution Unit La Bus Interface Unit Queste strutture cercano di lavorare il pi` u possibile in parallelo. Per esempio, loset viene calcolato nella ALU della EU, e quindi ` e riportato alla BIU. L8088 ` e poi dotato di una Instruction Queue : questa contiene i primi 4 byte successivi allistruzione corrente. Il sistema cerca quindi di approvviggionarsi in anticipo ! Se la EU non sta facendo operazioni di memoria, la BIU ` e libera di prendere dalla memoria questi byte successivi (per questo si dice che cercano di lavorare in parallelo). In tutti gli altri casi, la EU ha la priorit` a per accedere alla memoria. In questo modo comunque si sfrutta al meglio il BUS (funziona un po come le memorie cache, che si vedranno nel corso di Calcolatori Elettronici LS).
LMDR ` e un registro a 8 bit Esempio 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)
9 8

62

L8088

Caratteristiche del BUS


1. Prima si lindirizzo della cella a cui si vuole accedere (di memoria, o indirizzo del registro) 2. Poi si esegue il vero e proprio trasferimento

Il BUS ` e multiplexato nel tempo :

2 Il clock del BUS dell8088 ` e un po anomalo: ` e a livello basso per , mentre 3 1 ` e a livello alto per Il minimo clock di BUS ` e pari a 4 clock di CPU (detti 3 T1...4 ). Da notare che solo in T1 viene attivato il segnale di ALE, che ` e il segnale necessario per campionare lindirizzo emesso dal processore proprio nel periodo T1 ! Il ciclo quindi inizia inserendo sia lindirizzo che la tipologia dellindirizzo (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 realt` a, anche questi devono essere campionati. . . La fase dindirizzamento termina in T2 . Quando viene abbassato il segnale di ALE, il processore non pilota pi` u 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 allOE* delle memorie coinvolte nel trasferimento, e quindi si ha che le memorie pilotano il bus ! Come si pu` o de-multiplexare il BUS? Si utilizzano dei 373 (LATCH CD) per campionare gli indirizzi. Vengono utilizzati i 373 perch` e riproducono subito lingresso in uscita, e sono quindi pi` u veloci dei 374. Inoltre, i 473 sono degli amplicatori di FAN-OUT, e ci` o aumenta la capacit` a 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 conitti 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 conitti elettrici (va collegato allEN* del 245). Si ha quindi che non si pu` o leggere o scrivere nch` e non si son campionati gli indirizzi sul 373.

Generazione dei segnali per pilotare il bus, i comandi

Di seguito son riportati i comandi necessari per pilotare il bus, e le le loro decodiche: M W RC = IO/M + W R M RDC = IO/M + RD IOW RC = IO/M + W R IORDC = IO/M + RD segnali di scrittura/lettura in memoria segnali di scrittura/lettura in I/O

C` e per` o da considerare un fatto: allaumentare della logica dei segnali (creando reti logiche sempre pi` u complesse) si introduce un maggior ritardo, e si ha quindi un potenziale aumento del numero degli stati di WAIT.10 La soluzione addottata dallarchitettura dell8088 ` 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 combinazioni dei segnali di DEN* (come si era gi` a visto) e di IO/M*, che quindi sceglie se il trasferimento ` e in memoria o in I/O. LOR di questi due segnali (nel caso del bus dei dati, con IO/M ) diventa lEN* 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 lunico 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 nch` e non arriva un nuovo T1 ) son detti periodi
10

N.B.: gli stati di WAIT sono multipli del periodo di clock. . .

64 di idle.

L8088

Problema: chi genera per l8088 questi segnali di clock, RESET e READY? Servono dei circuiti dappoggio (normalmente progettati dalla stessa casa del processore. . . ) per generare questi segnali. Per esempio, l8284 ` e un cirucito dappoggio, da anteporre all8088, 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 l8284 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 allindirizzo F F F F , dove F F F F ` e memorizzato nel code segment, mentre 2. Si pone lInterrupt Enable a 0 3. Il valore degli altri registri ` e casuale. Se non si considera il diodo presente nell8284, la rete per generare il segnale di reset ` e solo un circuito RC (dotato di resistenza e condensatore, con un intereruttore: chiudendo linterrutore, 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 alimentazione stabile (quindi, allo start-up il reset vale 1, e 0 quando si ` e giunti alla stabilit` a). A cosa serve il diodo? Con il diodo il condensatore si scarica molto pi` u velocemente, e quindi viene attivato subito il segnale di reset! Unaltra questione interessante ` e come sono alimentati questi circuiti dappoggio: se fossero alimentati con la stessa alimentazione degli altri circuiti, subirebbero gli stessi transitori. In realt` a son alimentati anche da apposite batterie che li tengonosempre alimentati (un tempo erano in tampone, ora
Il processore richiede un set-up molto alto per il segnale di READY, e il comportamento del processore diventa ignoto se questo tempo di set-up non viene rispettato
11

nellinstruction pointer

7.5.2 Generazione del segnale di READY sono al litio).

65

Per generare invece il segnale di clock, serve un circuito con un oscillatore al quarzo (che si pu` o 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 pi` u stabile di un solito condensatore! Nel circuito son presenti due capacit` a, che son dette capacit` a di compensazione, e servono per iniziare loscillazione. Da osservare che l8088 ` e un circuito che lavora a 5 MHz, ma si utilizza un quarzo con frequenza fondamentale a 15 MHz. Questo perch` e 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 ci` o, a dierenza degli altri segnali, il segnale READY pu` o arrivare da pi` u fonti. Il circuito lo si pu` o vedere come una serie di AND che conuiscono 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
12

N.B.: I contatori son binari, non sono degli shift-register!!

66

L8088

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.

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

Si raccomanda di guardare le slide per vedere le forme donda 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 . Listante 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 lintervallo che intercorre fra linizio del ciclo di BUS di lettura e listante in cui i dati provenienti dalla memoria sono validi e possono essere campionati dalla CPU. Altri ritardi importanti che inuenzano 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 lattivazione del segnale di READ. I vari ritardi introdotti dai 373 e 245 In generale, il tempo daccesso ` e il tempo pi` u lungo presente.

Capitolo 8 La gestione dellInput/Output


LI/O non ` e nientaltro 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 pu` o avere unazione del dispositivo I/O.1 . Uninterfaccia 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) Uninterfaccia di I/O deve essere in grado di sincronizzare la CPU con lunit` a 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 ci` o vale anche per loutput). 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 ci` o si utilizza il sistema delle interruzioni (o interrupt, in cui si usano due li). Se il lo viene attivato, il processore (dopo aver terminato lultima operazione) sospende il programma corrente e viene forzato ad eseguire una subroutine di I/O (Si salva sullo stack lindirizzo di ritorno! Nell8088 viene
Anche qui, conviene vedere gli esempi sulle slide, e bisogna ricordarsi: il clock di un FF non deve essere attivato allinizio della write, ma alla ne (si usa un OR, non un AND)
1

68

La gestione dellInput/Output

anche salvato il registro di ag e viene azzerrato lInterrupt Enable). Si pu` o anche avere il nesting di pi` u interrupt!

Le periferiche

Si pu` o 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 componente realizzato da terzi, e quindi si consegna la responsabilit` a di questo coretto funzionamento a terzi!

1.1

L8255

` un dispositivo che si trova ancora sul mercato. E ` un dispositivo a 40 pieE dini, in grado di gestire no a 3 porte bidirezionali parallele a 8 bit. Son presenti due registri di indirizzo nell8255 (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 pi` u 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 ` da osservare che in realt` mondo esterno al processore). E a la porta C ` e costituita 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 pu` o 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 dell8255

69

1. fare in modo che il programma mandi a tutte le interfaccie le corrette congurazioni perch` e funzionino correttamente 2. e quindi si possono utilizzare i dispositivi. Esistono 3 modalit` a (ma una non si studia): Modo 0, o anche detto Basic I/O: la lettura e la scrittura con il dispositivo 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: lI/O ` e avviene tramite sincronizzazione con il mondo esterno. Da notare che la porta C pu` o lavorare solo in modo 0. Le porte si possono riprogrammare? In teoria s` , ma ci` o dipende dai componenti a cui son collegati. Se le porte A e B sono in modo 1, servono dei segnali per creare la sincronizzazione. Per far ci` o, si utilizzano alcuni bit della porta C, che si dice che viene requisita.

1.2

Parola di controllo dell8255

Se il bit pi` u signicativo (D7 ) ` e pari a 1, gli altri bit son considerati di congurazione del dispositivo. Invece, se ` e a 0, si possono modicare singolarmente i bit della porta C!2 . La programmazione del dispositivo dipende ovviamente dallutilizzo 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 Unit` a Esterna attiva il segnale STB*, detto Strobed Input, che funziona come un clock (indica che ` e pronto per scrivere dei dati) 2. L8255 avverte la UE che il dato ` e stato accettato attivando IBF (` e un FF):
Infatti basta usare 3 bit per indicare quale bit modicare della porta C, e con D0 si indica se scrivere 0 o 1 3 Da osservare che, se il processore ` e pi` u veloce della periferica, servono un numero adeguato di stati di wait, come nel caso delle memorie!
2

70

La gestione dellInput/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 pu` o scrivere.

Il segnale di STB* serve come clock per campionare il dato da parte dell8255. 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 Buer 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 programmatol8255 come strobet output A. Tramite dei 3-state, si stacca il registro di C6 dal piedino P C6 , che viene invece utilizzato per ACKA*. Sulle slide si possono vedere appunto cosa si modica 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 lIE tutte le sorgenti di Interruzione vanno in OR!

Le Interruzioni
Interrupt mascherabili, mediante lInterrupt Enable NMI (Not Maskerable Interrupt). Si tratta di Interrupt demergenza, e per questo non son mascherabili!

Esistono due tipi di segnali per di interrupt:

2.1

Meccanismi dinterruzione dell8088 (stesso per tutta la famiglia)

Se il processore riconosce uninterrupt, deve capire di che tipo ` e e soprattutto deve ricevere la sub-routine dellinterrupt pi` u 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 uninterrupt, 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 contengono lInterrupt Type (ovvero il tipo dellinterruzione). Quindi il processore esegue uno shift a sinistra di due posizioni, e prende il numero ottenuto come indirizzo per accedere ai 4 byte consecutivi in memoria che contengono il Code Segment e lInstruction Pointer dellindirizzo della sub-routine! Primo INTA*: Congela la catena delle priorit` a e cos` evita le corse critiche. Secondo INTA*: Si ottiene lInterrupt Type. Perch` e viene shiftato a sinistra di due (ovvero moltiplicato per 4)? Perch` e un puntatore nell8088 usa 4 byte (2 per il Code Segment, 2 per lInstruction Pointer), e in questo modo riesce ad ottenere lindirizzo richiesto. Per esempio, i primi due byte contengono il CS corrispondente alla subroutine per un Interrupt Type uguale a 0, e i byte immediatamente successivi contengono lIP.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 lIP dellistruzione corrente 2. Si salva il registro di ag 3. Si disabilita lInterrupt Enable

2.2

PIC 8259

Il PIC (Programmable Interrupt Controller) 8259 ` e una periferica esterna che ` e in grado di gestire no a 8 richieste dinterruzioni, con priorit` a (linterruzione collegata a IR0 ` e linterruzione con la massima prorit` a. L8259: Invia il segnale di INT al processore, che pu` o essere messo in OR con altre fonti di interruzione Ha un piedino INTA* dove pu` o ricevere appunto il segnale di INTA*
Un KByte della memoria logica in basso nell8088 ` e riservato ai puntatori alle interruzioni!
4

72

La gestione dellInput/Output

Inoltre, con l8259 si possono mascherare selettivamente le interruzioni. Si hanno quindi no a 8 interrupt enablem una per ogni sorgente: se uno ` e disabilitato, , signica 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 dinterruzione da parte del dispositivo sattiva se si presenta una richiesta dinterruzione con piorit` a maggiore rispetto a quelle corrente, pre` sente nellISR. E quindi necessario un meccanismo apposito per resettare i bit dellISR. In teoria, esisterebbero solo due parole di controllo (Input Control Word e Output Control Word) che si possono scrivere, ma il signicato dei byte trasmessi non dipende solo dallindirizzo, 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 lunico 8259 presente nellarchitettura. Il bit 3 invece informa se linterruzione 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 lInterrupt Type: 1. Tutti gli Interrupt Tupe son consecutivi 2. I primi 5 bit (quelli pi` u signicativi) vengono programmati, mentre gli altri 3 indicano la tioplogia dellinterruzione (o meglio, indica il numero dellinterruzione pi` u prioritaria) ICW3 : viene usata solo se ci fossero pi` u 8259 nellarchitettura:

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 pu` o assumere qualunque valore) Naturalmente, si programma sempre ununica volta: 1. Prima si congura correttamente il dispositivo 2. E quindi si attiva lInterrupt Enable Le Output Control Word: OCW1 : ` e una parola di mascheramento (ogni bit indica per la corri` la spettiva interruzione se ` e mascherata [1] oppure no [0]). A0 = 1. E quarta parola che deve essere inviata al dispositivo. OCW2 : indica un End of Interrupt non specico (A0 = 0, quarto bit a 0). Questo ` e il comando che, inviato al dispositivo, esegue un reset dellISR dellinterruzione con priorit` a maggiore. Con l8259 si possono programmare le interruzioni con rotazione di priorit` a : si possono cambiare le priorit` a, ma solo facendole ruotare tutte, attorno allinterruzione meno prioritaria (questo signica che tutte le interruzioni cambiano priorit` a!). Quello che si pu` o 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 specico 11000XXX: viene settata la priorit` a al livello indicato dai 3 bit XXX Se si ruota su un End Of Interrupt non specico, si ha quindi che il livello che si sta settando diviene il meno prioritario. Trattandosi di 8 interruzioni, son necessarie 32 locazioni di memoria consecutive 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 allinterno del processore per cui vengono generate interruzioni interne, che hanno Interrupt Type pari a 0. Si tratta di interruzioni predenite, e nell8088 sono nelle prime 32 locazioni.