Che materia stai cercando?

Ambiente per la SImulazione dei sistemi a Microprocessore

Appunti di Calcolatori elettronici II del prof. Mazzeo su ASIM - Ambiente per la SImulazione dei sistemi a Microprocessore: descrizione funzionale e modalità d'uso di ASIM, Generalità sul simulatore ASIM, meccanismo di simulazione e l'architettura ad oggetti di ASIM.

Esame di Calcolatori Elettronici II docente Prof. A. Mazzeo

Anteprima

ESTRATTO DOCUMENTO

Parte I - descrizione funzionale e modalità d'uso di ASIM

4.3 Il dispositivo 1TO4BusInterface

I campi relativi alla configurazione di un bus sono così codificati:

Name Nome del bus a cui l'oggetto è connesso (opzionale);

Type Identificatore assoluto nella configurazione;

Address1 Valore iniziale dello spazio indirizzi gestito dall'oggetto;

Address2 Valore finale dello spazio indirizzi gestito;

BUS Identificatore di bus esterno connesso all'ingresso;

COM1 Identificatore di bus esterno connesso all'uscita 1, se 0 la

linea è n.c.;

COM2 Identificatore di bus esterno connesso all'uscita 2, se 0 la

linea è n.c.;

COM3 Identificatore di bus esterno connesso all'uscita 3, se 0 la

linea è n.c.;

COM4 Identificatore di bus esterno connesso all'uscita 4, se 0 la

linea è n.c.; Tabella 3

Questo dispositivo è stato introdotto per ampliare la gamma di possibili connessioni tra bus. L'oggetto

1TO4BusInterface è, di fatto, un multiplexer bidirezionale di bus (1 ingresso-4 uscite) in grado di espandere le

possibilità di interconnessione dell'oggetto bus/mem.

La selezione della via su cui instradare la connessione è fatta per tramite di un filtro sensibile a differenti

intervalli di indirizzi fisici programmabile mediante i parametri posti nei campi COMi.

tale dispositivo è in grado di instradare richieste di accesso, poste in ingresso, verso bus connessi in uscita,

selezionando la destinazione in base all'indirizzo presente nella richiesta. Possono realizzarsi i seguenti

collegamenti:

a. da un processore verso alcuni bus (da 1 a 4 bus);

b. da più processori verso alcuni bus (da 1 a 4 bus);

c. da un bus verso alcuni bus (da 1 a 4 bus);

d. da uno o più processori verso alcuni 1to4BUSINT (da 1 a 4).

Il tipo di collegamento d) indica la possibilità di costruire cascate di questi dispositivi, rendendo praticamente

illimitato il numero di bus cui può accedere un processore.

Come ogni dispositivo 1to4BUSINT può essere connesso ad un bus, realizzando così collegamenti di tipo c);

questo tipo di collegamento è simile a quello descritto nel paragrafo precedente, ma differisce da questo perché

la connessione può essere verso più di un bus.

Uno o più processori possono essere connessi a più bus anche connettendoli ad un bus cui sono connessi

uno o più dispositivi del tipo in esame oppure connettendoli direttamente ad un 1to4BUSINT.

Poiché tutti i tipi di connessioni viste sono combinabili tra loro, è possibile realizzare un insieme molto ampio

di configurazioni ed , in particolare, strutture di "crossbar".

Il 1to4BUSINT non ha registri interni. Il menù Device associato a questo dispositivo è quindi diverso da quello

presentato; l'unico comando disponibile è Trace Accessi che consente di visualizzare le richieste di accesso:

richieste di lettura , scrittura e modifica (ciclo di lettura+scrittura utilizzato tipicamente dai sistemi operativi per

implementare semafori). Quando si seleziona il comando, le richieste iniziano ad essere registrate e visualizzate

20

Parte I - descrizione funzionale e modalità d'uso di ASIM

fin quando non si invoca nuovamente Trace Accessi; in ogni momento sono memorizzate al più le ultime trenta

richieste e, per visualizzarle, basta far scorrere verticalmente la finestra con l'apposita barra di scorrimento.

La definizione dei parametri avviene attraverso la finestra di dialogo cui si accede dal menù Configura con il

comando Aggiungi Device. Il "Nome" da indicare; per il campo Identificatore è 1TO4BUSINT.

"Indirizzo1" e Indirizzo 2" delimitano l'intervallo di indirizzi ammessi in ingresso: quando arriva una richiesta

con indirizzo compreso in detto intervallo, il dispositivo cerca di instradarla verso l'uscita appropriata; se il

tentativo fallisce, restituisce al richiedente un "Bus error".

Gli identificatori dei bus o altri 1to4BUSINT connessi a valle vanno indicati come segue:

• Identificatore del bus da connettere alla linea di uscita 1 in "Com1";

• Identificatore del bus da connettere alla linea di uscita 2 in "Com2";

• Identificatore del bus da connettere alla linea di uscita 3 in "Com3";

• Identificatore del bus da connettere alla linea di uscita 4 in "Com4";

Se non si vuole collegare una linea di uscita ad alcun bus si deve lasciare il parametro corrispondente a

zero.

La scelta dell'insieme di indirizzi da far corrispondere ad ogni elemento viene effettuata da parte del

programma come mostrato in Fig. 15: Fig. 15-Tabella scelta intervallo indirizzi

Se uno degli identificatori, precedenti l'ultimo non nullo, non è stato definito, lasciandolo a 00, una richiesta

con indirizzo nell'intervallo ad esso corrispondente genererà un "Bus error".

Riepilogando l'intervallo di indirizzi I=(address2-address1) viene diviso in un numero n di parti uguali al

numero di connessioni in uscita attive. Esso deve essere, pertanto, definito in modo da essere un multiplo di n.

Non è possibile definire intervalli variabili all'interno di I da assegnare alle singole connessioni in uscita. Conviene

21

Parte I - descrizione funzionale e modalità d'uso di ASIM

assegnare le connessioni in uscita, se presenti, a partire dalla 1 e via via fino alla 4. Assegnata una connessione

i delle n previste, resta fissato, comunque, il sotto intervallo di indirizzi a questa associato (le connessioni ad essa

inferiori possono anche non essere assegnate). I valori di detti intervalli sono esprimibili mediante la formula:

I=address1-adress2

Indirizzo di inizio=(address1 + (i-1)*I/n)

Indirizzo di fine= (address1 + i*I/n) -1

Il metodo di scelta descritto consente di combinare in modo molto vario gli insiemi di indirizzi corrispondenti a

ciascuna linea di uscita. Si osservi che ogni insieme di indirizzi deve essere tale da includere tutti quelli delle

locazioni ( di memoria o di device) effettivamente presenti sul corrispondente bus a valle; se così non fosse non

ci sarebbe modo di accedere a quelle locazioni che, pur presenti sul bus, hanno un indirizzo fuori dell'intervallo.

Nessun problema, invece, per indirizzi compresi nell'intervallo, ma senza corrispondente locazione sul bus; in tal

caso è il bus che si preoccupa di far restituire al richiedente un "Bus error".

Se si vuol connettere il 1to4BUSINT ad un bus, il valore dell'Identificatore di tale bus va in "BUS".

Il dispositivo è dotato della capacità di monitorare l'attività di accesso su uno dei bus (sia in ingresso che in

uscita). Ad esempio 1to4BUSINT può essere utilizzato con una sola connessione in uscita al fine di monitorare

gli accessi su un bus da parte di un processore. E' anche possibile assegnare più linee di uscita allo stesso bus

(specificando più volte lo stesso identificatore). Ciò è utile quando ad un bus sono connessi una memoria e dei

dispositivi con indirizzi separati e gli indirizzi intermedi sono invece assegnati ai dispositivi di un altro bus.

22

Parte I - descrizione funzionale e modalità d'uso di ASIM

4.4 Il dispositivo generatore di interruzioni: 1to4INTGEN.

I campi relativi alla configurazione di un bus sono così codificati:

Name Nome del bus a cui l'oggetto è connesso (opzionale);

Type Identificatore assoluto nella configurazione;

Address1 Valore iniziale dello spazio indirizzi gestito dall'oggetto;

Address2 Valore finale dello spazio indirizzi gestito Indirizzo 1" +

13;

BUS Identificatore di bus esterno connesso all'ingresso;

COM1 Identificatore dei dispositivi in grado di gestire le

interruzioni, se 0 la linea è n.c.;

COM2 Identificatore dei dispositivi in grado di gestire le

interruzioni, se 0 la linea è n.c.;

COM3 Identificatore dei dispositivi in grado di gestire le

interruzioni, se 0 la linea è n.c.;

COM4 Identificatore dei dispositivi in grado di gestire le

interruzioni, se 0 la linea è n.c.;

Tabella 4

Il dispositivo mette a disposizione dell'utente un generatore di interruzioni programmabile e quattro timer (può

essere anche utilizzato per realizzare una macchina che preveda il multitasking, come supporto hardware per

