![]() |
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 |
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.
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.