Der PCI-Decoder im 1032E

Entwicklung & Technik
Die PCI-Bus Technologie ist der Höhepunkt einer sehr langen Entwicklungsgeschichte von verschiedenen, parallelen Bussystemen. Mittlerweile ist der PCI-Standard (PCI-spec.2.1/2.3) technisch ausgereift und relativ bedienerfreundlich. Unser PCI-Core wurde auf Basis eines cPLD-Entwicklungssystem von Lattice® entworfen und konnte in einen 6000 Gatter Chip der ispLSI-Serie erfolgreich geroutet werden. Da die PCI-Spezifikation immer umfangreicher wird und eventuell auch noch Änderungen bezüglich der Bus-Implementierungen und BIOS-Funktionen folgen, sind wir in der Lage, ebenfalls auf diverse Änderungen zu reagieren, ohne die umliegende Schaltung abändern zu müssen. Dies gilt jedoch nur im Rahmen der elektrischen- und programmiertechnischen Möglichkeiten, den diese 1000er ISP-Chip-Serie zulässt. Dabei bleiben alle Softwaretreiber unberührt, sodaß der Anwender auch später kaum schwierigkeiten haben wird, seine Programme auf neuen Designs einzusetzen, da alle Registerbelegungen durch uns entsprechend vordefiniert und angepasst werden. Eine Umstellung auf PCIe (PCI-Express®) ist hiebei jedoch aus technischen Gründen ausgeschlossen, da dies ein völlig anderes Bus-Konzept betreffend der elektrischen Ankopplung und Datenübertragung darstellt.
 
Die Entwicklung und Fertigung optimaler Industrieprodukte aus diesem Bereich ist nach wie vor ein wichtiges und strategisches Ziel von Kolter Electronic. Vorteile des PCI-Busses liegen in der relativ unkomplizierten Installation der Software, wie auch einer möglichst problemlosen Konfiguration durch automatische Vergabe von Ressourcen, bsp.: I/O-Adressen. 

Ferner werden durch die automatische Vergabe der Resourcen, i.d.R. Bus-Konflikte vermieden. Weitere Highlights sind: 32-bit PCI-Adressbreite, 16-bit Datenbreite (User-Bus) und ein 33 MHz Bustakt mit hoher Datenübertragungsgeschwindigkeit zwischen Prozessor und PnP-Peripherie. Die jeweilige Karteninformation kann leicht über Software (PC-Tools) abgefragt werden. Durch die Treiber-Software ist zudem über Hersteller- und Produkt-ID eine automatische Identifikation eingebauter PCI-Karten jederzeit möglich.

 


Foto: (c) Lattice® Entwicklungssystem ispEXPERT
PNP-Mechanismus
Weitere Vorteile des PCI-Bus ist ein auf der Karte befindlicher 64-Byte Informations-Header. Dieser identifiziert verschiedene Daten, wie Hersteller, Kartenart und Karten-Nummer des Herstellers, die auf den Karten enthalten sind. Der Plug & Play-Mechanismus gewährleistet eine automatische Einstellung der PCI-Karte in jedem modernen PC. Beim Hochfahren des Rechners identifiziert das PCI-BIOS eingesteckte PCI-Karten und vergibt I/O-Bereiche automatisch.

Ausstattung
Abgesehen von ein paar kleinen Nachteilen, sprechen die Vorteile der PCI-Karten für sich. Geringe Mehrkosten amortisieren sich durch das optimale Lieferangebot von Kolter Electronic in kürzerster Zeit. Der Anwender profitiert zum einen von Windows-Treibern (bsp. klibdrv.sys), die im Lieferumfang aller unserer PCI-Karten enthalten sind, desweiteren werden auch Treiber und Beispielsourcen für die automatische Adressvergabe durch das Plug & Play-Verfahren ohne Mehrkosten mitgeliefert. Dieser identifiziert alle notwendigen Parameter-Daten und liefert die vom BIOS vergebene I/O-Adresse, erleichtert also die Ansteuerung der jeweiligen Meßkarte. Bei Verwendung eigener Hardware, kann der KlibDrv-Treiber beim Hersteller Entech-Taiwan für einen relativ kleinen Obulus nachlizensiert werden. Somit kommt der Anwender in den Genuss von Support sowie neuen UpDates.


Es folgen allgemeine Erläuterungen zum Thema PCI:

PCI-Entwicklung
Am 22. Juni 1992 wurde der PCI-Bus in der Spezifikationsversion 1.0 erstmalig der breiten Öffentlichkeit vorgestellt, womit sein Siegeszug begann. Die Revision 2.0 war ab April 1993 und die gegenwärtige Version, mit der Bezeichnung 2.1 (bzw. aktuell 2.3), ist seit dem ersten Quartal 1995 erhältlich. Im gesamten gesehen ist der PCI-Bus nicht nur ein neues Bussystem, sondern umfaßt vielmehr eine ganze PC-Architektur, das heißt der PCI-Chipsatz stellt eine ganze PC-Architektur zur Verfügung. Der PCI-Bus kann als CPU-unabhängiges Bussystem zur Verbindung des DRAM-Subsystems mit High-Speed-I/O und einer Brücke zu anderen Bussystemen verstanden werden. PCI-Erweiterungskarten können so in allen PCI-Computern unabhängig von der Host-CPU eingesetzt werden; lediglich das karteneigene BIOS muß die Konfigurationssoftware für die verschiedenen Prozessoren unterstützen. Das PCI-Bios hat Informationen über die benötigten Ressourcen aller im System verwendeter Erweiterungskarten. Die anschliessende Konfiguration geschieht durch wechselseitiges Zuweisen und Reservierung der für jede Karte benötigten Ressourcen. Beim Booten fragt das PCI-Bios alle Zusatzkarten nach den benötigten Ressourcen wie I/O - Adressen, Speichergrössen, Interupts usw. automatisch ab. Um auch andere Karten (z.B. ISA-Karten) nutzen zu können, kann über eine entsprechende Bridge der nötige Bus an den PCI-Bus angekoppelt werden, wodurch auch ältere Karten weiterverwendet werden können.