generare interruzioni ad intervalli di tempo prefissati, e per definire un meccanismo di "interprocessors interrupts"

ovvero un meccanismo che consente ad un processore di inviare un segnale di interruzione ad un altro).

Fig. 16-insieme di registri e finestra associata a 1to4INTGEN

Il dispositivo 1to4INTGEN ha dieci registri a sedici bit. I primi due sono dedicati al generatore di interruzioni, i

rimanenti otto sono dedicati, a due a due, ai 4 timer. La Fig. 16 mostra l'insieme dei registri e la loro funzione e la

finestra associata al dispositivo e gli indirizzi corrispondenti a ciascun registro (gli indirizzi sono dati come valore

relativo all'indirizzo base).

4.4.1 GESTORE INTERRUZIONI

Il 1to4INTGEN può essere connesso fino a quattro dispositivi in grado di gestire interruzioni (processori o

priority interrupt controller). Un processore che vuole inviare un'interruzione ad un altro (o anche a se stesso)

deve specificare il tipo di interruzione assegnando al registro I (indirizzo relativo 00) l'opportuno valore. Si ricordi

che per un'interruzione va specificata la linea ed è possibile dare anche una priorità ed un vector number. Come

mostrato in figura 16, le due cifre esadecimali del byte meno significativo specificano linea e priorità; le due cifre

23

Parte I - descrizione funzionale e modalità d'uso di ASIM

esadecimali del byte più significativo specificano il vector number. Una volta definita l'interruzione, per inviarla,

occorre scrivere un opportuno valore nel registro C (indirizzo relativo 02); di questo registro, rappresentato in

binario in figura 17, sono utilizzati solo i quattro bit meno significativi. Per inviare un'interruzione allo n-esimo

dispositivo (n da 0 a 3) il bit n-esimo di C deve essere 1; è possibile inviare contemporaneamente la stessa

interruzione anche a tutti e quattro i dispositivi connessi, ponendo ad 1 i quattro bit meno significativi di C.

Se ad una delle linee di uscita non è connesso alcun gestore delle interruzioni, l'interruzione non viene inviata;

se più di una linea è connessa allo stesso dispositivo e vengono posti ad 1 i corrispondenti bit di C, vengono

inviate tante interruzioni dello stesso tipo al gestore, quante sono le linee ad esso connesse (attivate con bit 1 in

C). Si osservi che per linea di uscita si vuole intendere un collegamento che può trasferire una generica

interruzione verso un dispositivo in grado di gestirla.

4.4.2 TIMER

I quattro timer svolgono tutti la stessa funzione, ma sono collegati a linee di uscita differenti: TR1 è connesso

alla linea 1, TR2 alla linea 2 e così via. Ad ogni timer sono associate due word: la meno significativa consente di

specificare l'interruzione (vale ancora quanto detto a proposito del registro I) e la più significativa definisce il

valore iniziale del contatore; se V è la velocità del dispositivo (di default V = 1, ma può essere modificata come

detto in 3.2.4), ogni V clock il valore del contatore si decrementa di 1; quando arriva a zero, viene inviata

l'interruzione specificata al gestore di interruzioni connesso ed il contatore cessa di decrementarsi.

Poiché i dispositivi connessi alle linee di uscita del 1to4INTGEN non devono necessariamente essere diversi,

è possibile associare allo stesso dispositivo anche tutti e quattro i timer.

I vari registri possono essere modificati, oltre che da programma, utilizzando il comando Modifica Valore del

menù Device.

Per connettere un 1to4INTGEN ad una macchina da simulare occorre specificare i parametri nella finestra di

dialogo (Fig. 16), cui si accede dal menù Configura con il comando Aggiungi Device. Il "Nome elemento" è

1TO4INTGEN. "Indirizzo 1" deve essere pari e rappresenta l'indirizzo del registro I (indirizzo relativo 00); tutti gli

altri registri hanno indirizzo dato da "Indirizzo 1" + indirizzo relativo (i valori dell'indirizzo relativo sono quelli di

figura 10.b). "Indirizzo 2" deve essere uguale ad "Indirizzo 1" + 13 (numero esadecimale). In "BUS" va

l'Identificatore del bus cui il dispositivo è connesso. I parametri "Com1", "Com2", "Com3" e "Com4"

(corrispondenti, rispettivamente, alle linee 1, 2, 3 e 4) consentono di specificare le connessioni verso i dispositivi

in grado di gestire le interruzioni. Ad esempio "Com2" è associato alla linea di uscita 2 e, assegnando ad esso il

valore dell'Identificatore di un dispositivo, si connette questo dispositivo (che deve essere un gestore di

interruzioni) alla linea 2 del 1to4INTGEN. Se non si vuole connettere una linea ad alcun dispositivo si deve porre

zero nel corrispondente parametro; come già detto più linee possono essere connesse allo stesso dispositivo.

24

Parte I - descrizione funzionale e modalità d'uso di ASIM

4.5 Il dispositivo PRIORITY INTERRUPT CONTROLLER

I campi relativi alla configurazione del dispositivo sono così codificati:

Name I8259PIC

Type Identificatore assoluto nella configurazione;

Address1 Indirizzo base pari per il dispositivo

Address2 Indirizzo base+$13

BUS Ident. del bus a cui il dispositivo èconnesso

COM1 Ident. del dispositivo PIC o CPU associato alla linea 1

COM2 Ident. del dispositivo PIC o CPU associato alla linea 2

COM3 Ident. del dispositivo PIC o CPU associato alla linea 3

COM4 Ident. del dispositivo PIC o CPU associato alla linea 4

Tabella 5

Il componente industriale di riferimento per questa dispositivo è l'Intel 8259A.

4.5.1 Generalità

L'Intel 8259A è stato progettato per minimizzare il software e il sovraccarico nella gestione di interruzioni con

livelli di priorità multipli. Questo PIC gestisce fino ad 8 livelli di priorità, ma utilizzando più PIC in cascata è

possibile arrivare a gestire fino a 64 livelli senza l'aggiunta di un'ulteriore circuiteria esterna.

Esso ha molti modi per gestire le interruzioni, permettendo l'ottimizzazione di una varietà di esigenze dei

sistemi. Fig. 17- modello di programmazione del PIC

Questi modi possono essere cambiati o riconfigurati in ogni istante durante l'esecuzione di un programma.

Il componente da noi simulato in realtà ha un numero di registri e di modi di funzionamento inferiore rispetto a

quello reale. In Fig. 17- modello di programmazione del PIC è mostrato il suo modello con i registri e le linee

fisiche simulate.

4.5.2 Configurazione

I dispositivi a cui si collega il controllore delle interruzioni in una configurazione sono: 25

Parte I - descrizione funzionale e modalità d'uso di ASIM

• un processore, che avendo accesso ai registri del dispositivo, attraverso il sistema bus, permette la

programmazione del componente;

• dei device di cui si vogliono gestire le interruzioni inviate;

• un eventuale PIC(o lo stesso processore) per gestire l'interruzione inviata dal dispositivo.

4.5.3 Collegamento al processore

Le linee che collegano il gestore delle interruzioni al processore sono mostrate sulla sinistra dello schema in

Fig. 17.

Anche in questo caso il bus dati è utilizzato dal processore per il trasferimento dei dati da e verso il

componente.

La linea CS è utilizzata per la selezione del dispositivo, invece, i registri interni sono selezionati dal bit meno

significativo del bus indirizzo: A0, dai segnali di lettura-scrittura: RD e WR, oltre che dallo stato interno.

Infine la linea d'interruzione INT trasmette al processore o all'eventuale PIC la richiesta d'interruzione

selezionata dal dispositivo, tra quelle presenti in ingresso.

Un esempio di collegamento del controllore programmabile delle interruzioni al processore è mostrato in Fig.

18, dove sono presentate, del Motorola 68000, solo le linee coinvolte nel collegamento.

Fig. 18-Collegamento del PIC al processore MC68000

4.5.4 Collegamento ad un device

Sulla destra dello schema in Fig. 18 sono mostrate le linee che collegano il PIC ad un device.

Nel caso del componente in esame il collegamento ad un device è semplice, infatti, basta collegare la linea

per l'invio delle interruzioni del device ad una delle 8 linee di richiesta delle interruzioni. Queste linee hanno

priorità decrescenti da IR0 aIR7. 26

Parte I - descrizione funzionale e modalità d'uso di ASIM

4.5.5 Collegamento software

Per inserire questo componente in una configurazione di sistema, bisogna attenersi alla stessa procedura

seguita per gli altri componenti di tipo Device.

I parametri presenti nella finestra Aggiungi Device permettono di gestire la connessione del gestore

programmabile delle interruzioni con gli altri componenti della configurazione.

Nome Elemento è utilizzato per specificare il tipo di componente da inserire, nel caso in esame deve essere

"I8259PIC".

Identificatore deve essere un numero compreso tra 01 ed FF e viene utilizzato dal programma per riferirsi a

