Programmable Interrupt Controller Intel 8259A

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmable Interrupt Controller Intel 8259A"

Transcript

1 Calcolatori Elettronici II 2006/2007 prof. A. Mazzeo Programmable Interrupt Controller Intel 8259A Alessandro Aulitto 885/258 Roberto Bifulco 885/269 Vincenzo Capozzoli 885/221

2 Table of contents Introduzione Analisi delle funzionalità Overview Dettagli di funzionamento Richiesta interruzioni da parte dei dispositivi Macheramento delle interruzioni Valutazione della priorità dell'interruzione Comunicazione dell'interruzione alla CPU Preparazione dell'asservimento dell'interruzione Passaggio dell'interruzione alla CPU Sequenza di dati nel MCS-80/ Sequenza di dati nel Comunicazione di fine interruzione Programmazione del PIC Inizializzazione ICW ICW ICW ICW Comandi dinamici OCW OCW OCW Poll WORD Indirizzamento del PIC Protocollo di comunicazione con la CPU Scrittura di informazioni nel PIC Lettura di informazioni dal PIC Gestione del ciclo!inta Realizzazione del PIC I fase: identificazione dei sottosistemi II fase: sviluppo e testing dei sottosistemi Registro Il codice Il test-banch La simulazione PriorityResolver Il codice Il test-banch La simulazione ReadWriteLogic Il codice Il test-banch La simulazione BUS Il codice Il test-banch La simulazione DataBusBuffer Il codice Il test-banch La simulazione III fase: composizione dei sottosistemi...58

3 3 Unità di test Funzionamento dell'unità di test Realizzazione dell'unità di test Ciclo!INTA Reset delle linee IR Testing Inizializzazione e programmazione Interruzioni in AEOI Interruzioni in non AEOI Scrittura e lettura dei registri interni...77 Programmable Interrupt Controller Intel 8259A 3

4 Introduzione Introduzione Il PIC Intel 8259A è un dispositivo per la gestione delle interruzioni. In questo documento si esaminerà il funzionamento di tale dispositivo, seguendo strettamente le indicazioni fornite dal datasheet ufficiale Intel. Lo scopo finale è giungere alla realizzazione, tramite VHDL, del dispositivo, se non in tutte le sue funzionalità, in un sottoinsieme significativo di queste. In questa prima versione del documento si ignora la possibilità di gestire i PIC in cascata per ridurre la complessità della trattazione. L'approccio alla realizzazione ha seguito tre fasi: Analisi del comportamento del dispositivo Progettazione Testing Il processo di analisi ha suddiviso il PIC in un modello a blocchi funzionali, in modo da favorire un approccio top-down alla comprensione del dispositivo, utile anche alla scomposizione del problema in sotto-problemi di complessità inferiore per la successiva fase di progettazione. Nella fase di progettazione si sono realizzati i blocchi funzionali precedentemente individuati, inquadrandoli in un contesto più ricco di dettagli, necessario alla realizzazione del dispositivo. L'approccio, dopo l'individuazione dei singoli componenti, è stato di tipo bottom-up, con realizzazione di ciascun componente, specifica dettagliata dell'interfaccia e accurato testing dello stesso. Infine, la composizione dei componenti realizzati ha permesso la realizzazione del PIC. L'ultima fase del lavoro è stata la definizione di un dispositivo per il testing del PIC (Tester) e la relativa definizione e analisi delle prove sperimentali compiute con l'ausilio del Tester. Il documento è organizzato seguendo l'approccio utilizzato per la realizzazione del PIC. Il testo è suddiviso in quattro parti: 1. Analisi delle funzionalità: in questa parte si esamina il comportamento del PIC dal punto di vista funzionale, mantenendo un livello di astrazione sufficientemente alto da permettere una facile comprensione del dispositivo. Si analizzano inoltre i dettagli del protocollo di comunicazione con la CPU. 2. Realizzazione del PIC: l'intera fase di progettazione e realizzazione del PIC è contenuta in questa parte. Vengono esaminate le realizzazioni dei singoli componenti interni del PIC e la loro composizione per ottenere il dispositivo finale. A ciascun componente è accoppiata la sua validazione tramite una fase di test specifica. 3. Unità di test: questa parte analizza l'unità di test adoperata per valutare la correttezza del PIC. Vengono esaminate alcune scelte di progettazione e il funzionamento della stessa. 4. Testing: la parte finale del documento riporta i risultati ottenuti dal testing del dispositivo, con l'analisi della correttezza del comportamento. Programmable Interrupt Controller Intel 8259A 4

5 Introduzione 1 Analisi delle funzionalità 1.1 Overview Il PIC gestisce interruzioni, in altre parole, è collegato alle linee dei segnali utilizzate dalle periferiche per comunicare la loro necessità di ricevere attenzione da parte del processore. Lo scopo del PIC è assicurare un meccanismo per gestire correttamente le priorità fra queste richieste, anche in modo dinamico. Per dinamico si intende la possibilità di definire un modello di priorità fra le interruzioni non statico, ma variabile in base a come viene programmato il PIC. Riassumiamo il funzionamento in modo sintetico prima di esaminarlo nel dettaglio: 1. Il PIC riceve i segnali di richiesta interruzioni direttamente dalle periferiche. 2. Il PIC valuta la priorità delle interruzioni ricevute e seleziona quella a priorità maggiore. 3. Il PIC informa la CPU della presenza di un'interruzione. 4. La CPU completa il suo ciclo prima di verificare la presenza dell'interruzione. A questo punto informa il PIC che è pronta a servire la suddetta interruzione. 5. Il PIC, ricevuta la disponibilità dalla CPU, comunica a questa il tipo di interruzione da servire, che servirà alla CPU per accedere alla corretta ISR. 6. A questo punto il PIC riprende dal punto 1 per servire ulteriori interruzioni. Come affermato precedentemente, il PIC è programmabile, in altre parole è possibile configurare opportunamente il suo comportamento. La fase di programmazione del PIC avviene nella fase di avvio del sistema, con un opportuno passaggio di parametri dalla CPU al PIC, secondo un protocollo che verrà specificato nel seguito di questo documento. E' inoltre possibile modificare ulteriori parametri di configurazione inviando appositi comandi. 1.2 Dettagli di funzionamento Nel seguito si esamina con dettaglio il funzionamento del PIC. Il documento è organizzato in modo da considerare la gestione delle funzionalità come suddivise in sotto-problemi di complessità inferiore. Si tenta, con questo approccio, di rendere la comprensione più semplice e la successiva realizzazione facilmente divisibile in fasi indipendenti. Data la complessità del dispositivo, non si pretende di compiere una trattazione del tutto esaustiva, tuttavia, laddove dovessero presentarsi ambiguità e/o imprecisioni, si rimanda al datasheet o a successive versioni di questo documento. Programmable Interrupt Controller Intel 8259A 5

6 1 Analisi delle funzionalità Studiamo i sotto-problemi così come si presentano nel flusso di richiesta interruzione da parte di un dispositivo e conseguente asservimento della stessa. Specifichiamo da subito che quando si fa riferimento alla programmazione del PIC, ci si riferisce a due distinte fasi: inizializzazione e comandi dinamici. La prima viene eseguita all'avvio del dispositivo, passando un numero variabile (fino ad un massimo di 4) di stringhe di comando lunghe ciascuna 8 bit (Stringhe ICW). La seconda fase è definita dinamica poiché può avvenire in qualsiasi momento per influenzare il funzionamento del PIC, e si realizza con il passaggio di stringhe di 8 bit, specificate dai formati OCW1, OCW2, OCW3. Illustrazione 1: Immagine del PIC con definizione dei pin Riassumiamo nel seguito i passaggi concettuali che esegue il PIC: 1. Il PIC viene programmato con le stringhe ICW. 2. Il PIC è operativo ed in attesa di interruzioni, 3. Il PIC riceve una interruzione e ne valuta la priorità 4. Il PIC comunica la presenza di una interruzione alla CPU 5. La CPU informa il PIC di poter servire l'interruzione. 6. Il PIC comunica l'indirizzo della opportuna ISR alla CPU. 7. La CPU serve l'interruzione. 8. Il PIC è nuovamente al punto 2. Da notare che durante tutta la vita del PIC, dopo la fase di inizializzazione, la CPU può con un apposito protocollo comandare il dispositivo tramite le stringhe OCW. Programmable Interrupt Controller Intel 8259A 6

7 1 Analisi delle funzionalità Richiesta interruzioni da parte dei dispositivi I dispositivi sono connessi alle linee di interruzione. Il PIC gestisce 8 distinte linee di interruzione a cui è connesso direttamente tramite i pin IR0...IR7. Chiaramente la richiesta di una interruzione può giungere in contemporanea con un'altra, o è possibile che una richiesta di interruzione non possa essere servita immediatamente ma debba attendere. Queste problematiche chiariscono la necessità di un elemento che tenga memoria delle richieste di interruzioni ricevute dal PIC. A tal proposito è presente un registro di 8 bit, detto IRR (Interrupt Request Register), che ha lo scopo di memorizzare le richieste di interruzioni ricevute dal PIC. I bit del IRR sono in diretta corrispondenza con i bit IR0...IR7. Quindi IRR[0] = IR0 ecc Macheramento delle interruzioni Ciascun sistema che utilizza le interruzioni ha la necessità di specificare a quali interruzioni è sensibile e quali invece desidera ignorare. Tramite le modalità che si specificheranno in seguito, è possibile configurare un apposito registro, OCW1 anche detto IMR (Interrupt Masking Register), per indicare quali interruzioni sono mascherate. Ad esempio, se IMR[0] = 1, allora l'interruzione sulla linea IR0 è mascherata. La successiva figura mostra uno schema concettuale della relazione fra IMR ed IRR: Programmable Interrupt Controller Intel 8259A 7

8 1 Analisi delle funzionalità Valutazione della priorità dell'interruzione Per gestire interruzioni in modo ordinato è fondamentale assegnare a ciascun tipo di interruzione una priorità. Un apposito blocco del PIC gestisce la valutazione della priorità dell'interruzione. La modalità di valutazione è programmata tramite appositi comandi inviati al PIC, che verranno specificati in seguito. Sono disponibili 4 modi di assegnazione della priorità: 1. Fully Nested Mode (Normal Mode): Questo è il modo standard di gestione priorità. Se non programmato diversamente, il PIC utilizza questo modo. La priorità più alta è data alla linea IR0, la più bassa ad IR7. Quando viene servita un'interruzione tutte le interruzioni di livello pari o più basso sono ignorate fino a quando la ISR in esecuzione non termina. Se giunge una interruzione di livello maggiore, viene invece servita. 2. Rotate Mode: Questa modalità si utilizza quando si devono gestire sulle linee di interruzione dei dispositivi che hanno tutti la stessa priorità per il sistema. Si adopera quindi un metodo di rotazione, per cui la linea servita per ultima diviene quella con priorità inferiore. Esempio: In realtà è possibile ruotare in modo alternativo le priorità. La rotazione precedente è infatti detta Automatic Rotation. E' possibile in alternativa utilizzare la Specific Rotation, in cui durante la programmazione del PIC viene specificata la linea IR con priorità minore. Le altre linee vengono impostate di conseguenza. Ad esempio, se la linea con priorità minore è la linea IR5, le priorità, in ordine crescente sono le seguenti: IR5, IR4, IR3, IR2, IR1, IR0, IR7, IR6. 3. Special Mask Mode: Questo modo è utilizzato quando si vogliono selezionare selettivamente le interruzioni. Il funzionamento è piuttosto semplice, tutte le interruzioni che non sono inibite dalla maschera delle interruzioni (Registro OCW1) sono attive, indipendentemente dal livello di priorità che hanno. Questo comportamento differisce dunque dal fully nested mode, in cui le interruzioni di priorità uguale o inferiore a quella servita erano inibite. Programmable Interrupt Controller Intel 8259A 8

9 1 Analisi delle funzionalità 4. Poll Mode: Questo modo è utilizzato per gestire via software le interruzioni. Le interruzioni non sono più comunicate alla CPU, ma devono essere richieste al PIC. L'utilizzo di questo modo presuppone che il segnale INT, che viene utilizzato dal PIC per comunicare alla CPU la presenza di una interruzione, non sia collegato alla CPU, o che il flag che segnala la possibilità di accettare una interruzione da parte della CPU sia sempre disabilitato. Per richiedere la prossima interruzione al PIC (quindi eseguire il Poll), la CPU invia un apposito comando al PIC che risponde con i dati relativi all'interruzione con priorità maggiore (Valutata con uno dei precedenti metodi). Per quanto quest'ultima modalità non riguardi propriamente l'assegnazione di priorità, è stata inserita in questo paragrafo poiché la logica di gestione di una interruzione in arrivo è gestita assieme alla valutazione di priorità. La descrizione di questo blocco funzionale fatta in questo paragrafo verrà approfondita successivamente quando si tratterà della programmazione del PIC. La presentazione appena fatta è tuttavia propedeutica alla comprensione del funzionamento generale del dispositivo. Illustrazione 2: Vista parziale del PIC Comunicazione dell'interruzione alla CPU Una volta valutata la priorità dell'interruzione ricevuta seguendo i dettami di uno dei modi di gestione dell'interruzione specificati nel precedente paragrafo, è necessario informare la CPU della presenza di una nuova interruzione da servire. A tal proposito si adopera il pin INT. Quindi, quando è stabilita l'interruzione da servire, INT viene posto ad 1. La CPU, chiaramente, deve prima giungere alla fase del suo ciclo in cui valuta la presenza dell'interruzione. Quando verifica la presenza dell'interruzione, se il sistema delle interruzioni è abilitato (RIFERIMENTO: vedere meccanismo delle interruzioni e gestione delle interruzioni in una CPU), la CPU invia un segnale di INTERRUPT ACKNOWELEDGE, ponendo a 0 l'apposito segnale!inta (Il punto esclamativo che precede il segnale indica che è un segnale negato). Programmable Interrupt Controller Intel 8259A 9

