Wow... das ist keine triviale Aufgabe.
Auf einem schlechten Foto im Internet sehe ich auf der Eclipse einen CPLD(?) von Lattice, wo die Entwickler sicher die State Machine für die Bustransfers realisiert haben. Hat die Eclipse nur mit Grafikkarten funktioniert, oder z.B. auch mit Netzwerkkarten? Dann müsste man nämlich auch noch eine Busarbitrierung einbauen. Für diese Funktion alleine war am Hades schon ein eigener FPGA "INTREG" mit SERROM vorgesehen. Für die Steuerung in "PCIMAIN" hat Fredi ein CPLD verwendet (hilfreich wäre, wenn man das VHDL bzw. Verilog dazu hätte).
Nun zu den Adressen und Datensignalen: Da liegt zuerst die 32bit-Adresse mit dem BusCommand (4bit) (dazu später mehr) am Bus, und danach auf den gleichen Leitungen die 32bit-Daten mit den ByteEnables (4bit). Da sind also für den Transfer schon ein paar Signale beteiligt: FRAME, DEVSEL, IRDY und TRDY, alles über die positive Flanke von CLK getriggert.
Für eine Grafikkarte, die ja nicht als Busmaster agieren sollte, könnte man das Ganze sicher ein wenig abspecken, die Fehlersignale ignorieren (Parity Error usw.), aber man müsste schon ein paar verschiedene Bus Commands unterstützen:
Configuration Read (Command 1010b)
Configuration Write (1011b)
I/O Write (0011b) bzw. Memory Write (0111b) (je nachdem was die Grafikkarte über den Configuration Space mitteilt, also welche Ressourcen sie anfordert).
Um die Konfiguration der Karten hat sich dann das PCI-Bios am Hades gekümmert, obwohl Fredi im TOS schon vorab die Grafikkarte so eingerichtet hat, das man den Bootvorgang von Anfang an sieht. Ob man bei 16bit Datenbus nur jeweils diese 16 bit hintereinander an die Grafikkarte schicken kann, oder immer nur 32bit breit, das müsste man testen, wenn alles andere funktioniert.
Die grundsätzliche Verschaltung der Signale im Hades und im Milan ist in einem Artikel der ST-Computer beschrieben:
https://www.stcarchiv.de/stc1998/04/pci-busIn weiteren Folgeartikeln wurde dann das ganze PCI-Bios auch noch beschrieben...
Im Bild sieht man beispielhaft eine Write Operation, für Config Read und Write kommt dann noch das Signal IDSEL ins Spiel (das kann man wie beim Hades aus den Adressignalen generieren, siehe Artikel)
lg, markus