Che materia stai cercando?

Ambiente per la SImulazione dei sistemi a Microprocessore Appunti scolastici Premium

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

• il lancio del programma con la configurazione desiderata già aperta chiamando il relativo file *.cfg dal

"FileManager" di Windows;

• la creazione di una configurazione mediante il meccanismo di "taglia e incolla" tipico di Windows;

• la visualizzazione completa dei dati relativi a ciascuna configurazione;

• la stampa di detti dati con font di caratteri, intestazione e piè di pagina selezionabili; numerazione

automatica delle pagine;

• l'anteprima di stampa delle pagine da inviare alla stampante;

• l'esecuzione veloce di una simulazione;

• la simulazione contemporanea di due configurazioni;

• la simulazione in background mentre si lavora su un'altra configurazione;

• l'accesso rapido ai comandi mediante ToolBar;

• l'help in linea su barra di stato;

• l'help da indice o dipendente dal contesto;

• l'accesso alla "Guida alla Guida" in Windows;

• la protezione da errori d'uso mediante il meccanismo di mascheramento dei comandi.

2 Il meccanismo di simulazione e l'architettura ad oggetti di ASIM

2.1 Il meccanismo di simulazione

Una simulazione in ASIM è caratterizzata dal disegno di una specifica configurazione di sistema a

microprocessori, in cui possono essere utilizzati gli oggetti messi a disposizione dall'ambiente. Tutti gli oggetti

inclusi in una configurazione entrano a far parte di una lista che il simulatore consulta per sviluppare i singoli

passi di simulazione o per effettuare controlli di consistenza delle interfacce dei vari oggetti, specialmente per

quel che concerne la loro interconnessione. Definita la configurazione della macchina da simulare (mediante

l'ausilio dell'editor di configurazione) si provvede a "costruirla" premendo il bottone di "costruzione" indicato in Fig.