questo dispositivo.

Indirizzo 1 rappresenta l'indirizzo più basso per accedere al componente; in questo caso deve essere un

numero pari.

Indirizzo 2 definisce l'indirizzo più alto per indirizzare il componente, nel caso in esame deve essere uguale

ad Indirizzo1 + 1.

Questi ultimi due parametri permettono di definire per quali indirizzi il decodificatore d'indirizzi attiva la linea

CS. Infatti, se l'indirizzo sul bus indirizzo è Indirizzo1 o Indirizzo2 , il componente viene selezionato, cioè

l'operazione di lettura o scrittura è eseguita su un suo registro.

BUS determina l'Identificatore del bus a cui è connesso il dispositivo. La connessione delle linee bus dati, A0

e RD e WR del controllore delle interruzioni al processore è realizzata, nel nostro simulatore, scegliendo per

BUS l'identificatore di un componente MMU/BUS, a cui è stato collegato il dispositivo di tipo CPU.

COM1 definisce l'Identificatore del gestore delle interruzioni, cioè il componente (di tipo processore o PIC) al

quale trasmettere le interruzioni non mascherate.

COM2 viene utilizzato per specificare l'interruzione trasmessa alla componente specificato in COM2. Delle

quattro cifre esadecimali che definiscono COM3 la meno significativa individua la linea d'interruzione, la seconda

definisce la priorità e le due più significative specificano il "vector number". Se le interruzioni sono gestite da un

PIC il vector number non deve essere spedito e quindi le ultime due cifre non devono essere specificate.

Gli ultimi due parametri permettono di realizzare, nell'ambiente di simulazione, il collegamento tra la linea INT

del dispositivo ed il processore o un ulteriore PIC

COM3 non utilizzato.

COM4 non utilizzato.

Una volta inseriti i parametri con il comando Create All dal menù Edit saranno prodotte le finestre associate

ai vari Chip presenti nella nostra configurazione. Quella associata ad I8259PIC è presentata in Fig. 19.

27

Parte I - descrizione funzionale e modalità d'uso di ASIM Fig. 19-Registri del PIC

4.5.6 Modello di programmazione

In questo dispositivo l'indirizzamento dei 5 registri a 8 bit è più complesso rispetto agli altri; infatti, in generale

il registro indirizzato dipende dal valore del bit 0 dell'indirizzo, dal tipo d'accesso, dal valore dei bit 6 e 7 (detti

rispettivamente RR e RIS) del registro CNTRL e dallo stato del componente, cioè se è stato appena resettato.

Iniziamo la descrizione dal registro IRR (Interrupt Request Register) che permette di memorizzare le richieste

d'interruzione relative alle singole linee d'interruzioni, ad esempio il bit 0 è posto ad 1 se sulla linea 0 è arrivata

una richiesta di interruzione e così per gli altri bit. Quando la richiesta d'interruzione, arrivata sulla linea n, viene

spedita al gestore delle interruzioni (PIC o CPU) collegato al PIC, il bit n-esimo di IRR è cancellato. Ricordiamo

che la linea a priorità maggiore è la linea 0 e che la priorità decresce fino alla linea 7. Questo registro è

accessibile solo in lettura all'indirizzo pari quando il bit RR=1 e RIS=0.

Il registro IMR ha la funzione di memorizzare le linee di interruzioni che devono essere mascherate, cioè

quelle linee su cui arrivano delle richieste d'interruzioni che non desideriamo spedire al gestore d'interruzioni: per

mascherare una linea basta inserire un '1' nel bit corrispondente. IMR è accessibile sia in scrittura che in lettura

all'indirizzo dispari: in scrittura il componente non deve essere nello stato resettato, cioè deve essere già stato

caricato il registro TR di cui parleremo più avanti.

In ISR (In Service Register), invece, sono memorizzate le interruzioni trasmesse, cioè se è stata trasmessa

un'interruzione arrivata sulla linea n, il bit n-esimo di ISR viene posto ad 1. I bit vengono cancellati

automaticamente qualora questa opzione sia abilitata nel registro CNTRL, in caso contrario sarà compito della

routine, che serve l'interruzione, cancellare il bit sempre attraverso il registro CNTRL. Infatti, ISR è un registro a

sola lettura ed è accessibile quando l'indirizzo è pari e RR ed RIS sono entrambi pari ad 1.

bit significato

0/1/2 determinano il bit n da cancellare in ISR,

3 il valore 1 in questo bit detto EOI (End Of Interrupt) fa cancellare il bit n-esimo, indicato dai 3 bit meno

significativi di CNTRL, del registro ISR,

4 riferito come AEOI (Automatic End Of Interrupt) se pari ad 1 fa cancellare automaticamente il bit in ISR

dopo la trasmissione dell'interruzione,

5 non utilizzato,

6 riferito come RIS seleziona negli accessi in lettura e se RR=1, il registro ISR se esso è pari ad 1 altrimenti

il registro IRR,

7 citato come RR , permette se posto ad 1 la lettura dei registri ISR o IRR.

Tabella 6 - Significato dei bit di CNTRL

TR (Type Register) è il registro dove è conservato il tipo di interruzione (o vector number) da trasmettere ed è

utilizzato dal processore per calcolare l'indirizzo dove è contenuto il puntatore alla routine, che serve quel tipo di

interruzione. Questo registro è accessibile in scrittura all'indirizzo dispari solo quando il dispositivo viene resettato

ed il byte che inseriamo influenza solo i 5 bit più significativi, mentre gli altri 3 sono settati dal dispositivo in

28

Parte I - descrizione funzionale e modalità d'uso di ASIM

funzione della linea su cui è arrivata l'interruzione da trasmettere, ad esempio per la linea 5 i 3 bit saranno settati

ad 101.

Concludiamo questa descrizione con il registro CNTRL; esso è accessibile sia in lettura che in scrittura

all'indirizzo pari, ma in lettura deve essere RR=0. Il significato dei bit è specificato in Tabella 6 .

Indirizzo Tipo di accesso RR RS Registro

Pari W 0/1 0/1 CNTRL

R 0 0/1

Pari R 1 0 IRR

Pari R 1 1 ISR

Dispari W 0/1 0/1 TR*

Dispari W/R 0/1 0/1 IMR

* accessibile solo quando il dispositivo viene resettato

Tabella 7-indirizzamento dei registri del gestore programmabile delle interruzioni

Un quadro riassuntivo sugli indirizzamenti dei vari registri è mostrato in Errore. L'origine riferimento non è

stata trovata..

4.5.7 Programmazione

L'inizializzazione di questo componente consiste in primo luogo nell'inserire nel registro TR il tipo di

interruzione (o vector number) da trasmettere al processore. Questa operazione va fatta dopo un reset del

componente, facendo un accesso in scrittura all'indirizzo dispari; da questo momento in poi, tutti gli accessi in

scittura all'indirizzo dispari selezionano il registro IMR.

Successivamente, scrivendo all'indirizzo pari, si deve fissare in CNTRL il modo in cui viene cancellato il bit in

ISR, cioè in modo automatico o dalla routine che serve l'interruzione. Con questa scelta noi definiamo anche se,

mentre è in esecuzione la routine che serve l'interruzione , sono bloccate le richieste d'interruzione di livello

inferiore.

Se la cancellazione del bit in ISR non è automatica è compito della routine che serve l'interruzione cancellarlo

scrivendo un byte in CNTRL che contenga nei tre bit meno significativi il numero del bit da cancellare ed il valore

1 nel bit 3.

Infine caricando il registro IMR all'indirizzo dispari noi possiamo mascherare le singole linee di richieste.

Un esempio di una sequenza di inizializzazione del gestore delle interruzioni programmabili è riportato in Fig.

20. A0 è stato precedentemente caricato con l'indirizzo più basso associato al PIC 29

Parte I - descrizione funzionale e modalità d'uso di ASIM

move.b #$40,1(A0)

move.b #$10,(A0)

move.b #$F0,1(A0)

Fig. 20-Esempio di sequenza di inizializzazione del PIC

La prima istruzione inserisce il vector number, 40 esad., in TR. La seconda determina la cancellazione

automatica del bit in ISR. L'ultima maschera le interruzioni delle linee da 4 a 7.

4.5.8 Il comportamento.

Le interruzioni, che arrivano sulle linee di richiesta, pongono ad 1 il relativo bit del registro IRR; ad esempio,

se un interruzione arriva sulla linea n, sarà posto ad 1 il bit n-esimo di IRR .

Tra tutte le interruzioni che arrivano da altri device sulle linee di richiesta IR0/IR7 del componente, solo quella

con priorità maggiore e non mascherata sarà da esso scelta.

Con priorità maggiore significa quella presente sulla linea a più alta priorità e nel caso che su una linea sono

collegati più device, che generano interruzioni contemporaneamente, viene scelta quello a priorità maggiore. In

ASIM, infatti, è stato predisposto un meccanismo per simulare un circuito Daisy Chain con 16 gradi di priorità per