10 1 Analisi delle funzionalità Preparazione dell'asservimento dell'interruzione Quando il PIC riceve il segnale!inta, si predispone a inviare tutte le informazioni necessarie alla CPU per accedere alla ISR dell'interruzione. Come specificato in precedenza, è necessario tener conto dell'attuale interruzione in asservimento per gestire le priorità (Ad esempio, nel Fully Nested Mode solo le interruzioni di priorità superiore a quella servita sono abilitate). Per memorizzare l'interruzione che è attualmente in esecuzione, si utilizza un apposito registro: il registro ISR, IN SERVICE REGISTER. Quando si riceve il segnale di!inta dalla CPU, il PIC comprende che la CPU è pronta ad eseguire l'interruzione e quindi imposta il bit della ISR corrispondente al bit della IRR che rappresenta l'interruzione da eseguire. Ad esempio se IRR[4] è l'interruzione da eseguire, ISR[4] viene posto ad 1. Allo stesso tempo, poiché l'interruzione passa in esecuzione, non è più presente nelle interruzioni in attesa, quindi viene resettato il corrispondente bit del registro IRR. Rifacendosi al precedente esempio, IRR[4] viene posto a Passaggio dell'interruzione alla CPU A questo punto è necessario informare la CPU di quale interruzione è arrivata (ossia da quale linea l'interruzione è arrivata), in altre parole, va comunicato alla CPU l'indirizzo dell'apposita ISR. Questa è una fase molto delicata che differisce a seconda del sistema utilizzato. Per definire univocamente il comportamento del PIC, vengono impostati determinati parametri durante la fase di programmazione. I sistemi differenti sono due: MCS-80/85 e Programmable Interrupt Controller Intel 8259A 10

11 1 Analisi delle funzionalità Sequenza di dati nel MCS-80/85 1. Alla ricezione del!inta il PIC rilascia sulle linee D0-7 la seguente stringa di bit: Questa istruzione genera un ulteriore!inta da parte della CPU. In risposta, il PIC invia gli 8 bit della parte bassa dell'indirizzo della ISR dell'interruzione. 3. La CPU genera a questo punto un ulteriore segnale di!inta. Il PIC in risposta invia gli 8 bit della parte alta dell'indirizzo Sequenza di dati nel Alla ricezione del primo!inta il PIC non invia dati alla CPU. 2. Autonomamente la CPU invia un secondo!inta a cui il PIC risponde inviando un indirizzo di 8 bit sul bus D Comunicazione di fine interruzione Una volta che l'interruzione è andata in esecuzione sulla CPU, è necessario un metodo per rendere noto al PIC quando l'interruzione è conclusa. In altre parole, è necessario un modo per resettare il bit del registro ISR corrispondente all'interruzione servita. I metodi possibili sono due, e vengono selezionati in fase di programmazione: 1. AEOI (Automatic End Of Interrupt): con questa modalità, alla ricezione dell'ultimo segnale di!inta, il bit nel registro ISR viene resettato; 2. EOI (End of Interrupt): in questa modalità è necessario che un apposito comando sia mandato dalla CPU al PIC per resettare il bit del registro ISR. Programmable Interrupt Controller Intel 8259A 11

12 1 Analisi delle funzionalità 1.3 Programmazione del PIC Quanto detto fino ad ora ha chiarito il funzionamento del PIC, rimane da specificare come si indica al PIC quale funzionamento adottare fra le varie possibilità esposte. In realtà, già si è detto che il tutto avviene durante le due fasi di programmazione del PIC. In questo paragrafo si intende dunque specificare con precisione come avvengono le fasi di programmazione. E' importante notare come le stringhe di 8 bit definite in questo paragrafo, corrispondono ad altrettanti registri di 8 bit all'interno del PIC, utilizzati per gestire la logica del dispositivo Inizializzazione La fase di inizializzazione avviene tramite l'invio in ordine delle stringhe ICW. Tali stringhe sono in tutto 4, e come si specificherà in seguito, non sono sempre tutte necessarie. Procediamo quindi ad illustrare la fase di inizializzazione ICW1 ICW4: 1 = ICW4 è necessaria; 0 = ICW4 non verrà inviata SNGL: 1 = Si adopera un PIC singolo; 0 = si adoperano PIC in cascata. ADI: Nel MCS-80/85, gli indirizzi del vettore delle interruzioni possono essere spaziati di 4 o di 8 locazioni di memoria. Questo bit indica quale spaziamento c'e': 1 = spaziamento di 4. LTIM: indica se si considera presente l'interruzione sulle linee IR in corrispondenza di una variazione sul fronte o sul livello del segnale. 0 = riconoscimento a variazione sul fonte di salita. Bit[4] = è sempre posto ad uno poiché si utilizza per specificare che quella considerata è la ICW1. Bit[5] Bit[7] = questi bit sono adoperati solo per sistemi MCS-80/85 e servono ad indicare i bit di indirizzo A5-A7 del vettore delle interruzioni. Programmable Interrupt Controller Intel 8259A 12

13 1 Analisi delle funzionalità ICW2 ICW2 assume differenti significati a seconda che si operi con sistemi 8086 o sistemi MCS-80/85. Sistemi MPS-80/85: T7 T0 : Specificano i bit A15 A8 dell'indirizzo del vettore delle interruzioni. Sistemi 8086: T2 T0 : sono tutti 0. T7 T3 ; sono utilizzati per specificare l'indirizzo del vettore delle interruzioni ICW3 Questa stringa si adopera per gestire la modalità con PIC connessi in cascata. Per quanto si è deciso di tralasciare questo aspetto, specifichiamo comunque come vanno impostati i bit, visto che il dispositivo richiede in ogni caso questa stringa. I bit vengono impostati ad 1, se alla corrispondente linea di interruzione (IR) è collegato un altro PIC. Ad esempio se su IR3 è collegato un PIC, allora S3 = ICW4 PM: 1 = si sta utilizzando un sistema 8086; 0 = il sistema è MCS-80/85 AEOI: 1 = si utilizza l'automatic end of interrupt MS: si adopera per i PIC in cascata, si può lasciare a 0 BUF: si adopera per i PIC in cascata, deve essere lasciato a 0 SFNM: si adopera per i PIC in cascata, deve essere lasciato a 0. Bit[7] Bit[5] = sono sempre posti a 0. Programmable Interrupt Controller Intel 8259A 13

14 1 Analisi delle funzionalità Comandi dinamici Le seguenti stringhe sono inviate al PIC durante il suo funzionamento per impostare alcune caratteristiche quali la maschera delle interruzioni, e in generale per comunicare dati con la CPU OCW1 I bit di questa OCW impostano la maschera delle interruzioni (il registro IMR), se un bit è posto ad 1 la corrispondente interruzione è mascherata OCW2 Questa stringa è adoperata dalla CPU per comunicare un messaggio EOI, e per impostare la gestione della priorità delle interruzioni a rotazione. I bit L2-L0 sono utilizzati a seconda del codice presente in R, SL, EOI. Esaminiamo i vari codici dividendoli in base alla loro funzione: EOI = gestione degli End of interrupt manuali R=0, SL=0, EOI=1 R=0, SL=1, EOI=1 NON-Specific EOI: Questa stringa indica che la CPU sta specificando che una interruzione è stata completata. Il PIC, resetta il suo ISR. Questa stringa indica che la CPU comunica che è terminata l'istruzione specificata nei bit L2-L0 (E quindi una delle 8 possibili interruzioni) Automatic Rotation = gestione della priorità R=1, SL=0, EOI=1 Ruota le priorità quando arriva un NON-Specific EOI. R=1, SL=0, EOI=0 Ruota con AEOI impostato ad 1 R=0, SL=0, EOI=0 Ruota con AEOI impostato a 0 Programmable Interrupt Controller Intel 8259A 14

15 1 Analisi delle funzionalità Specific Rotation R=1, SL=1, EOI=1 R=1, SL=1, EOI=0 Ruota quando arriva lo Specific EOI che fa riferimento all'interuzione indicata in L2-L0 Imposta la priorità minima nella rotazione, indicandola in L2-L0 NO OPERATION R=0, SL=1, EOI=0 Indica di non compiere rotazioni OCW3 Questa stringa ha un gran numero di funzionalità. Innanzitutto è utile alla lettura dei registri ISR ed IRR del PIC, viene poi utilizzata per passare al Poll Mode, infine, si adopera per specificare anche se adoperare lo special mask mode. RR RIS Operation 0 0 NO OPERATION 0 1 NO OPERATION 1 0 LEGGI IL REGISTRO IRR AL PROSSIMO IMPULSO!RD 1 1 LEGGI IL REGISTRO ISR AL PROSSIMO IMPULSO!RD P: se P = 1 allora è attivo il POLL mode ESMM SMM Operation 0 0 NO OPERATION 0 1 NO OPERATION 1 0 RESET SPECIAL MASK MODE 1 1 USE SPECIAL MASK MODE Programmable Interrupt Controller Intel 8259A 15

16 1 Analisi delle funzionalità Poll WORD Per quanto non rientri fra le stringhe id programmazione, la POLL WORD è la stringa di risposta inviata dal PIC quando la CPU richiede un POLL, la includiamo quindi in questa sezione: W2 W0 : Indicano la linea su cui è presenta l'interruzione con maggior priorità I: 1 = indica che è presente una interruzione in attesa Indirizzamento del PIC Come si è visto in precedenza in questo documento, il PIC utilizza 7 registri programmabili per gestire la sua logica: 4 sono impostati durante l'inizializzazione, 3 possono variare in qualsiasi momento. E' interessante l'indirizzamento del PIC, poiché il dispositivo presenta una singola linea di indirizzo in ingresso (pin A0). Tuttavia, è possibile distinguere i diversi registri in base all'impostazione dei bit sul bus dati D7-D0, che come si è visto, sono impostati in modo univoco per le diverse ICW e OCW. Esaminiamo come sono indirizzate le 7 stringhe, premettendo che perché il PIC sia operativo deve essere alto il segnale!cs: ICW1 A0=0; D4=1 ICW2 ICW3 ICW4 A0=1; PRIMO DOPO ICW1 A0=1; SECONDO DOPO ICW2 A0=1; TERZO DOPO ICW3 Come si vede, le stringhe ICW2-4 sono impostate sequenzialmente e non si può accedere ad esse direttamente per selezione. OCW1 A0=1 OCW2 A0=0; D3=0; D4=0 OCW3 A0=0; D3=1; D4=0 Come si può notare, i bit dati specificati in queste tabelle coincidono con quelli specificati nella descrizione delle ICW e OCW fatta nei precedenti paragrafi. Programmable Interrupt Controller Intel 8259A 16

17 1 Analisi delle funzionalità 1.4 Protocollo di comunicazione con la CPU La CPU utilizza le linee!inta,!wr,!rd, A0 per comunicare con il PIC. E' fondamentale comprendere come vengano gestite queste linee per far funzionare correttamente il PIC Scrittura di informazioni nel PIC Per impostare i registri interni del PIC, ad esempio durante la fase di inizializzazione o di programmazione, è necessario utilizzare il segnale!wr. Le linee di comunicazione A0 ed il bus dati (D0-7) dovranno avere la configurazione specificata nel precedente paragrafo ( Indirizzamento ). Quando la configurazione per la scrittura del registro prescelto è stata correttamente impostata, per scrivere effettivamente nei registri del PIC, è necessario inviare un impulso!wr (!WR=0 ) per una durata di almeno 190 ns. Questa durata è dettata dai tempi di caricamento nei dati nei registri Lettura di informazioni dal PIC Per la lettura dei registri interni, si procede analogamente a quanto fatto per la scrittura. Si impostano quindi le linee per indirizzare il registro desiderato, e si invia un impulso di!rd (!RD=0). Anche l'impulso di!rd deve avere una durata minima di 190 ns Gestione del ciclo!inta In questo paragrafo trattiamo la gestione del ciclo!inta per macchine Intel Per la gestione del ciclo con MCS-80/85 si rimanda al datasheet del componente. Il ciclo!inta è gestito dal PIC in modo atomico, ossia, una volta iniziato il ciclo, nessuna interruzione, di qualsiasi livello, può interromperlo. Quando una interruzione deve essere servita, il PIC alza la linea INT. Se la CPU è pronta a servire l'interruzione, avvia il ciclo di!inta. Il ciclo comincia con un primo segnale di!inta (!INTA = 0 ) lungo almeno 190 ns, seguito da!inta=1 per 50 ns, a cui segue un ulteriore!inta=0 per almeno 190 ns. Durante l'ultimo impulso!inta, il PIC pone sul bus dati (D0-7) l'indirizzo della ISR corrispondente all'interruzione da servire. Programmable Interrupt Controller Intel 8259A 17

18 2 Realizzazione del PIC La complessità del componente impone una progettazione per sottoparti. Quindi, attraverso una tecnica di progettazione mista si provvederà a: Identificare i sottosistemi costituenti e descriverne l interfaccia (approccio top-down). Sviluppare e testare i singoli sottosistemi; Comporre in modo incrementale i sottosistemi fino alla completa realizzazione del Sistema PIC (approccio bottom-up). Testare il Sistema PIC definitivo attraverso un opportuno Tester. La divisione del Sistema in sottosistemi consentirà la realizzazione indipendente di ciascun componente. 2.1 I fase: identificazione dei sottosistemi A seguito di un attenta analisi delle specifiche tecniche del componente da realizzare sono stati individuati i seguenti sottosistemi fondamentali: Registro DataBus DataBusBuffer PriorityResolver ReadWriteLogic La seguente tabella mostra l interfaccia di ciascuno dei sottosistemi individuati: Programmable Interrupt Controller Intel 8259A 18

19 Componente Interfaccia Registro X: in bit_vector(n downto 0); Z: out bit_vector(n downto 0); Bus readirr: in bit; readisr: in bit; readocw1: in bit; readpriorityresolver: in bit; indatabuffer: in bit_vector(n downto 0); inirr: in bit_vector(n downto 0); inisr: in bit_vector(n downto 0); inocw1: in bit_vector(n downto 0); inpriorityresolver: in bit_vector(n downto 0); writeicw1: in bit; writeicw2: in bit; writeicw3: in bit; writeicw4: in bit; writeocw1: in bit; writeocw2: in bit; writeocw3: in bit; outicw1: out bit_vector(n downto 0); outicw2: out bit_vector(n downto 0); outicw3: out bit_vector(n downto 0); outicw4: out bit_vector(n downto 0); outocw1: out bit_vector(n downto 0); outocw2: out bit_vector(n downto 0); outocw3: out bit_vector(n downto 0); outreadwritelogic: out bit_vector(n downto 0) DataBusBuffer notread: in bit; notwrite: in bit; incpuline: in bit_vector(n downto 0); inbusline: in bit_vector(n downto 0); outcpuline: out bit_vector(n downto 0); outbusline: out bit_vector(n downto 0) PriorityResolver INT: out bit; NOTINTA: in bit; ICW2: in bit_vector(n downto 0); ICW4: in bit_vector(n downto 0); OCW2: in bit_vector(n downto 0); OCW3: in bit_vector(n downto 0); inirr: out bit_vector(n downto 0); enabledinterrupt: in bit_vector(n downto 0); inisr: out bit_vector(n downto 0); outisr: in bit_vector(n downto 0); outd: out bit_vector(n downto 0); ReadWriteLogic notcs: in bit; D: in bit_vector(n downto 0); A0: in bit; NOTWRITE: in bit; NOTREAD: in bit; writeicw1: out bit; writeicw2: out bit; writeicw3: out bit; writeicw4: out bit; writeocw1: out bit; writeocw2: out bit; writeocw3: out bit; readocw1: out bit; readirr: out bit; readisr: out bit Programmable Interrupt Controller Intel 8259A 19

20 2.2 II fase: sviluppo e testing dei sottosistemi Nei successivi paragrafi di questo documento sarà riportato per ciascun sottosistema realizzato le seguenti tre descrizioni: Descrizione black-box delle funzionalità del componente; Descrizione del codice in VHDL e quindi dell architettura interna del componente; Descrizione del test-banch per la validazione del componente realizzato; Simulazione e verifica del corretto funzionamento del componente per alcuni test-case significativi Registro Il componente Registro è un registro latch di tipo D di N bit (si è parametrizzato la cardinalità del registro). Per tale componente non sono stati usati ingressi di enable o reset, in quanto non necessari al fine del suo utilizzo all interno del componente PIC. Data la semplicità del componente verrà direttamente proposto il codice e il risultato della simulazione tramite opportuno test-banch senza alcun ulteriore commento a riguardo Il codice entity registro is generic (N: positive := 7); port ( X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0) ); end registro; architecture behavioral of registro is begin process (X) variable Q: bit_vector(n downto 0); begin Q := X; Z <= Q after 5 ns; end process; end behavioral; Il test-banch Data l ovvietà della configurazione e la chiarezza del codice e del risultato della simulazione, si omette la descrizione del test banch e si riportano direttamente codice e risultati della simulazione. Programmable Interrupt Controller Intel 8259A 20

21 ENTITY registro_tb IS generic (N: positive := 7); END registro_tb; ARCHITECTURE behavioral OF registro_tb IS BEGIN COMPONENT registro PORT( X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0) ); END COMPONENT; for c1: registro use entity work.registro(behavioral); --Inputs SIGNAL x : bit_vector(n downto 0); --Outputs SIGNAL registerout: bit_vector(n downto 0); -- Instantiate the Unit Under Test (UUT) c1: registro PORT MAP( x => X, Z => registerout ); c2: process begin -- Wait 100 ns for global reset to finish -- Wait for 100 ns; a1: x <= " ", " " after 100 ns, " " after 300 ns, " " after 500 ns; wait; end process; END behavioral; La simulazione Programmable Interrupt Controller Intel 8259A 21

22 2.2.2 PriorityResolver Il componente Priority Resolver gestisce l intera logica del PIC durante il ciclo di INT/!INTA con la CPU. Esso realizza l algoritmo di scheduling specificato nei registri interni del PIC e provvede ad implementare il protocollo di colloquio con la CPU per la comunicazione delle interruzioni. Il componente realizzato in questa prima versione del PIC Intel 8259A realizza lo scheduling per priorità fissa (crescente da 7 a 0) e quello a rotazione sia nella modalità di AEOI che NotAEOI. Il componente PriorityResolver è stato realizzato in VHDL attraverso una descrizione behavioral, che utilizza due process che comunicano attraverso un segnale flag. In particolare, il primo process si occupa di realizzare l intera logica del componente, mentre l altro process si pone in attesa della variazione del registro OCW2, sul quale la CPU può inviare una stringa di EOI (End Of Interrupt) se la modalità di fine interruzione impostata nel PIC non è l Automatic End Of Interrupt. Programmable Interrupt Controller Intel 8259A 22

