Hallo Idek,
ich kann da nichts zu sagen aber lies mal die SMC_TT Dokumente sowie die Quellen der MiNT VME Bus Netzwerkkarten ...
Ethernet fÅr TT
Zugriffe
Wie in der Schaltung zu sehen ist, wurden die Daten und Adressleitungen der beiden Bussysteme
einfach miteinander verbunden.
Im Schaltplan sind die Pull Up WiderstÑnde von 1.2kOhm von alle Adressen und
Datenleitungen, sowie der MEM und IO Leitungen nicht eingezeichnet. Diese mÅssen ganz
dicht an den ISA Pins angeschlossen werden.
Zwei GAL's sorgen fÅr eine Anpassung des Timings von Zugriffen des VME Busses auf den ISA
Bus. Dabei werden drei Arten von Zugriffen unterschieden:
1. 16 Bit Memoryzugriff. Hier erfolgt ein wortweiser Zugriff vom VME Bus auf high und low Byte
gleichzeitig. Auch die LAN Karte beherrscht diesen Zugriff. Dabei muû die Leitung /SBHE
aktiviert werden, wÑhrend der Lese/Schreibzugriff erfolgt. Der Zugriff erfolg auf den Adressen
$FE000000 bis $FE100000. Wichtig: Da der PC ein little Endian Maschine ist, mÅssen die
Datenleitungen des low und high Byte vertauscht werden!!.
2. 8 Bit IO Zugriff gerade Adressen. Dieser Zugriff greift auf die geraden Adressen der ISA Karte
zu. Diese Adressen werden beim ISA Bus Åber D0-D7 Åbertragen. /SBHE wird hier nicht
aktiviert, da der Transfer nur Åber den PC Slot lÑuft. A0 ist hier 0
3. 8 Bit IO Zugriff ungerade Adressen. Hier soll auf die ungeraden Adressen der ISA Karte
zugegriffen werden. Diese werden bei dieser aber auch Åber D0-D7 transferiert. Der 68000
erwartet diese aber auf seinen D0-D7 die mit D8-D15 des ISA Bus verbunden sind. Um hier
keinen Bustreiber verwenden zu mÅssen, wurde dieser Zugriff ebenfalls auf eine gerade
68000er Adresse gelegt. Nur die Leitung A0 erhÑlt hier einen anderen Wert. Dieser wird aus
A20 des VME Bus abgeleitet. Somit zerfÑllt der IO Adressbereich in zwei getrennte Bereiche
fÅr gerade und ungerade Bytes.
Timing
Das VME Timing ist grundsÑtzlich asynchron, und lÑût sich somit recht einfach an das andere
Timing anpassen. Dabei wird der VME Buszyklus solange verlÑngert, bis die Karte die Daten
bereitsgestellt bzw abgeholt hat. Dieser Vorgang wird Åber die Verzîgerung von /DTACK mit Hilfe
des Schieberegisters IC1 (74164) durchgefÅhrt. Das Schieberegister wird mit jedem Zyklus (/DS
und /AS werden aktiviert) Åber /T_ST freigegeben, und schiebt dann eine 1 hindurch. Diese
erscheint dann jeweils nach einem Clock Impuls einen Ausgang weiter. Nach 4 Impulsen erreicht
sie schlieûlich den Ausgang Q3. dadurch wird DTACK aktiviert, falls die PC Karte nicht mit /RDY
noch etwas Zeit fordert. Der gesamte Vorgang dauert ca. 280ns, wodurch eine Transferrate von ca
6 MB/s erreicht werden kann. Hier zeigt sich, daû die SMC Karte anderen Karten weit Åberlegen ist.
Bei einem Blick in die GAL Gleichungen ist festzustellen, daû die MEM und IO Leitungen des ISA
Bus erst bei T1 aktiviert werden. Das ist notwendig, damit die Adressen lange genug vor dem
Kartenzugriff stabil sind. Hier ist das PC Timing sehr kritisch und vor allem Åberhaupt nicht logisch!
ursprÅnglich hatte ich noch ein BALE Signal aus T1 erzeugt, es hat sich aber gezeigt, daû das
Åberhaupt nicht notwendig ist.
Interrupts
Eine LAN Karte ohne Interrupt ist praktisch wertlos, daher wurde eine eigene Interruptlogik
installiert, die einen Vektorinterrupt auf dem VME Bus auslîst. Das ist notwendig, weil der VME Bus
keinen Autointerrupt unterstÅtzt. Der Vektorgenerator ist hier IC2 (74LS245) dessen EingÑnge fest
auf den Vektor $AA verdrahtet sind. Hier kann auch ein beliebiger anderer freier Vektor gewÑhlt
werden. Auf meinem Prototypen ist hier ein Schalterarray angeordnet.
Die Logik, die zu Erkennung und BestÑtigung eines Interruptes notwendig ist befindet sich im Gal
VME_PC17. Dieses GAL benîtigt die Adressen A1-A3, da die CPU hierÅber bekanntgibt welcher
Interruptlevel bestÑtigt werden soll. Das Interface verwendet Interruptlevel 4.
Aus Faulheit wurde die Interruptkette (IACKIN/IACKOUT) nicht implementiert. Daher darf keine
andere VME Buskarte den Interrupt 4 verwenden.
Die Interruptquelle ist der Interrupt 3 (IRQ3) der ISA Karte. Diese Leitung ist high aktiv, und benîtigt
daher einen pull-down Widerstand!
GAL VME_PC16
*IDENTIFICATION
VME_PC;
*TYPE
GAL20V8;
*PINS
/AS = 23,
/WR = 2,
/DS0 = 3,
/DS1 = 4,
A21 = 5,
A22 = 6,
A23 = 7, T1 = 8,
T2 = 9,
/WAIT = 10,
A20 = 11,
/DTACK.T = 15,
T_START.T = 18,
/SBHE.T = 17,
A0.T = 16,
/MWR.T = 22,
/MRD.T = 21,
/IOW.T = 20,
/IOR.T = 19;
*BOOLEAN-EQUATIONS
DTACK = /A22 & /A23 & (DS1 + DS0) & AS & T2 & /WAIT;
T_START = /A22 & /A23 & AS & (DS0 + DS1);
IOW = A21 & /A22 & /A23 & AS & DS1 & WR & T1;
IOR = A21 & /A22 & /A23 & AS & DS1 & /WR & T1;
MWR = /A21 & /A22 & /A23 & AS & (DS0 + DS1) & WR & T1;
MRD = /A21 & /A22 & /A23 & AS & (DS0 + DS1) & /WR & T1;
SBHE = /A21 & /A22 & /A23 & AS & (DS0 & DS1 + DS0 & /DS1);
A0 = /A21 & /A22 & /A23 & AS & /DS1 & DS0 + A21 & /A22 & /A23 & AS & A20;
*END
GAL VME_PC17
*IDENTIFICATION
VME_PC1;
*TYPE
GAL16V8;
*PINS
/RESET = 1,
/DS0 = 7,
/IACK = 8,
A1 = 4,
A2 = 5,
A3 = 6,
IRQ3_PC = 9,
/DTACK.T = 12,
/VEKTOR.T = 14,
/IRQ4.T = 13,
RESET_PC.T = 19;
*BOOLEAN-EQUATIONS
DTACK = /A1 & /A2 & A3 & DS0 & IACK;
VEKTOR = /A1 & /A2 & A3 & DS0 & IACK;
IRQ4 = IRQ3_PC;
RESET_PC = RESET;
*END