linea; il valore di questo grado viene spedito al PICinsieme al numero della linea. Il vector number non deve

essere spedito, in quanto sarà il gestore stesso a produrre un proprio vettore e in seguito vedremo come.

Un'interruzione arrivata sulla linea n, si dice non mascherata quando il bit n-esimo del registro IMR è pari a 0.

Appena viene scelta l'interruzione, con la più alta priorità non mascherata, il dispositivo modifica i tre bit meno

significativi del registro TR che assumono valori, tali che, insieme, formano il numero della linea sulla quale è

arrivata l'interruzione scelta. Gli altri cinque bit del registro TR, che contiene il vector number da spedire al

processore, sono fissati quando andiamo a scrivere in esso; operazione che deve essere fatta appena dopo che

il componente è stato resettato.

A questo punto, se l'interruzione scelta è giunta sulla linea n, essa sarà trasmessa al processore, solo

qualora i bit da n a 7 in ISR sono nulli.

Se l'interruzione viene trasmessa, il bit n di ISR viene posto ad 1, il bit n di IRR viene posto a 0, e se il bit 4 di

CNTRL , citato come AEOI, è pari ad 1, allora il bit n di ISR viene posto a 0 altrimenti sarà compito della routine,

che serve l'interruzione, annullarlo. Per azzerare un bit di ISR dobbiamo specificarne il numero nei tre bit meno

significativi di CNTRL e contemporaneamente porre il quarto bit, riferito come EOI, ad 1. 30

Parte I - descrizione funzionale e modalità d'uso di ASIM

4.6 Il dispositivo DMA

Nelle operazioni di I/O, quando la velocità del trasferimento dei dati assume un valore troppo alto, il metodo

delle interruzioni non è più utilizzabile. Infatti, il tempo per lo svolgimento della sequenza d'interruzione e per

l'esecuzione della routine, che serve l'interruzione, può essere maggiore di quello disponibile. In questi casi è

d'obbligo l'uso di un DMA controller il quale è capace di diventare il padrone del bus e supervisionare un

trasferimento tra la memoria ed un'interfaccia periferica o una memoria di massa senza l'intervento del

processore.

Mentre esegue un trasferimento, esso è capace di porre indirizzi di memoria sul bus e di spedire e ricevere i

segnali necessari per l'effettuazione di operazioni di lettura e scrittura in memoria e sulle interfacce periferiche.

Lo scopo di un DMA controller è quindi quello di realizzare una sequenza di trasferimenti rubando cicli di bus

al processore.

E' chiaro che nello sforzo di completare il nostro ambiente di simulazione di architetture a microprocessore,

questo tipo di dispositivo non poteva mancare.

Il componente preso di riferimento per questa simulazione è l'Intel 8237.

4.6.1 Generalità

L'Intel 8237 è un controllore programmabile per l'accesso diretto in memoria (DMA) a 4 canali, dove il canale

è una porzione del componente che serve una singola interfaccia; esso gestisce le richieste in arrivo sui vari

canali attraverso una logica a priorità fissata o rotante.

Il trasferimento dei dati può avvenire in 4 modi diversi:

• nel modo single il controllore dopo ogni trasferimento rilascerà il bus al processore per almeno un ciclo

di bus, dopo inizierà di nuovo a testare la linea di richiesta e se attiva, procederà a "rubare" un altro ciclo;

• nel modo block la linea di richiesta è sufficiente che sia attiva solo fino al riconoscimento, dopo il quale il

bus non sarà rilasciato fino al trasferimento dell'intero blocco;

• il modo demand è simile a quello block con la differenza che il trasferimento del blocco continua fin

quando la linea di richiesta è attiva, ma, quando il trasferimento viene sospeso e poi ripreso esso inizia

dal punto in cui era stato sospeso;

• il modo cascade permette di realizzare, collegando più controllori 8237 in cascata, sistemi DMA con più

di 4 canali.

Il blocco di dati che possiamo trasferire in una sola operazione è di 65536 byte; alla fine del trasferimento

viene avvisato il processore o la periferica che lo aveva richiesto attraverso una linea di fine conteggio posseduta

dal controllore.

Altre caratteristiche del dispositivo sono:

• autoinizializzazione,

• trasferimenti da memoria a memoria,

• richiesta di DMA programmata,

• inibizione di un canale. 31

Parte I - descrizione funzionale e modalità d'uso di ASIM Fig. 21

La differenza sostanziale, tra l'Intel 8237 e il componente da noi simulato, è il minor numero di canali, che

sono stati ridotti da 4 a 2 ed i modi di trasferimento che sono i seguenti: single e block. In Fig. 21 è mostrato il

suo modello con i registri e le linee fisiche simulate.

4.6.2 Configurazione

I dispositivi a cui si collega un D.M.A. controller in una configurazione sono:

• un processore, che avendo accesso ai registri del dispositivo, attraverso il sistema bus, permette la

programmazione del componente;

• delle periferiche alle quali vogliamo permettere l'accesso diretto in memoria.

4.6.3 Collegamento al processore

Le linee di collegamento al processore, sono mostrate sulla sinistra dello schema, in Fig. 21.

D0-D7 sono 8 linee che vanno connesse al bus dati per il trasferimento dei dati da e verso il componente.

La linea CS è utilizzata per la selezione del dispositivo, invece, i registri interni sono selezionati dai 4 bit meno

significativi del bus indirizzo: A0-A3, e dai segnali di lettura-scrittura sul componente: IOW e IOR.

Come acccennato in precedenza, il controllore per eseguire un trasferimento deve spedire i segnali necessari

per l'effettuazione di operazioni di lettura e scrittura in memoria (MEMR e MEMW) e sulle interfacce periferiche

(IOR e IOW).

Sulle linee CLK e Reset arrivano rispettivamente il segnale dal generatore di clock e il segnale per cancellare

tutti i registri del controllore. 32

Parte I - descrizione funzionale e modalità d'uso di ASIM

La linea HRQ è adoperata per spedire una richiesta di controllo del sistema bus. Essa normalmente è

applicata all'ingresso HOLD della CPU. Fig. 22

Invece, un segnale, in arrivo dalla CPU, sulla linea HLDA indica che è stato acquisito il sistema bus.

Infine la linea d'interruzione EOP trasmette, al processore o ad un eventuale gestore delle interruzioni, un

interruzione per avvisare che il trasferimento di un blocco di memoria è stato completato.

Un esempio di collegamento del controllore ad un processore è mostrato in Fig. 22.

4.6.4 Collegamento ad un device

Sulla destra dello schema in fig.1 sono mostrate le linee fisiche che collegano il DMA controller a delle

periferiche.

DREQ0 e DREQ1 sono le linee di richieste, usate dalle periferiche collegate ai rispettivi canali, per ottenere

dei cicli DMA. Le richieste che arrivano su DREQ0 hanno precedenza su quelle che arrivano su DREQ1.

DACK1 e DACK2 informano la periferica, connessa a quel canale, che è stata selezionata per un ciclo DMA.

Queste linee si comportano, nei confronti dei componenti periferici che richiedono questo servizio, come un "chip

select".

Un esempio di connessione di due interfacce seriali è rappresentato in Fig. 23. 33

Parte I - descrizione funzionale e modalità d'uso di ASIM Fig. 23

4.6.5 Collegamento software

Per inserire questo componente in una nostra configurazione, bisogna attenersi alla stessa procedura

seguita per gli altri componenti di tipo Device. I parametri presenti nella finestra Aggiungi Device mi permettono

di gestire la connessione del controllore con gli altri componenti della configurazione. Viene ora specificato il

significato dei singoli parametri.

Nome Elemento è utilizzato per specificare il tipo di componente da inserire, nel nostro caso deve essere

I8237DMA.

Identificatore deve essere un numero compreso tra 01 ed FF e viene utilizzato dal programma per riferirsi

a questo dispositivo.

Indirizzo1 rappresenta l'indirizzo più basso per indirizzare il componente, nel caso del controllore per

l'accesso diretto in memoria esso deve essere un numero divisibile per 16.

Indirizzo2 definisce l'indirizzo più alto per indirizzare il componente, esso deve essere uguale ad Indirizzo 1 +

F. Questi ultimi due parametri permettono di definire per quali indirizzi il decodificatore d'indirizzi attiva la linea

CS. Infatti, se l'indirizzo sul bus indirizzo è compreso tra Indirizzo1 e Indirizzo2 , il componente viene

selezionato, cioè l'operazione di lettura o scrittura è eseguita su un suo registro.

COM1 determina l'Identificatore del bus a cui è connesso il dispositivo. Quindi, scegliendo per COM1

l'identificatore di un componente MMU/BUS si connettono le linee D0-D7, A0-A7, IOR, IOW, MEMR, MEMW,

CLK e Reset del DMA a quel sistema bus.

COM2 definisce l'Identificatore della CPU alla quale richiedere il controllo del bus e quindi a quale