2 e ad attivarla premendo il bottone di "accensione" (o l'equivalente voce ON/Reset del Menù Simulazione) della

macchina realizzata.

All'attivazione di una configurazione, ASIM esegue una serie di controlli sulle connessioni predisposte tra i

dispositivi. In particolare, la finestra principale invia un messaggio Windows (WM_RESET) a ciascun dispositivo

interessato e i cui dati caratterizzanti sono raccolti in un oggetto della lista e aspetta (messaggio bloccante) che

questo esegua i necessari controlli. Se il dispositivo trova qualche errore di configurazione, mostra una finestra di

dialogo per segnalarlo all'utente e restituisce un codice di errore alla finestra principale che blocca i controlli e

sospende la simulazione. Solo se non è stato restituito il codice di errore, la finestra principale invia lo stesso

messaggio ad un altro dispositivo e, solo se tutti i controlli per ogni componente danno esito positivo, abilita i

comandi per la simulazione (si vedano per i dettagli CMainWindow e CBaseWnd) nel sorgente. 5

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

Bottone di Bottone di

Bottone di

Costruzio chiamata di

Restart Asimtool

Simulazion

Bottone di

Accensio Bottone di

Bottone di

Bottone di Fast

Run

Single Step Simulation

Simulation

Simulation

Fig. 2-La barra di controllo di ASIM

Analogo è anche il meccanismo di esecuzione di un passo di simulazione, ma con un'importante differenza: i

messaggi sono inviati in rapida successione e senza attendere risposta.

Per controllare l'esecuzione di un passo di simulazione la finestra principale utilizza due parametri: ClockHigh

è booleano ed è TRUE se un passo di simulazione è in corso, ChildBusy che indica in ogni istante il numero di

dispositivi che stanno eseguendo un passo di simulazione.

Alla richiesta di un passo di simulazione ClockHigh è posto a TRUE e la finestra principale invia a tutti i

dispositivi il messaggio WM_CLOCK senza attendere risposta (messaggio non bloccante); ChildBusy assume

un valore pari al numero di componenti che formano la configurazione, ad indicare il fatto che tutti i dispositivi

stanno IN PARALLELO eseguendo le operazioni previste dal passo di simulazione (operazioni che comportano

in generale un'interazione tra i vari dispositivi).

Quando un dispositivo ha completato l'esecuzione del passo di simulazione lo segnala alla finestra principale

inviando il messaggio WM_COMPL; la finestra principale decrementa ChildBusy. Quando tutti i dispositivi hanno

completato (ChildBusy è tornato a zero), ClockHigh è riportato a FALSE ed un nuovo passo di simulazione può

essere richiesto (in appendice CMainWnd::TraceProg riporta il codice richiesto per il lancio di un passo di

simulazione).

Ogni passo di simulazione prevede le operazioni appena descritte; ASIM consente oltre all'esecuzione di

passi singoli di simulazione (Single Step Simulation), uno ad ogni richiesta da parte dell'utente, anche

l'esecuzione in sequenza (Run Simulation) con cui è possibile eseguire il "trace" di una simulazione come

sequenza di passi e l'esecuzione in sequenza veloce (Fast Simulation) con cui la simulazione è eseguita senza

la visualizzazione del "trace" in sottofondo.

2.2 Classi di oggetti attualmente presenti in ASIM

Un sistema calcolatore è costituito da un insieme di componenti (processori, memorie, porti paralleli) fra loro

interconnessi. In Asim, ricorrendo alle proprietà delle classi C++, sono stati implementati modelli di oggetti

componenti da cui poter derivare, secondo il meccanismo di ereditarietà, specifici componenti. Questi, a

seconda dell'attività funzionale svolta e delle modalità di interfacciamento con altri dispositivi, sono stati

raggruppati in quattro classi. L'appartenenza di un dispositivo ad una delle classi predisposte è subordinata alla

verifica di almeno una proprietà che caratterizza la classe (nel ricavare le proprietà si è fatto un confronto tra il

modello proposto e le reali architetture dei sistemi esistenti). Sono descritte, di seguito, le classi allo stato

supportate dal simulatore. 6

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

2.3 Dispositivi Processore e la classe CPU

Processore: un qualsiasi dispositivo che ha lo stato interno rappresentato dal contenuto dei suoi registri, più

un insieme di informazioni riguardanti il/i bus cui è connesso e le eventuali richieste di interruzioni pervenute;

• P1) può eseguire un programma contenuto in una memoria (interna o esterna al dispositivo stesso);

• P2) può accedere attraverso il/i bus cui è connesso ad una memoria (esterna) o ai registri di altri

dispositivi per eseguire operazioni di lettura o scrittura;

• P3) può servire e/o gestire interruzioni provenienti da altri dispositivi, eventualmente assegnando ad esse

un livello di priorità.

Oltre alle CPU, che sicuramente sono classificabili come processore in quanto godono di tutte le proprietà

suddette, rientrano in tale insieme anche i processori video e di IO ed i coprocessori matematici (godono delle

proprietà P1 e P2), i DMA (godono della proprietà P2), i "priority interrupt controller" (godono della proprietà P3)

ed infine strutture "hardware" per la gestione prioritaria delle interruzioni come il "daisy chaining" (godono della

proprietà P3).

Gli oggetti appartenenti a questo insieme sono i processori supportati in ASIM.

2.4 I dispositivi Nodo

Nodo: è un dispositivo il cui stato interno raccoglie informazioni relative alle connessioni con altri nodi ed ai

messaggi in transito da/verso questi;

N1) può consentire la connessione tra dispositivi dello stesso tipo;

N2) può gestire, come nodo intermedio, la connessione tra dispositivi dello stesso tipo, instradando la

comunicazione;

N3) può avere capacità autonome di elaborazione e trasformare (secondo una logica qualsiasi) i messaggi o

dati ricevuti.

N4) può essere connesso ad un bus/memoria.

2.5 Il dispositivo Bus/Memoria

Bus/memoria: un dispositivo il cui stato interno è caratterizzato dai valori assunti da un insieme molto ampio

di registri e/o da informazioni riguardanti i dispositivi che esso connette;

