GAL & 8255


 
Projektseite
zur PROTO3 PCI-Prototypenkarte
 
Für die hier vorgestellten Schaltungen wurde der 10 MHz uPD71055C-10 von NEC verwendet. Die Dekodierung des PCI-Busses erfolgt mit dem KOLTER PCI-Dekoder-Chip und stellt die erforderlichen Signale wie den 8/16-bit Datenbus, IOWR, IORD und weitere Bussignale zur Verfügung. Durch ein offen beschriebenes Dekoder-GAL 22V10 sind mehrere Chip-Select-Signale vordekodiert, die aber nachträglich durch den Anwender mittels Synario verändert werden können. Bei allen, unseren PCI-Karten ist keine fortlaufende Adressierung möglich, da von 32-bit-Datenwörtern immer nur die unteren 16-bit adressiert werden können (A1-Leitung fehlt). Zur Unterscheidung des unteren und oberen Datensegments (D0...D7 und D8...D15) dient üblicherweise die Adressleitung A0, die allerdings beim PCI-Bus-System durch die Signale CSL = chipselect-low und CSH = chipselect-high abgelöst wurden. Die Datenleitungen D16...D31 werden nicht zum User-Interface des PCI-Dekoders weitergeleitet, da hierfür keine Pins mehr am 1032E-Baustein zur Verfügung stehen. In der Praxis liegen somit die Adressen des 8255 (Hardware) "geshiftet" auf folgenden I/O-Adressen:
 
xxx0 = PA xxx4 = PB xxx8 = PC xxxC = Status-Port

Bei dem aktuellen Spezial-Aufbau der PROTO-3 PCI haben wir einen weiteren Trick angewendet, um den 16-bit Bus besser auszunutzen und um quasi zwei 8255 Peripherie-Controller mit einem 16-bit-Word-Zyklus zu schreiben/lesen. Die Bausteine werden jetzt zusätzlich vom Datenbus her unterschieden: Der erste 8255 nutzt die Datenleitungen D0...D7, ein zweiter 8255 ist mit den Datenleitungen D8..D15 verbunden worden. Damit liegen jetzt die Bausteine verschachtelt im Adressaufbau wie in der folgenden Tabelle dargestellt:
 
xxx0 PA (1. 8255)
xxx1 PA (2. 8255)
xxx4 PB (1. 8255)
xxx5 PB (2. 8255)
xxx8 PC (1. 8255)
xxx9 PC (2. 8255)
xxxC Status (1. 8255)
xxxD Status (2. 8255)

Wie man aus der neuen Adressierungsweise erkennen kann, ist es jetzt möglich, mit einem Word-OutPort(xxx0,FFAA)-Befehl beispielsweise direkt auf den PA(1) und PA(2) zu schreiben. Dabei wird der Wert "AA" auf die Datenleitungen D0...D7 geschrieben und in das Register des 1. 8255 Port PA geladen. Gleichzeitig wird aber auch der 2. 8255 PA mit dem Wert "FF" beschrieben, da es sich um einen 16-bit Schreibzyklus handelt. Mit diesem Aufbau haben wir jetzt quasi einen 8255-16Bit-Contoller geschaffen. Das Geheimnis, wie man diese Bausteine mit einem 16-bit word-Befehl adressiert liegt in dem speziellen Signalaufbau des 1032E PCI-Dekoders, der durch den Wegfall der A0 und A1-Leitung aber die beiden CS-Signale CSL und CSH zur Verfügung stellt, die jeweils den Zugriff auf die Datenleitungen D0...D7 und D8...D15 koordinieren. Beide CS-Signale können einzeln (8-bit) oder auch zugleich (16-bit) aktiv sein.

Das CS0-Signal am GAL ist etwa 100ns lang und sieht am Scope wie folgt aus:

Das original Timing des PCI-Dekoders mit nachgeschaltetem Dekodier-GAL
sieht folgendermaßen aus:

Folgende Zeitzusammenhänge konnten bei einem 8-bit write-port
mit einem 200 Ms/s. Logic-Analyzer real ermittelt werden:

t1 = 20 ns ALE
t2 = 30 ns ready for data
t3 = 175 ... 200 ns (data-valid siehe t10)
t4 = 140 ns RW
t5 = 45 ns ready for CS
t6 = 105 ns chip-select low (low byte D0..D7)
t7 = 45 ... 50 ns ready for write
t8 = 100 ... 110 ns chip-select 8255
t9 = 10 ns CSL to chip-select


Hier finden Sie die Projektdateien zu den Dekodier-GALs:

PROTO3GAL.ZIP  22V10 Synario-Projekt für die normale PROTO-3
PROT8255.ZIP  GAL22V10 JED-File für PROTO-3, für einen uPD71055

Neu: Für 2x uPD71055 als 16-bit Controller
GAL28255.ZIP  GAL22V10 Synario-Projekt und JED-File

>> Synario-Projekt Bild <<

Neu: Jetzt mit Adress-Leitung A5
Hier gibt es jetzt auch ein weiteres GAL22V10-Projekt mit ausdekodiertem A5-Adreßsignal auf Pin 14. Die LED-Ansteuerung über das Latch-Register auf Adresse BASE+08h entfällt dafür. Falls Sie das Projekt selber editieren oder erweitern möchten, können Sie sich beim Hersteller Lattice registrieren und den aktuellen Synario PLD-Compiler (jetzt ispLEVER) kostenlos herunterladen.

Wichtige Anmerkung zum GAL22V10-Timing
(Betrifft nur die PROTO-3 Kartendesigns) Da das PCIALE-Signal bei nur ca. 20..25ns liegt, kann es vorkommen, dass die CS-Dekodierung mit einem 25ns-GAL fehlschlägt, wenn sich die Chiptemperatur verändert. Sicherheitshalber sollte man hier einen 10- oder 15ns Typ einsetzen, damit die volle Temperaturbandbreite des PCI-Dekoders genutzt werden kann. Insbesonders bei den PCI-Dekodern, die im Fertigungsprozess A...D hergestellt wurden, können ALE-Zeiten von nur ca. 17...22ns erzeugt werden, die das 25ns-GAL dann nicht mehr korrekt verarbeiten kann. Beim E-Prozess liegt PCIALE bei 25 ns und ist als relativ unkritisch anzusehen. Andere PCI-Karten, die nicht über das 22V10-GAL dekodieren (Beispiel ispLSI1016) sind hiervon nicht betroffen, da diese 80-MHz-Typen ohnehin mit 12,5ns arbeiten.

Programmierung der uPD71055 PIO
Mit dem Befehl : OUT(Statusport, 128 + xxx)  wird das Status-Register des 8255-Portbausteins programmiert. Dieses Register gibt vor, welche der drei E/A-Ports (PA, PB und PC) auf Eingabe oder Ausgabe gestellt werden. Alle Ports können sowohl als Ausgabe- oder Eingabe-Port fungieren. Der Port "PC" kann in zwei Hälften unterteilt werden, sodass 4 bit als Ein- und 4 bit als Ausgabe dienen können. Das Komandowort, dass zum Status-Port des 8255 gesendet wird, muss vor der jeweiligen Nutzung der E/As erfolgen. Das geschriebene Komandowort ist so lange gültig, bis es mit einem anderen Wert überschrieben wird. Es muss aber mindestens ein mal nach dem Einschalten des PCs erfolgen, um den 8255 zu initialisieren. Die Initialisierung des Komandoregisters ist jedoch nach Wegnahme der Spannungsversorgung (PC wird abgeschaltet) wieder gelöscht. Die Zusammenstellung des Komandowortes finden Sie im Anhang der Kartenbeschreibung oder auf unserer Web-Seite unter: http://www.pci-card.com/8255.pdf

Pressetext zur PROTO-3
Informationen zum PCI-Contoller

All files with copyright by ® KOLTER ELECTRONIC and others.
Please read EULA before use this software.


KOLTER ELECTRONIC ist nicht für die Inhalte fremder Seiten verantwortlich.
Es gelten ausschließlich die AGB der Firma KOLTER ELECTRONIC.
Für die Richtigkeit der Angaben wird keine Gewähr übernommen.
Alle Preisangaben sind gewerblich. Das Zahlungsmittel ist EURO.
Alle Rechte vorbehalten. (c) copyright H.Kolter

[ Zur KOLTER ELECTRONIC® Hauptseite ]