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

  • Target Controller für PCI 2.0 / 2.1 und 2.2 (2.3)
  • 33 MHz PCI-Clock/Transfer
  • max. 8 Ms/s Datendurchsatz (16 bit parallel)
  • PCI-Core mit 32-bit Adress/Datenbreite, 5 Volt
  • spezial User-Bus mit 16-bit slow-rate (90...132 ns)
  • automatische Vergabe von I/O-Adressen
  • echter PnP Plug & Play-Mechanismus
  • 64 Byte Informations-Header
  • automatische Identifikation eingebauter Karten über Hersteller-ID
  • wählbare Produkt-ID per DIP-Schalter
  • slave-Betrieb für einfache I/O-Steuerung
  • automatische Konfiguration durch PCI-BIOS
  • Vermeidung von Resourcenkonflikten


Bauteil-Daten des 1032E lt. Lattice:

  • 100 (125) MHz toggle clock
  • 70 (90) MHz Feedback  fmax
  • 10 ns Propagation Delay
  • 3 ns 10% to 90% r/f-time
  • 6000 PLD-Gates
  • 64 I/O-Pins, free
  • 192 Register
  • 8 pF Input Capacitance
  • 5 Volt real TTL-Type
  • 0 - 70 C Grad ambient temperature
  • 4.75 - 5.25 Volt supply volage
  • 20 Years Data Retention
  • PLCC 84 case
  • In System Programmable, 10000 cycles
  • Electrically Erasable and Reprogammable
PCI-Target-Bridge

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.


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 ]