M1) può consentire a dispositivi di tipo processore di leggere o scrivere i suoi registri interni (la selezione

avviene in base all'indirizzo);

M2) può consentire a dispositivi di tipo processore di leggere o scrivere i registri dei dispositivi di tipo

device (la selezione avviene in base all'indirizzo);

M3) regola l'accesso di più dispositivi di tipo processore ai suoi registri ed ai device (in ogni istante al più un

accesso è in corso, gli altri processori devono attendere);

M4) gestisce la memoria fisica effettuando il “mapping” degli indirizzi virtuali negli indirizzi fisici. M5) può

consentire l'esecuzione di cicli non interrompibili di lettura-modifica; 7

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

M6) può connettersi ad altri dispositivi dello stesso tipo sia per costruire accessi da un altro bus sia verso

un altro bus;

2.6 I dispositivi device

Device: tutti i dispositivi che non rientrano nelle tre precedenti classi.

D1) può essere connesso ad un bus/memoria in modo che un processore possa accedere ad esso;

D2) può essere in grado di generare delle interruzioni da inviare ad un processore; nel qual caso deve

essere connesso in qualche modo al processore;

D3) può essere connesso e comunicare con un altro device della stessa macchina o di un'altra macchina;

D4) può connettere dispositivi di tipo processore e bus/memoria a dispositivi del tipo bus/memoria.

8

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

3 Uso di ASIM

3.1 I Menù della barra di Controllo di ASIM

3.1.1 Il menù "File". Fig. 3-Il Menù File

Dal menù File (Fig. 3) è possibile accedere alle tradizionali funzioni di apertura (nuovo o già esistente) di una

configurazione, alla stampa della stessa e all'abbandono di ASIM.

New consente di creare una nuova configurazione aprendo una finestra ed attivando per essa il menù Edit

(paragrafo 1.2); da questo menù sarà possibile selezionare tutti i comandi necessari a definire i

componenti della nuova configurazione. Poiché in ASIM 2.0 è possibile avere più configurazioni aperte

contemporaneamente, il comando New non chiude alcuna precedente configurazione.

Open apre un file di configurazione precedentemente salvato; non chiude alcuna precedente

configurazione.

Close chiude la configurazione corrente; se vi sono state modifiche chiede se il file deve essere

aggiornato.

Save, Save As salva il file di configurazione corrente; Save As consente di specificare un nuovo nome per

il file che diventa anche il nome della configurazione corrente.

Print attivo solo se la finestra corrente è una di quelle che mostra i dati della configurazione; il comando

consente di stampare questi dati con un set di caratteri selezionabile. Se è necessario utilizzare più di

una pagina per stampare i dati, la paginazione è automatica.

Page Setup consente di impostare l'intestazione ed il piè di pagina; tipicamente questi riportano

rispettivamente il nome del file di configurazione ed il numero di pagina.

Print Preview questo comando fornisce un'anteprima di stampa ovvero consente di vedere l'effetto della

stampa della configurazione corrente sulla stampante e con le impostazioni selezionate.

Print Setup imposta la stampante. 9

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

1 .. 4 (Most Recent Used) nome dei file di configurazione usati più di recente; consente di aprire le

relative configurazioni immediatamente, senza passare per il comando Open.

Exit, esce da ASIM; per tutte le configurazioni modificate viene richiesto se salvare o meno le modifiche.

3.1.2 Il menù "Edit".

Dal menù Edit è possibile accedere a tutti i comandi che consentono di definire una configurazione di

sistema; tale configurazione rappresenta la macchina da simulare. Il menù si presenta come in Fig. 4.

Fig. 4-Il Menù Edit

Questo menù è disponibile solo se la finestra corrente è quella che mostra i dati relativi alla configurazione

(corrente); esso mette a disposizione tutti i comandi utili a costruire la macchina da simulare.

Cut Chip elimina il componente selezionato dalla configurazione corrente e salva i dati ad esso relativi

nella Clipboard; con il comando Paste Chip sarà possibile inserire questo componente in un'altra

configurazione. La selezione del componente avviene con un doppio click del mouse nell'area della

