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:

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
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
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.