Riassunto e approfondimenti delle lezioni di Calcolatori LS

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