23 In questo modo non appena si verifica l evento di variazione del registro OCW2 il secondo process provvede a segnalare l evento al primo process, che quindi eseguirà le dovute operazioni per soddisfare la richiesta proveniente dalla CPU. In particolare, se la CPU ha specificato nel registro OCW2 di voler effettuare una Specific End Of Interrupt dell interruzione k, esso provvederà ad azzerare il bit k-esimo del registro ISR. Se invece la CPU ha specificato una modalità di Non- Specific End Of Interrupt, allora sarà necessario azzerare il bit a priorità più alta che si trova in ISR. In entrambi i casi, eventuali interruzioni pendenti a bassa priorità potranno essere schedulate dal PriorityResolver e comunicate alla CPU Il codice Nel presente paragrafo viene riportato il codice VHDL che completa la descrizione del componente. entity PriorityResolver is generic (N: integer := 7); port ( INT: out bit; NOTINTA: in bit; ICW2: in bit_vector(n downto 0); ICW4: in bit_vector(n downto 0); OCW2: in bit_vector(n downto 0); OCW3: in bit_vector(n downto 0); inirr: out bit_vector(n downto 0); enabledinterrupt: in bit_vector(n downto 0); -- int non mascherate inisr: out bit_vector(n downto 0); -- ingresso ad ISR outisr: in bit_vector(n downto 0); -- uscita ad ISR outd: out bit_vector(n downto 0); -- uscita dati verso D0-D7 enabled: out bit scrittura sul bus ); end PriorityResolver; -- abilita architecture behavioral of PriorityResolver is signal flag: bit; begin process variable i: integer := 0; variable k: integer := 0; variable j: integer := 0; begin wait for 5 ns; if (ICW4(1) = '0') then if (OCW2(5) = '1') then if (flag = '1') then if (OCW2(7) = '0' and OCW2(6) = '1') then if (OCW2(2) = '0' and OCW2(1) = '0' and OCW2(0) = '0') then inisr(0) <= '0'; elsif (OCW2(2) = '0' and OCW2(1) = '0' and OCW2(0) = '1') then inisr(1) <= '0'; Programmable Interrupt Controller Intel 8259A 23

24 elsif (OCW2(2) = '0' and OCW2(1) = '1' and OCW2(0) = '0') then inisr(2) <= '0'; elsif (OCW2(2) = '0' and OCW2(1) = '1' and OCW2(0) = '1') then inisr(3) <= '0'; elsif (OCW2(2) = '1' and OCW2(1) = '0' and OCW2(0) = '0') then inisr(4) <= '0'; elsif (OCW2(2) = '1' and OCW2(1) = '0' and OCW2(0) = '1') then inisr(5) <= '0'; elsif (OCW2(2) = '1' and OCW2(1) = '1' and OCW2(0) = '0') then inisr(6) <= '0'; elsif (OCW2(2) = '1' and OCW2(1) = '1' and OCW2(0) = '1') then inisr(7) <= '0'; end if; else while (i<8 and outisr(i)='0') loop i:=i+1; end loop; inisr(i) <= '0'; i := 0; end if; end if; end if; end if; Il primo process del componente si preoccupa di verificare innanzittutto se il PIC è configurato in modo da gestire la terminazione delle interruzioni nella modalità non AEOI. In tal caso il Priority Resolver controlla innanzittutto se in OCW2 è stata scritta una word di End Of Interrupt (OCW2(5) = 1) e se si è verificata una variazione del registro OCW2. Quest ultimo evento gli viene notificato dal process2 che in caso di variazione del registro OCW2 provvede ad alzare il segnale flag (flag = 1). A questo punto può verificarsi che la stringa in OCW2 sia una stringa di Specific EOI o NonSpecific EOI. Nel primo caso la catena di if che segue serve semplicemente a resettare l interruzione k-esima nel registro ISR, dove k è la codifica in decimale dei tre bit OCW2(2)- OCW2(0). Nel secondo caso invece si provvede a resettare l INT più prioritaria in ISR. if (enabledinterrupt /= " ") then while (k<8 and enabledinterrupt(k)='0') loop k:=k+1; end loop; -- cerca l'interruzione più prioritaria in ISR while (j<8 and outisr(j)='0') loop j:=j+1; end loop; Con il frammento di codice riportato sopra si effettua la ricerca dell interruzione da servire. In pratica si scorrono i registri ISR e IRR e si vede se in IRR c è una richiesta pendente di priorità maggiore dell interruzione più prioritaria attualmente presente in ISR. Programmable Interrupt Controller Intel 8259A 24

25 if (k<j) then INT <= '1'; wait until NOTINTA'event and NOTINTA = '0'; INT <= '0'; inisr(k) <= '1'; inirr(k) <= '1'; wait until NOTINTA'event and NOTINTA = '1'; -- costruzione dell'indirizzo della ISR e sua trasmissione sulle linee outd if (k = 0) then outd <= (ICW2(7),ICW2(6),ICW2(5),ICW2(4),ICW2(3),'0','0','0'); elsif (k = 1) then outd <= (ICW2(7),ICW2(6),ICW2(5),ICW2(4),ICW2(3),'0','0','1'); elsif (k = 2) then outd <= (ICW2(7),ICW2(6),ICW2(5),ICW2(4),ICW2(3),'0','1','0'); elsif (k = 3) then outd <= (ICW2(7),ICW2(6),ICW2(5),ICW2(4),ICW2(3),'0','1','1'); elsif (k = 4) then outd <= (ICW2(7),ICW2(6),ICW2(5),ICW2(4),ICW2(3),'1','0','0'); elsif (k = 5) then outd <= (ICW2(7),ICW2(6),ICW2(5),ICW2(4),ICW2(3),'1','0','1'); elsif (k = 6) then outd <= (ICW2(7),ICW2(6),ICW2(5),ICW2(4),ICW2(3),'1','1','0'); elsif (k = 7) then outd <= (ICW2(7),ICW2(6),ICW2(5),ICW2(4),ICW2(3),'1','1','1'); end if; wait until NOTINTA'event and NOTINTA = '1'; -- assesta i dati sul bus enabled <= '1'; -- comando di scrittura sul bus wait for 26 ns; enabled <= '0'; if (ICW4(1) = '1') then -- modalità Automatic End Of Interrupt inisr(k) <= '0'; end if; inirr(k) <= '0'; -- riaccetta interruzioni sulla linea end if; k:=0; j:=0; else wait on enabledinterrupt, outisr, flag; end if; END PROCESS; Se esiste un interruzione più prioritaria da servire, si procede all attivazione del protocollo di comunicazione verso la CPU e quindi: viene comunicata l interruzione alla CPU attraverso il segnale INT; all arrivo del primo!inta si setta il bit corrispondente al livello dell interruzione appena comunicata nel registro ISR e si resetta l interruzione dalla lista d interruzioni pendenti; Programmable Interrupt Controller Intel 8259A 25

26 all arrivo del secondo!inta si comunica sul bus del PIC alla CPU l indirizzo della ISR da attivare. Nella realizzazione finale del PIC si vedrà che alzando il segnale enabled si abilita anche la scrittura nel buffer databusbuffer che si interfaccia verso la CPU, in modo tale che la CPU possa avere disponibili i bit che identificano la ISR da attivare per il servizio dell interruzione; se è stata impostata la modalità di AEOI si resetta il bit precedentemente settato nel registro ISR e si riaccettano nuove interruzioni sulla linea k del registro IRR; si sospende il processo attendendo variazioni di uno dei tre segnali: enabledinterrupt, outisr e flag. process begin wait on OCW2; flag <= '1'; wait for 10 ns; flag <= '0'; end process; end architecture behavioral; Quest altro frammento di codice descrive il comportamento del process2. Esso si pone in attesa di eventi su OCW2 e in caso di variazione del registro notifica l evento al process1 attraverso il segnale flag Il test-banch Data l ovvietà della configurazione e la chiarezza del codice e del risultato della simulazione, si omette la descrizione del test banch e si riportano direttamente codice e risultati della simulazione. Programmable Interrupt Controller Intel 8259A 26

27 entity PriorityResolver_tb is generic (N: integer := 7); end PriorityResolver_tb; architecture input_output of PriorityResolver_tb is component PriorityResolver port( INT: out bit; NOTINTA: in bit; ICW2: in bit_vector(n downto 0); ICW4: in bit_vector(n downto 0); OCW2: in bit_vector(n downto 0); OCW3: in bit_vector(n downto 0); inirr: out bit_vector(n downto 0); -- ingresso ad intreg enabledinterrupt: in bit_vector(n downto 0); -- uscita ad intreg inisr: out bit_vector(n downto 0); -- ingresso ad ISR outisr: in bit_vector(n downto 0); -- uscita ad ISR outd: out bit_vector(n downto 0); -- uscita dati verso D0-D7 enabled: out bit); end component; for all: PriorityResolver use entity work.priorityresolver(behavioral); D7 signal INT: bit; signal NOTINTA: bit; signal ICW2: bit_vector(n downto 0); signal ICW4: bit_vector(n downto 0); signal OCW2: bit_vector(n downto 0); signal OCW3: bit_vector(n downto 0); signal inirr: bit_vector(n downto 0); signal enabled: bit; signal enabledinterrupt: bit_vector(n downto 0); signal inisr: bit_vector(n downto 0); -- ingresso ad ISR signal outisr: bit_vector(n downto 0); -- uscita ad ISR signal outd: bit_vector(n downto 0); -- uscita dati verso D0- begin a1: PriorityResolver port map (INT => INT, NOTINTA => NOTINTA, ICW2 => ICW2, ICW4 => ICW4, OCW2 => OCW2, OCW3 => OCW3, inirr => inirr, enabledinterrupt => enabledinterrupt, inisr => inisr, outisr => outisr, outd => outd, enabled => enabled); a2: enabledinterrupt <= " ", " " after 40 ns, " " after 60 ns, " " after 300 ns, " " after 380 ns, " " after 620 ns; a3: outisr <= " ", " " after 100 ns, " " after 200 ns; Programmable Interrupt Controller Intel 8259A 27

28 a4: OCW2 <= " "; a5: OCW3 <= " "; a6: ICW2 <= " "; a7: ICW4 <= " "; a8: NOTINTA <= '1', '0' after 100 ns, '1' after 140 ns, '0' after 200 ns, '1' after 240 ns, '0' after 280 ns, '1' after 320 ns, '0' after 360 ns, '1' after 400 ns, '0' after 440 ns, '1' after 480 ns, '0' after 520 ns, '1' after 560 ns; end input_output; La simulazione Il test effettuato ha riscontrato il corretto funzionamento del componente che potrà quindi essere integrato nell architettura del PIC. Di seguito è presentato il risultato della simulazione: Programmable Interrupt Controller Intel 8259A 28

29 Programmable Interrupt Controller Intel 8259A 29

30 2.2.3 ReadWriteLogic Questo componente è designato al controllo e gestione dei segnali di notread e NotWrite per il transito dei dati all interno del data-path e per la comunicazione tra processore e periferica; in esso è anche cablata la logica di indirizzamento dei registri interni. In particolare, questo componente genera i segnali opportuni per compiere trasferimenti tra registri attraverso il bus interno del PIC Il codice Di seguito riportiamo la descrizione del componente in vhdl: entity ReadWriteLogic is generic (N: integer := 7); port( notcs: in bit; D: in bit_vector(n downto 0); A0: in bit; NOTWRITE: in bit; NOTREAD: in bit; writeicw1: out bit; writeicw2: out bit; writeicw3: out bit; writeicw4: out bit; writeocw1: out bit; writeocw2: out bit; writeocw3: out bit; Programmable Interrupt Controller Intel 8259A 30

31 readocw1: out bit; readirr: out bit; readisr: out bit ); end ReadWriteLogic; architecture behavioral of ReadWriteLogic is begin process variable Counter: integer := 0; variable ICW1bit0: boolean := false; variable OCW3bit0: boolean := false; variable OCW3bit1: boolean := false; begin wait on notcs, NOTWRITE, NOTREAD; if (notcs = '0' and NOTWRITE = '0') then -- precedenza al NOTWRITE sul NOTREAD wait for 2 ns; if (A0 = '0' and D(4)='1' and Counter=0) then writeicw1 <= '1'; if (D(0)='0') then ICW1bit0 := false; else ICW1bit0 := true; end if; wait until NOTWRITE'event and NOTWRITE = '1'; writeicw1 <= '0'; Counter:=Counter+1; elsif (A0='1' and Counter=1) then writeicw2 <= '1'; Counter:=Counter+1; wait until NOTWRITE'event and NOTWRITE = '1'; writeicw2 <= '0'; elsif (A0='1' and Counter=2) then writeicw3 <= '1'; Counter:=Counter+1; wait until NOTWRITE'event and NOTWRITE = '1'; writeicw3 <= '0'; if (ICW1bit0 = false) then Counter := 0; end if; elsif (A0='1' and Counter=3) then writeicw4 <= '1'; Counter:=0; wait until NOTWRITE'event and NOTWRITE = '1'; writeicw4 <= '0'; elsif (A0='1' and Counter=0) then writeocw1 <= '1'; wait until NOTWRITE'event and NOTWRITE = '1'; writeocw1 <= '0'; elsif ( A0='0'and D(3)='0'and D(4)='0' and Counter=0 ) then writeocw2 <= '1'; wait until NOTWRITE'event and NOTWRITE = '1'; writeocw2 <= '0'; elsif (A0='0' and D(3)='1'and D(4)='0' and Counter=0) then writeocw3 <= '1'; if (D(0)='0') then Programmable Interrupt Controller Intel 8259A 31

32 OCW3bit0 := false; else OCW3bit0 := true; end if; if (D(1)='0') then OCW3bit1 := false; else OCW3bit1 := true; end if; wait until NOTWRITE'event and NOTWRITE = '1'; writeocw3 <= '0'; end if; elsif (notcs = '0' and NOTREAD = '0') then if (A0 = '1') then readocw1 <= '1'; wait until NOTREAD'event and NOTREAD = '1'; readocw1 <= '0'; elsif (OCW3bit1 = true and OCW3bit0 = false) then readirr <= '1'; wait until NOTREAD'event and NOTREAD = '1'; readirr <= '0'; elsif (OCW3bit1 = true and OCW3bit0 = true) then readisr <= '1'; wait until NOTREAD'event and NOTREAD = '1'; readisr <= '0'; end if; end if; end process; end behavioral; L interfaccia si compone dei segnali in uscita che abilitano o disabilitano la lettura o la scrittura sul bus dei registri: writeicw1: out bit; writeicw2: out bit; writeicw3: out bit; writeicw4: out bit; writeocw1: out bit; writeocw2: out bit; writeocw3: out bit; readocw1: out bit; readirr: out bit; readisr: out bit I segnali: NOTWRITE: in bit; NOTREAD: in bit; vengono pilotati dalla CPU e permettono di abilitare la scrittura o la lettura di un particolare registro interno, indirizzato attraverso le modalità di indirizzamento descritta nei precedenti paragrafi del presente documento. Programmable Interrupt Controller Intel 8259A 32

