Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ricerca personalizzata

Retrocomputing : Interfacciamento con bus ISA 8 bit

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Retrocomputing : Interfacciamento con bus ISA 8 bit

Messaggioda Foto UtenteDarwinNE » 20 nov 2017, 14:46

Ciao a tutti,
per diletto sto cercando di mettere a punto un adattatore che permette di collegare delle schede ISA 8 bit su un Olivetti M20. Io sono molto più a mio agio con l'elettronica analogica ed è l'occasione di imparare qualcosa con un circuitino digitale assemblato con le vecchie porte logiche TTL.

Ci sono un po' di segnali da sistemare perché l'M20 è basato sullo Z8001, molto diverso dall'8088 del PC originale IBM che ha dato origine al bus ISA. E' un progetto che ho iniziato molti anni fa con un amico tedesco (ottimo softwarista) e che ho messo da parte perché non sembrava funzionare in maniera perfetta. Avevo anche scritto una paginetta qui:

http://www.z80ne.com/m20/index.php?argu ... sa2m20.inc

anche se mi sono reso conto che ci sono dei bug anche nell'accesso I/O. Rispetto alla versione mostrata nella pagina sopra, ho fatto di recente qualche correzione (una importante sull'accesso memoria e, appunto, diverse rispetto all'accesso I/O, se è il caso, ne parlerò).

Adesso sto cercando di far funzionare l'accesso I/O che funziona bene in certi momenti e molto meno bene in altri. Ecco una descrizione sommaria dell'accesso I/O:

http://hamblen.ece.gatech.edu/489X/ISA.htm

che per comodità riproduco qui:

Codice: Seleziona tutto
8-Bit I/O Bus Cycles

             ________
BALE      __|        |_________________________________________
          _  ______________________________________________  __
SA(15:0)  _><______________________________________________><__
-SBHE
          ______________                                _______
-IOR/W                  |______________________________|
                                                _____________
SD(7:0)   -------------------------------------<_____________>-
(READ)
                           __________________________________
SD(7:0)   ----------------<__________________________________>-
(WRITE)
          __________________ _ _ _ _ _ _ _ _ _ _ _ _  _________
I/OCHRDY                    |________________________|



Qui sono riuscito a pescare con l'analizzatore logico un caso in cui c'è un comportamento strano che non capisco bene:

20171117_224435.jpg


In pratica, la linea *WAIT dovrebbe essere messa giù dalla scheda con cui sto dialogando (una 3Com Etherlink II) subito dopo che BALE ha un fronte discendente (e quindi il bus indirizzi è valido) e la linea *IOR va giù per indicare che si vuole fare una lettura sulla scheda. Se ho capito bene, il segnale *WAIT dovrebbe dire "ho ricevuto l'indirizzo e sto pensando," permettendo di allungare un po' tutto il processo.

Quello che non mi torna è che ci sono dei brutti impulsi sulla linea *WAIT. Per un momento, ho pensato che fosse perché la scheda si aspetta una resistenza di pull-up, ma anche mettendola le cose non cambiano molto.

Nell'esempio di cui sopra, la lettura va comunque a buon fine, ma ho degli esempi in cui ci sono parecchie transizioni sul bus dati e qualche bit viene sballato quando viene letto. Qui ho un esempio di una transizione proprio brutta brutta:

20171117_231406.jpg


Qui non solo la linea *WAIT fa diversi impulsi, ci sono anche diverse transizioni sul bus dati molto vicine al momento in cui *IOR risale e quindi il dato viene letto.

Chiaramente c'è qualcosa che non va e che non ho capito. La maggior parte delle descrizioni del bus ISA sembra concentrarsi sul punto di vista delle schede e non quello di chi i segnali del bus li deve generare e gestire... Attualmente avrei due ipotesi:

- Quella che attualmente mi sembra più probabile è che non ho capito bene come aggiungere dei "wait states" che debbono essere presenti durante gli accessi I/O. Attualmente, il mio bus Z8001 lavora a 4 MHz e pensavo fosse abbastanza lento, ma forse non lo è abbastanza e/o la linea *WAIT non viene messa giù per abbastanza tempo perché lo Z8001 si accorga che deve posticipare la lettura. Bisognerebbe quindi utilizzare manualmente *WAIT per forzare il processore ad attendere qualche ciclo di clock. Una cosa che non ho fatto è di aggiungere sempre dei wait states e non solo aspettarmi che *WAIT sia tenuta a livello basso.

- Per il momento i segnali del bus dati non sono bufferizzati e finiscono su un cavo flat lungo una 40ina di centimetri. Secondo il manuale hardware dell'Olivetti, quelle uscite sono parecchio "robustine" e non dovrebbe essere un problema (perlomeno non sembra esserlo per il bus indirizzi che rimane corretto).

Qualcuno qui ha esperienza di queste cose e può dirmi cosa ne pensa?
Follow FidoCadJ development on Twitter: https://twitter.com/davbucci
Avatar utente
Foto UtenteDarwinNE
23,9k 5 11 13
G.Master EY
G.Master EY
 
Messaggi: 3335
Iscritto il: 18 apr 2010, 8:32
Località: Grenoble - France

4
voti

[2] Re: Retrocomputing : Interfacciamento con bus ISA 8 bit

Messaggioda Foto Utenteboiler » 20 nov 2017, 15:45

Da cosa viene generato il segnale Wait? Dal secondo schema sulla tua pagina sembra venire dall'M80 ma non essere utilizzato da nessuna parte (o forse sono rincitrullito io :mrgreen: ).

Ad ogni modo quelli sembrano degli hazard.
Sono artefatti generati dal cambiamento di stato degli ingressi di una porta logica (o un pezzo di circuito) alla sua uscita quando i propagation delays non sono bilanciati.

L'esempio piú semplice è questo circuito:

Evidentemente l'uscita della porta AND sarà sempre 0.

In teoria...
Se lo analizziamo un attimo piú in dettaglio però...

Il propagation delay dell'inverter non nullo causa un ritardo nella commutazione di una delle entrate della porta AND. Entrate che per un breve periodo di trovano tutte e due a 1, generando un glitch all'uscita.

Se l'interfaccia è sincrona (accompagnata da un clock che definisce il momento in cui fare il sampling della linea) il problema non esiste: il clock viene scelto in modo che tutti i glitch causati dal cambiamento di stato del fianco di clock n si estinguano entro il fianco di clock n+1.

Se l'interfaccia è asincrona, la logica va sviluppata in modo da essere hazard-free. E questo diventa un pain-in-the... armpit non appena la logica è leggermente complessa.

Ti faccio un esempio: tu vuoi realizzare la funzione
Codice: Seleziona tutto
A   B   C   |   Y
-----------------
0   0   0   |   0
0   0   1   |   0
0   1   0   |   1
0   1   1   |   0
1   0   0   |   0
1   0   1   |   1
1   1   0   |   1
1   1   1   |   1


Ne disegnamo il diagramma di Karnaugh:


Risulta immediata la seguente soluzione:


La cui equazione è
Y = B \overline{C} + AC
che in hardware diventa


Se la implementiamo così però c'è un problema.
Quando passiamo da (A,B,C) = (1,1,0) a (1,1,1) abbiamo un glitch. Questo succede sempre quando nel diagramma di Karnaugh si passa da un gruppo all'altro senza che questi siano collegati.

La soluzione è collegare i due gruppi:


L'equazione diventa così
Y = B \overline{C} + AC + AB
che introduce un elemento di ridondanza (che evidentemente va aggiunto anche in hardware).

Ora, quando abbiamo la nostra transizione che tiene costanti a 1 A e B, ma fa commutare C, il terzo elemento dell'equazione fa da ancora e elimina l'hazard: l'uscita è glitch-free.

Questo era un banale circuitino a 3 ingressi. La complessità sale però esponenzialmente con il numero di ingressi. In pratica un lavoro così non lo si fa mai a mano. Si lascia lavorare il compiler VHDL :mrgreen:

Ci tieni per interesse personale a usare logica discreta o potremmo metterci una piccola CPLD? ;-)

Saluti Boiler
Avatar utente
Foto Utenteboiler
12,4k 4 6 13
G.Master EY
G.Master EY
 
Messaggi: 2073
Iscritto il: 9 nov 2011, 11:27

0
voti

[3] Re: Retrocomputing : Interfacciamento con bus ISA 8 bit

Messaggioda Foto UtenteDarwinNE » 20 nov 2017, 17:49

Grazie Foto Utenteboiler :ok: :ok: :ok:

In realtà, non ti posso rispondere, la linea *WAIT viene generata dalla scheda ISA, la 3Com Etherlink II. Io per il momento la prendo e la trasferisco direttamente sul bus M20 che ha una linea che mi sembrava funzionare nella stessa maniera. Vedi qui la descrizione data nell'hardware reference manual dell'M20:

m20_bus.png


Forse il segnale *WAIT generato dalla scheda ISA (nel suo gergo viene chiamato I/O CH RDY) non capita al momento giusto (qui si capisce che viene osservato dallo Z8001 nel momento in cui il clock scende) e potrei allungarlo per qualche ciclo di clock.

Un'ipotesi che avevo a riguardo dei brutti impulsi era che forse la linea I/O CH RDY (che io chiamo *WAIT sul lato M20) è forse pilotata da un open collector e pertanto si aspetta di avere una resistenza di pull up. In assenza di questa, sull'M20 si trova su un ingresso che naturalmente "galleggia" a livello logico 1, mettendoci però un po' di tempo e generando segnali spurii. Però non so se questo accada oppure no.

Per rispondere alla tua domanda, non mi dispiacerebbe un giorno o l'altro giocare con una CPLD, ma non riesco a trovare strumenti di sviluppo facili da usare che girino su MacOSX. Anni fa, comunque, avevo fatto una piccola simulazione con Quartus di una parte di quel circuito, ma rispetto ad allora oggi non ho una macchina virtuale Windows a mia disposizione. Poi ho un prototipino cablato su millefori fra le mani, mi diverte andare giù di saldatore :-)
Follow FidoCadJ development on Twitter: https://twitter.com/davbucci
Avatar utente
Foto UtenteDarwinNE
23,9k 5 11 13
G.Master EY
G.Master EY
 
Messaggi: 3335
Iscritto il: 18 apr 2010, 8:32
Località: Grenoble - France

1
voti

[4] Re: Retrocomputing : Interfacciamento con bus ISA 8 bit

Messaggioda Foto Utentespeedyant » 20 nov 2017, 18:55

Se poi servissero "pezzi" di m20 e schede isa o PC classe xt, qualcosa ho ancora.
Son quello delle domande strane!
Avatar utente
Foto Utentespeedyant
2.786 3 5 8
Master
Master
 
Messaggi: 2013
Iscritto il: 9 lug 2013, 17:29
Località: Torino

1
voti

[5] Re: Retrocomputing : Interfacciamento con bus ISA 8 bit

Messaggioda Foto Utenteboiler » 20 nov 2017, 21:00

Beh, stando a quel diagramma, il segnale wait è sempre don't care (area tratteggiata) tranne durante il terzo falling clock edge. In questo caso il segnale può fare quello che vuole, ma deve prendere il valore "vero" poco prima (visto che la logica è vetusta, direi una decina di ns) del clock attivo.

Se l'uscita della scheda segue questa specifica, tutto funziona.

Boiler
Avatar utente
Foto Utenteboiler
12,4k 4 6 13
G.Master EY
G.Master EY
 
Messaggi: 2073
Iscritto il: 9 nov 2011, 11:27

0
voti

[6] Re: Retrocomputing : Interfacciamento con bus ISA 8 bit

Messaggioda Foto UtenteDarwinNE » 21 nov 2017, 6:38

Foto Utenteboiler, grazie, aggiungerò il clock dell'M20 a quanto mostrato dall'analizzatore logico e nei prossimi giorni controllerò cosa succede.