PnP Plug-and-Play
Was ist eigentlich Plug-and-Play? Plug-and-Play ist eine Eigenschaft, die in der Werbung oft mit "Einbauen und Loslegen" bezeichnet wird. Dieses Versprechen wird jedoch oft nicht eingehalten, weshalb die Installation von Plug-and-Play Komponenten unter Umständen recht problematisch sein kann. Es sind vier Komponenten, die bei Plug-and-Play zusammenarbeiten müssen, das BIOS, das Betriebssystem, die Hauptplatine und das einzubauende Gerät (=device bzw. Karte). Grundlage sind die Ressourcen des PC, die 16 Interrupt Kanäle, die 8 DMA Kanäle so wie die Adressen für I/O- und Speicherbereiche. Das System sollte einwandfrei erkennen können, welche dieser Ressourcen belegt und welche frei sind. Das einzubauende Gerät gibt vor welche Kanäle und Adressen verwendet werden können, deren Einstellung durch Jumper oder durch Software erfolgt. Wichtig ist jedoch auch, dass dieses Gerät ein Lesen seiner Einstellung ermöglicht. Im Idealfall, der leider selten anzutreffen ist, erfolgt bei der Installation über die Software eine Feststellung welche Kanäle und Adressen frei sind und das Gerät wird automatisch auf freie Kanäle und Adressen über das Rechner-BIOS eingestellt. Der PCI-Bus nutzt 32 bzw. 64 Leitungen die zur Daten- und Adreßübertragung verwendet werden. Das spart zwar Leitungen ein, erhöht jedoch die Zeit die notwendig ist, um Daten zu übertragen beim Schreiben auf zwei und beim Lesen auf drei Buszyklen. Daraus resultieren die maximalen Übertragungsraten von 66 MB/s beim Schreiben und 44 MB/s beim Lesen. Jeder Datentransfer beginnt mit einem Adreßzyklus. Hierzu werden dann auf den gemultiplexten Daten/Adressleitungen eine Adresse und auf den 4 Befehlsleitungen (CBE#0..3) ein Befehlscode angelegt, um entweder die kartenspezifischen Eigenschaften auszuloten oder eine Bus/Datentransfer einzuleiten.

I/O-Port
Die PCI Architektur stellt in der Regel eine 32-bit-Adresse für die Memory- und I/O-Port-Zuweisung zu Verfügung, jedoch werden oft nur Adressen zwischen 0000 und FFFFh für den I/O-Bereich initialisiert. Somit kann eine direkte Kommunikation zwischen Prozessor und Erweiterungskarten bestehen (die meisten Befehle an Erweiterungskarten werden über Port-I/Os abgewickelt). Damit die Karte auch richtig als I/O-Port-Karte erkannt wird, muss das Basisadressregister programmiert werden. Im Header des Konfigurationsspeicher befinden sich 24 Byte die zum Zuteilen von Shared Memory, I/O-Ports und Erweiterungs-ROM dienen. Somit kann man die Speicherbereiche fast beliebig zuordnen und ermöglicht eine automatische Konfiguration, welches das Problem der Adresskonflikte sauber löst. Bei 32-bit-Adressen besteht die Möglichkeit 6 I/O-Port und/oder Speicher Bereiche zu positionieren. Die beiden Adressarten unterscheiden sich durch das 0.bit innerhalb des Konfigurationspeichers. Bei Null ist es ein Speicherbereich (MEM) und bei eins ein Port (I/O).

Die BIOS-Konfiguration
Jedem Agent ist ein Speicherbereich zugeordnet, in dem sich seine Konfigurationsdaten befinden. Dieser besteht aus 64 Registern mit je 32 Bytes, die im Little-Edian-Format angordnet sind. Somit ergibt sich eine Speichergesamtgröße von 256 Bytes. Dieser Speicher wird beim Start des Rechners vom BIOS ausgelesen, um die angeforderten Ressourcen zuteilen zu können. Der erste Teil des Konfigurationsspeichers ist ein 64 Byte großer Abschnitt, der bei allen Agents gleich ist, da sich hier Konfigurationsdaten befinden, die für das Setup notwendig sind. Der restliche Speicher wird vom Hersteller eingeteilt und verwendet. Weiterhin existieren Register bei denen man das Verhalten der PCI-Einheit bei Bustransfers einstellen kann. Dies sind sogenannte Befehlsregister. In dem Statusregister wird er momentane Zustand des Agent registriert. Im dritten wichtigen Register steht der Klassencode, dies ist eine Beschreibung, wobei es sich bei der Einheit handelt.


Bild: typischer PCI device config-header
ISA Karten
Bei reinen ISA-Karten gibt es fast immer keine Möglichkeit die eingestellten Werte zu lesen, weshalb sie auch von Testprogrammen, wie zum Beispiel MSD nicht erkannt werden können. Welche Ressourcen verwendet werden, lässt sich nur an den Treibereinträgen in Config.Sys, Autoexec.Bat oder in *.INI Dateien erkennen. Da es kaum möglich ist auf diesem Wege die Einstellungen sicher auszulesen, werden diese Karten meistens nicht erfasst. Sie können daher von den Plug-and-Play Routinen als frei geführt werden und es sind Doppelbelegungen möglich. In diesem Fall helfen keine Testprogramme, sondern nur sorgfältige Aufzeichnungen, der durch diese Karten belegten Ressourcen.

ISA - PNP
ISA-Karten mit PnP-Anbindung enthalten nach dem 1993 festgelegten Standard einen I/O-Chip, in dem alle von der Karte verwendbaren Kanäle und Adressen gespeichert werden. So kann, falls das BIOS nicht nur PCI sondern auch ISA Plug-and-Play geeignet ist, die Karte erkannt und die zu verwendeten Kanäle und Adressen können ausgehandelt werden. Die Daten werden als Logical-Device gespeichert, wobei es durchaus möglich ist das eine Karte mehrere Logical-Device belegt. Bei bestimmten Soundkarten zum Beispiel können es mehr als fünf sein.

PCI Plug-and-Play Karten
Diese Karten verwenden meist einen getrennten I/O-, Speicher- und Konfigurationsbereich und entsprechen damit allen Plug-and-Play Anforderungen. Es gibt allerdings auch Karten, die mit Jumpern einzustellen sind und für die dann diese Aussage nicht mehr zutrifft.

Plug-and-Play mit Windows 95/98
Aufgrund der vorstehend geschilderten Probleme wurde Win95 mit eigenen Plug-and-Play Funktionen ausgestattet und in Win98 noch weiter verbessert. Vor allem wurde die Anzahl der beigefügten Treiber stark erhöht, die überwiegend bei der Hardwareerkennung während der Installation verwendet werden. Dabei werden zunächst Konfigurationsdateien und im ROM enthaltenen Angaben ausgelesen, geladene Treiber und das BIOS werden durchsucht. Durch die große Zahl der auszuwertenden Informationen dauert die Hardware Erkennung recht lange. Problematischer ist die Erkennung der ISA-Karten. Dazu wird eine Datenbank verwendet, in der die verschiedensten Hardwarekomponenten verzeichnet sind und mit ihnen die Default (Standard) Einstellungswerte. Es wird nun bei der Erkennung durch einen Lese/Schreibzugriff auf typische Ports in I/O-Bereichen entsprechend vorgetestet und geprüft. Befindet sich in diesen der Wert FFh, so werden sie als frei angesehen. Bei den Kanälen wird eine Anforderung ausgelöst, bleibt diese unbeantwortet, wird dieser als frei bezeichnet. Für die belegten Ports und Kanäle wird nun in der Datenbank die Hardwarekomponente gesucht und diese Karte als mit diesen Werten vorhanden vermerkt. Das bedeutet, dass durch die indirekte Identifizierung eine Netzwerkkarte mit das Adresse 220h durchaus als Soundkarte erkannt werden kann, obwohl diese gar nicht vorhanden ist. Daher sollten möglichst die Standardadressen verwendet werden. Die Identifikation mit und Verwendung von Standardadressen kann auch dazu führen, dass bei einer erneuten Hardwareerkennung manche Karten nicht funktionieren, weil sie wieder mit Standardwerten versehen wurden. Bei nicht voll PnP-kompatiblen PCI-Karten kann man sich die Vorteile des Plug-and-Play indirekt zunutze machen.

Über Start>>Einstellungen>>Systemsteuerung>>Hardware>>weiter>>nein>>weiter wählt der Anwender die Hardwarekomponente manuell aus oder installiert über Diskette/CD. Dabei notiert man die von Win95/98 vorgeschlagenen und eingestellten Werte. Nach beenden von Win95/98 und erneutem einschalten des Rechners, stellt Windows die Werte auf der Karte ein und installiert die Karte im Betriebssystem. Nach einen Neustart sollte dann die PCI-Karte als device funktionierend installiert sein.

BIOS - Einstellungen
Im Rechner-BIOS sind meistens die Interrupts zu einzelnen PCI- Slots zugeordnet oder eine generelle ISA/PCI- Zuordnung möglich. Diese sollten in jedem Fall berücksichtigt und die Einstellung entsprechend der vorhandenen Slot-Hardware verändert werden.


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 ]