33 Il segale notcs serve ad abilitare il PIC a funzionare, mentre il segnale D è l interfaccia dati verso il bus interno. Si è scelta una descrizione behavioral del componente e si è fatto utilizzo di un process che si mette in attesa di variazioni dei segnali notcs, NOTWRITE, NOTREAD (sensitivity list). Questo componente si serve di un unico bit indirizzo A0 e di un contatore interno per indirizzare i registri interni del PIC. Quando varia il segnale notwrite viene scritto il dato preventivamente inoltrato sul databus dalla CPU nel registro interno selezionato. Quindi in base alla parola in ingresso sul bus, al contatore e al bit indirizzo A0 il dispositivo seleziona il registro interessato e abilita i segnali di strobe-in sul bus affinché quest ultimo sia caricato. Quando varia il notread la CPU viene abilitata alla lettura di un determinato registro interno. A questo punto in base al valore di A0 e a determinati bit del registro OCW3, il dispositivo seleziona il registro interessato e abilita i segnali di strobe-out sul bus affinché il contenuto di quest ultimo si riversi sul bus D collegato al processore Il test-banch Il componente è stato testato singolarmente prima di integrarlo nell architettura. Di seguito riportiamo il test-bach utilizzato per testare il funzionamento del componente: entity ReadWriteLogic_tb is generic (N: integer := 7); end ReadWriteLogic_tb; architecture input_output of ReadWriteLogic_tb is component ReadWriteLogic port( notcs: in bit; D: in bit_vector(n downto 0); A0: in bit; NOTWRITE: in bit; NOTREAD: in bit; writeicw1: out bit; writeicw2: out bit; writeicw3: out bit; Programmable Interrupt Controller Intel 8259A 33

34 writeicw4: out bit; writeocw1: out bit; writeocw2: out bit; writeocw3: out bit; readocw1: out bit; readirr: out bit; readisr: out bit ); end component; for all: ReadWriteLogic use entity work.readwritelogic(behavioral); signal notcs: bit; signal D: bit_vector(n downto 0); signal A0: bit; signal NOTWRITE: bit; signal NOTREAD: bit; signal writeicw1: bit; signal writeicw2: bit; signal writeicw3: bit; signal writeicw4: bit; signal writeocw1: bit; signal writeocw2: bit; signal writeocw3: bit; signal readocw1: bit; signal readirr: bit; signal readisr: bit; begin a1: ReadWriteLogic port map (notcs => notcs, D=>D, A0=>A0, NOTWRITE=>NOTWRITE, NOTREAD=>NOTREAD,writeICW1 => writeicw1, writeicw2 => writeicw2, writeicw3 => writeicw3, writeicw4 => writeicw4,writeocw1 => writeocw1, writeocw2 =>writeocw2, writeocw3 => writeocw3, readocw1 => readocw1,readirr => readirr, readisr => readisr); a2: notcs <= '0' after 40 ns; a3: D <= " " after 80 ns, -- CARICO ICW1 " " after 120 ns, -- CARICO ICW2 " " after 160 ns, -- CARICO ICW3 " " after 190 ns, -- CARICO OCW1 " " after 240 ns, -- CARICO OCW2 " " after 280 ns, -- CARICO OCW3 " " after 440 ns; -- CARICO OCW3 a4: A0 <= '0' after 90 ns, -- PER INDIRIZZARE ICW1 '1' after 130 ns, -- PER INDIRIZZARE ICW2,ICW3,ICW4,OCW1 '0' after 230 ns, '1' after 360 ns, '0' after 380 ns; a5: NOTWRITE <= '1' after 0 ns, '0' after 100 ns, '1' after 110 ns, '0' after 140 ns, '1' after 150 ns, Programmable Interrupt Controller Intel 8259A 34

35 '0' after 170 ns, '1' after 180 ns, '0' after 200 ns, '1' after 210 ns, '0' after 250 ns, '1' after 260 ns, '0' after 300 ns, '1' after 310 ns, '0' after 460 ns, '1' after 480 ns; a6: NOTREAD <= '1' after 0 ns, '0' after 360 ns, '1' after 380 ns, '0' after 400 ns, '1' after 420 ns, '0' after 520 ns, '1' after 560 ns; end input_output; Il test bach non fa altro che creare i collegamenti fisici del componente, in maniera coerente con l interfaccia, e simulare il comportamento della CPU per leggere e scrivere i registri La simulazione La simulazione mostra le sequenza di lettura e caricamento dei registri. Si noti come la CPU in fase di scrittura predisponga i valori sul bus e il bit A0 prima di dare il segnale di scrittura (notwrite). A questo punto il componente seleziona il segnale per la scrittura del registro interessato. Analogamente per la lettura, la CPU predispone opportunamente il segnale A0 ed abilita la lettura. Il test effettuato ha riscontrato il corretto funzionamento del componente che potrà quindi essere integrato nell architettura del PIC. Nel seguito sono riportate le forme d'onda risultato del test: Programmable Interrupt Controller Intel 8259A 35

36 Programmable Interrupt Controller Intel 8259A 36

37 2.2.4 BUS Componente fondamentale dell architettura è il bus. Esso è responsabile del transito dei dati all interno del data-path del PIC e della loro comunicazione verso la CPU. Si interfaccia con tutti i registri sia in scrittura che in lettura in maniera tale da poter sia prelevare che immettere dati. Questo componente riceve segnali di controllo (strobe-in/strobe-out) dalla ReadWriteLogic ed in base a questi riesce ad abilitare in lettura o scrittura i componenti interessati al movimento dei dati. Il parallelismo di questo componente è di N bit, coincidente con quello del componente Registro Il codice L interfaccia del bus è molto semplice, si compone di segnali di tipo bit in ingresso provenienti dalla ReadWriteLogic, che servono al bus per decidere quale registro deve essere letto e quale deve essere scritto. Di seguito vengono riportati i segnali dell interfaccia che svolgono questo ruolo: -- comandi di lettura registri readirr: in bit; readisr: in bit; readocw1: in bit; readpriorityresolver: in bit; Programmable Interrupt Controller Intel 8259A 37

38 -- comandi di scrittura sui registri writeicw1: in bit; writeicw2: in bit; writeicw3: in bit; writeicw4: in bit; writeocw1: in bit; writeocw2: in bit; writeocw3: in bit; I segnali di tipo bit_vector sono array di segnali che possono essere di ingresso o di uscita. Quando sono di ingresso questi segnali posizionano il bus ad un determinato valore contenuto in un particolare registro interno. All occorrenza è possibile scrivere tale valore in un altro registro adoperando i segnali bit_vector in uscita al bus. Il posizionamento del bus è ovviamente esclusivo, non avrebbe alcun senso infatti posizionare il bus con due valori sostenuti contemporaneamente da due registri differenti. Di seguito riportiamo i segnali dell interfaccia che svolgono questo ruolo: -- output verso i registri outicw1: out bit_vector(n downto 0); outicw2: out bit_vector(n downto 0); outicw3: out bit_vector(n downto 0); outicw4: out bit_vector(n downto 0); outocw1: out bit_vector(n downto 0); outocw2: out bit_vector(n downto 0); outocw3: out bit_vector(n downto 0); outreadwritelogic: out bit_vector(n downto 0) -- input da registri indatabuffer: in bit_vector(n downto 0); inirr: in bit_vector(n downto 0); inisr: in bit_vector(n downto 0); inocw1: in bit_vector(n downto 0); inpriorityresolver: in bit_vector(n downto 0); Si è scelta una descrizione behavioral del componente e si è fatto utilizzo di un process attivo sulle variazione dei segnali di controllo prima citati provenienti dall unita ReadWriteLogic. Innanzittutto si controlla se il segnale di controllo abilita una lettura da registro. In tal caso anche se ci sono più segnali di lettura attivi solo uno di essi può essere abilitato, in quanto altrimenti più registri andrebbero a scrivere sul bus. Una volta determinata la sorgente viene scritto il suo valore nella variabile Q del bus, che rappresenta lo stato interno del bus. Successivamente si verifica se risulta abilitata una scrittura su registro; quest operazione può anche avvenire su più registri contemporaneamente, in quanto i costrutti if adoperati non sono esclusivi. Dopo aver determinato il registro abilitato alla lettura dal bus, si copia il contenuto della variabile Q sull uscita che va verso il componente che ha richiesto la lettura. Programmable Interrupt Controller Intel 8259A 38

39 entity DataBus is generic (N: positive := 7); port ( -- camandi di lettura registri readirr: in bit; readisr: in bit; readocw1: in bit; readpriorityresolver: in bit; -- input da registri indatabuffer: in bit_vector(n downto 0); inirr: in bit_vector(n downto 0); inisr: in bit_vector(n downto 0); inocw1: in bit_vector(n downto 0); inpriorityresolver: in bit_vector(n downto 0); -- comandi di scrittura sui registri writeicw1: in bit; writeicw2: in bit; writeicw3: in bit; writeicw4: in bit; writeocw1: in bit; writeocw2: in bit; writeocw3: in bit; -- output verso i registri outicw1: out bit_vector(n downto 0); outicw2: out bit_vector(n downto 0); outicw3: out bit_vector(n downto 0); outicw4: out bit_vector(n downto 0); outocw1: out bit_vector(n downto 0); outocw2: out bit_vector(n downto 0); outocw3: out bit_vector(n downto 0); outreadwritelogic: out bit_vector(n downto 0) ); end DataBus; architecture behavioral of DataBus is begin process ( readirr, readisr, readocw1, readpriorityresolver, indatabuffer, inirr, inisr, inocw1,inpriorityresolver, writeicw1, writeicw2, writeicw3, writeicw4, writeocw1, writeocw2, writeocw3 ) variable Q: bit_vector(n downto 0); begin if (readirr = '1') then Q := inirr; elsif (readisr = '1') then Q := inisr; elsif (readocw1 = '1') then Q := inocw1; Programmable Interrupt Controller Intel 8259A 39

40 elsif (readpriorityresolver = '1') then Q := inpriorityresolver; elsif (indatabuffer'event) then Q := indatabuffer; end if; if (writeicw1 = '1') then outicw1 <= Q; end if; if (writeicw2 = '1') then outicw2 <= Q; end if; if (writeicw3 = '1') then outicw3 <= Q; end if; if (writeicw4 = '1') then outicw4 <= Q; end if; if (writeocw1 = '1') then outocw1 <= Q; end if; if (writeocw2 = '1') then outocw2 <= Q; end if; if (writeocw3 = '1') then outocw3 <= Q; end if; outreadwritelogic <= Q; end process; end behavioral; Il test-banch Il componente è stato testato singolarmente prima di integrarlo nell architettura. Di seguito riportiamo il test-banch utilizzato per il testing del componente: architecture input_output of DataBus_tb is component DataBus port( readirr: in bit; readisr: in bit; readocw1: in bit; readpriorityresolver: in bit; indatabuffer: in bit_vector(n downto 0); inirr: in bit_vector(n downto 0); inisr: in bit_vector(n downto 0); inocw1: in bit_vector(n downto 0); inpriorityresolver: in bit_vector(n downto 0); writeicw1: in bit; writeicw2: in bit; writeicw3: in bit; writeicw4: in bit; writeocw1: in bit; writeocw2: in bit; writeocw3: in bit; outicw1: out bit_vector(n downto 0); Programmable Interrupt Controller Intel 8259A 40

41 outicw2: out bit_vector(n downto 0); outicw3: out bit_vector(n downto 0); outicw4: out bit_vector(n downto 0); outocw1: out bit_vector(n downto 0); outocw2: out bit_vector(n downto 0); outocw3: out bit_vector(n downto 0); outreadwritelogic: out bit_vector(n downto 0)); end component; for all: DataBus use entity work.databus(behavioral); signal readirr: bit; signal readisr: bit; signal readocw1: bit; signal readpriorityresolver: bit; signal indatabuffer: bit_vector(n downto 0); signal inirr: bit_vector(n downto 0); signal inisr: bit_vector(n downto 0); signal inocw1: bit_vector(n downto 0); signal inpriorityresolver: bit_vector(n downto 0); signal writeicw1: bit; signal writeicw2: bit; signal writeicw3: bit; signal writeicw4: bit; signal writeocw1: bit; signal writeocw2: bit; signal writeocw3: bit; signal outicw1: bit_vector(n downto 0); signal outicw2: bit_vector(n downto 0); signal outicw3: bit_vector(n downto 0); signal outicw4: bit_vector(n downto 0); signal outocw1: bit_vector(n downto 0); signal outocw2: bit_vector(n downto 0); signal outocw3: bit_vector(n downto 0); signal outreadwritelogic: bit_vector(n downto 0); begin a1: DataBus port map ( readirr => readirr, readisr => readisr, readocw1 => readocw1, readpriorityresolver => readpriorityresolver, indatabuffer => indatabuffer, inirr => inirr, inisr => inisr, inocw1 => inocw1, outicw1 => outicw1, writeicw1 => writeicw1, inpriorityresolver => inpriorityresolver, writeicw2 => writeicw2, writeicw3 => writeicw3,writeicw4 => writeicw4, writeocw1 => writeocw1, writeocw2 => writeocw2, writeocw3 => writeocw3, outicw2 => outicw2, outicw3 => outicw3, outicw4 => outicw4, outocw1=> outocw1, outocw2 => outocw2,outocw3 => outocw3, outreadwritelogic => outreadwritelogic); a2: inirr <= " "; a3: inisr <= " "; a4: inocw1 <= " "; a4b: inpriorityresolver <= " "; Programmable Interrupt Controller Intel 8259A 41

42 a5: indatabuffer <= " " after 380 ns; a6: readirr <= '0', '1' after 100 ns, '0' after 140 ns; a7: readisr <= '0', '1' after 600 ns, '0' after 640 ns; a8: readocw1 <= '0', '1' after 750 ns, '0' after 780 ns; a9: writeicw1 <= '0', '1' after 160 ns, '0' after 170 ns, '1' after 630 ns, '0' after 650 ns, '1' after 800 ns, '0' after 840 ns; a10: writeicw2 <= '0', '1' after 160 ns, '0' after 170 ns, '1' after 630 ns, '0' after 650 ns, '1' after 800 ns, '0' after 840 ns; a11: writeicw3 <= '0', '1' after 160 ns, '0' after 170 ns, '1' after 630 ns, '0' after 650 ns, '1' after 800 ns, '0' after 840 ns; a12: writeicw4 <= '0', '1' after 160 ns, '0' after 170 ns, '1' after 630 ns, '0' after 650 ns, '1' after 800 ns, '0' after 840 ns; a13: writeocw1 <= '0', '1' after 400 ns, '0' after 420 ns, '1' after 630 ns, '0' after 650 ns, '1' after 800 ns, '0' after 840 ns; a14: writeocw2 <= '0', '1' after 400 ns, '0' after 420 ns, '1' after 630 ns, Programmable Interrupt Controller Intel 8259A 42

43 '0' after 650 ns, '1' after 800 ns, '0' after 840 ns; a15: writeocw3 <= '0', '1' after 400 ns, '0' after 420 ns, '1' after 630 ns, '0' after 650 ns, '1' after 800 ns, '0' after 840 ns, '1' after 1000 ns, '0' after 1020 ns; a16: readpriorityresolver <= '0', '1' after 900 ns, '0' after 960 ns; end input_output; Il test-bach non fa altro che creare i collegamenti fisici del componente, in maniera coerente con l interfaccia, e simulare il comportamento dell unità ReadWriteLogic, che abilita/disabilita letture e scritture da e verso i registri. Programmable Interrupt Controller Intel 8259A 43

44 Programmable Interrupt Controller Intel 8259A 44

45 La simulazione Il test vede inizialmente i segnali inirr, inisr, inocw1 e inpriorityresolver posizionati come di seguito: inirr <= " "; inisr <= " "; inocw1 <= " "; inpriorityresolver <= " "; Dopo 100 ns si presenta l evento: readirr <= '0', '1' after 100 ns, '0' after 140 ns; a questo punto il bus contiene il contenuto del registro IRR. A 160 ns si presentano gli eventi: writeicw1 <= '0', '1' after 160 ns, '0' after 170 ns, writeicw2 <= '0', '1' after 160 ns, '0' after 170 ns, writeicw3 <= '0', '1' after 160 ns, '0' after 170 ns, writeicw4 <= '0', '1' after 160 ns, '0' after 170 ns, adesso i registri ICW1 ICW2 ICW3 ICW4 sono stati caricati al valore del bus ossia al valore del registro IRR perchè il bus era stato precedentemente posizionato con il suo valore. A 380 ns si presenta l evento: indatabuffer <= " " after 380 ns; adesso il bus contiene questo valore. A 400 ns si presentano gli eventi: writeocw1 <= '0', '1' after 400 ns, '0' after 420 ns, writeocw2 <= '0', '1' after 400 ns, '0' after 420 ns, writeocw3 <= '0', '1' after 400 ns, '0' after 420 ns, adesso i registri OCW1 OCW2 OCW3 vengono scritti con il valore del bus. A 600 ns si presenta l evento: readisr <= '0', '1' after 600 ns, '0' after 640 ns; a questo punto il bus contiene il contenuto del registro ISR. Programmable Interrupt Controller Intel 8259A 45

46 A 630 ns si presentano gli eventi: writeicw1 <='0', '1' after 630 ns, '0' after 650 ns; writeicw2 <='0', '1' after 630 ns, '0' after 650 ns; writeicw3 <='0', '1' after 630 ns, '0' after 650 ns; writeicw4 <='0', '1' after 630 ns, '0' after 650 ns; writeocw1 <='0', '1' after 630 ns, '0' after 650 ns; writeocw2 <='0', '1' after 630 ns, '0' after 650 ns; writeocw3 <='0', '1' after 630 ns, '0' after 650 ns; Adesso questi registri contengono il valore del bus precedentemente caricato al valore del registro ISR. A 750 ns si presenta l evento: readocw1 <= '0', '1' after 750 ns, '0' after 780 ns; a questo punto il bus contiene il contenuto del registro OCW1. A 800 ns si presentano gli eventi: writeicw1 <='0', '1' after 800 ns, '0' after 850 ns; writeicw2 <='0', '1' after 800 ns, '0' after 850 ns; writeicw3 <='0', '1' after 800 ns, '0' after 850 ns; writeicw4 <='0', '1' after 800 ns, '0' after 850 ns; writeocw1 <='0', '1' after 800 ns, '0' after 850 ns; writeocw2 <='0', '1' after 800 ns, '0' after 850 ns; writeocw3 <='0', '1' after 800 ns, '0' after 850 ns; adesso questi registri contengono il valore del bus precedentemente caricato al valore del registro OCW1. Programmable Interrupt Controller Intel 8259A 46

47 A 900 ns si presenta l evento : readpriorityresolver <= '0', '1' after 900 ns, '0' after 960 ns; a questo punto il bus contiene il valore di uscita dell interfaccia verso il bus dell unità PriorityResolver. A 1000 ns si presenta l evento: writeocw3 <= '0', '1' after 1000 ns, '0' after 1020 ns; adesso il registro OCW3 contiene il valore del bus precedentemente caricato con il valore dell interfaccia verso il bus dell unità PriorityResolver. Il test effettuato ha riscontrato il corretto funzionamento del componente, che potrà quindi essere integrato nell architettura del PIC. Di seguito si presentano le forme d'onda risultato del test: Programmable Interrupt Controller Intel 8259A 47

48 Programmable Interrupt Controller Intel 8259A 48

49 2.2.5 DataBusBuffer Questo componente rappresenta un buffer bidirezionale interposto tra il PIC e la CPU, preposto alla memorizzazione e stabilizzazione della parola di 8 bit proveniente o dal bus interno del PIC o dalla CPU e riproponendo la sua uscita sia in direzione CPU che in direzione bus Il codice Di seguito riportiamo la descrizione del componente in vhdl: entity databusbuffer is generic (N: integer:=7); port( notread: in bit; notwrite: in bit; incpuline: in bit_vector(n downto 0); inbusline: in bit_vector(n downto 0); outcpuline: out bit_vector(n downto 0); outbusline: out bit_vector(n downto 0) ); end databusbuffer; architecture behavioral of databusbuffer is begin process(incpuline,notread,notwrite) variable Q1: bit_vector(n downto 0); variable Q2: bit_vector(n downto 0); begin Q1 := incpuline; if(notread = '0') then Q2:= inbusline; elsif(notwrite = '0') then outbusline <= Q1; end if; outcpuline <= Q2; end process; end behavioral; Programmable Interrupt Controller Intel 8259A 49

50 L interfaccia presenta due segnali di abilitazione notread, notwrite e due coppie di porti a parallelismo 8: una per l interfacciamento in/out con la CPU e l altra per l interfacciamento in/out con il bus del PIC. Si è scelta una descrizione behavioral del componente e si è fatto utilizzo di un process attivo sulle variazione dei segnali di controllo provenienti dall unità ReadWriteLogic. La variabile di stato Q1 è aggiornata in corrispondenza delle variazioni delle linee incpuline (bit_vector a parallelismo 8) provenienti dal processore. Q2 è invece aggiornata dal bus interno con il segnale notread in transizione uno/zero; in tal modo il segnale outcpuline riproporrà il contenuto di Q2. Quando è il segnale notwrite a transitare da 1 a zero, sull uscita outbusline verso il bus, viene riproposto il valore di Q1. Si noti che il dispositivo nel caso di scrittura e lettura contemporanea dà precedenza alla lettura Il test-banch Il componente è stato testato singolarmente prima di integrarlo nell architettura. Di seguito riportiamo il test bach utilizzato per testare il componente: ENTITY databusbuffer_tb IS generic (N: positive := 7); END databusbuffer_tb; ARCHITECTURE behavioral OF databusbuffer_tb IS COMPONENT databusbuffer port( notread: in bit; notwrite: in bit; incpuline: in bit_vector(n downto 0); inbusline: in bit_vector(n downto 0); outcpuline: out bit_vector(n downto 0); outbusline: out bit_vector(n downto 0) ); END COMPONENT; for c1: databusbuffer use entity work.databusbuffer(behavioral); BEGIN --Inputs SIGNAL notread: bit; SIGNAL notwrite: bit; SIGNAL incpuline: bit_vector(n downto 0); SIGNAL inbusline: bit_vector(n downto 0); SIGNAL outcpuline: bit_vector(n downto 0); SIGNAL outbusline: bit_vector(n downto 0); Programmable Interrupt Controller Intel 8259A 50

51 -- Instantiate the Unit Under Test (UUT) c1: databusbuffer PORT MAP( notread => notread, notwrite => notwrite, incpuline => incpuline, inbusline => inbusline, outcpuline => outcpuline, outbusline => outbusline ); c2: process begin a1: incpuline<=" ", " " after 100 ns, " " after 300 ns, " " after 500 ns; a3: notwrite <= '1', '0' after 180 ns, '1' after 200 ns, '0' after 340 ns, '1' after 380 ns; a5: inbusline <= " ", " " after 600 ns, " " after 800 ns, " " after 900 ns; a4: notread <= '1', '0' after 650 ns, '1' after 700 ns; wait; end process; END behavioral; Il test-bach non fa altro che creare i collegamenti fisici del componente, in maniera coerente con l interfaccia, e simulare il comportamento dell unità di ReadWriteLogic che abilita/disabilita letture e scritture da e verso la CPU. Programmable Interrupt Controller Intel 8259A 51

52 La simulazione A 100 ns si presenta l evento: incpuline<=" ", " " after 100 ns, adesso Q1 contiene questo valore. A 180 ns si presenta l evento: notwrite <= '1', '0' after 180 ns, '1' after 200 ns, e il valore di Q1 viene riportato su outbusline. Una scrittura analoga viene effettuata a 340 ns. In seguito con una transizione 1/0 del segnale NotRead si carica Q2 con il valore di InBusLine. A 650 ns si presenta l evento: notread <= '1', '0' after 650 ns, '1' after 700 ns; e il valore di Q2 viene riportato sull uscita outcpuline Il test effettuato ha riscontrato il corretto funzionamento del componente, che potrà quindi essere integrato nell architettura del PIC. Programmable Interrupt Controller Intel 8259A 52

53 Programmable Interrupt Controller Intel 8259A 53

54 2.3 III fase: composizione dei sottosistemi Il componente PIC 8259A è stato realizzato con un architettura VHDL di tipo structural, cioè attraverso un interconnessione dei componenti precedentemente descritti e analizzati. All esterno il Sistema si presenta così: Entriamo ora all interno del componente per descriverne la sua architettura interna. Innanzitutto si è rivelato necessario istanziare più componenti di tipo Registro per la definizione completa del data-path del componente. Di seguito sono riportati i registri istanziati: IRR = raccoglie le interruzioni provenienti dalle device; ISR = tiene traccia delle interruzioni in corso di servizio sulla CPU; ICW1, ICW2, ICW3, ICW4 = registri di inizializzazione del PIC; OCW1, OCW2, OCW3 = registri di configurazione e comando del PIC. Sono stati poi istanziati i seguenti componenti: DataBus DataBusBuffer PriorityResolver ReadWriteLogic. fand = realizza la funzione logica Z = (X1 and not X2), dove: Z = vettore di N bit e uscita del componente X1 e X2 = vettori di N bit e ingressi del componente fand1 = realizza la funzione logica Z = (X1 and not X2), dove: Programmable Interrupt Controller Intel 8259A 54

55 Z = bit d uscita dal componente X1 e X2 = bit d ngresso al componente Data la semplicità dei componenti fand e fand1 si omettono ulteriori commenti a riguardo. La seguente figura mostra l interconnessione tra le componenti istanziate: Le due AND utilizzate sono state realizzate attraverso i componenti fand e fand1. Per il test-banch del componente si rimanda ai paragrafi successivi del presente documento, che analizzano e descrivono un componente Tester che opportunamente sollecitato da segnali di input riesce a generare varie configurazioni di test-case che mostrano il funzionamento del componente e ne validano la realizzazione finale. Si riporta di seguito il codice del PIC: Programmable Interrupt Controller Intel 8259A 55