finestra che contiene i dati del chip desiderato.

Copy Chip vale quanto detto per Cut Chip con l'unica differenza che il componente selezionato non viene

eliminato dalla configurazione corrente ma se ne crea una copia.

Paste Chip consente di inserire in una configurazione un componente i cui dati sono disponibili nella

Clipboard; grazie a questo comando ed ai due precedenti è possibile creare nuove configurazioni a

partire da precedenti in maniera molto semplice attraverso il tipico meccanismo "copia e incolla" di

Windows.

Create All dalla versione 2.0 di ASIM in poi non necessariamente viene creata insieme al componente

anche la finestra ad esso associata; ciò per evitare di affollare il video di finestre non utili. È possibile

quindi costruire prima una macchina con i comandi di "copia e incolla" o di "Add ..." e poi creare tutte

le finestre associate ai componenti con questo comando. È indispensabile eseguire Create All per

poter rendere disponibili i comandi relativi alla simulazione.

Add CPU, Add Device, Add MMU/BUS, Add Node consentono di aggiungere alla configurazione

corrente un nuovo componente. La finestra associata al nuovo componente è creata immediatamente

solo se è stato dato in precedenza il comando Create All per la configurazione corrente.

10

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

Fig. 5-Menù di Configurazione Oggetti

I comandi Add_CPU, Add_Device, Add_MMU/BUS, Add_Node, danno accesso ad una finestra di dialogo

(Fig. 5) dove possono essere specificati il nome, l'identificatore ed una serie di parametri che caratterizzano

l'elemento da inserire nella configurazione corrente. L'identificatore deve essere un numero compreso tra 01 e

FF e ciascun dispositivo deve avere un identificatore diverso da ogni altro; ogni qual volta, nel definire le

connessioni tra i vari dispositivi, è necessario riferirsi ad un certo elemento, ciò viene fatto specificando il suo

identificatore. Il significato degli altri parametri è in genere dipendente dal particolare elemento e sarà chiarito in

seguito.

Per convenzione i file che contengono le informazioni relative ad una configurazione portano l'estensione

".cfg".

3.1.3 Il menù View (*).

Questo menù (Fig. 6) abilita/disabilita alcune funzionalità offerte dalle classi MFC quali toolbar, barre di stato,

help in linea, selezione dei font di caratteri. Fig. 6-Il Menù View

Toolbar (*), mostra/nasconde la barra che consente l'accesso rapido ad alcuni comandi (toolbar); i tasti

