![]() |
Der
PCI Target-Controller
Der PCI-Bus = Peripheral
Component
Interconnect
Der PCI-Bus ist heute ein
relativ, normaler Industriestandard und fester Bestandteil von IBM®-kompatiblen
PC-Systemen, Apple® Macintosh®-PCs und Alpha-Workstations®
von Digital®. Das u.a. von Intel® entwickelte Bus-System ist fast
bis ins Detail normiert, so daß andere Computerhersteller den PCI-Bus
nachbauen bzw. verwenden können. Im Gegensatz zu anderen Bus-Systemen
ist der PCI-Bus anpassungsfähig bei steigenden Anforderungen. Beispielsweise
erkennt das PCI-BIOS jede PCI-Erweiterungskarte und konfiguriert sie selbstständig,
während der Rechner startet.
VID & DID im PCI-Decoder
Der PCI-Decoder-Chip (so
wie wir ihn fertig anbieten) ist mit der Vendor-ID 1001h wie auf unseren
PCI-Karten ausgestattet. Ein Redesign der Vendor-ID kostet einmalig eine
Einrichtungsgebühr: Dies macht aber nur dann einen Sinn, wenn man
sich vorher eine Vendor-ID von der PCISIG®-Group (für jährlich
etwa 3000,- US$) zuteilen lässt. Ansonsten kann man aber auch mit
unserer VID, PCI-Karten herstellen und weitervertreiben. Einen Einfluss
auf die Logik des Decoders hat die VID normalerweise nicht. Sie wird fest
im cPLD-Chip quasi "vorverdrahtet". Natürlich müssen nach
einem Redesign am Chip, alle Prüfungen nochmals durchgeführt
werden, bevor eine Freigabe durch uns erfolgen kann. D.h. es vergehen ca.
2-3 Wochen zusätzliche Testzeit für jede auch noch so kleine
Änderung am bzw. im Chip, da sich die Laufzeiten im PCI-Core nach
einer Compilierung verändern können, die sich aber erst unter
erheblichen Stressbedingungen wie hohe Umgebungstemperatur bzw. tests mit
"nichtkompatiblen Motherboards" aufzeigen lassen.
Daten zum Controller
Bauteil-Daten des
1032E lt. Lattice:
Abkürzungen zum PLD-Core:
PCI / USER - Interface
Bus-Interface-Implemetierung
mit bidiretionalem Bustransfer und Bustreibern, bestehend aus: CLK System
Pin, Adress/Data Pins, CBE u.a. Interface-Control Pins, sowie Error Reporting
Pins.
STM, DEC und CFG-ID
STM steht für die Statemachine,
die über einen internen Adress-Decoder alle Bausteinparameter des
CFG-Register (64 Byte) ausliest und über den 4:1 32-bit Bus-Multiplexer
auf den PCI-Bus zurückschreibt (wenn es beispielsweise das PCI-BIOS
beim Booten des PC anfordert). Das CFG-Register wird i.d.Regel fest vorverdrahtet,
die Produkt-ID-Leitungen ID0..2 wurden für externe ID-Einstellungen
herausgeführt. Es stehen somit insgesamt 8 Device-IDs zur Verfügung.
Die Vendor-ID wird von uns einmalig fest vorgegeben.
UIF und Bus-MUX
Bus-Driver und Turnaround
werden mit den Bus-Transactions für den PCI-Target generiert. Hier
wird das eigentliche User-Interface gebildet. Über den Bus-Multiplexer
werden alle Adressen und Daten in beide Richtungen koordiniert. Alle read/write
Operationen werden über dieses Interface abgearbeitet.
TCB
Dieser Funktionsblock ist
seit Mitte 1999 neu in unserem Chip. Mit dem timing-correction-block
werden vordefinierte Bus-Zyklen generiert und das Data-Valid verlängert,
damit der folgende User-Bus mit zeitunkritischen Bus-Timings arbeiten kann.
Dieser Block wurde notwendig, da verschiedene Motherboards mit unterschiedlichen
Bus-Timings arbeiten und sich leider nicht immer an die PCI-Local-Bus-Spezifikation
der PCISIG halten.
PGM
Programmier-Interface für
den ispLSI-Baustein. Dieser Anschluss ist nur für den Hersteller (Kolter
Electronic) zugängig.
ALE
Adress-Latch-Enable,
schaltet den User-Bus automatisch zwischen Adressen und Datentransfer um.
D0..15 (und A2...A7)
16-bit-Bus Datenleitungen.
Die Daten werden mit ALE und CSL/CSH aktiviert bzw. freigegeben. Bei ALE
= high, werden die Adessleitungen aktiviert.
A2..A7
Adressleitungen zur Dekodierung
von I/O-Bausteinen. Die Leitung A0 entfällt, da diese durch CSL und
CSH vordekodiert werden um 8-bit und 16-bit Bus-Transaktionen zu ermöglichen.
Die Leitung A1 entfällt, da nur die unteren 16-bit von einem 32-bit
Datenwort ausdekodiert werden können. Es können sowohl 8-bit
als auch 16-bit Datenblöcke ausdekodiert und übertragen werden.
RW
Das User-Bus-Signal read/write
dient zur Port-Dekodierung von schreib- / lesezyklen der nachfolgenden
I/O-Bausteine.
RW
= low = es werden Daten geschrieben (write)
RW
= high = es werden Daten gelesen (read)
CSL / CSH
Chip-select-low und chip-select-high
Signal. Bei einem 8-bit Output- oder Input-Befehl werden mit CSL die unteren
8-bit eines 16-bit Datenwortes angesprochen, mit CSH die oberen 8-bit.
Wird ein 16-bit Befehl generiert, werden beide Leitungen aktiv, damit mit
einem Zyklus ein 16-bit Wort geschrieben/gelesen werden kann. Es werden
immer die unteren 16-bit eines 32-bit Datenwortes ausdekodiert.
Ist
CSL = low = dann werden die Datenbits D0...D7 true
Ist
CSH = low = dann werden die Datenbits D8...D15 true
Sind
CSL und CSH = high = dann werden zur Zeit keine Daten geschrieben/gelesen.
Beispiel
Write-Port:
Die
Daten D0...D7 werden korrekt übergeben, wenn die Adressen anstehen
und RW = low und CSL = low ist.
RESET
Diese Leitung setzt den
Baustein in eine vordefinierte Anfangskonfiguration zurück. Der Reset-Eingang
des Bausteins ist direkt mit dem PCI-Bus Reset-Signal verbunden. Es setzt
alle internen Register einschliesslich des Steuerregisters und I/O-Memory-Registers
zurück. Lediglich "hartverdrahtete" Leitungen wie Device-ID-Register
und Vendor-ID-Register bleiben davon unberührt.
Programmierbeispiele:
//
erzeugt einen 8-bit Schreibzyklus auf der I/O-Adresse 6500 hex
outp(0x6500,255);
//
erzeugt einen 8-bit Schreibzyklus auf der I/O-Adresse 6501 hex
outp(0x6501,255);
//
erzeugt einen 16-bit Schreibzyklus auf den I/O-Adressen 6500 und 6501 hex
outw(0x6500,65535);
//
erzeugt einen 16-bit Lesezyklus auf den I/O-Adressen 6500 und 6501 hex
var
a : word;
a
= inpw(0x6500,65535);
PCI und Vendor- / Device-ID
Nur die PCISIG-Group ist
für eine weltweite Eintragung einer Vendor-ID befähigt. Sie vergibt
die jeweilige Vendor-ID (kurz VID genannt) für jeden Hersteller
ein mal. Somit können z.B. Motherboard-Hersteller ihr PCI-BIOS updaten
(z.B. per Flash-EPROM) und eine neue PCI-Karte (Device) kann vom System
schon während des bootens gefunden und zugewiesen werden. Ältere
Motherboards können zwar auch mit der neuen Karte umgehen, jedoch
wird dann die Meldung: "unknown component" oder ähnlich, ausgegeben,
da die BIOS-Interne Vendor-ID-Liste zu alt bzw. unvollständig ist.
Zudem werden die Devices in sogenannten device-indentifications
unterteilt, damit sie vom System besser unterschieden werden können.
Merkmal ist hierfür der configuration-header, der dem PCI-BIOS
bzw. dem Motherboard mitteilt, um was es sich für eine Karte handelt.
Normalerweise zeigt das BIOS beim Systemstart alle PCI-Komponenten namentlich an. Es kann aber auch vorkommen, daß ein Eintrag lediglich die Bezeichnung Unknown PCI Device enthält. PCI ansich, definiert einen Konfigurationsbereich (configuration space) von 256 Byte, der alle Angaben zur automatischen Erkennung enthält. Die Angaben werden während des Bootvorgangs aus einem Speicher auf der PCI-Karte gelesen. Dabei unterteilt sich der Konfigurationsadreßraum in einen Header und einen geräteabhängigen Bereich. In den PCI-Spezifikationen sind lediglich Angaben für den 64 Byte umfassenden Header festgelegt. Die verbleibenden 192 Byte enthalten geräteabhängige Informationen. Hier finden sich bei einem PCI-Motherboard beispielsweise Register für die Cache- und DRAM-Speichersteuerung sowie für die Bridges (ISA, Eisa). Bei der Fehlersuche ist jedoch nur der Header von Bedeutung. Das Auslesen der hier gespeicherten Daten erfolgt über unterschiedliche Verfahren zur Geräteerkennung.
Nach der Device-Erkennung werden die Geräte als PCI Device Listing auf dem Bildschirm angezeigt und in die ESCD-Tabelle (Extended System Configuration Data) geschrieben. Wichtig zur Konfiguration ist hier die Vendor ID (Herstellercode) und die Device ID, die beide auch in der Geräteliste erscheinen. Jedes Erkennungsverfahren beruht darauf, alle bekannten Vendor- und Device-IDs vom BIOS abzufragen. Es wäre zwar sicherer, alle theoretisch möglichen Kombinationen zu testen, allerdings gibt es bei diesem Verfahren 4294836225 Möglichkeiten was den Bootvorgang auf mehrere Minuten, wenn nicht gar Stunden ausdehnen würde. Die Vendor-ID wird wie die Device-ID durch die PCI-Special-Interest-Group (PCISIG®) vergeben, wobei eine Vendor-ID nur auf Herstellerantrag ausgestellt wird. Besonders Hersteller von PCI-Karten mit kleinen Stückzahlen verzichten oft auf diesen Ein-/Antrag. Die BIOS-Hersteller übernehmen die Listen und legen sie fest im System ab. Aus diesem Grund ist es nicht ungewöhnlich, daß ein relativ neues PCI-Device von einem älteren PCI-Bios nicht erkannt wird. Allerdings ist das kein Grund, daß das Device nicht verwendet werden kann. Denn hier kommt die interne Plug-and-Play Funktionalität zum Tragen, die neben den internen Karteninformationen auch Treiberdaten ausliest. Daher kann Windows (außer NT) auch dann mit Plug-and-Play Komponenten umgehen, wenn es sich um ein älteres Bios handelt oder sich die Karte nicht nach den Vorgaben richtet. Besonders ISA-Karten mit Plug-and-Play Unterstützung profitieren davon.
Weniger schön ist diese Vorgehensweise der Hersteller für NT- und Linux-Nutzer: Wird die Karte nicht vom BIOS erkannt, scheitert hier die Installation. Wesentlich seltener kommt es vor, daß zwar das BIOS PCI-Devices korrekt erkennt, die Hardware-Erkennung unter Windows jedoch nicht fündig wird. Dies läßt auf eine generelle Fehlkonfiguration im Betriebssystem schließen. In diesem Fall sollte man das falsch erkannte Gerät im Gerätemanager löschen und bei einem Systemstart erneut einlesen. Funktioniert dies nicht, hilft oft der Einbau der Karte in einen anderen Slot. Dies sollte auf jeden Fall dazu führen, daß ein neues Device von Windows erkannt wird. Weitere Tips finden Sie dazu auf unserer FAQ-Seite.