processore collegare le linee HRQ e HLDA.

COM4: specifica l'Identificatore del gestore delle interruzioni che può essere sia un componente di tipo CPU

che di tipo PIC.

COM3: viene utilizzato per specificare l'interruzione trasmessa al componente, specificato in COM4, quando

termina un conteggio in un canale. Delle quattro cifre esadecimali, che definiscono COM3 la meno significativa

individua la linea d'interruzione, la seconda definisce la priorità e le due più significative specificano il "vector

34

Parte I - descrizione funzionale e modalità d'uso di ASIM

number" da trasmettere al processore che gestisce l'interruzione. Se le interruzioni sono gestite da un PIC,

queste due cifre non devono essere specificate.

I due parametri COM3 e COM4 permettono, quindi, di gestire la connessione della linea d'interruzioni EOP al

processore o al PIC

COM5 le 2 cifre meno significative e le 2 più significative specificano rispettivamente l'Identificatore del

componente collegato al canale 0 e al canale 1.

Specificando il valore in COM5 si definisce a quali componenti collegare le coppie di linee (DREQ0, DACK0)

e (DREQ1, DACK1).

4.6.6 Modello di programmazione

La finestra di programmazione associata al modulo I8237DMA ed i registri programmabili del controllore

sono riportati in Fig. 24. Fig. 24

Per accedere ad un registro occorre che esso sia compreso tra i valori Indirizzo1 ed Indirizzo2 (valori inseriti

prima della creazione del dispositivo). La selezione dei registri nel DMA controller avviene attraverso i 4 bit meno

significativi dell'indirizzo; questi formano l'indirizzo relativo con valore che va da 0 ad F esadecimale.

Nel nostro dispositivo ai registri appartenenti al canale 0 è stato dato un nome terminante con "0" mentre a

quelli appartenenti al canale 1 un nome terminante con "1".

Iniziamo questa descrizione dai registri CADDR0 e CADDR1 cioè dai registri indirizzo corrente. Essi sono dei

registri a 16 bit che hanno il compito di contenere l'indirizzo della prossima locazione di memoria che deve

partecipare al trasferimento. Nel caso del trasferimento da memoria a memoria CADDR0 contiene l'indirizzo

sorgente e CADDR1 l'indirizzo destinazione. In ogni caso entrambi i registri sono accessibili sia in lettura che in

scrittura ed il loro indirizzo relativo è 0 per CADDR0 ed è 2 per CADDR1.

BADDR0 e BADDR1 sono i registri indirizzo di base ed hanno la funzione di conservare gli indirizzi iniziali

rispettivamente di CADDR0 e CADDR1. Essi sono a 16 bit e sono accessibili solo in fase di scrittura; infatti,

quando viene scritto un valore in un registro indirizzo corrente, questo vien copiato anche nel relativo registro di

base ed il valore rimane immutato fino a quando non si verifica un'altra scrittura.

I registri CCOUNT0 e CCOUNT1, detti registri di conteggio correnti, sono anch'essi dei registri a 16 bit e

mantengono il numero di byte che devono essere ancora trasferiti, sono accessibili in lettura e scrittura ed il loro

indirizzo relativo è 1 per CCOUNT0 e 3 per CCOUNT1.Nel caso di trasferimento da memoria a memoria il

conteggio viene effettuato da CCOUNT1. 35

Parte I - descrizione funzionale e modalità d'uso di ASIM

BCOUNT0 e BCOUNT1 sono i registri a 16 bit detti di conteggio di base ed hanno la funzione di conservare

gli indirizzi iniziali rispettivamente di CCOUNT0 e CCOUNT1, essi sono accessibili solo in fase di scrittura. Infatti,

quando viene scritto un valore in un registro di conteggio corrente questo viene copiato anche nel relativo

registro di base ed il valore rimane immutato fino a quando non si verifica un'altra scrittura.

I registri, che contengono le informazioni relative al modo di funzionamento dei rispettivi canali, sono stati

chiamati MODE0 e MODE1. Essi possono essere accessi solo in scrittura ed hanno entrambi indirizzo relativo

pari a B; la selezione tra i due avviene sul valore del bit meno significativo del dato: se 0, il dato viene scritto in

MODE0 altrimenti in MODE1. Il significato dei bit dei registri MODE0 ed MODE1 sono illustrati nella Errore.

bit significato

0 instrada il dato su un canale, è uguale a 0 per il canale 0 ed 1 per il canale 1

1/2 non utilizzati

3 direzione di trasferimento: 0 per trasferimenti da memoria ad interfaccia, 1 da interfaccia a memoria

indica la

4 il valore 1 abilita l'autoinizializzazione, cioè al termine del conteggio i registri indirizzo e di conteggio correnti

sono caricati con i valori dei rispettivi registri di base

5 il valore 1 abilita il decremento di una unità del valore contenuto in CADDR di quel canale dopo ogni

trasferimento di un byte; deve essere posto a 0, se vogliamo l'incremento

6 non utilizzato

7 determina il modo del trasferimento: poniamo il valore 0 per il modo Single ed 1 per il modo Block; nel primo

caso il bus viene rilasciato al processore alla fine di ogni trasferimento, viceversa, nel modo block il bus viene

rilasciato dopo il trasferimento dell'intero blocco

L'origine riferimento non è stata trovata..

Tabella 8-Significato dei bit nei registri MODE

RF0 e RF1 rappresentano i flag delle richieste, cioè i flag dove indirizzare richieste di tipo software al DMA,

queste producono gli stessi effetti di quelle provenienti dalle interfacce dei dispositivi. Questi flag sono accessibili

solo in scrittura e l'indirizzo relativo per entrambi è 9. Anche in questo caso la selezione del canale avviene sul bit

meno significativo del dato: 0 per il canale 0 ed 1 per il canale 1. Il valore che deve assumere il flag deve essere

posto sul bit numero 3 del dato.

Alri flag presenti nel nostro componente sono MF0 e MF1. Questi mascherano le richieste dei rispettivi

canali, cioè una richiesta non viene inoltrata al processore se il mask flag di quel canale è posto ad 1. MF0 ed

MF1 sono accessibili solo in scrittura, per entrambi l'indirizzo relativo è A, il canale selezionato è pari al valore del

bit 0 del dato ed infine il valore da inserire nel flag deve esssere posto sul bit 2 del dato. 36

Parte I - descrizione funzionale e modalità d'uso di ASIM

bit azione svolta se il bit è posto ad 1

0 termine conteggio per il canale 0

1 termine conteggio per il canale 1

2 è stata inoltrata una richiesta al canale 0

3 è stata inoltrata una richiesta al canale 1

4 non utilizzato

5 abilita il trasferimento da memoria a memoria

6 impone che in un trasferimento da memoria a memoria l'indirizzo sorgente deve rimanere costante per

trasferire un byte in più locazioni di memoria

7 abilita il DMA controller Tabella 9-Significato dei bit di CNTRL

In un trasferimento da memoria a memoria il byte da spostare viene letto dalla locazione sorgente e spostato

in un registro temporaneo, che è stato chiamato TEMP, a questo punto viene realizzata una scrittura col valore

di TEMP nella locazione di memoria di destinazione. Questo registro può essere solo letto ed ha indirizzo relativo

pari a D.

L'ultimo registro da descrivere è CNTRL; esso è diviso in 2 parti: i 4 bit meno significativi rappresentano i bit

di stato del componente, mentre quelli più significativi i bit di controllo. Su questo registro possono essere fatti

accessi, all'indirizzo relativo 8, sia in lettura che in scrittura, queste ultime però non influenzano i 4 bit di stato. Il

significato dei bit di CNTRL é specificato in Tabella 9.

Un quadro riassuntivo sull'indirizzamento dei registri e dei flag del componente è riportato in Tabella 10.

Indirizzo relativo Indirizzo relativo binario Tipo di Nome del registro o del flag

esadecimale accesso

0 0000 W/R CADDR0

1 0001 W/R CCOUNT0

2 0010 W/R CADDR1

3 0011 W/R CCOUNT1

8 1000 W/R CNTRL

9 1001 W RF0/RF1

A 1010 W MF0/MF1

B 1011 W MODE0/MODE1

D 1101 R TEMP

Tabella 10-Indirizzamento dei registri e dei flag del DMA controller

4.6.7 Descrizione dei comandi

I comandi disponibili sono:

• RESET che riporta il componente nello stato iniziale azzerando tutti i registri; per attivarlo basta accedere

in scrittura all'indirizzo relativo D;

• Clear Mask Flag (CMF) che cancella tutti i flag MF, si attiva scrivendo all'indirizzo relativo E;

37

Parte I - descrizione funzionale e modalità d'uso di ASIM

• Write All Mask Flag (WAMF) che permette di fissare contemporaneamente tutti i flag MF; la scrittura

deve avvenire all'indirizzo relativo F ed il valore di MF0 deve essere posto nel bit 0 del dato, mentre il