Foto Utentespeedyant pezzi di M20??? Cosa in particolare? In effetti, sarei abbastanza interessato :cool:
E' una macchina particolare, in Italia era abbastanza utilizzata, ho inoltre contatti con diversi appassionati in Germania ed in Austria, ma per il resto è abbastanza rara e piuttosto ricercata.
Follow FidoCadJ development on Twitter: https://twitter.com/davbucci
Avatar utente
Foto UtenteDarwinNE
23,9k 5 11 13
G.Master EY
G.Master EY
 
Messaggi: 3335
Iscritto il: 18 apr 2010, 8:32
Località: Grenoble - France

0
voti

[7] Re: Retrocomputing : Interfacciamento con bus ISA 8 bit

Messaggioda Foto Utentespeedyant » 21 nov 2017, 10:58

Avendo recuperato anni fa due m20, uno funzionante, l'altro "meno", pare sia stato smontato "quello sbagliato".
Sia chiaro il concetto smontato e non demolito o smaltito.
Son quello delle domande strane!
Avatar utente
Foto Utentespeedyant
2.786 3 5 8
Master
Master
 
Messaggi: 2013
Iscritto il: 9 lug 2013, 17:29
Località: Torino

0
voti

[8] Re: Retrocomputing : Interfacciamento con bus ISA 8 bit

Messaggioda Foto UtenteDarwinNE » 22 nov 2017, 17:13

boiler ha scritto:Beh, stando a quel diagramma, il segnale wait è sempre don't care (area tratteggiata) tranne durante il terzo falling clock edge. In questo caso il segnale può fare quello che vuole, ma deve prendere il valore "vero" poco prima (visto che la logica è vetusta, direi una decina di ns) del clock attivo.


Foto Utenteboiler, credo che tu abbia visto giusto!

20171121_215125.jpg


Il segnale *WAIT (o I/O CH RDY) generato dalla scheda ISA arriva troppo presto rispetto a quanto richiesto dal bus Z8001/M20. Ho piazzato il primo cursore (linea tratteggiata verticale) all'inizio del primo ciclo di clock ed il segondo cursore (linea tratto-punto) là dove il processore campiona la linea *WAIT e si vede che è già ritornata a livello alto. Nessun ritardo pertanto viene aggiunto!

Ho "allungato" la durata del *WAIT (come? baahh, preferisco non dirlo! Ah bon, insistete? Con un 74123... coff... coff... giuro, non lo faccio più! :oops: ), ma ho fatto un po' tardi e sono andato a letto. Comunque, mi è parso che in questo modo il ritardo venisse effettivamente aggiunto, ma non venisse comunque risolto il problema della lettura: rimangono delle transizioni "strane" sulla linea dei dati. Tra qualche giorno verificherò meglio.

Poi pensandoci sopra, mi sono detto: ma qui faccio una lettura. Il bus dati dell'M20 è abbastanza robusto, ma è il caso anche per l'uscita della schedine ISA, in fondo è lei che sta pilotando il bus dati in quel momento? Forse è meglio aggiungere un buffer 74LS245 o similare?
Follow FidoCadJ development on Twitter: https://twitter.com/davbucci
Avatar utente
Foto UtenteDarwinNE
23,9k 5 11 13
G.Master EY
G.Master EY
 
Messaggi: 3335
Iscritto il: 18 apr 2010, 8:32
Località: Grenoble - France

0
voti

[9] Re: Retrocomputing : Interfacciamento con bus ISA 8 bit

Messaggioda Foto Utenteluxinterior » 22 nov 2017, 18:33

Non so se può essere d'aiuto
Philips AN454
Meglio che non dica chi ero e cosa facevo quando per la prima volta ho sfogliato quelle pagine caxxo come passa il tempo. Spero tu possa trovare qualche informazione utile

Corretto il link in modo da scaricare direttamente il pdf, se interessa - Piercarlo
Avatar utente
Foto Utenteluxinterior
1.808 1 4 8
Expert EY
Expert EY
 
Messaggi: 900
Iscritto il: 6 gen 2016, 16:48


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti