|
|
||||||||||
In questo laboratorio proponiamo tre diverse versioni di un sistema, basato su due microcomputer che comunicano attraverso una interfaccia parallela. L'attenzione è rivolta ad una analisi qualitativa della efficienza della comunicazione. Il collegamento tra i due sistemi è sintetizzato nella figura seguente: Il microcomputer A invia dei dati, in formato parallelo, al microcomputer B. Quest'ultimo si dichiara disponibile a ricevere dati, ponendo a livello basso la linea Busy: il microcomputer A è quindi autorizzato ad inviare un dato (8 bit) sulle linee Data. L'invio di un dato è segnalato dal microcomputer A tramite un impulso, di breve durata, generato sulla linea Strobe. Dal lato del microcomputer B, all'arrivo del segnale di Strobe, la circuiteria dell'interfaccia attiva immediatamente il segnale Busy, in modo che il microcomputer A non possa, per ora, trasmettere nuovi dati, in attesa che il dato venga effettivamente acquisito all'interno del microcomputer B. Non appena questo avviene, il microcomputer B disattiva la linea Busy, abilitando il microcomputer A a trasmettere, se necessario, il prossimo dato. Analizzando le varie versioni proposte, avremo modo di valutare i vantaggi e svantaggi dell'uso delle tecniche di polling e di interrupt. I primi due esercizi propongono la sola analisi del sistema, mentre il terzo chiede di reimpostare su base interrupt il software di controllo del microcomputer A. 1) Prima versione: handshake basato su "polling" Nella prima versione del sistema (visibile nella figura seguente), il trasmettitore dei dati TX (Parallel Data Sender), sulla sinistra, provvede a generare ciclicamente un dato sulle linee DATA, se l'ingresso di abilitazione della trasmissione SEND è attivo. Non è utilizzata la linea di Interrupt. Il dato è inviato solo se la linea Busy (letta sul bit 1 del porto IA) è a livello basso. Per comprendere nel dettaglio il funzionamento del trasmettitore, potete analizzarne il codice sorgente nel d-McE . Il ricevitore RX (Parallel Data Receiver), sulla destra, è incaricato di ricevere il dato e di presentarlo, a sua volta, sulle linee DATA_OUT (porto di uscita OD), segnalando l'avvenuta ricezione del dato con un impulso di breve durata sulla uscita DATA_OK. L'interazione tra i due sistemi avviene con l'ausilio di un flip-flop D-Pet, incaricato di memorizzare l'avvenuta ricezione del segnale di Strobe, e quindi della presenza di un nuovo dato parallelo, da acquisire, dalle linee DATA. Come si osserva in figura, la linea Busy è generata dal flip-flop stesso. Il microcomputer B potrà controllare, via polling, se è arrivato o meno un nuovo dato, andando a leggere lo stato del flip-flop mediante la linea 7 del proprio porto IA. Potete analizzare nel dettaglio il funzionamento del ricevitore, caricando nel d-McE il relativo codice sorgente. Analizzando il codice sorgente, si vede che il microcomputer B non si occupa solo di ricevere i dati dalla nostra interfaccia, ma svolge anche un altro compito, piuttosto gravoso e del tutto indipendente dalla comunicazione dei dati, che lo impegna per un tempo rilevante. Il nostro scopo è valutare, al variare delle versioni del sistema, l'efficienza della l'interfaccia di comunicazione nonostante la necessità di eseguire questo compito gravoso. Nel codice proposto, a scopo dimostrativo, il compito gravoso è rappresentato da un sottoprogramma denominato "SOMETASK", che si occupa di ruotare ciclicamente un LED acceso sui 16 bit dei porti OA e OB. Facciamo l'ipotesi che SOMETASK, in una situazione reale, non possa essere modificato, e che debba necessariamente essere chiamato nel loop principale. Da notare: SOMETASK sarà sempre lo stesso in tutte e tre le versioni. Si simuli la funzionalità dell'intero sistema nel d-DcS facendo click sulla figura qui sopra, oppure con un click qui. La simulazione può essere effettuata sia in modalità interattiva, sia in modalità timing (dove è disponibile la sequenza "HandshakeTest"). Si consiglia di attivare, nel diagramma temporale, le finestre del "codice oggetto" di ciascun microcomputer, per seguire nel dettaglio l'esecuzione dei due programmi. 2) Seconda versione: handshake, in ricezione, su base "interrupt" In questa seconda versione del sistema (vedi figura seguente), il trasmettitore dei dati è identico (in hardware e software) al caso precedente. Anche i compiti richiesti al ricevitore sono identici al caso precedente, ma con alcune importanti differenze nella loro implentazione hardware e software. Come si vede in figura, il flip-flop D-Pet è ora collegato anche all'ingresso !INT (Interrupt) del microcomputer B. Il software di gestione della ricezione, invece di controllare via polling se è arrivato o meno un nuovo dato, esegue questo controllo grazie al meccanismo delle interruzioni. La ricezione del dato e le conseguenti operazioni, infatti, sono eseguite dalla routine di interruzione, che è chiamata a seguito della richiesta generata via hardware dal flip-flop. Si osservi che tale richiesta è poi cancellata automaticamente nel momento in cui il microprocessore legge il porto IB. Infatti, l'operazione di lettura di IB, oltre ad acquisire il dato dalle linee DATA, produce anche un impulso sulla linea !rB che, come si vede nello schema, causa l'azzeramento del flip-flop. Potete caricare nel d-McE il codice sorgente del ricevitore. Come indicato in precedenza, anche in questo secondo sistema, il microcomputer B svolge gli stessi compiti gravosi della versione precedente. L'intero sistema può essere simulato nel d-DcS facendo click sulla figura qui sopra oppure con un click qui. Si chiede di confrontare il funzionamento della comunicazione con quello del sistema precedente, valutandone l'efficienza sia qualitativamente (per esempio, con l'uso della simulazione per animazione), sia quantitativamente. Mediante la simulazione temporale infatti, è possibile valutare l'effettiva velocità di trasmissione dati, in termini di byte al secondo, ottenuta dai due diversi sistemi. 3) Terza versione: trasmettitore basato su tecniche di "interrupt" Nella terza e ultima versione del sistema (mostrato nella figura seguente), il ricevitore è identico a quello del caso precedente. Invece, al trasmettitore, è stato aggiunto un nuovo elemento: un Interrupt Timer che, collegato all'ingresso !INT (Interrupt) del microcomputer A , lo interrompe ciclicamente ogni 1000 cicli di clock del processore (100 microsecondi). La risposta all'interruzione, manifestata dal microcomputer con il segnale !INTA, resetta automaticamente la richiesta di interruzione !INT generata dal timer. Il trasmettitore, nelle versioni precedenti, temporizzava la trasmissione dei dati mediante una routine di ritardo. Si chiede di riscrivere il software di gestione della trasmissione dei dati, utilizzando la tecnica delle interruzioni, completando la traccia qui scaricabile . Con questa tecnica è possibile liberare il programma principale dal compito di trasmettere i dati (infatti, nella traccia fornita, il programma principale non svolge alcun compito), permettendo eventuali modifiche future. In questo caso, la velocità di trasmissione potrà essere variata modificando il tempo impostato nel componente Interrupt Timer. Facendo click sulla figura qui sopra, oppure facendo click qui, è possibile scaricare lo schema della terza versione del sistema nel d-DcS. Si chiede di simulare il sistema, dapprima in modo interattivo animato, per poi passare alla simulazione temporale. Con quest'ultima, si chiede di mettere in evidenza le interruzioni e la risposta del processore a queste. |