Personal computer/Mapping: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Pizeta (discussione | contributi)
m →‎8284: pin ingresso/uscita
Pizeta (discussione | contributi)
Riga 125:
==== Circuito per la generazione del Ready ====
 
L'8284 in base ai possibili segnali ''ready'' di ingresso deve generare un segnale di ''ready'' con la giusta temporizzazione.
 
Ipotizziamo di poter dividere tutti i dispositivi in bue gruppi che richiedono rispettivamente 2 e 3 stati di wait per completare l'accesso. Per generare i due segnali di ''ready'' ''RDY1'' e ''RDY2'' utilizziamo uno ''shift register'' a n uscite ''Q0, Q1, ..., Qn'' con ingressi il segnale di ''CLK'' e ''AEN''. Lo shift register a partire dal primo clock successivo alla ricezione del segnale ''AEN'' attiva l'uscita ''Q0'', al clock ancora successivo ''Q1'' e così via.
Per il nostro sistema i segnali utili sono ''Q2'' e ''Q3'' che andranno collegati all'8284 come ''RDY1'' e ''RDY2''.
 
La generazione dei segnali di selezione �''AEN1*'' e ''AEN2*'' dipende da quali sono i dispositivi che richiedono 2 piuttosto che 3 stati di wait. Se tutti i dispositivi in memoria richiedono due clock e quelli di I/O 3 allora
RDY1 <- Q2
AEN1* <- IO/M* ; se accedo in memoria IO/M* sarà basso e quindi attiva RDY1 essendo AEN attivo basso
RDY2 <- Q3
AEN2* <- !IO/M*; negazione di IO/M*
Se invece i dispositivi che richiedono 2 stati di wait sono gli indirizzi di memoria mappati nei 512K alti e quelli che richiedono 3 stati di wait sono nei 512K bassi e in I/O allora
RDY1 <- Q2
AEN1* <- IO/M* + !BA19 ; per attivare il RDY1, AEN1 deve valere zero e quindi devo
accedere in memoria (IO/M = 0) e nei 512K alti (BA19 = 1, devo negarlo)
RDY2 <- Q3
AEN2* <- !(IO/M*) * BA19; se accedo in I/O !(IO/M*) vale 0 e quindi seleziono REDY2
se accedo in memoria !(IO/M*) vale 1 ed ho bisogno che BA19 valga 0
 
Supponiamo invece di avere tre gruppi di dispositivi che richiedano rispettivamente 0, 2 e 3 stati di wait, selezionati dai segnali ''SEL1*'', ''SEL2*'' e ''SEL3*'' allora
RDY1 <- Q0
AEN1* <- SEL1*
RDY2 <- (Q2 * !SEL2*) + (Q3 * SEL2*)
;se SEL2* e basso al secondo clock Q2 * !SEL2* è alto quindi RDY1 = Q2
se SEL2* è alto il primo termine vale sempre zero, quindi RDY2 = Q3 (SEL2* = 1)
AEN2* <- SEL2* * SEL3*
[[Categoria:Informatica]][[Categoria:Personal Computer]]