presenti nel toolbar consentono (nell'ordine da sinistra a destra) di attivare immediatamente i comandi:

New, Open, Save, Cut, Copy, Paste, Print, Index, Help, Restart, Stop, Trace, Run, Fast Run, ASIM

Tool.

Status Bar(*), mostra/nasconde la barra di stato; quest'ultima mette a disposizione dell'utente un "help in

linea" ovvero presenta a video una frase che indica l'effetto dell'azione che si sta compiendo o si sta

11

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

per compiere (selezione di un comando, spostamento di una finestra, ecc.). La barra di stato mostra

inoltre due informazioni relative alla configurazione corrente: numero dell'ultimo passo di simulazione

eseguito (clock), numero dell'ultimo passo di simulazione da eseguire prima di interrompere la

simulazione (BreakPoint); queste informazioni sono visibili solo se, rispettivamente, sono attivi i tasti

"Caps Lock" e "Num Lock".

Set Font (*), consente di selezionare il font di caratteri utilizzato dalla finestra che mostra i dati relativi alla

configurazione; quest'ultima deve essere la finestra corrente affinché il comando sia disponibile.

Set Printer Font (*), consente di selezionare il font di caratteri utilizzato dalla stampante; affinché il

comando sia disponibile la finestra corrente deve essere quella contenente i dati relativi alla

configurazione. È ammesso che il font selezionato per la stampante sia diverso da quello selezionato

per lo schermo.

Mirror Display Font (*), forza la stampante ad utilizzare lo stesso font di caratteri selezionato per il video

con il comando Set Font.

3.1.4 Il menù Simulation.

Questo menù (Fig. 7) rende accessibili i comandi previsti dal menù "Schedulatore" di ASIM 1.0 con alcune

modifiche quali la presenza del nuovo comando Fast RUN; inoltre ON/Reset è abilitato solo se, per la

configurazione corrente, è stato dato il comando Create All del menù Edit (paragrafo 1.2).

Fig. 7-Il Menù Simulazione

ON/Reset, accende/resetta la macchina da simulare, controlla le connessioni.

Restart riporta la macchina nelle condizioni in cui si trovava prima di avviare la simulazione.

RUN lancia una simulazione. In ASIM 2.0 è possibile anche l'esecuzione di due simulazioni in parallelo

oppure è possibile lavorare con una configurazione mentre è in corso la simulazione per un'altra

configurazione.

STOP, arresta la simulazione in corso.

TRACE, lancia un singolo passo di simulazione.

Fast RUN esegue le azioni previste dal comando RUN ma prima riduce ad icona tutte le finestre associate

ai componenti presenti nella configurazione corrente; ciò consente di accelerare notevolmente

l'esecuzione di una simulazione.

BreakPoint, fissa il numero di passi dopo cui bloccare automaticamente la simulazione.

12

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

3.1.5 Il menù Window.

Questo menù (Fig. 8) raccoglie i comandi utili alla gestione dell'ambiente a finestre multiple.

Fig. 8-Il Menù Window

Cascade, dispone le finestre in cascata.

Tile, dispone le finestre affiancate.

Arrange Icons, risistema le icone sul fondo della finestra principale di ASIM.

1..n, seleziona una finestra portandola in primo piano (finestra corrente).

3.1.6 Il menù Help.

Questo menù (Fig. 9) raccoglie i comandi utili ad ottenere informazioni su ASIM e sul suo utilizzo.

Fig. 9-Il Menù Help

Index (*), consente di accedere alla guida all'uso di ASIM. Attualmente ASIM 2.0 offre tutto il supporto

necessario a livello di codice per realizzare sia una guida all'uso sia un help dipendente dal contesto;

resta da compilare il file di testo contenente le informazioni.

Using Help (*), consente di accedere a tutte le informazioni necessarie per l'uso di una guida in ambiente

Windows.

About ASIM, mostra le informazioni relative ad ASIM (autore, versione, ecc.). 13

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

3.2 La barra degli strumenti di ASIM

La barra degli strumenti di Asim (Fig. 10) presenta 19 bottoni raggruppati in 3 gruppi. I 9 bottoni del primo

gruppo servono a selezionare le tradizionali funzioni di Windows. I 4 bottoni del secondo gruppo servono ad

attivare la configurazione e a ripristinare e salvare la configurazione di lavoro (workspace), i primi 5 bottoni del

terzo gruppo servono a selezionare le funzioni di Asim di stop, arresto, esecuzione di un passo, esecuzione ed

esecuzione veloce iconizzata di una simulazione. L’ultimo bottone serve ad attivare l’ambiente assembler detto

Asimtool. Bottone di Bottone di

Bottone di

Costruzione Chiamata di

Restart Asimtool

Simulazione

Bottone di

Accensione Bottone di Fast

Bottone di Run

Bottone di Simulation

Simulation

Single Step

Simulation

Fig. 10-La barra degli strumenti di ASIM

Taluni dei comandi indicati nei bottoni e nei Menù di Asim possono essere attivati ricorrendo all'uso dei tasti

funzione così come riportato negli stessi menù. I comandi possono, infine, essere attivati premendo il tasto ALT

e il carattere sottolineato riportato nel nome dei comandi nei vari Menù. 14

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

4 Configurazioni di sistema e degli oggetti di ASIM

In Asim un sistema è descritto mediante una configurazione contenente un insieme di oggetti appartenenti

agli insiemi sopra descritti. Asim è provvisto, come visto, di un editor di configurazioni che per tramite di una

“finestra di dialogo” consente di immettere tutti i parametri necessari a descrivere i singoli oggetti ed il loro

interfacciamento. La finestra di dialogo presenta una maschera comune a tutti gli oggetti di ASIM. Tale

maschera è dotata di 9 campi che, a seconda dell'oggetto, codificano informazioni atte a caratterizzarlo per la

simulazione Ciascun campo della maschera può assumere, pertanto, anche un significato legato allo specifico

oggetto. In generale

configuration name serve per immettere il nome della configurazione in esame;

chip name identifica lo specifico oggetto di un insieme. Esso contiene il nome in codice dell’oggetto se

esistono più oggetti in un insieme o libero se l’insieme contiene un unico dispositivo);