valore di MF1 nel bit 1.

Indirizzo relativo esadecimale Indirizzo relativo binario Tipo di accesso Nome del comando

D 1101 W RESET

E 1110 W CMF

F 1111 W WAMF

Tabella 11-Indirizzi dei comandi del DMA controller

In Tabella 11 sono presentati gli indirizzi di attivazione dei comandi.

4.6.8 Programmazione

Prima che sia effettuata la richiesta di un trasferimento dati tra la memoria ed una interfaccia periferica si

devono fissare i valori nei registri del canale interessato al trasferimento e nel registro di controllo.

Nell'ipotesi che il canale adoperato sia quello '0', le operazioni da eseguire sono le seguenti:

• scrivere all'indirizzo relativo 0 (registro CADDR0) una word indicante l'indirizzo del primo byte, del blocco

in memoria, da trasferire;

• scrivere all'indirizzo relativo 1 (registro CCOUNT0) una word indicante il numero di byte che si vuole

trasferire;

• scrivere all'indirizzo relativo B esadecimale (registro MODE0) un byte che indichi il modo di funzionare

del canale (direzione del trasferimento, autoinizializzazione, incremento o decremento di CADDR0, modo

del trasferimento Single o Block);

• scrivere all'indirizzo relativo 8 (registro CNTRL) un byte che abiliti il controllore.

Un primo esempio di inizializzazione è di seguito illustrato. In esso si presuppone che A0 sia stato

precedentemente caricato con l'indirizzo più basso associato al DMA controller.

Queste istruzioni abilitano il controllore a realizzare un trasferimento di tipo SINGLE dalla memoria

all'interfaccia collegata al canale 0. Il numero di byte da trasferire è 32 (20 esad.), gli indirizzi sono quelli

crescenti da 1000 esad. in poi. Infine è stata abilitata l'autoinizializzazione, che permette di ricaricare, al termine

del trasferimento, i registri CADDR0 e CCOUNT0 con i rispettivi registri di base, rendendo così il componente

pronto ad eseguire un nuovo trasferimento. 38

Parte I - descrizione funzionale e modalità d'uso di ASIM

MOVE.W #$1000,0(A0)

MOVE.B #$20,1(A0)

MOVE.B #$10,11(A0)

MOVE.B #$80,8(A0)

Il trasferimento inizia, comunque, quando la periferica collegata al canale '0'spedisce una richiesta al DMA e

quest'ultimo l'accetta. La richiesta potrebbe anche realizzarsi via software con la seguente istruzione:

MOVE.B #$08,9(A0)

Per un trasferimento di un blocco di byte all'interno della memoria le operazioni da eseguire sono le seguenti:

• scrivere all'indirizzo relativo 0 (registro CADDR0) e 2 (registro CADDR1) due word indicanti gli indirizzi

del primo byte, del blocco in memoria, rispettivamente sorgente e destinazione;

• scrivere all'indirizzo relativo 3 (registro CCOUNT1) una word indicante il numero di byte che si vuole

trasferire;

• scrivere due volte all'indirizzo relativo B esadecimale (registri MODE0 e MODE1) un byte che indichi il

modo di funzionare del canale 0 (sorgente) e del canale 1 (destinazione) per quanto riguarda

l'autoinizializzazione e l'incremento o il decremento di CADDR0 e CADDR1);

• scrivere all'indirizzo relativo 8 (registro CNTRL) un byte che abiliti il controllore ed il trasferimento da

memoria a memoria.

Un esempio di inizializzazione su questo tipo trasferimento è riportato di seguito; anche in questo esempio in

A0 è presente l'indirizzo più basso associato al DMA controller.

Queste istruzioni abilitano il controllore a realizzare un trasferimento in memoria di un blocco di 64 byte (40

esad.) a partire dall'indirizzo (sorgente) 1000 esad. in poi. Esso deve essere trasferito nella zona di memoria

successiva all'indirizzo 2000 esad. (destinazione). Infine è stata disabilitata l'autoinizializzazione sia per il canale

sorgente che per quello destinazione. 39

Parte I - descrizione funzionale e modalità d'uso di ASIM

MOVE.W #$1000,0(A0)

MOVE.W #$2000,2(A0)

MOVE.B #$40,3(A0)

MOVE.B #$00,11(A0)

MOVE.B #$01,11(A0)

MOVE.B #$A0,8(A0)

4.6.9 Il comportamento.

Un DMA controller è progettato per servire una o più interfacce, nel nostro caso le interfacce collegabili sono

massimo 2. Questa scelta è dettata dall'esiguo numero di parametri che definiscono un Chip in ASIM. Una

convenzione stabilita per le periferiche che si collegano a un canale di questo dispositivo è che i dati sono

trasferiti riferendosi al suo indirizzo più basso, cioè al valore del parametro Indirizzo 1 di quella periferica.

Il controllore quando richiede il bus ad un processore blocca le operazioni di quest'ultimo fino al momento del

rilascio il bus.

In questa descrizione, quando ci riferiremo ad un registro senza indicare il numero finale del suo nome,

s'intenderà il registro relativo al canale sul quale si sta realizzando il trasferimento.

Quando un device collegato ad un canale del D.M.A. manda una richiesta, e il flag MF di quel canale è

uguale a zero, viene settato il bit corrispondente in CNTRL: il bit 2, se la richiesta è pervenuta sul canale 0, o il bit

3, se la richiesta sopraggiunge sul canale 1. Se poi il bit 7 del registro CNTRL (che abilita il dispositivo) è uguale

a uno, il dispositivo spedisce al processore una richiesta di bus il quale nel nostro caso viene automaticamente

concesso.

La direzione del trasferimento dipende dal valore del bit 3 del registro MODE di quel canale, se pari a zero, il

trasferimento si realizza dalla memoria al device, altrimenti avviene nella direzione opposta. Se, invece, il bit 5 di

CNTRL è uguale ad 1, il trasferimento si verifica da memoria a memoria.

Una volta impossessatosi del bus il controllore effettua, per un trasferimento da Device a memoria, una

lettura all'indirizzo più basso associato al device e una scrittura del dato letto all'indirizzo di memoria presente nel

registro CADDR di quel canale, ovviamente, nel caso di trasferimento da memoria a device, le operazioni sono

invertite.

Comunque in entrambi i casi viene decrementato di una unità il registro CCOUNT del relativo canale mentre

il registro CADDR viene incrementato o decrementato di una unità rispettivamente, se il bit 5 del registro MODE

è pari a zero o ad uno.

Il bus viene rilasciato al processore dopo il trasferimento del singolo byte o dell'intero blocco se

rispettivamente il valore del bit 7 di MODE è zero o uno.

Al termine del trasferimento di un blocco, cioè quando il valore CCOUNT diventa nullo,

• viene cancellato il flag RF (è il flag dove un processore può indirizzare le sue richieste ed hanno gli stessi

effetti di quelle che arrivano dai device), 40

Parte I - descrizione funzionale e modalità d'uso di ASIM

• è azzerato il bit 2 o 3 di CNTRL (bit delle richieste) se abbiamo utilizzato rispettivamente il canale zero o

uno,

• è posto ad uno il bit 0 o 1 di CNTRL (bit di fine conteggio) rispettivamente per il canale zero e uno,

• infine viene inviata un'interruzione del tipo specificato in COM3 al gestore delle interruzioni specificato in

COM4.

Per un trasferimento da memoria a memoria viene effettuata, prima una operazione di lettura all'indirizzo

contenuto in CADDR0 ed il dato viene posto nel registro TEMP, poi questo valore viene scritto all'indirizzo di

memoria contenuto in CADDR1.

Dopo un trasferimento il registro CCOUNT1 viene decrementato di una unità mentre CADDR0 e CADDR1

vengono incrementati o decrementati di una unità, se il bit 5 dei rispettivi registri MODE è pari a zero o ad uno.

Se però il bit 6 di CNTRL è posto ad 1 allora CADDR0 rimane costante durante il trasferimento.

Il bus viene rilasciato al processore dopo il trasferimento dell'intero blocco, cioè quando il valore in CCOUNT1

diventa nullo. Alla fine del trasferimento viene azzerato il bit 5 di CNTRL, il quale attiva i trasferimenti da memoria

a memoria.

Qualunque sia il tipo di trasferimento, se il bit 4 di un registro MODE è fissato ad 1, allora al termine del

trasferimento di un blocco i registri CADDR e CCOUNT di quel canale sono caricati con i valori rispettivamente

di BADDR e BCOUNT; questi registri in fase di scrittura di CADDR e CCOUNT assumono il loro stesso valore.

41

Parte I - descrizione funzionale e modalità d'uso di ASIM

4.7 Il dispositivo PIA Periferal Interface Adapter

I campi relativi alla configurazione del dispositivo sono così codificati:

Name MM6821PIA

Type Identificatore assoluto nella configurazione

Address1 Indirizzo base

Address2 Indirizzo base+3

BUS Identificatore di bus esterno a cui rendere visibile le

memorie di bus/mem

COM1 Identificatore dispositivo gestore delle interruzioni

generate dall'oggetto

COM2 Controllo linea Interruzione IRQA: XXYZ (XX=#vettore,

Y=livello di priorita', Z=linea di interruzione

COM3 Controllo linea Interruzione IRQB: XXYZ (XX=#vettore,

priorità, Z=linea di interruzione

COM4 Identificatore assoluto dell'oggetto a cui il porto parallelo

e'connesso Tabella 12

Il dispositivo PIA (Periferal Interface Adapter) è un dispositivo parallelo a parallelismo 8 bit facente parte della

famiglia dei processori Motorola. Il dispositivo contiene due sezioni quasi identiche ciascuna dotata di 8 bit dati

configurabili, anche singolarmente, come linee di ingresso o di uscita. Ciascun porto può, quindi, funzionare in

ingresso, uscita o in configurazione mista (in-out). Delle due coppie di linee di controllo per la sincronizzazione

della periferica connessa al dispositivo CA1 e CB1 sono sempre di ingresso al dispositivo, e servono a

controllare la linea di interruzione IRQA (o IRQB) verso il processore; le altre, CA2 e CB2, possono essere

programmate per operare sia in ingresso, in tal caso si comportano in modo analogo alla CA1 e CB1 sia in

uscita per implementare forme di handshaking. Il tipo di operazioni di interruzione o di controllo realizzabile con le

due linee può essere opportunamente programmato come di seguito mostrato, mediante il registro di controllo.

4.7.1 Programmazione del dispositivo PIA

Il dispositivo PIA simulato in ASIM è derivato da quello commerciale MC6821 ed è, dal punto di vista

funzionale, molto simile a detto chip conservandone i sei registri interni ad otto bit: due registri per il trasferimento

dei dati da e verso la periferica (PRA e PRB); due registri di controllo/stato (CRA e CRB); due registri, DRA e

DRB, per il controllo della direzione dei dati (in input o in output). Poiché al dispositivo sono riservati solo quattro

indirizzi, per accedere ai sei registri viene utilizzato un meccanismo di indirizzamento interno. 42

Parte I - descrizione funzionale e modalità d'uso di ASIM

Tabella 13-Indirizzamento dei registri interni

Le due sezioni del dispositivo PIA sono programmabili per

Controllo di CA1 (o CB1): CA1 consente di controllare il flag di interruzione IRQA1 presente nella parola di

stato-controllo di 8 bit posto in posizione b7. In particolare, tale bit va alto a seguito della transizione attiva di CA1.

Il flag è automaticamente resettato dalla lettura del registro dato da parte del processore. La transizione attiva è

del tipo 1-0 se il bit b1=0, è del tipo 0-1 se b1=1. Lo stato del flag IRQA1 si ripercuote sulla linea di interruzione

IRQA verso il processore, generando così, nel caso di transizione 1-0, una interruzione quando il bit b0=1. Se

b0=0 tale trasmissione non è effettuata disabilitando così la generazione di interruzioni. Quanto detto per CA1

vale anche per CB1.

Controllo di CA2 (o CB2): il controllo di CA2 è differente a seconda che tale linea sia stata programmata per

operare come linea di ingresso o di uscita.

CA2 (o CB2) come linea di ingresso (b5=0): si comporta come CA1 con la differenza che il flag di interruzione

interessato è IRQA2 ed i bit di programmazione sono b3 nelle funzioni di b0 e b4 nelle funzioni di b1. Quanto

detto vale anche per CB2.

CA2 o (CB2) come linea di uscita (b5=1): in tal caso CA2 consente di controllare la periferica. Sono previsti 3

possibili modi di sincronizzazione codificati con i bit b4 e b3:

Tabella 14-Formato del byte di controllo

La Tabella 13, dove AD1 e AD0 sono i due bit meno significativi dell'indirizzo, mostra come selezionare i

singoli registri; ad esempio, PRA e DRA hanno lo stesso indirizzo, ma è possibile selezionare uno dei due

fissando prima il valore del bit 2 di CRA.. Poiché il dispositivo ha un bus ad otto bit, le sole operazioni di lettura o

scrittura consentite sono quelle sul byte. 43

Parte I - descrizione funzionale e modalità d'uso di ASIM

Tabella 15-Controllo della linea CA1(CB1)

I registri PRA, DRA, CRA consentono il controllo completo di un insieme di otto linee dato da connettere

verso una periferica (linee A0..A7). Ciascuna linea può essere programmata separatamente come linea di uscita

o di ingresso settando, rispettivamente ad 1 o a 0, il corrispondente bit del registro DRA. Quando si scrive su

PRA, il valore dei singoli bit di PRA compare sulle corrispondenti linee dati programmate come output; quando si

legge su PRA, i singoli bit di PRA assumono i valori presenti sulle linee programmate come input. Per gestire la

sincronizzazione con la periferica, sono previste due ulteriori linee: CA1 e CA2. La linea CA1 è di

sincronizzazione in ingresso. Le funzioni possono essere programmate, come mostrato in Tabella 15, definendo

i due bit meno significativi di CRA; CA2 è una linea di sincronizzazione che può essere in input o in output; la

Tabella 16, la Tabella 19 e la Tabella 18mostrano come programmare tale linea.

A provocare l'acquisizione o l'invio di un dato verso la periferica sono, in generale, le transizioni low/high o

high/low delle linee di sincronizzazione.

Il significato dei singoli bit di CRA è mostrato in Tabella 14; i bit 6 e 7 sono a sola lettura e rappresentano i

flag di interruzione; se le interruzioni sono abilitate, quando uno dei due flag diviene alto viene inviata al gestore

delle interruzione l'IRQA (si veda la successiva descrizione dei parametri). 44

Parte I - descrizione funzionale e modalità d'uso di ASIM

Tabella 16-Effetti delle variazioni sulla linea CA2 (CB2 ) in ingresso

Per il gruppo di registri PRB, DRB e CRB vale quanto detto per il gruppo precedente; le differenze sono nelle

funzioni attribuite alle linee di sincronizzazione come mostrato nelle tabelle.

La finestra associata a M6821PIA ne mostra tutti i registri (Fig. 25); il valore di tali registri può essere

modificato, oltre che da programma, utilizzando il comando Modifica Valore del menù Device. E' possibile

ridirigere l'input e l'output verso file anziché verso una periferica con i comandi Input da File e Output su File del

menù Device. 45

Parte I - descrizione funzionale e modalità d'uso di ASIM Tabella 17

Tabella 18

Per aggiungere un M6821PIA ad una configurazione si deve selezionare dal menù Configura il comando

Aggiungi Device e specificare tutti i parametri previsti nella finestra di dialogo.

Fig. 25

Il "Nome Elemento" è M6821PIA. L'Indirizzo 1 deve essere pari ed "Indirizzo 2" deve essere uguale a

"Indirizzo 1" + 3. "BUS" deve contenere l'Identificatore del bus cui il dispositivo è connesso. "Com1" contiene, se

previsto, l'Identificatore del dispositivo gestore delle interruzioni. "Com2" e "Com3" definiscono le linee di

interruzione IRQA e IRQB previste dal dispositivo (associate ai flag di interruzione, rispettivamente, dei registri

CRA e CRB); i valori attribuibili a tali parametri sono quelli già più volte specificati; si osservi che, se "Com1" è

diverso da zero, le linee di interruzione devono essere specificate e non possono essere nulle.

Infine, "Com4" viene utilizzato per specificare l'eventuale dispositivo periferico cui M6821PIA è connesso;

nell'attuale versione di ASIM, l'unico dispositivo cui un M6821PIA può essere connesso è un altro M6821PIA.

L'identificatore del dispositivo da connettere va nelle due cifre meno significative di "Com4". Le altre due cifre

servono per definire le connessioni; di queste la meno significativa deve assumere uno dei seguenti valori:

• 0 linea CA2 connessa alla linea CA1 del dispositivo periferico;

• 1 linea CA2 connessa alla linea CA2 del dispositivo periferico;

• 2 linea CA2 connessa alla linea CB1 del dispositivo periferico;

• 3 linea CA2 connessa alla linea CB2 del dispositivo periferico; 46

Parte I - descrizione funzionale e modalità d'uso di ASIM

nei primi due casi le linee dati A sono connesse alle linee dati A del dispositivo periferico; nei rimanenti due, le

linee dati A sono connesse alle linee dati B del dispositivo periferico.

La più significativa deve assumere uno dei seguenti valori:

• 0 linea CB2 connessa alla linea CA1 del dispositivo periferico;

• 1 linea CB2 connessa alla linea CA2 del dispositivo periferico;

• 2 linea CB2 connessa alla linea CB1 del dispositivo periferico;

• 3 linea CB2 connessa alla linea CB2 del dispositivo periferico;

nei primi due casi le linee dati B sono connesse alle linee dati A del dispositivo periferico; nei rimanenti due, le

linee dati B sono connesse alle linee dati B del dispositivo periferico.

E' cura di chi definisce la configurazione fare in modo che le connessioni definite per i due dispositivi siano

coerenti. Inoltre, poiché all'accensione della macchina da simulare tutti i registri sono nulli, chi programma deve

opportunamente inizializzare i dispositivi prima di tentare un trasferimento dati. 47

Parte I - descrizione funzionale e modalità d'uso di ASIM

4.8 Il dispositivo video-tastiera TERMINAL

I campi relativi alla configurazione del dispositivo sono così codificati:

Name TERMINAL

Type Identificatore assoluto nella configurazione

Address1 Indirizzo registro dati (tastiera in scrittura, video in

lettura)

Address2 Indirizzo registro stato-controllo

BUS Identificatore di bus esterno a cui è connesso l'oggetto

COM1 Identificatore dispositivo gestore delle interruzioni

generate dall'oggetto

COM2 Controllo Interruzione dovuta ad ENTER: XXYZ (XX=#vettore,

Y=livello di priorità , Z=linea di interruzione

COM3 Idem a COM2 ma per interruzione dovuta a Buffer Full

COM4 n.s. va posto a 0

Tabella 19

ASIM mette a disposizione, come dispositivo base per realizzare l'I/O da e per un sistema, un dispositivo da

utilizzare, appunto, come terminale video- tastiera denominato TERMINAL.

Fig. 26-Finestre ASIM associate al TERMINAL

Nella finestra associata a questo dispositivo (Fig. 26) appare l'output destinato al terminale compreso l'eco

dell'input da tastiera. Il video simulato è alfanumerico con dieci righe di quaranta caratteri; la tastiera coincide con

quella del PC IBM (eslusi i tasti speciali: Ctrl, Alt, Esc, tasti funzione e movimento cursore) e prevede i tasti di

"backspace" ed "enter".

Quando la finestra di TERMINAL diviene quella corrente, la tastiera del PC (esclusi i tasti speciali che

svolgono le solite funzioni previste da Windows) emula quella del dispositivo nel senso che un eventuale input da

tastiera appare nella finestra e viene inviato all'elaboratore che si sta simulando. Più precisamente, la tastiera

accetta dei caratteri solo se è abilitata e l'input va a video solo se la funzione di eco è attiva. Dopo l'accensione

della macchina che si sta simulando sia la tastiera sia l'eco sono disabilitati; per attivarli occorre modificare il

48

Parte I - descrizione funzionale e modalità d'uso di ASIM

valore del registro di controllo e stato: CNTRL. Questo è un registro di un sol byte i cui bit, a partire dal meno

significativo, svolgono, se al valore 1, le seguenti funzioni:

• bit 0) abilita interruzione su "Buffer full";

• bit 1) abilita interruzione sull'"ENTER";

• bit 2) cancella video;