56 entity PIC is generic(n: integer := 7); port( -- input notinta: in bit; notread: in bit; notwrite: in bit; A0: in bit; notcs: in bit; -- chip select inir: in bit_vector(n downto 0); -- linee d'interruzione dalle devices ind: in bit_vector(n downto 0); -- output INT: out bit; outd: out bit_vector(n downto 0) ); end PIC; architecture structural of PIC is component databusbuffer port(notread: in bit; notwrite: in bit; incpuline: in bit_vector(n downto 0); inbusline: in bit_vector(n downto 0); outcpuline: out bit_vector(n downto 0); outbusline: out bit_vector(n downto 0)); end component; component DataBus port (readirr: in bit; readisr: in bit; readocw1: in bit; readpriorityresolver: in bit; indatabuffer: in bit_vector(n downto 0); inirr: in bit_vector(n downto 0); inisr: in bit_vector(n downto 0); inocw1: in bit_vector(n downto 0); inpriorityresolver: in bit_vector(n downto 0); writeicw1: in bit; writeicw2: in bit; writeicw3: in bit; writeicw4: in bit; writeocw1: in bit; writeocw2: in bit; writeocw3: in bit; outicw1: out bit_vector(n downto 0); outicw2: out bit_vector(n downto 0); outicw3: out bit_vector(n downto 0); outicw4: out bit_vector(n downto 0); outocw1: out bit_vector(n downto 0); outocw2: out bit_vector(n downto 0); outocw3: out bit_vector(n downto 0); outreadwritelogic: out bit_vector(n downto 0)); end component; component PriorityResolver port (INT: out bit; NOTINTA: in bit; ICW2: in bit_vector(n downto 0); ICW4: in bit_vector(n downto 0); OCW2: in bit_vector(n downto 0); OCW3: in bit_vector(n downto 0); inirr: out bit_vector(n downto 0); enabledinterrupt: in bit_vector(n downto 0); inisr: out bit_vector(n downto 0); outisr: in bit_vector(n downto 0); outd: out bit_vector(n downto 0); enabled: out bit); end component; component ReadWriteLogic port (notcs: in bit; D: in bit_vector(n downto 0); A0: in bit; NOTWRITE: in bit; NOTREAD: in bit; writeicw1: out bit; writeicw2: out bit; Programmable Interrupt Controller Intel 8259A 56

57 writeicw3: out bit; writeicw4: out bit; writeocw1: out bit; writeocw2: out bit; writeocw3: out bit; readocw1: out bit; readirr: out bit; readisr: out bit); end component; component IRR port (X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component ISR port (X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component ICW1 port (X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component ICW2 port (X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component ICW3 port (X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component ICW4 port (X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component OCW1 port (X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component OCW2 port (X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component OCW3 port (X : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component fxirr port (X1 : in bit_vector(n downto 0); X2 : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component fenabledinterrupt port (X1 : in bit_vector(n downto 0); X2 : in bit_vector(n downto 0); Z : out bit_vector(n downto 0)); end component; component fdatabufferreadenable port (X1 : in bit; X2 : in bit; Z : out bit); end component; for all: databusbuffer use entity work.databusbuffer(behavioral); for all: DataBus use entity work.databus(behavioral); for all: PriorityResolver use entity work.priorityresolver(behavioral); for all: ReadWriteLogic use entity work.readwritelogic(behavioral); for all: IRR use entity work.registro(behavioral); for all: ISR use entity work.registro(behavioral); for all: ICW1 use entity work.registro(behavioral); for all: ICW2 use entity work.registro(behavioral); for all: ICW3 use entity work.registro(behavioral); for all: ICW4 use entity work.registro(behavioral); for all: OCW1 use entity work.registro(behavioral); for all: OCW2 use entity work.registro(behavioral); for all: OCW3 use entity work.registro(behavioral); for all: fxirr use entity work.fand(behavioral); for all: fenabledinterrupt use entity work.fand(behavioral); for all: fdatabufferreadenable use entity work.fand1(behavioral); -- segnali generati all'interno signal XIRR: bit_vector(n downto 0); signal databufferreadenable: bit; -- segnali interni -- segnali per il componente databusbuffer signal indatabuffer: bit_vector(n downto 0); Programmable Interrupt Controller Intel 8259A 57

58 signal inbusline: bit_vector(n downto 0); -- segnali per il componente Databus signal readirr: bit; signal readisr: bit; signal readocw1: bit; signal writeicw1: bit; signal writeicw2: bit; signal writeicw3: bit; signal writeicw4: bit; signal writeocw1: bit; signal writeocw2: bit; signal writeocw3: bit; signal inirr: bit_vector(n downto 0); signal inisr: bit_vector(n downto 0); signal inocw1: bit_vector(n downto 0); signal XICW1: bit_vector(n downto 0); registro y signal XICW2: bit_vector(n downto 0); signal XICW3: bit_vector(n downto 0); signal XICW4: bit_vector(n downto 0); signal XOCW1: bit_vector(n downto 0); signal XOCW2: bit_vector(n downto 0); signal XOCW3: bit_vector(n downto 0); -- Xy: ingresso dal BEGIN -- segnali per il componente PriorityResolver e i registri signal XISR: bit_vector(n downto 0); signal enabled: bit; signal enabledinterrupt: bit_vector(n downto 0); signal irreset: bit_vector(n downto 0); signal ZICW1: bit_vector(n downto 0); signal ZICW2: bit_vector(n downto 0); signal ZICW3: bit_vector(n downto 0); signal ZICW4: bit_vector(n downto 0); signal ZOCW2: bit_vector(n downto 0); signal ZOCW3: bit_vector(n downto 0); signal inpriorityresolver: bit_vector(n downto 0); g0: fxirr port map(x1 => inir, X2 => irreset, Z => XIRR); -- XIRR <= inir and not irreset; g1: fenabledinterrupt port map(x1 => inirr, X2 => inocw1, Z => enabledinterrupt); -- enabledinterrupt <= inirr and not inocw1; g2: fdatabufferreadenable port map(x1 => notread, X2 => enabled, Z => databufferreadenable); -- databufferreadenable <= notread and not enabled; a1: databusbuffer port map(notread => databufferreadenable, notwrite => notwrite, incpuline => ind, inbusline => inbusline, outcpuline => outd, outbusline => indatabuffer); a2: DataBus port map(readirr => readirr, readisr => readisr, readocw1 => readocw1, readpriorityresolver => enabled, indatabuffer => indatabuffer, inirr => inirr, inisr => inisr, inocw1 => inocw1, inpriorityresolver => inpriorityresolver, writeicw1 => writeicw1, writeicw2 => writeicw2, writeicw3 => writeicw3, writeicw4 => writeicw4, writeocw1 => Programmable Interrupt Controller Intel 8259A 58

59 writeocw1, writeocw2 => writeocw2, writeocw3 => writeocw3, outicw1 => XICW1, outicw2 => XICW2, outicw3 => XICW3, outicw4 => XICW4, outocw1 => XOCW1, outocw2 => XOCW2, outocw3 => XOCW3, outreadwritelogic => inbusline); a3: PriorityResolver port map(int => INT, NOTINTA => notinta, ICW2 => ZICW2, ICW4 => ZICW4, OCW2 => ZOCW2, OCW3 => ZOCW3, inirr => irreset, enabledinterrupt => enabledinterrupt, inisr => XISR, outisr => inisr, outd => inpriorityresolver, enabled => enabled); a4: ReadWriteLogic port map (notcs => notcs, D => inbusline, A0 => A0, NOTWRITE => NOTWRITE, NOTREAD => notread, writeicw1 => writeicw1, writeicw2 => writeicw2, writeicw3 => writeicw3, writeicw4 => writeicw4, writeocw1 => writeocw1, writeocw2 => writeocw2, writeocw3 => writeocw3, readocw1 => readocw1, readirr => readirr, readisr => readisr); a5: IRR port map(x => XIRR, Z => inirr); a6: ISR port map(x => XISR, Z => inisr); a7: ICW1 port map(x => XICW1, Z => ZICW1); a8: ICW2 port map(x => XICW2, Z => ZICW2); a9: ICW3 port map(x => XICW3, Z => ZICW3); a10: ICW4 port map(x => XICW4, Z => ZICW4); a11: OCW1 port map(x => XOCW1, Z => inocw1); a12: OCW2 port map(x => XOCW2, Z => ZOCW2); a13: OCW3 port map(x => XOCW3, Z => ZOCW3); END ARCHITECTURE structural; L'illustrazione successiva mostra l'architettura nel suo complesso, tale immagine è riportata in modo più dettagliato nelle pagine seguenti: Programmable Interrupt Controller Intel 8259A 59

60 Programmable Interrupt Controller Intel 8259A 60

61 Programmable Interrupt Controller Intel 8259A 61

62 Programmable Interrupt Controller Intel 8259A 62

63 3 Unità di test 3 Unità di test Per verificare il funzionamento corretto del PIC realizzato, si è adoperata una unità di test che oltre a fornire gli input necessari al PIC, simula il comportamento della CPU e dei dispositivi che generano interruzioni. L'unità di test ha in ingresso una serie di input per permettere il testing di vari aspetti del PIC, in particolare sono configurabili: 8 linee per selezionare il modo di inizializzazione 8 linee per selezionare la programmazione dinamica da eseguire 8 linee per specificare il pattern di interruzioni da provare 1 linea per indicare al simulatore di CPU se risolvere le interruzioni o meno Di seguito si presentano le combinazioni di ingressi di maggiore importanza per verificare il corretto funzionamento del PIC: Modi di inizializzazione (startinitialization) Scrittura di tutti gli ICW con impostazione di AEOI. Valore di ICW2: (I cui 5 bit più significativi individuano l'indirizzo delle ISR) Scrittura di tutti gli ICW con impostazione di not AEOI. Valore di ICW2: (I cui 5 bit più significativi individuano l'indirizzo delle ISR) Programmable Interrupt Controller Intel 8259A 63

64 3 Unità di test Modi di Programmazione (startprogramming) Scrive tutti gli OCW nel seguente modo: OCW1: OCW2: imposta in modo da avere no operation OCW3: imposta in modo da avere no operation Invia un messaggio di specific EOI per la linea IR Invia un messaggio di specific EOI per la linea IR Operazione di richiesta lettura di OCW Operazione di scrittura di OCW1 con valore Pattern di interruzioni (startinterruptpattern) Invia 5 interruzioni a priorità decrescente in un tempo di 1600 ns. Ogni interruzione arriva 400 ns dopo la precedente Invia 2 interruzioni a priorità decrescente in un tempo di 500 ns. La seconda interruzione arriva 500 ns dopo la prima Invia 4 interruzioni a priorità mista in un tempo di 5300 ns. L'ordine di priorità è il seguente 5,0,3,2. Una interruzione si presenta circa 1700 ns dopo l'interruzione che la precede Invia 3 interruzioni con priorità 5,3,4. Successivamente invia anche 2 specific EOI nell'ordine 3, Funzionamento dell'unità di test L'unità di test non garantisce un corretto funzionamento del PIC. Il tecnico che compie il test deve specificare correttamente gli input all'unità di test perché i segnali scambiati con il PIC siano corretti. Tuttavia l'unità di test semplifica la gestione dei segnali di risposta della CPU e delle periferiche, che vengono totalmente automatizzati in accordo col protocollo di comunicazione stabilito dal PIC. L'unità di test, in particolare, gestisce automaticamente: Ciclo di!inta: una volta ricevuto un segnale di INT, l'unità di test genera automaticamente i cicli di!inta, se l'input di abilitazione delle interruzioni da parte delle CPU (readytosolveinterrupts) è alto. Gestione delle linee IR: Quando un dispositivo che ha segnalato una interruzione viene servito, la sua corrispondente linea di interruzione torna inattiva. L'unità di test si occupa di verificare a quale linea di interruzione appartiene l'interruzione servita, e la rende inattiva come opportuno. Programmable Interrupt Controller Intel 8259A 64

65 3 Unità di test 3.2 Realizzazione dell'unità di test Presentiamo adesso le caratteristiche realizzative più interessanti dell'unità di test. Nel precedente paragrafo si sono indicati gli aspetti automatizzati da questo dispositivo, vediamo ora come si sono ottenuti tali risultati: Ciclo!INTA if(int'event and INT='1') then if(readytosolveinterrupts='1') then waitingisraddress := true; notinta <= '0' after 100 ns, '1' after 300 ns, '0' after 400 ns, '1' after 600 ns; end if; end if; Quando il processo che realizza l'unità di test verifica un cambiamento della linea INT, va a verificare se c'è stata una transizione sul fronte di salita. In questo caso, comprende la necessità di avviare il ciclo di!inta che è eseguito nell'assegnazione interna al corpo dell'if. La variabile booleana waitingisraddress indica che ora si sta attendendo sul bus dati l'indirizzo dell'interruzione che deve essere servita Reset delle linee IR if(databusin'event) then if(waitingisraddress=true) then waitingisraddress:=false; ISRLevel:=0; if(databusin(0)='1') then ISRlevel:=1; end if; if(databusin(1)='1') then ISRlevel:=ISRlevel+2; end if; if(databusin(2)='1') then ISRlevel:=ISRlevel+4; end if; case ISRLevel is when 0 => IR(0)<='0' after 20 ns; when 1 => IR(1)<='0' after 20 ns; when 2 => IR(2)<='0' after 20 ns; when 3 => IR(3)<='0' after 20 ns; when 4 => IR(4)<='0' after 20 ns; when 5 => IR(5)<='0' after 20 ns; when 6 => IR(6)<='0' after 20 ns; when 7 => IR(7)<='0' after 20 ns; when others => waitingisraddress:=true; end case; end if; end if; Quando c'è un cambiamento dei segnali sul bus dati, si attiva la parte di codice riportata. A questo punto, se si è in attesa dell'indirizzo della ISR di una interruzione (waitingisraddress = true), il dispositivo controlla il livello dell'interruzione che deve essere servita guardando ai 3 bit meno significativi del bus dati. La decodifica di questi bit permette di comprendere quale interruzione è stata servita e, di conseguenza, quale linea IR deve essere resettata. Programmable Interrupt Controller Intel 8259A 65

66 4 Testing 4 Testing In questo paragrafo si presentano i risultati dei test più significativi compiuti sul PIC per verificarne il corretto funzionamento. 4.1 Inizializzazione e programmazione Illustrazione 3: Inizializzazione con Automatic End of Interrupt In Illustrazione 3 è presentata la fase di inizializzazione per porre il PIC in funzionamento con Automatic End of Interrupt impostato. La figura mostra anche la successiva fase di programmazione del dispositivo, con l'invio delle 3 stringhe OCW. Questa fase non consente in realtà di verificare il corretto funzionamento del PIC osservando i segnali esterni, poiché il PIC reagisce semplicemente impostando i suoi registri interni. Vengono comunque riportate queste forme d'onda poiché questa operazione è necessaria prima di compiere qualsiasi altro test, oltre a presentare praticamente il protocollo di scrittura dei registri del PIC. Le prime due forme d'onda sono inutilizzate in questo caso poiché rappresentano le linee INT e INTA che non sono adoperate in questo esempio. Lo stesso avviene per le linee rappresentate in bianco che sono le 8 linee IR di richiesta interruzione. In giallo è presentata la linea di!wr. Le ultime due linee presentate rappresentano il bus dati in ingresso al PIC e quello in uscita rispettivamente. In particolare si può vedere come venga innanzitutto impostato il segnale A0 e successivamente venga posto il bus dati al valore da scrivere. Quando queste operazioni sono state compiute, viene inviato l'impulso!wr per 200 ns in modo da scrivere sul registro. L'operazione si ripete 4 volte per i registri ICW e 3 volte per i registri OCW. Osservando i valori del bus dati e del bit A0 si può verificare la corrispondenza con le modalità di indirizzamento specificate in precedenza. In Illustrazione 4 è presentata la stessa operazione, ma con valori differenti di inizializzazione per impostare il PIC in modalità not Automatic end of Interrupt. Programmable Interrupt Controller Intel 8259A 66

67 4 Testing Illustrazione 4: Inizializzazione con modalità not AEOI Programmable Interrupt Controller Intel 8259A 67

68 4 Testing 4.2 Interruzioni in AEOI Arriva un'interruzione sulla linea 0 L'interruzione viene subito segnalata La CPU avvia il ciclo INTA Arriva una interruzione sulla linea 1 Al secondo impulso INTA viene rilasciato l'indirizzo della ISR La linea di interruzione 0 viene resettata mentre il PIC segnala la presenza di una nuova interruzione poiché è terminato il ciclo di INTA e c'è l'aeoi Programmable Interrupt Controller Intel 8259A 68

69 4 Testing L'illustrazione precedente rappresenta il risultato di una serie di 5 interruzioni in arrivo al PIC in modalità Automatic End Of Interrupt. In particolare è descritto il comportamento per la prima interruzione ricevuta. Il comportamento rimane lo stesso per le successive e quindi si è evitato di descriverlo. E' interessante notare come una interruzione non venga mai segnalata durante un ciclo di INTA. Allo stesso tempo si può vedere come la modalità AEOI comporti che una interruzione venga segnalata subito dopo la fine del ciclo di INTA, poiché non si attendono segnalazioni dalla CPU per comprendere se una ISR ha terminato o meno la sua esecuzione. Programmable Interrupt Controller Intel 8259A 69

70 4 Testing 4.3 Interruzioni in non AEOI Arriva un'interruzione IR1 e viene segnalata Arriva un'interruzione IR3 Termina il ciclo INTA e viene messo sul bus l'indirizzo della ISR per IR1. IR3 non viene segnalata poiché la CPU non ha ancora segnalato la fine dell'esecuzione di IR1 La CPU invia la stringa OCW2 per segnalare la EOI per IR1. Poiché adesso non ci sono interruzioni più prioritarie in esecuzione, IR3 viene segnalata Terminato il ciclo di INTA, viene messo sul bus l'indirizzo della ISR per IR3 Programmable Interrupt Controller Intel 8259A 70

71 4 Testing Arriva un'interruzione IR5 e viene segnalata Viene messo sul bus l'indirizzo della ISR di IR5 e termina il ciclo INTA Arriva un'interruzione di livello IR3, che, essendo più prioritaria di IR5 viene servita anche se il PIC non ha ricevuto la segnalazione di EOI dalla CPU per IR5 Una interruzione IR4 arriva e non viene segnalata poiché di priorità inferiore Arriva l'eoi per IR3 e viene dunque segnalata IR4 come si vede dall'indirizzo rilasciato sul bus alla fine del ciclo INTA Programmable Interrupt Controller Intel 8259A 71

72 4 Testing Le immagini presentate mostrano il funzionamento del PIC in modalità non Automatic End of Interrupt. Come si può vedere il PIC mantiene conservate le informazioni di quale interruzione ha completato la sua esecuzione, aspettando un opportuno messaggio di fine interruzione da parte del PIC. Questa modalità permette di gestire le interruzioni in modo innestato, ossia, fin quando c'è un'interruzione in esecuzione sul PIC, tutte quelle di priorità uguale o inferiore vengono mascherate. Non appena un'interruzione termina, si seleziona quella a maggior priorità in attesa per la segnalazione della stessa alla CPU. Programmable Interrupt Controller Intel 8259A 72

73 4 Testing 4.4 Scrittura e lettura dei registri interni A0 messo ad 1 abilita la lettura di OCW1 al successivo impulso di!rd All'impulso di!rd viene messo sul bus OCW1 Mantenendo uguale A0, ma inviando un impulso di!wr viene caricato OCW1 con il valore presente sul data bus Una nuova lettura di OCW1 conferma la corretta scrittura del registro Programmable Interrupt Controller Intel 8259A 73

Sistemi di Elaborazione a Microprocessore 8259. (Controllore Program m abile delle Interruzioni) M. Rebaudengo - M. Sonza Reorda

Sistemi di Elaborazione a Microprocessore 8259. (Controllore Program m abile delle Interruzioni) M. Rebaudengo - M. Sonza Reorda 8259 (Controllore Program m abile delle Interruzioni) M. Rebaudengo - M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica 1 M. Rebaudengo, M. Sonza Reorda Generalità L'8259 è stato progettato

Dettagli

UNITA PERIFERICA DI TIPO PARALLELO - PIA MC 6821

UNITA PERIFERICA DI TIPO PARALLELO - PIA MC 6821 UNITA PERIFERICA DI TIPO PARALLELO - PIA MC 6821 Indirizzamento interno dei registri: Registro di controllo CRA: Bit 7 Bit 6 Bit 5,4,3 Bit 2 Bit 1,0 IRQA1 IRQA2 CA2 DDRA CA1 Significato dei singoli bit:

Dettagli

Il problema dello I/O e gli Interrupt. Appunti di Sistemi per la cl. 4 sez. D A cura del prof. Ing. Mario Catalano

Il problema dello I/O e gli Interrupt. Appunti di Sistemi per la cl. 4 sez. D A cura del prof. Ing. Mario Catalano Il problema dello I/O e gli Interrupt Appunti di Sistemi per la cl. 4 sez. D A cura del prof. Ing. Mario Catalano Il Calcolatore e le periferiche Periferica Decodifica Indirizzi Circuiti di Controllo Registri

Dettagli

Interfacciamento di periferiche I/O al μp 8088

Interfacciamento di periferiche I/O al μp 8088 Interfacciamento di periferiche I/O al μp 8088 5.1 Principali segnali della CPU 8086 5.2 Periferiche di I/O e loro gestione 5.3 Collegamento di periferiche di input 5.4 Collegamento di periferiche di output

Dettagli

ISA Input / Output (I/O) Data register Controller

ISA Input / Output (I/O) Data register Controller ISA Input / Output (I/O) Numerose Periferiche di tanti tipi diversi, collegati alla CPU mediante BUS diversi. Solo Input (tastiera, mouse), producono dati che la CPU deve leggere. Solo Output (Schermo),

Dettagli

Modi di esecuzione user / kernel

Modi di esecuzione user / kernel Corso di Gestione eccezioni nel MIPS Interruzioni Anno Accademico 2006/2007 Francesco Tortorella Modi di esecuzione user / kernel Due modi di esecuzione: User kernel Per ognuno dei due modi di esecuzione

Dettagli

Gateway KNX/DALI 64/16 - da guida DIN GW Manuale Tecnico

Gateway KNX/DALI 64/16 - da guida DIN GW Manuale Tecnico Gateway KNX/DALI 64/16 - da guida DIN GW 90872 Manuale Tecnico 1 Sommario 1 Introduzione... 3 2 Applicazione... 3 2.1 Limiti delle associazioni... 3 3 Menù Generale... 4 3.1 Parametri... 4 3.2 Oggetti

Dettagli

Corso di Calcolatori Elettronici I

Corso di Calcolatori Elettronici I Corso di Calcolatori Elettronici I Il sistema di Input-Output Roberto Canonico Università degli Studi di Napoli Federico II A.A. 2014-2015 Roberto Canonico Corso di Calcolatori Elettronici I A.A. 2014-2015

Dettagli

Sistemi di Elaborazione: esercizio con il D12

Sistemi di Elaborazione: esercizio con il D12 Sistemi di Elaborazione: esercizio con il D12 Un sistema basato su PIC18F8720 a 24 MHz è dotato di 32 KB di EPROM agli indirizzi alti e 64 KB di RAM statica agli indirizzi bassi. Il sistema è dotato inoltre

Dettagli

Manualetto. Aggiornato al 31/07/2014

Manualetto. Aggiornato al 31/07/2014 Sistema emulato Periferiche 8086 Manualetto s165178 @ studenti.polito.it Aggiornato al 31/07/2014 Canali del sistema emulato Routine Descrizione Canale Indice IVT ISR_PA_IN L 8086 riceve un dato dalla

Dettagli

Periferiche CPU. Misure e Sistemi Microelettronici Sistemi 6-1 SREG. Data Bus Address Bus Control Bus

Periferiche CPU. Misure e Sistemi Microelettronici Sistemi 6-1 SREG. Data Bus Address Bus Control Bus Periferiche Interface Interface Interface Interface CPU SREG CREG DREG Il processore scambia informazioni con le periferiche attraverso dei registri. Tipicamente: Control REGister; Status REGister; Data

Dettagli

Introduzione alla programmazione

Introduzione alla programmazione Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste

Dettagli

LA GESTIONE DELLA I/O

LA GESTIONE DELLA I/O LA GESTIONE DELLA I/O Il S.O. È l interfaccia tra l hardware e i programmi che effettuano richieste di I/O Sottosistema di I/O strutturato in moduli chiamati DRIVER uno per ogni dispositivo I Driver rendono

Dettagli

SETTIMA LEZIONE: TRASMISSIONE DI DATI E COMANDI NEL SISTEMA IEEE-488

SETTIMA LEZIONE: TRASMISSIONE DI DATI E COMANDI NEL SISTEMA IEEE-488 Corso di Sistemi Automatici di Misura SETTIMA LEZIONE: TRASMISSIONE DI DATI E COMANDI NEL SISTEMA IEEE-488 PROTOCOLLO DI TRASMISSIONE Lo scambio di dati tra le periferiche o l invio di comandi indirizzati

Dettagli

Informatica Generale 07 - Sistemi Operativi:Gestione dei processi

Informatica Generale 07 - Sistemi Operativi:Gestione dei processi Informatica Generale 07 - Sistemi Operativi:Gestione dei processi Cosa vedremo: Esecuzione di un programma Concetto di processo Interruzioni Sistemi monotasking e multitasking Time-sharing Tabella dei

Dettagli

Il sistema delle interruzioni nel processore MC68000 (cenni)

Il sistema delle interruzioni nel processore MC68000 (cenni) Corso di Calcolatori Elettronici I A.A. 2011-2012 Il sistema delle interruzioni nel processore MC68000 (cenni) Lezione 33 Prof. Antonio Pescapè Università degli Studi di Napoli Federico II Facoltà di Ingegneria

Dettagli

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni Componenti principali Componenti e connessioni Capitolo 3 CPU (Unita Centrale di Elaborazione) Memoria Sistemi di I/O Connessioni tra loro 1 2 Architettura di Von Neumann Dati e instruzioni in memoria

Dettagli

Manuale tecnico. Attuatore comando motore 1 canale 8A Easy GW GW GW 14767

Manuale tecnico. Attuatore comando motore 1 canale 8A Easy GW GW GW 14767 Manuale tecnico Attuatore comando motore 1 canale 8A Easy GW 10767 - GW 12767 - GW 14767 1 Sommario 1 Introduzione... 3 2 Applicazione... 3 2.1 Limiti delle associazioni... 3 2.2 Priorità dei comandi ricevuti...

Dettagli

CONTATORE/TIMER PROGRAMMABILE CTC Z80 1. Piedinatura 2. Struttura interna 4. Modo timer 5. Modo Counter 8. Programmazione del CTC 13

CONTATORE/TIMER PROGRAMMABILE CTC Z80 1. Piedinatura 2. Struttura interna 4. Modo timer 5. Modo Counter 8. Programmazione del CTC 13 CONTATORE/TIMER PROGRAMMABILE CTC Z80 1 Piedinatura 2 Struttura interna 4 Modo timer 5 Modo Counter 8 Programmazione del CTC 13 Gerarchia di priorità delle interruzioni 17 Interfacciamento 17 Contatore/Timer

Dettagli

Componenti e connessioni. Capitolo 3

Componenti e connessioni. Capitolo 3 Componenti e connessioni Capitolo 3 Componenti principali CPU (Unità Centrale di Elaborazione) Memoria Sistemi di I/O Connessioni tra loro Architettura di Von Neumann Dati e instruzioni in memoria (lettura

Dettagli

Sottosistemi ed Architetture Memorie

Sottosistemi ed Architetture Memorie Sottosistemi ed Architetture Memorie CORSO DI CALCOLATORI ELETTRONICI I CdL Ingegneria Biomedica (A-I) DIS - Università degli Studi di Napoli Federico II La memoria centrale Memoria centrale: array di

Dettagli

STRUTTURE DI CONTROLLO DEL C++

STRUTTURE DI CONTROLLO DEL C++ STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto

Dettagli

Ciclo del Processore. Memoria

Ciclo del Processore. Memoria Ciclo del Nella figura seguente è riportata la rappresentazione semplificata ed essenziale di un computer. RESET Canali Di Ingresso Uscita Uscita Ingressi Fig. 1 Rappresentazione semplificata di un computer

Dettagli

INGEGNERIA E TECNOLOGIE DEI SISTEMI DI CONTROLLO Processori per sistemi di controllo

INGEGNERIA E TECNOLOGIE DEI SISTEMI DI CONTROLLO Processori per sistemi di controllo INGEGNERIA E TECNOLOGIE DEI SISTEMI DI CONTROLLO Processori per sistemi di controllo Prof. Carlo Rossi DEIS - Università di Bologna Tel: 051 2093020 email: crossi@deis.unibo.it Classificazione Processori

Dettagli

Rappresentazione con i diagrammi di flusso (Flow - chart)

Rappresentazione con i diagrammi di flusso (Flow - chart) Rappresentazione con i diagrammi di flusso (Flow - chart) Questo tipo di rappresentazione grafica degli algoritmi, sviluppato negli anni 50, utilizza una serie di simboli grafici dal contenuto evocativo

Dettagli

Calcolatori Elettronici M Modulo Introduzione all ambiente Xilinx ISE 12.3 e ISIM

Calcolatori Elettronici M Modulo Introduzione all ambiente Xilinx ISE 12.3 e ISIM Calcolatori Elettronici M Modulo 2 06 Introduzione all ambiente Xilinx ISE 12.3 e ISIM 1 Questi lucidi forniscono una sintetica introduzione all ambiente di sviluppo Xilinx ISE 12.3 utilizzando come riferimento

Dettagli

Imagicle Hotel. Guida alla configurazione delle centrali innovaphone

Imagicle Hotel. Guida alla configurazione delle centrali innovaphone Imagicle Hotel. Guida alla configurazione delle centrali innovaphone 2016 01/03/2016 2-17 www.imagicle.com Indice 1 CENTRALI INNOVAPHONE SUPPORTATE.... 5 2 COME PROGRAMMARE LA CENTRALE PER L INTEGRAZIONE

Dettagli

Microelettronica Corso introduttivo di progettazione di sistemi embedded

Microelettronica Corso introduttivo di progettazione di sistemi embedded Microelettronica Corso introduttivo di progettazione di sistemi embedded Architettura dei sistemi a microprocessore prof. Stefano Salvatori A.A. 2014/2015 Eccetto dove diversamente specificato, i contenuti

Dettagli

Capitolo 6 Le infrastrutture SoftWare

Capitolo 6 Le infrastrutture SoftWare Capitolo 6 Le infrastrutture SoftWare Funzioni del sistema operativo Rendere utilizzabili le risorse fisiche presenti nel sistema informatico: garantire la correttezza e la precisione nell elaborazione

Dettagli

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura francesco.tura@unibo.it 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina

Dettagli

DEC PDP8, III Generazione, '65-'75

DEC PDP8, III Generazione, '65-'75 Parte I DEC PDP8, III Generazione, '65-'75 PDP8 Architettura (Livello Registri) 12 bit Program Counter PC 12 bit Memory Address Register MAR Random Access Memory RAM 4096 x 16 1 bit I 3 bit Operation Code

Dettagli

Il ciclo del processore semplificato BOOTSTRAP FETCH EXECUTE

Il ciclo del processore semplificato BOOTSTRAP FETCH EXECUTE Roadmap Inquadramento del problema La fase di interrupt nel ciclo del processore Le cause di interruzione Le fasi di uninterruzione Ripristino del programma Latenza Identificazione di dispositivi: soluzioni

Dettagli

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO Rappresentazione degli algoritmi Problema Algoritmo Algoritmo descritto con una qualche notazione Programma Defne del procedimento

Dettagli

Struttura Logica del S.O:

Struttura Logica del S.O: Avvertenza Quanto segue NON è un libro, ma è una copia dei lucidi usati a lezione che NON sostituisce i libri di testo adottati e consigliati per l insegnamento di Informatica Generale. Questa copia è

Dettagli

RELAZIONE DEL PROGETTO DI UN CONTATORE BINARIO UP/DOWN MODULO 4 PER IL CORSO DI APPARATI ELETTRONICI 1. INTRODUZIONE

RELAZIONE DEL PROGETTO DI UN CONTATORE BINARIO UP/DOWN MODULO 4 PER IL CORSO DI APPARATI ELETTRONICI 1. INTRODUZIONE RELAZIONE DEL PROGETTO DI UN CONTATORE BINARIO UP/DOWN MODULO 4 PER IL CORSO DI APPARATI ELETTRONICI 1. INTRODUZIONE In generale un contatore è un dispositivo che memorizza (e a volte visualizza) il numero

Dettagli

GUIDA APPLICATIVA DICHIARAZIONE RLS INTERMEDIARIO

GUIDA APPLICATIVA DICHIARAZIONE RLS INTERMEDIARIO GUIDA APPLICATIVA DICHIARAZIONE RLS INTERMEDIARIO VERSIONE 5.0 INDICE DEL DOCUMENTO 1.... 3 2. Descrizione servizio... 4 3. Scelta deleghe... 5 3.1. Ricerca... 6 4. Inserimento e modifica RLS... 7 4.1.

Dettagli

Indice lezione: Pagina 2

Indice lezione: Pagina 2 Abbiamo visto: sistema monolitico (I + E + O) dividiamo I e O da E, e affidiamo loro una CPU replichiamo gli I e gli O per parallelizzare singolarmente gli I e O Pagina 1 Indice lezione: Parallelizzazione

Dettagli

Il Sottosistema di Memoria

Il Sottosistema di Memoria Il Sottosistema di Memoria Classificazione delle memorie Funzionalità Memoria di sola lettura (ROM) Memoria di lettura/scrittura Tecnologia Memoria a semiconduttori Memoria magnetica Memoria ottica Modalità

Dettagli

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j L insieme delle istruzioni (2) Architetture dei Calcolatori (lettere A-I) Istruzioni per operazioni logiche: shift Shift (traslazione) dei bit di una parola a destra o sinistra sll (shift left logical):

Dettagli

EEPROM SERIALI IN I2C BUS.

EEPROM SERIALI IN I2C BUS. Corso di BASCOM 8051 - (Capitolo 3 0 ) Corso Teorico/Pratico di programmazione in BASCOM 8051. Autore: DAMINO Salvatore. EEPROM SERIALI IN I2C BUS. Tra i dispositivi più utilizzati, nelle applicazioni

Dettagli

Operazioni di I/O. Schema di collegamento fra dispositivi periferici e CPU

Operazioni di I/O. Schema di collegamento fra dispositivi periferici e CPU Operazioni di I/O 1 Schema di collegamento fra dispositivi periferici e CPU Memoria CPU buffer interfaccia Registro di controllo Registro Di stato Unità di controllo Dispositivo fisico 2 1 Unità di interfaccia

Dettagli

MANUALE D USO di GESTIONE PEC2 PER IL SERVIZIO POSTECERT POST CERTIFICATA (modalità Avanzata)

MANUALE D USO di GESTIONE PEC2 PER IL SERVIZIO POSTECERT POST CERTIFICATA (modalità Avanzata) MANUALE D USO di GESTIONE PEC2 PER IL SERVIZIO POSTECERT POSTEMAIL CERTIFICATA (modalità Avanzata) Sommario GestionePEC2... 3 Accesso al servizio... 3 Elenco degli utenti... 4 Ricerca di un utente... 5

Dettagli

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare

Dettagli

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal Algoritmi, Strutture Dati e Programmi : Programmazione in Pascal Prof. Alberto Postiglione AA 2007-2008 Università degli Studi di Salerno Il Linguaggio di Programmazione Pascal Esistono molti linguaggi

Dettagli

Introduzione alle macchine a stati (non definitivo)

Introduzione alle macchine a stati (non definitivo) Introduzione alle macchine a stati (non definitivo) - Introduzione Il modo migliore per affrontare un problema di automazione industriale (anche non particolarmente complesso) consiste nel dividerlo in

Dettagli

Sono tipicamente causati da dispositivi hardware. normale flusso di esecuzione viene interrotto, e la CPU passa a gestire l interrupt

Sono tipicamente causati da dispositivi hardware. normale flusso di esecuzione viene interrotto, e la CPU passa a gestire l interrupt Interruzioni in MIPS 32 Input/Output Interrupt Sono tipicamente causati da dispositivi hardware esterni, e collegati al processore attraverso delle linee di controllo di bus, come ad esempio le periferiche

Dettagli

Modello a scambio di messaggi

Modello a scambio di messaggi Modello a scambio di messaggi Aspetti caratterizzanti il modello Canali di comunicazione Primitive di comunicazione 1 Aspetti caratterizzanti il modello modello architetturale di macchina (virtuale) concorrente

Dettagli

interoperabilità fra dispositivi forniti da diversi produttori; superare i problemi legati alla limitazione del numero di risorse.

interoperabilità fra dispositivi forniti da diversi produttori; superare i problemi legati alla limitazione del numero di risorse. Capitolo 7 Le infrastrutture SoftWare Funzioni del sistema operativo Rendere utilizzabili le risorse fisiche presenti nel sistema informatico: correttezza e precision; anywhere, anytime; affidabilità,

Dettagli

Imagicle Hotel. Guida alla configurazione del modulo generico TAPI

Imagicle Hotel. Guida alla configurazione del modulo generico TAPI Imagicle Hotel. Guida alla configurazione del modulo generico TAPI 2016 01/03/2016 2-12 www.imagicle.com Indice 1 CENTRALI SUPPORTATE... 5 2 PRINCIPI DI FUNZIONAMENTO... 6 3 CONFIGURARE BLUE S HOTEL PRO...

Dettagli

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE 1 ALGORITMO, PROGRAMMA, PROCESSO Algoritmo Procedimento logico che deve essere eseguito per risolvere un determinato problema. Programma Descrizione di un

Dettagli

5. I device driver. Device driver - gestori delle periferiche. Struttura interna del sistema operativo Linux. Tipi di periferiche. Tipi di periferiche

5. I device driver. Device driver - gestori delle periferiche. Struttura interna del sistema operativo Linux. Tipi di periferiche. Tipi di periferiche Device driver - gestori delle periferiche Struttura interna del sistema operativo Linux Sono moduli software che realizzano l interfacciamento e la gestione dei dispositivi periferici Interagiscono con

Dettagli

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU:

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU: Struttura e Funzione del Processore Capitolo 12 Struttura CPU Compiti CPU: Prelevare istruzioni Interpretare istruzioni Prelevare dati Elaborare dati Scrivere (memorizzare) dati 1 CPU con bus di sistema

Dettagli

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe. Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe. 1) Comprendere il problema 2) Stabilire quali sono le azioni da eseguire per risolverlo 3) Stabilire la

Dettagli

Il Sottosistema di Memoria

Il Sottosistema di Memoria Il Sottosistema di Memoria Calcolatori Elettronici 1 Memoria RAM RAM: Random Access Memory Tempi di accesso indipendenti dalla posizione Statica o Dinamica Valutata in termini di Dimensione (di solito

Dettagli

Sommario. Modellizzazione Sintassi Classi di Oggetti Tipi di Dati e Operatori Package e Librerie Processi Esempi di codice VHDL VHDL Testbenches

Sommario. Modellizzazione Sintassi Classi di Oggetti Tipi di Dati e Operatori Package e Librerie Processi Esempi di codice VHDL VHDL Testbenches Fondamenti di VHDL Sommario VHDL: premessa e introduzione Modellizzazione Sintassi Classi di Oggetti Tipi di Dati e Operatori Package e Librerie Processi Esempi di codice VHDL VHDL Testbenches Premessa

Dettagli

Interfaccia KNX per contatore d energia - da guida DIN GW Manuale Tecnico

Interfaccia KNX per contatore d energia - da guida DIN GW Manuale Tecnico Interfaccia KNX per contatore d energia - da guida DIN GW 90876 Manuale Tecnico 1 Sommario 1 Introduzione... 3 2 Applicazione... 3 2.1 Limiti delle associazioni... 3 3 Menù Generale... 4 3.1 Parametri...

Dettagli

GESTIONE DELLE PERIFERICHE D INGRESSO/USCITA ARGOMENTI

GESTIONE DELLE PERIFERICHE D INGRESSO/USCITA ARGOMENTI GESTIONE DELLE PERIFERICHE D INGRESSO/USCITA ARGOMENTI Compiti del sottosistema di I/O Architettura del sottosistema di I/O Gestore di un dispositivo di I/O Gestione e organizzazione dei dischi COMPITI

Dettagli

Memorie Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella

Memorie Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella Memorie Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella.net Tipi di memorie Possono essere classificate in base a varie caratteristiche:

Dettagli

CONTATORE DI ENERGIA TRIFASE INSERZIONE DIRETTA PM30D01KNX. Manuale D Uso

CONTATORE DI ENERGIA TRIFASE INSERZIONE DIRETTA PM30D01KNX. Manuale D Uso CONTATORE DI ENERGIA TRIFASE INSERZIONE DIRETTA PM30D01KNX Manuale D Uso Prodotto: PM30D01KNX Descrizione CONTATORE DI ENERGIA TRIFASE INSERZONE DIRETTA Documento Versione: 1.1 Data: 04/10/2016 1/8 INDICE

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 5 Martedì 25-10-2016 Definizione di processo Esiste una distinzione concettuale

Dettagli

Matlab. Istruzioni condizionali, cicli for e cicli while.

Matlab. Istruzioni condizionali, cicli for e cicli while. Matlab. Istruzioni condizionali, cicli for e cicli while. Alvise Sommariva Università degli Studi di Padova Dipartimento di Matematica 17 marzo 2016 Alvise Sommariva Introduzione 1/ 18 Introduzione Il

Dettagli

Sottosistema d ingresso uscita

Sottosistema d ingresso uscita Lezione n.15 Sottosistema d ingresso uscita Le interfacce Sommario: Il sottosistema d ingresso/uscita (I/O) e le interfacce Gestione di un periferico a controllo di programma 1 Il sottosistema d ingresso/uscita

Dettagli

Mod Sch. 1362/624 FOGLIO AGGIUNTIVO MANUALE D INSTALLAZIONE E D USO DEL CENTRALINO TELEFONICO PABX AGORA 6 DS LBT 8579

Mod Sch. 1362/624 FOGLIO AGGIUNTIVO MANUALE D INSTALLAZIONE E D USO DEL CENTRALINO TELEFONICO PABX AGORA 6 DS LBT 8579 Mod. 362 DS 362-033 LBT 8579 FOGLIO AGGIUNTIVO MANUALE D INSTALLAZIONE E D USO DEL CENTRALINO TELEFONICO PABX AGORA 6 Sch. 362/624 NUOVA MODALITÀ DI FUNZIONAMENTO: LINEA URBANA CITOFONICA Dalla versione

Dettagli

Fiat Group Purchasing Supplier Quality SQP Manuale Utente Versione 1, Novembre 2008

Fiat Group Purchasing Supplier Quality SQP Manuale Utente Versione 1, Novembre 2008 SQP Riferimenti fornitore Versione 1, Novembre 2008 Indice argomenti 1. Versione documento... 2 2. Cosa si intende per Riferimento Fornitore... 3 3. Configurazione dei ruoli aziendali... 4 4. Ruoli aziendali

Dettagli

Capitolo 5 Elementi architetturali di base

Capitolo 5 Elementi architetturali di base Capitolo 5 Elementi architetturali di base Giuseppe Lami Istituto di Scienza e Tecnologie dell Informazione CNR Via Moruzzi, 1 - Pisa giuseppe.lami@isti.cnr.it Struttura - Unità di elaborazione e controllo

Dettagli

Note sull utilizzazione di componenti logici di tipo memoria

Note sull utilizzazione di componenti logici di tipo memoria Architettura degli Elaboratori, a.a. 2005-06 Note sull utilizzazione di componenti logici di tipo memoria Queste note precisano e completano il contenuto nel Cap. III, sez. 7 delle Dispense, in particolare

Dettagli

Il protocollo RS Introduzione. 1.2 Lo Standard RS-232

Il protocollo RS Introduzione. 1.2 Lo Standard RS-232 1 Il protocollo RS232 1.1 Introduzione Come noto un dispositivo di interfaccia permette la comunicazione tra la struttura hardware di un calcolatore e uno o più dispositivi esterni. Uno degli obiettivi

Dettagli

Inoltrare un messaggio.

Inoltrare un messaggio. Reti informatiche 359 7.5.3.9 Inoltrare un messaggio. È possibile spedire ad altri un messaggio inviato o ricevuto in precedenza. Al destinatario verrà recapitato il messaggio originale nel quale compariranno

Dettagli

Manuale tecnico. Remotizzatore GSM Easy GW

Manuale tecnico. Remotizzatore GSM Easy GW Manuale tecnico Remotizzatore GSM Easy GW 90 861 1 Sommario 1 Introduzione... 3 2 Applicazione... 3 2.1 Limite delle associazioni... 3 3 Menù Impostazioni... 4 3.1 Parametri... 4 3.2 Oggetti di comunicazione...

Dettagli

Algoritmi. Pagina 1 di 5

Algoritmi. Pagina 1 di 5 Algoritmi Il termine algoritmo proviene dalla matematica e deriva dal nome di in algebrista arabo del IX secolo di nome Al-Khuwarizmi e sta ad indicare un procedimento basato su un numero finito operazioni

Dettagli

Domino - Contatto. BootTools - Aggiornamento Firmware dei moduli Domino - Contatto

Domino - Contatto. BootTools - Aggiornamento Firmware dei moduli Domino - Contatto Introduzione BootTools è il nuovo software universale per l'aggiornamento firmware dei moduli Domino e Contatto. Le interfacce tra PC e campo supportate per l'aggiornamento sono: DFRS, DFUSB, DFPRO, WEBS

Dettagli

PROGRAMMAZIONE STRUTTURATA

PROGRAMMAZIONE STRUTTURATA PROGRAMMAZIONE STRUTTURATA Programmazione strutturata 2 La programmazione strutturata nasce come proposta per regolamentare e standardizzare le metodologie di programmazione (Dijkstra, 1965) Obiettivo:

Dettagli

GUIDA APPLICATIVA DICHIARAZIONE RLS AZIENDA

GUIDA APPLICATIVA DICHIARAZIONE RLS AZIENDA GUIDA APPLICATIVA DICHIARAZIONE RLS AZIENDA VERSIONE 5.0 INDICE DEL DOCUMENTO 1.... 3 2. Descrizione servizio... 4 3. Inserimento e modifica RLS... 5 3.1. Visualizza unità produttive... 5 3.2. Inserimento

Dettagli

1 Esercizi in pseudocodice

1 Esercizi in pseudocodice Questa dispensa propone esercizi sulla scrittura di algoritmi in un linguaggio semiformale, utile all acquisizione delle abilità essenziali per implementare algoritmi in qualsiasi linguaggio di programmazione.

Dettagli

20 Tecnica del sequenziatore

20 Tecnica del sequenziatore 20 Tecnica del sequenziatore 1. Funzionamento di un sequenziatore logico Fig. 1. Modulo di base per sequenziatore. L uso del sequenziatore pneumatico presenta i seguenti vantaggi: semplicità di progettazione;

Dettagli

SISTEMI DI ELABORAZIONE

SISTEMI DI ELABORAZIONE SISTEMI DI ELABORAZIONE CORSO DI LAUREA MAGISTRALE IN INGEGNERIA ELETTRONICA SPECIFICHE DI PROGETTO A.A. 2011/2012 Il progetto consiste nello sviluppo di un applicazione client/server. Client e server

Dettagli

Elementi di informatica

Elementi di informatica Elementi di informatica Architetture degli elaboratori Il calcolatore Un calcolatore è sistema composto da un elevato numero di componenti Il suo funzionamento può essere descritto se lo si considera come

Dettagli

1. Che cos è un sistema multiprogrammato? Si può realizzare la multiprogrammazione

1. Che cos è un sistema multiprogrammato? Si può realizzare la multiprogrammazione 1. Che cos è un sistema multiprogrammato? Si può realizzare la multiprogrammazione su un sistema con una sola CPU? 2. Qual è la differenza tra un interruzione e una trap? Si faccia qualche esempio. 1.

Dettagli

I formati delle istruzioni

I formati delle istruzioni Appunti di Calcolatori Elettronici Le istruzioni I formati delle istruzioni... 1 Criteri generali di progettazione dei formati delle istruzioni... 2 Cenni all indirizzamento... 4 Indirizzamento immediato...

Dettagli

Listini Dinamici. Indice degli argomenti

Listini Dinamici. Indice degli argomenti Indice degli argomenti Premessa Impostazione delle tabelle utili per la creazione di un listino dinamico Creazione di un Listino Dinamico Utilizzo in Gestione Documenti, Ordini Clienti e Movimenti di Magazzino

Dettagli

1.5 Control bus Sistemi: architettura dei microprocessori

1.5 Control bus Sistemi: architettura dei microprocessori Control bus 1.5 Control bus Le azioni di lettura, scrittura, acquisizione ed emissione sono governate dalla CPU che sincronizza gli altri dispositivi attraverso il controlo bus. Il control bus è costitituito

Dettagli

La macchina di Von Neumann

La macchina di Von Neumann Università degli Studi di Palermo Facoltà di Ingegneria La macchina di Edoardo Ardizzone & Ignazio Infantino Appunti per il corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Informatica

Dettagli

Struttura interna del sistema operativo Linux

Struttura interna del sistema operativo Linux Struttura interna del sistema operativo Linux 5. I device driver A cura di: Anna Antola Giuseppe Pozzi DEI, Politecnico di Milano anna.antola/giuseppe.pozzi@polimi.it -versione del 30 marzo 2004-1-04.-04

Dettagli

Manuale operativo di amministrazione del Portale Aziende BPM

Manuale operativo di amministrazione del Portale Aziende BPM Manuale operativo di amministrazione del Portale Aziende BPM Versione 1.0 Indice Indice INDICE 2 PREFAZIONE 3 IL MANUALE OPERATIVO 3 I LETTORI DEL MANUALE 3 DEFINIZIONI 3 I CONTENUTI DEL MANUALE 4 CAPITOLO

Dettagli

Influenza dell' I/O sulle prestazioni (globali) di un sistema

Influenza dell' I/O sulle prestazioni (globali) di un sistema Influenza dell' I/O sulle prestazioni (globali) di un sistema Tempo totale per l'esecuzione di un programma = tempo di CPU + tempo di I/O Supponiamo di avere un programma che viene eseguito in 100 secondi

Dettagli

Introduzione al VHDL Lezione 3

Introduzione al VHDL Lezione 3 Introduzione al VHDL Lezione 3 Cristina Silvano Università degli Studi di Milano Dipartimento di Scienze dell Informazione Via Comelico 39/41, I-20135 Milano (Italy) Tel.: +39-2-5835-6306 e-mail: silvano@elet.polimi.it

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Istruzione condizionale switch Istruzioni di salto break e continue Uso di variabili di tipo boolean Variabili di tipo array (monodimensionali)

Dettagli

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Dettagli

Modelli di interazione tra processi

Modelli di interazione tra processi Modelli di interazione tra processi Modello a memoria comune (ambiente globale, global environment) Modello a scambio di messaggi (ambiente locale, message passing) 1 Modello a memoria comune Il sistema

Dettagli

L hardware da solo non è sufficiente per il funzionamento dell elaboratore È necessario introdurre il software:

L hardware da solo non è sufficiente per il funzionamento dell elaboratore È necessario introdurre il software: Il Software L hardware da solo non è sufficiente per il funzionamento dell elaboratore È necessario introdurre il software: un insieme di programmi che permettono di trasformare un insieme di circuiti

Dettagli

Venere TS Certificati (Guida operativa)

Venere TS Certificati (Guida operativa) Venere TS Certificati (Guida operativa) 1 ACN2009... 3 1.1 INSTALLAZIONE... 3 1.1.1 Verifiche preliminari... 3 1.1.2 Aggiornamento Venere all ultima versione disponibile... 3 1.1.3 Installazione ACN2009

Dettagli

Introduzione alla programmazione Esercizi risolti

Introduzione alla programmazione Esercizi risolti Esercizi risolti 1 Esercizio Si determini se il diagramma di flusso rappresentato in Figura 1 è strutturato. A B C D F E Figura 1: Diagramma di flusso strutturato? Soluzione Per determinare se il diagramma

Dettagli

Studio degli algoritmi

Studio degli algoritmi COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.2006/07 Prof. V.L. Plantamura Dott.ssa A. Angelini Studio degli algoritmi Dato un problema P, le problematiche riguardano: Sintesi

Dettagli

Elettronica dei Sistemi Programmabili A.A. 2013-2014. Microcontrollori. Introduzione allo sviluppo di progetti

Elettronica dei Sistemi Programmabili A.A. 2013-2014. Microcontrollori. Introduzione allo sviluppo di progetti Elettronica dei Sistemi Programmabili A.A. 2013-2014 Microcontrollori Introduzione allo sviluppo di progetti Premessa Qualunque sistema basato su microcontrollore deve eseguire un codice memorizzato in

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E03 Esempi di algoritmi e programmi A. Miola Novembre 2011 1 Contenuti q Progettazione di algoritmi q Problemi di ingresso - uscita

Dettagli

Formalismi per la descrizione di algoritmi

Formalismi per la descrizione di algoritmi Formalismi per la descrizione di algoritmi Per descrivere in passi di un algoritmo bisogna essere precisi e non ambigui Il linguaggio naturale degli esseri umani si presta a interpret non univoche Si usano

Dettagli

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso Obiettivi Di seguito vengono riportate una serie di domande che possono essere poste durante la prova formale del corso. Le seguenti domande non sono da ritenersi esaustive ma esemplificative. 1. Architettura

Dettagli

Attuatore 4 canali 16A GW Manuale Tecnico

Attuatore 4 canali 16A GW Manuale Tecnico Attuatore 4 canali 16A GW 90 740 Manuale Tecnico Sommario 1 Introduzione... 3 2 Applicazione... 4 2.1 Limiti delle associazioni... 4 2.2 Schema a blocchi... 4 3 Menù Generale... 6 3.1 Parametri... 6 4

Dettagli

Il computer. Il case e l'unità di elaborazione. Il computer, una macchina aggiornabile.

Il computer. Il case e l'unità di elaborazione. Il computer, una macchina aggiornabile. Liceo Scientifico Vinci PROGRAMMA FINALE A.S. 2016/2017 Materia: INFORMATICA Classe 1Q Prof. Dardanelli Francesco PROGRAMMA SVOLTO NELL ANNO SCOLASTICO IL COMPUTER. Hardware e software. Il computer. Il

Dettagli

ARCHITETTURA DI UN CALCOLATORE ELETTRONICO

ARCHITETTURA DI UN CALCOLATORE ELETTRONICO ARCHITETTURA DI UN CALCOLATORE ELETTRONICO Per architettura di un calcolatore elettronico si intende l'insieme delle principali unità funzionali di un calcolatore ed il modo in cui queste interagiscono.

Dettagli