type indica la classe di appartenenza dell’oggetto;

identif èun codice numerico che identifica lo specifico oggetto nell’ambito di una configurazione;

bus individua l’identificativo (identif) di un oggetto bus con cui lo specifico oggetto può interagire in qualche

modo;

address contengono indirizzi fisici compresi nello spazio indirizzi visto dallo specifico oggetto;

com1…com4 servono a codificare particolari caratteristiche di un oggetto.

Gli oggetti attualmente simulabili sono di seguito riportati. Per ciascuno di essi è data una scheda sintetica di

configurazione come oggetto ASIM, la descrizione funzionale e il modello di programmazione. Nel capitolo

successivo sono presentati concreti esempi di configurazione di sistemi ASIM in cui sono impiegati i componenti

qui descritti. Gli esempi sono corredati di programmi scritti in assembler 68000 per il test delle configurazioni

sviluppate.

Si invitano gli studenti a studiare attentamente tali esempi e a proporne, nell'ambito degli elaborati da

sviluppare per gli esami finali, di nuovi. 15

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

4.1 Il dispositivo Processore

Un qualunque processore in ASIM è descritto mediante le seguenti informazioni codificate:

Name Nome dell'oggetto processore (chiave) {M68000,...}

Identif Intero che identifica univocamente l’oggetto CPU in una

configurazione

Type Identificatore dell’insieme di appartenenza dello specifico

oggetto

Address1 Inizializzazione User Stack Pointer (USP)

Address2 Inizializzazione Supervisor Stack Pointer (SSP)

BUS Identificatore del bus cui è connesso il processore

COM1 n.s.

COM2 n.s.

COM3 n.s.

COM4 n.s. Tabella 1

Allo stato l'unico processore attualmente supportato in Asim è il processore MC68000 per il quale è fornito un

assemblatore assoluto (asm.exe) che produce file oggetto e di listing compatibili con ASIM (non è previsto l'uso

di un linker, data la finalità didattica del prodotto). Per quanto riguarda le caratteristiche e l'assembly di questo

processore si rimanda ai manuali Motorola e al manuale del linguaggio assembler e dell'ambiente ASIMtool.

L'assemblatore, a partire da un file simbolico *.a68 genera l'assoluto *.h68 in linguaggio macchina nel

formato S-File di Motorola e un file listing *.lis necessario al simulatore per effettuare il trace simbolico del

programma durante il processo di simulazione.

Quando la finestra corrente è quella associata ad un 68000, tra le varie voci di menù compare anche quella

Processore grazie alla quale è possibile accedere a tutti i comandi precedentemente descritti.

Per il 68000 viene rappresentato (a richiesta con Mostra Registri), oltre a tutti i registri interni, anche il numero

di clock macchina che sono stati necessari per eseguire tutte le istruzioni dall'inizio fino al punto corrente della