• bit 3) pulisci buffer di tastiera;

• bit 4) abilita tastiera;

• bit 5) abilita eco;

• bit 6) stato di "Buffer full";

• bit 7) stato di ENTER inviato.

Il contenuto del registro CNTRL può essere modificato o da programma o utilizzando il comando Modifica

Valore del menù Device. Il comando Mostra Registri apre una finestra di dialogo in cui appare il registro CNTRL,

il numero di caratteri presenti nel buffer di tastiera e la posizione nel buffer dell'ultimo carattere letto dal

processore (Fig. 26).

Per comprendere il significato di questi due numeri è necessario conoscere il meccanismo di gestione

dell'input e output da parte del dispositivo in esame.

TERMINAL ha due indirizzi d'accesso: il primo è associato al buffer di tastiera e al video, il secondo al registro

CNTRL. Un'operazione di accesso in scrittura sul primo indirizzo comporta la stampa a video del carattere

scritto; i caratteri validi sono quelli con codice ASCII compreso tra 32 e 126 (estremi inclusi) ed il carattere con

codice 13 che provoca il ritorno a capo. Quando una riga è piena, il successivo carattere viene scritto nella riga

seguente; se tutte le dieci righe sono piene il testo scorre di una riga verso l'alto. Ponendo ad 1 il bit 2 di CNTRL,

si pulisce lo schermo e si riporta il cursore in alto a sinistra.

Un'operazione di accesso in lettura sul primo indirizzo consente di prelevare un carattere dal buffer di tastiera.

Partendo dallo stato di buffer di tastiera vuoto e con tastiera ed eco abilitati, si digiti una frase qualsiasi. Per ogni

carattere premuto, il corrispondente carattere va nel buffer di TERMINAL ed appare nella finestra; inoltre il

numero di caratteri nel buffer si incrementa di un'unità. Se vengono battuti più di 256 caratteri la tastiera viene

disabilitata, il bit 6 di CNTRL va ad 1 e, se il bit 0 è alto, viene inviata un'interruzione per segnalare al processore

la condizione di "Buffer full". Quando si è completata la frase (con meno di 256 caratteri) va premuto il tasto di

ENTER; ciò porta TERMINAL a disabilitare la tastiera, ad alzare il bit 7 di CNTRL ed ad inviare al processore un

interruzione se il bit 1 di CNTRL è alto; ogni qualvolta il processore legge un carattere dal buffer, il numero di

caratteri letti, inizialmente nullo, si incrementa di uno; tale numero rappresenta un puntatore al primo carattere

non letto e, il fatto che si incrementi man mano, fa si che il processore legga, nel corretto ordine, tutti i caratteri

nel buffer. L'ultimo carattere è sempre l'ENTER; per riattivare la tastiera e pulire il buffer occorre portare al valore

1 i bit 3 e 4 di CNTRL.

Ponendo a 0 il bit 5 di CNTRL si disabilita l'eco; ciò è utile quando si vuole nascondere l'input di tastiera come

nel caso in cui venga digitata una password.

Per aggiungere un terminale ad una macchina da simulare va selezionato il comando Aggiungi Device del

menù Configura e vanno specificati i parametri nell'apposita finestra di dialogo (figura 3). Il "Nome Elemento" è

TERMINAL; l'"Indirizzo1" DEVE essere pari ed è quello associato al video e buffer di tastiera; l'"Indirizzo2" DEVE

essere quello successivo ad "Indirizzo 1" ed è quello associato a CNTRL. 49

Parte I - descrizione funzionale e modalità d'uso di ASIM

In "BUS" va posto l'Identificatore del bus cui è connesso il dispositivo. In "Com1" va posto, se previsto,

l'Identificatore del gestore delle interruzioni. "Com2" e "Com3" vengono utilizzati per specificare le linee di

interruzione, rispettivamente, per ENTER e "Buffer full"; delle quattro cifre esadecimali che definiscono questi

parametri, la meno significativa individua la linea di interruzione, la seconda definisce la priorità e le due più

significative specificano il "vector number". Se "Com1" è diverso da zero, la linea (cifra meno significativa di

"Com2" e "Com3") DEVE essere diversa da zero; le altre ciftre possono essere nulle. Infine "Com4" DEVE

essere lasciato al valore zero. 50

Parte I - descrizione funzionale e modalità d'uso di ASIM

4.9 Il dispositivo USART

I campi relativi alla configurazione del dispositivo sono così codificati:

Name I8251USART

Type Id. assoluto nella configurazione (01->FF)

Address1 Indirizzo base device (deve essere pari)

Address2 Indirizzo base+1

BUS Identificatore di bus esterno a cui è connesso il device

COM1 Identificatore dispositivo gestore delle interruzioni

generate dall'oggetto

COM2 Controllo linea Interruzione Rx

COM3 Controllo linea Interruzione Tx

COM4 xxyz: xx=id device connesso; y=0 connessione completa; y=1

connessione semplice;z=n.c.

Tabella 20

Tali dispositivi permettono:

• di realizzare il collegamento di una periferica seriale (ad esempio una tastiera) ad un calcolatore,

• di collegare due computer distanti attraverso una linea telefonica,

• di convertire un dato dal formato parallelo a quello seriale e viceversa.

Il componente preso di riferimento per questa simulazione è l'USART Intel 8251A.. In Fig. 27 è mostrato il

suo modello con i registri e le linee fisiche simulate.

Fig. 27-Modello del dispositivo USART

Per questo componente sono stati realizzati i registri e le posizioni dei bit nei registri aderenti al componente

reale. 51


PAGINE

73

PESO

523.04 KB

AUTORE

flaviael

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria informatica
SSD:
A.A.: 2013-2014

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher flaviael di informazioni apprese con la frequenza delle lezioni di Calcolatori Elettronici II e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Napoli Federico II - Unina o del prof Mazzeo Antonino.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Calcolatori elettronici ii

Calcolatori Elettronici II – Gerarchia memorie
Dispensa
Calcolatori Elettronici II - Reti Sequenziali
Dispensa
Calcolatori Elettronici II
Dispensa
Calcolatori Elettronici II - Tesina
Appunto