88/4X Riassunto e approfondimenti delle lezioni di Calcolatori LS Francesco Di Cintio 1 Indice generale CLOCK............................................................................................................................................3 READY............................................................................................................................................4 8088 e MAXIMUM MODE............................................................................................................5 MEMORIE.......................................................................................................................................7 PROTEZIONE SCRITTURA.........................................................................................................9 CIRCUITO DI FAILSAFE............................................................................................................10 RICONOSCIMENTO CALI DI TENSIONE................................................................................11 BATTERIA....................................................................................................................................13 INTERFACCIA PARALLELA......................................................................................................14 CIRCUITO DI WATCHDOG........................................................................................................15 INTERRUPT..................................................................................................................................16 CONTROLLER DMA...................................................................................................................17 FOGLIO 5......................................................................................................................................18 FOGLIO 6......................................................................................................................................18 VARIE............................................................................................................................................18 Nota dell'autore Questo documento contiene il riassunto delle lezioni di Calcolatori LS riguardanti la scheda, riorganizzate però in maniera leggermente diversa rispetto alle lezioni, secondo una logica di divisione dei vari dispositivi e funzioni presenti nella scheda stessa. Sono presenti anche alcuni miei personali ragionamenti, motivo per cui questi appunti non intendono essere in alcun modo sostitutivi delle lezioni del corso né tantomeno esenti da errori: spero che comunque vi possano essere di aiuto per l'esame. Francesco Di Cintio 2 CLOCK Il circuito che genera il clock per il processore e molti dei componenti della scheda è in posizione H3: si tratta di un 8284 (slide 24, 8088) collegato a monte tramite il piedino EFI con due diversi oscillatori (H-I1, foglio 1), uno a 15 e l'altro a 24Mhz: si tratta di oscillatori ibridi, in quanto formati da un operazionale retroazionato che genera un'onda semi-sinusoidale, abbinato ad un quarzo che stabilizza l'onda. Questa soluzione è più indicata rispetto all'utilizzo del solo cristallo di quarzo per la generazione del clock, in quanto il quarzo può avere problemi di innesco dell'oscillazione: utilizzando invece oscillatori ibridi si ha la certezza di avere un clock stabile già dalle prime fasi. La scelta di quale dei due oscillatori collegare agli ingressi del 8284 avviene tramite jumper: in questo modo è possibile utilizzare la scheda sia con processori a 5Mhz che 8Mhz, cambiando 8284 e i due oscillatori semplicemente il jumper sulla scheda madre e senza il bisogno di cambiare hardware (entrambi gli oscillatori sono già incorporati nella scheda, si tratta di un vantaggio anche per la produzione, che non deve essere differenziata per i diversi processori); va ricordato che l'oscillatore in ingresso all'8284 deve avere una frequenza tripla rispetto a quella desiderata dal processore (quindi 15Mhz per il funzionamento a 5Mhz, 24Mhz per il funzionamento a 8Mhz). Da notare anche che i piedini non usati sono portati ad alimentazione, come nel caso di f_E, oppure a massa, come nel caso di X1 e X2 (in quanto non si usa l'oscillatore interno). La presenza di due possibili frequenze di funzionamento, obbligherebbe a fare una scelta sui componenti da montare sulla scheda: in tal senso, per consentire sempre un corretto funzionamento bisognerebbe montare tutti componenti che lavorano a 8Mhz, che risulterebbero sovradimensionati nel caso di funzionamento a 5Mhz: tale problema però non si pone, poiché molti componenti sono montati su zoccoli che permettono una sostituzione non invasiva del componente in caso sia necessaria una sostituzione per il cambiamento del clock del sistema. Il clock adattato dal 8284 esce dal piedino numero 8 (in basso a destra) e viene distribuito a tutto il sistema; dato che il percorso di questo segnale è molto lungo e che il clock è un segnale ad alta frequenza, è molto alta la probabilità di incorrere in riflessioni del segnale: per questo motivo, benché si tratti un segnale digitale, viene utilizzata una resistenza da 38Ohm (determinata sperimentalmente), che abbinata alla capacità parassita del filo verso massa forma un filtro passa basso che smorza le componenti di alta frequenza riducendo l il rischio di riflessioni del segnale (segnali troppo ripidi possono creare rimbalzi). Il piedino subito sopra (PCLK, piedino 7) distribuisce un segnale di clock a metà frequenza, con duty cycle del 50%. 3 READY La generazione del segnale di READY avviene di solito tramite uno shift register (foglio 1, H5) collegato con l'8284 che discrimina tra due possibili ingressi corrispondenti a due diversi wait: nel nostro caso il primo di questi non viene tenuto in considerazione poiché destinato ad un'altra scheda (ram dinamiche) che era possibile montare in piggybacking, la quale forniva il suo segnale di ready (le memorie dinamiche hanno un tempo maggiore di accesso a causa del tempo di refresh: hanno quindi un generatore di wait interno): si presuppone quindi che ci sia un solo segnale di ready nel nostro sistema. Shift register e multiplexer per ready Da ricordare il segnale di ready viene campionato sul fronte positivo del clock, nel terzo ciclo di bus di un trasferimento (T3): se campionato basso provoca una ripetizione di T3. In posizione I6 è situato lo shift register (74HC164) serial-in/parallel-out che ha il compito di contare gli stadi di wait: in realtà non dispone di un solo ingresso bensì di due che vengono campionati in AND. Supponendo che siano entrambi ad 1, lo shift register fa avanzare il conteggio ad ogni ciclo di clock facendo propagare l'1 attraverso i suoi stadi: in questo caso agli ingressi A e B sono collegati i segnale SBXINT messi in AND tra loro: poiché si tratta di segnali provenienti da dispositivi SBX assenti in questa scheda, ed essendo tutti collegati ad un pull-up verso l'alimentazione, il conteggio è sempre attivo. Normalmente il conteggio viene resettato (piedino CLR*) dal segnale ALE: in questo caso però, essendoci anche il dma controller, il segnale CLR* viene collegato un segnale BLOCKN* generato da una PAL nel foglio 4, che è combinazione di ALE e ADSTB: questo però implica che il dma controller dovrà essere programmato in single transfer mode, poiché in caso contrario lo shift register non verrebbe resettato ogni ciclo di bus, bensì ogni 256. Per distinguere il numero degli stati di wait dovuto ad accesso in memoria da quelli dovuto ad operazioni di I/O è sufficiente collegare due differenti fili alle uscite dello shift register tramite due jumper: in questo modo si hanno due diverse temporizzazioni del segnale di ready, una per tutte le memorie e una per tutte le operazioni di I/O. Questi due segnali passano poi attraverso due NAND insieme al segnale S2* (precisamente, il segnale S2* bufferato nel 373 in B2): ricordando che il segnale S2 corrisponde a IO/M* in minimum mode, è evidente che ponendo i segnali di WAIT_IO e WAIT_MEM in NAND rispettivamente con S2 e S2*, si realizza un multiplexer per i segnali di wait1 che permette di selezionare il giusto ritardo in base alla effettiva operazione di bus che il sistema sta effettuando. Il segnale di wait risultante entra poi in un OR a 4 ingressi (3 effettivi): un ingresso è destinato al 4 circuito di failsafe, che verrà esaminato in seguito, mentre un altro è occupato dal segnale INTA; quando si sta rispondendo ad una interruzione, si desidera che tale risposta avvenga nel più breve tempo possibile: in questo caso l'attivazione del segnale INTA provoca anche l'automatica attivazione del segnale di READY, in modo da non avere periodi di wait. Oltre al segnale di ready appena fornito, è necessario anche collegare l'enable relativo sul 8284, ovvero AEN2*: si nota che è collegato al segnale di chip select della memoria dinamica, nel nostro caso è sempre 0 e quindi ready sempre abilitato. Nota: 1. I NAND fungono da multiplexer: quello più a destra inverte il segnale BS2*, che discrimina tra i due segnali di WAIT* (c'è una “doppia negazione”: stiamo generando un segnale di READY e lavoriamo con segnali di WAIT, inoltre il WAIT* è attivo basso mentre READY è attivo alto); il segnale BS2* sarà quindi 0 in un NAND, mentre 1 nell'altro: dove è 1 funge da “enable” per il segnale di WAIT* in ingresso, che verrà riportato negato in uscita, mentre dove è 0 semplicemente forza l'uscita del NAND a 1, il quale a sua volta fungerà da enable per l'altro NAND. Quando la periferica non è pronta il segnale di WAIT* sarà a 0: in questo caso avremo un 1 in ingresso all'ultimo NAND e quindi 0 in ingresso all'OR: quando il segnale di WAIT* va a 1, l'ultimo NAND ha uscita 1 generando il segnale di READY per l'8284 8088 e MAXIMUM MODE Il processore presente nella scheda (foglio 1) è configurato per funzionare in maximum mode: sono presenti infatti sia il circuito integrato per la generazione dei segnali di gestione dei cicli di bus (lettura o scrittura, da IO o memoria, DEN, ALE, INTA: 8288 in posizione E2) a partire dai segnali S[0-2] provenienti dal 8088. È presente anche un co-processore matematico (8087). Appena sopra l'8088 sono presenti 3 373 (B2-6) necessari per campionare gli indirizzi che vengono In basso i 373, in alto i 245 normalmente multiplexati, ovvero AD[0-7] (indirizzi e dati) e AS[16-19] (indirizzi e stato): sarebbero stati sufficienti due soli 373, ma dato che era necessario predisporre degli amplificatori di corrente anche per gli indirizzi non multiplexati (A[8-15]: l'8088 non sarebbe riuscito ad erogare una quantità sufficiente di potenza quindi i segnali vengono irrobustiti dai 373), si è preferito utilizzare un altro 373 al posto in un 244 in modo da “uniformare” i dispositivi e avere la possibilità di campionare anche i bit di stato S[0-2], il tutto ad un costo contenuto; di notevole importanza in 5 tal senso il segnale S2 poiché è equivalente al segnale IO/M* in minimum mode, ovvero discrimina tra un ciclo di bus in memoria e un ciclo di bus I/O. I 373 possono essere messi in tristate tramite il segnale HOLDA che entra negato nel pin OE* (output enable), ovvero durante le fasi di DMA per evitare conflitti sui segnali di indirizzo. Per quanto riguarda invece i bus dati, è importante notare che bus IO e bus di memoria sono separati: i 2 245 in posizione A4-6 servono infatti per connettere i pin AD[0-7] del processore al bus corretto durante un trasferimento dati, scollegando quello non utilizzato (per evitare problemi di pilotaggio sul bus, inoltre i segnali vengono irrobustiti); la direzione dei 245 è data dal segnale DT/ R* del 8288 (ovvero, data transfer o read), mentre l'output enable è il risultato di funzioni logiche realizzate su delle PAL (posizione E7: ). Tale segnale è comunque influenzato dal segnale DEN (da 8288), e in aggiunta anche dai segnali del DMA e dal segnale S2 (DEN = data enable: segnala quando gli indirizzi sono emessi e si può procedere al trasferimento dei dati). In particolare durante i cicli di DMA i transceiver devono rimanere disabilitati poiché vengono utilizzati altri circuiti di bypass tra i bus (il 245 in G8). 8288 Analizzando i restanti pin del'8288, si nota che esso ha il chip enable (CEN) collegato ad alimentazione e quindi sempre attivo: il piedino AEN* è invece collegato al segnale HOLDA in modo da disabilitare le uscite del 8288 sul bus mentre è occupato dal dma controller; gli ingressi S[2..0]* sono ovviamente i segnali di stato del 8088 mentre in uscita troviamo i vari segnali di lettura scrittura da memoria o I/0, con le relative versioni “advanced” (non trattate.). Per i segnali in uscita con alto fan-out, si possono presentare problemi di pilotaggio, direttamente collegati alla impedenza di uscita di tali segnali: con PNP e NPN si ha un effettivo problema di pilotaggio, mentre con i CMOS il vero problema risiede nel tempo di carica e scarica dei dispositivi a valle: diminuendo l'impedenza di uscita si riduce la costante RC e quindi carica e scarica risultano più veloci. Per risolvere questo problema, in G2 sono presenti 8 buffer invertenti con alta impedenza di ingresso e bassa di uscita: bisogna però porre attenzione ad eventuali ritardi o sfasamenti dei segnale, poiché vengono invertiti una seconda volta per essere utilizzati dai vari dispositivi. MEMORIE Il sistema prevede 9 zoccoli di alloggiamento per le memorie (foglio 2): i primi 4 in alto destinati a memorie RAM/ROM, i 4 in basso riservati a memorie RAM, e l'ultimo riservato ad una memoria EPROM: i 4 zoccoli nella fila superiore sono accoppiati. Sono presenti due set di jumper nella fila superiore (più uno per lo slot dedicato alla EPROM), e 4 nella fila inferiore (poiché le memorie in basso non sono accoppiate) che servono per la selezione della taglia1 delle memorie, ovvero per connettere correttamente i segnali di indirizzo e pin di alimentazione a seconda che si installino 6 memorie da 8, 16, 32, o 64KB (RAM ovviamente solo da 8 e 32KB). Dettaglio di una coppia di zoccoli con relativi jumper In caso di utilizzo di RAM nella fila superiore, oltre a collegare ad alimentazione alcuni dei pin (va ricordato che non esistono ram statiche da 64Kb), è necessario collegare il pin di WE con il corrispettivo segnale PRWR* (ovvero WR protetto), operazione effettuata sempre tramite uno dei jumper presenti nei set. La fila inferiore di zoccoli è riservata soltanto a memorie RAM, ed ha la particolarità di essere alimentata anche tramite il circuito di batteria, che verrà visto in seguito. I chip select per i primi 8 zoccoli sono segnali protetti, ovvero sono previsti dei circuiti che disattivano tali segnali per Protezione dei CS: notare la batterizzazione evitare scritture casuali in memoria, dovute a transitori di accensione o di spegnimento del processore. Tale protezione avviene tramite la combinazione di due batterie di OR (A8-9, F8-9) alimentati a batteria (quindi garantiscono il funzionamento anche in condizioni di alimentazione critiche) e il segnale MPRO2: tale segnale assume valore 1 quando l'alimentazione raggiunge in livello critico per la funzionalità del sistema (sotto i 4,5V). In particolare, i chip select generati a partire dagli indirizzi (CS*) vengono messi in OR con il segnale MPRO: in condizioni normali, i PCS* (protected chip select) uscenti dagli OR e entranti nelle memorie, rispecchiano il normale funzionamento dei CS*; quando invece sopraggiunge un calo di alimentazione e il segnale MPRO diventa attivo, di conseguenza tutti i PCS* rimarranno al valore 1 impedendo qualunque PAL per generazione CS 7 selezione delle memorie. I CS* a loro volta, sono generati da (una) PAL in E9, a 12 ingressi, 10 uscite vere negate: le funzioni logiche dei chip select non dipendono solo dagli indirizzi emessi dall'8088 e da HOLDA, ma anche da due segnali SIZESEL programmati dall'esterno che selezionano 4 diverse taglie di memoria installata: in questo modo è possibile cambiare agevolmente la quantità di memoria agendo solo su jumper sia per i collegamenti delle singole memorie, sia per quanto riguarda i chip select. Note: 1. nella fila superiore solo i due slot più a destra possono ospitare ROM da 64K: gli slot più a sinistra hanno A15 a Vcc, quindi si prevedeva l'utilizzo in questi casi di ROM da 32K al massimo; se si utilizzano ROM da 32K, tutti i piedini vanno collegati al bus indirizzi: con ROM da 16K o 8K i piedini eccedenti vanno connessi a Vcc: il segnale PRWR ha senso quindi solo con RAM da 8K in questi slot. Analogamente negli slot sottostanti (solo RAM) il piedino da collegare ad alimentazione (5BU e non Vcc) è quello corrispondente ad A13 (RAM da 8K o da 32K), mentre WRPRO è sempre attuabile. Il problema degli slot superiori è che devono poter ospitare sia ROM che RAM, che hanno piedinatura leggermente diversa. 2. MPRO è praticamente uguale al segnale LOW5V. PROTEZIONE SCRITTURA Oltre a fornire una protezione contro scritture casuali dovute a transitori o sbalzi di alimentazione, è possibile anche proteggere selettivamente dalla scrittura ogni singolo dispositivo di memoria. Dettaglio del circuito di protezione scrittura Il circuito in posizione B3 (foglio 4) è dedicato alla generazione dei segnali di scrittura destinati alle RAM: si tratta di dispositivo di IO formato da 8 latch programmabili singolarmente, con in input un segnale programmabile dall'esterno tramite una porta esterna (bufferato tramite 244 in E3: vedere fogli 5 e 6), e 3 segnali di indirizzo per i vari latch (collegati a BADR[1-2] in previsione di un riutilizzo del driver di questo dispositivo con un 8086). Una volta abilitati i jumper sulle uscite, è possibile abilitare o meno un determinato segnale di scrittura in memoria selezionando in scrittura ogni singolo latch del dispositivo: dal momento che questo dispositivo non dispone di un segnale di CS, ma di un segnale di ENABLE* all'atto del quale il segnale D in ingresso viene scritto nel latch selezionato dai segnali A0 A1 A2, è necessario creare un segnale adatto tramite una PAL (foglio 2, A7) le uscite sono messe in OR, negate, con i segnali di MEMWR provenienti dal 8284, e i segnali 8 PRWR risultanti sono poi indirizzati alle memorie. Si tratta comunque di un tipo di protezione atto ad evitare scritture accidentali in memoria, che possono essere dovute a malfunzionamenti, interferenze, o errori nel programma (processore che “perde il passo”); va notato che nessuna protezione può essere infallibile: questo circuito protegge sì la memoria da scritture accidentali, ma nel caso si abbia un malfunzionamento del processore dopo che ha sbloccato questo “lucchetto” verso la memoria, oppure in caso di rottura di un OR che genera una uscita fissa a 0 (“stuck zero”) abilitando sempre la scrittura, ciò non è più garantito. Va notata la particolarità dell'uscita O7: essa non definisce la protezione di nessun chip di memoria, bensì permette di mascherare l'NMI: il meccanismo è analogo a quello appena descritto per le memorie. All'avvio del sistema, essendo il segnale di BRESET* attivo, il latch avranno tutti quanti uscita a zero, disabilitando di fatto tutte le scritture in memoria ma anche gli interrupt: l'idea è di avere più protezione durante l'avvio per poi disabilitare i blocchi di scrittura appena possibile, specialmente per quanto riguarda gli NMI. I diversi circuiti di protezione delle memorie hanno lo svantaggio di rallentare i tempi di accesso alle memorie stesse: sarebbe un problema soltanto con sistemi particolarmente veloci, mentre in questo caso abbiamo un periodo di clock di 200ns e ritardi aggiuntivi nell'ordine di pochi ns, quindi ininfluenti. CIRCUITO DI FAILSAFE Durante la normale esecuzione si possono creare situazioni di blocco in cui il processore rimane in attesa di un segnale che a causa di un malfunzionamento può non arrivare mai, come ad esempio un segnale dei READY: il circuito di failsafe permette di gestire queste situazioni permettendo al sistema di continuare a svolgere i suoi compiti. Per effettuare questo controllo è presente un circuito in I7 (foglio 3): si tratta di un monostabile retriggerabile, ovvero di un circuito che a partire da una variazione impulsiva nell'input commuta la sua uscita più o meno velocemente a seconda dei parametri RC impostati (il funzionamento è molto simile a quello di un trigger di Schmitt: va ricordato che l'uscita dipende da exp(-t/RC)); se per un certo periodo di tempo, dipendente appunto dai parametri RC, non c'è nessun'altra variazione in input, il monostabile commuta di nuovo l'uscita, mentre in presenza di altri impulsi, continua a mantenere il valore in output precedente (può essere pensato anche come un integratore, in quando risponde con un livello in uscita ad un fronte in ingresso). Mettendo in ingresso al circuito il segnale ALE, non facciamo altro che assicurarci che il processore periodicamente effettui dei cicli di indirizzamento: se il sistema capita in una situazione di blocco è molto probabile che il processore non emani più indirizzi e quindi che non attivi più tale segnale: in questo caso allora il circuito di failsafe commuterà la sua uscita. In particolare, utilizzando l'uscita negata del circuito viene generato un segnale FSAFE che rimane a 0 finché in ingresso si ha una successione di segnali ALE (sia da processore, che da DMA): tale segnale va in OR nel secondo ingresso del 8284, I segnali di ALE entrano nell'OR generando quindi un ready e sbloccando il processore, ed inoltre può essere utilizzato anche per generare un NMI (tramite jumper, vedi foglio 4). 9 Questo sistema non ci mette al riparo di tutti i possibili malfunzionamenti: se infatti ci fosse per esempio un guasto nel circuito che genera il segnale di ready e tale segnale non venisse più generato, al successivo ciclo di indirizzamento il sistema si ritroverebbe nuovamente nella situazione di blocco, in un loop infinito: l'unica scelta che rimane in questo caso è quella di forzare un reboot tramite un altro circuito, detto di watchdog. Il circuito di failsafe viene attivato da un comando hardware, ovvero il segnale ALE, mentre il watchdog, come si vedrà in seguito, da un comando dato via software; da notare che anche in questo caso il vincolo di avere dei segnali di ALE abbastanza frequenti impone di programmare il dma controller in single transfer mode (stessa considerazione della generazione del READY). RICONOSCIMENTO CALI DI TENSIONE Il circuito ICL8212 in posizione A9 (foglio 3) ha la funzione di rilevare quando la tensione di alimentazione scende sotto la soglia di funzionamento, fornendo un segnale che permette al sistema di evitare malfunzionamenti come scritture non volute in memoria: oggigiorno tali circuiti sono integrati a tecnologia CMOS, per il minor consumo di corrente, mentre in questa scheda è un circuito analogico. Innanzitutto si tratta di un circuito batterizzato, quindi il suo funzionamento è garantito anche quando l'alimentazione è bassa; è un circuito con isteresi, ovvero la sua uscita non dipende in modo combinatorio dall'ingresso, ma dalla sua variazione: ai due ingressi THRS (threshold) e HYST (hysteresis) è posto un partitore fatto da resistenze di precisione (1%) che a partire dalla tensione di alimentazione forniscono rispettivamente la soglia che deve essere superata, e di quanto è necessario Generazione segnale LOW5V* superare la soglia affinché l'uscita sia effettivamente attivata. L'uscita è di tipo open collector (o “esce con un transistore non polarizzato”), e va notato che la resistenza di pull up non è collegata alla tensione di alimentazione bensì alla tensione di batteria. Considerando che la soglia è 4.8V e che l'isteresi è 300mV, il segnale LOW5V* si attiva quando la tensione di alimentazione scende sotto i 4.5V, mentre si disattiva solo quando la tensione supera i 5.1V, influenzando il segnale di RESET: utilizzando l'isteresi al posto della sola soglia per determinare quando la tensione è bassa si evitano i ripple, ovvero che il circuito commuti di continuo al fronte di piccoli cambiamenti della tensione nell'intorno del valore di soglia. Per vedere come il segnale LOW5V* influenzi il reset (o meglio l'autoreset) e la protezione dei chip select, è sufficiente esaminare il circuito nel foglio 4, posizione B8 (si tratta di un monostabile non retriggerabile): il segnale LOW5V* entra in un NAND a 3 ingressi insieme ad un segnale di reset proveniente dal watchdog e da un reset esterno: da qui a sua volta finisce in un altro NAND e in due ingressi trigger (uno che rileva gli impulsi positivi, l'altro i negativi). La funzione di tale monostabile è quella di generare in uscita un segnale a livello appena riconosce in ingresso un fronte di uno dei tre possibile segnali di reset, in modo da essere sicuri che venga generato un reset abbastanza lungo da essere riconosciuto dal sistema (in caso contrario, un segnale di reset troppo breve rischierebbe di non essere percepito. Attraverso l'ultimo NAND si genera il segnale di reset RESIN* che viene indirizzato al 8284: esso si attiva subito all'attivazione di LOW5V* (o uno degli altri due): essendo inoltre stato sbloccato il 10 monostabile, esso porta entrambe le sue uscite a 0: ciò implica che agli ingressi di questo NAND avremo quindi sempre almeno due zeri e quindi un segnale di reset sempre attivo. Segnali MPRO LOW5V* influenza direttamente i segnali MPRO e MPRO*, passando tramite il NAND in A9 (considerando il jumper scollegato, avendo un ingresso sempre ad 1 funge da invertitore): è chiaro quindi che la protezione della memoria viene immediatamente attivata quando la tensione di alimentazione scende sotto la soglia di funzionamento, senza i ritardi della generazione del segnale di reset. BATTERIA Il circuito di batteria si trova in posizione B7 (foglio 3): esso è formato da una batteria da 36mAh più due transistor PNP che servono per commutare tra le due alimentazioni: il segnale 5BU è normalmente connesso ad alimentazione (tramite T2), ma quando questa scende sotto una determinata soglia, esso viene collegato alla batteria (tramite T1), garantendo alimentazione a tutti i dispositivi connessi ad esso; i tratteggi indicano le connessioni tra i jumper. I due transistor sono in base comune: la batteria è collegata alla resistenza R21 tramite un jumper, inoltre sono collegati anche i jumper 183-184 Circuito di batteria (mette in comunicazione il collettore di T1 con il segnale 5BU). Supponendo che ci sia l'alimentazione, il transistor T2 ha una polarizzazione diretta tra emettitore e 11 base (emettitore è a 5V, mentre base è collegata tramite a R21 ad una tensione di 3.6V): la corrente di base è quindi (5V-Veb-3.6V)/R21, ovvero una corrente uscente (circa 5mA): T2 è quindi acceso, e R21 è dimensionata in modo che il transistor sia in saturazione durante il normale funzionamento (quindi c'è una caduta di circa 0.2V tra emettitore e collettore): il dimensionamento è effettuato sommando i carichi di tutti i componenti connessi a +5BU, ricavando quindi la corrente di collettore e da qui la corrente di base necessaria dividendo per Hfe (ovvero beta), facendo però attenzione a non ottenere una corrente troppo grande in ingresso alla batteria: una volta che sappiamo la corrente di base, possiamo dimensionare correttamente la resistenza R21. I condensatori elettrolitici e ceramici (in ordine da sinistra a destra) posti verso massa servono per stabilizzare le tensioni, in particolare fungono rispettivamente da passa-alto e passa-basso. Mentre T2 sta conducendo in saturazione, T1 ha il collettore più positivo dell'emettitore (rispettivamente 5V-Vec, 3.6V), e quindi essendo polarizzato in modo inverso è interdetto. Mano a mano che la tensione Vcc scende, scende anche la tensione sul collettore di T1: quando T2 sta per spegnersi (con Vcc intorno ai 4.3V), il calo di tensione sul collettore di T1 fa si che il suo emettitore si venga a trovare ad una tensione superiore al collettore, e che quindi si accenda; anche in questo caso la resistenza di base R18 è dimensionata per fare in modo che T1 sia in saturazione, e che quindi porti su +5BU la tensione della batteria a meno della caduta di tensione Vec (0.2V dal momento che siamo in saturazione): la differenza rispetto a T1 è che il carico è minore (o meglio, i componenti sono gli stessi però lavoreranno con una tensione e una corrente inferiori), la corrente di base necessaria risulterà più bassa, e quindi R18 sarà più grande di R21. I jumper presenti nel circuito hanno sostanzialmente due funzioni: uno ha il compito di collegare il segnale +5BU direttamente a Vcc in caso non si voglia utilizzare la batteria, mentre il secondo permette di scollegare la batteria dai due transistor, per evitare che si scarichi durante eventuali lunghi periodi di stoccaggio. INTERFACCIA PARALLELA L'8255 necessario per le trasmissioni parallele si trova in posizione B2 (foglio 3): ci sono alcune piccole particolarità sia per quanto riguarda la connessione verso il processore, sia per le connessioni verso le porte esterne: i piedini A1 e A0 dell'8255 sono collegati a BADR2 e BADR0 rispettivamente, per far si che con lo stesso software potesse funzionare anche con un'altra ipotetica scheda con 8086 senza modifiche (specialmente per quanto riguarda gli indirizzi). la porta A è collegata ad un 245 (sempre abilitato), e quindi è possibile orientare tramite un jumper: Le porte B e C possono essere collegate tramite zoccoli a circuiti di interfaccia, con identica piedinatura ma funzioni diverse. Le connessioni verso l'esterno si possono trovare nel foglio 5: da notare che molti fili sono messi a massa per evitare accoppiamenti capacitivi tra le diverse piste dei cavi piatti, utilizzati nei connettori La porta C presenta inoltre anche dei jumper per il collegamento agli zoccoli, in quanto in caso di utilizzo della porta A e/o B in modo 1, è necessario utilizzare i bit della porta C per gestire la comunicazione. CIRCUITO DI WATCHDOG Come ulteriore garanzia del corretto funzionamento del sistema, è previsto un circuito di watchdog: sostanzialmente un circuito del genere è formato da un contatore che deve essere resettato ad intervalli regolari: il mancato reset di questo contatore implica un malfunzionamento nel programma che è in esecuzione. Come concetto è molto vicino a quello del circuito di failsafe, ma con due importanti differenze: la 12 prima è che deve essere resettato ad intervalli più lunghi rispetto al failsafe, la seconda è che il reset non avviene via hardware, bensì tramite una subroutine software che il programma deve eseguire ad intervalli periodici, per avere la garanzia che tale programma non stia perdendo il passo di esecuzione. Il circuito che realizza il watchdog è situato in posizione C9 (foglio 4): si tratta di un contatore 4020, al cui ingresso è collegato un segnale proveniente da un 555: si tratta di un astabile configurato per funzionare come oscillatore, con in ingresso un circuito RC anziché un cristallo di quarzo (non è necessario avere un periodo preciso) e al cui segnale di reset è collegato un flip flop, in maniera particolare. Le uscite del contatore non sono completamente utilizzate: solo i due segnali più significativi sono destinati per la generazione in primo luogo di un interrupt (ALERT, O13), e in caso di un errore irrecuperabile di un reset (AUTORES, O14) a fine conteggio: per come è configurato il 555 in ingresso, la fine del conteggio si raggiunge circa ogni 100ms. Il reset del contatore può essere causato da due diversi eventi: in primo luogo si vuole essere sicuro che tale circuito sia disattivato in fase di avviamento del sistema: con il segnale BRESET attivo infatti (attivo in fase di accensione), il flip flop viene resettato e porta la sua uscita Q a 0: tale segnale in ingresso al NAND (va notato che l'altro ingresso è a 1) provoca l'attivazione del reset del contatore, che quindi non è abilitato a contare. Circuito di watchdog Durante il funzionamento invece, il reset viene causato dall'indirizzamento in scrittura del circuito di watchdog: il primo accesso infatti, provoca un fronte prima negativo e poi positivo sul segnale in ingresso al clock del flip flop che porta la sua uscita a 0 abilitando di fatto il conteggio; accessi successivi invece, non cambieranno più lo stato del flip flop, ma agiranno solamente a livello del NAND provocando il reset del contatore. Riassumendo quindi: il contatore è resettato all'avvio tramite l'uscita Q del flip flop, un primo accesso in scrittura sblocca il flip flop abilitando il conteggio, e tutti gli accessi successivi provocano invece il reset del contatore. 13 INTERRUPT I due dispositivi 8259 deputati alla gestione degli interrupt si trovano in posizione A9 (foglio 1): tra le particolarità, va notato che comunicano direttamente con il bus senza passare attraverso i 245 in alto: il motivo di questa scelta va ricercato nella ricerca di una maggiore velocità nella comunicazione degli interrupt type al processore; per evitare conflitti elettrici durante l'indirizzamento di uno dei due 8259, essi sono stati mappati nella parte alta degli indirizzi di IO (A15 = 1): in tal modo è facile influenzare i chip select dei 245, disabilitandoli quando si accede agli 8259. I due dispositivi si trovano connessi in cascata tramite i segnali CAS; si nota che il master è il dispositivo posto più in alto dal fatto che il segnale INTR si dirige verso il processore: va inoltre ricordato che l'INTA* proveniente dal processore, oltre ad entrare nei due 8259, influenza direttamente anche il segnale di READY, abilitandolo senza ritardi. Tutte le possibili fonti di interrupt si possono trovare nel foglio 4: collegando tramite jumper i piedini dei vari segnali a canali di interrupt request (oppure a due possibili segnali di non maskerable interrupt) è possibile stabilire le priorità delle richieste: va notato che i due segnali di non maskerable interrupt possono essere disabilitati tramite un segnale proveniente dal Dettaglio del 8259 master circuito di protezione dei chip select delle ram. Alcuni dei possibili segnali di interrupt sono: • SYSTICK: proveniente dall8288, può servire per comunicare all'8088 il passare del tempo; • DMAINTL: EOP* del dma controller, campionato da un FF poiché breve; • FSAFE: dal circuito di failsafe, normalmente va a NMI; • SBXINT: da periferiche SBX; • INTSL: interrupt da 8259 slave; • PC0 e PC3: interruzioni da porta A e B dell'8255 in modo 1 (sono bit della porta C); Piedini per la selezione degli • MASSA: per non avere fili volanti; interrupt e mascheramento nmi • 8274INT: da porta seriale (non trattata). CONTROLLER DMA Il circuito per la gestione dei cicli DMA si trova in posizione E9 (foglio 1): si tratta di un 8237 i cui dma request sono collegati al controller seriale e ai dispositivi SBX (entrambi non trattati). L'utilizzo del dma controller in maximum mode presenta alcune problematiche aggiuntive per quanto riguarda i segnali di HOLD e HOLDA: è necessario infatti provvedere alla conversione dei segnali RQ/GT* utilizzati dal 8088 in maximum mode, e tale operazione è svolta da una PAL in posizione E5. Il dma controller è calettato sul bus di IO; è però previsto un 245 aggiuntivo per effettuare un bypass diretto tra il bus di memoria e il bus di IO (posizione G6): il collegamento tra i bus memori e I/O non viene effettuato con i 245 già presenti in posizione A3-6 (disabilitati in dma) per velocizzare il passaggio dei segnali, che altrimenti si troverebbero a passare tra due transceiver. 14 A sinistra il bypass tra i bus, a destra il 373 La parte bassa degli indrizzi del dma entra in un 245 in posizione A7, sempre attivo e con la direzione influenzata dal segnale HOLDA*, mentre la parte alta è bufferizzata da un 373 posto in posizione G9: non c'è sfasamento degli indirizzi come nell'8086, quindi il collegamento del dma controller risulta relativamente semplice. Per quanto riguarda l'estensione dell'indirizzo: nel foglio 2 in posizione I7 è presente il circuito 74L5678, formato da 4 latch interni da 4 bit ciascuno che convergono verso la stessa uscita: non possiede un CS, quindi il segnale di scrittura WBANKSEL* è generato dalla pal in posizione G2 (sostanzialmente si tratta di una combinazione di IOWR con il chip select di questo dispositivo), mentre il segnale di lettura corrisponde ad HOLDA* (questo dispositivo deve generare i bit di indirizzo solo in fase di dma): per selezionare il latch da scrivere, si utilizzano i segnali BADR1 e BADR2, mentre per selezionare il latch da leggere, i segnali SELBANK1 e SELBANK2: questi ultimi due segnali sono generati da un codificatore in posizione I3, foglio 4, a partire dai segnali DACK provenienti Estensione indirizzi dal dma controller. FOGLIO 5 Nel quinto foglio sono presenti i connettori verso l'esterno: tali connettori sono per cavi piatti, di facile montatura ma con il difetto della possibile generazione di crossover (accoppiamenti capacitivi?) tra i fili, se sono troppo lunghi. I cavi per le connessioni dati hanno fili a sezione sottile: alta resistenza ma bassa corrente; per le connessioni di alimentazione sono necessari cavi a sezione più grossa per poter far scorrere una corrente maggiore. FOGLIO 6 Sono presenti molti segnali con resistenze di pull-up: le motivazioni possono essere diverse, come ad esempio nel caso di segnali di pilotaggio come IOWR* e IORD*, per evitare i tristate durante il 15 cambio di master e quindi potenziali scritture o letture indesiderate, oppure per alzare la tensione di uscita di circuiti che non riescono a fornire i 3.5V richiesti in ingresso dai circuiti CMOS per riconoscere un 1 logico. Al centro sono disegnati i componenti inseriti nel progetto ma non effettivamente utilizzati: dovuti anche all'ottimizzazione non del numero dei componenti ma del numero dei collegamenti, in quanto in certi casi è più conveniente istanziare più componenti e lasciarne utilizzate alcune parti piuttosto che utilizzarne meno e tracciare collegamenti complessi. VARIE In ogni cartiglio in basso a destra sono indicati: codice, revisione, progettista, numero di foglio ecc Numerazione dei componenti, in fila da sinistra a destra per indicare la posizione dei componenti sulla scheda: IC sta per Integrated Circuit, R per Resistenza, C per Condensatore ecc... seguito ovviamente da un numero. Montaggio a piedini passanti, e multistrato: difatti a causa delle leggi di Lenz, se i fili sono troppo vicini subiscono l'effetto della induzione magnetica, causando possibili variazioni della massa di certi segnali; ciò implica che che un 1 venga percepito come 0 o viceversa; inoltre con fili lunghi attraversato da segnali che commutano velocemente, si possono creare accoppiamenti capacitivi tra fili vicini. Con il montaggio multistrato e alternando piani di massa, di alimentazione e di passaggio dati, questi problemi vengono risolti. L'operazione di sbroglio avviene prima in modo automatico tramite strumenti appositi, poi avviene una correzione manuale. Sulla scheda sono i condensatori sono di colore giallo, servono per ridurre la sensibilità al rumore: • quelli più grandi sono condensatori elettrolitici, polarizzati e hanno un verso (se montati al contrario, si bruciano): hanno grande capacità e servono per evitare le derive dei segnali (passa alto); • quelli più piccoli sono condensatori ceramici e fungono da filtro passa basso. Da non confondere con le batterie di resistenze a loro volta gialle che servono da pull up integrati per alcuni segnali. Un jumper comporta una discontinuità in una linea di trasmissione, la quale può provocare riflessioni nel segnale e quindi malfunzionamenti: per questo motivo è meglio evitare di abusarne, specialmente lungo il cammino di segnali critici per il funzionamento del sistema. I cicli di interrupt dell'8088 corrispondono a cicli di IO (S2* basso). Il circuito in posizione F2 nel foglio 1 non è nient'altro che un una batteria di 8 buffer invertenti (come un 244, ma con le uscite negate): viene utilizzato sia per ottenere segnali invertiti, sia come amplificatore: basta guardare il segnale di RESET che entra, esce con BRESET* che rientra a sua volta. Nella figura (schemi a e b) sono mostrate le due più comuni configurazioni circuitali degli stadi di uscita tipiche di molte famiglie di circuiti logici. Come si vede la "open collector" presenta l'uscita sul collettore del transistor lasciato aperto. Ovviamente per utilizzare tale uscita occorre collegare una resistenza esterna (detta di "pull-up"); cosa che non è necessaria per gli stadi "totem pole". 16 Gli stadi di uscita di questo tipo vengono utilizzati in tutte le occasioni in cui sia opportuno l'uso della resistenza esterna. A titolo di esempio nello schema c) viene mostrato il classico collegamento di tipo "wired-OR" in cui due o più stadi di uscita "open collector" vengono connessi alla stessa resistenza di pull-up. In tal modo si realizza una funzione di tipo "OR" 1 fra le uscite collegate fra loro, senza la necessità di aggiungere una porta OR. 17