simulazione (i valori dei cicli di clock impiegati per eseguire ciascun istruzione sono stati tratti dal manuale del

processore. Sebbene questo numero non tenga conto di eventuali cicli di attesa per l'accesso in memoria,

moltiplicandolo per il periodo di clock della macchina reale che si sta simulando, si ottiene una buona stima dei

tempi di elaborazione "reali" di un dato programma.

Per inserire in una configurazione un 68000 occorre selezionare dal menù Configura il comando Aggiungi

CPU e specificare nella finestra di dialogo (Fig. 11) nel campo nome: M68000. essere indicati in corrispondenza

del parametro "Indirizzo 1" l'indirizzo del puntatore allo stack utente; in corrispondenza di "Indirizzo 2" l'indirizzo

del puntatore allo stack supervisore; in corrispondenza di "BUS" l'identificatore del bus o memoria cui è

connesso il processore. Fig. 11 Finestra di configurazione del processore M68000

Gli altri parametri possono essere lasciati al valore zero non avendo alcun significato.

Si osservi che è di fondamentale importanza che all'indirizzo del puntatore allo stack supervisore corrisponda

effettivamente una locazione in qualche memoria accessibile da parte del processore; se così non fosse,

durante la simulazione, in seguito ad un'operazione che richiede l'accesso a tale indirizzo il bus genera un "bus

16

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

error" e a cui il processore reagisce con il tentativo di salvataggio di alcuni registri sullo stack supervisore; si

innesca quindi un meccanismo che blocca il sistema e lo pone in una condizione di stallo da cui non è possibile

uscire se non con un "reset". Eventi anomali come "bus error", "istruzione illegale", "violazione di privilegio"

vengono sempre segnalati dal programma.

Per comprendere il significato del parametro "BUS" occorre tener presente che in ASIM, così come accade

per una macchina reale, un processore per poter accedere ad una memoria o ad un qualsiasi dispositivo deve

essere connesso ad un bus: specificando il valore di "BUS" si predispone questo collegamento che sarà

realizzato e verificato all'atto dell'accensione logica della macchina.

Il valore dato all'identificatore viene utilizzato nella definizione dei parametri di un device quando questi deve

avere una linea di interruzione connessa al processore. Il meccanismo interno usato da ASIM per la Gestione

delle interruzioni è presentato successivamente, tuttavia, una descrizione generale è indispensabile per poter

definire correttamente alcuni parametri dei device.

Un device può essere connesso ad un dispositivo in grado di gestire un segnale di interruzione, quale può

essere un processore o un priority interrup controller; la connessione avviene su una linea di interruzione ed

ASIM ne mette a disposizione fino a quindici (da 1 a F esadecimale), ma il 68000 ha solo sette livelli è quindi ad

esso non possono essere connesse linee di interruzione oltre la settima. Le richieste di interruzione vengono

elaborate in maniera dipendente dal dispositivo; il 68000 dà sempre spazio a quelle di livello superiore al

corrente, che è indicato nel registro di stato. Oltre alle linee di interruzione ASIM mette a disposizione il supporto

per la gestione delle interruzioni vettorizzate; sono disponibili 256 vettori di interruzione (da 0 a FF esadecimale);

si ricordi però che per il 68000 i primi 63 sono riservati e non vanno utilizzati. Per un device che usa le interruzioni

vettorizzate vanno specificati quindi linea e vettore; quando il processore accetterà l'interruzione eseguirà

l'istruzione corrispondente a tale vettore. Infine il meccanismo più complesso predisposto da ASIM è quello che

fa uso, oltre che dei vettori, anche delle priorità su di una stessa linea: può infatti accadere che dispositivi

connessi alla stessa linea generino interruzioni contemporaneamente, l'ordine può essere stabilito allora via

software dalla routine di gestione delle interruzioni o via hardware (ad esempio con daisy chaining); quello

predisposto è equivalente ad un meccanismo hardware con sedici gradi (da 0 a F esad.) di priorità per linea che

fa in modo che, a parità di livello, venga servita prima l'interruzione a maggior priorità. 17

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

4.2 Il dispositivo Bus/Memoria

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

Name Nome mem/bus (a solo scopo descrittivo);

Identif Intero che identifica univocamente l’oggetto in una

configurazione;

Type Identificatore dell’insieme di appartenenza dello specifico

oggetto;

Address1 Indirizzo base RAM;

Address2 Indirizzo base ROM;

BUS Identificatore di bus esterno a cui rendere visibile le

memorie di bus/mem;

COM1 Identificatore di bus esterno da cui importare la visibilità

degli oggetti ad esso connessi;

COM2 dimensione (in esadecimale) della memoria RAM in blocchi da

1Kbyte;

COM3 dimensione (in esadecimale) della memoria ROM in blocchi da

1Kbyte;

COM4 n.s. Tabella 2

Tale insieme è costituito da un unico oggetto. In ASIM il bus rappresenta, oltre che il mezzo per far cooperare

degli oggetti di una configurazione, il sostegno per la memoria, che essendo intrinsecamente un oggetto passivo

(non dotato di capacità di sviluppare da sola cicli di bus), viene aggregata al dispositivo bus. Un bus può essere

configurato oltre che con memoria associata di tipo RAM e/o ROM anche senza memoria. In tal caso viene

utilizzato per interfacciare altri oggetti (bus, memorie non proprie ed appartenenti ad altri bus, processori, ecc.).

Il dispositivo svolge molteplici funzioni:

• semplice bus da utilizzare per connettervi dispositivi di tipo qualsiasi;

• modulo di memoria RAM e/o ROM

• bus con memoria RAM e/o ROM

• bus con e senza memoria RAM e/o ROM più interfaccia verso un altro bus.

Il tipo di funzione dipende dai valori assegnati ai parametri che compaiono nella finestra di dialogo "Aggiungi

MMU/BUS". Il parametro Nome deve essere posto a "MEMORIA"; l'identificatore va specificato con le note

regole ed il suo valore è quello che verrà utilizzato nel definire il "BUS" per ogni dispositivo che deve essere

connesso a questo.

Address1 è l'indirizzo di base della memoria RAM, la quantità di RAM viene definita dal valore che si dà a

COM2 e precisamente COM2 esprime in esadecimale il numero Kbyte di RAM. Si consiglia di non superare il

valore di 8000 che corrisponde a 32 Mbyte. Se COM2 e posto a zero il bus non presenta alcuna RAM e, in tal

caso, address1 è ininfluente. Quanto detto per la RAM vale per la ROM con riferimento, rispettivamente, a

address2 e COM3. Fig. 12-Finestra di configurazione del BUS/Memoria 18

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

Combinando opportunamente i parametri esaminati è possibile ottenere le configurazioni specificate ai punti

precedenti. In particolare, si può pervenire, come caso limite, ad un componente contenente solo memoria

(RAM e/o ROM) o che si presenta soltanto come BUS. L'identificativo messo nel campo BUS individua un

ulteriore bus esterno

E' importante fare attenzione, nell'assegnare i valori ai parametri, a che gli indirizzi di RAM e ROM non si

sovrappongano. Il parametro "Com4" non svolge alcuna funzione e può essere lasciato al valore nullo.

Combinando opportunamente i parametri esaminati è possibile ottenere le funzioni sopra specificate In realtà

in questo modo si ottiene anche un modulo di memoria pura. L'unica differenza è che, per un modulo di

memoria, che è senza un proprio bus, va anche specificato il bus a cui è connesso: ciò è possibile assegnando a

"BUS" il valore dell'Identificatore di detto bus. Con il metodo visto è possibile realizzare memorie a più moduli;

non vanno però utilizzati più moduli quando gli insiemi di indirizzi di memoria sono contigui; inoltre, quando non si

hanno particolari necessità, è sempre preferibile definire un'unica memoria grande abbastanza da includere le

locazioni dei singoli moduli. Fig. 13-Esempio di visibilità del dispositivo MMU/BUS

Fig. 14-Esempio di visibilità del dispositivo MMU/BUS

Se quello che si è definito è un bus A (con o senza memorie), assegnando a "BUS" il valore di un

Identificatore di un altro bus B, si realizza una connessione tra i due in modo tale che un eventuale processore

connesso al bus B "vede" anche (se ci sono) le memorie RAM e ROM di A ( ma non eventali dispositivi connessi

al bus A); ciò ovviamente nell'ipotesi che gli insiemi di indirizzi di queste memorie siano disgiunti da quelli di

memorie e dispositivi connessi al bus B (Fig. 13 e Fig. 14). 19

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


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